Es recomendable la lectura de los artÃculos anteriores para comprender mejor el actual:
En este artÃculo aprenderemos a cargar imágenes en la GameBoy para ello debemos tener una imagen de ciertas dimensiones y generar los tiles y el mapeo de tiles de la propia imágen.
Primero instalamos la magnÃfica utilidad
img2gb
doc
, se trata de una herramienta escrita en Python.
pip install img2gb
Nos bajamos la imagen de ejemplo:
cd ~/GBDEV/code/
wget https://alfaexploit.com/images/gbdk/05/CyberPunkRaw.png -O CyberPunkRaw.png
wget https://alfaexploit.com/images/gbdk/05/CyberPunkRaw.png -O CyberPunkRaw.png
La redimensionamos a 160x144 pixels, resolución de la pantalla de la GameBoy:
convert CyberPunkRaw.png -resize 160x144! CyberPunk.png
Generamos el TileSet:
img2gb tileset --output-c-file=CyberPunkTiles.c --output-header-file=CyberPunkTiles.h --output-image=CyberPunkTiles.png --deduplicate CyberPunk.png
Generamos el TileMap:
img2gb tilemap --output-c-file=CyberPunkMap.c --output-header-file=CyberPunkMap.h CyberPunkTiles.png CyberPunk.png
Sacamos el número de Tiles:
grep TILESET_TILE_COUNT CyberPunkTiles.h
#define TILESET_TILE_COUNT 106
Sacamos las dimensiones del TileMap:
grep TILEMAP_ CyberPunkMap.h
#define TILEMAP_WIDTH 20
#define TILEMAP_HEIGHT 18
El código serÃa el siguiente:
vi 05.c
#include <gb/gb.h>
#include <stdio.h>
#include "CyberPunkTiles.c"
#include "CyberPunkMap.c"
void main(){
// grep TILESET_TILE_COUNT CyberPunkTiles.h
set_bkg_data(0, 106, TILESET);
// grep TILEMAP_ CyberPunkMap.h
set_bkg_tiles(0, 0, 20, 18, TILEMAP);
SHOW_BKG;
DISPLAY_ON;
while(1){
scroll_bkg(2,0);
delay(100);
}
}
Compilamos:
~/GBDEV/gbdk/bin/lcc 05.c -o 05.gb
Cargamos la ROM en el emulador y este es el resultado: