From 3c447c764f0b88f62158a5566f2dfe81c551b5fa Mon Sep 17 00:00:00 2001 From: dani Date: Tue, 25 Jul 2023 04:36:02 +0000 Subject: [PATCH] added changelog, changed tilemap to background, working on template gfx.gif --- CHANGLOG.md | 6 ++++++ examples/gfx.gif | Bin 22496 -> 27618 bytes src/gsa_render_to_screen.rs | 8 ++++---- src/lib.rs | 13 +++++++++++++ src/run.rs | 4 ++-- 5 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 CHANGLOG.md diff --git a/CHANGLOG.md b/CHANGLOG.md new file mode 100644 index 0000000..1ad587c --- /dev/null +++ b/CHANGLOG.md @@ -0,0 +1,6 @@ +# 0.2.0 - +- added README.md +- renamed tilemaps to backgrounds to make space for... tilemaps + +# 0.1.0 - 2023-07-21 +initial release \ No newline at end of file diff --git a/examples/gfx.gif b/examples/gfx.gif index b4b5f42c6e5676d5fdaea336ae3bdddfde794edf..6c29528b8efabedeb0594c8a9ae18f68aabab141 100644 GIT binary patch delta 17483 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 diff --git a/src/gsa_render_to_screen.rs b/src/gsa_render_to_screen.rs index e0b0154..1509cf3 100644 --- a/src/gsa_render_to_screen.rs +++ b/src/gsa_render_to_screen.rs @@ -1,6 +1,6 @@ use crate::{ - Background, Gsa, Rgb, BACKGROUND_MAX_SIZE, HALF_TILE_SIZE, MAX_BACKGROUNDS, SCREEN_HEIGHT, - SCREEN_WIDTH, TILESET_SIZE, TILE_SIZE, + Background, Gsa, Rgb, BACKGROUND_MAX_SIZE, EMPTY_TILE, HALF_TILE_SIZE, MAX_BACKGROUNDS, + SCREEN_HEIGHT, SCREEN_WIDTH, TILESET_SIZE, TILE_SIZE, TRANSPARENT, }; use glam::IVec2; use softbuffer::Buffer; @@ -16,7 +16,7 @@ fn draw_tile(target: &mut [u8], pos: IVec2, tile: u16, tileset: &[u8], half: boo for y in (starty - pos.y)..(endy - pos.y) { for x in (startx - pos.x)..(endx - pos.x) { let p = tileset[(x as usize + tx) + (y as usize + ty) * (TILESET_SIZE * TILE_SIZE)]; - if p > 0 { + if p != TRANSPARENT { target[(x as usize + pos.x as usize) + (y as usize + pos.y as usize) * SCREEN_WIDTH] = p; } @@ -40,7 +40,7 @@ fn render_map(target: &mut [u8], map: &Background, tileset: &[u8]) { for x in startx..endx { for y in starty..endy { let tile = map.tiles[x as usize][y as usize]; - if tile > 0 { + if tile > EMPTY_TILE { draw_tile( target, IVec2 { diff --git a/src/lib.rs b/src/lib.rs index a11d689..340d8fe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,7 @@ //! - Colors: 256 (indexed out of a possible 24-bit) //! - Tilesize: 16x16 (or 8x8 for half-tiles) //! - Tileset: 65536 tiles, indexed via 0xYYXX +//! - rectangle(not id range) of 0x7000 to 0x7F7F semi-reserved //! - Sprites: 256 of size 16x16 (pondering allowing larger sprites) //! - Backgrounds: 4 of size 1024x1024, scrollable //! @@ -55,12 +56,24 @@ pub const SCREEN_HEIGHT: usize = 176; /// X and y dimensions of maps in [Gsa::bgs] pub const BACKGROUND_MAX_SIZE: usize = 1024; +/// Tile considered empty (never drawn even if has contents) +pub const EMPTY_TILE: u16 = 0xffff + +/// Tile id of bold default font +pub const FONT_BOLD: u16 = 0xf000; + +/// Tile id of thin default font +pub const FONT_THIN: u16 = 0xe000; + /// Width and height (in tiles) of tileset pub const TILESET_SIZE: usize = 0x100; /// Width and height of a tile pub const TILE_SIZE: usize = 16; +/// Palette index which is treated as transparent +pub const TRANSPARENT: u8 = 0xff; + /// Width and height of a tile in half-tile mode pub const HALF_TILE_SIZE: usize = 8; diff --git a/src/run.rs b/src/run.rs index 67156c5..0defd77 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1,7 +1,7 @@ use crate::buttons::{button_from_gilrs, button_from_scancode}; use crate::gsa_render_to_screen::{render_to_screen, render_to_window}; use crate::tileset::load_tileset; -use crate::{Buttons, Gsa, Sprite, MAX_SPRITES, SCREEN_HEIGHT, SCREEN_WIDTH}; +use crate::{Buttons, Gsa, Sprite, FONT_BOLD, MAX_SPRITES, SCREEN_HEIGHT, SCREEN_WIDTH}; use gilrs::EventType; use glam::IVec2; use std::cmp::min; @@ -41,7 +41,7 @@ pub fn run( sprites: [Sprite::default(); MAX_SPRITES], bgs: Default::default(), palette, - font: 0x1010, + font: FONT_BOLD, pressed: 0, released: 0, down: 0,