From ac7f2c3fcc050181b59904094b9955d46038c81f Mon Sep 17 00:00:00 2001 From: enne2 Date: Wed, 17 Jun 2026 22:10:27 +0200 Subject: [PATCH] feat: Add randomized hedge tiles for visual variety --- screenshot.png | Bin 772 -> 4595 bytes src/main.c | 26 +++++++++++++++----------- src/tiles.c | 19 +++++++++++++++---- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/screenshot.png b/screenshot.png index 25e75165e5bf14d1a1c3ee624c467e04e3630a62..92515a29288a2b2b50a7d54ac478bbed531205bf 100644 GIT binary patch literal 4595 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 U#>j~~fT^3o)78&qol`;+02xY2RR910 diff --git a/src/main.c b/src/main.c index 6e38fe2..628fcac 100644 --- a/src/main.c +++ b/src/main.c @@ -27,27 +27,31 @@ void main(void) { wait_vbl_done(); // Invia i dati grafici (array TileData) dal banco ROM alla VRAM a partire dall'indice 0. - set_bkg_data(0, 2, TileData); - - // La mappa background in memoria hardware è grande 32x32 tiles. - // Riempiamo preventivamente tutta quest'area nascosta con il tile Nero (indice 1), - // utile per mascherare i bordi quando lo schermo verrà "scrollato" successivamente. - for (y = 0; y < 32; y++) { - for (x = 0; x < 32; x++) { - set_bkg_tiles(x, y, 1, 1, &black); - } - } + set_bkg_data(0, 5, TileData); // Carichiamo 5 tile: 1 strada + 4 siepi // Inizializza il seme dei numeri casuali. initrand(DIV_REG); + // La mappa background in memoria hardware è grande 32x32 tiles. + // Riempiamo preventivamente tutta quest'area nascosta con siepi casuali + 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); + } + } + // Invoca la funzione logica per popolare l'array `maze` in memoria. generate_maze(); // Riversa l'array generato `maze` nella memoria del Background (VRAM Mappa). for (y = 0; y < MAZE_HEIGHT; y++) { for (x = 0; x < MAZE_WIDTH; x++) { - set_bkg_tiles(x, y, 1, 1, &maze[y][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); + } + set_bkg_tiles(x, y, 1, 1, &tile_idx); } } diff --git a/src/tiles.c b/src/tiles.c index f7e99ab..ebdb7ab 100644 --- a/src/tiles.c +++ b/src/tiles.c @@ -13,8 +13,19 @@ const unsigned char TileData[] = { 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, - // Tile 1: Completamente nero (tutti i bit a 1) - // Usato per disegnare i muri del labirinto. - 0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF, - 0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF + // 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 };