juegos hechos con 8BP

  • Nibiru: un juego de naves de scroll horizontal con características avanzadas de 8BP
  • Anunnaki: un juego de naves, género arcade, scroll vertical
  • Mutante Montoya: un juego de pasar pantallas, podría encuadrarse en género plataformas. Fue el primer juego que hice con 8BP.

Nibiru

Este es un juego que pone a prueba muchas de las características de 8BP y de la técnica de programación de "lógicas masivas", y tiene detalles como un gráfico de carga lujoso y tres melodías durante el juego, así como una tabla de scores que no se pierde aunque reinicies el juego y otros aspectos técnicos avanzados como scroll paralax, rutas, macrosecuencias, etc. El listado BASIC ocupa poco mas de 16KB, de modo que aun sobrarían 10 KB para hacer un juego mucho mayor (con 8BP los juegos en BASIC pueden ocupar 26KB, sin contar gráficos ni música).

Eres el piloto de una nave destructora y debes vencer al planeta Nibiru y a su lider, "Gorgo", un reptil milenario casi invencible. Debes destruir a los pajaros galácticos que viven en sus lunas y una vez que llegues al planeta te debes enfrentar a sus peligros antes de poder luchar con Gorgo.


El Juego consiste en tres fases y utiliza el mecanismo de scroll de 8BP basado en el comando MAP2SP y también usa enrutamiento de sprites y macrosecuencias de animación. Todo desde BASIC! gracias a 8BP y a la técnica de "lógicas masivas"


Un lujoso gráfico de presentación realizado con la herramienta ConvImg

Las 3 musicas se han realizado con el secuenciador WYZtracker. Una de ellas no me cabía en los 1250bytes para música y tuve que ensamblarla en otra dirección.


El efecto de scroll de texto se logra con un sprite que en realidad contiene el mensaje “press space to start…” lo movemos como si fuese un muñeco y ya tenemos scroll.

Para crear las fases se cargan justo antes de empezar en la zona de memoria del mapa del mundo. Todas las fases se precargan en la dirección 25000 pero cada vez que entramos en una fase se vuelca la fase a la zona del mapa del mundo usando POKEs. Esta técnica de gestión de las fases se describe con mas detalle en el manual de 8BP
Los pájaros usan una ruta de movimiento para simplificar la lógica del juego, ganando velocidad (hay montañas, pájaros y disparos de pájaros y nuestros disparos y nave).

La primera fase (y todas las demás) usa MAP2SP para crear el scroll. Aunque las montañas parecen muy grandes, usan la técnica del manchado de modo que con unos pocos y pequeños sprites conseguimos dibujar todo el contorno. La explosión de la nave se realiza con fragmentos que se imprimen con sobreescritura para no destruir las montañas, pero todo lo demás se hace sin sobreescritura (más rápido).

Tras atravesar las dos lunas de nibiru, nos encontramos con naves en formación que usan enrutamiento y macrosecuencias para cambiar de sprite en función de su dirección de movimiento de forma automática. Las macrosecuencias lucen muy bien y la velocidad es buena a pesar del gran numero de sprites (naves + disparos)

Esta segunda fase es muy costosa. Usa sobreescritura además de scroll y se nota. Aun asi está en el límite de lo aceptable. Piensa que un juego de arcade es muy exigente en velocidad. Si fuesen personas caminando y no naves espaciales consideraríamos que va a buen ritmo. Va un poco justa de velocidad por la carga extrema de CPU que exige. Además la música también consume CPU, todo se suma.

Una vez mas, las naves usan rutas

En la tercera fase tenemos un scroll paralax hecho con una mezcla de mapa del mundo y montañas que son sprites que se mueven en uno de cada dos ciclos y que no forman parte del mapa del mundo. son sprites gigantes pero horizontales por lo que son muy rápidos de imprimir.
La técnica se detalla más en el manual de 8BP disponible en  https://github.com/jjaranda13/8BP


La tabla de scores se consigue almacenándola en RAM con pokes, en lugar de almacenarla en variables BASIC. Eso permite que aunque pares el juego y hagas RUN, los valores no se pierden.


ANUNNAKI: nuestro pasado alien

Este es un juego muy interesante para analizar y adentrarse en la técnica de programación de "lógicas masivas".
A diferencia del "Mutante Montoya", el videojuego "Anunnaki" no hace uso del layout, ya que se trata de un juego donde se trata de avanzar y destruir naves enemigas, no es un juego de laberintos ni de pasar pantallas.
Este juego además, hace uso de técnicas de scroll "simulado", muy interesantes.
disponible como parte de la distribución freeware de la libreria 8BP . disponible en dsk y wav en https://github.com/jjaranda13/8BP



Eres Enki, un comandante anunnaki que se enfrenta a razas alienígenas para conquistar el planeta tierra y así someter a los humanos a su voluntad.
El juego consta de 2 niveles, aunque si pierdes una vida, continuas en el punto del nivel en que te encuentres, no vuelves al principio del nivel.
El primer nivel es una fase en el espacio interestelar, donde debes esquivar meteoritos y matar hordas de naves y pajarracos espaciales. Al final del nivel debes destruir un "jefe"
El segundo nivel se desarrolla en la Luna, donde debes destruir hordas de naves, tras lo cual debes atravesar un túnel plagado de minas hasta encontrarte con tres a los que debes destruir



 la pantalla de presentación muestra un scroll de estrellas de 4 capas a diferente velocidad para dar sensación de profundidad. Para ello se usa el comando STARS

los controles son QAOP y la barra espaciadora para disparar.
Durante el juego, al pulsar Q, la nave sube y muestra fuego en sus cohetes propulsores. Esto simplemente se realiza cambiando la secuencia de animación asociada a la nave con un POKE a la dirección correspondiente a la secuencia de animación de la nave en la tabla de sprites


los meteoritos son indestructibles. Al usar la instruccion de colision COLSPALL, se determina que el colisionado es un sprite cuyo identificador es mayor que un cierto numero y con ello se concluye que es un enemigo "duro" que no se puede destruir.

se utiliza lógicas masivas, de modo que en cada fotograma solo un meteorito puede decidir cambiar su dirección de movimiento

la colisión del disparo múltiple se realiza mediante COLSPALL, ya que los 3 disparos tienen flag de "colisionador" activo en el byte de status, y para ahorrar ciclos solo puede empezar a morir un enemigo en un mismo fotograma, lo cual no representa ninguna limitación en el juego, ya que vamos matando uno a uno a los enemigos.


todos los pajarracos tienen el flag de movimiento relativo en su byte de status, y se mueven con el comando MOVERALL siguiendo una trayectoria almacenada en un array. De este modo todos se mueven a la vez con una sola instrucción

hay una horda de naves que bajan en "zig-zag", que también usan la misma técnica, los desplazamientos calculados con la función coseno son almacenados en un array para después usarlo en MOVERALL
|MOVERALL,0,rx(i): i=(i+1) MOD 15

como puedes ver, a la vez hay estrellas de fondo que pasan "por debajo" de todos los enemigos, mediante el comando STARS.

las explosiones son "secuencias de muerte", de modo que tras terminar la animación de la explosión, el enemigo en cuestión queda desactivado y no se imprime mas.


las distintas hordas de naves enemigas en formación siguen trayectorias diferentes, siempre en dos hileras de 6 naves cada una. Para moverlas se utiliza la técnica de logicas masivas controlando en cada instante de tiempo que par de naves deben cambiar su dirección de movimiento. El movimiento se realiza asignando a cada nave un par Vx,Vy e invocando a AUTOALL, ya que todas tienen el flag de movimiento automático


 el enemigo final (llamado "arkaron") es semi-duro, significa que tiene un contador de disparos que le alcanzan y muere al recibir diez impactos.

la música durante estos momentos cambia, siendo una melodía mas "angustiosa". las 3 melodías que tiene el juego ocupan poco, no mas de 200 bytes cada una


En la luna ("hollow moon" significa "luna hueca" pues se trata de un satélite artificial alienígena) se simula scroll con "motas" y cráteres que se mueven a la misma velocidad. Las motas se hacen con STARS y los cráteres son sprites que se mueven hacia abajo.

Además, se utilizan dos sprites a los lados que "manchan" la pantalla dando el efecto de muros laterales.

todas las hordas usan "lógicas masivas" para moverse


 mas hordas, esta vez con una trayectoria que cambia de dirección pasados unos instantes.

fíjate como la nave pasa "por encima" del cráter a pesar de que no se está usando sobreescritura. Es gracias a que la nave tiene un identificador de sprite superior al cráter y por ello se imprime después. Obviamente "borra" un trozo de cráter pero el efecto es aceptable


 el tunel se construye con dos hileras de sprites que simulan los bordes del tunel, dando un efecto de scroll vertical

es realmente pesado porque son sprites muy grandes pero el efecto es aceptable

superar el túnel es difícil, se genera aleatoriamente de modo que a veces es más difícil y a veces más fácil.


 al final hay que destruir 3 jefes cuya dificultad estriba en que ninguno muere de forma independiente sino que cada uno de ellos debe recibir al menos 10 disparos para que los 3 mueran a la vez. si disparas mil veces al mismo no conseguiras superar este reto. El número de sprites en pantalla es muy elevado si sumamos todos los disparos de la nave y de los enemigos pero los movimientos de los disparos tienen poca lógica y todo se mueve con velocidad suficiente


Al destruir a los 3 jefes, llegamos a la pantalla del final del juego, con una melodía diferente y un mensaje de enhorabuena.

Enki es bueno?...o es malo? los textos sumerios lo describen como el dios bueno y su hermano Enlil era el malo...pero y si todo hubiese sido un engaño?







Mutante Montoya

Un primer tributo al Amstrad CPC, con un título inspirado en el clasico "mutant monty"

Información y enlaces:
disponible como parte de la distribución freeware de la libreria 8BP . disponible en dsk y wav en https://github.com/jjaranda13/8BP



Es un juego sencillo de 5 niveles. Se basa en el uso del layout de 8BP para construir cada pantalla. A continuación algunas "pistas" de como está hecho, aunque el listado basic es accesible (de hecho tenéis el listado en el libro sobre 8BP y podéis analizarlo en profundidad).



La presentación simula lluvia mediante el comando |STARS. Trata de apreciar como pasan por debajo de sprites y elementos del layout sin dañarlos.

El castillo está construido como un layout. En el listado BASIC lo podrás distinguir construido con letras asociadas a sprites

El primer nivel es muy sencillo. la condicion de salida es que la coordenada Y del personaje sea menor que cero (cuando consigues salir por arriba).

todos los sprites se imprimen simultáneamente con el comando de 8BP "|PRINTSPALL"

El segundo nivel no usa ninguna tecnica especial. No usa logicas masivas y aun asi puedes ver la potencia y velocidad de la libreria 8BP. hay 7 sprites

También puedes apreciar el "clipping" de la rutina de impresión si mueves el personaje fuera de la pantalla, hacia la izquierda. En ese caso se mostrará sólo parcialmente

El tercer nivel usa la técnica de "lógicas masivas" para mover los 8 soldados. A pesar de haber 9 sprites en pantalla a la vez, y estar ejecutando en BASIC, todo funciona a un ritmo adecuado.
Es interesante analizar como se abre la compuerta. Se actúa sobre el layout cuando montoya coge la llave.

El cuarto nivel usa "lógicas masivas". Podría haber metido 8 fantasmas y habría seguido funcionando sin apenas diferencia de velocidad, pero habría sido muy difícil pasar la pantalla!

En esta pantalla no se usan lógicas masivas aunque haya 5 sprites, pues es suficientemente rápido. Se emplea la misma técnica que en el tercer nivel para abrir las compuertas

Al final todos los personajes salen a saludar. El efecto del telon que baja se hace con un solo sprite, imprimiéndolo en un bucle e invocando al comando |PRINTSP. es muy sencillo pero interesante efecto. El sprite va "manchando" la pantalla mientras baja, dando la sensación de un telón en movimiento

No hay comentarios:

Publicar un comentario en la entrada