From d2648c4560af11828588557f45f4cf6a3b748a04 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Fri, 28 Jul 2023 01:06:42 +0100 Subject: [PATCH] visual overhaul --- raws/mobs.json | 13 ++--- resources/curses_14x16.png | Bin 0 -> 17353 bytes resources/terminal_10x16.png | Bin 0 -> 5699 bytes resources/vga8x16.jpg | Bin 38874 -> 0 bytes resources/vga8x16.png | Bin 0 -> 35939 bytes src/bystander_ai_system.rs | 1 + src/camera.rs | 25 ++++----- src/gui.rs | 102 ++++++++++++++++++++++++----------- src/main.rs | 24 +++++---- src/map/themes.rs | 26 ++++----- 10 files changed, 115 insertions(+), 76 deletions(-) create mode 100644 resources/curses_14x16.png create mode 100644 resources/terminal_10x16.png delete mode 100644 resources/vga8x16.jpg create mode 100644 resources/vga8x16.png diff --git a/raws/mobs.json b/raws/mobs.json index 4151602..69dd27e 100644 --- a/raws/mobs.json +++ b/raws/mobs.json @@ -6,7 +6,8 @@ "flags": ["BLOCKS_TILE"], "stats": { "max_hp": 8, "hp": 8, "defence": 1, "power": 1 }, "vision_range": 4, - "ai": "bystander" + "ai": "bystander", + "quips": ["Drink?"] }, { "id": "npc_townsperson", @@ -16,7 +17,7 @@ "stats": { "max_hp": 8, "hp": 8, "defence": 0, "power": 1 }, "vision_range": 4, "ai": "bystander", - "quips": [ "I don't get paid nearly enough to"] + "quips": ["You won't catch me quipping."] }, { "id": "npc_drunk", @@ -26,7 +27,7 @@ "stats": { "max_hp": 8, "hp": 8, "defence": 0, "power": 1 }, "vision_range": 4, "ai": "bystander", - "quips": [ "Hic!", "H-Hic'."] + "quips": ["Hic!", "H-Hic'."] }, { "id": "npc_fisher", @@ -36,7 +37,7 @@ "stats": { "max_hp": 8, "hp": 8, "defence": 0, "power": 1 }, "vision_range": 4, "ai": "bystander", - "quips": [ "Placeholder."] + "quips": ["Placeholder."] }, { "id": "npc_dockworker", @@ -46,7 +47,7 @@ "stats": { "max_hp": 8, "hp": 8, "defence": 1, "power": 1 }, "vision_range": 4, "ai": "bystander", - "quips": [ "Placeholder."] + "quips": ["Placeholder."] }, { "id": "npc_priest", @@ -74,7 +75,7 @@ "stats": { "max_hp": 12, "hp": 12, "defence": 3, "power": 3 }, "vision_range": 4, "ai": "bystander", - "quips": ["I don't get paid nearly enough to go down the mine."] + "quips": ["You wont catch me down the mine.", "I'm not paid enough for that."] }, { "id": "dog_little", diff --git a/resources/curses_14x16.png b/resources/curses_14x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a06abb672e050a275eeeaf1627ffd2b1b3b2d72e GIT binary patch literal 17353 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 literal 0 HcmV?d00001 diff --git a/resources/terminal_10x16.png b/resources/terminal_10x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e40aa9912a783bb00231c0fbf638aef0f14499f8 GIT binary patch literal 5699 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 literal 0 HcmV?d00001 diff --git a/resources/vga8x16.jpg b/resources/vga8x16.jpg deleted file mode 100644 index 291a37ca85e7c6f79b5650cdd914f963c49d7787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38874 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 P3=9mOu6{1-oD!M System<'a> for BystanderAI { (rng.roll_dice(1, quip.available.len() as i32) - 1) as usize }; gamelog::Logger::new() + .append("The") .npc_name(&name.unwrap().name) .append_n("says \"") .append_n(&quip.available[quip_index]) diff --git a/src/camera.rs b/src/camera.rs index 345b905..9f4e59e 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -1,14 +1,14 @@ use super::{Hidden, Map, Mind, Position, Prop, Renderable}; -use rltk::{Point, Rltk, RGB}; +use rltk::prelude::*; use specs::prelude::*; use std::ops::Mul; const SHOW_BOUNDARIES: bool = false; -pub fn get_screen_bounds(ecs: &World, _ctx: &mut Rltk) -> (i32, i32, i32, i32) { +pub fn get_screen_bounds(ecs: &World, _ctx: &mut Rltk) -> (i32, i32, i32, i32, i32, i32) { let player_pos = ecs.fetch::(); //let (x_chars, y_chars) = ctx.get_char_size(); - let (x_chars, y_chars) = (80, 43); + let (x_chars, y_chars, x_offset, y_offset) = (69, 41, 1, 10); let centre_x = (x_chars / 2) as i32; let centre_y = (y_chars / 2) as i32; @@ -18,30 +18,26 @@ pub fn get_screen_bounds(ecs: &World, _ctx: &mut Rltk) -> (i32, i32, i32, i32) { let max_x = min_x + x_chars as i32; let max_y = min_y + y_chars as i32; - (min_x, max_x, min_y, max_y) + (min_x, max_x, min_y, max_y, x_offset, y_offset) } pub fn render_camera(ecs: &World, ctx: &mut Rltk) { let map = ecs.fetch::(); - let (min_x, max_x, min_y, max_y) = get_screen_bounds(ecs, ctx); - - // Might need to -1 here? - let map_width = map.width; - let map_height = map.height; + let (min_x, max_x, min_y, max_y, x_offset, y_offset) = get_screen_bounds(ecs, ctx); // Render map let mut y = 0; for t_y in min_y..max_y { let mut x = 0; for t_x in min_x..max_x { - if t_x >= 0 && t_x < map.width && t_y >= 0 && t_y < map_height { + if t_x >= 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_glyph(idx, &*map); - ctx.set(x, y, fg, bg, glyph); + ctx.set(x + x_offset, y + y_offset, fg, bg, glyph); } } else if SHOW_BOUNDARIES { - ctx.set(x, y, RGB::named(rltk::DARKSLATEGRAY), RGB::named(rltk::BLACK), rltk::to_cp437('#')); + ctx.set(x + x_offset, y + y_offset, RGB::named(DARKSLATEGRAY), RGB::named(BLACK), rltk::to_cp437('#')); } x += 1; } @@ -64,8 +60,7 @@ pub fn render_camera(ecs: &World, ctx: &mut Rltk) { let idx = map.xy_idx(pos.x, pos.y); let entity_offset_x = pos.x - min_x; let entity_offset_y = pos.y - min_y; - if entity_offset_x > 0 && entity_offset_x < map_width && entity_offset_y > 0 && entity_offset_y < map_height - { + 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 (_glyph, _fg, bg) = crate::map::themes::get_tile_glyph(idx, &*map); @@ -90,7 +85,7 @@ pub fn render_camera(ecs: &World, ctx: &mut Rltk) { } } if draw { - ctx.set(entity_offset_x, entity_offset_y, fg, bg, render.glyph); + ctx.set(entity_offset_x + x_offset, entity_offset_y + y_offset, fg, bg, render.glyph); } } } diff --git a/src/gui.rs b/src/gui.rs index ae49a94..f87563c 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -6,55 +6,81 @@ use rltk::{Rltk, VirtualKeyCode, RGB}; use specs::prelude::*; use std::collections::BTreeMap; +pub fn draw_lerping_bar( + ctx: &mut Rltk, + sx: i32, + sy: i32, + width: i32, + n: i32, + max: i32, + full_colour: RGB, + empty_colour: RGB, +) { + let percent = n as f32 / max as f32; + let fill_width = (percent * width as f32) as i32; + let bg = empty_colour.lerp(full_colour, percent); + let fg = RGB::named(rltk::BLACK); + for x in 0..width { + if x <= fill_width { + ctx.print_color(sx + x, sy, fg, bg, " "); + } else { + ctx.print_color(sx + x, sy, RGB::named(rltk::BLACK), RGB::named(rltk::BLACK), " "); + } + } + ctx.print(sx - 1, sy, "["); + let health = format!("{}/{}", n, max); + ctx.print_color(sx + 1, sy, fg, bg, health); + ctx.print(sx + width, sy, "]"); +} + pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { - ctx.draw_box_double(0, 43, 79, 7, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); + ctx.draw_hollow_box(0, 0, 70, 8, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Log box + ctx.draw_hollow_box(0, 9, 70, 42, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Camera box + ctx.draw_hollow_box(0, 52, 70, 3, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Stats box + ctx.draw_hollow_box(71, 0, 28, 55, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Side box // Render stats let combat_stats = ecs.read_storage::(); let players = ecs.read_storage::(); let hunger = ecs.read_storage::(); for (_player, stats, hunger) in (&players, &combat_stats, &hunger).join() { - let health = format!(" HP {}/{} ", stats.hp, stats.max_hp); - ctx.print_color_right(36, 43, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), &health); - ctx.draw_bar_horizontal(38, 43, 34, stats.hp, stats.max_hp, RGB::named(rltk::RED), RGB::named(rltk::BLACK)); + draw_lerping_bar(ctx, 2, 53, 26, stats.hp, stats.max_hp, RGB::from_u8(0, 255, 0), RGB::from_u8(255, 0, 0)); + //ctx.draw_bar_horizontal(2, 53, 26, stats.hp, stats.max_hp, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK)); + draw_lerping_bar(ctx, 2, 54, 26, stats.hp, stats.max_hp, RGB::named(rltk::BLUE), RGB::named(rltk::BLACK)); match hunger.state { HungerState::Satiated => { - ctx.print_color_right(72, 42, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "Satiated") + ctx.print_color_right(70, 53, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "Satiated") } HungerState::Normal => {} HungerState::Hungry => { - ctx.print_color_right(72, 42, RGB::named(rltk::BROWN1), RGB::named(rltk::BLACK), "Hungry") + ctx.print_color_right(70, 53, RGB::named(rltk::BROWN1), RGB::named(rltk::BLACK), "Hungry") } HungerState::Weak => { - ctx.print_color_right(72, 42, RGB::named(rltk::ORANGE), RGB::named(rltk::BLACK), "Weak") + ctx.print_color_right(70, 53, RGB::named(rltk::ORANGE), RGB::named(rltk::BLACK), "Weak") } HungerState::Fainting => { - ctx.print_color_right(72, 42, RGB::named(rltk::RED), RGB::named(rltk::BLACK), "Fainting") + ctx.print_color_right(70, 53, RGB::named(rltk::RED), RGB::named(rltk::BLACK), "Fainting") } } } // Render the message log at [1, 46], descending, with 6 lines. - gamelog::print_log(&mut rltk::BACKEND_INTERNAL.lock().consoles[0].console, Point::new(1, 44), true, 6); + gamelog::print_log(&mut rltk::BACKEND_INTERNAL.lock().consoles[0].console, Point::new(1, 7), false, 7); // Render id let map = ecs.fetch::(); - let id = format!(" D{} ", map.id); - ctx.print_color_right(78, 43, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), &id); + let id = format!("D{}", map.id); + ctx.print_color_right(70, 54, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), &id); // Render turn ctx.print_color_right( - 78, - 50, + 64, + 54, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), - &format!(" T{} ", crate::gamelog::get_event_count("turns")), + &format!("T{}", crate::gamelog::get_event_count("turns")), ); - // Render mouse cursor - let mouse_pos = ctx.mouse_pos(); - ctx.set_bg(mouse_pos.0, mouse_pos.1, RGB::named(rltk::YELLOW)); - draw_tooltips(ecs, ctx); } @@ -63,7 +89,15 @@ pub fn get_input_direction( ctx: &mut Rltk, function: fn(i: i32, j: i32, ecs: &mut World) -> RunState, ) -> RunState { - ctx.print_color(1, 1, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "In what direction? [0-9]/[YUHJKLBN]"); + let (_, _, _, _, x_offset, y_offset) = camera::get_screen_bounds(ecs, ctx); + + ctx.print_color( + 1 + x_offset, + 1 + y_offset, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + "In what direction? [0-9]/[YUHJKLBN]", + ); match ctx.key { None => return RunState::ActionWithDirection { function }, Some(key) => match key { @@ -83,7 +117,7 @@ pub fn get_input_direction( } fn draw_tooltips(ecs: &World, ctx: &mut Rltk) { - let (min_x, _max_x, min_y, _max_y) = camera::get_screen_bounds(ecs, ctx); + let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = camera::get_screen_bounds(ecs, ctx); let map = ecs.fetch::(); let names = ecs.read_storage::(); let positions = ecs.read_storage::(); @@ -91,8 +125,8 @@ fn draw_tooltips(ecs: &World, ctx: &mut Rltk) { let mouse_pos = ctx.mouse_pos(); let mut mouse_pos_adjusted = mouse_pos; - mouse_pos_adjusted.0 += min_x; - mouse_pos_adjusted.1 += min_y; + mouse_pos_adjusted.0 += min_x - x_offset; + mouse_pos_adjusted.1 += min_y - y_offset; if mouse_pos_adjusted.0 >= map.width || mouse_pos_adjusted.1 >= map.height || mouse_pos_adjusted.1 < 0 // Might need to be 1, and -1 from map height/width. @@ -120,7 +154,7 @@ fn draw_tooltips(ecs: &World, ctx: &mut Rltk) { for s in tooltip.iter() { for i in 0..2 { ctx.print_color( - arrow_pos.x - i, + arrow_pos.x + i, y, RGB::named(rltk::WHITE), RGB::named(rltk::GREY), @@ -211,7 +245,7 @@ pub fn print_options(inventory: BTreeMap<(String, String), i32>, mut y: i32, ctx pub fn show_help(ctx: &mut Rltk) -> YesNoResult { let mut x = 3; - let mut y = 3; + let mut y = 12; let height = 22; let width = 25; ctx.draw_box(x, y, width, height, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); @@ -379,12 +413,18 @@ pub fn remove_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Opti } pub fn ranged_target(gs: &mut State, ctx: &mut Rltk, range: i32, aoe: i32) -> (ItemMenuResult, Option) { - let (min_x, max_x, min_y, max_y) = camera::get_screen_bounds(&gs.ecs, ctx); + let (min_x, max_x, min_y, max_y, x_offset, y_offset) = camera::get_screen_bounds(&gs.ecs, ctx); let player_entity = gs.ecs.fetch::(); let player_pos = gs.ecs.fetch::(); let viewsheds = gs.ecs.read_storage::(); - ctx.print_color(1, 1, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Targeting which tile? [mouse input]"); + ctx.print_color( + 1 + x_offset, + 1 + y_offset, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + "Targeting which tile? [mouse input]", + ); // Highlight available cells let mut available_cells = Vec::new(); @@ -397,7 +437,7 @@ pub fn ranged_target(gs: &mut State, ctx: &mut Rltk, range: i32, aoe: i32) -> (I let screen_x = idx.x - min_x; let screen_y = idx.y - min_y; if screen_x > 0 && screen_x < (max_x - min_x) && screen_y > 0 && screen_y < (max_y - min_y) { - ctx.set_bg(screen_x, screen_y, RGB::named(rltk::BLUE)); + ctx.set_bg(screen_x + x_offset, screen_y + y_offset, RGB::named(rltk::BLUE)); available_cells.push(idx); } } @@ -426,15 +466,15 @@ pub fn ranged_target(gs: &mut State, ctx: &mut Rltk, range: i32, aoe: i32) -> (I rltk::field_of_view(Point::new(mouse_pos_adjusted.0, mouse_pos_adjusted.1), aoe, &*map); blast_tiles.retain(|p| p.x > 0 && p.x < map.width - 1 && p.y > 0 && p.y < map.height - 1); for tile in blast_tiles.iter() { - ctx.set_bg(tile.x - min_x, tile.y - min_y, RGB::named(rltk::DARKCYAN)); + ctx.set_bg(tile.x - min_x + x_offset, tile.y - min_y + y_offset, RGB::named(rltk::DARKCYAN)); } } - ctx.set_bg(mouse_pos.0, mouse_pos.1, RGB::named(rltk::CYAN)); + ctx.set_bg(mouse_pos.0 + x_offset, mouse_pos.1 + y_offset, RGB::named(rltk::CYAN)); if ctx.left_click { return (ItemMenuResult::Selected, Some(Point::new(mouse_pos_adjusted.0, mouse_pos_adjusted.1))); } } else { - ctx.set_bg(mouse_pos.0, mouse_pos.1, RGB::named(rltk::RED)); + ctx.set_bg(mouse_pos.0 + x_offset, mouse_pos.1 + y_offset, RGB::named(rltk::RED)); if ctx.left_click { return (ItemMenuResult::Cancel, None); } @@ -543,7 +583,7 @@ pub enum YesNoResult { pub fn game_over(ctx: &mut Rltk) -> YesNoResult { let mut x = 3; - let mut y = 3; + let mut y = 12; let width = 45; let height = 20; ctx.draw_box(x, y, width, height, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); diff --git a/src/main.rs b/src/main.rs index dfdf398..42aa92e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,12 +41,10 @@ mod rex_assets; extern crate lazy_static; // Embedded resources for use in wasm build -rltk::embedded_resource!(TERMINAL8X8, "../resources/terminal8x8.jpg"); -rltk::embedded_resource!(SCANLINESFS, "../resources/scanlines.fs"); -rltk::embedded_resource!(SCANLINESVS, "../resources/scanlines.vs"); +rltk::embedded_resource!(CURSES14X16, "../resources/curses_14x16.png"); //Consts -pub const SHOW_MAPGEN: bool = true; +pub const SHOW_MAPGEN: bool = false; #[derive(PartialEq, Copy, Clone)] pub enum RunState { @@ -475,22 +473,26 @@ impl GameState for State { } damage_system::delete_the_dead(&mut self.ecs); + + let _ = rltk::render_draw_buffer(ctx); } } -const DISPLAYWIDTH: i32 = 80; -const DISPLAYHEIGHT: i32 = 51; +const DISPLAYWIDTH: i32 = 100; +const DISPLAYHEIGHT: i32 = 56; fn main() -> rltk::BError { + rltk::link_resource!(CURSES14X16, "../resources/curses_14x16.png"); use rltk::RltkBuilder; - let mut context = RltkBuilder::simple(DISPLAYWIDTH, DISPLAYHEIGHT) - .unwrap() + let context = RltkBuilder::new() .with_title("rust-rl") - .with_tile_dimensions(16, 16) + .with_dimensions(DISPLAYWIDTH, DISPLAYHEIGHT) + .with_fps_cap(60.0) + .with_font("curses_14x16.png", 14, 16) + .with_tile_dimensions(14, 16) + .with_fancy_console(DISPLAYWIDTH, DISPLAYHEIGHT, "curses_14x16.png") //.with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "terminal8x8.jpg") .build()?; - context.with_post_scanlines(false); - //context.screen_burn_color(RGB::named((150, 255, 255))); let mut gs = State { ecs: World::new(), diff --git a/src/map/themes.rs b/src/map/themes.rs index 32b5a0b..6a20250 100644 --- a/src/map/themes.rs +++ b/src/map/themes.rs @@ -16,7 +16,7 @@ pub fn get_tile_glyph(idx: usize, map: &Map) -> (rltk::FontCharType, RGB, RGB) { let mut fg: RGB = RGB::new(); let mut bg: RGB; - let default_bg: RGB = RGB::from_u8(39, 67, 67); + let default_bg: RGB = RGB::from_u8(29, 50, 50); match map.tiles[idx] { TileType::Floor => { @@ -26,12 +26,12 @@ pub fn get_tile_glyph(idx: usize, map: &Map) -> (rltk::FontCharType, RGB, RGB) { } TileType::WoodFloor => { glyph = rltk::to_cp437('.'); - bg = RGB::from_u8(48, 43, 40); + bg = RGB::from_u8(41, 30, 20); } TileType::Fence => { glyph = rltk::to_cp437('='); - fg = RGB::from_u8(99, 48, 9); - bg = RGB::from_u8(48, 43, 33); + fg = RGB::from_u8(110, 24, 0); + bg = RGB::from_u8(45, 30, 10); } TileType::Wall => { let x = idx as i32 % map.width; @@ -47,40 +47,40 @@ pub fn get_tile_glyph(idx: usize, map: &Map) -> (rltk::FontCharType, RGB, RGB) { } TileType::Bridge => { glyph = rltk::to_cp437('.'); - bg = RGB::from_u8(59, 49, 43); + bg = RGB::from_u8(42, 48, 37); } TileType::Gravel => { glyph = rltk::to_cp437(';'); - bg = RGB::from_u8(39, 39, 54); + bg = RGB::from_u8(26, 26, 53); } TileType::Road => { glyph = rltk::to_cp437('.'); //fg = RGB::from_u8(112, 105, 94); - bg = RGB::from_u8(29, 45, 46); + bg = RGB::from_u8(8, 38, 40); } TileType::Grass => { glyph = rltk::to_cp437('"'); - bg = RGB::from_u8(39, 67, 39); + bg = RGB::from_u8(9, 65, 6); } TileType::Foliage => { glyph = rltk::to_cp437(':'); - bg = RGB::from_u8(35, 62, 36); + bg = RGB::from_u8(5, 60, 5); } TileType::HeavyFoliage => { glyph = rltk::to_cp437(';'); - bg = RGB::from_u8(32, 62, 32); + bg = RGB::from_u8(5, 55, 5); } TileType::Sand => { glyph = rltk::to_cp437('.'); - bg = RGB::from_u8(92, 92, 66); + bg = RGB::from_u8(70, 70, 21); } TileType::ShallowWater => { glyph = rltk::to_cp437('~'); - bg = RGB::from_u8(51, 63, 91); + bg = RGB::from_u8(24, 47, 99); } TileType::DeepWater => { glyph = rltk::to_cp437('~'); - bg = RGB::from_u8(36, 45, 61); + bg = RGB::from_u8(18, 33, 63); } } if map.bloodstains.contains(&idx) {