Introducción

Bienvenido a The Thief Runner, tienes en tu poder un entretenido y atractivo juego para el clasico de las videoconsolas Amstrad CPC. The Thief Runner te hará volver a los años 80′ donde los 8bits eran los reyes de la informática, disfruta de las imagenes “pixeladas” que tanto hacian disfrutar, de los sonidos “chiptuneros”, y de un ambiente de nostalgia que no te dejara indiferente.

Este proyecto esta desarrollado por 3 estudiantes de Ingeniería Multimedia, para la asignatura de Videojuegos 1:

Daniel Alarcón

Vicente Ferrández

Carlos Ferrando

Historia

Nuestro ‘thief’ particular es un joven con cierta cleptomania compulsiva, su objetivo es enriquecerse a toda costa de las monedas que van apareciendo debido a un fallo espacio-temporal que conecta un banco con la nave abandonada en la que se ve atrapado. La mala noticia, es que este fallo espacio-temporal también conecta con una base experimental del gobierno, lo que ha hecho que se vea atrapado con dos zombies y un esqueleto que solo quieren acabar con el, ademas le aparecen minas paralizantes del ejercito que no ayudan en su tarea de enriquecerse y sobrevivir.

Personajes

Thief: Protagonista del juego y personaje que maneja el jugador, camina en todas direcciones y puede recoger monedas y brebajes. Puede defenderse de sus enemigos lanzandoles piedras.

Zombies: Enemigos de “thief” y objetivo principal, son lentos y limitados de movimiento (les falta medio cerebro), pero muy insistentes dado que son inmortales.

Esqueleto: Enemigo mas obsesionado de “thief”, este personaje perseguira con mayor presión a nuestro protagonista, ademas se le suma que también es insistente dada su inmortalidad.

Objetos

Moneda: Es el objeto a conseguir por “thief”, le suman un crédito mas a su riqueza, van apareciendo aleatoriamente en el suelo de la nave industrial.

Brebaje de Muerte: Es el objeto a esquivar por “thief”, paraliza a nuestro protagonista brevemente, como las monedas, su aparición es aleatoria.

Brebaje de Vida: Este objeto será util tanto para el “thief” como para el zombie, dará un breve subidón de velocidad al que lo capture, aparte de sumar o restar puntos dependiendo de quien lo obtenga.

Controles

Menu inicial: Pulsaremos ‘E’ para empezar el juego, o pulsaremos ‘S’ para salir.

Juego: Las flechas de direccion del teclado mueven al personaje, la tecla ‘X’

dispara las piedras.

dispara las piedras. Menu fin del juego: Pulsaremos ‘O’ para reiniciar el juego, o pulsaremos ‘S’ para salir.

Making off

El juego lo empezamos a desarrollar en lenguaje C usando la librería cpcrslib y el framework cpcdevtoolchain.

Comenzamos por lo básico, aprender a pintar un sprite en pantalla para poder moverlo después.

Aquí comenzaron los problemas, ya que podíamos pintar un sprite en pantalla , pero no el sprite que nosotros queríamos, nos salían aberraciones gráficas.

Dichas aberraciones surgen, porque el programa que usábamos para crear los gráficos (Retro Game Asset Studio) exportaba en hexadecimal nuestro dibujo, pero de forma predefinida no contemplaba el entrelazado. Una vez solucionamos ese pequeño cambio, el programa empezó a mostrar las siluetas que queríamos pero no con los colores deseados.

Al principio pensamos que el problema era la mala instalación de la librería, ya que la instalamos al principio y hubieron cambios posteriores que cubrían errores de librería. Ya que eramos novatos y no teníamos ni idea, lo más sencillo era probar primero a reinstala la librería. Ésto no solucionó nada, ya que nuestro problema era que las tintas que usábamos en RGAS, no coinciden con las básicas de CPC, una vez las cambiamos no surgieron más problemas desde el punto de vista gráfico.

Para el sonido utilizamos WYZTracker un programa de uso sencillo y que se adaptaba perfectamente a nuestras necesidades.

Respecto al menú inicial nos decantamos por un menú simple que sirviera a modo de control inicial del juego para que el usuario lo iniciara a su voluntad, dejando dos opciones: Iniciar juego y finalizar juego. Añadimos un menú final donde el jugador tras finalizar la partida pudiera reiniciar el juego o finalmente salir.

El juego necesitaba de objetos que sumarán puntos y objetos que te obstaculizasen por eso creamos tres objetos, la moneda, el brebaje de vida y el brebaje de muerte.

La moneda es el objeto básico de sumar puntos, su programación fue sencilla, si colisionas con ella, se te suma un punto y desaparece, pero una vez hecho esto vimos la necesidad de que la siguiente vez que apareciese fuera en un sitio calculado aleatoriamente.

Este cálculo se realiza basándose en el tiempo, tenemos dos contadores que aumentan cada frame y que llegados a cierto punto vuelven a cero y otra vez aumentan.

El brebaje de vida y el brebaje de muerte utilizan el mismo sistema de cálculo de posición.

El brebaje de vida es un objeto que te suma un punto y te proporciona más velocidad, al colisionar tu sprite con el del brebaje, se te aumenta el contador de puntos y la velocidad en X e Y.

El brebaje de muerte te paraliza, para programarlo hicimos que al colisionar el sprite del protagonista con el sprite de la bebida, impedimos que se reciban entradas de teclado relacionadas con el movimiento.

Para diseñar el enemigo principal empezamos por lo básico, que hiciera una patrulla alrededor del mapa, moviéndose por los bordes.

Una vez que ya hacía este movimiento correctamente empezamos a implementar diversos comportamientos.

El primero de todos fue que te detectase si entrabas en un rango de visión y te persiguiese, esto se conseguía mirando las posiciones x e y de tu sprite y comparándolas con las del sprite enemigo.

Hicimos que al entrar en contacto contigo, el personaje muriese, acabando así la partida.

El siguiente comportamiento de la IA fue hacer que una vez que el brebaje de vida apareciese el enemigo fuera a por él para robartelo e impedir que sumases puntos.

La preferencia de comportamiento de la IA es perseguir personaje, coger brebaje de vida, hacer su ruta predefinida.

El proceso de desarrollo del proyectil evolucionó de la siguiente forma, el primer paso era mostrar el sprite del proyectil al pulsar la tecla de disparo. Este paso se soluciono cargando el sprite con una matriz transparente al iniciar el juego, y cuando se pulsara el botón de disparo, esta matriz pasaría a ser la que contenía los valores del dibujo del proyectil. La situación del proyectil al pulsar la acción de disparo recogia los valores de la posicion del jugador en ese momento, dado que esta seria su posicion inicial.

El siguiente paso era darle un movimiento al proyectil, en un primera direccion por el momento, conseguido al incrementar una cantidad fija la posicion ‘Y’ en este caso del proyectil. Llegados a este punto, se daba el error de que si pulsabas el disparo mientras el proyectil continuaba en trayectoria, este volvia a la posicion del jugador. La solución era darle un tiempo de “vida” al proyectil, la cual finalizaba al llegar a los bordes del mapa o al colisionar con algún enemigo, y mientras que la vida durase la acción de disparo no realizaba ninguna accion.

El último paso era el de poder dirigir el proyectil en 4 direcciones (x,y,-x,-y), para esta parte se decidió registrar la ultima tecla de direccion del jugador antes de que empezara la acción de movimiento, de manera que con una velocidad constante si se registraba movimiento hacia la izquierda, el proyectil vería incrementada su posicion en la direccion ‘-X’.

Finalmente, tras fusionar todos los logros de desarrollo y pulir los bugs, este fue el resultado final:

Tiempo de desarrollo

Éramos tres personas en el equipo y con muy poca experiencia en diseño y programación de videojuegos para amstrad, por lo que tardamos 1 semana en diseñar el juego y aprender a manejarnos con la librería y 3 semanas en terminarlo.

Conclusión

De hacer este juego hemos aprendido a programar un juego para una maquina con recursos muy limitados,a pintar sprites para este tipo de sistemas y a colaborar con los compañeros para que el proyecto llegase a un buen término.

Agradecimientos especiales

Cpcitor por la librería.

Raul Simarro por la librería tilemap.

Grupo Cocos, compuesto por Tomás Alemán Baeza, Rómulo Espinosa Montoya, Ángel González Redondo, Dulce Isis Segarra López y Jorge Torregrosa Lloret, por el efecto de sonido “EFECTO0” y los métodos “pintapuntos” y “c_exit”.

Ficha Técnica

Lenguaje utilizado: C

Tamaño en Kbytes: 13 Kbytes

Modo gráfico: Modo 0

Compilar: Necesitamos la librería cpcrslib y wyz (incluidas en el rar) para compilar el proyecto (main.c).

Herramientas utilizadas