viernes, 15 de julio de 2016

Sobreescritura usando layout en 8BP

hola amigos de 8BP

Aunque últimamente ando trabajando en los comandos de scroll por hardware para 8BP, he hecho una actualización que no está relacionada con el scroll, y que me dí cuenta de que era necesaria para dejar bien atado el tema de la sobreescritura. Se trata de una actualización que afecta al comando |COLAY

La actualización es la versión V23b, disponible en https://github.com/jjaranda13/8BP . Además, en esta actualización ahora veréis un directorio donde se encuentran demos didácticas hechas con 8BP. Poco a poco iré llenando ese directorio de demos interesantes. De momento hay 3 demos, una de las cuales es el objeto de este post.

Como sabéis, el comando |COLAY sirve para detectar colisiones entre un sprite y el layout ( útil en juegos donde se use el layout, claro está). Pues bien, este comando hasta ahora detectaba colisión cuando nuestro sprite colisionaba con cualquier elemento del layout representado por cualquier carácter diferente del espacio en blanco.

Recordemos que el layout es una matriz de caracteres de 20x25, donde cada carácter está asociado a un sprite. Es un concepto similar a lo que en otras herramientas se llama "mapa de tiles", solo que aquí los elementos del layout se representan con letras y cada letra se corresponde con un sprite. Concretamente el carácter "Z" está asociado al sprite 31, el "Y" al sprite 30, el "X" al sprite 29 y asi sucesivamente hasta el ";" que representa al sprite 0. Tras imprimir el layout en pantalla, los sprites asociados pueden reconfigurarse para asociarse a monstruos o soldados, de modo que no se pierde ningún sprite por usar el layout.

El comando |COLAY , sprite_id, @colision detecta la colisión y la almacena en la variable colisión si el sprite_id choca con algo diferente de " ". Si chocas, el resultado es un 1, y si no chocas, el resultado es un 0. Pero ¿y si queremos que haya un fondo en nuestro layout diferente el espacio en blanco?

En el videojuego "mutante montoya" se usaba un layout y el personaje pasaba por los espacios en blanco como podemos ver en la imagen
mutante montoya
pensemos ahora en un juego tipo PACMAN donde el personaje se desplaza sobre un fondo. En ese caso el fondo puede estar asociado a un sprite, y no ser simplemente espacios en blanco.

demo con layout y fondo

matriz del layout



En este caso el layout ha sido construido con una matriz donde los pasillos por los que se desplaza el coco han sido creados con un sprite, el número 30, al que esta asociado el caracter "Y", cuyo código ASCII es el 89. Esto significa que no debería detectarse colisión cuando el personaje choca con dicho elemento.

Para ello si nuestro sprite es el id=0 , simplemente haremos

|COLAY, 89, 0, @colision

Con esto le estamos diciendo a COLAY que considere cualquier carácter con codigo ASCII igual o menor a 89 como fondo y por lo tanto que no considere colisiones en esos casos. El codigo 89 del ejemplo es porque he usado el sprite 30 para el fondo pero si hubiese usado el sprite 20 pues entonces usaría la letra "O", cuyo codigo ASCII es el 79. Es decir, se trata de un parámetro que representa el umbral ASCII a partir del cual debe considerarse colisión. Colisiones con caracteres con valores iguales o menores al que pongamos no producirán colisión (tras la ejecucion del comando COLAY , la variable colision valdrá cero) ,

El comando tiene memoria, de modo que sucesivas invocaciones a |COLAY pueden omitir el parámetro de umbral ASCII y se seguirá usando el mismo. Obviamente por defecto el umbral es 32, que es el código ASCII del espacio en blanco.

a continuación os muestro una demo que encontrareis en https://github.com/jjaranda13/8BP, dentro del directorio de Demos.



Espero que os guste y hasta la vista!


No hay comentarios:

Publicar un comentario