Hoje vou falar da coisa mais importante de um jogo das gerações antigas, o Sprite.
Para isso, vamos lembra que nossas medidas funcionam assim:
- A menor imagem num jogo é um Pixel (Picture Element) que é equivalente a um ponto na Tela.
- Um bloco de 8 pixels horizontal (linha X) por 8 pixels vertical (linha Y) chamamos de Tile, pensar que um Tile pode ser repetir na Tela várias vezes (é consolador para o desenvolvedor economizar seu esforço).
- Um Sprite é um grupo de Tiles que tem movimento na Tela. Geralmente eram os heróis, vilões e ferramentas e armas nos jogos 2D.
Conforme avançamos nos comandos, vou incluindo o Glossário dos 40 e poucos Comandos do BEX.
Vamos tentar desenhar uma Navinha, é o exemplo mais simples:
PARTE 1
Primeiro desenho uma nave qualquer com o SGTD. Para uma nave pequena, lembre de usar o Set Tile Width para 1x1 Tile (as setas vermelhas horizontal e vertical).
Após o desenho feito, clique nas opções Export Tile Data e Pallette Tile Data para colher os códigos. Este trecho não tem mistério. Aparecerá o código numa tela. Mantenha o Format Basic Escolha o tamanho do Tile a partir de 0 (1 único Tile significa escolher Start Tile e End Tile 0) depois o ícone de copiar (Copy Text Data Clipboard). Para a Paleta, clique no círculo de cores e clique em Generate Data, depois repita a operação, escolhendo o número de Paletas usadas, de 0 a 3. Só usaremos a Pallette 0:
Apareceu pra mim, os seguintes códigos :
Lembre de colocar o Label antes (usarei respectivamente paleta e navinha). Um detalhe importante é a primeira cor da Paleta ser o Branco ($0EEE) no SGTD, que vamos alterar aqui para transparente ($0000). Na prática, usamos 15 cores. Para inserir na memória do Mega Drive, usamos o comando Loadtiles <label>, <nº de tiles usados>, <posição da memória de vídeo onde ficará alocado>. Ficando Assim:
Loadtiles navinha,1,256
A posição 256 que iniciará. Pois de 0 a 255 ficam reservados à tabela ASCII. As cores serão registrada no comando Pallettes. Que é montado com os seguintes parâmetros: Pallettes <label>,<nº da paleta>, <nº das cores utilizáveis>. Fica mais ou menos assim:
Pallettes paleta,0,0,16
Os dados estarão salvos na Memória de Vídeo. Caso fosse uma imagem comum, tipo cenário, podiamos desenha-lo na tela com Drawtile. É montado com drawtile <endereço do tile>,<posição X na tela>,<posição Y na tela>. Para mim, ficou assim:
drawtile 256,20,20
Considerem que a posição da imagem renderizada é diferente da imagem que nos aparece na TV. A tela do Mega tem 40 Tiles na Horizontal (X) e 28 na Vertical (Y) O Sprite desenhado fica assim:
PARTE 1
Primeiro desenho uma nave qualquer com o SGTD. Para uma nave pequena, lembre de usar o Set Tile Width para 1x1 Tile (as setas vermelhas horizontal e vertical).
Após o desenho feito, clique nas opções Export Tile Data e Pallette Tile Data para colher os códigos. Este trecho não tem mistério. Aparecerá o código numa tela. Mantenha o Format Basic Escolha o tamanho do Tile a partir de 0 (1 único Tile significa escolher Start Tile e End Tile 0) depois o ícone de copiar (Copy Text Data Clipboard). Para a Paleta, clique no círculo de cores e clique em Generate Data, depois repita a operação, escolhendo o número de Paletas usadas, de 0 a 3. Só usaremos a Pallette 0:
Apareceu pra mim, os seguintes códigos :
DATAINT $0EEE,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0
DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
DATALONG $80000008 ' Tile: 0
DATALONG $87000078
DATALONG $87088078
DATALONG $878CC878
DATALONG $878CC878
DATALONG $87088078
DATALONG $87000078
DATALONG $80000008
DATALONG $00000000 ' Tile: 1
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 2
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 3
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
Loadtiles navinha,1,256
A posição 256 que iniciará. Pois de 0 a 255 ficam reservados à tabela ASCII. As cores serão registrada no comando Pallettes. Que é montado com os seguintes parâmetros: Pallettes <label>,<nº da paleta>, <nº das cores utilizáveis>. Fica mais ou menos assim:
Pallettes paleta,0,0,16
Os dados estarão salvos na Memória de Vídeo. Caso fosse uma imagem comum, tipo cenário, podiamos desenha-lo na tela com Drawtile. É montado com drawtile <endereço do tile>,<posição X na tela>,<posição Y na tela>. Para mim, ficou assim:
drawtile 256,20,20
Considerem que a posição da imagem renderizada é diferente da imagem que nos aparece na TV. A tela do Mega tem 40 Tiles na Horizontal (X) e 28 na Vertical (Y) O Sprite desenhado fica assim:
loadtiles navinha,1,256
pallettes paleta,0,0,16
drawtile 256,20,20
paleta:
DATAINT $0000,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0
DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
navinha:
DATALONG $80000008 ' Tile: 0
DATALONG $87000078
DATALONG $87088078
DATALONG $878CC878
DATALONG $878CC878
DATALONG $87088078
DATALONG $87000078
DATALONG $80000008
DATALONG $00000000 ' Tile: 1
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 2
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 3
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
Se apareceu uma navinha como a do Star Wars, parabéns, você conseguiu mais rápido que eu fazer algo. Minha sugestão é usar sua imaginação pra fazer Sprites e Tiles variados.
PARTE 2
Agora que criamos um Sprite, vamos situar uma posição pra ele. Para isso usaremos a Função addsprite que recebe dois parâmetros entre parênteses com Y e X. (altura,largura) é que desenhará no lugar do drawtile. Cuidado porque a maioria dos comandos é X e Y (eu fiquei dias errando isso depois de aprender). Também o comando propstrite que uso nome, a posição de memória e quantos serão. Ficando:
sprite_1=addsprite(4,4)
prosprite sprite_1,256,0
Agora, por que 256? Porque as posições 0 a 255 são reservadas à tabela ASCII (se usa-la aparecerá seus caracteres). O Mega Drive tem espaço entre 256 a 1343 posições.
PARTE 3
Agora, vamos dar um pouco de emoção, e por a Nave em movimento!
Criaremos um Loop de movimento com o Comando Movesprite.
do
movesprite sprite_1,128,128
x++
if x>448 then x=128
sleep 1
loop
Agora, entendendo o que fizemos. do e loop definem o laço de repetição. 128 é a posição da tela em que o sprite já é visível na Tela. O Operador X++, indica movimento x (horizontal) no sentido da Direita. O Comando If (Se) garante que o sprite saia de lado da tela e rapidamente volte pelo outro: Quando o movimento horizontal (x) ultrapassar (>) o limite da Tela direito (448), então (then) ele retorna ao início horizontal (128).
O comando Sleep controla a velocidade do movimento. O valor 1 é equivalente a 1/60. Enfim temos:
pallettes paleta,0,0,16
drawtile 256,20,20
sprite_1=addsprite(4,4)
prosprite sprite_1,256,0
do
movesprite sprite_1,128,128
x++
if x>448 then x=128
sleep 1
loop
DATAINT $0000,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0
DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
navinha:
DATALONG $80000008 ' Tile: 0
DATALONG $87000078
DATALONG $87088078
DATALONG $878CC878
DATALONG $878CC878
DATALONG $87088078
DATALONG $87000078
DATALONG $80000008
DATALONG $00000000 ' Tile: 1
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 2
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000 ' Tile: 3
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
DATALONG $00000000
Se a nave se move, então voilá! Caso não consiga, verifique se os espaços estão corretos. Você conseguirá mover a nave pro lado oposto caso troque X++ por X--. Até a próxima.
Loadtiles: Carrega os Tiles na memória de vídeo (VRAM).
DATALONG: Dados do Tipo Long. No caso, o conjunto de 8 códigos que forma o Tile.
Pallette: Carrega as paletas de Cores, além do comando Ink.
DATAINT: Dados do Tipo Integer. No caso, a Paleta de Cores de 0 a 3.
Drawtile: Desenha um Tile na tela em X e Y.
Propsprite: Define os Tiles e a paleta de cores de um Sprite.
Movesprite: Altera os locais de um Sprite em X e Y. Valores abaixo de 128 serão ocultos na tela.
Addsprite: função que cria um nov Sprite a ser exibido. Aqui em definido em Y e X, não o oposto.
Drawtile: Desenha um Tile na tela em X e Y.
Propsprite: Define os Tiles e a paleta de cores de um Sprite.
Movesprite: Altera os locais de um Sprite em X e Y. Valores abaixo de 128 serão ocultos na tela.
Addsprite: função que cria um nov Sprite a ser exibido. Aqui em definido em Y e X, não o oposto.