Fix flipping sprites, start work on player
This commit is contained in:
parent
d823220e90
commit
57e025e6aa
BIN
game/art/game_player.aseprite
Normal file
BIN
game/art/game_player.aseprite
Normal file
Binary file not shown.
BIN
game/art/game_player.png
Normal file
BIN
game/art/game_player.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 B |
@ -126,7 +126,7 @@ void game_draw() {
|
|||||||
0,
|
0,
|
||||||
x1, y1-64,
|
x1, y1-64,
|
||||||
16, 8,
|
16, 8,
|
||||||
false, false
|
true, true
|
||||||
);
|
);
|
||||||
|
|
||||||
sys_map_draw(game_map, game_tiles, 0, 0, map_x, 0, 32, 18);
|
sys_map_draw(game_map, game_tiles, 0, 0, map_x, 0, 32, 18);
|
||||||
|
@ -12,7 +12,7 @@ void sys_scanline_internal_set(
|
|||||||
sys_i32 x0, sys_i32 x1, sys_i32 y, sys_color c, bool fill
|
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_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 ==
|
// == public ==
|
||||||
void sys_clip_set(sys_i32 x0, sys_i32 y0, sys_i32 x1, sys_i32 y1) {
|
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)
|
// (this is necessary for w and h)
|
||||||
for (int sy = 0; sy < h; sy++) {
|
for (int sy = 0; sy < h; sy++) {
|
||||||
for (int sx = 0; sx < w; sx++) {
|
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) {
|
if (tile < 0 || tile >= spritesheet.width * spritesheet.height) {
|
||||||
continue;
|
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 py = 0; py < 8; py++) {
|
||||||
for (int px = 0; px < 8; px++) {
|
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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user