En una ocasión anterior dije que parece ser imprescindible un alto grado de estupidez para ser guionista de Hollywood y lo ratifico. También ratifico que el grado exigido es bastante alto. Debe haber un doctorado para guionistas estúpidos en alguna universidad de Estados Unidos, porque las cosas que se ven últimamente son una delicia.
A ver, señores, que las películas de los 90 no eran gran cosa, la verdad. Todos íbamos a la sala de video esperando ver un paquete, donde el bueno, Van Damme, Seagal, o el que fuese, se batía en desventaja con una docena de secuestradores en un edificio, un barco, un tren, o lo que se terciara. Así, no había que inventar nada más. Eran unos tipos malos de manual, que entraban matando a alguien por gusto y les cogías odio sin más contratiempos. El héroe de turno mataba a los secuaces uno por uno, hasta llegar al jefe final, y todos nos íbamos a casa tan panchos, a esperar la próxima de Van Damme, Seagal, o el que fuese. Ninguna se ganó un Oscar, pero recaudaban bien y divertían.
Pero es que ya ni siquiera son capaces de hacer una variante de una idea tan simple y como ejemplo de estupidez suprema tomemos el caso de la más reciente de Bruce Willis, que ya está viejito, pero al menos hace bulto. Juzguen ustedes mismos: nuestro héroe de acción veterano millonario contrata a un grupo de mercenarios como escolta, porque espera una encerrona por parte de un terrorista en una visita a cierta fábrica abandonada. Lo que no les dice es que el ataque es 100% seguro (sí, flojea un poco el guión por ese lado), así que nuestros mercenarios buenos se verán superados en número y en armamento. Aunque el escuadrón de héroes supuestamente está compuesto por profesionales, los tipos se meten en la boca del lobo armados con pistolitas y sin protección de ningún tipo. Como lo oyen.
El Bruce Willis millonario y su jefe de seguridad, que saben lo que va a suceder, ni siquiera tienen la precaución de ocultar de antemano en el lugar un alijo de armas. Yo habría escondido armamento suficiente para detener una división de infantería con apoyo de blindados. Pero tampoco. En fin, que los protagonistas son tan borregos e ineptos, que se merecían que ganara el malo. Por imbéciles.
De tan risible, la trama no consigue que alguien medianamente inteligente se sensibilize con la situación de los protagonistas, odie a los villanos, y disfrute con las escenas de acción donde los primeros le dan una paliza a los segundos, como dios manda. Más bien a mediados de filme empiezas a preguntarte por qué coño estás perdiendo hora y media de tu vida en eso.
Si alguna vez escribes una historia, es bueno que te detengas a verificar la lógica y racionalidad de lo que pasa, o acabarás escribiendo sandeces como Hard Kill.
Más guiones estúpidos
Horizon Zero Dawn, al fin
Hay un par de juegos de la buena (o mala) suerte. Cada vez que los instalo en una consola, lle ga un cliente y el equipo se vende. Son Diablo 3 y Horizon Zero Dawn. En el primero logré llegar a la segunda ciudad en una PS3, luego lo intenté varias veces y lo mismo. En Horizon, había estado a punto de salir de la aldea cuando la PS4 se vendió, dejándome a medias.
Entonces llegó la versión de Horizon Zero Dawn para PC y me alegré muchísimo. Si todos los astros se alineaban correctamente, podría disfrutar del juego, a pesar de los malestares que me aquejan últimamente. Y el juego llegó, aunque con malas noticias: su rendimiento no era muy bueno. Lo probé aquí en el trabajo y nada. Las cosas no pintaban bien. Si no funcionaba con una GTX 980, 32Gb de RAM y 16 núcleos físicos, ¿cómo me iría en casa? Pues la primera vez, muy mal. La cinemática de inicio se entrecortaba y en algún momento se colgó. Para colmo, ¡el juego no se puede jugar con mando!
Ahí lo dejé, hasta que hace un par de días le eché una mirada y para i sorpresa, la cinemática de inicio iba bien. Luego el juego arrancó muy bien, estable, y con un rendimiento más que aceptable: 70 o más FPS, a calidad media (según pruebas, no hay gran diferencia entre baja y alta). Nada mal para un hardware modesto y ya pasado de moda.
El juego en sí no decepciona: aunque la historia es predecible a veces (tampoco vamos a pedir una trama de premio Hugo) es bastante atrayente. Ni hablar de los gráficos, ya saben que para mí los gráficos son secundarios en un RPG si me ofrece buena jugabilidad e historia. Pero si me dan todo, tampoco lo voy a rechazar.
Dicho sea esto, es bueno aclarar que este no es un RPG al uso, de la vieja escuela. Es más bien un RPG consolero, y eso se nota en la escasez de misiones secundarias y que todas las habilidades de su árbol son semi-pasivas: afectan aspectos de los ataques, recolección, etc. Todo muy orientado al juego con mandos, que no ofrece las ilimitadas combinaciones de un teclado (aunque sí protege más tus delicadas manitas de gamer, algo que echo muchísimo de menos).
Un par de sesiones de juego no son suficientes para valorar un RPG, pero Horizon, por el momento, me divierte y creo que es muy posible que lo termine, si el dolor de las manos me lo permite. Incluso insisto en recomendarlo como un buen juego, así que si pueden, no dejen de probarlo.
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
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
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
Novela terminada
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.
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
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
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.