Esta pagina se ve mejor con JavaScript habilitado

GameBoy Dev05: Images

 ·  🎃 kr0m

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

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:

Si te ha gustado el artículo puedes invitarme a un RedBull aquí