Crea tus Juegos con 8BPCursos

8BP: CREANDO un JUEGO PASO a PASO

4.9
(19)

Por fin a llegado el momento de empezar tu primer juego, y para ello, lo primero que debemos hacer es crear la estructura de directorios para los distintos tipos de archivo.

rutas avanzadas

Pero espera… ¿Es posible que no sepas nada de 8 Bits de Poder? Puedes leer el primer artículo del curso de programación en Amstrad CPC de 8BP.

⭐⭐⭐⭐⭐

Aunque es perfectamente posible meterlo todo en el mismo directorio y trabajar sin carpetas, es mas “limpio” a la hora de programar tu juego que estructures los diferentes ficheros en siete carpetas o directorios, en función del tipo de fichero del que se trata, tal como puedes ver a continuación.

Estructura de directorios de tu proyecto en 8BP

Estructura de directorios de tu proyecto en 8BP
  • ASM: aquí meterás archivos de texto escritos en ensamblador (.asm), como es la propia librería 8BP, los sprites generados con el editor de sprites SPEDIT, y algunos ficheros auxiliares.
  • BASIC: aquí meterás tu juego y utilidades como el SPEDIT y el cargador (Loader).
  • Dsk: aquí meterás el archivo .dsk listo para ejecutar en un Amstrad CPC. En su interior deberás ubicar 5 ficheros de los que hablaremos en el siguiente apartado
  • Music: con el secuenciador de música WYZtracker, podrás crear tus canciones y almacenarlas en formato .wyz en este directorio. Una vez que las “exportes”, se generarán un archivo .asm que tendrás que guardar en la carpeta ASM y un archivo binario que también almacenarás en la carpeta ASM (también los puedes dejar en esta carpeta, con tal de que los referencies adecuadamente en el fichero make_musica.asm del directorio ASM).
  • Output_spedit: en esta carpeta puedes almacenar el fichero de texto que genera spedit. SPEDIT lo que hace es mandar a la impresora los sprites en formato ensamblador y el emulador winape puede recoger la salida de la impresora del Amstrad en un fichero. Aquí lo ubicaremos
  • Tape: aquí puedes almacenar el fichero .wav si deseas hacer una cinta para cargar en el Amstrad CPC464, o el fichero .cdt
massive-logics

Tu juego en 6 ficheros con 8BP

En este apartado describiremos los pasos que debes dar para crear los archivos necesarios para tu juego en ASM, así como los Basic de el juego y el cargador. No es algo secuencial, puedes ir haciendo gráficos a medida que programas y de igual modo con las músicas. No te preocupes si ahora no entiendes exactamente cada paso ya que irás comprendiendo lo que significan con precisión según vamos avanzando.

Por ahora lo importante es que tu juego se debe componer de 6 ficheros: 4 ficheros binarios y 2 ficheros BASIC. Existe la posibilidad de compactar todos los ficheros binarios en uno solo, más adelante te explicaré como se hace esta simplificación si así prefieres hacerlo, aunque no te recomiendo hacerlo de ese modo por motivos que mas adelante te explicaré.

Los cuatro ficheros binarios son:

  • Librería 8BP (es un fichero binario), incluye la tabla de atributos de sprites.
  • Fichero binario de música con las melodías e instrumentos de tu juego.
  • Fichero binario de imágenes de sprites, incluyendo la tabla de secuencias de animación y el alfabeto para el comando PRINTAT.
  • Opcionalmente, si tu juego usa scroll y posee un mapa del mundo predefinido o si usa layout y tiene un layout predefinido, necesitarás un fichero de mapa de ese mundo (500 bytes a partir de la dirección 42040). Yo recomiendo utilizar 1KB desde la 23000 hasta la 24000, para almacenar todas las fases (mapas) del juego, y cada vez que entras en una fase cargas en la dirección 42040 el mapa correspondiente haciendo PEEK y POKE, o bien usas |UMAP para actualizar el mapa. Es decir, que mi fichero de mapa lo construyo en la dirección 23000 y ocupa 1000 bytes, aunque es solo una recomendación.

Y dos ficheros BASIC:

  • Cargador (carga la librería, música y sprites y por último tu juego). Si además deseas hacer una pantalla de presentación que se muestre mientras se carga el juego, será lo primero que cargue este cargador
  • Programa BASIC (tu juego).

!!! Es el momento de CREAR los ficheros para tu JUEGO ¡¡¡

Fichero de SPRITES

  • Editar gráficos con SPEDIT.
  • Ensamblar los gráficos con winape.
  • Salvar los gráficos con el comando SAVE “sprites.bin”, b, 33600, <tamaño> ( Si desconoces el tamaño, usa lo máximo 8440)
SAVE “sprites.bin”, b, 33600, <tamaño>

Fichero de MUSICA

  • Editar la música con WYZtracker u otro tracker con el que estés familiarizado.
  • Ensamblar la música con Winape. Las melodías se ensamblarán una detrás de otra, de modo que cada una comenzará en una dirección de memoria diferente que dependerá del tamaño que ocupen.
  • Salvar la música con el comando SAVE “music.bin”, b, 32200, 1400
 SAVE “music.bin”, b, 32200, 1400

Fichero 8BP

Re-ensamblar la librería 8BP, de modo que la parte de la librería que selecciona las melodías (el player wyz) pueda conocer en que direcciones de memoria se han ensamblado (hay más dependencias, pero esa es una de ellas). Una vez re-ensamblada, tendrás que salvarla con el comando:

SAVE “8BP.LIB”, b, 24000, 8200, &6b78

Esta será una versión de la librería específica para tu juego. Por ejemplo, el comando |MUSIC,3,6 hará sonar la melodía número 3 que tú mismo has compuesto. La melodía número 3 puede ser completamente diferente en otro juego.

Fichero Cargador o Loader

Cargar todo con un loader, que deberás hacer en BASIC. Por ejemplo:

10 MEMORY 2399915: LOAD "!pant.scr",&c000: REM esto solo si tu juego tiene pantalla de carga a
20 LOAD "!8bp.lib"
30 LOAD "!music.bin"
40 LOAD "!sprites.bin"
45 LOAD "!map.bin": REM esto solo si tu juego tiene un mapa
50 RUN "!tujuego.bas"

En el ejemplo que acabas de ver he puesto una carga de pantalla inicial en la dirección inicial de memoria de pantalla (&C000). Al final de este manual encontraras una de las muchas formas de hacer una pantalla de carga. Es algo opcional. Puedes hacer un juego con pantalla de carga o sin ella.

Fichero de JUEGO

Programar tu juego, el cual debe primeramente ejecutar la llamada para instalar los comandos RSX, es decir CALL &6b78. Y algo muy importante: no te olvides de incluir MEMORY 23999 al principio, para evitar que el BASIC en ejecución guarde variables por encima de la dirección 24000, que es donde comienza 8BP.

curso-8bp
Editor de WinAPE

Tu juego lo puedes programar usando el editor de Winape, mucho más versátil que el editor del AMSTRAD CPC y sirve tanto para editar ensamblador (.asm) como para editar BASIC (.bas).

El editor de Winape es sensible a las palabras clave del lenguaje de programación, cambiándolas de color automáticamente, facilitando con ello la labor de programar.

Tras escribir un programa BASIC hay que copiar/pegar en la ventana del CPC del winape. Para hacerlo más rápido puedes activar la opción “High Speed” de winape durante el pegado, de ese modo ese proceso será inmediato.

Opcionalmente puedes compilar tu juego con una herramienta llamada fabacom y usar la versión compilada, pero no es necesario, ya que con 8BP tus juegos funcionarán muy rápido.

Descubre 8BP

Método abreviado: solo 3 ficheros.

Existe una forma mas compacta de generar tu juego. Se trata de almacenar todos los binarios juntos en un solo fichero, asi:

SAVE “tujuego.bin”,b,24000, 18540, &6b78

Siendo la logitud la dirección final menos la inicial. La dirección final incluyendo música y graficos y el mapa, es 42540, de modo que la longitud es 42540-24000 =18540. Si además quieres incluir el banco de estrellas (que por defecto las he pre-generado aleatoriamente) entonces la longitud son 80 bytes adicionales.

SAVE “tujuego.bin”,b,24000, 18620, &6b78

Y el segundo fichero es tu juego basic:

SAVE “tujuego.bas”

El cargador simplemente será:

10 MEMORY 23999
15 LOAD "!pant.scr",&c000: 'solo si tu juego tiene pantalla de carga
20 LOAD "tujuego.bin"
50 RUN "!tujuego.bas"

Este método “abreviado” es útil sobre todo si ocupas casi toda la memoria disponible para gráficos. En juegos de cassete cargar 18KB puede llevar un tiempo considerable y si no usas los 8.5KB de gráficos, quizás sea mejor que cargues por separado los distintos ficheros y así ahorres tiempo de carga.

Por ejemplo, si usas solo 2KB de gráficos, con el método abreviado cargarías 8.5KB de gráficos, es decir 6.5KB extra vacíos. Esto en tiempo de carga en cinta pueden suponer casi dos minutos extra de tiempo. En disco da lo mismo porque la diferencia es inapreciable, pero deberemos tener en cuenta el soporte si deseamos una carga del juego eficiente.

🕹️

En la siguiente entrega veremos COMO crear una CINTA o DISCO con tu JUEGO, para así poder hacer un volcado físico y poder probarlo en la maquina real.

Hasta aquí hemos llegado por hoy con el curso de programación en Amstrad CPC de 8 bits de poder Si tienes alguna duda puedes escribir en comentarios y te contestaré lo antes posible.

Todos los recursos, como manuales, ejemplos y juegos compilados de este curso los puedes encontrar en el repositorio Github de 8BP.

Hasta la semana que viene amigos 😄

¿Te ha Resultado útil este artículo?

Ayúdanos a mejorar y danos tu opinión:

Mostrar más

6 comentarios

    1. Si, de hecho puedes mezclar binarios y basic facilmente. 8bp incluso te proporciona un wrapper de todas sus funciones para que las uses desde C , creando un binario e invocandolo desde basic. Puedes usar 8bp desde basic, desde c y desde ambos de forma combinada

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Mira también
Cerrar
Botón volver arriba