help me to make 8BP better

If you like 8BP, your help is welcome. Help me supporting this initiative (from 1€, whatever you want). Donations will be used for materials and 8BP disemination:
Mostrando entradas con la etiqueta sprites. Mostrar todas las entradas
Mostrando entradas con la etiqueta sprites. Mostrar todas las entradas

lunes, 7 de marzo de 2022

Cambios de rutas desde BASIC

 Hola amigos de 8 bits de poder

En esta ocasión os traigo un pequeño truco motivado por un desarrollador que quería cambiar la dirección de salto de un personaje en mitad de una ruta

Supongamos que quieres que tu personaje salte hacia la derecha y en mitad del sato quieres que el personaje pueda cambiar hacia la izquierda, continuando el salto. Lo que estamos planteando se puede representar con este dibujo:



En este ejemplo nuestro personaje salta y en mitad de la ruta de salto hacia la derecha, cambia de dirección en el punto 2, continuando con la ruta de salto a la izquierda, pero sin comenzar un nuevo salto, simplemente continuando el salto y alcanzando la misma altura (punto 3) que alcanzaría con el salto hacia la derecha para finalmente terminar el salto a la izquierda en el punto 4.

Para poder hacer esto necesitamos cambiar la ruta a nuestro personaje desde basic en el punto 2, pero no podemos usar el comando SETUPSP porque ello iniciaría la ruta, obteniendo un salto mucho mayor, que comenzaría en el punto 2. Lo que podemos hacer en ese caso es simplemente un POKE a la dirección de memoria que almacena la ruta del Sprite, que es la dirección de su estado +15, tal como muestra la tabla de atributos de sprites.

 

Suponiendo que tenemos dos rutas de salto (ruta 0 salto a derecha y ruta 1 salto a izquierda), el siguiente ejemplo ilustra el concepto (puedes cargar las demos de 8BP y modificar estas líneas en la demo 2 para ver el efecto

130 'ciclo de juego ------

150 |AUTOALL,1:|PRINTSPALL,0,1,0

170 ' rutina movimiento personaje -----

173 IF PEEK(27000)<128 THEN 178

174 'estamos en mitad de un salto

175 IF INKEY(27)=0 THEN POKE 27015,0:GOTO 180:'cambio ruta a derecha

176 IF INKEY(34)=0 THEN POKE 27015,1:GOTO 180:'cambio ruta a izq

177 GOTO 193

178 IF INKEY(67)=0 THEN |SETUPSP,0,0,137:|SETUPSP,0,15,dir:'saltar

180 IF INKEY(27)=0 THEN dir=0:|SETUPSP,0,6,1:'ir derecha

190 IF INKEY(34)=0 THEN dir=1:|SETUPSP,0,6,-1:'ir izquierda

193 ciclo=ciclo+1

310 GOTO 150


La única limitación del uso de POKE para este propósito es que la imagen del personaje no cambia hasta que no encuentra un código de cambio de imagen en mitad de la ruta. Cambiar la imagen usando SETUPSP es posible pero peligroso, ya que no sabes si el personaje esta subiendo (borrado con líneas inferiores) o bajando (borrado con líneas superiores). Por ello es mejor simplemente asignar la ruta y que la propia ruta cambie la imagen lo antes posible. Puedes incluso poner en mitad de la ruta cambios de imagen aimque no sean necesarios por si ocurre esta circunstancia. Lo que si tienes que hacer es que la imagen de salto tenga bytes de borrado en ambos lados pues si no lo tiene y cambia de dirección, dejaría un rastro.

He añadido este briconsejo en el manual de 8BP (apartado 12.2.5 del manual) , y en mi próximo post además os hablaré de un fabuloso juego que acaba de salir para 8BP y que podréis encontrar en el respositorio github de 8BP

hasta la vista!

domingo, 27 de enero de 2019

Disponible nueva version V36 de la librería 8BP

hola amigos de 8 bits de poder

Ya esta disponible la versión v36 de 8BP,  disponible para descarga en https://github.com/jjaranda13/8BP la cual incorpora las siguientes mejoras:

  • Comando |PRINTSPALL mejorado,  con nuevo parametro de ordenacion
  • Comando |PRINTSPALL con soporte de 4 modos de ordenamiento de sprites
  • Se han optimizado en velocidad un poquito la impresion flipeada y el comando STARS
  • la libreria no ha cambiado de tamaño, ocupa lo mismo

Con las mejoras de ordenamiento de sprites ya podemos hacer fielmente un juego tipo "Golden Axe" o incluso algo que se aproxima a un juego "filmation" ( ya he empezado a hacer uno, pronto lo vereis). Ahora os voy a detallar un poco las mejoras:

Comando |PRINTSPALL mejorado:
Ahora permite un parametro adicional para especificar el primer sprite que se va a ordenar del grupo de sprites ordenados, es decir ahora se usa del siguiente modo:

|PRINTSPALL, ordenini,ordenfin,anima,sync 

Donde ordenini es el primer sprite que se va a ordenar y ordenfin el ultimo. Veamos un ejemplo de uso:
 |PRINTSPALL,0,11,20,anima,sync 
imprimiremos secuencialmente los sprites del 0 al 10, ordenados del 11 al 20 y secuencialmente del 21 al 31



Si el parámetro “ordenini” se omite, se considera el último valor asignado, o bien cero si nunca se ha asignado un valor. Ademas, si vas a modificar alguno de los dos parámetros de ordenamiento, conviene primero ejecutar PRINTSPALL,0,0,0,0 para que primero se reordenen los sprites secuencialmente antes de ordenarlos con una nueva configuración.

Imprimir de forma ordenada es más costoso computacionalmente que imprimir de forma secuencial.  Ordenar todos los sprites lleva unos 2.5 ms pero si ordenas solo 5 te puedes ahorrar 2ms. Quizás tengas muchos sprites y no merezca la pena ordenar algunos, como los disparos o sprites que sabes que no se van a solapar.

Soporte de 4 modos de ordenamiento:
Ahora se permiten 4 modos de ordenamiento de sprites, que se configuran usando PRINTSPALL con un solo parametro. En 8BP ordenacion "parcial" significa que en cada invocacion solo se corrigen 2 sprites desordenados:

PRINTSPALL,0 : ordenacion parcial de sprites basado en Ymin
PRINTSPALL,1 : ordenacion total de sprites basado en Ymin
PRINTSPALL,2 : ordenacion parcial de sprites basado en Ymax
PRINTSPALL,3 : ordenacion total de sprites basado en Ymax

Los ordenamientos que usan Ymax se basan en la coordenada Y mayor de los sprites, es decir, donde se encuentran sus pies en lugar de su cabeza. Si los sprites son del mismo tamaño, un ordenamiento basado en Ymin te puede servir, pero si los sprites tienen diferente altura puede que desees ordenar según donde se encuentren los pies de cada personaje y para ello tendrás que usar el modo de ordenar 2 o el 3.

En el siguiente ejemplo se puede ver el modo de ordenacion 2 funcionando. En este ejemplo no he usado sobreescritura, sino tan solo ordenacion de sprites, pero se pueden usar ambas cosas a la vez sin ningun problema.


Los modos de ordenar con Ymax son mas lentos, aproximadamente 0.128 ms por sprite, de modo que úsalos cuando los necesites realmente

os dejo con un video de demo de la v36




hasta pronto amigos!!!






lunes, 11 de junio de 2018

Nueva versión V33 de la librería 8BP

Hola amigos de 8 bits de poder

Aunque aun no he liberado la v33, ya esta terminada y suficientemente probada. Solo me queda actualizar el manual, lo cual haré en los próximos días.

Os cuento sus características y lo que incorpora:

  • Ocupa exactamente lo mismo que la v32
  • En modo pseudo-3D, ahora tiene capacidad de imprimir segmentos con sobreescritura. Esto es algo que se podía hacer en v32 con todo tipo de sprites menos con los segmentos
  • Rotación de tintas (comando RINK) sin limitaciones. Hasta ahora se podían hacer patrones de 4 y 8 tintas rotando. Ahora puedes rotar cualquier numero de tintas
  • Sobreescritura de sprites con posibilidad de elegir el número de bits de fondo: esto te va a permitir si lo deseas usar 4 colores de fondo en tus juegos
  • sprite flipping horizontal: ahora puedes definir imágenes "virtuales", que en realidad se definen como el "flip" horizontal de una imagen real. Esto te permite ahorrar mucha memoria RAM destinada a gráficos. He hecho el horizontal y no el vertical porque el horizontal es el más útil. Normalmente un personaje que camina a la izquierda es la imagen especular del mismo caminando hacia la derecha, mientras que cuando sube hacia arriba muestra la espalda y al bajar muestra el pecho y la cara. 
ejemplo de sprite flipping
Aparte del manual, voy a preparar un par de demos que incorporaré en la v33 de serie y de momento os dejo con una preview del nuevo juego "space phantom" inspirado en el mítico space harrier.

Os prometo publicar la 8BP v33 con su manual en breve  




hasta pronto amigos!



martes, 23 de agosto de 2016

El editor de sprites RGAS ahora es compatible con 8BP

Hola amigos de 8BP

A partir de ahora podeis usar el Retro Game Asset Studio (RGAS) para crear sprites y usarlos en nuestros juegos creados con 8BP.  RGAS es un potente editor de sprites, evolución de la herramienta AMSprite. Debemos dar las gracias de esta posibilidad a su creador, Lachlan Keown

La herramienta RGAS la podréis encontrar en http://www.cpcwiki.eu/index.php/Retro_Game_Asset_Studio


La herramienta RGAS puede generar el mismo formato de sprite que genera SPEDIT, basta con seleccionar la salida en assembler para Winape y después seleccionar "output dimensions"




La salida de RGAS debereis copiarla en el  fichero de sprites de vuestro juego, despues ensamblar y finalmente salvar desde windape a un disk usando

save "sprites.bin", b, 33500, <longitud en bytes>

es decir, no cambia nada, simplemente ahora podeis editar con RGAS

Encontraréis esta herramienta en la lista de  enlaces de interés.

un saludo y hasta pronto amigos!