SPEDIT


Spedit (Simple Sprite Editor) es una herramienta que te va a permitir crear tus imágenes de personajes y enemigos y usarlos en tus programas BASIC. Al final de esta página he incluido un videotutorial para aprender paso a paso de un modo mas visual. 

Spedit está hecha en BASIC, y es muy sencilla, de modo que puedes modificarla para que haga cosas que no están contempladas y te interesen. Se ejecuta en el amstrad CPC, aunque esta pensada para que la utilices desde el emulador winape.

Lo primero que debes hacer es configurar winape para que la salida de la impresora la saque a un fichero. En este ejemplo he puesto la salida de la impresora al fichero printer5.txt


SPEDIT te permite “espejar” tu imagen para hacer el mismo muñeco caminando hacia la izquierda sin esfuerzo, basta con pulsar H (flip horizontal) y lo mismo se puede hacer en vertical.

Es fácil adaptar esta herramienta para que te permita editar en mode 1 si lo deseas. De hecho es tan sencillo como eliminar la línea de BASIC que establece el modo de pantalla. Como ves la herramienta no es del todo completa pero te permite hacer absolutamente todo lo que necesitas.


pantalla inicial de SPEDIT v09
pantalla de edicion de SPEDIT v09

Una vez que has definido tu muñeco, para extraer el código ensamblador deberás pulsar la “b”. Esto mandará a la impresora (al fichero que hayamos definido como salida) un texto como el siguiente, al que puedes añadir un nombre, yo le he llamado “SOLDADO_R1”

Una vez que has hecho el primer fotograma de tu soldado puedes dejar el trabajo y continuar otro día. Para partir del soldado que has dibujado y continuar retocándolo o bien modificarlo para construir otro fotograma, puedes ensamblar el soldado en la dirección 24000, quitando el ancho y el alto  . Una vez ensamblado desde winape, le dices a SPEDIT que vas a editar un sprite del mismo tamaño y una vez estés en la pantalla de edición pulsas “r”. El sprite se cargará desde la dirección 24000, que es donde lo has “ensamblado”

Gran parte del atractivo de un juego son sus sprites. No escatimes tiempo en esto, hazlo despacio y con gusto y tu juego parecerá mucho mejor.

Para saber en que dirección de memoria se ha ensamblado cada imagen, utiliza desde el menu de winape:
Assemble->symbols
Con ello veras una relacion de las etiquetas que has definido, como “SOLDADO_R1” y la dirección de memoria a partir de la cual se ha ensamblado.

Una vez que hayas hecho las diferentes fases de animación de tu soldado, puedes agruparlas en una “secuencia” de animación. Las secuencias de animación son listas de imágenes y no se definen con SPEDIT. Con SPEDIT simplemente editas los “fotogramas”. En un apartado posterior te explicaré como decirle a la librería 8BP que un conjunto de imágenes constituyen una secuencia de animación.

Las imágenes que vayas haciendo para tu juego ve guardándolas todas en un único fichero, que se titule “images_mijuego.asm”, por ejemplo. Dicho fichero comienza con una lista de imágenes que puedes referenciar en los comandos 8BP en BASIC con un índice, con independencia de la dirección en la que se ensamblen, por ejemplo:

IMAGE_LIST
; la primera imagen siempre se asignara al índice 16, la siguiente al 17 y asi sucesivamente
;----------------------------------------------------------------------------------------------
dw SOLDADO_R0; 16
dw SOLDADO_R1;17
dw SOLDADO_R2;18

Una vez que estén todas las imágenes hechas podrás ensamblar ese fichero en la dirección 33500 y lo salvarás en un fichero binario desde el Amstrad con el comando SAVE. Por ejemplo si has hecho 2500 bytes de imágenes, tras ensamblarlas en 33500 ejecuta desde el BASIC del CPC en el emulador:

    SAVE “sprites.bin”, b, 33500,2500

Con esto habrás salvado en disco tu fichero de imágenes, así como las descripciones de secuencias de animación de las que hablaremos más adelante. En este ejemplo he puesto una longitud de 2500 pero si has dibujado muchos sprites puede que tengas que poner hasta 8540. No te olvides de la letra “b”, que sirve para especificar que se trata de un fichero binario. Si no estás seguro de cuanto ocupan tus imágenes, pon lo máximo, que es 8540 bytes

MUY IMPORTANTE: asegúrate de no exceder los 8540 bytes de gráficos. Para ello comprueba donde se ha ensamblado la etiqueta “_FINGRAPH”, la cual debe ser inferior a 42040 (ya que 42040 – 33500 = 8540 bytes). Si se ensambla en una dirección superior entonces estás “machacando” direcciones que necesita el interprete BASIC y el ordenador podrá bloquearse. En caso de necesitar más memoria para gráficos deberás ensamblar los gráficos “extra“ en una zona de memoria no ocupada, por ejemplo en la 25000, y usar en tu programa un MEMORY 24999, reduciendo la memoria disponible para el BASIC

Si quieres salvar las imágenes y las secuencias de animación juntas (las secuencias se encuentran en la 33500) simplemente ejecuta

    SAVE “sprites.bin”, b, 33500,8540

Para cargar tus sprites en memoria RAM, simplemente ejecuta:

    LOAD “sprites.bin”


He creado este sencillo videotutorial para introducir en el uso de SPEDIT para crear sprites y usarlos en vuestros programas BASIC hechos con la librería 8BP
El audio en ocasiones es algo malo pero en general creo que puede ser aceptable, ya que una imagen vale mas que mil palabras. 
Nota importante: la versión actual de SPEDIT es v09 mientras que el video está grabado con una versión anterior, algunas diferencias con la versión actual son que por ejemplo para recargar un sprite hay que ensamblar en la 24000 mientras que en el video se hace en la &4000. Quizás edite un nuevo video sobre este tema



En el vídeo se explica como estructurar el juego en carpetas, como usar el emulador "winape" para sacar la salida del SPEDIT a un fichero, ensamblar la librería y los sprites y programar en BASIC vuestro juego, creando unas secuencias de animación con las direcciones en las que se han ensamblado las imágenes

Lo que es inevitable aprender para programar (siempre lo digo) es el significado de la palabra "ensamblar". Que a nadie le de fiebre, saber lo que es ensamblar no significa tener que saber programar en ensamblador.

Al final del vídeo se ensambla todo y se generan los ficheros del juego, de los sprites, la musica, todo




4 comentarios:

  1. Hola Jose Javier,

    Te quería comentar una cosa. Tengo los sprites guardados en el asm de imágenes y creadas dos secuencias con el numero 1 y 2 para desplazamiento a izquierda y derecha en el asm de secuencia, pero cómo puedo mostrar las secuencias en pantalla?. En el manual hay un mini código para manejar el sprite pero no consigo hacerlo funcionar. No sé que tengo que ensamblar (si el images.asm, el secuence.asm o el 8BP) o cambiar en el código para que cargue. Me podrías echar una mano. Gracias de antemano

    saludos

    ResponderEliminar
  2. hola amigo,

    voy a suponer que tienes descargada la 8bp v27, que es la que actualmente se encuentra en github.
    Segun indicas has creado dos secuencias con identificadores 1 y 2. Ahora quieres mostrarlas en pantalla.

    Para ello primero debes asociar una de esas secuencias a un sprite. Por ejemplo voy a usar el sprite 31
    |SETUPSP,31,7,1 asocia al sprite 31 la secuencia de animacion numero 1
    a continuación debes configurar el byte de status del sprite para que sea animado (bit 2). Tambien activamos el flag de impresion (bit 0), es decir status= &x00000101 = 5. lo haremos con |SETUPSP,31,0,5
    Colocamos el sprite en algun sitio : |LOCATESP,31,50,50
    A continuacion invocamos en bucle el comando |PRINTSPALL,0,1,0 . los p3 arametros le indican que no ordene los sprites, que los anime y que no sincronice con el barrido

    en resumen
    10 memory 25999
    20 call &6b78
    30 |SETUPSP,31,7,1
    40 |SETUPSP,31,0,5
    50 |LOCATESP,31,50,50
    60 |PRINTSPALL,0,1,0
    70 GOTO 60

    este ejemplo va a funcionar muy deprisa porque no hay instrucciones entre una impresión y la siguiente , de modo que es mejor que lo pruebes con |PRINTSPALL,0,1,1 para que espere a cada barrido a imprimir, es decir que te imprimirá un fotograma cada 20ms. En tu videojuego en ejecución tendrás muchas instrucciones y sincronizar con el barrido introducirá una demora, por lo que en general es mejor que no sincronices

    un saludo!!

    ResponderEliminar
  3. Hola Jose Javier

    gracias por responder tan rápido. Lo estoy probando y no consigo que cargue nada o me salen unas rayas muy raras jejeje. Entiendo que tengo que ensamblar la librería v27 antes de pone el basic para que pueda leerme los comandos no? He probado también con el SETUPSQ, previo ensamblado del fichero images y mirnado en symbols las posiciones de memoría. Pero tampoco oye...

    ResponderEliminar
    Respuestas
    1. antes de poder usar los comandos de 8BP debes ensamblar la libreria con make_all. De todos modos escribeme un mail a jjaranda13@gmail.com con los detalles de tu programa (incluso zipeamelo todo) y te ayudare mucho mejor, te ayudare a encontrar el problema. Verás que fácil es solucionarlo

      Eliminar