lunes, enero 30, 2017

El Narratorio: ANTOLOGÍA LITERARIA DIGITAL Nro 11

Ya ha sido publicada la Antología literaria digital del blog El Narratorio, correspondiente a Enero. EN la misma se incluye un cuento mío, El árbol y los tecnólogos. Pueden ver los enlaces de descarga y lectura aquí: El Narratorio blog: ANTOLOGÍA LITERARIA DIGITAL Nro 11.


miércoles, enero 25, 2017

La tentación de Unreal Engine

Existe un sesgo cognitivo cuyo nombre no recuerdo porque mi memoria ya no es lo que era (aunque en realidad, nunca fue nada que valiera la pena) que es más o menos lo siguiente: solemos pensar que si hemos invertido tiempo, esfuerzo o dinero en algo, no será rentable abandonarlo para empezar desde cero. Creemos que al final, de alguna manera podremos resarcirnos, y así seguimos embarcados a veces en empresas que no llevan a ningún lugar. Moraleja: hay que saber cuándo abandonar.
El caso es que me pregunto si no estaré incurriendo en ese error, si no debería lanzarme de cabeza en Unreal Engine y empezar a aprenderlo ya, descartando casi dos años con Unity3d. La tentación es grande. Después de todo, estamos hablando del mejor motor del mundo.
En estos momentos, a principios del 2017, solo veo dos opciones interesantes para los desarrolladores de juegos: Unity y Unreal. CryEngine está enfocado mayormente en mejorar sus gráficos y he leído quejas sobre su editor. Lumberyard es un intento de clonar al Unreal, y por el momento no cuenta con la comunidad ni las funcionalidades con que cuenta éste.
Siempre he recomendado que si vas a aprender algo, aprende a hacerlo con la mejor herramienta posible. En este caso, no seguí mi propio consejo porque al momento de decidir, instalar Unreal era bastante complicado. Cuando logré reunir todos los requisitos, ya el equipo casi completo estaba trabajando en unity3d, y además la licencia de Unreal no permitía hacer proyectos con fuente abierta.
Y como les decía, ahora me estoy preguntando si no será el momento de dejar Unity3d atrás. Una decisión difícil.

lunes, enero 23, 2017

Algunos avances

Parece que enero es mes de programar, luego de unos días dedicados a la novela, el resto del tiempo ha sido invertido en probar cosas.
La IA va cogiendo forma (lo que no sé qué forma) y a veces logra combatir con éxito. Los diálogos han mejorado muchísimo y ya afectan muchas cosas del juego. El sistema de misiones casi que funciona y quizás necesite tomármelo en serio en estos días y hacer algo que valga la pena.
En fin, que rompiendo cositas aquí y allá he logrado un prototipo casi jugable, en apenas unos meses de trabajo, si sumo el tiempo real que le he dedicado al proyecto. Alguien con más experiencia creo que habría conseguido más, pero eso es lo que hay. Por el momento, sigue sin aparecer ayuda cercana, e incluso, uno de los mejores contribuyentes del proyecto no da señales de vida desde hace tiempo, así que el apartado visual está un poco descuidado y seguirá así por ahora. Es por eso que no he publicado videos ni imágenes, no es solo que los gráficos sean placeholders hechos incluso por mí mismo, sino que hasta la escena de prueba es un amontonamiento de cosas sin relación con lo planificado en el guión. Faltan objetos adecuados y animaciones que encajen con esos objetos. Por ejemplo: pensé que el uso de armas de dos manos como fusiles de asalto requerirían algún manejo especial, y resulta que no, es mayormente trabajo del artista hacer que coincidan las manos del personaje con los puntos de agarre del arma. O al menos, eso me explicaron, cualquier corrección al respecto es bienvenida.
Para esta semana pienso implementar una nueva funcionalidad: el mapa. Resulta que no andaba tan desencaminado al suponer que se podía lograr con una cámara y Render to Texture. Lo que no sabía era cómo asociar eso a un elemento del GUI, y eso se consigue usando una Raw Image, y eso es lo que pienso probar hoy en casa.
En fin, que el proceso de aprendizaje me ha resultado muy útil, aunque el proyecto en sí solo sean un montón de cosas que funcionan a medias. Un consejo, si deciden aprender a desarrollar juegos, les recomiendo que lo intenten primero con Unreal Engine. Como siempre digo, si vas a aprender a hacer algo, aprende a hacerlo con la mejor herramienta o metodología disponible. No es que Unity sea malo, es que Unreal... bueno, no podemos discutir que es el mejor motor de juegos del mundo.

jueves, enero 19, 2017

Obsidian se trae algo entre manos

El sitio web de Obsidian tiene algo nuevo, y ni idea de qué se trata. Al parecer, hay proyecto nuevo en el ambiente, de nombre código Proyecto Lousiana. Hay diversas especulaciones que afirman que se trata de Pillars of Eternity 2. Un análisis hecho por gente que obviamente no tiene mucho que hacer revela referencias a Deadfire, un archipiélago del mundo de PoE, además de que se han descubierto otros símbolos en el código de la página, también provenientes de PoE.
Sea lo que sea, probablemente será divertido, aunque es ya una opinión muy extendida que el género medieval está un poco saturado. Que ni una espada o un hechizo más, vaya.

miércoles, enero 18, 2017

Reformando la IA

La semana pasada pasé un buen rato mejorando la IA, en especial, el sistema de percepción. Había contado incialmente con RAIN para esa tarea, sin embargo, la falta de soporte me hizo descartar este plugin que parecía tan prometedor. Tocaba entonces hacer todo a mi manera, desde cero.
El concepto inicial empleaba un script para cada tipo de entidad en la escena. El sistema funcionaba, pero no era para nada óptimo reescribir código iguales o muy parecidos para cada posible IA. Toda una burrada de mi parte, así que decidí unificar todo en un solo script, trabajo que terminé ayer. Ahora la personalización de la IA dependerá de un conjunto de datos pasados al script, los cuales aún no acabo de definir.
Tengo algunas ideas al respecto, pero todo muy vago. Cada entidad debería tener nociones de algunos lugares relevantes (por ejemplo, dónde patrula, o a dónde retirarse durante la noche), cómo reaccionar ante el jugador, y sobre facciones, enemigos, etc.
De paso, descubrí una serie de problemas en el sistema de percepción, que también arreglé. Mi método, muy sencillo, se basa en usar un BoxCastAll para detectar todo lo que está delante de la entidad:

var hits = Physics.BoxCastAll(new Vector3(gameObject.transform.position.x, gameObject.transform.position.y + 5.0f, gameObject.transform.position.z + 5.0f), new Vector3(25, 10, PerceptionRange*5.0f), gameObject.transform.forward, Quaternion.identity, 120.0f);

A continuación hay que procesar esa lista de resultados a ver si el jugador u otro NPC están incluidos. Ojo, que además hay que revisar si una entidad ya no es visible. Muy burdo, pero funciona, y se aceptan sugerencias (aunque sé que no recibiré ninguna).
Por el momento he logrado que los NPC ignoren al jugador, se acerquen a hablar con él, o se lancen a atacarlo. Falta pulir, precisamente, que se acerquen adecuadamente, algo que será necesario también para el combate. Sobre eso espero tener resultados pronto.

lunes, enero 16, 2017

Días de programador

Luego de tener unos días de escritor, cambié por completo al modo programador. Estuve en casa atendiendo algunos trabajos de reparación, así que en los ratos libres le hice una ofensiva al prototipo que me sirve de banco de pruebas.
Fue un trabajo bastante desorganizado, porque saltaba de una cosa a otra según me viniese a la mente, pero que se puede resumir en lo siguiente:
  • Mejoras al sistema de diálogos: ahora las condiciones funcionan y se pueden asignar misiones (aunque aún necesito una herramienta de edición).
  • Sistema de sensores para la IA. Me deshice de RAIN e implementé un sistema básico que permite a los NPCs "ver" al jugador y actuar en consecuencia. Aún requiere pulido y mejoras.
  • Comercio. Ahora es posible comprar y vender cosas.
  • Equipar/enfundar armas.
  • IA muy primitiva, que puede atacar pero no usar habilidades.
El avance se ha visto limitado por no poseer animaciones adecuadas para algunas acciones, como por ejemplo el uso de armas a dos manos, en este caso, rifles. Eso, sin descontar mi propia inexperiencia en el diseño de algo tan complejo como un sistema de objetos+combate.
Pero me resulta reconfortante ver que en apenas siete meses he llegado bastante lejos, programando completamente solo. No sé qué podría hacer si tuviese ayuda de dos o tres programadores experimentados.