|
|||||
Ébola: El Octavo Pasajero
|
|||||
|
Introducción
Ébola: El octavo pasajero es un videojuego para el Amstrad CPC 464 programando en C y ensamblador para la asignatura de Razonamiento Automático del Grado de Ingeniería informática por un grupo de 4 alumnos. El juego es un shooter con vista cenital y cámara con scroll donde tu objetivo es intentar matar y esquivar el máximo número de enemigos antes de morir.
Descripción
Historia
En el año 2025, casi solucionada la crisis mundial de la salud por culpa del Ébola. La ciudadanía vive en paz y armonía sin conocer el nuevo virus que amenaza de nuevo a toda la humanidad.
La situación de Carl, nuestro personaje, es crítica. Sus padres murieron por culpa de la enfermedad en 2016 por no tener los medios adecuados para combatir el virus. Pidieron incesantes ayudas al resto de la humanidad pero debido a su color de piel le dieron la espalda y murieron en el vertedero radioactivo municipal de su ciudad. Al enterrar a sus padres en el vertedero se contagió de una nueva evolución del ébola, denominada Rédbola. Tras este altercado se volvió loco y él juró vengarse de toda la humanidad convirtiéndose en el terrorista viral más peligroso hasta el momento.
Para llevar a cabo su misión, se infiltra en el laboratorio central que combate contra el ébola mundialmente. Con el objetivo de infectar a los científicos más influyentes en la lucha contra la enfermedad y acabar con la sociedad que le dió la espalda cuando pidió la ayuda.
Personajes
- Edad: 45
- Nacionalidad: Nigeriano
- Trasfondo: El objetivo de nuestro protagonista es vengar la muerte de sus padres.
- Edad: Desconocida
- Nacionalidad: Múltiples
- Trasfondo: El objetivo del científico cabrón es capturar a Carl ya que éste busca la infección de todos los científicos que tratan de erradicar el ébola.
Modo de juego
Debes de infectar a todos los científicos que encuentres a tu paso. Ten cuidado, los científicos pueden matarte. Debes de huir de ellos y disparar virus de ébola para matarlos. Cada nivel será más complicado que el anterior. ¡Suerte!
Controles
- Movimiento del personaje: Flechas del cursor
- Dirección de los disparos: Teclas WASD
Uso
El jugador deberá escapar de los enemigos que se encuentre en el nivel y derrotarlos con el objetivo de destruir la puerta que bloquea la salida.
Características
En Ébola: El octavo pasajero tendrás que saber combinar los movimientos cuidadosos con una buena puntería puesto los enemigos no te darán una segunda oportunidad si te ven. Esto junto con con su cámara con scroll hacen de éste un juego que te tendrá siempre alerta mientras matas a cuantos más enemigos mejor y provocará piques con tus amigos.
Así se hizo
Idea del juego
En el bar tomando unas cervezas, mientras veíamos las noticias de la enfermera afectada por este virus.
Pasos para la elaboración
Nos basamos en el modelo MVC(Modelo, Vista y Controlador). Para ello debíamos de separar las partes relacionadas con la estructura.
Primero nos centramos en la memoria gráfica(Vista) y como representar cosas en pantalla, ya que esto es una de las cosas más importantes a la hora de programar para Amstrad CPC. Seguidamente nos pusimos a implementar el movimiento del personaje y del mapa(Controlador), y las acciones del personaje, como el disparo en varias direcciones(Modelo).
Tras todo lo anterior nos pusimos a desarrollar una IA básica para este juego, y a ir corrigiendo partes de todo lo anterior que no funcionaban correctamente. Por último fue crear los sprites de los personajes y optimizar el código fuente.
Tecnologías utilizadas
- Git como herramienta para control de cambios. Con esta herramienta siempre tenemos una copia de seguridad del código por si a algún desarrollador se le va el dedo, en una herramienta necesaria para todo proyecto.
- Winape como herramienta para emular el juego durante su desarrollo.
- 2CDT herramienta que transforma el fichero binario del juego a .cdt que es el formato de cinta.
- HEX2BIN herramienta que genera el fichero binario para transformarlo a otros formatos con otras herramientas.
- SDCC compilador del juego.
- iDSK herramienta para conseguir el juego para utilizarlo en el emulador. Transforma el
binario generado por las herramientas anteriores a .dsk. - RGAS como herramienta para dibujar los sprites utilizados en el juego.
Problemas encontrados y su solución
El primero de los problemas que tuvimos fue sin duda el de poder pintar en la pantalla lo que nosotros queríamos en la posición (X,Y) de la pantalla donde quisiéramos. Los pixeles se nos pintaban en posiciones random(), por así decirlo, tras leer y leer cómo funcionaba la memoria de video, nos dimos cuenta de cómo estaba formado cada unidad de pantalla, que en el modo que usabamos contenía 2 pixeles. La solución fue hacer una función que pasandole una fila y una columna nos devuelve la posición de la pantalla donde tenía que pintar.
Otro de los problemas al que nos enfrentamos era el de mover el personaje dentro del mapa, ya que queríamos que fuese un mapa grande y que según avanzara el personaje se moviese en el mapa, la solución que aportamos a esto fue la de mover el mapa en vez del personaje, y esto nos daba dos nuevos problemas:
- Se cargaban multitud de tiles por frame, para ser más concreto, se refrescaba la pantalla cada frame.
- El personaje no podría moverse por las esquinas ya que el scroll daba problemas en la pantalla.
La solución al primer problema la encontramos bastante rápido, y era que solo se pintaran los tiles tocados, es decir, las zonas que cambian (personajes, enemigos, muros…). Y conseguimos una notable mejora. El segundo problema nos costo algo mas de resolver, porque claro en las esquinas no podía hacer scroll, lo que hicimos es que si el personaje se encontraba dentro de un rango se movía el personaje sino se movía el mapa.
Imágenes, dibujos, diseños o materiales del así se hizo
|
Tiempo de desarrollo del proyecto
No hemos controlado el tiempo empleado para las tareas.
Qué cosas aprendísteis durante el desarrollo
La utilización de técnicas optimizadoras de espacio y tiempo al estar limitados de memoria y de velocidad de procesamiento. Con esto conseguimos una mejoría de la velocidad del juego muy considerable frente a implementaciones anteriores:
- Utilización de chars en lugar de int. Operaciones AND, OR, XOR y desplazamiento para tareas con importante rendimiento.
- Utilización de la memoria de vídeo de la cpc.
- La implementación de un videojuego en la realidad.
- No dejar las cosas insignificantes para el final. Ya que las cosas insignificantes y de poco trabajo, pueden volverse luego tediosas y largas.
- Cosas que no se deben hacer en la planificación de un proyecto.
Vídeos y Screenshots
https://drive.google.com/open?id=0BDa1Ar_fDcVOHZJbWtIeW54c3M&authuser=0
Ficha Técnica
Lenguaje de programación utilizado: C más algunas rutinas en ensamblador
Modo gráfico del CPC utilizado: Modo 0
Detalles técnicos de la implementación:
- Sistema de sprites: Sprites realizados con la herramienta RGAS (Retro Game Asset Studio), para poder ser exportados directamente en el código C, almacenándose en arrays de valores hexadecimales.
- Librerias adicionales usadas:
- CPCTELERA https://github.com/lronaldo/cpctelera
- cpcdevchaintools https://github.com/cpcitor/cpcdevtoolchain
- Inteligencia Artificial: Sistema de IA basado en una máquina de estados que define los posibles comportamientos de los enemigos:
- Patrullando (No te han visto): Movimiento aleatorio corrigiendo cuando chocan.
- Siguiendo olor: Cuando pasar por un olor reciente del jugador, siguen ese olor.
- Siguiendo jugador: Una vez el jugador está a distancia, pasan a cazarlo.(Pathfinding muy básico).
- Compilación: Modificamos el script de compilación de cpctelera para indicarle la ruta al compilador
sdcc y al hex2bin, y hacemos “make”.
Se usa para cargar los sprites en pantalla.
Incluye varias herramientas como el hex2bin, 2cdt, iDsk y el compilador de C “SDCC”.