bloodsplosion
This commit is contained in:
parent
1de0c20b76
commit
465cd51a60
8 changed files with 112 additions and 89 deletions
|
|
@ -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$"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,28 @@ 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::<Bleeds>();
|
||||
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,
|
||||
|
|
@ -45,6 +67,9 @@ pub fn inflict_damage(ecs: &mut World, damage: &EffectSpawner, target: Entity) {
|
|||
Targets::Entity { target }
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Regular damage taken effect - use damagetype to determine which one to play.
|
||||
add_effect(
|
||||
None,
|
||||
EffectType::Particle {
|
||||
|
|
@ -56,9 +81,13 @@ pub fn inflict_damage(ecs: &mut World, damage: &EffectSpawner, target: Entity) {
|
|||
},
|
||||
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 });
|
||||
if let Some(bleeds) = bleeders.get(target) {
|
||||
add_effect(
|
||||
None,
|
||||
EffectType::Bloodstain { colour: bleeds.colour },
|
||||
Targets::Entity { target }
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String, Texture>,
|
|||
&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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue