From 57e025e6aa02442a75a453a39ed6e3689dadd074 Mon Sep 17 00:00:00 2001 From: Nyeogmi Date: Tue, 27 Feb 2024 15:35:51 -0800 Subject: [PATCH] Fix flipping sprites, start work on player --- game/art/game_player.aseprite | Bin 0 -> 582 bytes game/art/game_player.png | Bin 0 -> 380 bytes game/game.c | 2 +- sys/sys_graphics.c | 23 ++++++++++++++++++----- 4 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 game/art/game_player.aseprite create mode 100644 game/art/game_player.png diff --git a/game/art/game_player.aseprite b/game/art/game_player.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..d61f8ef8dbb5edf9b26e349e61b71e84bd71a288 GIT binary patch literal 582 zcmZ=`Vqkc%l#!uFF+)N zFNjz(pM2`Gc6FR{-+BL6hLUn~9@mUE6<#MU5 z8((`^ggd$vFdOfksqkRazvlX$=EFX_@AkG#s5!;AVa0Z{pmf#u!E-Gxznz_}+{Lg@ z@<^J+MbiUI1w$LYbsHKS+*FtE!oIO5WtmmMB74(CeGYSu2gkn(ugy*2Z{%8-|8=&U z)Xh-FX+KL9*1foPLLlJfeBK$U$0KCYeu;T-moQIw{njy9Y*BvW7fy$=n7r_cYZWh) z9|&eJe^S4({yT@J_1q}ArvhyUY$wRgw3V3Cp1k1X@3uqGN5>*xi0-<^g@m N;OXk;vd$@?2>{YBr``Yn literal 0 HcmV?d00001 diff --git a/game/game.c b/game/game.c index c3b2417..91c8b7c 100644 --- a/game/game.c +++ b/game/game.c @@ -126,7 +126,7 @@ void game_draw() { 0, x1, y1-64, 16, 8, - false, false + true, true ); sys_map_draw(game_map, game_tiles, 0, 0, map_x, 0, 32, 18); diff --git a/sys/sys_graphics.c b/sys/sys_graphics.c index c6580ee..9d6e6ba 100644 --- a/sys/sys_graphics.c +++ b/sys/sys_graphics.c @@ -12,7 +12,7 @@ void sys_scanline_internal_set( sys_i32 x0, sys_i32 x1, sys_i32 y, sys_color c, bool fill ); void sys_glyph_internal_draw(sys_i32 x, sys_i32 y, sys_glyph g, sys_color c); -void sys_sprite_internal_draw(sys_i32 x, sys_i32 y, sys_sprite s); +void sys_sprite_internal_draw(sys_i32 x, sys_i32 y, sys_sprite s, bool flip_x, bool flip_y); // == public == void sys_clip_set(sys_i32 x0, sys_i32 y0, sys_i32 x1, sys_i32 y1) { @@ -258,11 +258,20 @@ void sys_sprite_draw_ext( // (this is necessary for w and h) for (int sy = 0; sy < h; sy++) { for (int sx = 0; sx < w; sx++) { - sys_i32 tile = n + sx + sy * spritesheet.width; + sys_i32 sx_adj = flip_x ? w - 1 - sx : sx; + sys_i32 sy_adj = flip_y ? h - 1 - sy : sy; + sys_i32 tile = + n + sx_adj + sy_adj * spritesheet.width; if (tile < 0 || tile >= spritesheet.width * spritesheet.height) { continue; } - sys_sprite_internal_draw(x + sx * 8, y + sy * 8, spritesheet.sprites[tile]); + sys_sprite_internal_draw( + x + sx * 8, + y + sy * 8, + spritesheet.sprites[tile], + flip_x, + flip_y + ); } } } @@ -332,10 +341,14 @@ void sys_glyph_internal_draw(sys_i32 x, sys_i32 y, sys_glyph g, sys_color c) { } } -void sys_sprite_internal_draw(sys_i32 x, sys_i32 y, sys_sprite s) { +void sys_sprite_internal_draw( + sys_i32 x, sys_i32 y, sys_sprite s, bool flip_x, bool flip_y +) { for (int py = 0; py < 8; py++) { for (int px = 0; px < 8; px++) { - sys_pixel_internal_set(x + px, y + py, s.pixels[py][px]); + sys_i32 px_adj = flip_x ? 7 - px : px; + sys_i32 py_adj = flip_y ? 7 - py : py; + sys_pixel_internal_set(x + px, y + py, s.pixels[py_adj][px_adj]); } } } \ No newline at end of file