From 2faf84d78bf261b6f02648e66f0c84efc1eefd05 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 8 Jun 2021 14:34:13 +0200 Subject: Change draw_tile to allow coloring of flat tiles --- src/renderer.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/renderer.c') diff --git a/src/renderer.c b/src/renderer.c index afc9904..0ce3107 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -276,7 +276,7 @@ draw_filled_rect(size_t x0, size_t y0, size_t x1, size_t y1, u8 clr) { IWRAM_CODE void -draw_tile(size_t x, size_t y, Tile *tile, bool merge) { +draw_tile(size_t x, size_t y, Tile *tile, u8 clr, bool merge) { BOUNDCHECK_SCREEN(x, y); // Find row position for the given x/y coordinates. @@ -305,40 +305,40 @@ draw_tile(size_t x, size_t y, Tile *tile, bool merge) { if (start_col == 0 && start_row == 0) { for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; } dirty_tiles[tile_y] |= 1 << tile_x; } else if (start_row == 0) { for (size_t i = 0; i < 8; i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); + backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); } dirty_tiles[tile_y] |= 1 << tile_x; dirty_tiles[tile_y] |= 1 << (tile_x + 1); } else if (start_col == 0) { for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; } backbuffer += 8 * 31; for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr; } dirty_tiles[tile_y] |= 1 << tile_x; dirty_tiles[tile_y + 1] |= 1 << tile_x; } else { for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); + backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); } backbuffer += 8 * 31; for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { BOUNDCHECK_SCREEN(x, y + i); - backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); - backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); + backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left); + backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right); } dirty_tiles[tile_y] |= 1 << tile_x; dirty_tiles[tile_y] |= 1 << (tile_x + 1); -- cgit v1.2.1