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:

domingo, 1 de septiembre de 2024

mapas dinámicos en 8BP V42_001

 hola amigos de 8BP

Recientemente, hablando con un amigo desarrollador de AMSTRAD, "fito", conocido programador de juegos como "space panic", "barr war" o "spaceman kerl" (https://fitosoft.itch.io/), surgió la necesidad de hacer mapas del mundo dinámicos.


No os preocupéis que esto no va de música setentera. Como sabéis, 8BP tiene capacidad de scroll mediante un mecanismo llamado "mapa del mundo", el cual es una lista de "items" compuestos por coordenadas y dirección de imagen. De este modo podemos construir un mundo que después recorremos con el comando MAP2SP, el cual convierte a sprites aquellos items que "caen" dentro de la pantalla.

Pues bien, es posible pokear las direcciones de memoria del mapa usando identificadores de imagen en lugar de direcciones de memoria. En 8BP podéis dar de alta en una lista llamada "IMAGE_LIST" las imágenes que queráis, de modo que a cada imagen le corresponde un numerito pequeño en lugar de una dirección de memoria. Por ejemplo, podríamos decir que una casa es el ID=23 en lugar de decir que se encuentra en la dirección &8D41.  

Al pokear el mapa podéis crear mapas dinámicamente, antes de comenzar una fase de modo que podríais inventar una forma de guardar mapas enormes de un modo mas compacto. O simplemente crear laberintos aleatorios. La imaginación manda.

El caso es que esto ya era posible en 8BP y de hecho se usa en el juego "3D racing one" pero recientemente descubrimos que usar identificadores de imágenes hacia fallar el comando de colisión (lo cual no ocurre en "3d racing one" porque usa otro mecanismo de colisión). Pues bien, esto ha sido corregido y además se ha acelerado un poquitín el comando de colisión. La nueva versión corregida es 8BPV42_001 (https://github.com/jjaranda13/8BP) y también se han añadido estas cuestiones en el manual, Asi como una idea (truco) para lograr imágenes animadas en tu mapa, tales como un volcán en erupción, una cascada de agua o lo que se te ocurra,  Espero que os guste y os sea útil en vuestros juegos

hasta pronto amigos!







domingo, 31 de marzo de 2024

Disponible manual de 8BP en 5 idiomas

 Hola amigos de 8 bits de poder

Recientemente un amigo y fan de la librería 8BP (The Electric Monk) ha hecho traducciones del manual de 8BP con una herramienta en 4 idiomas (aleman, ingles, frances, griego). Y la verdad es que en general tienen buena pinta, de modo que le agradezco mucho su contribución. Supe de ello a través del foro cpcwiki (https://www.cpcwiki.eu/forum/programming/8bp/) y quiero agradecerle publicamente su contribución.


Los nuevos manuales ya se encuentran en el repositorio de github (https://github.com/jjaranda13/8BP). Tened en cuenta que estas traducciones han sido creadas por una herramienta automática , de modo que contienen algunos errores, sobre todo en los ejemplos de programas, donde a veces la herramienta trata de traducir los comandos. En esos casos lo mejor es consultar los ejemplos en la versión española.


Con esta contribución, 8BP es ahora más accesible para los no españoles, y espero que lo disfrutéis y podáis hacer vuestros videojuegos realidad.


hasta pronto amigos!




domingo, 4 de junio de 2023

Disponible nueva versión V42 de la librería 8BP

hola amigos de 8 bits de poder

Ya tenéis disponible la versión V42 de la libreria 8BP, descargable en github https://github.com/jjaranda13/8BP . Esta nueva versión incorpora varias funcionalidades nuevas pero ademas te deja mas memoria libre gracias a "opciones de ensamblaje". Un simple numero con el que especificas la opción y así no "malgastas" memoria en comandos de scroll si tu juego es de laberintos o viceversa. 

Los cambios y mejoras han sido inspirados por vosotros, por programadores que me hacen consultas, me sugieren ideas y echan en falta cosas que poco a poco se han ido incorporando. Gracias a los que como Toni o Fito, me han sugerido ideas y me han ayudado con sus preguntas a comprender donde debía explicar un poco mas en el manual ciertos detalles. 


librería: se han incorporado las siguientes funcionalidades:

  • "opciones de ensamblaje": con las que 8BP ahora te deja 1.5KB para música y hasta 25KB libres para tu listado. Ahora la librería 8BP dispone de varias opciones de ensamblaje que te permiten elegir las capacidades que deseas para tu juego y así dispones de más memoria disponible para el listado de tu juego. La opción de ensamblaje la debes especificar en el fichero Make_all_mygame.asm , el cual tiene una línea específica para asignar el valor del parámetro “ASSEMBLING_OPTION”. con la opcion para juegos de laberintos (1) tienes 25KB libres, con la de scroll (2) tienes 24.8 KB libres y con la pseudo3D (3) tienes 24 KB libres



  • 1.5KB libres para música (antes eran 1.4 KB). El mapa de memoria ha cambiado ligeramente
  • imágenes de fondo: permite scroll sin parpadeos en objetos que pasan por debajo de tus sprites

  • secuencias de animación encadenadas: esto permite hacer secuencias de animación de cualquier numero de frames

manual: incorpora las siguientes mejoras:

  • explicación de las opciones de ensamblaje
  • nuevo mapa de memoria
  • explicación de las imágenes de fondo
  • explicación de las secuencias de animación encadenadas
  • revisión completa del manual con muchas mejoras en todos los capítulos

las demos han sido actualizadas para usar 8BP V42 y se ha añadido la demo 15, que muestra la utilidad de las imágenes de fondo en juegos con scroll


Espero que os guste y os ayude a programar vuestros juegos aun mejor
hasta pronto!







martes, 21 de junio de 2022

"Paco, el hombre" : nuevo juego disponible para descarga

 hola amigos de 8BP

Un nuevo juego se añade a la lista de juegos 8BP. Se trata de "Paco, el hombre" un comecocos con 4 niveles de dificultad que hace uso intensivo de logicas masivas. Lo podéis encontrar en https://github.com/jjaranda13/8BP .junto con sus fuentes, música, etc


Como su nombre indica, "Paco el hombre" esta basado en el clásico PAC-MAN. Creado en 1980 por la empresa Namco, fue el juego que más monedas recaudó en los 80 (14 mil millones de dólares). Entre 1981 y 1987 se vendieron 293.822 máquinas arcade con todas las variantes de este videojuego. La versión de 8BP tiene la esencia del mítico comecocos pero simplificado. No se han incluido frutas ni te puedes comer a los fantasmas


Consta de 4 niveles y en cada uno la velocidad es mayor. En cada nivel el numero de fotogramas por segundo aumenta y la velocidad llega a complicar mucho el juego

  • nivel 1: 15 fps (en BASIC)
  • nivel 2: 19 fps (en BASIC)
  • nivel 3: 30 fps (en C)
  • nivel 4 : 33 fps (en C)

Cada nivel tiene un diseño de colores diferentes al resto, pero el laberinto es el mismo.


Este juego usa una tecnica especial para mover los sprites medio byte (dos pixels de mode 1, o si estuviesemos en mode 0 sería un solo pixel). Un byte contiene 2 pixels en mode 0 , o bien 4 pixeles en mode 1. La tecnica para mover medio byte se trata de tener una imagen del personaje desplazada medio byte y simplemente asignársela al Sprite. Aunque se imprima en la misma coordenada, parecerá que se ha movido


Para ayudar a generar estas imágenes desplazadas, junto con el juego he publicado la versión V15 de SPEDIT que permite desplazar hacia la derecha e izquierda cualquier imagen. 

Un movimiento suave es mas agradable pero también da la impresión de ser mas lento. Por eso es muy importante lograr el mayor numero de FPS posibles y para ello se ha hecho uso intensivo de logicas masivas. Las tareas del juego se dividen en ciclos y tras 4 ciclos de juego todo vuelve a comenzar. Es como un "motor de 4 tiempos". En cada ciclo todo se mueve (los 4 fantasmas y también paco) pero solo se realizan algunas tareas. Ello permite reducir el numero de instrucciones que se ejecutan en cada ciclo. 


Para que esto sea posible, cada vez que un fantasma se encuentra en una bifurcacion del laberinto es muy importante que justo en ese momento se ejecute su lógica. Para que esto ocurra se colocan inicialmente los fantasmas en posiciones calculadas de modo que SIEMPRE que un fantasma alcanza una bifurcación, su lógica se va a ejecutar.

Una estrategia "extra" de lógicas masivas se usa en los niveles 2 y 4. Se calculan las decisiones de los fantasmas en una ejecucion "normal " y se almacenan en una tabla. Dicha tabla es consultada en estos niveles, ahorrando lógica de chequeo de muros etc. El universo del juego es "determinista" y con ello aceleramos unos cuantos fps

El laberinto se ha construido con la capacidad de layout de 8BP y tienes mucha información en el documento "making of" del videojuego, también disponible en la sección de documentación de 8BP

¡espero que lo disfrutes! te dejo con un video del juego



hasta pronto amigos! y feliz verano!










domingo, 13 de marzo de 2022

SPACE PANIC: un nuevo juego creado por adolFito usando 8BP

 hola amigos de 8 bits de poder

En esta ocasión quiero presentaros Space Panic, un nuevo juego creado con 8BP , programado por adolFito (https://fitosoft.itch.io/ ) . Es una conversión de clásico juego de 1980 creado para máquinas arcade, considerado como el "padre de los juegos de plataformas"

Como veis la pantalla de carga es soberbia, creada por brundij


El juego ha sido creado con la versión 8BP v41 y utiliza ciclo compilado (es decir, ha programado en C y usa la capacidad C de 8BP). Lo podéis encontrar en el repositorio de juegos github de 8BP.(https://github.com/jjaranda13/8BP) , Tanto el dsk como el cdt y el fuente en C con el que podéis inspiraros para hacer vuestro propio juego. En el repositorio github de 8BP podéis encontrar un total de 17 juegos que os sirven como ejemplo para vuestras creaciones. Algunos de estos juegos incluso traen un documento "making of" que podéis  encontrar en la carpeta de documentación


Durante el desarrollo, que a su autor le ha llevado algo menos de 3 meses, he tenido ocasión de charlar con el algunas veces y aunque comenzábamos hablando de programación, dudas, etc, acabábamos hablando de lo divino y lo humano y he de decir que en la escena retro hay muy buena gente. Fito es uno de esos tipos con los que conversar es un verdadero lujo.

En realidad ya conocí a Fito, como a Cervantes, a través de sus obras. Jugué mucho a su remake de west bank para android, una pasada de juego con la que he pasado muchas horas viajando en metro. ¡Os lo recomiendo!



Os invito a descubrir Space Panic (descargable desde la web itch de fitosoft y desde el github de 8BP) y a disfrutar se un verdadero clásico.

Gracias Fito!




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, 14 de noviembre de 2021

Menus personalizados para DES con 8BP

 hola amigos de 8 bits de poder

Con la llegada del dispositivo DES a la escena AMSTRAD, hemos descubierto una nueva forma de cargar juegos en nuestro CPC, los fabulosos cartuchos cuya carga es instantánea


con La herramienta “ROM Generator” de Dandare (aqui) podemos crear nuestra propia compilación de juegos. Quizás quieres personalizar tu menú de juegos con una imagen. Eso es posible aunque debes saber los pasos, que los encontraras en el documento “como hacer juegos con intro para DES”, en la serie de manuales de ayuda de 8BP.  

En este post te voy a contar como hacer un menú con un juego integrado en el propio menu, es decir, que el menú sea un juego. Puedes encontrar esta información en el documento "menus para DES con 8BP", en la serie de manuales de ayuda de 8BP.  



Pero puedes hacer un menú aun mas lujoso y personal si en lugar de una simple imagen haces un programa a modo de menú desde el que puedes saltar a otros juegos. Para ello ROM generator te permite elegir dos modos de comportamiento:
  • arrancar con uno de los juegos directamente (marcando la casilla Autoboot)
  • arrancar desde el menú para elegir el juego

Esto nos sugiere una idea: podríamos hacer un juego con autoboot que en realidad sea un menú personalizado a nuestro gusto. Además, dicho menú podría tener varias pantallas, animaciones e incluso minijuegos integrados. Podemos usar 8BP para construir de forma sencilla estos menús, desde BASIC y para todos los públicos.


Ubicación de la rutina DES
Si vas a hacer un programa que haga las veces de menú con 8BP, necesitas cargar la rutina DES que permite conmutar al DES de una rom a otra en la memoria, para poder saltar a cualquiera de los juegos del menú.
La rutina es esta (como ves es corta). Yo la he ensamblado en la dirección 42000, en la zona de gráficos de 8BP. 


A continuación, tienes el mapa de memoria de 8BP. Podría meter la rutina en cualquier zona por debajo de la dirección 24000 o bien en la zona dedicada a sprites o a música , si es que nos sobra memoria. En el caso que te voy a presentar me sobra casi toda la memoria de gráficos y he usado la zona de sprites (desde la 42000 hasta la 42030). Es decir, son 30 bytes al final de la zona de sprites, sin llegar a tocar ni siquiera el map layout, aunque podría ubicarla ahí porque en este programa no voy a usar el layout


El programa/juego menú

Este programa esta creado con 8BP e integra un minijuego dentro del propio menú.  Primero muestra una imagen en pantalla y mientras se visualiza un fondo de estrellas cayendo te invita a pulsar una tecla. Justo después aparece nuestra lista de juegos al mismo tiempo que podemos jugar a un minijuego. Durante la ejecución del minijuego podemos pulsar un numero para seleccionar un juego de la lista o bien para cambiar de pagina

El minijuego es sencillo: manejas al personaje “hackman” y debes saltar esquivando los enemigos, y cada vez que te matan vuelve a empezar. La máxima puntuación siempre se presenta en pantalla para que sepas la marca que debes batir.
Algunas variables importantes de este pequeño programa:
  • NUMGAMES: numero de juegos de tu lista
  • GAME$(NUMGAMES)=almacena los títulos de los distintos juegos de la lista
  • Page: variable de página. Puedes tener dos páginas de juegos
La rutina que te permite saltar a un juego comienza en la 620 y es invocada cuando pulsas un número. Como ves justo al final se invoca la rutina que hemos ensamblado en la 42000

el listado completo con el lanzamiento de la rom y el juego de saltar bichos lo puedes descargar desde el github de 8BP (https://github.com/jjaranda13/8BP ). No te lo pego aqui porque ocupa un par de paginas pero si estas interesado en los detalles simplemente ve al github de 8BP y descargatelo. Tambien lo tienes en el documento  "menus para DES con 8BP", en la serie de manuales de ayuda de 8BP.  

En este caso se trata de un minijuego muy sencillo, que con los comentarios prácticamente se entiende, pero si que quiero destacar la forma la leer el teclado, con la función B$=INKEY$. Esta función nos permite capturar cualquier tecla que pulses. Solo la ejecutamos si no has pulsado la barra, que es el control de salto del personaje. 

482 if inkey(47) then 484 else |SETUPSP,31,15,0:|SETUPSP,31,0,137:goto 500
484 b$=inkey$: if b$="" then 500 

Como ves en esas líneas solo ejecutamos el INKEY$ si no has pulsado la tecla 47 (la barra)

Últimos pasos

Una vez que te funciona todo, los pasos que debes dar para crear tu rom son:
 1) Grabar la SNA del programa menú (ejecutada desde un 464) 
 2) Grabas las SNA de los juegos de tu lista 
 3) Ejecutas el ROM generator y arrastras los juegos y tu programa menú
 4) Seleccionas AutoBoot en tu programa menú
 5) Pulsas crear rom


Ahora te toca a ti crear un menú. ¿con minijuego integrado? ¿Con animaciones? ¿con pequeñas capturas de pantalla de los juegos que ofrece? ¿con un piano para tocar música hasta que el jugador se decida por un juego?
Puedes hacer lo que tu quieras. Imagina y hazlo realidad con 8BP

hasta pronto amigos!