From cee4d02ce2d85556a69b38ff75d3789e11fe61f0 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Sat, 23 Sep 2023 18:02:51 +0100 Subject: [PATCH] sprites init --- resources/terminal10x10_gs_tc.png | Bin 0 -> 8804 bytes resources/vga8x16.png | Bin 0 -> 35939 bytes resources/world16x16.png | Bin 0 -> 51725 bytes src/camera.rs | 49 +++++++----- src/data/mod.rs | 5 ++ src/data/sprites.rs | 119 ++++++++++++++++++++++++++++++ src/data/visuals.rs | 5 ++ src/gui/character_creation.rs | 5 +- src/gui/mod.rs | 11 +-- src/gui/tooltip.rs | 9 ++- src/main.rs | 59 +++++++++++---- src/map/themes.rs | 30 ++++++++ src/map/tiletype.rs | 52 +++++++++++++ src/states/state.rs | 25 +++++-- 14 files changed, 319 insertions(+), 50 deletions(-) create mode 100644 resources/terminal10x10_gs_tc.png create mode 100644 resources/vga8x16.png create mode 100644 resources/world16x16.png create mode 100644 src/data/sprites.rs diff --git a/resources/terminal10x10_gs_tc.png b/resources/terminal10x10_gs_tc.png new file mode 100644 index 0000000000000000000000000000000000000000..5e0cdc92fb3881ead60f4b856ee19c00d333855e GIT binary patch literal 8804 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 c|Nm#GE##I= 0 && t_x < map.width && t_y >= 0 && t_y < map.height { let idx = map.xy_idx(t_x, t_y); if map.revealed_tiles[idx] { - let (glyph, fg, bg) = crate::map::themes::get_tile_renderables_for_id( - idx, - &*map, - Some(*ecs.fetch::()), - None - ); - ctx.set(x + x_offset, y + y_offset, fg, bg, glyph); + if 1 == 2 { + let (glyph, fg, bg) = crate::map::themes::get_tile_renderables_for_id( + idx, + &*map, + Some(*ecs.fetch::()), + None + ); + ctx.set(x + x_offset, y + y_offset, fg, bg, glyph); + } else { + ctx.set_active_console(0); + let (id, tint) = crate::map::themes::get_sprite_for_id( + idx, + &*map, + Some(*ecs.fetch::()) + ); + ctx.add_sprite( + Rect::with_size(x * 16 + x_offset * 16, y * 16 + y_offset * 16, 16, 16), + 0, + tint, + id + ); + ctx.set_active_console(TILE_LAYER); + } } } else if SHOW_BOUNDARIES { ctx.set( @@ -68,6 +86,8 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) { // Render entities { + ctx.set_active_console(ENTITY_LAYER); + let positions = ecs.read_storage::(); let renderables = ecs.read_storage::(); let pools = ecs.read_storage::(); @@ -86,12 +106,7 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) { if pos.x < max_x && pos.y < max_y && pos.x >= min_x && pos.y >= min_y { let mut draw = false; let mut fg = render.fg; - let mut bg = crate::map::themes::get_tile_renderables_for_id( - idx, - &*map, - Some(*ecs.fetch::()), - None - ).2; + let bg = BLACK; // Draw entities on visible tiles if map.visible_tiles[idx] { draw = true; @@ -106,9 +121,6 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) { let has_mind = minds.get(*ent); if let Some(_) = has_mind { draw = true; - if !map.revealed_tiles[idx] { - bg = RGB::named(BLACK); - } } } } @@ -129,7 +141,7 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) { ); if let Some(pool) = pools.get(*ent) { if pool.hit_points.current < pool.hit_points.max { - ctx.set_active_console(2); + ctx.set_active_console(HP_BAR_LAYER); crate::gui::draw_lerping_bar( ctx, (entity_offset_x + x_offset) * 16 + 2, @@ -142,12 +154,13 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) { false, false ); - ctx.set_active_console(0); + ctx.set_active_console(ENTITY_LAYER); } } } } } + ctx.set_active_console(TILE_LAYER); } } diff --git a/src/data/mod.rs b/src/data/mod.rs index 8abda34..cefe83f 100644 --- a/src/data/mod.rs +++ b/src/data/mod.rs @@ -5,3 +5,8 @@ pub mod char_create; pub mod events; pub mod ids; pub mod names; +pub mod sprites; + +pub mod prelude { + pub use super::visuals::{ TILE_LAYER, ENTITY_LAYER, TEXT_LAYER, HP_BAR_LAYER }; +} diff --git a/src/data/sprites.rs b/src/data/sprites.rs new file mode 100644 index 0000000..3fe4350 --- /dev/null +++ b/src/data/sprites.rs @@ -0,0 +1,119 @@ +// Row 1 +pub const UNKN: usize = 0; +pub const UNKN2: usize = 1; +pub const UNKN3: usize = 2; +pub const CANDLE: usize = 3; +pub const CANDLE2: usize = 4; +pub const CANDLE3: usize = 5; +pub const CANDLE4: usize = 6; +pub const CANDLE5: usize = 7; +pub const CANDLE6: usize = 8; +pub const CAULDRON: usize = 9; +pub const CAULDRON2: usize = 10; +pub const POTS: usize = 11; +pub const POTS2: usize = 12; +pub const POT: usize = 13; +pub const SPIKES: usize = 14; +pub const SPIKES2: usize = 15; +// Row 2 +pub const WINDOW: usize = 16; +pub const DOOR: usize = 17; +pub const DOOR_OPEN: usize = 18; +pub const ROOF_BASE: usize = 19; +pub const ROOF_BASE2: usize = 20; +pub const ROOF: usize = 21; +pub const ROOF2: usize = 22; +pub const ROOF_CHIMNEY: usize = 23; +pub const SIGN: usize = 24; +pub const SIGN_BLACKSMITH: usize = 25; +pub const SIGN_POTION: usize = 26; +pub const SIGN_FURNITURE: usize = 27; +pub const WINDOW_LIT: usize = 28; +pub const STATUE_ANGEL: usize = 29; +pub const STATUE: usize = 30; +pub const STATUE_SPIDER: usize = 31; +// Row 3 +pub const UNKN4: usize = 32; +pub const UNKN5: usize = 33; +pub const UNKN6: usize = 34; +pub const UNKN7: usize = 35; +pub const UNKN8: usize = 36; +pub const TREE: usize = 37; +pub const TREE2: usize = 38; +pub const PATH_GRASS: usize = 39; +pub const PATH_GRASS_QUAD: usize = 40; +pub const PATH_GRASS_QUAD2: usize = 41; +pub const PATH_GRASS_QUAD3: usize = 42; +pub const CAMPFIRE: usize = 43; +pub const CAMPFIRE_LIT: usize = 44; +pub const CAMPFIRE_LIT2: usize = 45; // ANIMATE WITH % 2 AND SOMETHING TO DO WITH FRAME TIME +pub const THRONE: usize = 46; +pub const THRONE2: usize = 47; +// Row 4 +pub const BOOKSHELF: usize = 48; +pub const BOOKSHELF_EMPTY: usize = 49; +pub const BED: usize = 50; +pub const CHAIR: usize = 51; +pub const TABLE: usize = 52; +pub const TABLE_L: usize = 53; +pub const TABLE_M: usize = 54; +pub const TABLE_R: usize = 55; +pub const CHAIR_AT_TABLE_L: usize = 56; +pub const TABLE_M_PARCHMENT: usize = 57; +pub const CHAIR_AT_TABLE_R: usize = 58; +pub const TABLE_DARK: usize = 59; +pub const TABLE_DARK_SKULL: usize = 60; +pub const TABLE_DARK_L: usize = 61; +pub const TABLE_DARK_M: usize = 62; +pub const TABLE_DARK_R: usize = 63; +// Row 5 +pub const GRASS: usize = 64; +pub const GRASS2: usize = 65; +pub const GRASS3: usize = 66; +pub const GRASS4: usize = 67; +pub const GRASS5: usize = 68; +pub const MUSHROOM: usize = 69; +pub const MUSHROOM_PURPLE: usize = 70; +pub const MUSHROOM_ORANGE: usize = 71; +pub const LILYPAD: usize = 72; +pub const LILYPAD2: usize = 73; +pub const LILYPAD3: usize = 74; +pub const LILYPAD4: usize = 75; +pub const LILYPAD5: usize = 76; +pub const LILYPAD6: usize = 77; +pub const LILYPAD7: usize = 78; +pub const LILYPAD8: usize = 79; +// Row 6 (80-95) +// Row 7 (96-111) +// Row 8 (112-127) +pub const FLOOR_WOOD: usize = 123; +// Row 9 (128-143) +// Row 10 (144-159) +// Row 11 (160-175) +pub const WATER_DEEP: usize = 164; +// Row 12 (176-191) +// Row 13 (192-207) +// Row 14 (208-223) +pub const FLOOR_GRASS: usize = 216; +// Row 15 (224-239) +pub const FLOOR: usize = 224; +// Row 16 (240-255) +// Row 17 (256-271) +// Row 18 (272-287) +// Row 19 (288-303) +pub const WALL_BASE: usize = 288; +pub const WALL_BASE2: usize = 289; +pub const WALL_BASE3: usize = 290; +pub const WALL_BASE4: usize = 291; +pub const WALL_CLOTH_BASE: usize = 292; +pub const WALL_CRACKED_BASE: usize = 293; +pub const WALL: usize = 294; +pub const WALL2: usize = 295; +pub const WALL3: usize = 296; +pub const WALL4: usize = 297; +pub const WALL_CRACKED: usize = 298; +pub const WALL_CLOTH_H: usize = 299; +pub const STAIR_D: usize = 300; +pub const STAIR_A: usize = 301; +pub const BASIN: usize = 302; +pub const BASIN_EMPTY: usize = 303; diff --git a/src/data/visuals.rs b/src/data/visuals.rs index 4b66e53..26fa5ee 100644 --- a/src/data/visuals.rs +++ b/src/data/visuals.rs @@ -5,6 +5,11 @@ pub const WITH_DARKEN_BY_DISTANCE: bool = true; // If further away tiles should pub const VIEWPORT_W: i32 = 69; pub const VIEWPORT_H: i32 = 41; +pub const TILE_LAYER: usize = 1; +pub const ENTITY_LAYER: usize = 2; +pub const TEXT_LAYER: usize = 3; +pub const HP_BAR_LAYER: usize = 4; + pub const BRIGHTEN_FG_COLOUR_BY: i32 = 16; pub const GLOBAL_OFFSET_MIN_CLAMP: f32 = -0.5; pub const GLOBAL_OFFSET_MAX_CLAMP: f32 = 1.0; diff --git a/src/gui/character_creation.rs b/src/gui/character_creation.rs index 978d011..2ad9e97 100644 --- a/src/gui/character_creation.rs +++ b/src/gui/character_creation.rs @@ -28,6 +28,7 @@ use bracket_lib::prelude::*; use serde::{ Deserialize, Serialize }; use specs::prelude::*; use std::collections::HashMap; +use crate::data::prelude::*; #[derive(Serialize, Deserialize, Copy, Clone, PartialEq)] pub enum Ancestry { @@ -112,7 +113,7 @@ pub enum CharCreateResult { /// Handles the player character creation screen. pub fn character_creation(gs: &mut State, ctx: &mut BTerm) -> CharCreateResult { - ctx.set_active_console(1); + ctx.set_active_console(TEXT_LAYER); let runstate = gs.ecs.fetch::(); let mut x = 2; @@ -246,7 +247,7 @@ pub fn character_creation(gs: &mut State, ctx: &mut BTerm) -> CharCreateResult { } } } - ctx.set_active_console(0); + ctx.set_active_console(TILE_LAYER); return CharCreateResult::NoSelection { ancestry: Ancestry::Human, class: Class::Fighter }; } diff --git a/src/gui/mod.rs b/src/gui/mod.rs index ce07eb7..217a96e 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -34,6 +34,7 @@ use super::{ BUC, data::ids::get_local_col, }; +use crate::data::prelude::*; use crate::data::entity::CARRY_CAPACITY_PER_STRENGTH; use crate::data::visuals::{ TARGETING_LINE_COL, @@ -110,7 +111,7 @@ pub fn draw_lerping_bar( pub const TEXT_FONT_MOD: i32 = 2; pub fn draw_ui(ecs: &World, ctx: &mut BTerm) { - ctx.set_active_console(1); + ctx.set_active_console(TEXT_LAYER); // Render stats let pools = ecs.read_storage::(); let attributes = ecs.read_storage::(); @@ -474,7 +475,7 @@ pub fn draw_ui(ecs: &World, ctx: &mut BTerm) { // Render the message log at [1, 7], ascending, with 7 lines and a max width of 68. gamelog::print_log( - &mut BACKEND_INTERNAL.lock().consoles[1].console, + &mut BACKEND_INTERNAL.lock().consoles[TEXT_LAYER].console, Point::new(1 * TEXT_FONT_MOD, 7), false, 7, @@ -539,7 +540,7 @@ pub fn draw_ui(ecs: &World, ctx: &mut BTerm) { RGB::named(WHITE), RGB::named(BLACK) ); // Side box - ctx.set_active_console(0); + ctx.set_active_console(TILE_LAYER); tooltip::draw_tooltips(ecs, ctx, None); } @@ -999,7 +1000,7 @@ pub fn get_player_inventory(ecs: &World) -> PlayerInventory { } pub fn show_inventory(gs: &mut State, ctx: &mut BTerm) -> (ItemMenuResult, Option) { - ctx.set_active_console(1); + ctx.set_active_console(TEXT_LAYER); let player_inventory = get_player_inventory(&gs.ecs); let count = player_inventory.len(); @@ -1021,7 +1022,7 @@ pub fn show_inventory(gs: &mut State, ctx: &mut BTerm) -> (ItemMenuResult, Optio ctx.draw_box(x, y, width + 2, (count + 1) as i32, RGB::named(WHITE), RGB::named(BLACK)); print_options(&player_inventory, x + 1, y + 1, ctx); - ctx.set_active_console(0); + ctx.set_active_console(TILE_LAYER); match ctx.key { None => (ItemMenuResult::NoResponse, None), diff --git a/src/gui/tooltip.rs b/src/gui/tooltip.rs index 586a6ef..1aebed0 100644 --- a/src/gui/tooltip.rs +++ b/src/gui/tooltip.rs @@ -12,6 +12,7 @@ use super::{ }; use crate::TileType; use crate::data::ids::*; +use crate::data::prelude::*; use bracket_lib::prelude::*; use specs::prelude::*; @@ -45,7 +46,7 @@ impl Tooltip { return (self.lines.len() as i32) + 2i32; } fn render(&self, ctx: &mut BTerm, x: i32, y: i32) { - ctx.set_active_console(1); + ctx.set_active_console(TEXT_LAYER); ctx.draw_box( x, y, @@ -57,7 +58,7 @@ impl Tooltip { for (i, s) in self.lines.iter().enumerate() { ctx.print_color(x + 1, y + (i as i32) + 1, s.1, RGB::named(BLACK), &s.0); } - ctx.set_active_console(0); + ctx.set_active_console(TILE_LAYER); } } @@ -177,9 +178,9 @@ pub fn draw_tooltips(ecs: &World, ctx: &mut BTerm, xy: Option<(i32, i32)>) { arrow = to_cp437('←'); arrow_x = (mouse_pos.0 + 1) * 2; } - ctx.set_active_console(1); + ctx.set_active_console(TEXT_LAYER); ctx.set(arrow_x, arrow_y, white, RGB::named(BLACK), arrow); - ctx.set_active_console(0); + ctx.set_active_console(TILE_LAYER); let mut total_height = 0; for t in tooltips.iter() { diff --git a/src/main.rs b/src/main.rs index 207fd47..1703f1f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,18 +8,23 @@ const DISPLAYHEIGHT: i32 = 56; fn main() -> BError { // Embedded resources for use in wasm build - const CURSES_16_16_BYTES: &[u8] = include_bytes!("../resources/curses16x16.png"); - const CURSES_8_16_BYTES: &[u8] = include_bytes!("../resources/curses8x16.png"); - const SINGLE_1_1_BYTES: &[u8] = include_bytes!("../resources/healthbar22x2.png"); - bracket_lib::terminal::EMBED - .lock() - .add_resource("resources/curses16x16.png".to_string(), CURSES_16_16_BYTES); - bracket_lib::terminal::EMBED - .lock() - .add_resource("resources/curses8x16.png".to_string(), CURSES_8_16_BYTES); - bracket_lib::terminal::EMBED - .lock() - .add_resource("resources/healthbar22x2.png".to_string(), SINGLE_1_1_BYTES); + { + const WORLD_16_16_BYTES: &[u8] = include_bytes!("../resources/world16x16.png"); + const CURSES_16_16_BYTES: &[u8] = include_bytes!("../resources/curses16x16.png"); + const CURSES_8_16_BYTES: &[u8] = include_bytes!("../resources/curses8x16.png"); + const SINGLE_1_1_BYTES: &[u8] = include_bytes!("../resources/healthbar22x2.png"); + let mut lock = bracket_lib::terminal::EMBED.lock(); + lock.add_resource("resources/world16x16.png".to_string(), WORLD_16_16_BYTES); + lock.add_resource("resources/curses16x16.png".to_string(), CURSES_16_16_BYTES); + lock.add_resource("resources/curses8x16.png".to_string(), CURSES_8_16_BYTES); + lock.add_resource("resources/healthbar22x2.png".to_string(), SINGLE_1_1_BYTES); + } + + let world_sheet = SpriteSheet { + filename: "resources/world16x16.png".to_string(), + sprites: register_spritesheet(16, 16, 19, 16), + backing: None, + }; let mut context = BTermBuilder::new() .with_title("rust-rl") @@ -29,7 +34,10 @@ fn main() -> BError { .with_font("healthbar22x2.png", 1, 1) .with_tile_dimensions(16, 16) .with_gutter(2) - .with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") + .with_sprite_console(DISPLAYWIDTH * 16, DISPLAYHEIGHT * 16, 0) + .with_sprite_sheet(world_sheet) + .with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") + .with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") .with_sparse_console(DISPLAYWIDTH * 2, DISPLAYHEIGHT, "curses8x16.png") .with_sparse_console(DISPLAYWIDTH * 16, DISPLAYHEIGHT * 16, "healthbar22x2.png") .build()?; @@ -37,6 +45,19 @@ fn main() -> BError { context.with_post_scanlines(config::CONFIG.visuals.with_screen_burn); } + context.set_active_console(0); + for i in 0..16 { + for j in 0..19 { + context.add_sprite( + Rect::with_size(i * 16, j * 16, 16, 16), + 0, + RGBA::named(WHITE), + i + j * 16 + ); + } + } + context.set_active_console(1); + let mut gs = State { ecs: World::new(), mapgen_next_state: Some(RunState::MainMenu { @@ -149,3 +170,15 @@ fn main() -> BError { main_loop(context, gs) } + +fn register_spritesheet(width: i32, height: i32, rows: i32, columns: i32) -> Vec { + let mut sprites: Vec = Vec::new(); + for y in 0..rows { + for x in 0..columns { + sprites.push( + Sprite::new(Rect::with_size(x * width + 1, y * height + 1, width, height)) + ); + } + } + sprites +} diff --git a/src/map/themes.rs b/src/map/themes.rs index 8ddcc2a..bd6fcf3 100644 --- a/src/map/themes.rs +++ b/src/map/themes.rs @@ -5,6 +5,22 @@ use crate::data::ids::*; use bracket_lib::prelude::*; use std::ops::{ Add, Mul }; +pub fn get_sprite_for_id(idx: usize, map: &Map, other_pos: Option) -> (usize, RGBA) { + let x = (idx as i32) % map.width; + let y = (idx as i32) / map.width; + let tile = map.tiles[idx]; + let base = match tile { + TileType::Wall => wall_sprite(tile.sprite(), map, x, y), + _ => tile.sprite(), + }; + let sprite_id = pick_variant(base, tile.variants(), idx, map); + let tint = if !map.visible_tiles[idx] { + RGBA::from_f32(0.75, 0.75, 0.75, 1.0) + } else { + RGBA::named(WHITE) + }; + return (sprite_id, tint); +} /// Gets the renderables for a tile, with darkening/offset/post-processing/etc. Passing a val for "debug" will ignore viewshed. pub fn get_tile_renderables_for_id( idx: usize, @@ -142,6 +158,20 @@ fn is_revealed_and_wall(map: &Map, x: i32, y: i32, debug: Option) -> bool (if debug.is_none() { map.revealed_tiles[idx] } else { true }) } +fn wall_sprite(id: usize, map: &Map, x: i32, y: i32) -> usize { + if y > map.height - (2 as i32) { + return id; + } + if is_revealed_and_wall(map, x, y + 1, None) { + return id + 6; + } + return id; +} + +fn pick_variant(base: usize, variants: usize, idx: usize, map: &Map) -> usize { + return base + ((map.colour_offset[idx].0.0 * (variants as f32)) as usize); +} + fn wall_glyph(map: &Map, x: i32, y: i32, debug: Option) -> FontCharType { if x < 1 || diff --git a/src/map/tiletype.rs b/src/map/tiletype.rs index 2a7d7f1..beb483c 100644 --- a/src/map/tiletype.rs +++ b/src/map/tiletype.rs @@ -1,4 +1,5 @@ use serde::{ Deserialize, Serialize }; +use crate::data::sprites::*; #[derive(PartialEq, Eq, Hash, Copy, Clone, Serialize, Deserialize, Debug)] pub enum TileType { @@ -27,6 +28,57 @@ pub enum TileType { ToOvermap(i32), ToLocal(i32), } + +impl TileType { + pub fn sprite(&self) -> usize { + match self { + TileType::ImpassableMountain => STATUE, + TileType::Wall => WALL_BASE, + TileType::DeepWater => WATER_DEEP, + TileType::Fence => WALL_BASE, + TileType::Bars => WALL_BASE, + TileType::Floor => FLOOR, + TileType::WoodFloor => FLOOR_WOOD, + TileType::Gravel => FLOOR, + TileType::Road => PATH_GRASS, + TileType::Grass => FLOOR_GRASS, + TileType::Foliage => FLOOR_GRASS, + TileType::HeavyFoliage => FLOOR_GRASS, + TileType::Sand => FLOOR, + TileType::ShallowWater => WATER_DEEP, + TileType::Bridge => FLOOR, + TileType::DownStair => STAIR_D, + TileType::UpStair => STAIR_A, + TileType::ToLocal(_) => MUSHROOM, + TileType::ToOvermap(_) => MUSHROOM_ORANGE, + } + } + + pub fn variants(&self) -> usize { + match self { + TileType::ImpassableMountain => 1, + TileType::Wall => 4, + TileType::DeepWater => 2, + TileType::Fence => 1, + TileType::Bars => 1, + TileType::Floor => 6, + TileType::WoodFloor => 3, + TileType::Gravel => 1, + TileType::Road => 4, + TileType::Grass => 6, + TileType::Foliage => 1, + TileType::HeavyFoliage => 1, + TileType::Sand => 1, + TileType::ShallowWater => 2, + TileType::Bridge => 1, + TileType::DownStair => 1, + TileType::UpStair => 1, + TileType::ToLocal(_) => 1, + TileType::ToOvermap(_) => 1, + } + } +} + pub fn tile_walkable(tt: TileType) -> bool { match tt { | TileType::ImpassableMountain diff --git a/src/states/state.rs b/src/states/state.rs index f00058f..ed4cd58 100644 --- a/src/states/state.rs +++ b/src/states/state.rs @@ -23,6 +23,7 @@ use crate::camera; use crate::saveload_system; use crate::morgue; use crate::damage_system; +use crate::data::prelude::*; pub struct State { pub ecs: World, @@ -164,12 +165,16 @@ impl GameState for State { new_runstate = *runstate; } // Clear screen - ctx.set_active_console(2); - ctx.cls(); - ctx.set_active_console(1); - ctx.cls(); ctx.set_active_console(0); ctx.cls(); + ctx.set_active_console(HP_BAR_LAYER); + ctx.cls(); + ctx.set_active_console(TEXT_LAYER); + ctx.cls(); + ctx.set_active_console(ENTITY_LAYER); + ctx.cls(); + ctx.set_active_console(TILE_LAYER); + ctx.cls(); particle_system::particle_ticker(&mut self.ecs, ctx); match new_runstate { @@ -564,12 +569,16 @@ impl GameState for State { new_runstate = self.mapgen_next_state.unwrap(); } if self.mapgen_history.len() != 0 { - ctx.set_active_console(2); - ctx.cls(); - ctx.set_active_console(1); - ctx.cls(); ctx.set_active_console(0); ctx.cls(); + ctx.set_active_console(HP_BAR_LAYER); + ctx.cls(); + ctx.set_active_console(TEXT_LAYER); + ctx.cls(); + ctx.set_active_console(ENTITY_LAYER); + ctx.cls(); + ctx.set_active_console(TILE_LAYER); + ctx.cls(); camera::render_debug_map(&self.mapgen_history[self.mapgen_index], ctx); self.mapgen_timer += ctx.frame_time_ms;