Divinity: Original Sin 2 es noticia otra vez, un millón de copias vendidas

Hoy nos despertamos con esta gran noticia: DOS 2 ha alcanzado el millón de copias vendidas, nada mal para un RPG isométrico. Larian ha conseguido un juego que tiene todos los méritos para ganarse el título de clásico.
Lo más sorprendente es que haya alcanzado esta cifra siendo un juego RPG de la vieja escuela, bastante complicado, y solo para PC. Esto prueba que el género goza de muy buena salud y que hay espacio para triunfar con proyectos aunque éstos no se acojan a la moda de deslumbrar con gráficos más que con jugabilidad e historia.
Solo queda felicitarlos y desearles que el éxito se repita en su próximo título.

Y ya está en fase beta El Laberinto del Saber

El primer beta del Laberinto del Saber está terminado. Creí que nunca llegaría a concluirlo, pero a pesar de las dificultades y de que aún faltan algunos gráficos, el juego como tal puede ser sometido a pruebas más serias.
De momento, tengo pocos probadores, así que si alguien se anima, puede dejarme un comentario y le proporciono el apk o un build para Windows/Linux.

Y al fin, solucionado el problema

Una de las cosas que más echo en falta en Unity cuando trabajo en el proyecto 2d es que no tiene búsqueda de caminos. Supongo que sea imposible o muy difícil incluir un A* que funcione con todas las posibles variantes de juegos 2d. En mi proyecto tuve que inventarme un método simple para mover los fantasmas hacia el jugador, pero tenía un montón de problemas. Ayer logré mejorarlo un poco con unos simples cambios, aunque aún dista de ser un sistema de pathfinding efectivo.
Lo que hago es mover el fantasma directamente hacia la posición del jugador con Vector2.MoveTowards(), actualizando constantemente la posición de destino. Esto también me permite conservar la "falta de inteligencia" del fantasma, y que resulte fácil evadirlo poniendo una pared de por medio. Sí, porque la idea no es que te persigan por todo el laberinto, sino solo hasta que los pierdes de vista. Con eso ya estoy más cerca de lograr un beta medio decente que pueda ser presentado a más personas.
Queda por definir qué otras funcionalidades quiero incluir en el demo y trabajar para concluirlas lo antes posible. Pero la programación, por desgracia, es como la poesía: si no estás inspirado, no te sale bien. O por lo menos aún no he aprendido a obligarme a programar como mismo me obligo a escribir casi a diario, algo que tendré que solucionar.
Pero al menos ahora sí puedo decir que el remake del Laberinto del Saber está más cerca. Lo que no puedo es decirles qué tan cerca. Y queda el detalle de que no tengo cuenta de Google Play para publicarlo como debe ser.

Nueva fuente

Gracias al apoyo de un amigo, al fin he podido salir de una actualización pendiente desde hace más de un año. Sabía que tenía que hacerlo, pero solo hace un mes me dispuse en serio a ahorrar para comprar una nueva fuente de alimentación, y resultó que no tuve que esperar mucho: como mi amigo no podía traerla, me envió el dinero para que la comprar aquí. Lamentablemente, es mucho más caro que comprar en USA y no hay la misma variedad de opciones, así que tuve que conformarme con una EVGA de 500W y 40A, cuando mi elección hubiese sido una Antec de 550W que habría costado casi la mitad que esta.
Pero bueno, acá las cosas son como son, y tengo que agradecer que ya está dado el primer paso y ahora puedo pensar en actualizar otras cosas. Mi objetivo para el año próximo es mejorar la tarjeta de video, que ya se está quedando desfasada. De nuevo, lo ideal sería poder comprar en USA y traerlo, pero de no ser así... ajo y agua. Según mis cálculos, contaría con un presupuesto de unos $150 USD, otra vez gracias a un amigo y un tío, que a pesar de las dificultades siempre tratan de echar una mano cuando pueden.
Sin embargo, la nueva fuente no resolvió un problema que había atribuido a la falta de potencia de la anterior. Resulta que la PC se apaga varias veces uno o dos segundos después de encenderse, y ahora no sé si esto es causa del interruptor de encendido o de un fallo en la motherboard. Luego de experimentar este problema con tres fuentes distintas, resulta obvio que el problema no es de alimentación.
Pero este es un problema enano, supongo, y no vale la pena empañar la alegría de tener una nueva fuente.

Lo que podemos aprender del diseño de misiones de Divinity: OS 2

Hace unos días mencionaba que Divinity: Original Sin 2 no es un juego de mundo abierto, sin embargo, eso no quiere decir que no sea un excelente RPG. En especial, han logrado evitar con éxito caer en el facilismo de las misiones repetitivas, clonadas y re-clonadas hasta la saciedad en aras de inflar unas horas de juego más.
Si algo ofrece D: OS 2 es montones de misiones. Tantas, que precisamente puede volverse aburrido en ocasiones, porque algunas de ellas más que misiones, son enigmas muy difíciles de resolver. Sin embargo, hay gente para todo, y no dudo que sus jugadores habrá que disfruten ese reto.
En mi opinión, el diseño de misiones de este juego se merece un premio, por su variedad. Claro que es inevitable el clásico esquema tú necesitas X información de mí, así que haz Y tarea para mí, pero esto es un mecanismo que bien empleado, no se vuelve monótono y que además creo que es necesario. Pienso que ellos lo han empleado muy bien y en contadas ocasiones, no es como si la misión principal completa estuviese construida sobre él.
Esto me recuerda en cierta forma al Fallout 2: ir por ahí y encontrarte todo tipo de situaciones, como por ejemplo un hombre con un perro enfermo (lo siento por el pobre perro, pero me fui sin curarlo) o una parte de una armadura que está dispersa por toda la ubicación actual. Pequeñas cosas que son enrevesadamente difíciles, o muy simples, es tu elección completarlas o no.
Nada que ver con el encuentra los otros tres pads, encuentra los otros tres cuerpos, encuentra los otros tres lo que sea, que vimos en Mass Effect: Andromeda.
Y ya que hablamos de misiones, mi próxima tarea, ahora que he completado la IA, es crear un sistema de misiones que valga la pena. O copiar uno.

Cierra Runic Games

Me entero con unos días de atraso que Runic Games, el estudio creador de esa joyita que fue Torchlight, ha tenido que cerrar. Lamentable, pero considerando que Runic Games produjo muy pocos títulos durante sus nueve años, era de esperarse. Por mi parte, solo llegué a conocer Torchlight 1 y 2, pero veo en las noticias que también lanzaron Hob, una especie de aventura con puzzles.
Solo queda esperar que sus empleados continúen en la industria, y desearles suerte.

Sistema de IA básico terminado

En los últimos días parece que no tengo otro tema. De hecho, me duermo pensando en esto, y entre IA y Divinity, mi sueño es bastante incómodo. Pero el resultado es que el sistema de inteligencia artificial funciona bastante bien a nivel básico. O sea, que como prueba de concepto está bien, y ahora es que las cosas empiezan a  complicarse.
Para continuar, tengo que implementar un mini-sistema RPG: habilidades e items utilizables por las entidades, incluyendo al jugador; que aunque sea mini, no es trivial. De paso, eso me permitirá probar otro enfoque en la implementación de habilidades y objetos usando ScriptableObjects. Sí, otra obsesión reciente, quizás debería consultar un médico. Y ya que hablamos del tema, este video ofrece un buen punto de partida:

Al principio me pareció que no sacaría nada útil, pero resultó que estaba equivocado. Hay algunos trucos, como el de instanciar los ScriptableObjects que no sabía con exactitud cómo hacerlo, y el de usar Resource.LoadAll para cargar todos los ScriptableObjects de una carpeta.
El siguiente paso sería conseguir que los NPC utilicen sus habilidades (nada de optimizaciones por el momento) y objetos para derrotar al jugador. Luego, combate entre grupos. Y entonces, si todo lo anterior camina como debe y no he encontrado algún error garrafal, ir al punto de optimizar el combate, lo cual requiere un sistema de items mucho más completo y funcional, bonificadores y penalizadores, etc. Suficiente trabajo para un mes, creo.
No estoy seguro de que necesite corutinas en algún momento, aunque la idea me ha rondado por la cabeza un par de veces. Quizás no dentro de las acciones, pero sí en el StateManager, para no sobrecargar el juego cuando una entidad tenga más de una acción en su estado activo. Hay que tener en cuenta que ahora las acciones son simples, pero en el futuro se volverán mucho más complejas a medida que necesiten valorar factores diversos con vistas a hacer la IA más inteligente. Ojalá no se vuelvan necesarias.
Pensaba dar algunas conclusiones, pero creo que aún es demasiado prematuro y las dejaré para más adelante. Aún estoy a tiempo de toparme con algún problema insoluble que me haga descartar todo el trabajo.

Usando ScriptableObjects para IA

Hace unos meses el canal de Unity publicó una serie de videos, basados mayormente en esta conferencia:


Hasta hace poco no había tenido tiempo de estudiar los tutoriales y comenzar a adaptar el código, o incluso decidir si era mejor que mi anterior intento. Y recién hace dos días fue que pude mirar un poco más lo que había hecho y cambiar algunas cosas.
En esencia, el sistema me parece bastante bueno. Por lo menos resuelve el problema de la modularidad de la IA, algo que no había logrado resolver en mi aproximación anterior. Confieso que últimamente he dudado de los ScriptableObjects, pero creo que en este caso sí son muy útiles. Para un RPG, poder definir comportamientos específicos para cada entidad es esencial. Por ejemplo, un mago no pelea de la misma forma que un guerrero de largo alcance, que a su vez es muy distinto a un guerrero cuerpo a cuerpo, y así sucesivamente, según las clases o el equipo de cada NPC.
Los tutoriales muestran de forma relativamente sencilla cómo armar una máquina de estados usando ScriptableObjects y cómo solucionar el problema que se deriva de que éstos guardan la información entre corridas. Pero además, la conferencia abunda un poco más en otros trucos que podemos hacer con ScriptableObjects, usándolos como enums, por mencionar uno.
Yo recomiendo ver la conferencia primero y luego los tutoriales, si estás buscando una guía para desarrollar tu propia inteligencia artificial. Y ya que hablamos del tema, tengo que decir que la IA de Divinity: Original Sin 2 es genial. Me encanta cómo los NPCs encuentran siempre la mejor forma de fastidiarte, buscando lugares elevados, lanzando a tus compañeros en el fuego, etc. La verdad, no recuerdo haber visto un sistema tan avanzado de combate.

Divinity: Original Sin 2 no es de mundo abierto

Un poco decepcionante, la verdad, aunque hay que admitir que no está tan mal. Luego de varios días uno se percata de que este RPG en realidad no es de mundo abierto, sino más bien lineal. Me recuerda un poco The Witcher 2, donde tenías que ir de ubicación en ubicación y resolver todo antes de pasar a la siguiente. Lo que se queda atrás se pierde.
Las ventajas de este enfoque son que la línea temporal de la historia es más fácil de controlar, y la trama en sí es más simple. No hay tantas bifurcaciones, salvo las que se desprenden de las decisiones del jugador. En un mundo abierto no hay mucho orden, un jugador puede ir primero a un lugar y luego a otro, y otras personas podrían hacerlo a la inversa. Todo un reguero.
Esta es una situación que he experimentado escribiendo mis intentos de guión para RPGs abiertos. ¿Cuándo se dispara un evento importante, por ejemplo, un mensaje para realizar una misión? ¿Y si el jugador nunca viene a determinado lugar? ¿Y si liquida a X NPC antes de que se le asigne la misión? Todas esas son preguntas a las que hay que darle solución (no respuesta, porque en principio, cualquier respuesta debería ser válida).
En fin, un dolor de cabeza que involucra a programadores y escritores. Lo cual me recuerda que aún no he logrado diseñar un sistema de gestión de misiones que valga la pena.

Otra reseña

Un breve post para avisar que me acaba de llegar otra reseña, esta es la primera fuera de Cuba. Tengo que agradecer a Marita, del blog Monalisa a los 40, por dedicar el tiempo y el esfuerzo para leerse el texto y darnos sus opiniones.

Documental sobre CDPRED/Unity 2017.2

Dos breves antes del fin de semana: si no han estado siguiendo la serie de documentales de Noclip sobre CDPRED/The Witcher, deberían hacerlo. Incluso Marcin Iwinski, uno de los fundadores de CD Projekt, es entrevistado (en el documental anterior dedicado a la primera entrega de la saga no aparecía), y los siguientes capítulos abarcan hasta la tercera parte del juego.
En mi opinión, un excelente material sobre la historia de esta compañía desarrolladora de videojuegos y su buque insignia, que no deben perderse. En serio. Hay algunas perlas de sabiduría perdidas por ahí si sabes prestar atención, como suele suceder cuando una docena de personas te hablan acerca de cómo construyeron algo.
Lo otro es que ayer salió Unity3d 2017.2. La lista de cambios solo trae algo interesante: soporte para tilemaps. Al fin, carajo. También hay que mencionar otra cosita como Cinemachine 2D. La lista de mejoras, por supuesto, es más grande, pero no vi nada que me resultara interesante o extremadamente necesario para mis proyectos actuales. Me da la impresión de que últimamente, los de Unity se centran en machacarnos con Cinemachine, como si tuviesen algún tipo de trastorno obsesivo con eso. Vale, macho, que ya sabemos que tienes Timeline y Cinemachine desde hace rato, no hace falta que en cada convención me expliques que puedo hacer una peli con eso.
Y completamente fuera del tema: ya tengo Divinitiy: Original Sin 2, y me lo estoy pasando en grande. Incluso estoy tratando de volver a los años 90, cuando no había internet (¿que sí había, dices? pues sería en tu país, porque aquí, ahora mismo en el 2017 no se puede decir con total seguridad que haya internet) y no mirar ningún walkthrough. Un RPG genial, de esos que solo se ven uno al año.  Pero supongo que si eres rolero no te estaré diciendo nada nuevo. Y si no lo eres... no te sientas triste. Es posible que haya algún hobby esperándote en el futuro para llenar esa vida tan vacía que llevas.

Jugar, cuando eres zurdo

No soy zurdo, por suerte. Pero un pequeño problema, que espero que sea temporal, me ha obligado desde hace varios meses a darle un poco de reposo a la mano derecha. Revisando un antiguo proyecto que uso para experimentar ideas, descubrí que, aparte de tener el código de la cámara isométrica desactualizado, no me había preocupado en verificar qué tan factible es jugar cuando tienes que manejar el mouse con la mano izquierda y desplazar la cámara con la derecha. Sobre todo, si no has implementado los controles adecuados del lado derecho del teclado.
Sí, era un código puesto a toda prisa, ni siquiera mi última versión  de la cámara isométrica. Ese es el problema de la accesibilidad: no nos percatamos de que falta hasta que nos afecta directamente. Es muy difícil valorar lo que necesita alguien que es zurdo, carece de una mano, no ve los colores o simplemente no ve nada, si nosotros mismos no sufrimos esas carencias.
En mi caso, ha sido necesario pasar varios meses volviéndome zurdo poco a poco incluso para descubrir el valor de jugar con un mando de Xbox y lo mucho que me faltaba por aprender a la hora de diseñar interfaces compatibles con mandos.
Por suerte, en este caso la solución es trivial y tampoco es que sea algo prioritario. Como les decía, es un proyecto de pruebas y con cambiar el mouse de lugar basta. Lo que sí trataré de tener esto en cuenta para proyectos más serios.

A partir de mañana se extiende el servicio de Internet en Cuba

Quizás no podamos decir que el 29 de septiembre es el día que arrancó el servicio de Internet en los hogares cubanos, porque el mismo ha estado dando vueltas de una forma u otra (pruebas piloto, comercialización limitada), pero sí es una fecha significativa. A partir de mañana, 17 consejos populares (o barrios) en 7 municipios del país, podrán contratar Nauta Hogar, siempre y cuando dispongan ya de teléfono fijo en casa.
La oferta, esperada desde hace años, ha sido mejorada en base a las críticas de los participantes en la prueba piloto, pero aún así adolece de carencias y no está al alcance del bolsillo trabajador, a menos que aprendas a vivir sin comer y no te moleste andar desnudo y descalzo. La anterior oferta arrancaba en 128kbps a $10 CUC (pueden asumirlo como $10 USD), que fue casi de inmediato subida a 256kbps, siendo la siguiente velocidad 512 a $30 o $40, hasta llegar a 2mbps a $115 mensual. Ahora la velocidad mínima es 1mbps, algo un poco más decente y acorde con los requerimientos de la internet moderna, aunque no deja de ser insuficiente y que muy pronto será obsoleto.
El pago mensual cubre solo 30 horas, las horas adicionales se pagan a $1.50 CUC. Esto es algo que no ha cambiado, quizás porque las críticas se centraron en las velocidades de acceso, que era lo que más preocupaba a los usuarios normales. Para ellos, Internet es solo una vía de comunicación, algo así como un teléfono moderno, y una o dos horas al día les basta para un poco de chateo en Facebook o una conversación por Imo. Para el usuario avanzado, que utiliza la red como fuente de información, 30 horas son menos que nada.
Pero menos da un ladrillo, así que toca conformarse y criticar, a ver si la todopoderosa ETECSA mejora la oferta con más horas y menor precio. De momento, Santiago de Cuba se queda fuera, como siempre, pero como no tengo teléfono ni posibilidades de pagar el servicio, tampoco me apura que llegue.