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 lógicas masivas. Mostrar todas las entradas
Mostrando entradas con la etiqueta lógicas masivas. Mostrar todas las entradas

domingo, 10 de noviembre de 2019

"Happy Monty" : sus secretos desvelados

Hola amigos de 8 bits de poder

Como muchos ya sabreis, Happy monty esta disponible para descarga en https://github.com/jjaranda13/8BP asi como el documento "making of", (en la carpeta de documentación). Os recomiendo que os bajeis el juego de mi URL y no de la que publica byterealms porque he retocado algún detalle tras el concurso y la versión que he publicado yo es "la buena".

uno de los 25 niveles
Nada mas empezar a cargar veréis los logos de la AUA (https://auamstrad.es ) y de 8BP. Eso es porque tenemos una relación de cooperación para fomentar los valores de la cultura retro y promover las creaciones con AMSTRAD, para mantener mas viva la escena, si cabe. Haremos muchas cosas juntos, y las vais a poder disfrutar. Soy aliado de la buena gente que quiere contribuir a dar vida a la escena y a compartir conocimientos y desarrollos. Los amigos de la AUA son de esta pasta.

pantalla de carga
El motivo de haber presentado este videojuego a la CPC retrodev 2019 fue para dar a conocer 8BP a aquellos desarrolladores que aun se están pensando si hacer un juego o una demo con su CPC y dudan si sus conocimientos de BASIC serán suficientes. La respuesta es SI. con tener el emulador winape y sin instalar nada, puedes programar en BASIC sobre el CPC y beneficiarte de la gran potencia de 8BP. Evidentemente no he logrado el impacto que deseaba con la CPCRetrodev porque el juego no ha quedado  de los primeros, pero al menos he logrado algo de difusión de esta herramienta 8BP. 

No voy a quejarme del puesto  (ha quedado el 11) porque cualquier cosa que diga se puede malinterpretar y precisamente yo reconozco el valor de los 35 juegos, porque al ser programador, entiendo como están hechos y al igual que una persona en un museo puede entender mejor un cuadro del Bosco si conoce sus motivaciones y lo que representa, un programador entiende perfectamente lo que esta viendo y lo analiza técnicamente muy deprisa, haciéndose una idea muy clara del esfuerzo que supone cada aspecto del juego. Es como tener la capacidad de ver "mas allá" de tu percepción visual porque "entiendes" lo que estás viendo.

Lo que si que considero y me atrevo a decir es que una mejor posición para 8BP (= para Happy Monty) habría beneficiado a la escena CPC porque habría "democratizado" aun más la programación en 8 bits, con un mensaje claro a programadores BASIC: si sabes BASIC puedes hacer un juego como Happy Monty. A pesar de todo, algo de difusión he logrado y más de uno se animará a desarrollar sus juegos o demos gracias a Happy Monty. Desde este humilde blog os animo a probarlo!

uno de los 25 niveles
uno de los 25 niveles

Voy a dar algunas pinceladas en este post sobre  como ha sido construido este juego y cuales son las claves que lo hacen ser una sorprendente creación. Los puntos clave son:

  • El juego esta íntegramente hecho en BASIC y funciona en BASIC sin compilar. Eso si, usa los comandos extendidos que proporciona la librería 8 bits de poder (8BP). 
  • El juego se mide a si mismo e imprime los FPS que esta alcanzando en la parte inferior de la pantalla. Es un dato de "honestidad", para que en todo momento puedas analizar la velocidad del juego y juzgues lo que le cuesta mas y lo que le cuesta menos, sin trampa ni cartón.
  • EL juego es un tributo a Mutant Monty, un juego de 1984 escrito en ensamblador y logra alcanzar su misma velocidad (a veces supera 25 FPS) y hasta posee lógicas mas complejas de enemigos que en el juego original. Esto significa que en BASIC se puede lograr el resultado de un juego programado en ensamblador haciendo uso de 8BP y la técnica de lógicas masivas. Si, has leído bien, se puede hacer.
  • El juego tiene la primera pantalla idéntica a la del juego original. El motivo es muy sencillo: primero porque es un tributo o "segunda parte" (no un plagio ni un clon como ha afirmado algún despistado)  y segundo porque quiero que lo compares: un juego en BASIC vs un juego en ensamblador y decidas por ti mismo si 8BP tiene la potencia de un pura sangre o no. Juega a ambos y alucina viendo lo que desde BASIC se puede lograr

EL juego Mutant monty original

El primer nivel de Happy Monty
Monty tiene dos velocidades: si pulsas una tecla , monty camina, pero si la dejas pulsada...monty corre. Este mecanismo también estaba presente en el juego original. Estas mecánicas tienen también su peso en BASIC y como siempre afirmo: "todo cuesta, incluso un simple IF"

EL lenguaje BASIC interpretado es extraordinariamente lento...¿entonces? ¿como se logra la vertiginosa velocidad de Happy Monty? (calificada hasta de excesiva  -lo cual es un halago- por algún miembro del jurado de la cpcretrodev)  ¿de donde procede su "magia"? pues de dos cosas: de la velocidad de los comandos 8BP ( capaces de mover 32 sprites a la vez a 18 FPS o más)  y de la ya popular técnica de "lógicas masivas" de la que hablo ampliamente en el manual de 8BP, así como en muchas de las charlas de programación que he dado y que encontrareis en youtube y en la carpeta de documentación


Algunas claves del juego:

Niveles definidos de forma compacta:

  • cada nivel se ha creado con 160 caracteres que definen tanto los muros de cada nivel como los enemigos presentes, asi como las trayectorias que deben seguir. tambien en esos 160 caracteres se indica donde se encuentran las piezas de oro, la puerta y la posicion inicial de Monty



  • Para no definir cientos de rutas de sprites de diferentes longitudes, se han creado sprites inversores invisibles. Cuando un enemigo choca contra un sprite inversor , cambia de dirección. En el mapa expuesto son las letras "z" ,"x" para rutas horizontales y "q", "w" para verticales. 
  • los niveles se dibujan en pantalla leyendo desde Basic 160 caracteres almacenados en memoria y "traduciendo" a muros y enemigos que se van pintando. Es por ello que tarda unos segundos en pintarse cada nivel (casi nada). Podría haber hecho una rutina ASM para ello pero he preferido dejarlo así con fines didácticos. Se ha llegado a decir de monty que tiene un problema porque parece que se pinta el nivel como si estuviese hecho en BASIC....pues claro, es que esta hecho en BASIC!!!!


Lógicas masivas:

  • cuando un enemigo choca con un inversor este se desactiva, por lo que ya no hay que detectar colisiones con el, hasta que el enemigo choca con el inversor opuesto. en ese momento se vuelve a activar. Esto reduce muchos calculos pues puede haber hasta 12 inversores en pantalla.
  • el teclado se lee en dos etapas: en los ciclos impares de juego se le OP y en los ciclos pares se lee QA, de modo que hay menos trabajo que hacer en cada ciclo. La velocidad del juego evita que el jugador pueda apreciar esta limitación "invisible"
  • las comprobaciones sobre si monty puede cambiar de dirección solo se hacen cuando monty se encuentra en X= múltiplo de 4 o Y= múltiplo de 16. Esto reduce muchos cálculos por ciclo de juego. Solo se atiende inmediatamente el cambio de dirección si se trata de ir en la dirección opuesta a la que se encuentra en ese momento. En ese caso Monty da la vuelta inmediatamente.
  • los enemigos que se mueven mas despacio, tan sólo se imprimen cada dos ciclos gracias a la capacidad de cambio de estado de las rutas 8BP. Esto ahorra tiempo a la rutina de impresión
  • la detección de colisión con las piezas de oro se hace cada 6 ciclos, al igual que la colisión con la puerta y la detección de pulsación de la tecla M para activar y desactivar la música. Esto ahorra operaciones por ciclo y es imposible que pases por encima de un oro y no lo cojas pues para atravesar completamente un oro hacen falta al menos 8 ciclos.

Gráficos y música
todos los gráficos, secuencias de animación, decorados, etc los he hecho con la herramienta SPEDIT que viene con 8BP. Es muy sencilla y esta escrita en BASIC, la puedes usar desde winape. En cuanto a la música la he hecho con el WYZtracker. El WYZplayer esta integrado dentro de la librería 8BP y para hacer sonar la música on-game basta con invocar el comando MUSIC de 8BP.

Hay mas cosas y detalles que podria contar pero para este post creo que es suficiente. No quiero "saturar" con demasiados detalles. He hablado algo sobre como están hechas "las tripas" del juego para que os hagáis una idea y me alegro de haber compartido este juego con todos vosotros.

Antes de despedirme, quiero también contaros dos novedades muy próximas:

  • 8BP v38 con algunas mejoras y un manual con "primeros pasos" mas fácil aun.
  • y un vídeo que voy a hacer de "primeros pasos" con 8BP, en el que veréis como en 10 minutos podéis hacer vuestro primer juego/demo usando 8BP, que tan solo requiere que tengáis instalado winape, nada mas.


Un abrazo y hasta pronto amigos! Os dejo con un video del juego









domingo, 20 de octubre de 2019

8BP estuvo en la RUN" AUA

hola amigos de 8 bits de poder

Asi es, 8BP estuvo en la RUN"" AUA, como no podía ser de otro modo. Hubo un gran despliegue de maquinas y buena gente con la que compartimos aficiones y un gran intercambio de información, ideas y pasión por los 8 bits

El lugar del evento estuvo muy bien escogido: espacioso y acogedor, con sala de exposiciones y sala de conferencias. Enhorabuena a los organizadores de AUA. Os estamos muy agradecidos.

El stand de 8BP incluyó una maquina arcade con un emulador de Amstrad donde toda la familia, grandes y pequeños pudieron disfrutar de los juegos de 8BP, incluido el extraordinario "ERIDU", que ya podéis descargar desde https://github.com/jjaranda13/8BP . También llevamos un CPC 464 con el nuevo sistema DES y el cartucho de 8BP con todos los juegos disponibles. Y por supuesto folletos, información, el fabuloso póster de SPACE PHANTOM y la preview del nuevo "Happy Monty"

El stand de 8BP

Al stand acudieron público de todas las edades y fue un excelente momento para unir a toda la familia en torno a un concepto universal: el videojuego. Vivimos juntos momentos de acción y peligro, de aventuras y dificultades, pero siempre entrañables
Un Amstrad no puede faltar en ninguna familia
En el stand se congregaron publico de todas las edades pero como los juegos de 8BP suelen ser conceptualmente sencillos y se entienden sin dificultad, el publico infantil destacó notablemente. Especial mención he de hacer al videojuego "frogger eterno", que todo los niños pedían, aunque el juego "ERIDU" tuvo tanto o mas éxito que frogger. El juego ERIDU fue jugado una y otra vez por todos los visitantes usando la maquina arcade y su mando profesional nos proporcionaba una jugabilidad increíble.
Gran afluencia de selecto público infantil
Ademas de videojugadores, muchos informáticos y gente con conocimientos avanzados acudieron al stand y tuvimos interesantes conversaciones sobre construcción de videojuegos. La librería 8BP no deja indiferente, viendo el catálogo de  juegos disponibles, era inevitable pensar el muchos posibles nuevos juegos y conversar sobre como se podrían construir. Durante la charla de 8BP pude inroducir muchos trucos y consejos que fueron devorados por los asistentes, un halago sin duda para este trabajo que con tanta pasión estamos llevando a cabo.
ilustres visitantes jugando a los juegos de 8BP
Durante la feria, algunos miembros de la AUA pudieron probar el juego "Happy Monty", aun en construcción pero que pronto vera la luz para disfrute de todos. un Juego en BASIC con 8BP que alcanza una velocidad endiablada de 25 FPS.
el nuevo juego "Happy Monty" en construcción
Una de las novedades presentadas por la AUA en la feria fue el nuevo DES con cartuchos estilo "gameboy advance" que permite crear cartuchos de bajo coste insertables en nuestro Amstrad para jugar de forma inmediata sin esperar la carga. En concreto pudimos ver el cartucho de 8BP con todos los juegos de 8BP en un menu, seleccionables y listos para disfrutar. Este formato tiene multiples ventajas, entre las que se encuentra la posibilidad de hacer juegos mas grandes, con muchas fases que no requieren esperar a cargar

El nuevo DES con el cartucho de 8BP
Junto con los amigos de AUA (https://auamstrad.es/) nos hicimos una foto de familia para recordar este gran encuentro. Todo buena gente, de lo mejor, os lo aseguro.
8BP y buenos amigos de la AUA
A la feria acudieron muchos nobles personajes de la escena y algunos buenos amigos, con los que nos inmortalizamos en una foto ( el buenazo de Javi y su mujer)

Fue un placer para mi compartir la charla de 8BP con todos los asistentes, la cual he subido al repositorio de 8BP en charla 8BP , Hubo una gran asistencia e interés, lo cual es una satisfacción para mi y me anima a seguir avanzando en esta librería 8BP, que le da vida a nuestro querido AMSTRAD

hasta pronto amigos!





domingo, 13 de octubre de 2019

Disponible version V37 de la libreria 8BP

hola amigos de 8 bits de poder

Ya esta disponible la versión v37 de 8BP,  disponible para descarga en https://github.com/jjaranda13/8BP la cual incorpora las siguientes mejoras:
  • comando |COLAY mas rápido y con un cambio en su paso de parámetros. ahora acepta 3,2,1 o ningún parámetro y el nuevo orden de los parámetros es |COLAY umbral,@col,sp . En caso de no usarse ningún parámetro, el comando tiene memoria y usa los de la ultima invocación. Esto permite un incremento notable de velocidad, pasando de 3.5 ms a 2.5 ms
  • se han acelerado unos cuantos comandos, (MOVER, MOVERALL y otros). Para ello se han modificado algunas partes de código ensamblador comunes a varios comandos
  • comando |COLSPALL mas potente. ahora puede ser invocado con un parámetro para especificar el colisionador inicial. Esto permite detectar varias colisiones por fotograma si es necesario. luego veremos como.
  • comando |ANIMALL ya solo se puede invocar mediante un parámetro en PRINTSPALL o mediante CALL pues se ha sacado de la lista para ganar algunos bytes de memoria. El comando normalmente solo se usa desde PRINTSPALL, de modo que no supone ningún problema
  • manual: he actualizado el manual reflejando los cambios en la librería y he incluido un apéndice con la correspondencia entre cada comando y su equivalente CALL. Además, el manual ha sido revisado y mejorado al completo, en especial el capítulo de lógicas masivas
La velocidad en general ha aumentado un poco en todos los comandos, los cuales unidos a la técnica de lógicas masivas nos permite hacer juegos en BASIC como el nuevo "Happy Monty". Es un juego aun en construcción que reproduce fielmente el funcionamiento del mítico mutant monty. Alcanza los 25 FPS y permite activar y desactivar la musica on-game. El juego es muy rápido y se mide a si mismo, mostrando los FPS alcanzados dentro de los marcadores del juego. 

Las colisiones funcionan como siempre (mecanismo de logicas masivas dentro del comando COLSPALL) pero se puede invocar usando como parametro el colisionador de la ultima colisión detectada y si se ejecuta hasta que no haya colisiones, puedes detectar todas las colisiones que sucedan en cada fotograma, aunque es algo que debe usarse solo si es necesario. 
Lo que acabo de contar se puede expresar asi:

colisionador=31
while colisionador<32
  COLSPALL, colisionador
  if colisionador <32 then GOSUB RUTINA
wend

Aqui teneis un video donde podéis ver como esta quedando. Pondré una demo del juego en la feria de la RUN" AUA (Rivas, Sábado dia 19) para que puedas probarla.


Cada nivel se ha construido usando 160 caracteres, apenas lo que ocupa un mensaje de twitter. En 4KB se han metido 25 pantallas y en realidad aun caben mas. Puede que le llegue a hacer 40 niveles.

Aprovecho para deciros que estaré en la RUN"" AUA que tendrá lugar en Rivas el sabado 19 de Octubre (en una semana) y alli contaré como usar la libreria 8BP y diversos trucos de programación usados en space phantom, eridu, frogger, happy monty...


la RUN"" AUA se celebra en la "casa grande ", un espacio ofrecido por el ayuntamiento de Rivas-Vaciamadrid. Teneis mas informacion en https://auamstrad.es/runaua2019/
el fabuloso emplazamiento donde tendrá lugar la RUN"" AUA
Además podreis ver el DES (Dandanator Entertaiment System" https://auamstrad.es/des/) con el cartucho de 8BP en acción, incluyendo el juego "Eridu", "frogger", "space phantom"... todos!!!





Nos vemos en Rivas el sábado día 19, amigos. Hasta pronto!!








domingo, 2 de junio de 2019

8 Bits de Poder estuvo en RetroMadrid Academy 2019

Hola amigos de 8 Bits de Poder

Allí estuve, en un ambiente formidable, intercambiando ideas y pasión con muchos de vosotros. El evento fue un éxito. No tan espectacular en volumen como RetroPixel de Malaga (algo dificil de igualar) pero con contenidos y ponentes de primer nivel y un público con muchisimos conocimientos y deseos de intercambiar ideas. Todas las conversaciones con los asistentes fueron interesantísimas. Os puedo asegurar que habia mucha pasión por los 8 bits, y por la cultura y valores que representan la informática clasica ( técnicas optimizadas de programación, control de la máquina y su hardware, intercambio de conocimientos, etc).


Tuve ocasión de charlar con Gabriel , Rodrigo, Fernando Saenz, Raul, Nacho y muchos otros, un ambiente insuperable. Quiero daros las gracias a todos los que os habeis currado la organización del evento, en un entorno sin parangón como es el CEU.

El imponente edificio del CEU


La imprecindible foto de familia :

Algo de la exposición, muy surtida, inluyendo DRAGON64, MSX, MSX2, AMSTRAD, SPECTRUM, ORIC ATMOS, COMMODORE 64, COMMODORE AMIGA, etc. He de decir que me encantó un videojuego de DRAGON, lástima que no recuerdo el nombre.Trataré de localizarlo.
Y sin duda la conversion de Jet-Pack (creada en 2014) para AMSTRAD me pareció perfecta. No habia jugado antes.



Los asistentes a la charla de 8BP pudieron conocer de primera mano como está construido el videojuego "Eridu: the space port", patrocinado por Amigos y Usuarios de Amstrad (https://auamstrad.es/)  y por ende como programar juegos de marcianos con scroll en general. Tambien estuvimos analizando cómo construir nuevos niveles en Eridu y hasta pudimos ver el resultado de un nuevo nivel, el nivel 5, del que os adjunto una foto al final de este artículo.


Todo fue grabado en video y estoy seguro que muy pronto podremos ver todas las charlas de Retromadrid academy online.
Tanto la presentación como la plantilla para diseñar niveles de ERIDU se encuentra en la carpeta de documentacion de 8BP, en https://github.com/jjaranda13/8BP
aqui teneis el enlace directo a la presentacion: presentacion 8BP y Eridu

La presentación incluye explicaciones de las partes del código fuente BASIC mas importantes del videojuego ERIDU, asi como la memoria que usa, sus graficos, etc.

El aula listo para despegue. No os miento si os digo que todos nos sentíamos a bordo de una nave espacial.


Hubo mucho intercambio de ideas al tratar la técnica de "logicas masivas", cuyos principios son aplicables a cualquier maquina y a cualquier  lenguaje de programación. Son principios sin los que los juegos 8BP no podrían funcionar, ya que recordemos que estan hechos en BASIC sin compilar.



Dentro de los contenidos de la presentacion pudimos analizar la historia "Prohibida" de la humanidad, de la que las tablillas sumerias nos han dejado constancia. Hablamos sobre los misteriosos datos que aportan, su tecnologia "imposible" y las evidencias de que la historia que nos han contado no es del todo correcta...



Con esta plantilla pudimos diseñar nuevos niveles e incorporarlos al juego

y aqui teneis el nivel 5 de Eridu, que vendrá incluido en el juego de serie (aun no lo he publicado pero lo haré muy pronto y podreis disfrutar de el)


¿cual será el proximo juego de 8BP? se aceptan sugerencias: estilo "time pilot"?, un juego de futbol? un estilo filmation? un plataformas de 40 pantallas? todo es posible y continuaré desarrollando juegos para todos.

Una vez más, quiero agradecer a todos lo que haceis posible estos eventos, tanto a organizadores como a público. Y gracias por vuestro interés y acogida

un abrazo!












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!




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!


domingo, 25 de septiembre de 2016

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

Hola amigos de 8 bits de poder

Ya esta disponible la versión V25 de la librería 8BP. Esta vez incluye dos interesantes y potentes funcionalidades: macrosecuencias de animación y un nuevo comando ROUTEALL. La librería sigue ocupando lo mismo, apenas 6KB. Librería y manual actualizado esta disponible en https://github.com/jjaranda13/8BP

  • Las macrosecuencias de animación permiten que un sprite cambie de secuencia de animación de un modo automático en función de su dirección (su Vy,Vx). Es muy útil porque nos permite ahorrar lógica en BASIC y por lo tanto aceleramos nuestro programa
  • El nuevo comando ROUTEALL es capaz de enrutar a los sprites por trayectorias definidas por usuario. En este caso la ventaja es tremenda, porque enrutar sprites en BASIC supone muchas instrucciones y un conocimiento profundo de la técnica de lógicas masivas. Con este comando, logras lo mismo e incluso mayor velocidad sin ser un experto en lógicas masivas.

Una “macrosecuencia” es una secuencia formada por secuencias. Cada una de las secuencias de animación constituyentes es la animación que hay que efectuar en una dirección concreta. De este modo, cuando animemos a un sprite con ANIMALL automáticamente cambiará su secuencia de animación sin que tengamos que hacer nada (en realidad no hace falta invocar a ANIMALL porque PRINTSPALL ya lo hace internamente si se lo indicamos en un parámetro).


las secuencias de animación se numeran de 1 a 31 y las macrosecuencias comienzan en la 32. Se definen de un modo muy sencillo, en el fichero de secuencias de tu juego (sequences_tujuego.asm), eso si, siguiendo un orden estricto. Es muy importante colocar las secuencias dentro de la macrosecuencia en el orden correcto, es decir, la primera secuencia debe ser para cuando el personaje está quieto, la siguiente para cuando va a la izquierda, la siguiente para la derecha, etc, siguiendo el siguiente orden (ten cuidado porque es fácil equivocarse):


por ejemplo:

_SEQUENCES_LIST
dw NAVE,0,0,0,0,0,0,0;1
dw JOE1,JOE2,0,0,0,0,0,0;2 UP JOE
dw JOE7,JOE8,0,0,0,0,0,0;3 DW JOE
dw JOE3,JOE4,0,0,0,0,0,0;4 R JOE
dw JOE5,JOE6,0,0,0,0,0,0;5 L JOE
_MACRO_SEQUENCES
;--------MACRO SECUENCIAS ----------------------
; son grupos de secuencias, una para cada direccion
; el significado es:
; still, left, right, up, up-left, up-right, down, down-left, down-right
; se numeran desde 32 en adelante
db 0,5,4,2,5,4,3,5,4;la secuencia 32 contiene las secuencias del soldado Joe

De esta manera los programas se simplifican porque no tienes que seleccionar la secuencia adecuada en función de la dirección de movimiento de cada sprite, sino que se hace automáticamente, ganando velocidad, y simplificando y clarificando más tu listado BASIC del juego

En segundo lugar tenemos el comando ROUTEALL. 
Simplifica muchísimo la programación porque puedes definir una trayectoria y hacer que un sprite la recorra paso a paso mediante el comando ROUTEALL.

Primeramente necesitas crear una ruta. Para ello necesitas editarla en el fichero routes_tujuego.asm.
Cada ruta posee un número indeterminado de segmentos y cada segmento tiene tres parámetros:
- Cuantos pasos vamos a dar en ese segmento
- Qué velocidad Vy se va a mantener durante el segmento
- Qué velocidad Vx se va a mantener durante el segmento
Al final de la especificación de segmentos debemos poner un cero para indicar que la ruta se ha terminado y que el sprite debe comenzar a recorrer la ruta desde el principio.
Veamos un ejemplo:

; 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; un circulo
;-----------------
db 5,2,0
db 5,2,-1
db 5,0,-1
db 5,-2,-1
db 5,-2,0
db 5,-2,1
db 5,0,1
db 5,2,1
db 0

Ahora para usar las rutas desde BASIC, simplemente asignamos la ruta a un sprite con el comando SETUPSP indicando que queremos modificar el parámetro 15, que es el que indica la ruta. Además, hay que activar el flag de ruta (bit 7) en el byte de status del sprite y le pondremos con el flag de movimiento automático y el de animación y el de impresión.


10 MEMORY 25999
11 ON BREAK GOSUB 280
20 MODE 0:INK 0,0
21 LOCATE 1,20:PRINT "comando |ROUTEALL y macrosecuencias de animacion"
30 CALL &6B78:DEFINT a-z
31 |SETLIMITS,0,80,0,200
40 FOR i=0 TO 31:|SETUPSP,i,0,0:NEXT
41 x=10
50 FOR i=1 TO 8
51 x=x+20:IF x>=80 THEN x=10:y=y+24
60 |SETUPSP,i,0,143: rem con esto activo el flag de ruta
70 |SETUPSP,i,7,2:|SETUPSP,i,7,33: rem macrosecuencia de animacion
71 |SETUPSP,i,15,3: rem asigno la ruta numero 3
80 |LOCATESP,i,30,70
81 REM |LOCATESP,i,200*RND,80*RND
82 FOR t=1 TO 10:|ROUTEALL:|AUTOALL,0:|PRINTSPALL,1,0:NEXT
91 NEXT
100 |AUTOALL,1:|PRINTSPALL,1,0: rem aqui AUTOALL ya invoca a ROUTEALL
120 GOTO 100
280 |MUSICOFF:MODE 1: INK 0,0:PEN 1

Ya lo tenemos todo. Esta técnica avanzada te va a simplificar la programación muchísimo con resultados espectaculares.
Como has visto, el comando no modifica las coordenadas de los sprites, de modo que deben ser movidos con AUTOALL e impresos (y animados) con PRINTSPALL. Es por ello que dispones de un parámetro opcional en |AUTOALL, de modo que AUTOALL,1 invoca internamente a ROUTEALL antes de mover el sprite, ahorrándote una invocación desde BASIC que siempre va a suponer un precioso milisegundo.

Y esto es todo. Espero que estas funcionalidades os sirvan de ayuda en la creación de vuestros fantásticos juegos

hasta la próxima!


miércoles, 23 de marzo de 2016

Anunnaki: nuevo videojuego realizado con 8BP

hola amigos de 8BP

Ya esta listo el nuevo videojuego "Anunnaki", realizado en BASIC con la libreria 8BP.
Este es un juego de arcade y hace un uso intensivo de la técnica de lógicas masivas.

Os podéis descargar el videojuego desde https://github.com/jjaranda13/8BP



El juego hace uso de la técnica de lógicas masivas para manejar hasta 30 sprites entre naves y disparos. Todo ha sido posible en BASIC. Además, se utilizan técnicas para simular scroll, descritas en el manual de 8BP (version v21) que podeis encontrar en github






Además, esta disponible la version V21 de la libreria 8BP en github y esta nueva versión incorpora

  • SETUPSP,5,Vy,Vx: con un solo comando ahora actualizamos la Vy y la Vx, ahorrando casi 3 milisegundos
  • STARS: comando mejorado, ahora realiza mejor el calculo cuando una estrella se sale por un limite y debe entrar por el lado opuesto
  • herramienta SPEDIT v5: ahora puedes "espejar" tus sprites sobre un eje central imaginario, una ayuda para dibujar sprites simetricos


  • explicación mas detallada de la tecnica de logicas masivas
  • nuevos consejos de programación eficiente en memoria y velocidad
  • código del videojuego anunnaki
  • nuevos consejos sobre como editar musica para no tener problemas