Menú con soporte para mando

El asunto no resultó tan fácil como esperaba, pero anoche logré adaptar el menú principal que tenía hecho. Ahora es posible desplazarse por los botones usando el mando de Xbox.
La dificultad estriba en que lo usual es utilizar la cruceta (DPad), que no es un botón , sino un eje (igual que los triggers). O sea, que no es un valor verdadero o falso, y tienes que agenciarte una vía de interpretarlo como tal. No solo eso, también debes dar tiempo a que el botón de la cruceta sea liberado antes de volver a identificar el valor del eje como un nuevo evento, con unos 150 milisegundos basta. Esto último podría ser un error mío, pero fue la única forma que encontré de hacerlo funcionar correctamente. Y la cosa, en código, quedaría así:

int selected = 0;
bool DpadUp = false;
bool DpadDown = false;
float EventTimer = 0;


void Update () {
        if (EventTimer>0)
            EventTimer -= Time.deltaTime;
        float y =  Input.GetAxis("DPadY");
        if (y > 0 && !DpadUp && EventTimer <= 0) {
            DpadUp = true;
            EventTimer = 0.15f;
        }
        if (y < 0 && !DpadDown && EventTimer <= 0) {
            DpadDown = true;
            EventTimer = 0.15f;
        }
        if (y==0) {

            DpadDown = false;
            DpadUp = false;
            EventTimer = 0;
        }

        if (DpadUp) {
            if (selected>0) {
                ButtonList[selected].GetComponent().sprite = transp;                  selected--;
                ButtonList[selected].GetComponent().sprite = selector;                }
            DpadUp = false; //"consumir"el evento
        }
        if (DpadDown) {
            if (selected < 5) {
                ButtonList[selected].GetComponent().sprite = transp; //hide currently selected
                selected++;
                ButtonList[selected].GetComponent().sprite = selector;                }
            DpadDown = false;
        }     
    }


Para un menú la solución es relativamente trivial. La cosa se complica cuando se trata de una cuadrícula de botones, como en el caso del inventario. Esa es mi tarea para hoy. En este caso, hay que trabajar con los dos ejes, no solamente con el eje vertical del DPad.
Y como resultado colateral de cacharrear con el mando, he descubierto que tendré que cambiar la mecánica de juego a cámara libre, como Mass Effect o The Witcher. El caso es que con el mando es imposible controlar movimiento, dirección de la cámara y el cursor del mouse a la vez. No sé cómo lo hacen en Dragon Age, pero me da la impresión de que la mecánica cambia, según los periféricos que utilices.

Al fin, un poco de luz en el control de los mandos

Tengo que decir que el asunto de dar soporte a múltiples mandos es muy jodido. El caso es que Unity no ofrece un mapeo estándar uniforme para todos los dispositivos, o al menos para los más comunes (variantes de Xbox/PS). En fin, que en el proyecto (en cada proyecto) hay que mapear a mano los botones/ejes con su correspondiente nombre, o comprarse Rewire en la Asset Store, un paquete que te ahorra esa locura. Así que lo siento, nada de soportar mandos exóticos por el momento. Escogí Xbox 360 que es lo que tengo a mano, temporalmente.
Para configurar el mando de Xbox 360 me auxilié de dos excelentes tuturiales que les dejo aquí:



El segundo es un poco largo, pero aporta un método diferente para el mapeo de los triggers, que aunque no lo crean, no se manejan como botones, sino como ejes. En esencia, la configuración no es complicada, solo un poco trabajosa en caso de que necesites usar todos los ejes y botones del mando, que son unos cuantos. Si nunca has usado uno, te puedo adelantar que incluso los sticks pueden disparar un evento de botón al ser apretados.
Y ahora solo me queda ver cómo logro comprarme mi propio mando sin tener que vender la casa, ayer pregunté los precios y resulta que un mando original de Xbox vale unos $50 USD. Un poquito exagerado, si tenemos en cuenta que en USA pueden comprarse por solo $25, incluso $15 si son de otro fabricante.

Probando un mando de Xbox 360

Siempre he sido un jugador de teclado y mouse, excepto los simuladores de vuelo, para los que tengo un joystick. Acá en Cuba los joysticks no se ven mucho, nadie los usa. Tampoco es que los jugadores de PC usen mucho los mandos, aún cuando además tengan la suerte de ser dueños de una consola.
Mis experiencias con consolas son pocas y breves, creo haberlo mencionado antes. Y soy de la opinión de que es muy difícil emular la versatilidad de la combinación teclado/mouse. Sin embargo, tenía pendiente dedicarle tiempo a los mandos, para saber de primera mano acerca de cómo implementar su uso en mis propios proyectos.
Ayer me prestaron al fin un mando de Xbox 360. Nuevo de paquete, aún el plástico brilla. Tan nuevo, que me da pena usarlo. Solo tenía a mano Mass Effect: Andromeda para probarlo y darme cuenta de mi tremenda torpeza, creo que necesitaré semanas para habituarme a mover la cámara con el stick. Mi prioridad era ponerlo a prueba con Dragon Age: Inquisition, que es lo más parecido a mi proyecto en cuanto a manejo de cámara y mecánicas de juego, pero he conseguido dos copias diferentes y ninguna funciona.  Nada, que la suerte dura poco en casa del pobre.
Sin embargo, con pocos minutos de juego ya me voy percatando de que necesito cambiar muchas cosas en la interfaz de mi juego. Todo lo que he hecho es insuficiente. Pero así es el asunto de la programación, a veces hay que tirar mucho trabajo a la basura y empezar de nuevo.
Y lo más doloroso es que quizás, cuando le coja el gusto, ya tendré que devolverlo.

Lamento decirte esto, pero esa armadura de cuero... no existe

Sé que puede ser doloroso para algunos desarrolladores de juegos, pero tengo que decirles que la studded leather armor no existe.


El término surgió en D&D, aunque los gamers de PC probablemente la recuerden más de Diablo o algún otro CRPG. El equivalente real es la brigantina, de la cual hay montones de variantes (de hecho, los resultados en Google para studded leather armor son brigantinas), o también la armadura lamelar. Pueden verlas en Google Images, yo, por si acaso, no las pondré aquí.
Al parecer, los creadores de juegos, que solemos copiar de otros juegos sin preguntarnos a veces si lo copiado es fiel a la realidad o no, hemos ido pasando el término de un título a otro, perpetuando el error.
Estas armaduras usaban cuero endurecido, que si vamos a comparar con algún material conocido, sería plástico. O sea, que no es para nada flexible, como el cuero suave que vemos en algunas armaduras de utilería en filmes modernos, que en la vida real no ofrecerían ninguna protección contra ataques.

Concurso Indie de Amazon

Ya está en marcha el Concurso Indie de Amazon, en su cuarta edición. Y les advierto que básicamente es un negociazo de los grandes, probablemente el mejor invento para hacer que los escritores se esfuercen el doble el producir dinero (para Amazon, claro).
El concurso no tiene un jurado como es tradicional en los certámenes literarios (lo tradicional está sobrevalorado, así que vamos a innovar) y cuyo nivel le da credibilidad y prestigio al torneo (no lo necesitamos, somos Amazon), sino que gana el que más copias venda, así de sencillo. Supongo que en Amazon, todos unos genios, piensan que qué mejor jurado que el respetable público lector, que ha encumbrado obras de probada calidad literaria como 50 sombras de Grey, El corredor del laberinto, o Crepúsculo.
Y ojo, no digo que las obras en concurso no sean buenas, algo que te va a conseguir buenas valoraciones, que a su vez redundan en más ventas. Pero básicamente, más que de escribir una historia decente, el concurso va de gastarte un montón de dinero en promocionarlo a través de diferentes servicios que se especializan en dar visibilidad a escritores indie.
Volviendo al punto inicial , el concurso es toda una mina de oro para Amazon. El precio mínimo de las obras en competencia es $2.99, y teniendo en cuenta que en cada edición se presentan más de mil autores, el  premio otorgado es un gasto ínfimo comparado con las ganancias de las decenas de miles de copias vendidas, aún descontando posibles rebajas promocionales o lectores con Kindle Unlimited. Una jugada maestra donde las haya.
Yo, lamentablemente, me quedo fuera. Por no tener dinero para promoción, y por vivir en Cuba, porque de inicio las normas nos excluyen.  Y la verdad, con la suerte que tengo en los concursos, mejor que ni lo intente.


Y a veces...

Aún queda espacio para sorpresas en esta ciudad dejada de la mano de Google. Ayer conocí a un estudiante con ciertas habilidades en modelado y dibujo, y cuando digo habilidades quiero decir que va más allá de garabatear monos con estilo manga. Mucho más allá. De hecho, solo recuerdo haber visto algo así una vez. El manejo de los colores, degradados y detalles es sorprendente, y para más inri, aplicado a golpe de dedo en un celular.
Me quedé medio lelo, vaya. Todo eso acompañado con un toque de conocimientos sobre juegos: qué es un mapa normal, lo habitual que debería saber un artista. Y además, no está solo, son varios. Hemos quedado en hablar con más calma y ver si podemos ayudarnos mutuamente, que nos vendría muy bien.
Y yo que ya había dado por imposible encontrar personas con las habilidades adecuadas... parece que estaba equivocado.

Mis opiniones sobre el E3 de este año

No sé si se me habrá olvidado alguna conferencia, pero creo haberlas visto todas. Bethesda, EA, Microsoft, Sony, Ubisoft y Nintendo. Si bien considero este evento mejor que el del año pasado, tampoco es una maravilla.
Y empecemos con mis modestas conclusiones. Bethesda quiere apostar fuerte por la Realidad Virtual, pero aparte de eso, solo cuenta con las franquicias de Id para mostrar algo nuevo, en este caso, Wolfenstein: The New Colossus. Como cada año, traen Elder Scrolls Online con su correspondiente expansión.
EA se reafirma como la reina de los juegos deportivos, la competitividad y el multijugador. Aparte de eso, tiene poco más que mostrar, y si no lo creen noten que 40 minutos de su conferencia estuvieron dedicados exclusivamente al multiplayer de Star Wars Battlefront.
Microsoft presentó una avalancha de títulos para la nueva Xbox One X, casi todos iguales. Pero todos en 4K, como si eso le aportase algún valor diferente. La apuesta de Microsoft parece ser 4K, prescinden por completo de RV o innovación. Para salvar el día, ofrecen retrocompatibilidad con la primera Xbox, algo que alegró al público presente.
Sony no tenía casi nada interesante que mostrar. Su nueva iteración de la Playstation 4 no se presentó, aunque sí llevaron un par de títulos para Playstation VR. Nada del otro mundo por aquí.
Ubisoft es solo una empresa de software, así que salvo una interesante alianza con Nintendo, la mejor noticia es que lograron esconder hasta el último momento algunos títulos interesantes. Una conferencia equilibrada e interesante.
Y para el final, Nintendo. Por supuesto, su conferencia (brevísima) estuvo orientada a vendernos Switch. Como dije en el párrafo anterior, han conseguido un par de exclusivas con Ubisoft, sobre todo ese Mario+Rabbids, que tiene una pinta genial. Ha asegurado Skyrim para Switch, lo cual le gana a los jugadores más mayorcitos. Y hace mucho énfasis en que te puedes llevar la Switch a todas partes. Bravo por ellos, innovación le gana a potencia bruta, parece ser su lema.
Ha sido común denominador en todas las presentaciones evitar presentar títulos a largo plazo. La mayoría son cosas que veremos a más tardar en el 2018, así que el E3 del próximo año debería venir con cosas nuevas. Algo que agradecer, porque la verdad no le veo mérito a que una empresa presente un gameplay del mismo título dos años seguidos (como por ejemplo, For Honor).
Y esas son mis opiniones acerca del evento de este año. Por supuesto, habría querido estar allí, ahora que está abierto al público, pero saben que eso no me es posible. Quizás dentro de una década o dos.

Regreso al pasado: MS Access

Aún sigo con problemas en la mano, pero he tenido que retomar un poco mi ritmo de trabajo. He vuelto a escribir, que hace una semana casi no podía hacerlo, y sobre todo, estoy tratando de ponerme al día con tareas atrasadas en la oficina.
Así que me he dedicado a implementar una base de datos relativamente sencilla que se me pidió hace un mes, y digo relativamente sencilla porque al final se ha enredado la cosa. Mi enfoque inicial era usar PHP+PostgreSQL, pero resultó que por muchas razones sería un problema. No me esta permitido alojar páginas en el servidor de la institución, y crear un sistema conlleva un papeleo adicional para certificarlo, aprobarlo, etc. En fin, que me dijeron que me olvidara por completo de eso y que usara MS Access.
Access... una herramienta que usé muy poco y hace ya más de diez años, esa sí era fea. Bueno, qué remedio. Y ya que toca joderse, mejor joderse en grande, vamos a usar Access como interface, pero la base de datos vamos a ponerla en PostgreSQL. Y por ahí empecé mi aventura con el ODBC y las bases de datos vinculadas, que me ha traído unos cuantos dolores de cabeza.
A ver, el problema principal fue que instalé el driver ODBC de 64 bits, pero el Access de 32 bits necesita uno de su misma arquitectura para conectarse. Me tomó una mañana encontrar la combinación correcta: es necesario usar la misma arquitectura en el Access y el driver ODBC, independientemente de que el sistema operativo sea de 64 o 32 bits.
Eso es problema resuelto, pero queda lo más complicado: aprender VB, y a dominar el Access en general para hacer cositas tan simples como activar o desactivar controles e implementar una interfaz cómoda de usar y a prueba de errores de usuario. Sin mencionar las consultas, informes, y armar formularios enormes. Casi nada.