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.
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
Una respuesta a «Sprites en basic»
Muy buen artículo.