jueves, 27 de septiembre de 2012

STEAMPAC 3D - Videojuego arcade

Tras un tiempo de pausa, estoy de vuelta con vosotros con un juego completamente realizado con Blender y que utiliza su motor de juegos.

Vídeo con SteamPac 3D 1.0 en funcionamiento

steampac01

Características generales:
Steampac es un juego de laberinto inspirado por el popular Pac-man (también conocido en España como "Comecocos"), aunque con una estética diferente (mezcla de estilo "Toon" y "Steampunk") y con personajes y escenas en 3D.
Este juego está totalmente desarrollado con Blender y utiliza su motor de juego.
Salvo un par de líneas de código en Python, toda la programación se ha llevado a cabo mediante "logic bricks".

steampac01 steampac01
Capturas del videojuego en funcionamiento

Características técnicas:
El reproductor autónomo tiene una resolución de 640x480 y utiliza un sombreado GLSL.
El Lenguaje OpenGL Shading (GLSL) necesita una tarjeta gráfica y controladores que lo soporten. Consulta la lista de tarjetas gráficas admitidas en el documento "readme.html" que se incluye en el juego.

steampac01 steampac01
Capturas del videojuego en desarrollo

A título personal:
Tras algún tiempo sin tocar el módulo de juegos de Blender (desde su versión 2.49) y con ganas de probar algunas de sus novedades, me adentré en lo que "a priori" parecía un proyecto sencillo: la realización de un videojuego de laberinto que siguiera el esquema de juego del Pac-man, aunque modificando los elementos visuales y dotándolo de un escenario en 3D.

Esto que parece algo relativamente fácil ha ido complicándose por momentos hasta adquirir rasgos de proyecto inalcanzable (No me quiero imaginar a la gente que se embarca en la realización de juegos tipo FPS en solitario).

La preparación del material que lo compone (personajes, texturas, animación, etc.) quizás ha sido la parte menos pesada puesto que estoy más acostumbrado a manejarme con ello. Aunque, claro, siempre surgen ciertas cuestiones: retoques de modelos para bajar la densidad de la malla, ajustar las texturas en las nuevas mallas, etc.

El apartado de programación en Blender ha sido la parte más "entretenida". A partir de unos esquemas en los que se abordaban cuestiones como el propio diseño y los comportamientos de jugador y enemigos, fui construyendo toda la lógica. Pero el reto más importante era que sólo debería emplear "logic bricks". Quería ver si un juego aparentemente sencillo podría construirse sólo mediante los bloques lógicos de Blender, sin utilizar python (o al menos, haciéndolo en su mínima expresión).

La buena noticia es que, efectivamente, es factible hacer un juego de este tipo empleando sólo "logic bricks" (de hecho, al final sólo he incluido dos líneas de código en python para mostrar y ocultar el cursor en determinados momentos). La mala noticia es que, o tienes las ideas muy claras en la organización y desarrollo de tu proyecto o éste "morirá entre terribles sufrimientos". Es vital utilizar distintos "estados" en los personajes para mantener cierta coherencia en la construcción y, sobretodo, tener un mínimo de organización. Además, como suele pasar con este tipo de trabajos, cuando arreglas una cosa aparecen otros problemas que irremediablemente te conducen a otros en una espiral casi infinita de problemas o fallos (en este punto es donde te darás cuenta si has organizado adecuadamente tus elementos, ya que intentar localizar un problema dentro de un caos de objetos y "logic bricks" puede acabar con tu salud mental).

Otra cuestión que me ha dado bastantes quebraderos de cabeza ha sido la optimización del juego. Efectivamente, en mi equipo (no muy potente, pero con una gráfica reciente) no hay mayores problemas a la hora de ejecutarlo: fácilmente alcanza los 60 FPS y se nota fluido. Ahora bien, al realizar las pruebas con otros equipos de menores prestaciones, los FPS pueden llegar a caer a la mitad. El mayor problema está en la utilización de "GLSL" como "shader" en lugar de "Singletexture" o "Multitexture" para poder visualizar materiales complejos realizados con nodos (el efecto "Toon" de los personajes). Además, tuve que crear librerias de materiales y cambiar el formato de las texturas de .jpg y .png a .dds (direct draw surface) puesto que parece que se mejora la carga de imágenes.
steampac01 steampac01
Esquemas de trabajo

Descargas:
Ahora que ya sabéis algo más sobre este proyecto, podéis descargarlo desde sourceforge.net, o desde los enlaces que aparecen más abajo, en sus versiones para Linux y Windows (pronto espero tener preparada una versión para Mac OS X).

Si estáis interesados en más detalles concretos sobre este él, no dudéis en comentar y cuando disponga de tiempo intentaré resolver dudas o postear más material relacionado con este trabajo.

Saludos.

Actualización con bugs conocidos:
  • Si el jugador entra en la zona de nacimiento de de los enemigos, caerá hacia abajo a través del mundo virtual y se tendrá que reiniciar el juego (corregido, cambios en la próxima versión).
  • Problema en el cambio de apariencia de los enemigos en el momento del parpadeo del "warning" que confunde sobre su verdadero estado. Al añadir nuevos estados en la sustitución de las mallas se soluciona el problema. (corregido, cambios en la próxima versión). 
  • Puede suceder que en ocasiones no se contabilice la colisión del "jugador" con el "punto" de modo adecuado. Si esto sucede, no se alcanza el "marcador" necesario para cambiar el nivel y se quedará atrapado en dicho nivel. Ese fallo de colisión puede pasar cuando la "física" del juego trata de interpretar varios "contactos" con apenas diferencia de tiempo y al juego no le da tiempo a contabilizarlos.

Observaciones:
  • No se trata de un "bug" sino de una característica no implementada, pero en el cambio de nivel NO se produce un cambio de apariencia del escenario, en realidad acorta el tiempo de caza de los enemigos y los hace algo más activos. Si dispongo de tiempo intentaré añadir algún escenario más en la próxima versión.

27 comentarios:

  1. Fantástico !! Me parece estupendo que la gente empiece a darle más caña al Blender :) Me ha parecido muy bien hecho en cuanto a la parte visual por lo qu ehe visto en los vídeos, me lo descargo y echo unas partidas.

    Gracias !!!

    ResponderEliminar
    Respuestas
    1. Gracias por comentar, ya nos cuentas que tal han ido las partidas ;)

      Eliminar
  2. hola, muy bueno, espero que no te moleste estoy generando un paquete deb para instalar el juego (ubuntu, linux mint y en otras distros). cuando lo tenga listo, en un rato, te paso el link. gracias

    ResponderEliminar
    Respuestas
    1. Sin problemas, todo lo que sea facilitar la instalación, bienvenido sea.

      Eliminar
    2. hola, ya esta listo el paquete deb, falta hacerle mas pruebas, lo pueden descargar desde: http://www.4shared.com/file/Q1Kzqwxg/steampac_10_all.html

      Eliminar
    3. hola, lo podeis compartir en un magnet o en un torrent? un saludejo

      Eliminar
    4. El paquete .deb, cortesía de Luciano Lagassa, ya está disponible en la página del proyecto de "sourceforge". El enlace lo encontraréis arriba.
      Comprobad que funcione bien, puesto que me había dado algún problema en la subida.

      Eliminar
  3. Para los que tengan Archlinux he hecho un paquete para el:
    https://aur.archlinux.org/packages.php?ID=63199
    Si falla algo me comentáis (entre otras por que no probe la versión para 64 bits)

    ResponderEliminar
    Respuestas
    1. La versión de 64 bits funciona perfecto, muchas gracias!!!

      Eliminar
  4. Me ha encantado.Muy buen trabajo.

    ResponderEliminar
  5. Felicidades muy buen trabajo , publica detalles de como lo hiciste , felicidades...

    ResponderEliminar
  6. Que buen juego, algo malo donde reporte un bug en el primer lvl (descargue el .deb es mejor) me comi todo y no paso de lvl ademas me fui para donde nacen los ghost y me meti en e hueco y de ahi no sali.

    ResponderEliminar
    Respuestas
    1. Copio esto de la sección de bugs de sourceforge por si no lo ves allí:
      ¿Te ha pasado sólo una vez de manera aislada o se repite cada vez que tiene que pasar de nivel?
      ¿El juego te funciona lo suficientemente fluido?
      En ocasiones puede pasar que no se contabilice la colisión del jugador con el punto de modo adecuado. Si esto sucede, no se alcanza el "score" necesario para cambiar el nivel y se queda en punto muerto. Ese fallo de colisión puede pasar cuando la "física" del juego trata de interpretar varios "contactos" con apenas diferencia de tiempo y al juego no le da tiempo a contabilizarlos.
      Si se repite mucho el fallo trataré de ver una posible solución.
      Gracias por reportarlo

      Eliminar
  7. Enhorabuena por tu juego, el resultado es profesional.
    Como has utilizado Gimp para realizar parte de tu trabajo he añadido un enlace en todogimp.com
    http://todogimp.com/?q=novedades/steampac-un-comecocos-3d-realizado-en-blender-con-ayuda-de-gimp

    ResponderEliminar
    Respuestas
    1. Gimp lo he utilizado básicamente para la edición de imágenes, algo bastante laborioso en este tipo de trabajos: edición de las texturas que recubren todos y cada uno de los modelos tridimensionales, creación de los elementos de la interfaz, los textos y en este caso la conversión al formato .dds mediante un plugin que se le puede aplicar a GIMP.

      Eliminar
  8. Hola,

    Gracias por este juego. He escribido algo sobre tu juego aquí:
    http://forum.freegamedev.net/viewtopic.php?f=22&t=3574
    :)

    ResponderEliminar
  9. Felicidades por el juego!!! Gráficos increíbles.

    Gracias

    ResponderEliminar
  10. ¿Pacman en steampunk? !Fantástico¡

    ResponderEliminar
  11. Saludos. he probado el archivo para windows y me ha funcionado sin problemas, aunque no tuve tiempo de pasar a otro nivel para verificar el bug ya detectado. Mi unica recomendacion es que se podria mejorar las fuentes de las letras en el juego que se ven muy blancas y creo que podria ponerse una tipografia mas grafica.

    Gran trabajo.

    ResponderEliminar
  12. monstruo sos el mejor hace mucho tiempo estaba buscando un buen juego de pacman para ubuntu pero me parecían muy feos, encontre este y me encanto :D pero no he podido pasar de la primer pantalla xD eso ya es falta de talento mio. muchas gracias por ese aporte tan grande a la comunidad, estaré pendiente de la próxima versión. otra vez y todas las veces que sea necesario mil gracias

    ResponderEliminar
    Respuestas
    1. Gracias a tí por comentar, me alegra que te haya gustado y ánimo con ese primer nivel ;)

      Eliminar
  13. Felicitaciones desde Chile!...
    aportando con un granito de arena a la difusión
    http://jordeath.blogspot.com/

    saludos y sigue adelante!

    ResponderEliminar
  14. Angel, tus trabajos con blender son magníficos. Muchas gracias!
    Solo tengo una duda, como bien dicen algunos el primer nivel de SteamPac es bien difícil. Pero estoy seguro de haber comido todas las perlas y el juego se mantenía en el primer nivel. ¿Existe un segundo nivel? ¿Hay que hacer algo más para pasar de nivel?
    Gracias.

    ResponderEliminar
    Respuestas
    1. Como comento en el apartado de 'Bugs conocidos', existe un problema con las 'físicas' en el juego por lo que a veces no se contabilizan adecuadamente las colisiones. Cuando esto sucede, no se alcanza el "marcador" necesario para cambiar el nivel y quedas atrapado en él.
      En cualquier caso, el único cambio que notas al subir el nivel es una mayor complejidad de los enemigos, ya que no elaboré nuevos escenarios.
      Saludos y gracias por comentar

      Eliminar
  15. Que buena pinta!! En el juego pacman hay una cosa que me disgusta, y es que el segundo nivel no cambia nada en el escenario, sigue con los mismos colores... ¿no te gustaría cambiar el aspecto del resto de niveles? creo que quedaría mejor.
    Yo también tengo mis proyectos "blenderianos" y es verdad que hay muchos quebraderos de cabeza... Gracias por compartir tu experiencia en el entorno Blender. =)

    ResponderEliminar
    Respuestas
    1. Por supuesto que añadir cambios en el escenario enriquecería mucho más el juego y, de hecho, en esta misma entrada del blog ya apuntaba que lo considero como un trabajo pendiente. Sin embargo, de momento habrá que esperar, ya que el tiempo es escaso, y otros trabajos requieren de mi atención ;)
      Suerte con tus proyectos en Blender y gracias por comentar.

      Eliminar

¡Me gusta conocer tu opinión! Pregunta si tienes alguna duda, sugerencia o encuentras algún error.

AddThis