diff --git a/src/tic.c b/src/tic.c index 983f319..db2f048 100644 --- a/src/tic.c +++ b/src/tic.c @@ -258,6 +258,9 @@ static void drawRectBorder(tic_machine* machine, s32 x, s32 y, s32 width, s32 he } \ }) +#define REVERT(X) (TIC_SPRITESIZE - 1 - (X)) +#define INDEX_XY(X, Y) ((Y) * TIC_SPRITESIZE + (X)) + static void drawTile(tic_machine* machine, const tic_tile* buffer, s32 x, s32 y, u8* colors, s32 count, s32 scale, tic_flip flip, tic_rotate rotate) { static u8 mapping[TIC_PALETTE_SIZE]; @@ -280,14 +283,14 @@ static void drawTile(tic_machine* machine, const tic_tile* buffer, s32 x, s32 y, ex = machine->state.clip.r - x; if (ex > TIC_SPRITESIZE) ex = TIC_SPRITESIZE; ey = machine->state.clip.b - y; if (ey > TIC_SPRITESIZE) ey = TIC_SPRITESIZE; switch (orientation) { - case 0b100: DRAW_TILE_BODY(px * TIC_SPRITESIZE + py); break; - case 0b110: DRAW_TILE_BODY(px * TIC_SPRITESIZE + TIC_SPRITESIZE - py - 1); break; - case 0b101: DRAW_TILE_BODY((TIC_SPRITESIZE - px - 1) * TIC_SPRITESIZE + py); break; - case 0b111: DRAW_TILE_BODY((TIC_SPRITESIZE - px) * TIC_SPRITESIZE - py - 1); break; - case 0b000: DRAW_TILE_BODY(py * TIC_SPRITESIZE + px); break; - case 0b010: DRAW_TILE_BODY((TIC_SPRITESIZE - py - 1) * TIC_SPRITESIZE + px); break; - case 0b001: DRAW_TILE_BODY(py * TIC_SPRITESIZE + TIC_SPRITESIZE - px - 1); break; - case 0b011: DRAW_TILE_BODY((TIC_SPRITESIZE - py) * TIC_SPRITESIZE - px - 1); break; + case 0b100: DRAW_TILE_BODY(INDEX_XY(py, px)); break; + case 0b110: DRAW_TILE_BODY(INDEX_XY(REVERT(py), px)); break; + case 0b101: DRAW_TILE_BODY(INDEX_XY(py, REVERT(px))); break; + case 0b111: DRAW_TILE_BODY(INDEX_XY(REVERT(py), REVERT(px))); break; + case 0b000: DRAW_TILE_BODY(INDEX_XY(px, py)); break; + case 0b010: DRAW_TILE_BODY(INDEX_XY(px, REVERT(py))); break; + case 0b001: DRAW_TILE_BODY(INDEX_XY(REVERT(px), py)); break; + case 0b011: DRAW_TILE_BODY(INDEX_XY(REVERT(px), REVERT(py))); break; default: assert(!"Unknown value of orientation in drawTile"); } return;