lunes, 21 de enero de 2008

Carga de archivos(2)

Hoy he terminado por fin la carga de mapas desde ficheros de texto. El siguiente paso será la parte de guardar los mapas en archivos desde el editor, que aún no está hecho.

También he mejorado los bloques botantes, que antes te hacían botar cada vez más pero aumentando demasiado el salto en cada bote, llegando a velocidades que daban problemas en el juego (atravesar paredes o techos por ejemplo)

- Tareas a corto plazo:
  • Crear estructuras y funciones varias para aligerar y simplificar el código. (Clase "bloque", con "botante", "triángulo".. etc por herencia)
  • Terminar la programación necesaria para hacer un nivel sencillo jugable (Puerta de inicio, puerta de salida y mensaje de fin de nivel)
- Tareas a largo plazo:
  • Menús del juego
  • Editor de niveles
  • Enemigos

lunes, 14 de enero de 2008

Carga de archivos

Hoy he estado investigando cómo guardar los mapas y cargarlos desde archivos de texto, ya que en clase sólo dimos lectura y escritura de ficheros con C++ por encima.

Al menos he conseguido leer desde un archivo la posición inicial del jugador y la posición de la salida del nivel.

La idea es que el archivo de cada mapa sea algo así:
[Inicio]
2 3
[Fin]
4 5
[Cuadrados] //coordenadas donde tiene que crear un bloque cuadrado
3 4 3 5 3 6 ..........
[Triangulos_peq_der] //Triangulos pequeños apuntando hacia la derecha
..........
etc etc

Intentando mejorar el diseño

Tras varios comentarios sobre el aspecto visual del juego, he investigado algunos tutoriales de pixel-art y demás, pero no he conseguido nada. Aquí unos intentos de mejorar el bloque de ladrillos genérico. En uno intento variarlo un poco, añadiendo ladrillos de otros colores y algo de musgo, con la idea de hacer que saliesen al azar entre los normales. El otro es una prueba intento de hacer pared de piedra en vez de ladrillos.



Magescape

En este post voy a hablar de la mecánica y la "historia" del juego.

Ante todo, el nombre: el juego se llama Magescape (Mage Escape) porque encarnas a un mago que tiene que escapar de una torre en la que está atrapado, haciendo uso de sus habilidades.

Aviso, los gráficos son temporales, se pueden cambiar en cualquier momento. Los aquí mostrados son lo primero que hice, y no doy para mucho más, ya que yo no tengo mucha vena artista.

Os presento al protagonista, aún sin nombre.




La idea del juego es que a la vez movamos el personaje con las teclas, saltando y demás por el mapa, mientras usamos el ratón para usar sus habilidades para crear distintos tipos de bloques para ayudarnos a pasar el nivel. Así que podremos saltar al vacío y justo crear un bloque debajo de él, que se mantendrá en la posición de creación y le servirá de plataforma, o crear un bloque botante para ir saltando cada vez más y llegar a un lugar elevado.

Tendremos X unidades de cada bloque para usar en cada nivel (escogidas por el creador del mismo), y cuantas menos usemos, más puntos obtendremos. Los bloques que podremos crear son los siguientes por ahora:
- Cuadrado simple: Se mantiene en el aire y tiene colisiones con todo. Es una plataforma.




- Cuadrado elástico: Al chocar contra él, rebotarás. Sirve como cama elástica para llegar a sitios elevados y para otros usos varios:




Aún no tengo pensados más tipos, pero ya irán apareciendo.
Los niveles estarán formados por bloques simples, triangulares, triangulares largos, bolas rodantes (si te tocan pierdes) y posiblemente enemigos y alguna otra idea, como teletransportes.

El objetivo será ir desde la puerta inicial (por donde se supone has entrado al nivel) hasta la puerta de salida, sorteando los distintos obstáculos. Por ejemplo, haber un abismo entre las 2 puertas y tener que rellenarlo total o parcialmente con bloques para poder pasar. Se puede rellenar totalmente y pasar andando, o rellenar parcialmente, pasar saltando de uno a otro, y asi conseguir más puntos por usar menos bloques.

Otra idea es que en algunos niveles haya enemigos y hasta no haberlos eliminados a todos, no poder pasar la puerta de salida. También es posible que introduzca interruptores que haya que pulsar para abrir la puerta.

En este punto el juego tiene implementadas las siguientes cosas:
  • Movimiento del personaje - Candidato a ser cambiado en el futuro, ya que se mueve por ayuda de una "rueda" oculta y queda algo raro.
  • Creación del nivel - Se puede ir rotando entre todos los bloques disponibles e ir colocandolos con el ratón. La pantalla se divide en cuadrículas invisibles para que los bloques encajen siempre entre sí y para evitar en un futuro "dibujar" en casillas ya ocupadas.
  • Física - Están creadas las bolas obstáculo en parte, y los bloques botantes.
Una captura de lo que llevo hecho por ahora:

Comienzos

Magescape es un juego que mezcla plataformas y puzzle y que estoy programando como Proyecto Final de Carrera (PFC) para mi carrera de Ingeniería Técnica Informática.

No tenía mucha idea de qué haría cuando llegase la hora de hacer el PFC, y este verano me puse a pensar en ello. Tenía la idea de hacer algo relacionado con videojuegos, para así "obligarme" a aprender a hacer algo sobre el tema. Debido a la influencia de Cave Story quería hacer un juego en 2D con sprites "pixelados" a la vieja usanza.

Primero pensé en un juego de aventuras y acción, con historia larga y demás, pero algunos amigos me aconsejaron hacer algo más asequible y que no tuviese mucha historia, que es lo que más tiempo suele llevar, así que tras mucho pensar decidí hacer un juego más orientado al puzzle, con mapas estáticos, del tipo "ir superando nivel a nivel".

En la parte técnica, me pasé agosto y septiembre probando combinaciones de motores físicos y gráficos: IrrLicht, Ogre con OgreMagic, Newton... y al final me decidí por las librerías SDL y para las físicas, APE, motor físico 2D para Actionscript, porteado posteriormente a C++.