diff options
author | Bad Diode <bd@badd10de.dev> | 2021-06-08 14:34:13 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-06-08 14:34:13 +0200 |
commit | 2faf84d78bf261b6f02648e66f0c84efc1eefd05 (patch) | |
tree | 3f780b2835eaa8505ebc87769b252fa9d639fe03 /src/renderer.c | |
parent | 436b4a1d28f5939e1c0f8792317a639b091b0f29 (diff) | |
download | stepper-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.c | 20 |
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 | ||
277 | IWRAM_CODE | 277 | IWRAM_CODE |
278 | void | 278 | void |
279 | draw_tile(size_t x, size_t y, Tile *tile, bool merge) { | 279 | draw_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); |