Nuevo tutorial de Godot: IA con Resources

 
Con dos días de atraso, pero ya está terminada la primera parte de mi tutorial de Inteligencia artificial simple con Resources. El mismo es una rspuesta a una vieja pregunta que vi en el reddit de Godot: ¿es posible implementar algo similar al sistema de IA de Unity basado en ScriptableObjects? Pues sí. Me tomó algún tiempo explorar las posibilidades de las clases y herencia en GDScript, sobre todo en el caso de los Resources, y luego un poco más readaptar mi enfoque a Godot y sus Resources.

 

La segunda parte debería estar lista en tres o cuatro días y cubre un par de elementos más avanzados, incluyendo el movimiento del NPC hacia el jugador. Todo muy simple, para facilitar la comprensión y que ustedes puedan adaptar el código a sus necesidades.

También he  agregado un pequeño archivo al primer tutorial con el script de maneja de la cámara y una imagen de la configuración del nodo de la misma (posición, ángulo, etc)

Cámara isométrica en Godot, video tutorial

Luego de muchas dificultades, al fin he logrado terminarlo y subirlo. Y como dicen los youtubers: dale like y suscríbete, o por lo menos comparte. Recuerden dejar sus comentarios con posibles mejoras, así aprendemos todos que es lo más importante.

Nunca seré youtuber


Anoche me acosté muy tarde (según mis estándares) intentando hacer mi primer tutorial de Godot. Deben haber sido un total de seis o siete tomas completas, sin contar las que interrumpí porque pasó una motocicleta o un camión frente a mi casa y estropeó la grabación, en español e inglés.
Definitivamente, esto no es lo mío. Para empezar, hay ciertas dificultades técnicas. La primera, como pueden suponer, es que mi habitación es muy ruidosa. Ya sea un auto, o los vecinos, pero siempre habrá algún ruido de fondo que venga a joder la cosa. La otra es que no tengo un micrófono adecuado, aunque el que tengo no es malo. Estoy usando uno que era de unos audífonos, por tanto no había forma de apoyarlo en nada. La solución fue ponerme el nasobuco y meter el micrófono dentro para mantenerlo cerca de mi cara (y de paso bloquear un poco el sonido exterior). El resultado es bueno a veces, pero otras se escuchan unos resoplidos que parezco Darth Vader con asma.
Aún si lograra resolver lo anterior, mi inglés suena horrible por la falta de práctica, y tampoco es que mi voz sea muy agradable de oír, ni siquiera en español. Quizás debería practicar más la lengua de Shakespeare, hablando solo en casa o algo así. En fin, que hoy haré una última prueba, y si no estoy conforme tendré que prescindir de la oratoria y sustituirla por textos. Luego de eso viene la parte de editar el video, que tampoco es una de mis habilidades de más nivel y que me resulta aburrido. Por todo eso, creo que le dejaré lo de ser youtuber a otros.

Casi listo para grabar

A pesar de las molestias en las manos he logrado resolver algunos detalles con vistas a crear un par de tutoriales de Godot. El primer problema que encontré fue que RecordMyDesktop no producía buenos videos, había algo que aceleraba la velocidad de reproducción, y resultó ser la compresión al vuelo. Para capturar todo el escritorio, simplemente no se selecciona ninguna ventana antes de grabar.
Luego tocaba resolver lo del micrófono, que distraído como siempre, ni siquiera había activado en la configuración del sistema. Luego de eso, logré grabar el escritorio y el audio del micro. Aquí el asunto es lograr evitar el ruido de la calle y los vecinos, que los tengo a pocos metros de distancia y con apenas una pared de por medio. Sin mencionar que acá los vecinos suelen ser ruidosos, porque no hay leyes al respecto, y las que hay, no se respetan. De todas formas, estoy valorando usar textos en inglés y español para ahorrarme el trabajo de hablar, porque mi voz no es que sea tan agradable de escuchar. No hay nada como un tutorial donde el autor no te atormenta con una continua parrafada a toda velocidad.
En fin, que solo queda que me disponga a hacerlo. Supongo que en una semana o dos tendrán mi primer tutorial en Youtube, mostrando el proceso de implementar una cámara isométrica con Godot.

No me ha llevado la COVID

Aunque sí tengo que lamentar algunos problemas de salud. Luego del maratón de escitura requerido para  terminar la novela, he tenido que tomarme un largo descanso por el dolor en las manos.  Muy poco trabajo o juegos en estos días, en los que he tenido que mantenerme a base de series y documentales. A pesar de eso, no he notado  mucho alivio y creo que tendré que ir a un médico a ver si consigo algún tratamiento.
Ojalá no me ingresen por sospechas de COVID 19.

Novela terminada

Luego de una maratón de escritura durante la última semana, concluí el primer borrador de la novela para el cocnurso Hidra, que espero sea a fines de año. Durante el proceso, la tecla L de mi teclado falleció y ahora estoy en serios problemas, pues no parece que vaya a conseguir uno a corto plazo. Ahora se inicia el proceso de revisión y pulido, para convertir este borrador en algo pulido y que además de divertido, sea del agrado de un jurado, que por si no lo saben, tienen gustos y estándares muy específicos.
Esta sería la cuarta novela ambientada en el universo de Elymuria, y por tanto, vuelve a emplear a fondo el humor para narrar la original historia de un joven enamorado que se lanza a rescatar a su amada de las garras de un dragón. Estoy seguro de que jamás leyeron algo así. Al margen de que gane o no el concurso, ya ha conseguido la aprobación de un par de amigos cuya opinión vale mucho para mí (no tanto como los casi 200 dólares del premio, pero se le acerca). Y por ahora, haré el alto que he estado anunciando desde hace rato, para dedicarme a programar por un tiempo.
Pero incluso eso tendrá que esperr, porque el esfuerzo de los últimos días me ha dejado las manos en malas condiciones, así que tendré que tomarme unos días de reposo.

Nueva novela casi terminada


Me había propuesto terminar dos novelas cortas el año pasado para sendos concursos (ahí les dejo la palabreja para que vean que sí tengo algo de vocabulario), pero al final la primera no salió como esperaba y decidí apartarme de esto de la literatura por un rato. En definitiva, no se me da lo de hacer promoción, no vendo, y las editoriales nacionales ni siquiera se acuerdan de mí. La segunda novela ya estaba iniciada y se la di a leer a mi editora personal. Sí, algunos tienen personal stylist, o personal trainer, yo tengo una editora personal. La opinión fue contundente, luego de dos minutos: "Quiero revisarte esta novela. Avísame cuando esté terminada". Y si María dice que quiere que la termine, pues hay que terminarla.
Me tomé un largo descanso antes de retomar la historia y acudir a una segunda opinión, que me confirmó que valía la pena el esfuerzo. En fin, que ya estoy en la recta final. Cosas de dos meses máximo, incluyendo el período de obligatorio reposo y subsiguiente revisión y pulido. Quizás hasta podría ganar el concurso, o al menos una mención, aunque la cosa está difícil porque es raro que se premie el humor y me han dicho que además, los jurados prefieren premiar la CF por encima de la fantasía.
Aparte de eso, he tenido algunas otras alegrías. Estoy incluido en una nueva antología de escritores cubanos, que pueden comprar en Amazon y les recomiendo que lo hagan, porque la selección de autores es magnífica. Y en algún momento, quizás el año próximo, debería publicarse una novela mía, la tercera que escribí y que ya había sido rechazada por la editorial local. Solo tuve que irme hacia occidente para encontrar alguien que sí supo darle valor.
Les recuerdo otra vez que mis novelas están en Amazon y que me vendría muy bien que las compraran. Necesito un yate nuevo para salir a pescar porque no hay comida en los mercados, y un helicóptero enchapado de oro para ir a ver a mi hija ahora que no hay transporte urbano. Aquí los enlaces:

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.

Sobre la factibilidad de los virus como armas


Un par de cosas llamaron mi atención sobre este tema en los días recientes y le estaba dando vueltas a escribir sobre el tema, desde el punto de vista de un escritor/guionista. Es factible el uso de virus como armas, ya sea por países o terroristas? En principio, sí, pero en la vida real, la situación tiene sus aristas.
Empecemos por el principio. En la nueva temporada de Strike Back, unos extremistas musulmanes croatas se apoderan de un virus, ya saben con qué propósito. Por suerte, ahí está la Sección 20 para fastidiarlos. En un frenético combate, el virus se libera y de inmediato, los terroristas a su alrededor se contagian y mueren en pocos segundos. Obviando el hecho de que no sé si sea posible que un virus mate a su víctima en segundos, esto de por sí lo convierte en un arma casi inútil, que causaría a lo sumo el mismo daño que una bomba tradicional. Al liquidar al su portador en segundos, el virus no puede propagarse y simplemente mataría a las personas cercanas que no puedan correr lo suficientemente rápido. Además, vamos a suponer que se consigue un ataque o dos con cierto éxito en la cola de Viernes Negro, replicar el virus para realizar otro ataque requeriría de un laboratorio, personal medianamente calificado, materiales no tan accesibles o rastreables por las agencias de seguridad, y quién sabe cuántas otras dificultades.
Es más sencillo y barato forrar de explosivos a un voluntario y llenarle los bolsillos de clavos. Siempre es posible conseguir más explosivos, más clavos y más voluntarios. ¿Significa esto que un virus o bacteria no es una buena arma terrorista? Pues no tan así, y luego lo veremos.
Lo otro que llamó mi atención fue la habitual teoría conspiranoica acerca de origen artificial del virus, creado, por supuesto, por EUA para afectar a nuestros hermanos los chinos, a quienes les debemos tanto (y nunca mejor dicho). Esto, alimentado por ciertas declaraciones de un funcionario norteamericano que reconocía que la epidemia, al afectar la economía china, beneficiaba la americana. Probablemente un tipo tan corto de miras o imbécil como los conspiranoicos, y ahora veremos por qué.
En el mundo actual hay dos cosas muy conectadas: 1- Todo, 2-Todo lo demás. Las distancias se han acortado mucho, puedes estar en algún lugar de Europa, tomar un tren y varias horas después estar en otro país de Europa, a diferencia de Cuba, donde puedes coger un tren y varias horas después no haber salido de la estación. No hablemos de aviones (y no me refiero a que Cubana de Aviación no tenga aviones, sino a todo lo contrario), que pueden transportar la infección y dispersarla por varios continentes a otro en pocos días. Suponiendo que desarrolles un virus, más o menos letal (la idea no es matar, sino incapacitar gente y colapsar el sistema de salud y la economía de un país), con un tiempo de incubación adecuado de varios días que permita su propagación, nada impide que en poco tiempo tengas ese mismo virus en tu propio patio. De hecho, lo tendrás, y es lo que le ha pasado a Estados Unidos. El funcionario imbécil que creía que solo China estaba en problemas ahora tiene que estarse dando cuenta de su error. Las armas bacteriológicas tienen doble filo.
En este caso sí es factible para un grupo terrorista usar un virus como un arma. Por lo general, los terroristas no tienen una economía ni un territorio o población que les preocupe, más bien sería deseable que la epidemia se extendiera lo más posible. Si mueren inocentes entre los míos, es la voluntad de Dios. De hecho, es probable que lo hayan intentado o planeado, pero la práctica debe haberles demostrado que nada supera a una bomba tradicional en un lugar concurrido.
Así que ya sabes, si en algún momento tienes que escribir sobre un virus como arma, evita estos errores. Te harán ver muy estúpido, porque cualquiera con dos dedos de frente se dará cuenta de que no te detuviste a pensar e informarte. Suena muy interesante eso del virus creado por la CIA, financiado por Bill Gates, para derrumbar la economía de los enemigos del imperialismo y de paso que las farmacéuticas (en las que Bill Gates tiene participación) se forren. Pero la vida real no funciona tan así.