Countdown: Memorias de un juego Flash

Juan Mellado, 6 Marzo, 2010 - 10:30

CountdownHace una semana que publiqué Countdown, mi primer juego para Flash, y no quería dejar pasar la oportunidad de escribir algunas líneas sobre él antes darle carpetazo definitivo y pasar a otra cosa.

- Antecedentes: Durante la primera quincena de enero estuve buscando información técnica acerca del desarrollo de juegos para Flash. Al final me quedó claro que tenía dos opciones. La primera era utilizar Adobe Flash CS4, que es el programa que vende Adobe para hacer desarrollos para Flash de una forma sencilla y productiva a través de una interface gráfica. La segunda era utilizar Flex 3, que es un framework gratuito de código abierto que publica la propia Adobe, y que incluye un compilador de línea de comandos y las librerías necesarias para desarrollar aplicaciones para Flash utilizando ActionScript, una apuesta clara de Adobe para captar programadores con experiencia en otros lenguajes de programación.

La licencia de CS4 es un poco cara si no se piensa utilizar el programa con asiduidad, y la versión "trial" puede llegar a caducar antes de que se empiece a utilizar en serio el programa, algo bastante común para un proyecto "amateur". Así que me decidí por Flex, aunque no es una opción que recomiende a alguien que no tenga una experiencia previa en el desarrollo de aplicaciones.

- Herramientas: Para empezar a programar con Flex lo mínimo que hay que hacer es descargarse e instalarse el Adobe Flex SDK 3.5. Como incluye un compilador de línea de comandos, los fuentes podrían escribirse en Notepad por ejemplo, y compilar con un ".bat". Pero lo mejor naturalmente es utilizar un IDE para la gestión integral del proyecto.

En este punto hay dos opciones. La primera es utilizar Adobe Flex Builder 3, el programa de pago de Adobe que se encuentra disponible como una aplicación independiente, o como un plugin para Eclipse. Es más barato que CS4, y también tiene versión "trial", pero comparte sus mismos inconvenientes. La otra opción es utilizar FlashDevelop, un IDE gratuito que se ejecuta de forma nativa para Windows, y sobre algún tipo de máquina virtual para Mac OSX/Linux. Es bastante simple, y se echan en falta algunas opciones de IDEs más avanzados, pero ninguna con la que no se pueda vivir.

Por útlimo, para ofuscar el bytecode del .SWF final resultante, se puede utilizar la versión "trial" de irrFuscator. Aunque lógicamente es que mejor instalarla cuando ya se tenga terminado el desarrollo, para que no expire.

- Diseño: Inicialmente iba a programar un juego de tipo "Match 3" muy simplón. Y viendo el resultado final está claro que no he seguido ningún diseño ni guión preestablecido, simplemente he ido improvisando sobre la marcha.

La idea central surgió haciendo un menú de opciones. Quería que se ejecutase algún tipo de efecto al seleccionar una de las opciones, y se me ocurrió implementar la típica cuenta atrás. Me gustó tanto el resultado que pensé que podía desarrollar todo un juego sobre ese efecto.

Inicialmente las fichas se movían de forma aleatoria, su disposición por la pantalla era un tanto caótica, y en consecuencia la mecánica del juego resultaba bastante confusa. Al hacer que se moviesen de forma ordenada sobre un círculo el juego se simplificó muchísimo y mejoró su jugabilidad enormemente. Lo que es interesante comentar es que no era algo que tuviera previsto que pasara, simplemente lo probé y el resultado me sorprendió.

Otro problema del diseño inicial era que un mismo número sólo aparecía una sola vez, por lo que era extremedamente fácil. La cuenta atrás apenas llegaba a la mitad de su recorrido total en la mayoría de los casos. Casi abandono la idea. Hasta que una noche que estaba viendo la televisión (verídico) se me ocurrió que un mismo número debería poder aparecer más de una vez y que la cuenta atrás no parase hasta que se eliminanse todos. En ese momento me convencí a mismo de que "tenía un juego".

- Niveles: Es la primera vez que hago un juego de niveles, y es con diferencia la parte que más tiempo me ha llevado. Me propuse llegar a 50, pero finalmente se han quedado en 40, ya que me auto-impuse terminar el juego en la última semana de febrero, y ese era el número de niveles que tenía implementados en esa fecha.

En total habré desechado unos 20 niveles sobre el total diseñados. Una cantidad bastante grande, ya que representa un 50% de los que finalmente tiene el juego. Hay algunos que podían haberse quedado, pero los eliminé porque no encajaban con el diseño del resto.

El principal problema que me he encontrado, por mi total falta de experiencia y talento, es que lo que parecía divertido sobre el papel no lo era luego en la práctica. Y otro tanto ocurria con la dificultad, lo que para mi era muy difícil, otros se lo pasaban a la primera sin pestañear.

En cualquier caso, he disfrutando mucho realizando el experimento este, y he aprendido algunas cosas sobre la marcha.

- Desarrollo: El desarrollo ha llevado un mes y medio. Aunque lógicamente el tiempo real invertido es mucho menor. Algunas semanas apenas le habré dedicado 4 horas al proyecto, y otras habré llegado hasta 20. En total calculo que habré invertido unas 80 horas. Es decir, dos semanas completas, considerando una jornada de 40 horas semanales.

No tengo ningún tipo de experiencia con CS4, pero creo que de haberlo utilizado el tiempo de desarrollo hubiera sido mucho menor. Utilizar Flex, por decirlo de algún modo, es la manera "hardcore" de programar juegos para Flash. Por algunos vídeos de tutoriales que he podido ver, lo que en CS4 se hace pinchando con el ratón sobre una película y cambiado un par de propiedas, en Flex hay que hacerlo escribiendo bastantes líneas de código en ActionScript 3.

Para reducir el tiempo de desarrollo decidí no invertir demasiado tiempo en hacer gráficos, ya que me cuesta mucho dibujarlos y nunca quedo satisfecho con el resultado. En consecuencia, en Countdown no hay ningún bitmap. Todos los gráficos se generan mediante código. En este punto creo que utilizar CS4 hubiera sido más productivo, para tareas como la elaboración de las "claquetas" de los menús por ejemplo.

Por lo demás, el uso de Flex no es muy distinto al de cualquier otra librería o API.

- Distribución: Este era también un tema nuevo para mí. Hasta ahora, con mis juegos, me había limitado a publicarlos en mi propia web, y poco más. Tener un juego Flash terminado hacía que mereciese la pena comprobar como funciona la distribución en los grandes portales web.

Decepcionante, muy decepcionante. Cada portal tiene su propio sistema, y normalmente es necesario registrarse previamente. Por no mencionar algunos términos de uso del servicio, que son lo más parecido a contratos de venta de tu alma al diablo que he visto. Entiendo que cada cual defienda sus intereses a capa y espada, pero la consecuencia de todo esto es que el proceso manual de distribución es realmente penoso.

Al final he subido el juego en cuantos portales grandes, como Kongregate y Newgrounds, para conseguir un poco de "feedback" de jugadores anónimos acostumbrados a probar todo tipo de juegos Flash. En Kongregate el juego tiene actualmente un "rating" de 2.90 sobre 5. Y en Newgrounds un 2.46 sobre 5. Aunque en Newgrounds también le ha hecho unas cuantas "reviews" con un total de 7.8 sobre 10.

Buscando automatizar el proceso de distribución encontré bastantes referencias en Internet a Flash Game Distribution, un portal que ofrece un servicio gratuito que permite alojar juegos Flash y que se encarga de la distribución. Subí el juego a primeros de semana, lo aprobaron ayer, y según la pagina de estadísticas, ya se ha distribuido automáticamente a más de 200 webs. Muy útil.

- Monetización: En el foro de Flex/Flash de Stratos había leído bastantes posts sobre el tema, en particular de David Ferriz, que se dedica profesionalmente a ello a través de DevilishGames. De su lectura entendí que había tres líneas principales (y bastante sucédaneos): juego por encargo, esponsorización, y publicidad on-game.

La primera vía evidentemente no era la mia, la segunda la descarté porque el juego no está lo suficientemente pulido y haría falta dedicarle un tiempo adicional que no me apetecía invertir, así que me decanté por la tercera opción. Sin lugar a dudas la opción más sencilla gracias a Mochi Media y su servicio de publicidad Mochi Ads.

Por explicarlo de forma sencilla, es como el servicio Google AdSense, pero que en vez de obligarte a insertar una etiquetas HTML en tu página web, lo que se hace es obligarte a insertar una líneas de ActionScript en el código de tu juego. El mismo día que registré el juego, con un simple "preloader", me lo aprobaron y empezó a aparecer la publicidad sin ningún tipo de problemas.

¿Y genera grandes beneficios de forma inmediata? Por supuesto que no, a menos que se implemente en un juego con mucha visibilidad y un número enorme de visitas, del orden de millones, no de unos pocos cientos como el mio. Para ser realistas hay que pensar en esto como una carrera de fondo, muy a la larga, y siempre y cuando se consiga realizar una buena distribución "viral" del juego.

- Críticas: La mayoría de comentarios que he recibido han sido positivos, destacando lo original de la propuesta, teniendo en cuenta que era mi primer juego Flash, aunque pueda llegar a ser un poco repetitiva.

La principal demanda que me han hecho es la de inclusión de algún tipo de sonido y música de fondo. Y esto es curioso porque, mientras lo programaba, llegué a generar algunos sonidos bastante aceptables con sfxr, e incluso los integré en el juego, pero al final los quité porque no aportaban absolutamente nada al juego. Con música no probé, pero lo único que era capaz de imaginar era el sonido del tic-tac de un reloj aumentado de volumen a medida que terminaba la cuenta atrás.

Como comentario adicional, comentar que la ausencia de ficheros de sonidos, y de gráficos como comenté antes, hacen que el juego apenas pese 30 Kb en su versión original, y 50 Kb en la que se incluye la publicidad.

En cualquier caso, la crítica más negativa y repetida que le han hecho al juego es que le falta un sistema de puntuación y una ventana de felicitación al superar el último nivel. Si el juego hubiera sido desarrollado por una empresa que intenta vivir de esto, evidentemente hubiera sido un suicidio no implementar los habituales mecanismos de recompensa. Pero a mi la verdad es que no apetecía pasar mi tiempo libre implementando esas opciones, asi de simple. Además, cuando lees un comentarios diciendo que "lo jugaría si tuviera sistema de puntuación", da la impresión de que la única motivación es mostrar al resto lo buen jugador que se es. O sea, enseñarle al mundo el tamaño de nuestro e-pene. Vanidad, bendita fuente de ingresos.

¿No encontró lo que buscaba?

Utilice el buscador para encontrar más páginas en esta web o en toda Internet.
 
Web www.inmensia.com
Josepzin (no verificado), 16 Marzo, 2010 - 08:45

Un análisis muy interesante. ¿Conoces esta librería: http://flashpunk.net? Tiene muy buena pinta, aunque es para juegos pixel.

En alguna de mis otras vidas paralelas voy a hacer algún juego Flash

Juan Mellado, 16 Marzo, 2010 - 12:00

Sí, conozco esa librería, le eché un vistazo al principio, junto con otras. Pero al final no utilicé ninguna.

La única que me he mirado el código en más detalle es flixel (http://www.flixel.org/), para ver como estaban resueltas algunas cosas de implementación. Está muy orientada a "pixel", y fue la que se utilizó para crear un juego bastante popular llamado "Canabalt" (http://adamatomic.com/canabalt/)