Larga vida a los desarrolladores de Windows 10

De todo corazón les deseo a los desarrolladores de Windows 10, que no sabe diferenciar una partición Linux del espacio libre del disco, o que no puede formatear una partición propia sin eliminar las particiones Linux,  una larguísima vida. También les deseo, de todo corazón, que durante el resto de esa larguísima vida, padezcan de sarna incurable en la entrepierna.
Me ha tomado dos días encontrar la combinación correcta para instalar Windows 10 y Linux, porque siempre que lo hacía, Windows eliminaba las particiones de Linux ya instalado. En teoría, basta con instalar Windows, y luego Linux. El gran problema está en que debes crear y dar formato a cualquier partición Windows adicional desde el instalador de Linux. Si intentas hacerlo con el Administrador de Discos de Microsoft, éste destruirá cualquier cosa que no reconozca. Como les decía, solamente formatear una partición ya creada en FAT32 elimina las particiones Linux.  Menuda mierda.

Al fin, acabé Mass Effect

Gracias a un mando prestado, pude terminarlo sin perder la mano derecha. En fin, nada que decir que no haya dicho ya, aún así lo repito: decepcionante, inflado a la fuerza, y una historia que podría haber sido mejor de no diluirse más que un preparado homeopático.
Una vez concluido ese asunto pendiente, es hora de pasar a otras cosas, como por ejemplo terminar la segunda parte de la novela. no es que no haya escrito muchísimo en estos días, sino que lo he estado haciendo en mi sexto libro. Y depués me quejo de Rothfuss...
Y la buena noticia es que alguien me ha donado un mando de Xbox viejo y roto. Quizás no sea tan buena noticia cuando descubra que no puede ser reparado, pero de momento toca tener mente positiva. Jugar con el mando no es tan incómodo cuando uno se acostumbra y además me permite adaptar los proyectos para su uso. En estos días aprendí mucho al respecto jugando Mass Effect, y lamenté no tener otro título a mano para experimentar otros enfoques.
De todas formas, ahora tengo que rediseñar muchas cosas e implementar todo un montón de nuevas funcionalidades, pero aquí por suerte ya logré hacer algo y no es tan complicado. Trabajoso sí, pero no complicado. De paso, les aviso que muy pronto estaré liberando el beta del Laberinto, en cuanto me anime a arreglar unos pequeños detallitos.

Unity 2017.1 y adiós a DirectX 9 en Unity 2017.3

Acaba de ser lanzada la versión 2017.1 del motor de juegos Unity3D, la primera bajo el nuevo esquema de denominación.
Aunque la lista de funcionalidades es enorme, en primer lugar el anuncio se centra en hablarnos de las ventajas de Timeline y Cinemachina, que a pesar de ser tan importantes no son parte del motor, sino que hay que instalarlos desde el Asset Store.Timeline y Cinemachina permitirán la creación de cinemáticas y zarandajas similares, y a juzgar por el peso de la propaganda que le hacen, no podremos vivir sin ellos y son lo mejor que se ha inventado desde el sexo oral. En tercer lugar, el nuevo stack de efectos de post-procesado de imágenes, que es como los que teníamos de toda la vida (Bloom, SSAO, etc) pero ahora mejorado y con nombres más chulos compatibles con la terminología del cine. Podrás trolear a tus amigos hablándoles de Aberración Cromática, "full-HDR color pipeline with Academy Color Encoding System  (ACES) support, and an LDR pipeline", aunque no tengas ni puta idea de qué estás diciendo (al menos yo no la tengo,  me lo copié del anuncio).
Más interesante, el scripting runtime ha sido actualizado y ahor apodemos usar .NET 4.6 y C#6, algo que la comunidad venía pidiendo desde hace rato, y que el Visual Studio nos recordaba cada vez que abríamos un proyecto. No sé hasta qué punto se resuelve este último detalle, pues VS 2017 salta cuando el .NET del proyecto no es el 4.6.1. Habrá que probarlo.
Hasta aquí lo más importante de esta versión, desde mi punto de vista.
Ayer también se anunció que DirectX 9 desaparece a partir de la versión 2017.3, lo cual deja fuera a Windows XP. La razón aducida es el reducido número de hardware con dicha API y haber sido descontinuada por Microsoft. Para soportar Windows XP, habrá que activar OpenGL en las opciones del proyecto.

Proyecto actualizado

Luego de un largo período de abandono, he decidido actualizar mi viejo proyecto The Key of the World. La última versión de Unity que utilicé fue la 5.2, y los cambios introducidos durante el desarrollo hicieron que el proyecto fuese incompatible con la 5.6. Luego de un breve trabajo de migración, conseguí que funcionara y los cambios ya están en el repo.
The Key of the World, para los que no lo sepan, es un RPG isométrico en 3D, y además es software libre. Aunque a algunos no les guste que esté hecho con Unity, lamentablemente fue decisión que tomo el equipo en conjunto, en aras de buscar más calidad, eficiencia y adquirir conocimientos con vistas a desarrollar un juego comercial más adelante. De ahí que descartáramos Urho3D, algo que en su momento me dolió, pero que considero que fue acertado.
En dependencia de cómo está mi tiempo en los próximos días, pienso integrar mejoras y corregir errores de diseño, aprovechando la experiencia conseguida durante los últimos meses de trabajo. Así el juego cumplirá mejor con su objetivo de servir como guía de aprendizaje. En cuanto a hacerlo más jugable o agregar contenido, creo que no será posible a menos que aparezca un equipo de trabajo dispuesto a asumir el reto.

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.

Aprendiendo de Fallout 4: decisiones

Post muy breve porque tengo la mano derecha con tendinitis y casi no puedo escribir.
Fallout 4 es un juego bastante mierdero, para qué negarlo. El rediseño del SPECIAL, sus misiones repetitivas... hay muy poco bueno que decir de él. Sin embargo, lo que sí tiene a veces es una narrativa aceptable. Quiero decir, que no las he visto peores porque en realidad juego poco, pero tampoco es como para echrla a la basura.
Sin embargo, hay un pequeño detalle que recién me vino a la mente hoy: al final del juego enfrentas algo que supuestamente es "una decisión difícil". Una de esas en que tienes que decidir si dejas atrás a X o a Z, o cuando Z se pone malcriado y tienes que darle un tiro para conservar el control. En este caso (alerta de spoiler) tienes que decidir si apoyas a tu hijo, ahora convertido en líder del Instituto, o si te opones a él.
Hasta ahí todo bien, salvo por el hecho de que la decisión en esencia te importa una mierda, porque tu personaje y el de tu hijo han tenido poco roce durante la trama. Y sin roce, pues como que no sientes nada por él, no has desarrollado un vínculo. Así que te da lo mismo ponerte en contra de tu hijo y joderle sus planes de dominar el mundo a los que ha dedicado toda su vida mientras tú dormías. No hay tal dificultad en la decisión, y no puede haberla.
No podemos esperar que al jugador le duela perder al compañero X si éste ha estado de adorno durante toda la trama, si no te ha salvado la vida, o si tú no te has involucrado en sacar a su familia de un aprieto. Si quieren un excelente ejemplo de cómo manejar esto, les recomiendo Mass Effect 1.
Se dice fácil, pero no crean que lo es, y lo sé por experiencia propia, pues en el guión del juego hay una situación parecida. El equivalente literario es desarrollar un personaje que se haga querido por el lector y matarlo después (la maniobra de Martin) para causar un efecto emocional en los lectores. 
Y con esto me despido durante algunos días, hasta que se cure mi mano.