Fundamentos del Diseño de Juegos: 6 Trucos Gastados Utilizados en Juegos. ¿Cómo los reemplazamos?

Super Paper Mario

CRACKED.com ofrece un artículo muy bueno con 6 ejemplos de trucos de diseño utilizados en muchos juegos que deben irse, ya sea por fastidiosos, por ser ya un cliché, o porque han sido reemplazados por algo mejor. El listado lo presento a continuación de forma resumida, con un par de vueltas que sí podrían ser tomados en cuenta a la hora de hacer un juego:

  • Ácido, pozos de lava o fondos con puyas: Utilizados ampliamente en Mario Bros., Sonic o Prince of Persia. En el artículo recuerdan educadamente que, en la realidad, estar tan solo cerca de un pozo de lava te puede cocinar vivo. No recuerdo algún juego de plataforma que tome esto en cuenta. Un truco más para el repertorio de cosas que sí se pueden usar.
  • Enemigos o poderes que no tienen ningún sentido: frutas y pastillas son las grandes armas de un personaje para enfrentar fantasmas. Por lo general son objetos absurdos que no guardan relación con la realidad, a menos que pienses que consumir hongos realmente dobla tu tamaño. Supongo que estos elementos eran utilizados en su momento para presentarlos grandes y resaltantes, y así saltar las limitaciones gráficas de una consola. Realmente no veo cómo esto pueda estar gastado, si hay juegos que han logrado innovar sobre esto (pensando en Katamari Damacy, uno de mis juegos favoritos de todos los tiempos).
  • Passwords largos e ininteligibles: De cuando los cartuchos no tenían espacio para salvar juegos. Gracias al cielo que han sido reemplazados. Aún así, el tema de cómo y cuándo dejar al jugador guardar un juego despierta pasiones.
  • Enemigos que siguen un patrón repetitivo: En su momento no lo ví, pero el último jefe de Sonic 2 es de lo más predecible. Los patrones pueden ser más largos, pero lo cierto es que eso le recuerda al jugador que está jugando un juego. Sin embargo, pienso que patrones bien elaborados calan mejor que una mala inteligencia artificial.
  • Cuchillas rotativas/Bloques que caen: El punto que más risa me da. Definitivamente los jefes de los niveles jamás tenían que salir de sus fortalezas, por la cantidad de trampas que habían. Esto me da una idea buenísima: ¿qué tal un juego donde un jefe de nivel debe salir de su nivel y… [completen la idea 😉 ]
  • Puntos: Creo que los puntos no se van a alejar en un buen tiempo. Es la manera más objetiva de medir cómo lo hizo un jugador.

También incluyeron otros puntos que casi lo logran:

  • El vendedor más grande del mundo: Aquél que está en medio de una montaña solitaria y tiene de todo para el jugador. Pienso en un juego de estrategia donde eres el vendedor y debes manejar el tiempo entre conseguir esos peligrosos objetos y atender clientes.
  • Paredes invisibles o puertas pintadas: Frustran al jugador. Gran causal de abandono de un juego. Al igual que los enemigos con patrones repetitivos, le recuerdan al jugador que solo está haciendo eso: jugar un juego.
  • Salto múltiple: Físicamente imposible.
  • Capacidad infinita de carga: Siempre a la orden del día. Agarra ese piano, no importa lo grande que sea
  • Incapacidad de nadar: Esto siempre me molestó de los dos primeros Grand Theft Auto. Los personajes se ahogan, literalmente, en un vaso de agua.
  • Plataformas que flotan sin razón aparente: Auténticos monumentos que desafían la física.

En fin, léanse el artículo, y les lanzo una pregunta:

Dados estos trucos gastados en el diseño de videojuegos, ¿cómo les ponemos vida nueva?, ¿qué giro le damos para que sean nuevamente frescos?, ¿qué juego pensarías hacer en base a esto?

(PD: Las ideas que doy son sólo eso, ideas. Eres libre de tomar prestado algo de este artículo, o los comentarios e implementar lo que quieras con eso. No necesitas pedir ningún permiso.)

¿Cómo aprender un lenguaje de programación? Haciendo un juego

Aprender un nuevo lenguaje de programación es una tarea que constantemente se hace durante la carrera de un programador profesional. Y a pesar de que esto es así, esta tarea nunca es repetitiva. Todos los lenguajes tienen pequeñas diferencias entre sí que pueden representar un reto para el programador, o volverlo loco. Y es que la mayoría de las situaciones en las que uno aprende un lenguaje se deben a una obligación, ya sea académica o laboral, y en etapas donde la urgencia es grande y las posibilidades de tomárselo con calma son pocas.

Sin embargo, les tengo una estrategia para aprender un lenguaje de programación: hacer un juego. Sólo es necesario un poco de tiempo extra. Un juego tiene algunas complicaciones extra que las aplicaciones comunes no tienen, por lo que esta es una estrategia similar a la que haría un deportista: entrenar más allá de lo necesario para poder enfrentar otros retos sin tanto esfuerzo. Y lo que propongo es más divertido que hacer pesas.

Les voy a presentar 3 casos donde he aplicado esta metodología, con un buen grado de éxito y muchísima diversión. Esto, por supuesto, es mi caso particular, es decir, los resultados pueden variar. Comencemos.

Cómo aprendí Java

Cuando terminé mi primer curso universitario directamente relacionado con programación, donde tuve que aprender a utilizar Java, me quedé con las ganas de saber más sobre este lenguaje. Siempre había tenido interés por «hacer juegos», un área que para mí en ese momento era todavía muy difusa. El hecho es que este interés me llevó a hacer mi primer juego hecho «con seriedad». El resultado fue un juego de UNO muy sencillo al que le fui agregando algunas cosas, y terminó con algunas reglas que aplicaba cuando hacía partidas con los amigos.

UNO for Java screenshot
Parte de un screenshot del juego.

Cuando terminé de hacer este juego, había aprendido muchísimo sobre la librería Swing de interfaces gráficas, y comencé a experimentar de primera mano sobre lo que hay que hacer para implementar un juego: estructuras de datos y algoritmos.

Cómo aprendí C

Tiempo después, por una serie de eventos desafortunados, me encontré en una situación en la que no podía ver clases, así que disponía de mucho tiempo libre. A mis manos llegó un excelente tutorial de cómo hacer raycasting, la técnica que utiliza Wolfenstein 3D para hacer sus gráficos. Debido a que pronto en otro curso iba a utilizar el lenguaje C, pues decidí aprenderlo haciendo este tutorial, y escogí la librería Allegro para las rutinas gráficas.

El proceso fue divertidísimo, y el resultado fue haber aprendido a programar en C, sin pensar en orientación a objetos. Concluí que Allegro es una buena librería para implementar juegos. Cuando comencé el curso donde requería usar este lenguaje, ya tenía un dominio relativamente decente de los apuntadores y otras cosas que lo enredan a uno cuando está aprendiéndolo.

Raycaster screenshot
Screenshot del raycast cuando lo estaba trabajando.

Cómo aprendí Python

El cómo estoy aprendiendo Python lo han presenciado ustedes a través de CuteGodChigüire, el juego tipo God que he estado haciendo y del que he hecho una crónica de desarrollo. A diferencia de los otros dos, ustedes tienen la ventraja de que pueden leer cómo se ha implementado el juego paso a paso.

Las Complicaciones

Como dije en un principio, los juegos presentan complicaciones que otras aplicaciones no tienen. Cuando no se sabe cómo implementarlo, un juego puede parecer algo impenetrable. Lo cierto es que un juego comienza como algo sencillo: un conjunto de estructuras de datos y un algoritmo que las actualiza constantemente, un algoritmo que implica un ciclo infinito que chequea al final si la meta del juego se cumplió. Agregar reglas de juego e implementar efectos como animaciones, transiciones y otras cosas van complicando la tarea. Lo bueno de esta metodología es que uno puede parar en el momento que uno siente que ya está en capacidad de poder escribir en el lenguaje.

La otra complicación puede ser ubicar una librería gráfica que facilite la tarea de programación. En la época que aprendí Java no habían muchas opciones de librerías, pero hoy en día sí las hay. En C/C++ están SDL o Allegro, y existen una variedad de bindings de estas librerías a otros lenguajes, por lo que hay excusa para aprender estos lenguajes también.

En este momento les dejo estas preguntas: ¿vale la pena hacer un juego para aprender un lenguaje de programación?, ¿lo has hecho y te ha beneficiado?, ¿ves otras complicaciones que no he cubierto aquí?, ¿estoy diciendo una loquera?. Dejo este espacio abierto para comentar esta propuesta.

Caracas ya tiene un chapter en el International Game Developers Association

IGDA Caracas

Casi una casualidad, podría decir. En estos días de nuevos ingresos y anuncios de nuevos ingresos, buscando casualmente por Google consigo el foro de la IGDA para el Chapter Caracas. Aunque actualmente somos pocos los que hemos escrito allí, el formar parte de una asociación de renombre como la IGDA puede ser un gran paso para conseguir y consolidar a desarrolladores de juegos locales. Actualmente tres empresas están participando en el arranque del chapter:

La IGDA, siglas de la International Game Developers Association, es una de las asociaciones más grandes de desarrolladores de juegos de Estados Unidos. Ellos son los organizadores del Game Developers Conference, una conferencia que se lleva a cabo anualmente en California, y según algunas fuentes, la sucesora del E3, el Electronic Entertainment Expo, después de que éste fuese fuertemente reestructurado el año pasado.

En lo personal, ya me presenté en el foro, y estaré pensando en unirme a esta asociación. Animo a aquellos que no conozcan esta asociación se paseen por el foro, se presenten y visiten la página del Chapter Caracas de la IGDA.

Planet Stratos: Un agregador de blogs de desarrolladores de videojuegos en español

No quería tampoco pasar por alto que este blog ya está formando parte de Planet Stratos, un agregador de blogs de desarrolladores de videojuegos residentes en España o hispanohablantes. Planet Stratos forma parte de Stratos, un sitio español bien completo de desarrollo de videojuegos. Contiene ofertas de trabajo, enlaces a tutoriales, noticias y foros. Visiten el sitio para poder leer a otros desarrolladores y sus proyectos.

Game File Format Central: Formatos de archivos para tu juego

¿Buscas el formato de un archivo de juegos para tu librería de programación? Sea el formato JPG para imágenes, o sea el formato WAD de niveles para Doom, el Game File Format Central tiene esos y muchos otros más. Game File Format Central es un wiki donde reside la información de estos formatos, con su orden de byte (el endian) y los datos que contienen. Una página que vale la pena tener marcada para una consulta rápida.

Via Gamedev.net.

Accediendo a los subpixels con Pygame mediante SubPixelSurface

Una de las limitaciones que posee Pygame, una librería para desarrollar juegos con Python, a la hora de dibujar sprites en pantalla es que sólo es posible hacerlo en coordenadas enteras. Esto, para algunos sprites pequeños, ej. partículas, es un salto demasiado grande y se ve feo en la pantalla. Will McGugan, de Where there is a Will, escribió un pequeño paquete que toma una superficie (un Surface) de Python y lo transforma en una superficie capaz de dibujar objetos con coordenadas fraccionales, justo como lo harías con OpenGL u otra librería 3D. Al hacer este procedimiento con el código de Will, el objeto mismo hace el cálculo de los subpíxeles, y combinado con la animación que le des al objeto el resultado es un movimiento muy suave, como lo demuestra un GIF de ejemplo a continuación:

Will McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface DemonstrationWill McGugan SubPixelSurface Demonstration

Las pelotas de encima están dibujadas mediante sub-pixeles, y las pelotas de abajo con coordenadas enteras. La diferencia en la suavidad de movimiento es notable. Requiere el módulo Numpy para poder funcionar. También tiene la desventaja que el precálculo hecho a cada superficie requiere una buena cantidad de memoria, específicamente 9 veces más que una superficie normal para el nivel por defecto de precisión, por lo que es manejable para superficies relativamente pequeñas.

Creando juegos de aventura con Adventure Game Studio (IV)

Este artículo es la parte 4 de 6 de la serie Creando juegos de aventura con Adventure Game Studio

AGS Blue Cup Logo Adventure Game Studio es un programa creado por Chris Jones para que amateurs de la creación de videojuegos puedan hacer sus juegos de aventura al estilo de los juegos que hacía Sierra y/o LucasArts a mediados de los 90. En particular, AGS permite concentrar a la persona o al equipo en la creación de contenido del juego y facilitar la programación de los guiones que conformarán la historia. AGS se ha convertido a lo largo de estos años en un programa muy poderoso, con una gran gama de características, un lenguaje de scripting muy flexible, y una excelente comunidad dispuesta a ayudar y con gente bien simpática. La cuarta parte de esta serie pone en práctica el flujo de trabajo en la producción de un juego de aventura.

En esta parte vamos a establecer la historia de un juego de aventura, comenzaremos a crear los gráficos necesarios para el juego de aventura y comenzaremos a crear los sprites y animaciones necesarios para los personajes. En la siguiente parte crearemos las habitaciones y explicaremos los conceptos dentro de éstas. Esta parte promete ser larga, así que lo mejor será comenzar. Sigue leyendo Creando juegos de aventura con Adventure Game Studio (IV)

Game Over: La usabilidad de los videojuegos es importante

Game Over alien Game Over! es, antes que nada, un chiste interno para los desarrolladores de juegos. Game Over! es, según los creadores, el primer (y ojalá único) juego no usable del mundo. Game Over! enseña, a través de sus 21 niveles, principios básicos de usabilidad que son constantemente violados por los desarrolladores tales como:

  • Proveer tutoriales para los usuarios.
  • No depender exclusivamente del color para proporcionar información. (Existe el brillo, por ejemplo)
  • Proveer controles de volumen para voz, sonido y música.
  • Proveer controles de dificultad.

Otros principios más son mostrados en los niveles, con un humor bastante cruel, y todo con variaciones de un Space Invaders. Si te interesa la programación de juegos, no dejes de bajar Game Over! y darle un vistazo. Es nuestro deber proporcionarle a los jugadores una buen experiencia mientras estén jugando con nuestros programas.

Gráficos gratuitos y bonitos. Especiales para prototipos de juegos

Siguiendo la nota de prototipos de esta semana tenemos vía Kotaku (nuevamente) un paquete de 30 imágenes en PNG listas para ser utilizadas específicamente en prototipos, titulado los Milagrosamente Flexibles Tiles para Prototipos de Juegos de Danc (o Danc’s Miraculously Flexible Game Prototyping Tiles, en inglés). Las imágenes están realizadas con generalidad en mente, para que sirvan tanto como para juegos basados en tiles o juegos de plataforma, y con una buena resolución moderna de 101×171 pixeles.

Danc’s Miraculously Flexible Game Prototyping Tiles Mockup

Según Danc, creador de estos gráficos, el objetivo de este paquete es reducir el tiempo que pierde un programador haciendo dibujos realmente patéticos (lo que yo suelo llamar aquí «Arte del programador»), y al mismo tiempo poder presentar un prototipo con dibujos atractivos (algo que puede afectar positivamente el alma 🙂 ). El autor también alienta a los programadores a que si necesitan sacar más de este paquete, a modificar las fuentes (en PNG) de las imágenes para formar otros.

Zelda RPG Prototype: Lost Garden

En la misma página, podemos ubicar un par de paquetes gratuitos más para usarlos en prototipos. Este es un paquete de gráficos para RPGs, y un paquete de gráficos para shooters verticales. No empobrecen ni enriquecen a nadie, pero definitivamente son un tremendo esfuerzo para tener prototipos con arte más decente. Totalmente recomendado el blog de este artista.

Creando juegos de aventura para PSP: Adventure Maker para PSP y Windows

Adventure Maker logo Sé por la prensa usual de videojuegos que el Playstation Portátil (o PSP) tiene un gran mercado potencial para juegos homebrew, que son los juegos hechos por amateurs para consolas. Este potencial se debe a que la consola al parecer puede correr aplicaciones no aprobadas por Sony (Fuente: Wikipedia) y, por supuesto, gente dispuesta a experimentar con juegos propios en sus respectivas consolas.

El caso es que es la primera aplicación que me encuentro, llamada Adventure Maker, con la que se pueden hacer juegos de aventura, quizás con una complejidad un poco menor comparado con aquellos hechos con otros programas, pero que no creo que la haga «menos adecuada» para gente que comienza o que quiere desarrollar algo rápido. Veinte puntos para esta gente porque ofrece una versión gratuita para evaluar el programa, donde se pueden utilizar hasta 150 «pantallas». Ofrecen también una versión paga con opción para distribuir comercialmente los juegos producidos.

Este servidor se lo está bajando ya para ver qué tal. Si te pica la curiosidad lo puedes bajar también. Saca juegos tanto como para PSP como para Windows.