Desarrollando para Windows Phone 7

Estas dos últimas semanas, he tomado el relevo en el desarrollo de un juego para Windows Phone 7 (el nuevo smartphone que sacará Microsoft el próximo mes), un proyecto que desde Undead, con la colaboración de Miguel Murat (gran diseñador que “parió” la idea), tenemos pensado presentar en la Imagine Mobile. A priori, sólo iba a encargarme del project management, pero debido a la indisponibilidad de un colaborador, tuve que desempolvar XNA y comenzar en temas de desarrollo.

El inicio del proyecto comenzó hace varios meses, pero debido a que no encontraba un programador para ello, el “inicio real” se retrasó muchas semanas. Comenzamos a trabajar en Silverlight, debido al uso de teclado en el gameplay del juego, pero al retomarlo yo, decidí migrar a XNA, pues apenas habíamos avanzado y con tal entorno me siento más cómodo, al haberlo tocado ya en varias ocasiones. Además, por lo que he podido ver, Silverlight tiende a quedarse muy corto para el tema de juegos. :(

Al igual que la versión 3.1, la 4.0 es muy productiva. 15 días dándole duro, contando la “pérdida” de mucho tiempo mirando documentación, “trasteando“, haciendo pruebas… y estamos en un punto muy avanzado. Más en concreto,

Puntos positivos

  • Ahora la carpeta “content“, donde se alojaba todo el contenido (texturas, modelos, sonidos, xml…) está en un proyecto aparte, dentro de la solución. Me convence este aislamiento, parece que queda todo más estructurado.
  • La lectura de XML, no recuerdo si ha mejorado algo respecto a la versión anterior, pero es gloria bendita.
  • Los “game components“, algo así como componentes u objetos del juego, sigue siendo un acierto. Es tan cómodo para gestionar elementos…
  • La gestión del “multitouch” parece currada. Todavía no le acabo de pillar el sentido a algunas cosas, pero en principio resulta fácil, y parece que hay mucho control.
  • El Visual Studio 2010, seguro de sol. ;) Si no es el mejor IDE que he tocado, poco le falta. La documentación del msdn, es con lo que he ido tirando, sin problemas. (Aunque la organización del concurso también me he resuelto dudejas :P)

Puntos negativos

  • Si para leer un XML con los datos de los niveles, por ejemplo, para leer un simple fichero de texto, la cosa no está tan pulida. Dentro del Content, no te los reconoce, además que está pensado para serializar, con una clase y demás. Así que hay que montar una movidilla con funciones típicas del IO / Stream. Para un sólo dato, no es demasiado sangrante, pero para guardar una tabla de puntuaciones, o varios datos de configuración de usuario, hay que “parsear” a mano, según el formato que le demos al fichero de texto, que está en el sistema a saber dónde, haciendo difícil tocarlo a mano. Vamos, que no entiendo por qué no se permite el mismo proceso de leer xml, para escribir, desde la misma clase que serializa.
  • Desde XNA, no se pueden llamar a la mayoría de funciones básicas implementadas en Silverlight, del mismo modo que a la inversa. Esto nos ha supuesto un problema, pues no tenemos manera de llamar a la API relacionada con teclado. Y desde Silverlight, no tenemos acceso a clases básicas en juegos, como la “Game” ó “Graphics“. No me parece mal este hecho, pero sí que la API de XNA para la gestión de teclado sólo consista en un par de funciones que solo sirven para coger un dato del usuario, pero no para interactuar con el gameplay. En iPhone sí es posible!
  • Alguna cosilla por ahí que tampoco termino de entender (aka ¿?), siendo ya temas relativos a clases o funciones concretas.

En general, es un entorno que gusta mucho; se programa cómodo, incluso con las cosas negativas y limitaciones. El día 16 sale la versión final de las herramientas, trabajando ahora con la beta. Queda por ver cómo serán las cosas a nivel de negocio, pero como plataforma de desarrollo, me convence.

Más vale proyecto cerrado…

… que ciento volando. Aunque es aplicable a otros sectores, en videojuegos cada proyecto que se cierra tiene un significado especial, igual más en estudios independientes / empresas pequeñas, pero también en las grandes, donde las cancelaciones son más dolorosas, si cabe. Un proyecto se cierra tras N meses de desarrollo, tirando todo ese trabajo (y dinero) por la borda, dejando a todo el equipo con la miel en los labios de algo que no se acabará.

En las pymes solemos ajustar mucho más los tiempos, la producción… pero aún así el desarrollo de videojuegos es un arte complejo. Cualquier funcionalidad, por trivial que pueda parecer, lleva un coste elevado, así como toda la integración de diseño, grafismo, sonido, programación… Por A, por B, por C… muchos proyectos han terminado en “la papelera de reciclaje“, en fases muy dispares, desde la propia pre-producción, hasta ya metidos en faena… así que aunque de momento por Undead no hemos “matado” ninguno, es toda una satisfacción haber cerrado mi segundo proyecto como “producer” o “project manager“.

No se trata de ningún mmorpg (todavía xD!), pero como dice el título, más vale proyecto cerrado que…

Monkey Tower, una de postmortem

El otro día dejaba un vídeo con los consejos para afrontar una game jam, y hoy dejo un pequeño postmortem del proyecto en el que participé, junto al stratero Naranjo y a Mateo. Como siempre, la experiencia única. Se aprende, se disfruta, se reta….

La idea

Tras la presentación pública de las primeras ideas (y tras el anuncio de las restricciones de juego), hubo una que me llamó la atención. Un mono subiendo por plataformas a la torre de un castillo. Me recordaba a juegos muy adictivos de hace años… así que “compramos”, a falta de tener grafista para otra de las ideas atrayentes. Tras formar el grupo, comenzamos el trabajo…

Qué fue bien

  • Scrum Lite: agenciarnos un armario para organizar las tareas (ya lo hicimos el año pasado) puede llegar a ser muy productivo y motivante. En líneas generales, cumplimos con el planteamiento, a pesar de saltarnos algunas cosillas y sufrir estrés a las últimas horas.
  • Adictivo! Aunque el juego nos quedó muy simple, resultó “picar” bastante. El jurado y el resto de compañeros lo valoraron como muy adictivo, si bien los niveles al poco de juego se volvían imposibles. Hardcore, hardcore…
  • Detalles. Son poco notables, pero ahí están. El mono tiene menos impulso si corre sobre una plataforma que va en sentido contrario, o le sale “humo” en función de la potencia del salto a realizar (presionando la  tecla espacio mayor o menor tiempo)…
  • XNA. Hacía mucho tiempo que no tocaba nada en XNA (y en general, en temas relativos a juegos de escritorio), pero la plataforma sin duda es muy intuitiva. El último día me ayudó Naranjo en temas de programación, que tampoco lo había tocado, y también hizo cosillas en poco tiempo. Elegir el lenguaje adecuado a la necesidad y propósitos, es vital.

Qué fue mal

  • La impresión general. Aunque no era el objetivo, pasamos del menú y otros detalles, dando una sensación al juego de poco acabado. Si hay algo que cuesta mucho a nivel de programación y no tiene un efecto muy visible en el juego, es mejor obviarlo y ofrecer una imagen más terminada. Nosotros pulimos mucho esos detalles, pero no otros como hacer más visual el reloj o el interfaz de juego. El jugador con lo que se queda, es con lo que se nota a simple vista.
  • Equipo compensado. A priori el juego no era muy complejo. Pero siempre surgen cosas inesperadas, imprevistos… y un sólo programador es complicado que pueda llevar todo, hay que ajustar muy bien el tipo de juego desde el principio. Y nos pilló un poco el toro…
  • Hardcore! No hubo mucho tiempo para testing (nos comimos toda esa parte de la planificación), así que no tuvimos oportunidad de ajustar un poco los niveles. El juego se tenía que pasar en 5 minutos, pero sólo Naranjo logró tal hito.. y la mayoría no pasaba de la segunda o tercera zona, de las 5 existentes.

El proyecto se puede descargar de la página del Global Game Jam, y el vídeo, en youtube.

Consejos para un Game Jam

Un Game Jam (también llamado “compo“) es una “competición” (entre comillas, pues la finalidad primera es divertirse, aprender y convivir) consistente en desarrollar un videojuego en muy poco tiempo, como 48 o 72 horas.  El año pasado participé en el Global Game Jam, un evento a nivel mundial que tiene ese objetivo. Este fin de semana, es la edición de este año y estaré repitiendo la experiencia, junto con otros compañeros ya conocidos (y sin duda, otros por conocer). Antes de comenzar, nos pusieron un vídeo a modo de keynote, donde uno de los creadores del World of Goo daba algunos consejos para afrontar el reto,

Del 29 al 31, en la sede española, global game jam!