aboutsummaryrefslogtreecommitdiffstats
path: root/src/renderer.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-06-08 14:34:13 +0200
committerBad Diode <bd@badd10de.dev>2021-06-08 14:34:13 +0200
commit2faf84d78bf261b6f02648e66f0c84efc1eefd05 (patch)
tree3f780b2835eaa8505ebc87769b252fa9d639fe03 /src/renderer.c
parent436b4a1d28f5939e1c0f8792317a639b091b0f29 (diff)
downloadstepper-2faf84d78bf261b6f02648e66f0c84efc1eefd05.tar.gz
stepper-2faf84d78bf261b6f02648e66f0c84efc1eefd05.zip
Change draw_tile to allow coloring of flat tiles
Diffstat (limited to 'src/renderer.c')
-rw-r--r--src/renderer.c20
1 files changed, 10 insertions, 10 deletions
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) {
276 276
277IWRAM_CODE 277IWRAM_CODE
278void 278void
279draw_tile(size_t x, size_t y, Tile *tile, bool merge) { 279draw_tile(size_t x, size_t y, Tile *tile, u8 clr, bool merge) {
280 BOUNDCHECK_SCREEN(x, y); 280 BOUNDCHECK_SCREEN(x, y);
281 281
282 // Find row position for the given x/y coordinates. 282 // 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) {
305 if (start_col == 0 && start_row == 0) { 305 if (start_col == 0 && start_row == 0) {
306 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { 306 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) {
307 BOUNDCHECK_SCREEN(x, y + i); 307 BOUNDCHECK_SCREEN(x, y + i);
308 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; 308 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr;
309 } 309 }
310 dirty_tiles[tile_y] |= 1 << tile_x; 310 dirty_tiles[tile_y] |= 1 << tile_x;
311 } else if (start_row == 0) { 311 } else if (start_row == 0) {
312 for (size_t i = 0; i < 8; i++, backbuffer++) { 312 for (size_t i = 0; i < 8; i++, backbuffer++) {
313 BOUNDCHECK_SCREEN(x, y + i); 313 BOUNDCHECK_SCREEN(x, y + i);
314 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); 314 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left);
315 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); 315 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right);
316 } 316 }
317 dirty_tiles[tile_y] |= 1 << tile_x; 317 dirty_tiles[tile_y] |= 1 << tile_x;
318 dirty_tiles[tile_y] |= 1 << (tile_x + 1); 318 dirty_tiles[tile_y] |= 1 << (tile_x + 1);
319 } else if (start_col == 0) { 319 } else if (start_col == 0) {
320 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { 320 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) {
321 BOUNDCHECK_SCREEN(x, y + i); 321 BOUNDCHECK_SCREEN(x, y + i);
322 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; 322 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr;
323 } 323 }
324 backbuffer += 8 * 31; 324 backbuffer += 8 * 31;
325 for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { 325 for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) {
326 BOUNDCHECK_SCREEN(x, y + i); 326 BOUNDCHECK_SCREEN(x, y + i);
327 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i]; 327 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | row[i] * clr;
328 } 328 }
329 dirty_tiles[tile_y] |= 1 << tile_x; 329 dirty_tiles[tile_y] |= 1 << tile_x;
330 dirty_tiles[tile_y + 1] |= 1 << tile_x; 330 dirty_tiles[tile_y + 1] |= 1 << tile_x;
331 } else { 331 } else {
332 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) { 332 for (size_t i = 0; i < (8 - start_row); i++, backbuffer++) {
333 BOUNDCHECK_SCREEN(x, y + i); 333 BOUNDCHECK_SCREEN(x, y + i);
334 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); 334 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left);
335 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); 335 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right);
336 } 336 }
337 backbuffer += 8 * 31; 337 backbuffer += 8 * 31;
338 for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) { 338 for (size_t i = (8 - start_row); i < 8; i++, backbuffer++) {
339 BOUNDCHECK_SCREEN(x, y + i); 339 BOUNDCHECK_SCREEN(x, y + i);
340 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] << shift_left); 340 backbuffer[0] = (backbuffer[0] & ~row_mask_left) | (row[i] * clr << shift_left);
341 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] >> shift_right); 341 backbuffer[8] = (backbuffer[8] & ~row_mask_right) | (row[i] * clr >> shift_right);
342 } 342 }
343 dirty_tiles[tile_y] |= 1 << tile_x; 343 dirty_tiles[tile_y] |= 1 << tile_x;
344 dirty_tiles[tile_y] |= 1 << (tile_x + 1); 344 dirty_tiles[tile_y] |= 1 << (tile_x + 1);