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 videos. Mostrar todas las entradas
Mostrando entradas con la etiqueta videos. Mostrar todas las entradas

domingo, 31 de mayo de 2020

Disponible versión V40 de la libreria 8BP

Hola amigos de 8 bits de poder

ya tenéis disponible la versión V40 de la libreria 8BP, descargable en github https://github.com/jjaranda13/8BP . Esta nueva versión incorpora las siguientes mejoras:


  • libreria: ahora se incluye 8bitsdepoder_v40_00.asm con las siguientes mejoras:
    • compatible con C
    • en el subdirectorio "C" se incluye un wrapper de 8bp (8BP.h)
    • en el subdirectorio "C" se incluye un minibasic (minibasic.h)
    • en el subdirectorio "C" se incluye la herramienta de compilación "compila.bat" que te simplifica el proceso de compilar y crear un .dsk
  • manual: he actualizado el manual e incluido un capitulo que te enseña a traducir tu ciclo de juego a C
  • Demos: todas las demos se recopilan en un menú y están hechas con la v40. ahora hay una demo nueva que demuestra ciclo de juego en C
  • games: se incluye el nuevo "Zampa Manzana" creado por Riper y música de Xeno


Aquí tenéis un pequeño vídeo introductorio: 




En el manual de 8BP encontraras un capitulo dedicado a la forma en la que 8BP se ha hecho compatible con C. 


Con esta nueva funcionalidad tienes 3 opciones:
1)     Hacer tu programa 100% en BASIC ( es decir, no usar la funcionalidad). Esta opción simplifica mucho la tarea de programar pero tienes menos velocidad.
2)     Hacer tu programa 100% en C. Esta opción es compleja pues programar, compilar, buscar y corregir errores, se hace una tarea mucho mas lenta que programando en BASIC

3)     Hacer tu programa en BASIC y al final traducir tan solo el ciclo de juego a C. Esta opción tan fácil como la primera salvo por la ultima fase de traducción a C. 

Puedes programar directamente en C pero también puedes hacer tu juego 100% en BASIC y solo al final traducir fácilmente (mediante un minibasic que viene con 8BP) el ciclo de juego a C. Prácticamente te llevará unos minutos y conseguirás la máxima velocidad.

¿que no te lo crees? pruébalo. Ya nada será igual


Un ejemplo comercial de la opción 3 es el famoso y mítico juego “plaga galáctica”, una producción de Indescomp creado por el excelente programador Paco Suárez en 1984. Le debemos muchas horas de entretenimiento al gran Paco Suárez.


Para esta nueva funcionalidad, 8BP v40 te proporciona dos librerías de C:
  • el wrapper de 8BP, llamado 8BP.h
  • un minibasic ("minibasic.h") con 18 comandos similares al BASIC pra ayudarte a traducir tu ciclo de juego desde BASIC a C




La librería 8BP trae un par de ejemplos ( dos minijuegos) para que aprendas a llevar a cabo este sencillo proceso.  Y el capítulo del manual es muy detallado y te guiará paso a paso

Ya puedes hacer juegos de AMSTRAD como nunca imaginaste.  Con 8BP v40 ya nada será igual en los juegos por computadora


hasta pronto!


jueves, 14 de noviembre de 2019

Disponible version V38 de la libreria 8BP

Hola amigos de 8 bits de poder

ya tenéis disponible la versión V38 de la libreria 8BP, descargable en github https://github.com/jjaranda13/8BP . Esta nueva versión incorpora las siguientes mejoras:

- detección de colisiones perfeccionada, sin limitaciones por coordenadas negativas
- comando MUSIC mejorado: ahora puedes decidir entra hacer sonar una musica en bucle o hacerla sonar una sola vez.
- el comando MUSICOFF ha sido reemplazado por MUSIC invocado sin parametros
- manual mejorado con capitulo de primeros pasos y diversas pequeñas mejoras
- la librería ocupa exactamente igual que antes (8KB) , dejándote 24 KB para tu lógica BASIC, 8.5 KB para gráficos y 1.4 KB para música

Estos son los primeros pasos con la librería 8BP. Te dejo con un vídeo explicativo y los mismos pasos por escrito, que ademas los tienes en el manual de 8BP que viene con la librería.


Primeros pasos con 8BP

 1) Instalar winape

Lo primero que debes hacer es instalarte la última versión de Winape, que es un emulador y a la vez editor y ensamblador de Amstrad. Lo puedes descargar desde www.winape.net

2) Familiarizándote con winape: “hola mundo”

Una vez instalado el Winape, familiarízate un poco con el, probando algun juego de Amstrad y probando a cambiar la configuración. Trata de abrir el assembler que lleva incorporado en el menú y edita un “hola mundo” en la ventana de ensamblador. A continuación, copia y pega el texto en la ventana de emulación. Veras como se pega carácter a caracter



Si haces un programa mas largo, para copiarlo en la ventana de emulación es muy interesante la opción settings->high speed. Verás como se copia rapidísimo.

3) Descárgate la librería 8BP

Estamos llegando a lo mas interesante. Ve a la url https://github.com/jjaranda13/8BP y descargate el zip (https://github.com/jjaranda13/8BP/archive/master.zip) . Para ello puedes simplemente pulsar el botón verde “clone or download” y a continuación seleccionas el zip

Una vez que te lo has descargado, descomprímelo en el directorio que quieras. Tendras el siguiente resultado:


4) Ejecuta las demos

Ahora vamos a hacer una primera toma de contacto con 8BP viendo algunas demos. Entra en el directorio Demos. En el encontraras una serie de subcarpetas : ASM, BASIC, DSK, MUSIC
Entra en DSK . Alli veras un fichero .dsk con las demos. Desde winape ve al menú File->drive A-> insert Disc image y selecciona el archivo de las demos
Una vez seleccionado, desde la ventana de emulación del Amstrad escribe CAT para ver los archivos

Cada fichero .BAS es una demo donde podrás ver alguna de las características de 8BP (no todas sus posibilidades se pueden ver con las demos pero hay algunas representativas).
Ejecuta el comando RUN “LOADER.BAS”. Obtendrás el siguiente menú:




Ya puedes elegir una demo y probarla. A disfrutar. En el siguiente y ultimo paso empezaremos la creación de un juego

5) Creando tu primer programa con 8BP

Hemos probado un fichero .dsk que contiene muchas demos, con graficos y música. En el directorio Demos/ASM y en el Demos/MUSIC se encuentran los graficos y la música de las demos que has probado. Sin embargo, si quieres hacer tu propio juego o demo, es mejor que empieces con unos ficheros “limpios” sin todos los graficos que requieren las demos que has probado.

Nos vamos al directorio raíz. Alli encontraras una carpeta llamada 8BP_V38. Yo te recomiendo que hagas una copia de esta carpeta y la renombres como “mi_juego”. De ese modo preservarás la carpeta 8BP_V38 original aunque empieces a cambiar cosas

Dentro de la carpeta 8BP_V38 encontraras las carpetas ASM, BASIC, DSK, MUSIC, TAPE, y output_spedit


Desde la ventana de ensamblador de winape abre el archivo “ASM/make_all_mygame.asm” y ejecútalo (simplemente en el menú de winape z80 assembler seleccionas Assemble o pulsas Ctrl+F9). Esto comenzara a ensamblar (copiar en memoria) la librería y los graficos en la memoria del Amstrad. En este caso vamos a ensamblar muy pocos graficos, tan solo los indispensables para un pequeño juego. Los gráficos se encuentran en images_mygame.asm
Tras ensamblar todo, obtendrás un mensaje como el que se muestra a continuación:


Pulsas “ok” y desde la ventana de ensamblador vamos a abrir otro archivo. En este caso vamos a abrir un fichero BASIC, concretamente “tu_primer_juego.bas” que se encuentra en la carpeta BASIC. Tras abrirlo veras el siguiente listado en pantalla, que contiene 32 lineas:

Selecciona todo y cópialo. Luego ve a la ventana de emulación del CPC y pégalo usando el menú FILE->paste
Como el listado es algo mas largo que el “hola mundo”, usa settings->high speed para copiarlo y luego vuelve al “normal speed”
Como ya esta ensamblada la librería y los gráficos, puedes hacer RUN y el juego se ejecutará. Debes esquivar unas bolas que caen del cielo para no morir, moviéndote a derecha e izquierda

Puedes probar a modificar el programa y ver sus efectos. Poco a poco iras aprendiendo 8BP y podrás hacer modificaciones interesantes tales como cambiar la frecuencia con la que salen bolas enemigas o su velocidad, o reemplazar al soldado por una nave espacial y a las bolas por naves enemigas con diversas trayectorias.

6) Crea tu .dsk con tu juego 8BP

Por último, vamos a crear un disco con tu juego. Para ello, tras tener el juego funcionanod debes dar estos pasos

·        Crea un disco nuevo mediante winape: FILE-> drive A-> new Blanc Disc
·        Formatealo: FILE->drive A->Format Disc Image
·        Tras haber creado tu fichero dsk , desde la ventana de emulación ejecuta los siguientes comandos:

SAVE “8BP.bin”, b, 24000,18620
SAVE “juego.bas”

Ya casi hemos terminado. Ahora debes seleccionar otro disco desde el menú de winape o salir de winape para que el .dsk que has creado se haga realidad en el sistema de ficheros de windows.

Sal de winape y vuelve a abrirlo
Selecciona el disco que has creado y ejecuta:

MEMORY 23999
LOAD “8BP.BIN”
RUN “juego.bas”



Aleluya !!!



domingo, 17 de febrero de 2019

8 bits de poder estará en Amstrad Eterno 2019

Hola amigos de 8 bits de poder

Como he anunciado por twitter, en la proxima feria de Amstrad Eterno, que tendra lugar el Sábado 30 de marzo en Barcelona. Es una gran feria, un punto de encuentro obligado para los amantes del Amtrad . En ella, 8BP tendra presencia con un stand en el que os mostraré novedades y juegos y donde podremos charlar sobre nuestro ordenador favorito.


Además, de 11:30 a 12:00 podreis aprender a programar el clasico "frogger" desarrollado por konami en 1981, pero usando 8BP. Os enseñare paso a paso como hacerlo y vereis lo facil que es programar cualquier juego con 8BP. Además, prepararé documentación detallada del juego para los asistentes, aparte de la conferencia/taller



Hablaré de las capacidades de 8BP  y de la técnica de lógicas masivas pero a la vez podras comprobar como plasmar esos conceptos en un juego real, llamado "Frogger eterno", al que podrás jugar en el stand ese mismo dia. ¿te animas?
el juego frogger eterno será presentado en Amstrad Eterno 2019

Os dare mas noticias sobre esta contribución de 8BP a medida que nos acerquemos al evento. De momento os dire que tambien estarán disponibles gracias a STAR, ediciones físicas de los juegos de 8BP en dos volúmenes. Cada volumen contiene dos cintas cuidadosamente elaboradas. Las podeis adquirir en la boutique de STAR http://www.matranet.net/boutique/cpc/cpc.php
volumenes de 8BP
STAR realiza unas magnificas ediciones homebrew

En el stand podreis probar los juegos de 8BP, incluido el recientemente premiado "Space Phantom". Como sabeis es un juego de arcade 3D y si funciona rápido es gracias a la velocidad de los comandos 8BP y a la técnica de lógicas masivas de la que os contaré sus secretos. Alli estaré para el que quiera conocer los secretos de la programación de este juego.



Antes de despedirme quiero deciros que he subido una nueva versión del manual (V36_01), mejorada en algunos capitulos para explicar mejor como funciona todo, sobre todo el apartado de rutas de sprites, aunque hay mas mejoras.

Un abrazo y nos vemos en Amstrad Eterno 2019! no te lo pierdas!




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!!!






viernes, 7 de diciembre de 2018

Disponible nueva version de 8BP V35 y nuevo juego "SPACE PHANTOM"

Hola amigos de 8 bits de poder

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

  • comando |ROUTESP mejorado, ahora permite adelantar varios pasos en la ruta para colocar facilmente naves en hilera
  • he incluido una nueva demo para demostrar ROUTESP
  • corregido un pequeño bug detectado en v34 en el uso conjunto del codigo 251 y |AUTOALL,1
  • no ha cambiado el espacio ocupado por la libreria
  • manual : En la documentacion he reflejado todos los cambios y he mejorado apendice de teclado, asi como el apartado de logicas masivas
  • JUEGOS: nuevo juego "SPACE PHANTOM" disponible en la carpeta GameExamples. Es un juego pseudo 3D creado con 8BP V35, ocupa unos 18KB de BASIC

Os voy a poner un ejemplo del comando ROUTESP

|ROUTESP, <spriteid>, <pasos>

Este comando mueve un sprite el numero de pasos que desees a lo largo de la ruta que tenga asignada. En el ejemplo he destacado en rojo la asignación de la ruta 8 y los comandos ROUTESP que posicionan cada uno de los sprites en la ruta

10 memory 23999
10 ON BREAK GOSUB 12
11 GOTO 20
12 |MUSICOFF:CALL &BC02:PAPER 0:PEN 1:MODE 1:END
20 CALL &BC02:DEFINT A-Z:MODE 0
50 CALL &6B78
70 ' todas las naves colocada en la misma coordenada inicial
75 ' y con la misma ruta pero con un numero inicial de pasos distinto
76 locate 2,3: Print "comando |ROUTESP "
80 for s=16 to 21: |SETUPSP,s,9,33: |SETUPSP,s,0,137: |SETUPSP,s,15,8:|LOCATESP,s,20,100:next
90 |ROUTESP,21,40:'nave cabeza
100 |ROUTESP,20,30
110 |ROUTESP,19,20
120 |ROUTESP,18,10
130 |ROUTESP,17,0
131 |PRINTSPALL,0,0,0
140 '--- ciclo de juego ---
150 |AUTOALL,1:|PRINTSPALL
160 goto 150


vamos a ver un ejemplo en accion en el siguiente video
https://www.youtube.com/watch?v=9Tk5ZE8lG-c




Ademas de esta nueva versión de la libreria, ahora se incluye el nuevo videojuego "SPACE PHANTOM", un tributo al clasico "Space Harrier" de SEGA, realizado en BASIC con 8BP. Es un juego con capacidades pseudo-3D, logicas masivas, enrutado de sprites avanzado, etc.
Equipado con un jet-pack, debes volar por el espacio y destruir meteoritos y pajaros diabolicos espaciales, despues entrarás en el ultramundo donde te enfrentarás a numerosas naves enemigas y por ultimo tendrás que enfrentarte a un dragon y conseguir su cabeza. Una aventura epica espacial en tu AMSTRAD.




y aqui os dejo el video

https://www.youtube.com/watch?v=8adNXl3K7qw





Espero que os guste. Hasta pronto amigos!!!




viernes, 25 de mayo de 2018

Disponible conferencia Pseudo-3D de Retromadrid 2018

Hola amigos de 8BP

En esta ocasión os traigo el video publicado por retromadrid, con una cuidada post-producción, con la charla de 8BP sobre Pseudo-3D. En la charla se explican los conceptos de Pseudo-3D, asi como el funcionamiento de las maquinas recreativas de los 80 y 90, y el de los juegos pseudo-3D de los ordenadores de 8bit. Tambien se eplican los mecanismos que posee 8BP para que puedas programar tus propios juegos Pseudo-3D. La postproducción realizada incluye carátulas de los juegos comentados y ha quedado francamente bien. Además, la proyección de la presentación se ve perfectamente.

La presentacion de la charla la encontrareis en presentacion Pseudo-3D . Uno de los conceptos mas importantes de Pseudo-3D es que las curvas no son reales. No hay nada que gire, sino simplemente una carretera que se deforma y unas montañas o edificios en el fondo que se mueven de acuerdo a la supuesta curva que estamos tomando.



En el manual de 8BP disponible en https://github.com/jjaranda13/8BP  podreis encontrar informacion detallada de como usar las capacidades Pseudo-3D de 8BP. Aqui os adjunto un breve resumen

Las capacidades que aporta 8BP para poder disponer de pseudo-3D son:

1) Proyeccción 3D: consiste en proyectar un mapa del mundo 2D en 3D, de modo que, aunque lo recorramos en 2D, nos de la sensación de verlo en 3D. Esto lo haremos invocando al comando |3D para configurar los comandos PRINTSPALL y PRINTSP de modo que proyecten en 3D antes de pintar en pantalla. No habrá posibilidad de girar en el plano, siempre “miraremos” hacia delante, pero el efcto combinado de una curva unido a unas casas o montañas en el horizonte que se desplacen, simulará que estamos tomando una curva.




2) Zoom: consiste en poder usar distintas versiones de una misma imagen de un objeto para dar efecto de zoom a medida que nos acercamos a el. Esto simplemente lo haremos en el fichero de imágenes, definiendo 3 versiones de una misma imagen y agrupándolas en una estructura. En la imagen se muestra el típico ejemplo del cartel que se acerca. Los comandos PRINTSPALL y PRINTSP escogerán la versión mas adecuada de la imagen según a la distancia a la que se encuentre, sin necesidad de hacer nada mas que definir la imagen como una imagen de tipo “Zoom”.



3) Segmentos: consiste en poder disponer de sprites de tipo “segmento”, definidos por una sola scanline horizontal (por lo que ocupan muy poco), a los que podamos asociar una longitud y una inclinación. Con ellos podremos construir caminos, ríos, etc y bordes de carreteras. Esto simplemente lo haremos en el fichero de imágenes definiendo un tipo de imagen que además de ancho y alto posee inclinación. Estos segmentos los utilizaremos en la construcción del mapa del mundo.


Los segmentos utilizados en el juego “3D Racing one” son rojos o blancos y aunque sean largos, solo estan definidos por una scanline. Por ejemplo, el segmento blanco izquierdo consiste en unos pocos bytes verdes para el cesped, un par de blancos y otros pocos grises para la carretera. En el momento de imprimirse, el segmento asi definido se replica hasta medir la longitud deseada, y se imprime en perspectiva, por lo que, aunque sea un segmento recto, se mostrará torcido.

Por último, mencionar que en muchas ocasiones será necesaria la actualización dinámica del mapa (comando |UMAP). Gracias a este comando, el mapa puede ser muy grande (lo cual es necesario si creamos un circuito con muchísimos segmentos).



Pronto os presentaré 8BP v33 con avances muy interesantes en los que estoy trabajando que estoy seguro que os van a sorprender!


hasta pronto amigos!


lunes, 7 de mayo de 2018

8BP estuvo en Retromadrid 2018

Hola amigos de 8 bits de poder

Estuvimos en uno de los eventos retro mas importantes de España: Retromadrid.
Interesantísimo punto de encuentro (no comercial) donde maquinas antiguas, desarrollos homebrew e intercambio de ideas se viven al minuto. Un evento de referencia para todos nosotros, con conferencias y talleres muy interesantes.

Este año fui con un amstrad CPC464, demostrando una vez mas que todos los juegos hechos con 8BP pueden correr en 64KB de RAM, sin trampa ni cartón. También llevé una Bartop para jugar a shooters hechos con 8BP como el Nibiru o el Anunnaki y un video introductorio a 8BP que os adjunto aqui:




Muchos serán los blogs que tratarán el contenido del evento y como no, la participación de Jon Ritman (creador de Batman, Head Over Hells, Match day...), que fue un invitado de excepción.
Estuvimos con Jon Ritman, el creador de Batman (entre otros)
Tuve la oportunidad de charlar con Jon Ritman y contarle lo que 8BP puede hacer. No todos los dias tenemos la ocasión de  conocer en persona a una estrella del calibre de Jon.

Yo en este post os voy a contar mi impresión sobre el evento. Lo retro esta mas de moda que nunca. Y no hay una causa sino muchas. Una muy importante es que un videojuego de 8bit lo puede hacer una sola persona en unas pocas semanas (o a lo sumo meses), mientras que un juego para sistemas modernos requiere mas tiempo, mas detalles, mas trabajo. Además las limitaciones de estas máquinas, lejos de verse como un problema, son valoradas positivamente pues estimulan la imaginación y el ingenio.

gran acogida del videojuego "3D-Racing One", creado con 8BP
Los amantes de lo retro poseen una complicidad "silenciosa". Cuando un programador de Amstrad se encuentra con un programador de spectrum, commodore o MSX (o otro sistema antiguo), se dan la mano. Se entienden en el lenguaje secreto de los 8 bit.
El publico disfrutando de Anunnaki, 3D-racing one, Nibiru...
Otra cosa que me sorprendió fue el elevado número de niños que descubrieron y disfrutaron de los juegos de 8 bit. Su simplicidad, su fácil manejo, su clara mecánica...les atrapa. En verdad los juegos tan sencillos ya no están de moda y por lo tanto están "fuera del alcance" de las nuevas generaciones.
Los niños son verdaderos embajadores del sentido común, de lo que significa divertirse y su criterio esta limpio de modas. Son auténticos validadores de estos juegos.
Una distinguida visitante disfrutando con "Fresh fruits & vegetables", creado con 8BP
Incluso el primer juego construido con 8BP "Mutante Montoya", fue la delicia de grandes y pequeños. Incluso yo mismo estaba sorprendido. Es un juego sencillo, pero "engancha".
Publico jugando a "mutante montoya"
Una novedad interesante y que me causó una grata sensación fue ver un juego mio ("Nibiru") en edición física a la venta. No es mi intención ganar dinero y prometo donar lo poco que gane con el, pero reconozco que me hizo mucha ilusión. Fue como un deseo anhelado desde niño, ver un juego mio a la venta, en cassette.

gran acogida del juego "Nibiru" ejecutado con una Bartop con joystick profesional
Nibiru a la venta a precio ochentero
Durante la jornada del Sábado ofrecí una charla sobre programación Pseudo-3D, cuya capacidad está integrada en la librería 8BP desde la versión 32. He de decir que el público era excepcional: gente reunida en torno a un interés y una pasión común. Esa pasión nos conectaba a todos en la sala de conferencias. Para mi fue un placer compartir esas ideas con todos vosotros.

imagen de la charla de pseudo-3D
Hablé de como estaban programados los juegos en los 80: Pole Position, After burner, Space harrier... y tambien de como se hicieron los juegos pseudo 3D en el Amstrad, asi como de la programación pseudo 3D con la libreria 8BP.

Aunque en el canal oficial de Retromadrid aun no ha sido publicado, hay un canal de youtube que ya ha publicado la charla, aqui os la dejo. Cuando esté disponible el de Retromadrid, añadiré dicho video




Y por último solo me queda agradecer a la organización (a la Asociacion de Usuarios de Informatica Clasica - AUIC) y a todos, expositores y visitantes, por hacer de Retromadrid un gran punto de encuentro.

gran stand de 8BP en retromadrid 2018


hasta pronto amigos!



domingo, 15 de abril de 2018

Disponible nuevo juego "3D racing one" y la version 32 de 8BP

Hola amigos de 8BP

Ya esta disponible la versión v32 de 8BP,  en https://github.com/jjaranda13/8BP la cual incorpora la prometida y esperada capacidad "pseudo 3D" para hacer juegos de carreras , tanques, naves...etc.. Esta versión representa un avance importante en la librería 8BP, y poder hacer juegos 3D en BASIC es algo revolucionario. 

La nueva versión 32 de 8BP viene con un regalo, el nuevo juego "3D racing one", que encontrarás en la carpeta "GameExamples". Es un juego que demuestra la capacidad pseudo3D de 8BP, el primero realizado con esta nueva funcionalidad. Posee un lujoso gráfico, 4 fases, en una deberás competir con 4 coches y una fase de conducción nocturna.


Además, el manual ha sido actualizado minuciosamente y encontrarás detalles de como funciona el pseudo3D, las matemáticas que usa, los trucos, etc. El manual además incorpora nuevos consejos para aumentar el rendimiento de tus juegos, y por si fuera poco, la librería ha mejorado la funcionalidad de algunos comandos como MAP2SP, PRINTSPALL, mejoras en velocidad de PRINTAT, nuevos comandos ""ROUTESP" y 3D", y un sin fin de mejoras que están a tu disposición, para que las disfrutes y rindas culto al Amstrad CPC

En siguientes posts iré contando cosas del funcionamiento del pseudo3D. De momento os dejo con un video del fabuloso juego (de casi 20KB de BASIC) titulado "3D Racing one", realizado íntegramente en BASIC, con 8BP y usando la técnica de "lógicas masivas".

Te gustaría una charla/conferencia sobre la historia de los juegos y técnicas pseudo3D y la programación 8BP en Retromadrid 2018? vamos a intentarlo!

Larga vida al Amstrad CPC!






















martes, 31 de enero de 2017

Disponible versión V28 de la librería 8BP

hola amigos de 8 bits de poder

Ya esta disponible la versión v28 de 8BP,  en https://github.com/jjaranda13/8BP la cual sigue ocupando lo mismo, 6KB y trae nuevas funcionalidades para la definición de rutas de sprites
(todo está documentado en el nuevo manual disponible en github):

estos nuevos mecanismos los estoy usando para programar un nuevo juego de plataformas:


Para empezar os recordaré lo que es una ruta: básicamente es un conjunto de segmentos que definen la trayectoria de un sprite. Cada segmento posee un numero de pasos , una Vy y una Vx, es decir una ruta es algo asi:

ROUTE0
    db 10,2,1 ; diez pasos con Vy=2, Vx=1
    db 5,1,-1; cinco pasos con Vy=1, Vx=-1
    db 0: fin de la ruta, al llegar aqui se empieza de nuevo

En mitad de una ruta, o al final nos puede interesar cambiar el estado del sprite. Por ejemplo eso es útil en un disparo que queremos que se desactive "solo" tras avanzar suficiente como para estar seguros de que se ha salido de la pantalla. Pues bien, también puede ser interesante hacer mas cambios en un sprite durante la ruta. Las cosas que ahora podemos hacer son 3

- Cambio de estado del sprite
- Cambio de secuencia de animación del sprite
- Cambio de imagen (útil si no tiene secuencia asociada)

Cambio de estado forzado desde una ruta
Consiste en que podemos forzar un cambio de estado en mitad de una ruta. Para
ello indicaremos que deseamos un cambio de estado indicando como valor de número de pasos del segmento = 255.
El cambio de estado es un segmento más y es importante que mantengas el mismo número de parámetros por segmento, es decir, 3 bytes. Un cambio de estado a status=13 podria escribirse como:

    255,13,0

El tercer parámetro (el cero) no significa nada, es solo un “relleno” para que el segmento mida 3 bytes, pero es imprescindible.
El valor 255 le indicará al comando ROUTEALL que lo que debe hacer esta vez es cambiar el estado del sprite, asignándole el que se indique a continuación. El cambio de estado se ejecuta sin consumir un paso, por lo que siempre se ejecutará el siguiente paso al cambio de estado. Si no queremos que el sprite se mueva mas, simplemente definiremos un segmento de un paso sin movimiento en X ni en Y justo después del cambio de estado. Veamos un ejemplo:

ROUTE3; disparo_dere
;-----------------
db 40,0,2; cuarenta pasos a la derecha con Vx=2
db 255,0,0; cambio de estado a cero
db 1,0,0; quieto Vy=0, Vx=0
db 0
ROUTE4; disparo_izq
;-----------------
db 40,0,-2; cuarenta pasos a la izquierda con Vx=-2
db 255,0,0; cambio de estado a cero
db 1,0,0; quieto Vy=0, Vx=0
db 0

Estas dos rutas las vamos a usar para disparar con nuestro personaje. La primera de ellas, tras recorrer 40 pasos en los que avanza 2 bytes en X, sufre un cambio de estado y el sprite pasa a estado 0, es decir, desactivado. El siguiente segmento solo tiene un paso y no hay movimiento (vy=0, vx=0).
Con este mecanismo podemos disparar y que los disparos se desactiven solos cuando se salen de la pantalla. Ello ahorra lógica de BASIC y acelera nuestros juegos.

Los cambios de estado se pueden forzar en cualquier segmento de la ruta, no necesariamente al final, aunque en el caso de un disparo es muy lógico hacerlo al final de la ruta.


Cambios de secuencia de animación forzados desde rutas
Podemos cambiar la secuencia de animación de un sprite usando un segmento especial. Cuando pongamos 254 en el valor del número de pasos, el comando ROUTEALL interpretará que se debe realizar un cambio de secuencia de animación en el sprite. Ejemplo:
254,10,0
Este segmento cambia la secuencia de animación del sprite, estableciendo la secuencia número 10. El tercer parámetro (el cero) no significa nada, es solo un “relleno” para que el segmento mida 3 bytes, pero es imprescindible.
Al igual que con el cambio de estado, el cambio de secuencia se ejecuta sin consumir un paso, por lo que siempre se ejecutará el siguiente paso al cambio de secuencia.


Cambios de imagen forzados desde rutas: boing, boing!!!
Hemos visto como enrutar sprites con ROUTEALL o aun mejor, con AUTOALL,1
A menudo no queremos enrutar un sprite a través de una trayectoria sino algo más cotidiano: dar un salto con un personaje


Para no tener que controlar si el personaje ha llegado al punto cenital del salto, podemos usar un segmento especial que indica cambio de imagen. Al igual que cualquier otro segmento, consume 3 bytes, pero en este caso el primero es el indicador de cambio de imagen (un valor 253) y los dos siguientes se corresponden con la dirección de memoria de la imagen. MUCHA ATENCION, deberás usar “dw” antes del nombre de la imagen que quieres asignar, por lo que este segmento de cambio de imagen lo tendrás que escribir en dos líneas. Un “db” para el 253 y un “dw” para la dirección de memoria de la imagen.

  db 253
  dw SOLDADO_R1_UP

En el ejemplo siguiente tenemos un muñeco que salta. Al subir el muñeco que se borra a sí mismo por abajo mientras que al bajar se borra a sí mismo por arriba. Para que no haya discontinuidad en el movimiento, justo al cambiar una imagen por otra es necesario realinear verticalmente al soldado, subiendo la imagen de bajada exactamente 5 lineas, para hacerla coincidir con el soldado que estaba subiendo.


Usaremos dos rutas, una para saltar a la derecha y otra a la izquierda. Este sería el fichero routes_mygame.asm
;
; LISTA DE RUTAS
;================
;pon aqui los nombres de todas las rutas que hagas
ROUTE_LIST
dw ROUTE0
dw ROUTE1
dw ROUTE2
dw ROUTE3
dw ROUTE4
; DEFINICION DE CADA RUTA
;==========================
ROUTE0; jump_right
db 253
dw SOLDADO_R1_UP
db 1,-5,1
db 2,-4,1
db 2,-3,1
db 2,-2,1
db 2,-1,1
db 253
dw SOLDADO_R1_DOWN
db 1,-5,1; subo para que UP y down encajen
db 2,1,1
db 2,2,1
db 2,3,1
db 2,4,1
db 1,5,1
db 253
dw SOLDADO_R1
db 1,5,1; baja una mas
db 255,13,0; nuevo estado, ya sin flag de ruta y con flag de animacion
db 254,32,0; macrosecuencia 32
db 1,0,0; quietooo.!!!!
db 0

Y esto es todo. Os dejo con un video de preview del juego que estoy haciendo




Cuando tenga avances en el juego de plataformas publicaré mas
hasta pronto!



viernes, 23 de diciembre de 2016

Cómo hacer un juego mini-pong en BASIC usando la libreria 8BP

hola amigos de 8BP

Os traigo un pequeño tutorial de introducción para hacer un juego tipo "pong" en unos minutos. El tutorial está disponible en el canal de vídeos de 8BP  https://www.youtube.com/channel/UCThvesOT-jLU_s8a5ZOjBFA


Y el juego "mini-pong" lo encontrareis en la carpeta "Game Examples" del proyecto Github en https://github.com/jjaranda13/8BP

Os adjunto aquí el listado del juego. Como complemento a las explicaciones del video os diré que la barra del oponente (el ordenador) comienza a tomar decisiones cuando la pelota sobrepasa la mitad del campo, por lo que es posible ganarle. Si le ponemos a tomar decisiones antes llega un momento que es imposible ganar.

Algunas pinceladas sobre el juego:
- COLSPALL : para detectar colisiones entre el "colisionador" (la pelota) y los "colisionados" (las barras). En el byte de estado de los sprites se activa el flag de colisionador para la pelota (sprite 29) y se activa el flag de colisionado en el 31 (nuestra barra) y el 30 (barra del oponente)
- Usa sobreescritura en la pelota para respetar la raya blanca del campo y no borrarla al pasar. Para ello se usa una paleta con sobreescritura y se activa el flag de sobreescritura en el byte de estado del sprite de la pelota (el 29)
- solo hay dos imágenes (la pelota=17 y la barra=16) que se asignan a los 2 sprites (a los sprites 30 y 31 se les asigna la imagen 16 y al sprite 29 se le asigna la imagen 17)
- los sprites usan movimiento automático. Para ello tienen activado el flag de movimiento automático y la instruccion AUTOALL los mueve (les cambia sus coordenadas) de acuerdo a su velocidad
- todos los sprites se imprimen con PRINTSPALL en cada ciclo de juego

Sin más, os dejo con el video tutorial y el listado del videojuego

felices fiestas!



10 MEMORY 25999
20 DEFINT A-Z: CALL &6B78:' install RSX
21 |PRINTSPALL,0,0:|AUTOALL,0:mode 0
22 on break gosub 2800
26 CALL &BC02:'restaura paleta por defecto     
27 INK 0,9
28 INK 1,26
29 INK 4,1
30 ink 6,20: ink 7,20
31 puntosplayer=0
32 puntoscomputer=0
33 LOCATE 5,1:PEN 7:PRINT puntosplayer
34 LOCATE 15,1:PEN 1:PRINT puntoscomputer
35 PLOT 320,0,1:DRAW 320,400: plot 0,300:draw 16,300:draw 16,100:draw 0,100:
36 plot 640,300:draw 640-16,300:draw 640-16,100:draw 640,100
37 border 0

40 'barra del jugador
41 |SETUPSP,31,9,16:|SETUPSP,31,0,11:|LOCATESP,31,80,4
50 ' pelota
51 |SETUPSP,29,9,17:|SETUPSP,29,0,41+64:|LOCATESP,29,90,38:vyp=1:vxp=1
52 collided=0:collider=0:|COLSP,32,30,31:|COLSP,34,4,0
53 |COLSPALL,@collider,@collided
60 'barra computer
61 |SETUPSP,30,9,16:|SETUPSP,30,0,11:|LOCATESP,30,80,74:|SETUPSP,30,5,0,0
62 yc=90
80 |PRINTSPALL
81 env 1,1,15,1,15,-1,1:SOUND 1,100,25,15,1:SOUND 1,100,25,15,1:SOUND 1,100,50,15,1
82 IF INKEY(47)<>0 THEN  82
83 SOUND 1,100,7,15

90 'ciclo de juego------------
100 GOSUB 220:'lectura teclado y movimiento barra
110 GOSUB 310:'pelota
120 GOSUB 410:'computer
130 |AUTOALL:|PRINTSPALL
140 GOTO 100

200 ' rutina de movimiento barra
220 IF INKEY(67)=0 THEN vy=-5:GOTO 250
230 IF INKEY(69)=0 THEN vy=5:GOTO 250
240 if vy>0 then vy=vy-1 else if vy<0 then vy=vy+1
250 |SETUPSP,31,5,vy
260 RETURN

300 ' rutina movimiento pelota
310 xp=PEEK(27467)
311 IF xp>6 THEN IF xp<70 THEN 345
320 IF xp>=80 THEN GOSUB 500: CLS:GOTO 33:'vxp=-vxp: REM AQUI HAY QUE HACER GOSUB GOL
321  |COLSPALL: IF collider=32 THEN 345
341 IF collided=31 THEN SOUND 1,200,7,15:IF vxp<0 THEN vxp=-vxp:IF vy>0 THEN IF vyp<4 THEN vyp=vyp+1 ELSE ELSE IF vy<0 THEN IF vyp>-4 THEN vyp=vyp-1
342 IF collided=30 THEN SOUND 1,200,7,15:|SETUPSP,30,5,0:IF vxp>0 THEN vxp=-vxp: IF vyp=0 THEN vyp=1
343 pongs=pongs+1: if pongs=10 then vxp=vxp*2
345 yp=PEEK(27465) 
346 IF yp<=16 THEN vyp=-vyp:SOUND 1,600,7,15 ELSE IF yp>=192 THEN vyp=-vyp: SOUND 1,600,7,15
347 |SETUPSP,29,5,vyp,vxp
350 RETURN

400 ' rutina movimiento computer
410 IF vxp<0 THEN RETURN:'|SETUPSP,30,5,0:return
411 IF xp<40 THEN RETURN 
420 |PEEK,27481,@yc: yc=yc+21
430 IF yc<yp-5 THEN vyc=5: GOTO 450
440 IF yc>yp+5 THEN vyc=-5: goto 450
441 if vyc>0 then vyc=vyc-1 else if vyc<0 then vyc=vyc+1
450 |SETUPSP,30,5,vyc
460 RETURN

500 ' rutina puntos
510 |PEEK,27467,@xp
511 IF xp>40 THEN puntosplayer=puntosplayer+1 ELSE puntoscomputer=puntoscomputer+1
512 pongs=0
520 RETURN

2800 MODE 2: INK 0,0:PEN 1: END