From 465cd51a601e974da94da22ea669a4f2eaa96305 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Wed, 11 Oct 2023 17:33:51 +0100 Subject: [PATCH] bloodsplosion --- resources/atlas.json | 90 ++++++++++++++++++------------------- resources/atlas.png | Bin 5032 -> 5045 bytes src/consts/mod.rs | 4 +- src/consts/visuals.rs | 4 +- src/effects/damage.rs | 65 +++++++++++++++++++-------- src/gui/mod.rs | 27 +++++------ src/main.rs | 4 +- src/melee_combat_system.rs | 7 --- 8 files changed, 112 insertions(+), 89 deletions(-) diff --git a/resources/atlas.json b/resources/atlas.json index 1f10ce2..e6ec36b 100644 --- a/resources/atlas.json +++ b/resources/atlas.json @@ -497,7 +497,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (1)", + "filename": "explode1", "frame": {"x":976,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -505,7 +505,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (2)", + "filename": "explode2", "frame": {"x":992,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -513,7 +513,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (3)", + "filename": "explode3", "frame": {"x":1008,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -521,7 +521,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (4)", + "filename": "feet (1)", "frame": {"x":1024,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -529,7 +529,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (5)", + "filename": "feet (2)", "frame": {"x":1040,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -537,7 +537,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (6)", + "filename": "feet (3)", "frame": {"x":1056,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -545,7 +545,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "feet (7)", + "filename": "feet (4)", "frame": {"x":1072,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -553,7 +553,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "fence", + "filename": "feet (5)", "frame": {"x":1088,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -561,7 +561,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "fluff", + "filename": "feet (6)", "frame": {"x":1104,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -569,7 +569,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "fluff2", + "filename": "feet (7)", "frame": {"x":1120,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -577,7 +577,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-0", + "filename": "fence", "frame": {"x":1136,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -585,7 +585,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-1", + "filename": "fluff", "frame": {"x":1152,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -593,7 +593,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-3", + "filename": "fluff2", "frame": {"x":1168,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -601,13 +601,37 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-4", + "filename": "general-0", "frame": {"x":1184,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, "sourceSize": {"w":16,"h":24} }, +{ + "filename": "general-1", + "frame": {"x":1200,"y":0,"w":16,"h":24}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, + "sourceSize": {"w":16,"h":24} +}, +{ + "filename": "general-3", + "frame": {"x":1216,"y":0,"w":16,"h":24}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, + "sourceSize": {"w":16,"h":24} +}, +{ + "filename": "general-4", + "frame": {"x":1232,"y":0,"w":16,"h":24}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, + "sourceSize": {"w":16,"h":24} +}, { "filename": "general-5", "frame": {"x":944,"y":0,"w":16,"h":24}, @@ -618,7 +642,7 @@ }, { "filename": "general-6", - "frame": {"x":1200,"y":0,"w":16,"h":24}, + "frame": {"x":1248,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, @@ -626,7 +650,7 @@ }, { "filename": "general-7", - "frame": {"x":1216,"y":0,"w":16,"h":24}, + "frame": {"x":1264,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, @@ -642,7 +666,7 @@ }, { "filename": "general-9", - "frame": {"x":1232,"y":0,"w":16,"h":24}, + "frame": {"x":1280,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, @@ -650,7 +674,7 @@ }, { "filename": "general-10", - "frame": {"x":1248,"y":0,"w":16,"h":24}, + "frame": {"x":1296,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, @@ -666,30 +690,6 @@ }, { "filename": "general-12", - "frame": {"x":1264,"y":0,"w":16,"h":24}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, - "sourceSize": {"w":16,"h":24} -}, -{ - "filename": "general-13", - "frame": {"x":1280,"y":0,"w":16,"h":24}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, - "sourceSize": {"w":16,"h":24} -}, -{ - "filename": "general-14", - "frame": {"x":1296,"y":0,"w":16,"h":24}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":24}, - "sourceSize": {"w":16,"h":24} -}, -{ - "filename": "general-18", "frame": {"x":1312,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -697,7 +697,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-19", + "filename": "general-13", "frame": {"x":1328,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -705,7 +705,7 @@ "sourceSize": {"w":16,"h":24} }, { - "filename": "general-20", + "filename": "general-14", "frame": {"x":1344,"y":0,"w":16,"h":24}, "rotated": false, "trimmed": false, @@ -1879,6 +1879,6 @@ "format": "RGBA8888", "size": {"w":1776,"h":48}, "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:fd16d00f63ad5efff2a8369d469daa64:6efd3d3d31e2ef7389221fe30073fbfb:cbce6b53f0f49e0bf15173c25c41f876$" + "smartupdate": "$TexturePacker:SmartUpdate:b1eb58473092737ca14b8a94d167c56e:73ad4edad30f8b775d99c5028a8b814c:cbce6b53f0f49e0bf15173c25c41f876$" } } diff --git a/resources/atlas.png b/resources/atlas.png index 5956df8d0ed285e96d2bbe92947ddf23ba39a4be..6dedc282572e144317ce8853604012c687dc8bcc 100644 GIT binary patch delta 4996 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 I&MBb@0MHV{b^rhX diff --git a/src/consts/mod.rs b/src/consts/mod.rs index cb80d4d..7da4c53 100644 --- a/src/consts/mod.rs +++ b/src/consts/mod.rs @@ -28,5 +28,5 @@ pub const TILESIZE: Spritesize = Spritesize { pub const ZOOM_FACTOR: f32 = 2.0; pub const FONTSIZE: f32 = 16.0; -pub const DISPLAYWIDTH: u32 = 100; -pub const DISPLAYHEIGHT: u32 = 58; +pub const DISPLAYWIDTH: u32 = 120; +pub const DISPLAYHEIGHT: u32 = 67; diff --git a/src/consts/visuals.rs b/src/consts/visuals.rs index 3638c05..8b66e95 100644 --- a/src/consts/visuals.rs +++ b/src/consts/visuals.rs @@ -8,10 +8,10 @@ pub const WITH_DARKEN_BY_DISTANCE: bool = true; // If further away tiles should // the viewport itself uses 16x24 sprites - so this translates to 70x28 tiles drawn. // It also works nicely for zooming in, displaying 35x14 tiles cleanly onscreen. pub const VIEWPORT_W: i32 = 70; -pub const VIEWPORT_H: i32 = 45; +pub const VIEWPORT_H: i32 = 54; pub const TILES_IN_VIEWPORT_W: i32 = 70 / (ZOOM_FACTOR as i32); -pub const TILES_IN_VIEWPORT_H: i32 = 30 / (ZOOM_FACTOR as i32); +pub const TILES_IN_VIEWPORT_H: i32 = 36 / (ZOOM_FACTOR as i32); pub const TILE_LAYER: usize = 1; pub const ENTITY_LAYER: usize = 2; diff --git a/src/effects/damage.rs b/src/effects/damage.rs index 593dd74..02be7c9 100644 --- a/src/effects/damage.rs +++ b/src/effects/damage.rs @@ -38,27 +38,56 @@ pub fn inflict_damage(ecs: &mut World, damage: &EffectSpawner, target: Entity) { }; target_pool.hit_points.current -= ((amount as f32) * mult) as i32; let bleeders = ecs.read_storage::(); - if let Some(bleeds) = bleeders.get(target) { - add_effect( - None, - EffectType::Bloodstain { colour: bleeds.colour }, - Targets::Entity { target } - ); - } - add_effect( - None, - EffectType::Particle { - glyph: to_cp437('‼'), - sprite: "gnome".to_string(), // FIXME: REMOVE THE GNOMES - fg: RGB::named(ORANGE), - lifespan: DEFAULT_PARTICLE_LIFETIME, - delay: 0.0, - }, - Targets::Entity { target } - ); if target_pool.hit_points.current < 1 { super::DEAD_ENTITIES.lock().unwrap().push_back(target); add_effect(damage.source, EffectType::EntityDeath, Targets::Entity { target }); + for i in 0..3 { + let sprite = ( + match i { + 0 => "explode1", + 1 => "explode2", + _ => "explode3", + } + ).to_string(); + add_effect( + None, + EffectType::Particle { + glyph: to_cp437('‼'), + sprite, + fg: RGB::named(RED), + lifespan: 75.0, + delay: 75.0 * (i as f32), + }, + Targets::Entity { target } + ); + if let Some(bleeds) = bleeders.get(target) { + add_effect( + None, + EffectType::Bloodstain { colour: bleeds.colour }, + Targets::Entity { target } + ); + } + } + } else { + // Regular damage taken effect - use damagetype to determine which one to play. + add_effect( + None, + EffectType::Particle { + glyph: to_cp437('‼'), + sprite: "gnome".to_string(), // FIXME: REMOVE THE GNOMES + fg: RGB::named(ORANGE), + lifespan: DEFAULT_PARTICLE_LIFETIME, + delay: 0.0, + }, + Targets::Entity { target } + ); + if let Some(bleeds) = bleeders.get(target) { + add_effect( + None, + EffectType::Bloodstain { colour: bleeds.colour }, + Targets::Entity { target } + ); + } } } } diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 316ff9c..79e109c 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -47,7 +47,7 @@ use crate::consts::visuals::{ VIEWPORT_W, VIEWPORT_H, }; -use crate::consts::{ TILESIZE, FONTSIZE, DISPLAYWIDTH }; +use crate::consts::{ TILESIZE, FONTSIZE, DISPLAYWIDTH, DISPLAYHEIGHT }; use crate::Fonts; use notan::prelude::*; use notan::draw::{ Draw, DrawTextSection, DrawImages, DrawShapes }; @@ -159,11 +159,12 @@ pub fn draw_bar( full: Color, empty: Color ) { - let fill: f32 = (f32::max(current as f32, 0.0) / (max as f32)) * width; - draw.line((x * TILESIZE.x, y * TILESIZE.x), ((x + fill) * TILESIZE.x, y * TILESIZE.x)) + // % full * maximum width in tiles * tile size, to get width in px + let fill: f32 = (f32::max(current as f32, 0.0) / (max as f32)) * width * TILESIZE.x; + draw.line((x, y), (x + fill, y)) .color(full) .width(height); - draw.line(((x + fill) * TILESIZE.x, y * TILESIZE.x), ((x + width) * TILESIZE.x, y * TILESIZE.x)) + draw.line((x + fill, y), (x + width * TILESIZE.x, y)) .color(empty) .width(height); } @@ -182,34 +183,34 @@ pub fn draw_ui2(ecs: &World, draw: &mut Draw, atlas: &HashMap, &hunger, &skills, ).join() { - const BAR_X: f32 = 1.0; + let initial_x = 24.0 * TILESIZE.x; + let mut x = initial_x; + let row1 = ((DISPLAYHEIGHT as f32) - 3.0) * TILESIZE.x; // 2 tiles from the bottom, in px. + let row2 = row1 + TILESIZE.x; // 1 tile below row2. + const BAR_X: f32 = 1.0 * TILESIZE.x; const BAR_WIDTH: f32 = 22.0; draw_bar( draw, BAR_X, - 55.5, + row1 + 8.0, BAR_WIDTH, TILESIZE.x, stats.hit_points.current, stats.hit_points.max, Color::GREEN, - Color::BLACK + Color::RED ); draw_bar( draw, BAR_X, - 56.5, + row2 + 8.0, BAR_WIDTH, TILESIZE.x, stats.mana.current, stats.mana.max, Color::BLUE, - Color::BLACK + Color::RED ); - let initial_x = 24.0 * TILESIZE.x; - let mut x = initial_x; - let row1 = 55.0 * TILESIZE.x; - let row2 = row1 + TILESIZE.x; let hp_colours: (RGB, RGB, RGB) = ( RGB::named(GREEN), RGB::named(RED), diff --git a/src/main.rs b/src/main.rs index 7d94437..a4814b8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,8 +20,8 @@ fn main() -> Result<(), String> { let win_config = WindowConfig::new() .set_size(DISPLAYWIDTH * (TILESIZE.x as u32), DISPLAYHEIGHT * (TILESIZE.x as u32)) .set_title("RUST-RL") - .set_resizable(false) - //.set_fullscreen(true) -- this can be uncommented once the log scales too. Ditto for set_resizable(true). + .set_resizable(true) + .set_fullscreen(true) .set_taskbar_icon_data(Some(include_bytes!("../resources/icon.png"))) .set_vsync(true); notan diff --git a/src/melee_combat_system.rs b/src/melee_combat_system.rs index eb7ebc4..487feba 100644 --- a/src/melee_combat_system.rs +++ b/src/melee_combat_system.rs @@ -295,13 +295,6 @@ impl<'a> System<'a> for MeleeCombatSystem { ); } } - // TODO: Take out these animations (and for missing too), and turn - // them into effects - can use the damage type that gets passed in - // to determine the effect, colour, etc. - let pos = positions.get(wants_melee.target); - if let Some(pos) = pos { - particle_builder.damage_taken(pos.x, pos.y); - } add_effect( Some(entity), EffectType::Damage { amount: damage, damage_type: weapon_info.damage_type },