feat: implement 16-variant autotiling inspired by the AI mockup
This commit is contained in:
+11
-5
@@ -54,13 +54,14 @@ void main(void) {
|
||||
initrand(DIV_REG);
|
||||
|
||||
// Invia i dati grafici del gioco alla VRAM
|
||||
set_bkg_data(0, 5, TileData); // 1 strada + 4 siepi
|
||||
set_bkg_data(0, 17, TileData); // 1 strada + 16 varianti autotile
|
||||
|
||||
// La mappa background in memoria hardware è grande 32x32 tiles.
|
||||
// Inizializziamo il "fuori mappa" con siepi solide (mask 15 = 1 + 15)
|
||||
for (y = 0; y < 32; y++) {
|
||||
for (x = 0; x < 32; x++) {
|
||||
uint8_t rand_hedge = 1 + (rand() % 4);
|
||||
set_bkg_tiles(x, y, 1, 1, &rand_hedge);
|
||||
uint8_t solid_hedge = 16;
|
||||
set_bkg_tiles(x, y, 1, 1, &solid_hedge);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,8 +72,13 @@ void main(void) {
|
||||
for (y = 0; y < MAZE_HEIGHT; y++) {
|
||||
for (x = 0; x < MAZE_WIDTH; x++) {
|
||||
uint8_t tile_idx = maze[y][x];
|
||||
if (tile_idx == 1) { // Se è un muro, scegli una siepe variante casuale
|
||||
tile_idx = 1 + (rand() % 4);
|
||||
if (tile_idx == 1) { // Se è un muro, usa autotiling
|
||||
uint8_t mask = 0;
|
||||
if (y > 0 && maze[y-1][x] == 1) mask |= 8; // Nord
|
||||
if (x < MAZE_WIDTH-1 && maze[y][x+1] == 1) mask |= 4; // Est
|
||||
if (y < MAZE_HEIGHT-1 && maze[y+1][x] == 1) mask |= 2; // Sud
|
||||
if (x > 0 && maze[y][x-1] == 1) mask |= 1; // Ovest
|
||||
tile_idx = 1 + mask;
|
||||
}
|
||||
set_bkg_tiles(x, y, 1, 1, &tile_idx);
|
||||
}
|
||||
|
||||
+35
-28
@@ -1,31 +1,38 @@
|
||||
/**
|
||||
* @file tiles.c
|
||||
* @brief Implementazione dei dati grafici dei tile.
|
||||
*/
|
||||
|
||||
#include "tiles.h"
|
||||
|
||||
// Definizione dei dati dei tile. Ogni tile su Game Boy è 8x8 pixel.
|
||||
// Ogni riga del tile è rappresentata da 2 byte (planar format).
|
||||
const unsigned char TileData[] = {
|
||||
// Tile 0: Completamente bianco (tutti i bit a 0)
|
||||
// Indica la stanza scavata e i percorsi.
|
||||
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
|
||||
// Tile 1: Siepe da giardino (variante 0)
|
||||
0xC3,0xBD, 0x90,0x6F, 0x24,0xFB, 0x49,0xFE,
|
||||
0x12,0xEF, 0x44,0xFB, 0x88,0x7F, 0xA3,0xDD,
|
||||
|
||||
// Tile 2: Siepe da giardino (variante 1)
|
||||
0x8C,0x7B, 0x22,0xFD, 0x41,0xBF, 0x14,0xEF,
|
||||
0x82,0xFD, 0x20,0xDF, 0x48,0xF7, 0x11,0xFE,
|
||||
|
||||
// Tile 3: Siepe da giardino (variante 2)
|
||||
0x42,0xBF, 0x90,0xEF, 0x05,0xFB, 0x22,0xFD,
|
||||
0x88,0x7F, 0x01,0xFE, 0x48,0xF7, 0x24,0xDF,
|
||||
|
||||
// Tile 4: Siepe da giardino (variante 3)
|
||||
0x14,0xFB, 0x82,0x7F, 0x20,0xDF, 0x88,0xF7,
|
||||
0x03,0xFD, 0x50,0xBF, 0x04,0xFB, 0x21,0xFE
|
||||
const unsigned char TileData[272] = {
|
||||
// Tile 0 (Mask Floor)
|
||||
0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
// Tile 1 (Mask 0)
|
||||
0x00, 0x00, 0x1E, 0x00, 0x3E, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x3E, 0x3E, 0x1E, 0x1E,
|
||||
// Tile 2 (Mask 1)
|
||||
0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE,
|
||||
// Tile 3 (Mask 2)
|
||||
0x00, 0x00, 0x1E, 0x00, 0x3E, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C,
|
||||
// Tile 4 (Mask 3)
|
||||
0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC,
|
||||
// Tile 5 (Mask 4)
|
||||
0x00, 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
|
||||
// Tile 6 (Mask 5)
|
||||
0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
// Tile 7 (Mask 6)
|
||||
0x00, 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F,
|
||||
// Tile 8 (Mask 7)
|
||||
0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
// Tile 9 (Mask 8)
|
||||
0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x3E, 0x3E, 0x1E, 0x1E,
|
||||
// Tile 10 (Mask 9)
|
||||
0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE,
|
||||
// Tile 11 (Mask 10)
|
||||
0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C,
|
||||
// Tile 12 (Mask 11)
|
||||
0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC,
|
||||
// Tile 13 (Mask 12)
|
||||
0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
|
||||
// Tile 14 (Mask 13)
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
// Tile 15 (Mask 14)
|
||||
0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F,
|
||||
// Tile 16 (Mask 15)
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x10, 0xEF, 0x04, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user