sábado, 28 de noviembre de 2009

Creación de game engine y editor de niveles.

En el mundo de los videojuegos la creación de un game engine no es una tarea sencilla, ya que para poder implementar un motor se requiere de conocimientos en diversas área técnicas, tales como el manejo de APIs gráficas (OpenGL, DirectX), sonidos, física, inteligencia artificial, y muchas otras.

A nivel de desarrollo amateur muchas veces conviene hacer uso de uno de los múltiples motores disponibles para poder llevar a cabo la implementación de un videojuego. Sin embargo, para las personas que desean hacer del desarrollo de juegos una actividad profesional (por ejemplo, como Ingeniero de Desarrollo), es altamente recomendado el poner en práctica los conocimientos de programación y de diseño de interfaces para programar un game engine y un editor de niveles.

Es así como desde hace algunos años he destinado tiempo de mis ratos libres para trabajar en un proyecto personal de desarrollo de un game engine 3D orientado a juegos en tercera persona. A pesar de haber estudiado Ingeniería Civil en Computación, esto me ha servido para refrescar y profundizar mis conocimientos en el área de modelamiento geométrico, física newtoniana, inteligencia artificial (máquinas de estados finitos, lógica difusa), y muchos otros conceptos que si bien pueden llegar a sonar un poco complejos y/o abstractos, se entienden muy bien al momento de aplicarlos en el computador y observarlos de forma visual.

A continuación publico una imagen del editor de niveles que he desarrollado, el cual permite entre otras cosas cargar modelos 3D en distintos formatos (COLLADA, 3DS/MAX, MD5, OBJ, etc), los cuales pueden ser posicionados en un mundo tridimensional (coordenadas X, Y, Z), y esta información es almacenada en formato XML como parte de un nivel de un juego.





Como dato final, puedo decir a modo personal que una de las cosas más complicadas en la creación de un editor de niveles es la usabilidad de las herramientas que uno dispone para que sean utilizadas por los diseñadores de los juegos, ya que la idea es que el editor sea lo más cómodo, fácil de usar y que no sature al usuario con múltiples barras de herramientas, botones y otros artefactos, pero siempre teniendo en cuenta que el editor no debe sacrificar el potencial de las múltiples funcionalidades que están disponibles para diseñar el videojuego.

miércoles, 25 de noviembre de 2009

¿Qué es un Game Engine?

Un Game Engine o "motor de juego" es una pieza de software que permite a los desarrolladores implementar los aspectos técnicos involucrados en un videojuego, tales como los gráficos, sonidos/música, detección de colisiones, y muchas otras tareas complementarias.

En la actualidad existe una serie de motores especializados en 2D y 3D, tanto de tipo comercial como del mundo open source, los cuales pueden ser usados por los desarrolladores para implementar sus videojuegos, ya sean de tipo FPS, RTS, u otra categoría.

La utilización de un game engine permite que los desarrolladores puedan centrar sus esfuerzos en la implementación de el o los videojuegos diseñados, ahorrando las tareas de tener que crear desde cero toda la infraestructura que soportará el universo del juego. Sin embargo, para que esto pueda resultar, en algún momento alguien tuvo que haber diseñado y programado el motor, lo cual es una tarea bastante compleja que puede llegar a tomar bastante más tiempo que el desarrollo de un solo juego.

Para facilitar la creación del mundo en un videojuego, los game engines proveen herramientas como editores de geometrías, editores de sistemas de partículas, etc., cuyo objetivo es proveer funcionalidades visuales que permitan a los desarrolladores ir observando en todo momento cómo se verá el juego al momento de ejecutarse.

Un buen sitio que permite revisar el estado del arte de los motores para distintos lenguajes de programación es DevMaster, en donde pueden encontrarse los motores pagados y gratuitos más populares para ser usados con diversos lenguajes, tales como C++, Java y otros.

Junto a esto, una excelente noticia fue la reciente liberación del motor Unreal Engine 3, el cual fue utilizado para crear los juegos Unreal Tournament 3 y Gears of War. Usando esta tecnología es posible que desarrolladores amateurs puedan experimentar gratuitamente (mientras sea sin fines comerciales) con herramientas de primer nivel para realizar su propias creaciones.

jueves, 4 de junio de 2009

Monkey Island, el regreso de un clásico.

En la conferencia de videojuegos E3 de este año, se ha anunciado que LucasArts va a retormar la saga de uno de los juegos más emblemáticos y queridos del género de la aventura gráfica: Monkey Island.

El anuncio ha llegado por partida doble, ya que por un lado estará "The Secret of Monkey Island: Special Edition", una remasterización de la primera parte de la saga, y por otro estará "Tales of Monkey Island", que corresponde a una nueva entrega desarrollada por Telltale Games, la cual se encuentra divida en cinco capítulos.

Éstas son muy buenas noticias para los amantes de los juegos interactivos, y para todos los nostálgicos que recordamos con cariño los "duelos de insultos", al famoso "mono de tres cabezas" y tantos otros chistes, sketchs y parodias que nos hicieron reír en la década de los noventa. Mención aparte recibe la excelente banda sonora compuesta por Michael Land, la cual destaca por su toque caribeño y por darle vida a cada uno de los artísticos escenarios del juego.

Muchas gracias a Ron Gilbert por haber diseñado el universo de Monkey Island, y a LucasArts por revivir esta obra maestra de los videojuegos.

martes, 24 de marzo de 2009

Videojuegos en la educación superior chilena.

En los últimos cinco años, las instituciones de educación superior chilenas han empezado tímidamente a incorporar en sus mallas curriculares algunos cursos y talleres vinculados al mundo de los videojuegos. El objetivo ha sido proveer a los estudiantes las herramientas y conocimientos que les permitan diseñar y crear aplicaciones de carácter lúdico, las que pueden ser utilizadas como poderosas herramientas de apoyo al aprendizaje, o simplemente con el objetivo de entretener a los usuarios finales.

Una de las iniciativas más conocidas en el ambiente académico es el curso "Creación de Videojuegos", el cual es dictado una vez al año en la Escuela de Ingeniería de la Universidad Católica por el Prof. Alejandro Woywood. En este curso se pretende que los alumnos puedan conocer los aspectos esenciales en el desarrollo de un videojuego, tales como la elaboración del diseño, la programación, la concepción del arte y los tópicos relativos a la gestión de un proyecto de esta índole. La página oficial del curso contiene además la presentación de algunos trabajos realizados por estudiantes en años anteriores, los cuales pueden ser vistos en el siguiente link: http://www2.ing.puc.cl/~iic3686/juegos2006-1.html

Por su parte, el Departamento de Ciencias de la Computación de la Universidad de Chile posee el curso "Taller de Juegos Multiusuario", el cual es dictado por el Prof. Luis Guerrero. Los contenidos de estudio de este taller abordan el ámbito de los Sistemas y Juegos Colaborativos, el Aprendizaje Colaborativo Asistido por Computador (CSCL), la Interacción Humano-Computador en entornos colaborativos, y el Aprendizaje Basado en Juegos.

Junto a esto, existe el curso "Diseño y Desarrollo de Videojuegos", dictado por el Prof. Jaime Sánchez. En él se estudia el ámbito de los "Epistemic Games", los cuales se definen como juegos de computador que permiten a los participantes aprender a pensar como algún tipo de profesional (ej: ingeniero, arquitecto, periodista, etc.). El objetivo de estos juegos es que los estudiantes puedan desarrollar una serie de habilidades y competencias que les permita desenvolverse adecuadamente en un dominio de estudio.

Es de esperar que en Chile sigan surgiendo nuevas iniciativas académicas que permitan el estudio formal de los videojuegos, para así incentivar y mejorar la formación de los profesionales de esta industria en el país. Por lo pronto podemos ver que los videojuegos sí han tenido repercusiones en el mundo académico, y su incorporación como tema de estudios en las instituciones de educación superior ya es una realidad.

martes, 3 de marzo de 2009

Música en los videojuegos: conversación con Adam Gilmore.

Quizás algunos nostálgicos de la vieja escuela recuerden con cariño la "banda sonora" de algunos videojuegos clásicos de la época de los 8 bits. Cómo olvidar aquellas excelentes composiciones realizadas para juegos de computador Atari 800xl y Commodore 64, tales como las canciones de "World Karate Championship", "Boulderdash", "Draconus", "Zybex" y tantas otras. Justamente estos últimos dos videojuegos tienen un denominador común: el gran músico Adam Gilmore.

Adam Gilmore es un compositor inglés que creó piezas musicales para varios juegos durante la década de los 80 y 90, y plasmó su original estilo utilizando los chips de sonido SID y Pokey de aquella época, los cuales contaban con 3 y 4 canales de sonido respectivamente.

Allá por el año 2000 me animé a investigar cómo Adam había podido realizar sus composiciones en aquellas plataformas de 8 bits, por lo que decidí buscarlo a través de la red. Finalmente pude encontrar su dirección de e-mail (hace 9 años era bastante más difícil localizar el e-mail de alguien :) , y le envié un correo con algunas preguntas de mi interés, las cuales se las presento a continuación junto a las respuestas que él me dio:

____________________________
Date: Fri, 03 Mar 2000 04:08:19 PST
From: Adam Gilmore
Subject: Re: Hi!

hi milko,

sorry it's taken me so long to get back to you - i've been very busy developing web sites :)
yeah - the atari stuff was really good to work on - i used to get really good reviews for my atari work as there wasn't many people composing on it. Rob Hubbard's work got me interested in the Atari as it had excellent bass sounds (i'm a bass player)

Here are the answers to your questions...

Q) How did you create the music?

A) I wrote my own player on the C64 (with a lot of help from Jason Whittaker) in 6502 assembler using OPTASM. The music data itself was coded directly into the program using hexadecimal (which was fun:)) - i got quite fast at this in the end. I wrote the music using various keyboards (Casio CZ101 / Kawai K1 / Yamaha RX17 drum machine) then converted it to work on the computer. I had a MIDI sequencer on the C64 (i can't remember it's name tho').I converted my C64 player to run on the Atari (which was quite straightforward) as they both run on a 6502 processor.

Q) Did you work with 'Brian Jobling, Michael Owens and Kevin Franklin' at the design of 'Zybex'?

A) I didn't design it but i did quite a lot of play testing whilst it was in development. I was good friends with the guys at Zeppelin games. I don't keep in touch with them anymore, which is a pity.

Q) do you have a web site?

A) No - but http://www.c64.org/ have a lot of my C64 music on it. I've got all the old 5 1/4 inch disks that i've got to send to Adam L. I keep forgetting to send them and i think he's given up hassling me :)

Anyway, thanks for the interest in my music.

Speak to you soon,
Adam
____________________________

De lo que estamos seguros es que la música de Adam Gilmore y de otros grandes, tales como Rob Hubbard y Ben Daglish, siempre será recordada por toda una generación de videojugadores.

miércoles, 18 de febrero de 2009

Programación de videojuegos: patrones de diseño.

En el ámbito de las aplicaciones empresariales es muy común encontrar sistemas computacionales que han sido desarrollados considerando el uso de patrones de diseño. En particular, en el mundo de las aplicaciones J2EE existen los patrones de orientación a objetos y de la definición Core J2EE de Sun Microsystems, tales como los patrones Singleton, Data Access Object (DAO), etc., cuyo objetivo es entregar un conjunto de buenas prácticas y soluciones a problemas comunes que beneficien a la arquitectura, diseño y programación de sistemas complejos.

Tomando en cuenta que el desarrollo de un videojuego puede llegar a ser un proyecto de grandes dimensiones, cabe preguntarse qué tipos de estándares, recomendaciones y/o buenas prácticas pueden ser utilizadas para potenciar su desarrollo.

Un patrón de arquitectura clásico que puede ser utilizado en la creación de un videojuego corresponde al Modelo-Vista-Controlador (MVC), el cual postula realizar una separación entre la zona que posee los datos de una aplicación, la zona que considera la visualización de los datos, y la zona que permite contener la lógica de control de estos datos.

Para el caso de un videojuego, el Modelo puede estar compuesto por objetos que mantienen el estado del mundo y de los personajes que participan en el juego (ej: llevan el control de la energía de los jugadores, la cantidad de municiones de cada uno, etc.); la Vista puede estar compuesta por objetos que manejan y despliegan las animaciones y sonidos de los personajes del juegos, los cuales hacen uso de los objetos del Modelo para observar su estado y determinar qué es lo que se debe desplegar (ej: se despliega una animación de un personaje feliz cuando su energía está al máximo); y por último el Controlador puede estar compuesto por objetos que responden a los eventos enviados por el usuario del juego, tales como los movimientos que se realizan a través de un joystick/teclado/mouse, los cuales invocan cambios en el Modelo y probablemente también en la Vista (ej: el Controlador recibe una orden del usuario que le indica que el personaje debe saltar, por lo que interactúa con el Modelo para ver si es posible realizar el salto según las condiciones del juego en ese momento).

Un muy buen artículo sobre el uso del patrón MVC aplicado en un videojuego comercial puede ser visto en el sitio de Gamasutra, en el cual se ejemplifica su uso mediante el modelamiento de un tanque para un juego 3D de guerra (hacer click acá).

Próximamente discutiremos en este blog otros patrones útiles para el diseño y programación de videojuegos.

martes, 10 de febrero de 2009

Industria de los videojuegos en Chile.

En los últimos años han surgido algunas empresas que se han atrevido a invertir en el desarrollo de videojuegos hechos en Chile. Las producciones van desde los juegos 'casuales' diseñados para consolas de última generación (ej: XBOX360) hasta creaciones para teléfonos celulares y computadores personales.

Algunas de estas notables empresas son:
  • Wanako Games: sin duda el máximo referente a nivel nacional. Este estudio fue formado el año 2002, y posee oficinas en Santiago de Chile y Nueva York (en EE.UU). Son especialistas en el desarrollo de juegos 'casuales' para consolas, y su creación 'Assault Heroes' fue premiada por el sitio especializado IGN en la categoría Mejor juego Xbox Live Arcade del año 2006.

  • AmnesiaGames: se especializa en el desarrollo de juegos y aplicaciones multimedias para teléfonos celulares, los cuales operan en plataforma Java (J2ME) y también mediante mensajería SMS/MMS/WAP. Para ver un listado de sus juegos puede verse el siguiente link: http://www.amnesiagames.cl/juegos.html

  • PsychoWorld: con sede en Valparaíso, esta empresa desarrolla aplicaciones con contenido multimedial para teléfonos celulares. Entre sus productos se encuentran una aplicación J2ME para poder observar TV Internet desde un teléfono celular, y diversos juegos en categorías tales como deportes, música, etc., los cuales pueden ser observados en la siguiente página: http://www.psychoworld.cl/web/htdocs/muestraprod.php?type=2

  • ACE TEAM: es un estudio localizado en Santiago de Chile, que cuenta entre sus filas con algunos de los antiguos miembros de WanakoGames. Su juego debut lleva por nombre 'Zeno Clash', el cual en enero de 2009 ha sido nominado como finalista en el Independent Games Festival en la categoría Excelencia en Arte Visual. Para mayor información, visitar: http://www.zenoclash.com

Por último, para obtener un mapa actualizado del desarrollo nacional de videojuegos, puede hacerse click en el siguiente link: http://www.gamedevmap.com/index.php?query=chile

miércoles, 4 de febrero de 2009

Inteligencia artificial en videojuegos.

Si alguna vez se han preguntado cómo diablos ponerle 'inteligencia' a un personaje de videojuegos, la respuesta viene empaquetada en un excelente libro: "Programming Game AI by Example", del autor Mat Buckland.

En los diversos capítulos del texto se realiza un paseo por los principios clásicos del diseño de inteligencia artificial para personajes de videojuegos, en donde se complementa cada tópico con ejemplos ilustrativos a través de imágenes, explicaciones sencillas, y lo fundamental: código fuente de referencia.

El enfoque práctico del libro es digno de agradecer, ya que el estilo pedagógico del autor permite que se puedan entender y 'digerir' temas tales como máquina de estados finitas para controlar personajes (FSM), lógica difusa para la toma de decisiones (fuzzy logic), algoritmos de búsqueda de caminos (pathfinding), etc.

En resumen, un texto altamente recomendable para los que deseen aprender o potenciar sus conocimientos en el especializado mundo de la A.I. Su sitio web: http://www.wordware.com/files/ai/

jueves, 22 de enero de 2009

Creadores notables del mundo de los videojuegos.

A lo largo de la historia han surgido algunos personajes que, con su creatividad y talento, han logrado crear algunas obras maestras en el mundo de los videojuegos.

Acá les dejo una breve lista con el nombre de algunos de estos grandes exponentes, y un link que lleva a sus sitios personales o biografías:

- Jordan Mechner (creador de Prince of Persia, Karateka): http://jordanmechner.com

- Ron Gilbert (creador de Monkey Island, Maniac Mansion, Indiana Jones): http://grumpygamer.com/

- John Carmack (creador de Wolfenstein 3D, Doom, Quake): http://armadilloaerospace.com/n.x/johnc

- Al Lowe (creador de Leisure Suit Larry, Freddy Pharkas): http://www.allowe.com

- Ken y Roberta Williams (Sierra On-Line) (creadores de King's Quest, Police Quest): http://www.backspin.org/kensentme/roberta/

- Sid Meier (creador de Civilization, F15 Strike Eagle, Solo Flight): http://www.firaxis.com/company/bios.php?bioid=56

- Alexey Pajitnov (creador de Tetris): http://www.mobygames.com/developer/sheet/view/developerId,929/

Si alguien conoce más creadores notables y algún link de referencia, ¡no dude en publicarlos acá!

viernes, 9 de enero de 2009

Nuevo game engine para Java: Ardor3D.

Joshua "Renanse" Slack, uno de los principales desarrolladores del excelente JMonkeyEngine, nos vuelve a sorprender con la creación de un nuevo motor para el desarrollo de videojuegos y aplicaciones en Java: Ardor3D.

Basado en JMonkeyEngine, este proyecto pretende entregar una herramienta open source que permita a los desarrolladores generar aplicaciones de nivel profesional. Este engine cuenta con una licencia de tipo "libpng/zlib", el cual a la fecha cuenta con casi un año de desarrollo y se encuentra en su versión 0.2.1.

Esperamos que Ardor3D siga en la senda trazada por JMonkeyEngine, entregando a la comunidad Java un motor de alta calidad que fomente el desarrollo de videojuegos profesionales en esta plataforma.

domingo, 4 de enero de 2009

Un excelente game engine para Java.

Para el lenguaje de programación Java existe un excelente engine open source que puede ser usado como base para generar un videojuego o una aplicación multimedia que requiera trabajar con gráficas 3D: JMonkeyEngine.

Este motor permite desplegar y manipular gráficos, sonidos y otros elementos mediante una estructura conocida como scenegraph, la cual corresponde a una representación del espacio visual/sonoro basado en el concepto de "nodos", los cuales pueden ser agrupados de forma jerárquica para establecer relaciones entre distintos objetos (mallas geométricas, luces, texturas, etc.).

Para trabajar con este engine se deben descargar un conjunto de librerías en formato .jar, las cuales pueden ser obtenidas desde su sitio oficial: http://www.jmonkeyengine.com/

Cabe destacar que estas librerías incluyen un conjunto de demos que permiten apreciar todo el potencial de este excelente motor, el cual incluso puede ser usado para desarrollar proyectos con fines comerciales gracias a su licencia BSD.

¡Muchas gracias a Mark Powell (creador de JMonkeyEngine) y a Joshua Slack (desarrollador líder) por haber entregado a la comunidad Java esta poderosa herramienta para crear videojuegos y aplicaciones multimedias!

viernes, 2 de enero de 2009

Elección de lenguaje de programación.

La elección de uno o más lenguajes de programación es un paso importante a la hora de querer llevar a cabo la implementación de un videojuego. A nivel amateur, algunos de los factores que pueden considerarse para escoger el o los lenguajes a usar en un proyecto son:

- Familiaridad/experticia que se tenga respecto a su sintaxis: comandos, palabras reservadas, convenciones de escritura de código, etc.

- Paradigma y/o enfoque que posea: procedural, orientado a objetos, lógico, funcional, etc.

- Cantidad y calidad de frameworks/librerías auxiliares que posea para reutilizar código.

- Cantidad y calidad de herramientas/editores que posea para apoyar la generación de código fuente.

- Plataformas en las cuales se desea que corra el juego (ej: Windows, PDAs, consolas, etc.).

- Consideraciones de perfomance (tiempos de compilación/ejecución), libertad/restricciones para acceso al hardware (manejo de memoria, uso de capas intermedias como máquinas virtuales, intérpretes, etc.).

- Grado de felicidad que otorgue el lenguaje al programador ... :)

Este último punto es muy relevante a la hora de verse programando durante muchas horas frente al computador, ya que si la programación se vuelve muy tediosa o excesivamente críptica no cabe duda que el código fuente a generar no será muy cristiano que digamos...

jueves, 1 de enero de 2009

Acerca de este blog...

El objetivo de este blog es poder contar algunos detalles sobre el proceso de creación de videojuegos. La idea es transmitir los problemas, soluciones y conclusiones a las que he llegado a lo largo de mi experiencia como programador de juegos, desde la época en que usaba un computador Atari 800xl (un clásico :) hasta la era de los PCs actuales.

¡A ver qué resulta de todo esto!