Categorías
Programación

Sprites en basic

Archivo.doc

Programa


1 Comprendiendo conceptos.

2 ¿Qué es un Sprite?.

3 screen 0.

4 screen 1.

5 screen 2.

5.1 Creando nuestro Sprite nave en screen 2,1.

5.2 Sobre el color de los sprites MSX 1.

5.3 Moviendo nuestro sprite nave en screen 2,1.

5.4 Creando nuestro personaje de 16×16 pixeles.

6. Screen 3.

7.Screen 4.

8.Screen 5.

8.1¿Un sprite con colores en 5,1 y 5,2?. 1

8.2 Creando muchos sprites, problema tamaño de strings

Comprendiendo conceptos

Lo primero es comprender que el msx solo entiende de tiles y sprites

Todos las direcciones de la memoria RAM deben de ser expresadas en sistema hexadecimal para una mejor compresión ya que el ordenador va leyendo byte a byte (ejemplo: 01010101) en la ram de manera secuencial o horizontal.

Es importante saber que la pantalla está dividida en 3 zonas asociadas a los “bancos 0,1 y 2”.

Para asignar el modo gráfico se pone screen modo_video, tamaño_sprites.

También hay que entender que solo se trata de volcar los datos en la parte de la VRAM que según el modo gráfico (o el screen) que hayas puesto está destinada a

screen 0 , screen 1, screen 2 , screen 3, screen 4, screen 5, scrren 6, screen 7 y screen 8. Siendo los más utilziados scree 2 y screen 5 en sus versiones de 16 bytes por tile.

Para todos los screens es posible ver las direcciones de las tablas poniendo base (del 10 al 19):

cosigo:

10 screen 2
20 input "teclea";a$
25 goto 30
30 'rutina ver modos gráficos de pantalla
    33 FOR i=0 TO 14 
    34 print "base("i") ";base(i)
    35 NEXT i
40 goto 20


¿Qué es un Sprite?

Un Sprite de 8x8px es esto:

¿Te das cuenta con el byte (los 8 bits) son la unidad básica de almacenamiento?

Con este trozo de código vamos a analizar las letras que están metidas en la tabla de sprites del modo screen 0 (ver siguiente apartado)

Vamos a analizar la letra z

0 'Vamos a analizar la z en minúscula'
1 numerosprit=122
2 print "Vamos a analizar la letra: ";chr$(numerosprit)
5 print "1 fila "; vpeek(base(2)+(numerosprit*8))
6 print "2 fila "; vpeek(base(2)+(numerosprit*8)+1)
7 print "3 fila "; vpeek(base(2)+(numerosprit*8)+2)
8 print "4 fila "; vpeek(base(2)+(numerosprit*8)+3)
9 print "5 fila "; vpeek(base(2)+(numerosprit*8)+4)
10 print "6 fila "; vpeek(base(2)+(numerosprit*8)+5)
11 print "7 fila "; vpeek(base(2)+(numerosprit*8)+6)
12 print "8 fila "; vpeek(base(2)+(numerosprit*8)+7)
13 print 
14 print "Ahora en binario"

15 print "1 fila "; bin$(vpeek(base(2)+(numerosprit*8)))
16 print "2 fila "; bin$(vpeek(base(2)+(numerosprit*8)+1))
17 print "3 fila "; bin$(vpeek(base(2)+(numerosprit*8)+2))
18 print "4 fila "; bin$(vpeek(base(2)+(numerosprit*8)+3))
19 print "5 fila "; bin$(vpeek(base(2)+(numerosprit*8)+4))
110 print "6 fila "; bin$(vpeek(base(2)+(numerosprit*8)+5))
111 print "7 fila "; bin$(vpeek(base(2)+(numerosprit*8)+6))
112 print "8 fila "; bin$(vpeek(base(2)+(numerosprit*8)+7))



Como se come los ceros vamos a arreglarlo un poco:

Vamos a cambiar la “z” minúscula por nuestro muñeco Sprite y ponemos print “zaragoza”

0 numerosprit=122

1 ' Vamos a sustituir la zeta por nuestro muñeco
2 vpoke base(2)+(numerosprit*8),24
3 vpoke base(2)+(numerosprit*8)+1,24
4 vpoke base(2)+(numerosprit*8)+2,36
5 vpoke base(2)+(numerosprit*8)+3,36
6 vpoke base(2)+(numerosprit*8)+4,36
7 vpoke base(2)+(numerosprit*8)+5,24
8 vpoke base(2)+(numerosprit*8)+6,24
9 vpoke base(2)+(numerosprit*8)+7,60

21 print "Vamos a analizar la letra: ";chr$(numerosprit)
15 print "1 fila "; vpeek(base(2)+(numerosprit*8))
16 print "2 fila "; vpeek(base(2)+(numerosprit*8)+1)
17 print "3 fila "; vpeek(base(2)+(numerosprit*8)+2)
18 print "4 fila "; vpeek(base(2)+(numerosprit*8)+3)
19 print "5 fila "; vpeek(base(2)+(numerosprit*8)+4)
110 print "6 fila "; vpeek(base(2)+(numerosprit*8)+5)
111 print "7 fila "; vpeek(base(2)+(numerosprit*8)+6)
112 print "8 fila "; vpeek(base(2)+(numerosprit*8)+7)
113 print 
114 print "Ahora en binario"

115 print "1 fila "; bin$(vpeek(base(2)+(numerosprit*8)))
116 print "2 fila "; bin$(vpeek(base(2)+(numerosprit*8)+1))
117 print "3 fila "; bin$(vpeek(base(2)+(numerosprit*8)+2))
118 print "4 fila "; bin$(vpeek(base(2)+(numerosprit*8)+3))
119 print "5 fila "; bin$(vpeek(base(2)+(numerosprit*8)+4))
120 print "6 fila "; bin$(vpeek(base(2)+(numerosprit*8)+5))
121 print "7 fila "; bin$(vpeek(base(2)+(numerosprit*8)+6))
122 print "8 fila "; bin$(vpeek(base(2)+(numerosprit*8)+7))

300 print

301 print "zaragoza"

screen 0

24 líneas, 32 columnas

Es posible ver las direcciones de las tablas poniendo print base (0) para la tabla mapa o nombre y print base (2) para la tabla patrones de sprites de letras

Dibujos de letras ascii

Con asc(letra) obtenemos la posición y con chr$(numero) obtenemos la letra.

En el apartado ¿Qué es un Sprite? está explicado todo lo necesario.

screen 1

Nos permite trabajar con colores de letras.

Para obtener las direcciones de las tablas podemos poner base(5) para la Tabla nombres o mapa, base(7) para la tabla patrones de Sprite y base(6) para la tabla color

En este caso la tabla quedaría dividida en 3 zonas

screen 2

El tamaño_sprite puede ser 0 (8x8px), 1 (8x8px ampliado), 2 (16×16 x), 3 (16x16px) ampliado

Es posible ver las direcciones de las tablas poniendo base (del 10 al 19):

256px de ancho * 192px de alto.

Como para definir cada tile necesitamos 8 bytes serán

256/8=32 filas y 192/8=24 columnas

14336 / h3800 -> 16383 / 3fff
(tamaño 2048 / h800)  
Tabla de patrones de sprites
En vasic base(14)
Aquí es donde se ponen los 8 bytes que componen tu sprite para definir su dibujo, con la ayuda de la “tabla atributos de sprites” llamaremos a este bloque y le podremos su posición en pantalla.
12288 / h3000 -> 14335 / h37ff
Tamaño: 2048 / h0800
Tabla color tiles banco 2
Aquí se definen los bloques de 8 bytes que definen el color de los tiles definidos en la “tabla tiles banco 2” la tabla que representa a la parte superior de la pantalla
10240 / h2800 -> 12287 / h2fff
Tamaño: 2048 / h0800
Tabla color tiles banco 1
Aquí se definen los bloques de 8 bytes que definen el color de los tiles definidos en la “tabla tiles banco 1” la tabla que representa a la parte central de la pantalla
8192 / h2000 ->10239 / h27ff
Tamaño: 2048/ h0800
Tabla color tiles banco 0
En basic base (11)
Aquí se definen los bloques de 8 bytes que definen el color de los tiles definidos en la “tabla tiles banco 0” la tabla que representa a la parte inferior de la pantalla
h1800 vacía
6912 /h1b00 -> 7039 / h1b7f
Tamaño 128 /h0080  
Tabla de atributos de Sprite (AOM)
En basic base(13)
Cada “atributo de Sprite” son 8 bytes que definen su bloque de 32 bits de la tabla “patrones de sprite”, su posición x, y, color (los colores del sprite no tienen nada que ver con los tiles)  
6144 / h1800 -> 6911 / h1aff
Tamaño 768 / h0300  
Tabla mapa o nombres de tiles
En basic base(10)
Aquí es donde se pone el bloque de bytes que corresponde con el tile definido en la tabla “tiles banco 0,1,2”
4096 / h1000 ->  6148 /h17ff
Tamaño: 2048 / h0800
Tabla tiles banco 2
Lo mismo que banco 0 y banco 1 pero para el banco 2
2048 / h0800 -> 4095 / h0fff
Tamaño: 2048 /h0800
Tabla tiles banco 1
Lo mismo que el tiles banco 0 pero para el banco 1
0 / h0000 -> 2047 / h07ff
Tamaño: 2048/h0800
Tabla tiles banco 0
En basic base(12)
Aquí se definen los bloques de 8 bytes que definen 1 tile para la parte superior de la pantalla de las 3 partes que tiene la pantalla (ejemplo 1) Este tile estará relacionado con los 8 bytes del “Color tiles banco 0” y con la “tabla mapa”  

Otra forma de ver la memoria VRAM es esta:

Creando nuestro Sprite nave en screen 2,1

Abrimos el programa “spriyeSX devtool” y creamos un nuevo Sprite de 8×8 monocolor:

Como puedes ver los 2 primeros bytes correponden a las filas 1 y 2 porque tienen 1 cero.

Tenemos que saber que para manejar los sprites en basic tenemos 34comandos:

1.sprite$(numero_plano_o_sprite): Aquí asignaremos nuestros 8 bytes en la “tabla patrones de sprites”

2.put sprite entero_numero_plano_o_sprite, (posición_x, posición_y), color

3.on Sprite gosub numero_linea: cuando chocan 2 sprites se irtá a la subrutina indicada en numero_linea

4.sprite on/off/stop: activa o desactiva las interrupciones de los sprites

1 ' Programa 


1 'Inicializando'
1 ' Lo 1 es definir el color de caracteres 15 blanco, fondo 4 azul y margen 7 azul celeste
10 color 15,4,7
1 'Lo 2 es comfigurar la pantalla con screen modo_video, tamaño_sprites'
1 'el tamaño_sprite puede ser 0 (8x8px), 1 (8x8px ampliado), 2 (16x16 x), 3 (16x16px) ampliado'
20 screen 2,1


1 ' Definiendo nuestro sprite'
115 for i=1 to 8
    120 read a
    1 'chr determina el caracter que corresponde a (argumento) y se irán cocatenado
    125 sp$=sp$+chr$(a)
130 next i
1 'Aquí le estamos poniendo en el sprite o plano 0 e la "tabla patrones de sprites" los bytes de nuestra nave'
135 sprite$(0)=sp$
1 'Aquí le estamos poniendo en la "Tabla atributos de sprite' el plano o sprite 0, la posicion, el color y el sprite
140 put sprite 0,(100,100),15,0
145 goto 145

1000 DATA &h000,&h000,&h018,&h03C,&h066,&h07E,&h05A,&h000


Sobre el color de los sprites MSX 1

No podemos hacer esto en screen 2,1, ni screen 2,2 (MSX1) por la codificación y el ahorro de memoria que se hizo entonces:

Esto es solo para MSX 2 y para las tiles de MSX 1 y 2.

El color ya viene en su definición dentro de la tabla de patrones de sprites y como utilizamos 1 byte para esto solo podemos direccionar 16 posiciones.

Moviendo nuestro sprite nave en screen 2,1

1 ' Programa 

1 '------------------------'
1 '     Inicializando'
1 '------------------------'
1 ' Brramos la pantalla'
5 cls
1 ' Lo 1 es definir el color de caracteres 15 blanco, fondo 4 azul y margen 7 azul celeste
10 color 15,4,7
1 ' Lo 2 es comfigurar la pantalla con screen modo_video, tamaño_sprites'
1 ' el tamaño_sprite puede ser 0 (8x8px), 1 (8x8px ampliado), 2 (16x16 x), 3 (16x16px) ampliado'
20 screen 2,1
1 ' Desactivamos el sonido de las teclas
30 key off
40 let k$=""
50 let px=100: let py=100

1 '------------------------'
1 '       main'
1 '------------------------'
1 'Llamamos a la subrutina para poner nuestro sprite en la tabla patrones de sprite'
100 gosub 1000
1 'llamamos a la subrutina para capturar el teclado'
200 gosub 2000
1 'Llamamos a la subrutina actualizar sprite personaje'
300 gosub 3000
1 ' El goto es como una especie de while para que vuelva  capturar el teclado y dibujar'
400 goto 200

1 '------------------------'
1000 'Subrutina definiendo nuestro sprite'
1 '------------------------'
1110 for i=1 to 8
    1 'Aquí le indicamos que los datos de read a se encuentra en la linea 1150'
    1115 'restore 1150
    1120 read a
    1 'chr determina el caracter que corresponde a (argumento) y se irán cocatenado
    1125 sp$=sp$+chr$(a)
1130 next i
1 'Aquí le estamos poniendo en el sprite o plano 0 e la "tabla patrones de sprites" los bytes de nuestra nave'
1135 sprite$(0)=sp$
1150 DATA &h000,&h000,&h018,&h03C,&h066,&h07E,&h05A,&h000
1200 return

1 '------------------------'
2000 'Subrutina de captura de teclado'
1 '------------------------'
2010 k$=inkey$
2020 if k$="o" then px=px-1
2030 if k$="p" then px=px+1
2040 return

1 '------------------------'
3000 'Subrutina actualizar personajes'
1 '------------------------'
1 'Aquí le estamos poniendo en la "Tabla atributos de sprite' el plano o sprite 0, la posicion, el color y el sprite, nuestra nave
3020 put sprite 0,(px,py),15,0
3040 return

10000 end

Creando nuestro personaje de 16×16 pixeles

En este ejemplo como en el modo screen 2,1 los sprites solo pueden tener un solo color.

Con esta técnica multiplicamos por 4 nuestro sprite para que se ve más grande

Abrimos el programa spriteSX devtool y pintamos esto:

Pincamos en el botón “Generate data” y elegimos la configuración que se muestra, por utlyimo pinchamos en el “botón get data!” y copiamos el contenido:


10 cls:screen 2,2
20 gosub 100
90 goto 90

1' Creando los sprites en screen 2,2
1' Rellenamos la tabla tiles 
    100 for i=1 to 32
        105 read a
        110 s0$=s0$+chr$(a)
    115 next i
    120 sprite$(0)=s0$
    125 put sprite 0,(100,100),15,0
    
    130 REM 16x16
    140 REM SPRITE DATA
    150 DATA &H00,&H00,&H00,&H00,&H78,&H18,&H5F,&H7F
    160 DATA &H5F,&H07,&H0F,&H1E,&H00,&H00,&H00,&H00
    170 DATA &H00,&H00,&H00,&H00,&H00,&H00,&HF0,&HCE
    180 DATA &HF8,&H80,&H00,&H00,&H00,&H00,&H00,&H00

399 return


Screen 3

Screen 4

Resolución 256×192

Colores 16

Son también dibujitos de tiles

Screen 5

Así quedaría distribuida la memoria VRAM es este screen:

Es muy importante entender que nos sobra mucho espacio en una VRAM de 128Kb por eso vamos a crear “paginas”:

Una vez entendida y estudiada la tabla, quédate con estas cosas:

Los sprites son multicolor pero por cada línea se puede tener solo 1 único color.

Resolución 256×192/212/424

Cada byte son 2 píxeles, en los otros modos inferiores cada byte era la línea de un cuadradito de 8 pixeles.

Podemos redefinir la paleta de colores 256 tonalidades que se pueden asignar a cada una de las 16 posiciones de la paleta.

Los registros del 0-9 son de solo lectura.

Los registros de 0-23 y de 32-46 son de solo escritura

8 sprites por línea máximo

64 definiciones de patrones de sprites, se pueden mostrar hasta 32 sprites

En basic estas tablas no nos importan en su lugar utilizamos 3 comandos:

1.Para la table de patrones de sprite: sprite$(numero_sprite)=”cadena_obtenida_con_la_suma_de_cadenas_chr(entero)”

2.para la table de atributos de sprite: put sprite entero_spite,(posicion_x,posición_y),no_se_utilza,numero_de_plano

3. Para la tabla colores sprites: color Sprite$(numero_sprite)= ”cadena_obtenida_con_la_suma_de_cadenas_chr(entero)”

¿Un sprite con colores en 5,1 y 5,2?

Recordáis que para definir un Sprite poníamos 0 y 1 en la “tabla patrones de sprite” según si queríamos ver el color de fondo o el frontal definidos en la tabla color sprites…pues aquí son para si los quieres mostrar o no (no hagáis caso de los colores):

Pero ahora se ha creado una tabla para la definición del color, pero todavía tiene restricciones de espacio, solo se puede definir un color por cada línea roja señalada (ver siguiente dibujo), los 3 primeros bites son para el color. El 4 no se usa,el 5 para detectar colosisiones con otros sprites,  el 6 para mezclar colores, el 7 para hacerlo desaparecer por la izquierda, esta es la codificación que se diseñó:

En screen 5 en los sprites en cada línea tan solo podemos definir un color (en el modo screen 2 eran 2 colores por línea) .Para hacer Sprites mas chulos tienes que crear 2 sprites con la misma posición.

Vamos a ello, abrimos el spritedevtool y creamos esto o algo parecido:

Al pinchar en Generate data (1), Pon los valores para basic (2) y por ultimo pincha en get data!! (3):

El código debe de quedar así:

5  color 15,1,1
10 cls:screen 5,2
20 gosub 100
90 goto 90 

1' Creando los sprites en screen 5,2

    1' Sprite 0 plano 1 sombra amarilla
    1' Rellenamos la tabla tiles sprite 0 
    100 for i=1 to 32
        105 read a
        110 s0$=s0$+chr$(a)
    115 next i
    120 sprite$(0)=s0$
    125 put sprite 0,(100,100),1,0
    
    130 DATA &H00,&H00,&H00,&H03,&H03,&H03,&H00,&H07
    135 DATA &H07,&H06,&H00,&H06,&H00,&H00,&H00,&H00
    140 DATA &H00,&H00,&H00,&H80,&HC0,&H00,&H00,&H00
    145 DATA &H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00
    
    1' Rellenamos la tabla de colores del sprite 0 
    150 for i=1 to 16
        155 read a
        160 sc0$=sc0$+chr$(a)
    165 next i
    170 color sprite$(0)=sc0$
  
    180 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    185 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04

    1' sprite 1 plano 2 del sprite 0 sombra azul
    1' Rellenamos la tabla tiles sprite 1
    200 for i=1 to 32

        205 read b
        210 s1$=s1$+chr$(b)
    215 next i
    220 sprite$(1)=s1$
    225 put sprite 1,(100,100),1,1
    
    230 DATA &H00,&H07,&H0F,&H0E,&H0E,&H0C,&H03,&H08
    235 DATA &H08,&H09,&H0F,&H09,&H0F,&H0D,&H09,&H0E
    240 DATA &H00,&HC0,&HC0,&H80,&H40,&H80,&H00,&H80
    245 DATA &H80,&H00,&H80,&H00,&H00,&H80,&HC0,&H00  
    
    1' Rellenamos la tabla de colores del sprite 1
    250 for i=1 to 16
        255 read b
        260 sc1$=sc1$+chr$(b)
    265 next i
    270 color sprite$(1)=sc1$
    
    275 DATA &H0F,&H05,&H05,&H05,&H0C,&H05,&H05,&H07
    280 DATA &H07,&H05,&H05,&H05,&H05,&H05,&H05,&H04
399 return



a

Como podemos comprobar hemos combinados varios colores en un mismo dibujo.

Hay una técnica llamada “Or” que mezcla los colores utilizando el 6 bit en la definición del color, aquí tienes más información: https://www.msx.org/wiki/The_OR_Color, esta es la forma utilizada por konami en sus juegos como metal gear.

Creando muchos sprites, problema tamaño de strings

Como sabes los sprites son definiciones de bloques de 32 bytes cada bloque y 16 bytes de color para cada bloque, si queremos crear por ejemplo unos 4 sprites, lo más sencillo es pensar en esto:


10 screen 5,2
20 color 15,1,1
30 gosub 10000
40 goto 40

1 '-----------------------------------------------------------------'
1 '---------------------Player rutines------------------------------'
1 '-----------------------------------------------------------------'

1 '------------------------'
10000 'Subrutina definiendo nuestro sprite'
1 '------------------------'
    1' Sprite 0 caza mirando a la derecha
    1 'Aquí le estamos definiendo el sprite 0 en la "tabla patrones de sprites" '
    10010 for i=1 to 32
        10020 read a
        10030 s0$=s0$+chr$(a)
    10040 next i
    10050 sprite$(0)=s0$
    
    10060 data 0,0,0,32,32,48,56,31
    10070 data 63,63,7,7,63,0,0,0
    10080 data 0,0,0,0,0,0,56,252
    10090 data 255,240,224,192,192,0,0,0
   
    1 ' Sprite 1 caza linea
    10110 for i=1 to 32
        10120 read a
        10130 s1$=s1$+chr$(a)
    10140 next i
    10150 sprite$(1)=s1$

    10160 data 0,0,0,0,0,0,0,255
    10170 data 255,0,0,0,0,0,0,0
    10180 data 0,0,0,0,0,0,0,255
    10190 data 255,0,0,0,0,0,0,0
  
    1 ' Sprite 2 caza con las alas desplegadas
    10200 for i=1 to 32
        10210 read a
        10220 s2$=s2$+chr$(a)
    10230 next i
    10240 sprite$(2)=s2$
 
    10250 data 63,31,14,15,3,3,7,127
    10260 data 127,7,3,7,15,14,31,63
    10270 data 192,0,0,0,128,128,240,255
    10280 data 248,240,128,128,0,0,0,192

    1 ' Sprite 3 caza con las alas plegadas
    10300 for i=1 to 32
        10310 read a
        10320 s3$=s3$+chr$(a)
    10330 next i
    10340 sprite$(3)=s3$
  
    10350 data 0,0,0,0,0,63,7,127
    10360 data 127,7,63,0,0,0,0,0
    10370 data 0,0,0,0,0,192,240,255
    10380 data 248,240,192,0,0,0,0,0

    1' Rellenamos la tabla de colores del sprite 0 
    10400 for i=1 to 16
        10410 read a
        10420 sc0$=sc0$+chr$(a)
    10430 next i
    10440 color sprite$(0)=sc0$
  
    10450 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10460 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04

    10500 for i=1 to 16
        10510 read a
        10520 sc1$=sc1$+chr$(a)
    10530 next i
    10540 color sprite$(1)=sc1$
  
    10550 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10560 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04
    
    10600 'for i=1 to 16
        10610 'read b
        10620 'sc2$=sc2$+chr$(b)
    10630 'next i
    10640 'color sprite$(2)=sc2$
  
    10650 'DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10660 'DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04

    1' Mostramos nuestro sprite
    10900 put sprite 0,(100,100),,0

10990 return

19999 end



Si descomentamos las últimas líneas nos dará un error de que no tenemos más espacio para crear strings:

Para solucionar este problema tendremos que acceder directamente a las direcciones de memoria VRAM y pasar del sprite$(entero) y del color sperite$(entero) y así funcionaría sin problemas



10 screen 5,2
20 color 15,1,1
30 gosub 10000
40 goto 40

1 '-----------------------------------------------------------------'
1 '---------------------Player rutines------------------------------'
1 '-----------------------------------------------------------------'

1 '------------------------'
10000 'Subrutina definiendo nuestro sprite'
1 '------------------------'
    
    1 'Aquí le estamos definiendo el sprite 0 en la "tabla patrones de sprites" '
    1' El -1 es porque el bucle debe el 0 también se cuenta en el bucle
    10005 s=base(29)
    10010 for i=0 to (32*4)-1
        10020 read a
        10030 vpoke s+i,a
    10040 next i
    1' Sprite 0 caza mirando a la derecha
    10060 data 0,0,0,32,32,48,56,31
    10070 data 63,63,7,7,63,0,0,0
    10080 data 0,0,0,0,0,0,56,252
    10090 data 255,240,224,192,192,0,0,0 
    1 ' Sprite 1 raya
    10160 data 0,0,0,0,0,0,0,255
    10170 data 255,0,0,0,0,0,0,0
    10180 data 0,0,0,0,0,0,0,255
    10190 data 255,0,0,0,0,0,0,0
    1 ' Sprite 2 caza con las alas desplegadas
    10250 data 63,31,14,15,3,3,7,127
    10260 data 127,7,3,7,15,14,31,63
    10270 data 192,0,0,0,128,128,240,255
    10280 data 248,240,128,128,0,0,0,192
    1 ' Sprite 3 caza con las alas plegadas
    10350 data 0,0,0,0,0,63,7,127
    10360 data 127,7,63,0,0,0,0,0
    10370 data 0,0,0,0,0,192,240,255
    10380 data 248,240,192,0,0,0,0,0

    1' Rellenamos la tabla de colores del sprite 0 
    10500 for i=0 to (16*4)-1
        10510 read a
        10520 vpoke &h7400+i, a
    10530 next i

    1' color Sprite 0 caza mirando a la derecha
    10540 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10550 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04
    1 ' Sprite 1 raya
    10560 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10570 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04
    1 ' Sprite 2 caza con las alas desplegadas
    10580 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10590 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04
    1 ' Sprite 3 caza con las alas plegadas
    10600 DATA &H0F,&H05,&H0A,&H0A,&H0B,&H0B,&H05,&H0B
    10610 DATA &H0B,&H0B,&H05,&H0B,&H05,&H05,&H05,&H04

    1' Mostramos nuestro sprite
    10900 put sprite ,(100,100),,3

10990 return

19999 end


1 respuesta a «Sprites en basic»

Deja una respuesta

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