martes, mayo 03, 2016

Localización del proyecto

Una de las cosas que quería probar en este nuevo proyecto, ya que la idea era hacerlo bien desde el principio, es la localización de toda la interfaz. La cosa no es tan difícil, pero se me había complicado por una nimiedad. Los textos estaban omitiendo las letras con tilde y la solución era, en teoría, muy fácil: el archivo de origen de los textos debía estar guardado en UTF-8. Había solventado esto diciéndole al MonoDevelop que los guardase así, pero al parecer no lo hizo, así que para salir de dudas tuve que acudir a Linux. Desde el editor de texto abrí los archivos y los volví a guardar, y para mi sorpresa, las cosas empezaron a funcionar. Por supuesto, es esencial contar con una fuente que tenga las dichosas letras, o no habrás hecho nada con guardar los textos en utf-8.
El asunto, como les decía, no es complicado, pero sí es extremadamente trabajoso. Un prototipo sencillo con apenas algunas cosas ya lleva más de un centenar de líneas, mitad español mitad inglés. Los elementos de la interfaz necesitan un script adicional que tenga el código de referencia, para cambiar el texto a mostrar en tiempo de ejecución (esa es mi solución, si alguien tiene otra mejor, me gustaría conocerla).
Hasta ahora he implementado algunos sistemas básicos que permiten algo de jugabilidad, pero solo pruebas de concepto. De ahora en adelante las cosas sí se pondrán serias, porque me estoy adentrando en terreno complicado. Por ejemplo, ya es hora de integrar una solución seria de IA, como RAIN, que parece ser la única que hay para Unity3d, y además es completamente gratis.
También quiero probar algún sistema de diálogos, algo que ha probado ser, no complicado, pero sí trabajoso en extremo a la hora de crear las conversaciones. Aquí, por desgracia, las opciones no están tan claras como con la IA, porque casi todas las soluciones son comerciales, y aunque quisiera pagarlas, de momento eso me resulta imposible.
He pensado llevar el prototipo hasta un punto medianamente jugable y liberarlo bajo alguna licencia libre para que sirva de ayuda a los que se inician. Quizás no tenga las mejores soluciones, pero un punto de partida es mejor que no tener nada.

viernes, abril 22, 2016

Video del proyecto

Pequeño gameplay, para presumir de algo (casi nada), del proyecto de juego RPG isométrico. 

Unos pocos sistemas están implementados y funcionando, aunque solo la cámara se puede decir que está al 100%, pueden encontrar el tutorial en mi otro blog (en inglés). Cualquier sugerencia que pueda ayudar a mitigar los problemas es bienvenida. El código, bastante actualizado, está en el repo de github. Algunos de los modelos 3D utilizados están disponibles en OpengGameArt.

jueves, abril 21, 2016

Warcraft - Trailer 2 (HD)

Al fin, el M1 Abrams consigue protección activa

Parece que los marines han descubierto que existe una cosa que se llama protección activa, y están integrándola en sus veteranos tanques M1 Abrams. El sistema en cuestión es el Trophy, de origen israelí (obra, por supuesto, de Raphael Advanced Defense Systems, unos tipos que le saben un mundo a eso de interceptar tubos de metal voladores) y supongo que sea un equivalente al Arena ruso.
El APS es una defensa antimisiles, que actúa disparando contra los cohetes antes de que éstos alcancen el vehículo. También puede utilizar interferencias contra ellos, en el caso de que sean guiados por algún método susceptible de ser interferido.

Como les decía, el T-90, y no sé si algún predecesor, incorpora Arena, un sistema similar diseñado en los 70 (es tan viejo que fue probado en los T-55, y demostrado en los T-80), amén de otras cosillas como blindaje reactivo Kontakt, que es ya obligatorio, y Shtora, que se encarga de contrarrestar el guiado láser o infrarrojo.

miércoles, abril 20, 2016

Y ahí vamos

Y ahí vamos, señores, robándole un rato al sueño y a otros horarios inmencionables, con tal de avanzar en este proyecto a muy largo plazo en el que estamos empeñados un minúsculo grupo (o sea, un grupúsculo) de locos nacidos en el país equivocado. Porque acá es perfectamente válido ganarse la vida, o hacer muy rico, de hecho, cantando reguetones de mal gusto con letras que ya podrán imaginarse, y sin embargo aún le damos vueltas a si los videojuegos engendran violencia.
Tan atontado ando que ya mi novia se ha encargado de hacerme notar que estoy medio entretenido, sin percatarse de que es un milagro que entre el cuarto libro y la programación del juego no haya perdido ya la chaveta. Pero ahí vamos, como les decía. Hace unas semanas daba por liquidado The Key of the World, el juego RPG libre que habíamos venido desarrollando desde hace año y medio, pero en verdad, eso no ha sido tan así. El caso es que este jueguito está sirviendo de campo de pruebas donde experimento hasta encontrar la forma correcta de hacer las cosas, antes de pasarlas al prototipo del segundo juego. Todo eso va a parar al repositorio de Github, para que beneficie a cualquier programador novato en apuros que tenga la paciencia suficiente para leer el código.
O sea, trabajar doble, para hacerlo mejor la segunda vez. Incluso llegué a plantearme la posibilidad de iniciar otro proyecto completamente diferente (estrategia por turnos) para ampliar las posibilidades de experimentación. Definitivamente, una locura, aunque no descarto que me complique la vida con eso en algún momento.
El esfuerzo de las últimas semanas me ha hecho darme cuenta de que al menos para mí, un año de experiencia con un motor de juegos no es suficiente. Quedan muchos cabos sueltos y aún dependo demasiado de la ayuda de internet.
No obstante, de vez en cuando me asombro a mí mismo con algún avance substancial, como el de esta semana. He logrado implementar un "esqueleto" básico que me permite probar la jugabilidad lo mismo arrancando desde el menú de inicio que desde una escena aislada. Detrás de la aparente simplicidad de esto se escondían detalles enrevesados, que me obligaron a  rastrear el orden de ejecución de varias cosas dentro de la clase principal del juego. Por suerte, todo está en orden, y he conseguido ahorrarme bastante tiempo a la hora de probar escenas.
Por tanto, ahora toca hacerle una ofensiva a fondo a algunos sistemas esenciales, como los objetos, habilidades y combates. Veamos si logro cumplirlo en una semana.

martes, abril 19, 2016

Mejorando la escritura: cuentos

En los últimos meses me he obligado a escribir un poco más (no mucho) y asistir al taller literario. Si quieres aprender a escribir bien, un taller literario es una herramienta esencial; la crítica de los lectores ayuda a mejorar. Aún la crítica más demoledora, siempre que sea con bases sólidas.
Mi regreso al abandonado taller se debe sobre todo a la necesidad de revisar a fondo mis escasos cuentos (pueden leer dos de ellos en Isliada.org) para presentarlos en un par de concursos. No soy muy amante de los concursos, pero son importantes para el currículum de un escritor, así que no está de más hacer lo posible, y hasta lo imposible, por conseguir un par de ellos.
Tengo que decir que con apenas tres sesiones de trabajo empecé a ver detalles que no tuve en cuenta al escribir los cuentos, y la pequeña dosis de teoría que he logrado asimilar me ha resultado muy útil. Por ejemplo, el cuento requiere de un conflicto, y he tenido que revisar mis escritos y valorar si estaba presentando adecuadamente dicho conflicto al lector. Un cuento debe ser autocontenido, no puede tener referencias externas, como en el caso de mis cuentos basados en Elymuria. El lector no necesita leer la novela (que les recuerdo, pueden comprar en Amazon) para saber qué es un Tecnólogo/Denmar/Cacharrero. Todo el mérito se lo lleva la profesora, por supuesto, pues Aida Bahr es toda una personalidad de la literatura cubana, y he podido comprobar lo que afirma Yoss, que tenemos un taller literario de lujo.
Es por ello que mi consejo para los aspirantes a escritores es que busquen un taller. Quizás no tengan uno de lujo, pero la opinión de otros escritores (o aspirantes) es suficiente para avanzar, si se tiene la humildad para asimilar la crítica constructiva.

viernes, abril 15, 2016

Animation events al rescate

Hoy me tocó, entre otras muchas cosas, encontrar una solución para un asunto que venía molestándome desde hace tiempo: determinar cuándo una animación ha terminado de ejecutarse. Una de las opciones es usar Animation Events, una útil herramienta que encuentreas cuando entras en el modo de edición de un clip. No es muy intuitivo, la documentación es escasa (a menos que tengas acceso al sitio de Unity3d, que justo ahora no tengo, o puedas ver videos de youtube en tiempo real), y en general no es el desafío intelectual más agradable para un viernes por la tarde.
Por decirlo de alguna forma, entre las cosas que no querría hacer, esto puntúa ligeramente por debajo de un trámite en el Registro Civil. Ni siquiera puedo decir que domino completamente el procedimiento, aún me espera un poco de experimentación en casa para sacar algo útil de esto. En concreto, necesito regresar al estado de animación anterior luego de ejecutar un clip. Por ejemplo, en medio del combate el personaje da un golpe, que es una animación de una sola vez. En cuanto esa animación ha terminado, se regresa a la anterior. Creo que también podría utilizarse Animator.IsPlaying, pero no encuentro esa función en la documentación.
Por suerte, no todo el trabajo es tan pesado, también hay otras cosas que podemos calificar de tediosas. Por mencionar una: lograr entender el sistema de eventos del UI, a través de las interfaces. Hay mucho espacio para conseguir la locura ahí.