From dbe6ac0fc8e2e07785f3d2ff54b474ea71bb9b08 Mon Sep 17 00:00:00 2001
From: Sam <samuelkeiffer@gmail.com>
Date: Tue, 29 Sep 2020 19:47:11 -0500
Subject: [PATCH] Addressed comments

---
 assets/voxygen/i18n/en.ron                |   2 +-
 assets/voxygen/shaders/particle-vert.glsl |   6 +-
 common/src/comp/beam.rs                   |   4 +-
 common/src/states/basic_beam.rs           |   2 +-
 common/src/states/basic_melee.rs          |  13 +-
 common/src/states/basic_ranged.rs         |   2 +-
 common/src/states/boost.rs                |   2 +-
 common/src/states/charged_ranged.rs       |   2 +-
 common/src/states/dash_melee.rs           |   2 +-
 common/src/states/ground_shockwave.rs     |   2 +-
 common/src/states/leap_melee.rs           |   2 +-
 common/src/states/spin_melee.rs           |   2 +-
 common/src/sys/beam.rs                    |  40 +--
 common/src/sys/character_behavior.rs      |   2 -
 common/src/sys/combat.rs                  |  11 +-
 common/src/sys/phys.rs                    |  12 +-
 items.csv                                 | 371 ----------------------
 server/src/events/entity_manipulation.rs  |   9 +-
 voxygen/src/hud/hotbar.rs                 |  11 +-
 voxygen/src/render/pipelines/particle.rs  |   8 +-
 20 files changed, 52 insertions(+), 453 deletions(-)
 delete mode 100644 items.csv

diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron
index b9d8bb19fc..3999e25769 100644
--- a/assets/voxygen/i18n/en.ron
+++ b/assets/voxygen/i18n/en.ron
@@ -182,7 +182,7 @@ https://account.veloren.net."#,
         "hud.chat.pvp_melee_kill_msg": "[{attacker}] defeated [{victim}]",
         "hud.chat.pvp_ranged_kill_msg": "[{attacker}] shot [{victim}]",
         "hud.chat.pvp_explosion_kill_msg": "[{attacker}] blew up [{victim}]",
-        "hud.chat.pvp_explosion_kill_msg": "[{attacker}] used magic to kill [{victim}]",
+        "hud.chat.pvp_energy_kill_msg": "[{attacker}] used magic to kill [{victim}]",
 
         "hud.chat.npc_melee_kill_msg": "{attacker} killed [{victim}]",
         "hud.chat.npc_ranged_kill_msg": "{attacker} shot [{victim}]",
diff --git a/assets/voxygen/shaders/particle-vert.glsl b/assets/voxygen/shaders/particle-vert.glsl
index 0a2e020ca4..87d09d4a27 100644
--- a/assets/voxygen/shaders/particle-vert.glsl
+++ b/assets/voxygen/shaders/particle-vert.glsl
@@ -23,7 +23,7 @@ in vec3 inst_pos;
 in float inst_time;
 in float inst_lifespan;
 in float inst_entropy;
-in vec3 inst_pos2;
+in vec3 inst_dir;
 in int inst_mode;
 
 out vec3 f_pos;
@@ -271,10 +271,10 @@ void main() {
 		);
 	} else if (inst_mode == HEALING_BEAM) {
 		attr = Attr(
-			spiral_motion(inst_pos2 - inst_pos, 0.3 * (floor(2 * rand0 + 0.5) - 0.5) * min(linear_scale(10), 1), lifetime / inst_lifespan),
+			spiral_motion(inst_dir, 0.3 * (floor(2 * rand0 + 0.5) - 0.5) * min(linear_scale(10), 1), lifetime / inst_lifespan),
 			vec3((1.7 - 0.7 * abs(floor(2 * rand0 - 0.5) + 0.5)) * (1.5 + 0.5 * sin(tick.x * 10 - lifetime * 4))),
 			vec4(vec3(0.3, 0.7 + 0.4 * sin(tick.x * 8 - lifetime * 3), 0.3 + 0.1 * sin (tick.x * 2)), 0.3),
-			spin_in_axis(inst_pos2, tick.z)
+			spin_in_axis(inst_dir, tick.z)
 		);
 	} else if (inst_mode == ENERGY_NATURE) {
 		attr = Attr(
diff --git a/common/src/comp/beam.rs b/common/src/comp/beam.rs
index 9f98dae078..387bc98461 100644
--- a/common/src/comp/beam.rs
+++ b/common/src/comp/beam.rs
@@ -1,6 +1,6 @@
 use crate::sync::Uid;
 use serde::{Deserialize, Serialize};
-use specs::{Component, FlaggedStorage, VecStorage};
+use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::time::Duration;
 
@@ -45,5 +45,5 @@ pub struct Beam {
 }
 
 impl Component for Beam {
-    type Storage = VecStorage<Self>;
+    type Storage = IdvStorage<Self>;
 }
diff --git a/common/src/states/basic_beam.rs b/common/src/states/basic_beam.rs
index 7ac95f556e..baa3b253cf 100644
--- a/common/src/states/basic_beam.rs
+++ b/common/src/states/basic_beam.rs
@@ -3,7 +3,7 @@ use crate::{
     event::ServerEvent,
     states::utils::{StageSection, *},
     sync::Uid,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/basic_melee.rs b/common/src/states/basic_melee.rs
index 3e7cfa3633..0d98e0aeac 100644
--- a/common/src/states/basic_melee.rs
+++ b/common/src/states/basic_melee.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{Attacking, CharacterState, EnergySource, StateUpdate},
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
@@ -46,14 +46,11 @@ impl CharacterBehavior for Data {
                 exhausted: false,
             });
         } else if !self.exhausted {
-            let (damage, heal): (u32, u32);
-            if self.base_healthchange > 0 {
-                heal = self.base_healthchange as u32;
-                damage = 0;
+            let (damage, heal) = if self.base_healthchange > 0 {
+                (0, self.base_healthchange as u32)
             } else {
-                damage = (-self.base_healthchange) as u32;
-                heal = 0;
-            }
+                ((-self.base_healthchange) as u32, 0)
+            };
             // Hit attempt
             data.updater.insert(data.entity, Attacking {
                 base_damage: damage,
diff --git a/common/src/states/basic_ranged.rs b/common/src/states/basic_ranged.rs
index 4b0c928c64..48935d99bf 100644
--- a/common/src/states/basic_ranged.rs
+++ b/common/src/states/basic_ranged.rs
@@ -2,7 +2,7 @@ use crate::{
     comp::{Body, CharacterState, Gravity, LightEmitter, Projectile, StateUpdate},
     event::ServerEvent,
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/boost.rs b/common/src/states/boost.rs
index 3916109536..52f1994152 100644
--- a/common/src/states/boost.rs
+++ b/common/src/states/boost.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{Attacking, CharacterState, EnergySource, StateUpdate},
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/charged_ranged.rs b/common/src/states/charged_ranged.rs
index 8f501785d3..1386b8b4d5 100644
--- a/common/src/states/charged_ranged.rs
+++ b/common/src/states/charged_ranged.rs
@@ -5,7 +5,7 @@ use crate::{
     },
     event::ServerEvent,
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/dash_melee.rs b/common/src/states/dash_melee.rs
index 9e94f3768b..f336e7f491 100644
--- a/common/src/states/dash_melee.rs
+++ b/common/src/states/dash_melee.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{Attacking, CharacterState, EnergySource, StateUpdate},
     states::utils::{StageSection, *},
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/ground_shockwave.rs b/common/src/states/ground_shockwave.rs
index 81038fc58b..5142a87d68 100644
--- a/common/src/states/ground_shockwave.rs
+++ b/common/src/states/ground_shockwave.rs
@@ -2,7 +2,7 @@ use crate::{
     comp::{shockwave, Attacking, CharacterState, StateUpdate},
     event::ServerEvent,
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/leap_melee.rs b/common/src/states/leap_melee.rs
index 40879e0a6b..5575c110b7 100644
--- a/common/src/states/leap_melee.rs
+++ b/common/src/states/leap_melee.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{Attacking, CharacterState, StateUpdate},
     states::utils::*,
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/states/spin_melee.rs b/common/src/states/spin_melee.rs
index 111930c26a..5d5cfb4445 100644
--- a/common/src/states/spin_melee.rs
+++ b/common/src/states/spin_melee.rs
@@ -1,7 +1,7 @@
 use crate::{
     comp::{Attacking, CharacterState, EnergySource, StateUpdate},
     states::utils::{StageSection, *},
-    sys::character_behavior::*,
+    sys::character_behavior::{CharacterBehavior, JoinData},
 };
 use serde::{Deserialize, Serialize};
 use std::time::Duration;
diff --git a/common/src/sys/beam.rs b/common/src/sys/beam.rs
index c5e1304c38..d39a4b4c3a 100644
--- a/common/src/sys/beam.rs
+++ b/common/src/sys/beam.rs
@@ -168,13 +168,8 @@ impl<'a> System<'a> for Sys {
                     }
                     // Don't heal if outside group
                     // Don't damage in the same group
-                    let (mut is_heal, mut is_damage) = (false, false);
-                    if !same_group && (beam_segment.damage > 0) {
-                        is_damage = true;
-                    }
-                    if same_group && (beam_segment.heal > 0) {
-                        is_heal = true;
-                    }
+                    let is_damage = !same_group && (beam_segment.damage > 0);
+                    let is_heal = same_group && (beam_segment.heal > 0);
                     if !is_heal && !is_damage {
                         continue;
                     }
@@ -214,20 +209,19 @@ impl<'a> System<'a> for Sys {
                                 },
                             },
                         });
-                        server_emitter.emit(ServerEvent::Damage {
-                            uid: beam_segment.owner.unwrap_or(*uid),
-                            change: HealthChange {
-                                amount: (-damage.healthchange * beam_segment.lifesteal_eff) as i32,
-                                cause: HealthSource::Healing {
-                                    by: beam_segment.owner,
+                        if beam_segment.lifesteal_eff > 0.0 {
+                            server_emitter.emit(ServerEvent::Damage {
+                                uid: beam_segment.owner.unwrap_or(*uid),
+                                change: HealthChange {
+                                    amount: (-damage.healthchange * beam_segment.lifesteal_eff)
+                                        as i32,
+                                    cause: HealthSource::Healing {
+                                        by: beam_segment.owner,
+                                    },
                                 },
-                            },
-                        });
-                        if let Some(energy_mut) = beam_segment
-                            .owner
-                            .and_then(|o| uid_allocator.retrieve_entity_internal(o.into()))
-                            .and_then(|o| energies.get_mut(o))
-                        {
+                            });
+                        }
+                        if let Some(energy_mut) = beam_owner.and_then(|o| energies.get_mut(o)) {
                             energy_mut.change_by(
                                 beam_segment.energy_regen as i32,
                                 EnergySource::HitEnemy,
@@ -235,11 +229,7 @@ impl<'a> System<'a> for Sys {
                         }
                     }
                     if is_heal {
-                        if let Some(energy_mut) = beam_segment
-                            .owner
-                            .and_then(|o| uid_allocator.retrieve_entity_internal(o.into()))
-                            .and_then(|o| energies.get_mut(o))
-                        {
+                        if let Some(energy_mut) = beam_owner.and_then(|o| energies.get_mut(o)) {
                             if energy_mut
                                 .try_change_by(
                                     -(beam_segment.energy_drain as i32), // Stamina use
diff --git a/common/src/sys/character_behavior.rs b/common/src/sys/character_behavior.rs
index 9ac69116cb..4ec197b19e 100644
--- a/common/src/sys/character_behavior.rs
+++ b/common/src/sys/character_behavior.rs
@@ -64,7 +64,6 @@ pub struct JoinData<'a> {
     pub body: &'a Body,
     pub physics: &'a PhysicsState,
     pub attacking: Option<&'a Attacking>,
-    pub beam: Option<&'a Beam>,
     pub updater: &'a LazyUpdate,
 }
 
@@ -128,7 +127,6 @@ impl<'a> JoinData<'a> {
             body: j.10,
             physics: j.11,
             attacking: j.12,
-            beam: j.13,
             updater,
             dt,
         }
diff --git a/common/src/sys/combat.rs b/common/src/sys/combat.rs
index ba622ffa5b..a9327b96ef 100644
--- a/common/src/sys/combat.rs
+++ b/common/src/sys/combat.rs
@@ -99,7 +99,7 @@ impl<'a> System<'a> for Sys {
                 let scale_b = scale_b_maybe.map_or(1.0, |s| s.0);
                 let rad_b = body_b.radius() * scale_b;
 
-                // Check if it is a damaging hit
+                // Check if it is a hit
                 if entity != b
                     && !stats_b.is_dead
                     // Spherical wedge shaped attack field
@@ -113,13 +113,8 @@ impl<'a> System<'a> for Sys {
                         .unwrap_or(false);
                     // Don't heal if outside group
                     // Don't damage in the same group
-                    let (mut is_heal, mut is_damage) = (false, false);
-                    if !same_group && (attack.base_damage > 0) {
-                        is_damage = true;
-                    }
-                    if same_group && (attack.base_heal > 0) {
-                        is_heal = true;
-                    }
+                    let is_damage = !same_group && (attack.base_damage > 0);
+                    let is_heal = same_group && (attack.base_heal > 0);
                     if !is_heal && !is_damage {
                         continue;
                     }
diff --git a/common/src/sys/phys.rs b/common/src/sys/phys.rs
index 7d45102ca1..a2b5947b6e 100644
--- a/common/src/sys/phys.rs
+++ b/common/src/sys/phys.rs
@@ -135,7 +135,7 @@ impl<'a> System<'a> for Sys {
         // it means the step needs to take into account the speeds of both
         // entities.
         span!(guard, "Apply pushback");
-        for (entity, pos, scale, mass, collider, _, _, physics, projectile, _) in (
+        for (entity, pos, scale, mass, collider, _, _, physics, projectile) in (
             &entities,
             &positions,
             scales.maybe(),
@@ -147,13 +147,10 @@ impl<'a> System<'a> for Sys {
             // TODO: if we need to avoid collisions for other things consider moving whether it
             // should interact into the collider component or into a separate component
             projectiles.maybe(),
-            beams.maybe(),
         )
             .join()
-            .filter(|(_, _, _, _, _, _, sticky, physics, _, beam)| {
-                sticky.is_none()
-                    || (physics.on_wall.is_none() && !physics.on_ground)
-                    || beam.is_none()
+            .filter(|(_, _, _, _, _, _, sticky, physics, _)| {
+                sticky.is_none() || (physics.on_wall.is_none() && !physics.on_ground)
             })
         {
             let scale = scale.map(|s| s.0).unwrap_or(1.0);
@@ -192,10 +189,9 @@ impl<'a> System<'a> for Sys {
                 colliders.maybe(),
                 !&mountings,
                 groups.maybe(),
-                beams.maybe(),
+                !&beams,
             )
                 .join()
-                .filter(|(_, _, _, _, _, _, _, _, beam)| beam.is_none())
             {
                 if entity == entity_other || (ignore_group.is_some() && ignore_group == group_b) {
                     continue;
diff --git a/items.csv b/items.csv
deleted file mode 100644
index 46259db381..0000000000
--- a/items.csv
+++ /dev/null
@@ -1,371 +0,0 @@
-Path,Name,Kind
-common.items.armor.back.admin,Admin's Cape,Admin
-common.items.armor.back.dungeon_purple-0,Purple Cultist Cape,DungPurp0
-common.items.armor.back.leather_adventurer,Agile Cape,Short2
-common.items.armor.back.short_0,Short leather Cape,Short0
-common.items.armor.back.short_1,Green Blanket,Short1
-common.items.armor.belt.assassin,Assassin Belt,Assassin
-common.items.armor.belt.bonerattler,Bonerattler Belt,Bonerattler
-common.items.armor.belt.cloth_blue_0,Blue Linen Belt,ClothBlue0
-common.items.armor.belt.cloth_green_0,Green Linen Belt,ClothGreen0
-common.items.armor.belt.cloth_purple_0,Purple Linen Belt,ClothPurple0
-common.items.armor.belt.cultist_belt,Cultist Belt,Cultist
-common.items.armor.belt.druid,Druid's Belt,Druid
-common.items.armor.belt.leather_0,Swift Belt,Leather0
-common.items.armor.belt.leather_2,Leather Belt,Leather2
-common.items.armor.belt.leather_adventurer,Agile Belt,Leather2
-common.items.armor.belt.plate_0,Iron Belt,Plate0
-common.items.armor.belt.steel_0,Steel Belt,Steel0
-common.items.armor.belt.tarasque,Tarasque Belt,Tarasque
-common.items.armor.belt.twig,Twig Belt,Twig
-common.items.armor.belt.twigsflowers,Flowery Belt,Twigsflowers
-common.items.armor.belt.twigsleaves,Leafy Belt,Twigsleaves
-common.items.armor.chest.assassin,Assassin Chest,Assassin
-common.items.armor.chest.bonerattler,Bonerattler Cuirass,Bonerattler
-common.items.armor.chest.cloth_blue_0,Blue Linen Chest,ClothBlue0
-common.items.armor.chest.cloth_green_0,Green Linen Chest,ClothGreen0
-common.items.armor.chest.cloth_purple_0,Purple Linen Chest,ClothPurple0
-common.items.armor.chest.cultist_chest_blue,Blue Cultist Chest,CultistBlue
-common.items.armor.chest.cultist_chest_purple,Purple Cultist Chest,CultistPurple
-common.items.armor.chest.druid,Druid's Vest,Druid
-common.items.armor.chest.leather_0,Swift Chest,Leather0
-common.items.armor.chest.leather_2,Leather Cuirass,Leather2
-common.items.armor.chest.leather_adventurer,Agile Chest,Leather2
-common.items.armor.chest.plate_green_0,Iron Chestplate,PlateGreen0
-common.items.armor.chest.steel_0,Steel Cuirass,Steel0
-common.items.armor.chest.tarasque,Tarasque Cuirass,Tarasque
-common.items.armor.chest.twig,Twig Shirt,Twig
-common.items.armor.chest.twigsflowers,Flowery Shirt,Twigsflowers
-common.items.armor.chest.twigsleaves,Leafy Shirt,Twigsleaves
-common.items.armor.chest.worker_green_0,Green Worker Shirt,WorkerGreen0
-common.items.armor.chest.worker_green_1,Green Worker Shirt,WorkerGreen1
-common.items.armor.chest.worker_orange_0,Orange Worker Shirt,WorkerOrange0
-common.items.armor.chest.worker_orange_1,Orange Worker Shirt,WorkerOrange1
-common.items.armor.chest.worker_purple_0,Purple Worker Shirt,WorkerPurple0
-common.items.armor.chest.worker_purple_1,Purple Worker Shirt,WorkerPurple1
-common.items.armor.chest.worker_red_0,Red Worker Shirt,WorkerRed0
-common.items.armor.chest.worker_red_1,Red Worker Shirt,WorkerRed1
-common.items.armor.chest.worker_yellow_0,Yellow Worker Shirt,WorkerYellow0
-common.items.armor.chest.worker_yellow_1,Yellow Worker Shirt,WorkerYellow1
-common.items.armor.foot.assassin,Assassin Boots,Assassin
-common.items.armor.foot.bonerattler,Bonerattler Boots,Bonerattler
-common.items.armor.foot.cloth_blue_0,Blue Linen Boots,ClothBlue0
-common.items.armor.foot.cloth_green_0,Green Linen Boots,ClothGreen0
-common.items.armor.foot.cloth_purple_0,Purple Linen Boots,ClothPurple0
-common.items.armor.foot.cultist_boots,Cultist Boots,Cultist
-common.items.armor.foot.druid,Druid's Slippers,Druid
-common.items.armor.foot.jackalope_slippers,Fluffy Jackalope Slippers,JackalopeSlips
-common.items.armor.foot.leather_0,Swift Boots,Leather0
-common.items.armor.foot.leather_2,Leather Boots,Leather2
-common.items.armor.foot.leather_adventurer,Agile Kickers,Leather2
-common.items.armor.foot.plate_0,Iron Feet,Plate0
-common.items.armor.foot.steel_0,Steel Boots,Steel0
-common.items.armor.foot.tarasque,Tarasque Boots,Tarasque
-common.items.armor.foot.twig,Twig Boots,Twig
-common.items.armor.foot.twigsflowers,Flowery Boots,Twigsflowers
-common.items.armor.foot.twigsleaves,Leafy Boots,Twigsleaves
-common.items.armor.hand.assassin,Assassin Gloves,Assassin
-common.items.armor.hand.bonerattler,Bonerattler Gauntlets,Bonerattler
-common.items.armor.hand.cloth_blue_0,Blue Linen Wrists,ClothBlue0
-common.items.armor.hand.cloth_green_0,Green Linen Wrists,ClothGreen0
-common.items.armor.hand.cloth_purple_0,Purple Silk Wrists,ClothPurple0
-common.items.armor.hand.cultist_hands_blue,Blue Cultist Gloves,CultistBlue
-common.items.armor.hand.cultist_hands_purple,Purple Cultist Gloves,CultistPurple
-common.items.armor.hand.druid,Druid's Gloves,Druid
-common.items.armor.hand.leather_0,Swift Gloves,Leather0
-common.items.armor.hand.leather_2,Leather Gloves,Leather2
-common.items.armor.hand.leather_adventurer,Agile Gauntlets,Leather2
-common.items.armor.hand.plate_0,Iron Handguards,Plate0
-common.items.armor.hand.steel_0,Steel Gauntlets,Steel0
-common.items.armor.hand.tarasque,Tarasque Gauntlets,Tarasque
-common.items.armor.hand.twig,Twig Wraps,Twig
-common.items.armor.hand.twigsflowers,Flowery Wraps,Twigsflowers
-common.items.armor.hand.twigsleaves,Leafy Wraps,Twigsleaves
-common.items.armor.head.assa_mask_0,Dark Assassin Mask,AssaMask0
-common.items.armor.head.leather_0,Swift Leather Cap,Leather0
-common.items.armor.neck.neck_0,Plain Necklace,Neck0
-common.items.armor.neck.neck_1,Gem of lesser Protection,Neck1
-common.items.armor.pants.assassin,Assassin Pants,Assassin
-common.items.armor.pants.bonerattler,Bonerattler Chausses,Bonerattler
-common.items.armor.pants.cloth_blue_0,Blue Linen Skirt,ClothBlue0
-common.items.armor.pants.cloth_green_0,Green Linen Skirt,ClothGreen0
-common.items.armor.pants.cloth_purple_0,Purple Linen Skirt,ClothPurple0
-common.items.armor.pants.cultist_legs_blue,Blue Cultist Skirt,CultistBlue
-common.items.armor.pants.cultist_legs_purple,Purple Cultist Skirt,CultistPurple
-common.items.armor.pants.druid,Druid's Kilt,Druid
-common.items.armor.pants.hunting,Hunting Pants,Hunting
-common.items.armor.pants.leather_0,Swift Pants,Leather0
-common.items.armor.pants.leather_2,Leather Leg Armour,Leather2
-common.items.armor.pants.leather_adventurer,Agile Pantalons,Leather2
-common.items.armor.pants.plate_green_0,Iron Legguards,PlateGreen0
-common.items.armor.pants.steel_0,Steel Chausses,Steel0
-common.items.armor.pants.tarasque,Tarasque Chausses,Tarasque
-common.items.armor.pants.twig,Twig Pants,Twig
-common.items.armor.pants.twigsflowers,Flowery Pants,Twigsflowers
-common.items.armor.pants.twigsleaves,Leafy Pants,Twigsleaves
-common.items.armor.pants.worker_blue_0,Blue Worker Pants,WorkerBlue0
-common.items.armor.ring.ring_0,Scratched Ring,Ring0
-common.items.armor.shoulder.assassin,Assassin Shoulder Guard,Assassin
-common.items.armor.shoulder.bonerattler,Bonerattler Shoulder Pad,Bonerattler
-common.items.armor.shoulder.cloth_blue_0,Blue Linen Coat,ClothBlue0
-common.items.armor.shoulder.cloth_blue_1,Blue Cloth Pads,ClothBlue1
-common.items.armor.shoulder.cloth_green_0,Green Linen Coat,ClothGreen0
-common.items.armor.shoulder.cloth_purple_0,Purple Linen Coat,ClothPurple0
-common.items.armor.shoulder.cultist_shoulder_blue,Blue Cultist Mantle,CultistBlue
-common.items.armor.shoulder.cultist_shoulder_purple,Purple Cultist Mantle,CultistPurple
-common.items.armor.shoulder.druidshoulder,Druid Shoulders,DruidShoulder
-common.items.armor.shoulder.iron_spikes,Iron Spiked Pauldrons,IronSpikes
-common.items.armor.shoulder.leather_0,Leather Pauldrons,Leather0
-common.items.armor.shoulder.leather_1,Swift Shoulderpads,Leather1
-common.items.armor.shoulder.leather_2,Leather Shoulder Pad,Leather2
-common.items.armor.shoulder.leather_adventurer,Agile Guards,Leather2
-common.items.armor.shoulder.leather_iron_0,Iron and Leather Spaulders,IronLeather0
-common.items.armor.shoulder.leather_iron_1,Iron and Leather Spaulders,IronLeather1
-common.items.armor.shoulder.leather_iron_2,Iron and Leather Spaulders,IronLeather2
-common.items.armor.shoulder.leather_iron_3,Iron and Leather Spaulders,IronLeather3
-common.items.armor.shoulder.leather_strips,Leather Strips,LeatherStrips
-common.items.armor.shoulder.plate_0,Iron Shoulderguards,Plate0
-common.items.armor.shoulder.steel_0,Steel Shoulder Pad,Steel0
-common.items.armor.shoulder.tarasque,Tarasque Shoulder Pad,Tarasque
-common.items.armor.shoulder.twigs,Twiggy Shoulders,TwiggyShoulder
-common.items.armor.shoulder.twigsflowers,Flowery Shoulders,FlowerShoulder
-common.items.armor.shoulder.twigsleaves,Leafy Shoulders,LeafyShoulder
-common.items.armor.starter.lantern,Black Lantern,Black0
-common.items.armor.starter.rugged_chest,Rugged Shirt,Rugged0
-common.items.armor.starter.rugged_pants,Rugged Commoner's Pants,Rugged0
-common.items.armor.starter.sandals_0,Worn out Sandals,Sandal0
-common.items.armor.tabard.admin,Admin's Tabard,Admin
-common.items.boss_drops.exp_flask,Flask of Velorite Dusk,
-common.items.boss_drops.lantern,Magic Lantern,Blue0
-common.items.boss_drops.potions,Potent Potion,
-common.items.boss_drops.xp_potion,Potion of Skill,
-common.items.consumable.potion_big,Large Potion,
-common.items.consumable.potion_med,Medium Potion,
-common.items.consumable.potion_minor,Minor Potion,
-common.items.crafting_ing.empty_vial,Empty Vial,
-common.items.crafting_ing.leather_scraps,Leather Scraps,
-common.items.crafting_ing.shiny_gem,Shiny Gem,
-common.items.crafting_ing.stones,Stones,
-common.items.crafting_ing.twigs,Twigs,
-common.items.crafting_tools.craftsman_hammer,Craftsman Hammer,
-common.items.crafting_tools.mortar_pestle,Mortar and Pestle,
-common.items.debug.admin,Admin's Tabard,Admin
-common.items.debug.admin_back,Admin's Cape,Admin
-common.items.debug.boost,Belzeshrub the Broom-God,Boost
-common.items.debug.cultist_belt,Cultist Belt,Cultist
-common.items.debug.cultist_boots,Cultist Boots,Cultist
-common.items.debug.cultist_chest_blue,Blue Cultist Chest,CultistBlue
-common.items.debug.cultist_hands_blue,Blue Cultist Gloves,CultistBlue
-common.items.debug.cultist_legs_blue,Blue Cultist Skirt,CultistBlue
-common.items.debug.cultist_purp_2h_boss-0,Admin Greatsword,CultPurp0
-common.items.debug.cultist_shoulder_blue,Blue Cultist Mantle,CultistBlue
-common.items.debug.dungeon_purple-0,Purple Admin Cape,DungPurp0
-common.items.debug.possess,Belzeshrub the Broom-God,Boost
-common.items.flowers.blue,Blue Flower,
-common.items.flowers.pink,Pink Flower,
-common.items.flowers.red,Red Flower,
-common.items.flowers.sun,Sunflower,
-common.items.flowers.white,White flower,
-common.items.flowers.yellow,Yellow Flower,
-common.items.food.apple,Apple,
-common.items.food.apple_mushroom_curry,Mushroom Curry,
-common.items.food.apple_stick,Apple Stick,
-common.items.food.cheese,Dwarven Cheese,
-common.items.food.coconut,Coconut,
-common.items.food.mushroom,Mushroom,
-common.items.food.mushroom_stick,Mushroom Stick,
-common.items.grasses.long,Long Grass,
-common.items.grasses.medium,Medium Grass,
-common.items.grasses.short,Short Grass,
-common.items.lantern.black_0,Black Lantern,Black0
-common.items.lantern.blue_0,Cool Blue Lantern,Blue0
-common.items.lantern.green_0,Lime Zest Lantern,Green0
-common.items.lantern.red_0,Red Lantern,Red0
-common.items.npc_armor.back.dungeon_purple-0,Purple Cultist Cape,DungPurp0
-common.items.npc_armor.belt.cultist_belt,Cultist Belt,Cultist
-common.items.npc_armor.chest.cultist_chest_purple,Purple Cultist Chest,CultistPurple
-common.items.npc_armor.chest.worker_green_0,Green Worker Shirt,WorkerGreen0
-common.items.npc_armor.chest.worker_green_1,Green Worker Shirt,WorkerGreen1
-common.items.npc_armor.chest.worker_orange_0,Orange Worker Shirt,WorkerOrange0
-common.items.npc_armor.chest.worker_orange_1,Orange Worker Shirt,WorkerOrange1
-common.items.npc_armor.chest.worker_purple_0,Purple Worker Shirt,WorkerPurple0
-common.items.npc_armor.chest.worker_purple_1,Purple Worker Shirt,WorkerPurple1
-common.items.npc_armor.chest.worker_red_0,Red Worker Shirt,WorkerRed0
-common.items.npc_armor.chest.worker_red_1,Red Worker Shirt,WorkerRed1
-common.items.npc_armor.chest.worker_yellow_0,Yellow Worker Shirt,WorkerYellow0
-common.items.npc_armor.chest.worker_yellow_1,Yellow Worker Shirt,WorkerYellow1
-common.items.npc_armor.foot.cultist_boots,Cultist Boots,Cultist
-common.items.npc_armor.hand.cultist_hands_purple,Purple Cultist Gloves,CultistPurple
-common.items.npc_armor.pants.cultist_legs_purple,Purple Cultist Skirt,CultistPurple
-common.items.npc_armor.shoulder.cultist_shoulder_purple,Purple Cultist Mantle,CultistPurple
-common.items.npc_weapons.axe.malachite_axe-0,Malachite Axe,MalachiteAxe0
-common.items.npc_weapons.axe.starter_axe,Notched Axe,BasicAxe
-common.items.npc_weapons.bow.horn_longbow-0,Horn Bow,HornLongbow0
-common.items.npc_weapons.dagger.starter_dagger,Rusty Dagger,BasicDagger
-common.items.npc_weapons.empty.empty,Empty,
-common.items.npc_weapons.hammer.cultist_purp_2h-0,Magical Cultist Warhammer,CultPurp0
-common.items.npc_weapons.hammer.starter_hammer,Sturdy Old Hammer,BasicHammer
-common.items.npc_weapons.shield.shield_1,A Tattered Targe,BasicShield
-common.items.npc_weapons.staff.bone_staff,Bone Staff,BoneStaff
-common.items.npc_weapons.staff.cultist_staff,Cultist Staff,CultistStaff
-common.items.npc_weapons.sword.cultist_purp_2h-0,Magical Cultist Greatsword,CultPurp0
-common.items.npc_weapons.sword.cultist_purp_2h_boss-0,Magical Cultist Greatsword,CultPurp0
-common.items.npc_weapons.sword.starter_sword,Battered Sword,BasicSword
-common.items.npc_weapons.sword.zweihander_sword_0,Sturdy Zweihander,Zweihander0
-common.items.npc_weapons.tool.broom,Broom,Broom
-common.items.npc_weapons.tool.fishing_rod,Fishing Rod,FishingRod0
-common.items.npc_weapons.tool.hoe,Hoe,Hoe0
-common.items.npc_weapons.tool.pickaxe,Pickaxe,Pickaxe0
-common.items.npc_weapons.tool.pitchfork,Pitchfork,Pitchfork
-common.items.npc_weapons.tool.rake,Rake,Rake
-common.items.npc_weapons.tool.shovel-0,Shovel,Shovel0
-common.items.npc_weapons.tool.shovel-1,Shovel,Shovel1
-common.items.ore.velorite,Velorite,
-common.items.ore.veloritefrag,Velorite Fragment,
-common.items.testing.test_boots,Testing Boots,Dark
-common.items.utility.bomb,Bomb,
-common.items.utility.bomb_pile,Bomb,
-common.items.utility.collar,Collar,
-common.items.utility.firework_blue,Firework Blue,
-common.items.utility.firework_green,Firework Green,
-common.items.utility.firework_purple,Firework Purple,
-common.items.utility.firework_red,Firework Red,
-common.items.utility.firework_yellow,Firework Yellow,
-common.items.utility.training_dummy,Training Dummy,
-common.items.weapons.axe.bloodsteel_axe-0,Bloodsteel Axe,BloodsteelAxe0
-common.items.weapons.axe.bloodsteel_axe-1,Executioner's Axe,BloodsteelAxe1
-common.items.weapons.axe.bloodsteel_axe-2,Tribal Axe,BloodsteelAxe2
-common.items.weapons.axe.bronze_axe-0,Bronze Axe,BronzeAxe0
-common.items.weapons.axe.bronze_axe-1,Discus Axe,BronzeAxe1
-common.items.weapons.axe.cobalt_axe-0,Cobalt Axe,CobaltAxe0
-common.items.weapons.axe.iron_axe-0,Iron Greataxe,IronAxe0
-common.items.weapons.axe.iron_axe-1,Ceremonial Axe,IronAxe1
-common.items.weapons.axe.iron_axe-2,Cyclone Axe,IronAxe2
-common.items.weapons.axe.iron_axe-3,Iron Battleaxe,IronAxe3
-common.items.weapons.axe.iron_axe-4,Butcher's Axe,IronAxe4
-common.items.weapons.axe.iron_axe-5,Barbarian's Axe,IronAxe5
-common.items.weapons.axe.iron_axe-6,Iron Axe,IronAxe6
-common.items.weapons.axe.iron_axe-7,Iron Labrys,IronAxe7
-common.items.weapons.axe.iron_axe-8,Fanged Axe,IronAxe8
-common.items.weapons.axe.iron_axe-9,Wolfen Axe,IronAxe9
-common.items.weapons.axe.malachite_axe-0,Malachite Axe,MalachiteAxe0
-common.items.weapons.axe.orc_axe-0,Beast Cleaver,OrcAxe0
-common.items.weapons.axe.starter_axe,Notched Axe,BasicAxe
-common.items.weapons.axe.steel_axe-0,Steel Battleaxe,SteelAxe0
-common.items.weapons.axe.steel_axe-1,Steel Labrys,SteelAxe1
-common.items.weapons.axe.steel_axe-2,Steel Axe,SteelAxe2
-common.items.weapons.axe.steel_axe-3,Crescent Axe,SteelAxe3
-common.items.weapons.axe.steel_axe-4,Moon Axe,SteelAxe4
-common.items.weapons.axe.steel_axe-5,Owl Axe,SteelAxe5
-common.items.weapons.axe.steel_axe-6,Spade Axe,SteelAxe6
-common.items.weapons.axe.worn_iron_axe-0,Worn Dwarven Axe,WornIronAxe0
-common.items.weapons.axe.worn_iron_axe-1,Worn Elven Axe,WornIronAxe1
-common.items.weapons.axe.worn_iron_axe-2,Worn Human Axe,WornIronAxe2
-common.items.weapons.axe.worn_iron_axe-3,Worn Orcish Axe,WornIronAxe3
-common.items.weapons.axe.worn_iron_axe-4,Beetle Axe,WornIronAxe4
-common.items.weapons.bow.horn_longbow-0,Horn Bow,HornLongbow0
-common.items.weapons.bow.iron_longbow-0,Soldier's Bow,IronLongbow0
-common.items.weapons.bow.leafy_longbow-0,Elven Longbow,LeafyLongbow0
-common.items.weapons.bow.leafy_shortbow-0,Elven Shortbow,LeafyShortbow0
-common.items.weapons.bow.nature_ore_longbow-0,Velorite Bow,NatureOreLongbow
-common.items.weapons.bow.rare_longbow,Enchanted Longbow,RareLongbow
-common.items.weapons.bow.starter_bow,Uneven Bow,ShortBow0
-common.items.weapons.bow.wood_longbow-0,Longbow,WoodLongbow0
-common.items.weapons.bow.wood_longbow-1,Recurve Bow,WoodLongbow1
-common.items.weapons.bow.wood_shortbow-0,Hunting Bow,WoodShortbow0
-common.items.weapons.bow.wood_shortbow-1,Horse Bow,WoodShortbow1
-common.items.weapons.dagger.starter_dagger,Rusty Dagger,BasicDagger
-common.items.weapons.empty.empty,Empty Item,
-common.items.weapons.hammer.bronze_hammer-0,Bronze Hammer,BronzeHammer0
-common.items.weapons.hammer.bronze_hammer-1,Bronze Club,BronzeHammer1
-common.items.weapons.hammer.cobalt_hammer-0,Cobalt Hammer,CobaltHammer0
-common.items.weapons.hammer.cobalt_hammer-1,Cobalt Mace,CobaltHammer1
-common.items.weapons.hammer.cultist_purp_2h-0,Magical Cultist Warhammer,CultPurp0
-common.items.weapons.hammer.flimsy_hammer,Flimsy Hammer,FlimsyHammer
-common.items.weapons.hammer.hammer_1,Crude Mallet,BasicHammer
-common.items.weapons.hammer.iron_hammer-0,Iron Hammer,IronHammer0
-common.items.weapons.hammer.iron_hammer-1,Iron Battlehammer,IronHammer1
-common.items.weapons.hammer.iron_hammer-2,Iron Mace,IronHammer2
-common.items.weapons.hammer.iron_hammer-3,Crowned Mace,IronHammer3
-common.items.weapons.hammer.iron_hammer-4,Forge Hammer,IronHammer4
-common.items.weapons.hammer.iron_hammer-5,Pike Hammer,IronHammer5
-common.items.weapons.hammer.iron_hammer-6,Spiked Maul,IronHammer6
-common.items.weapons.hammer.iron_hammer-7,Giant's Fist,IronHammer7
-common.items.weapons.hammer.iron_hammer-8,Lucerne Hammer,IronHammer8
-common.items.weapons.hammer.mjolnir,Mjolnir,Mjolnir
-common.items.weapons.hammer.ramshead_hammer,Ram's Head Mace,RamsheadHammer
-common.items.weapons.hammer.runic_hammer,Runic Hammer,RunicHammer
-common.items.weapons.hammer.starter_hammer,Sturdy Old Hammer,BasicHammer
-common.items.weapons.hammer.steel_hammer-0,Steel Hammer,SteelHammer0
-common.items.weapons.hammer.steel_hammer-1,Steel Greathammer,SteelHammer1
-common.items.weapons.hammer.steel_hammer-2,Steel Club,SteelHammer2
-common.items.weapons.hammer.steel_hammer-3,Battle Mace,SteelHammer3
-common.items.weapons.hammer.steel_hammer-4,Brute's Hammer,SteelHammer4
-common.items.weapons.hammer.steel_hammer-5,Morning Star,SteelHammer5
-common.items.weapons.hammer.stone_hammer-0,Basalt Sledgehammer,StoneHammer0
-common.items.weapons.hammer.stone_hammer-1,Granite Sledgehammer,StoneHammer1
-common.items.weapons.hammer.stone_hammer-2,Rocky Maul,StoneHammer2
-common.items.weapons.hammer.stone_hammer-3,Stone Sledgehammer,StoneHammer3
-common.items.weapons.hammer.wood_hammer-0,Hardwood Mallet,WoodHammer0
-common.items.weapons.hammer.worn_iron_hammer-0,Worn Dwarven Hammer,WornIronHammer0
-common.items.weapons.hammer.worn_iron_hammer-1,Worn Elven Hammer,WornIronHammer1
-common.items.weapons.hammer.worn_iron_hammer-2,Worn Human Mace,WornIronHammer2
-common.items.weapons.hammer.worn_iron_hammer-3,Worn Orcish Hammer,WornIronHammer3
-common.items.weapons.sceptre.sceptre_velorite_0,Velorite Sceptre,SceptreVelorite
-common.items.weapons.sceptre.staff_nature,Sceptre of Regeneration,Sceptre
-common.items.weapons.sceptre.starter_sceptre,Naturalist Walking Stick,StarterSceptre
-common.items.weapons.shield.shield_1,A Tattered Targe,BasicShield
-common.items.weapons.staff.amethyst_staff,Amethyst Staff,AmethystStaff
-common.items.weapons.staff.bone_staff,Bone Staff,BoneStaff
-common.items.weapons.staff.cultist_staff,Cultist Staff,CultistStaff
-common.items.weapons.staff.staff_1,Humble Stick,BasicStaff
-common.items.weapons.staff.starter_staff,Gnarled Rod,BasicStaff
-common.items.weapons.sword.cultist_purp_2h-0,Magical Cultist Greatsword,CultPurp0
-common.items.weapons.sword.greatsword_2h_dam-0,Damaged Greatsword,GreatswordDam0
-common.items.weapons.sword.greatsword_2h_dam-1,Damaged Greatsword,GreatswordDam1
-common.items.weapons.sword.greatsword_2h_dam-2,Damaged Greatsword,GreatswordDam2
-common.items.weapons.sword.greatsword_2h_fine-0,Fine Greatsword,GreatswordFine0
-common.items.weapons.sword.greatsword_2h_fine-1,Fine Greatsword,GreatswordFine1
-common.items.weapons.sword.greatsword_2h_fine-2,Fine Greatsword,GreatswordFine2
-common.items.weapons.sword.greatsword_2h_orn-0,Ornamented Greatsword,GreatswordOrn0
-common.items.weapons.sword.greatsword_2h_orn-1,Ornamented Greatsword,GreatswordOrn1
-common.items.weapons.sword.greatsword_2h_orn-2,Ornamented Greatsword,GreatswordOrn2
-common.items.weapons.sword.greatsword_2h_simple-0,Simple Greatsword,GreatswordSimple0
-common.items.weapons.sword.greatsword_2h_simple-1,Simple Greatsword,GreatswordSimple1
-common.items.weapons.sword.greatsword_2h_simple-2,Simple Greatsword,GreatswordSimple2
-common.items.weapons.sword.long_2h_dam-0,Damaged Longsword,LongDam0
-common.items.weapons.sword.long_2h_dam-1,Damaged Longsword,LongDam1
-common.items.weapons.sword.long_2h_dam-2,Damaged Longsword,LongDam2
-common.items.weapons.sword.long_2h_dam-3,Damaged Longsword,LongDam3
-common.items.weapons.sword.long_2h_dam-4,Damaged Longsword,LongDam4
-common.items.weapons.sword.long_2h_dam-5,Damaged Longsword,LongDam5
-common.items.weapons.sword.long_2h_fine-0,Fine Longsword,LongFine0
-common.items.weapons.sword.long_2h_fine-1,Fine Longsword,LongFine1
-common.items.weapons.sword.long_2h_fine-2,Fine Longsword,LongFine2
-common.items.weapons.sword.long_2h_fine-3,Fine Longsword,LongFine3
-common.items.weapons.sword.long_2h_fine-4,Fine Longsword,LongFine4
-common.items.weapons.sword.long_2h_fine-5,Fine Longsword,LongFine5
-common.items.weapons.sword.long_2h_orn-0,Ornamented Longsword,LongOrn0
-common.items.weapons.sword.long_2h_orn-1,Ornamented Longsword,LongOrn1
-common.items.weapons.sword.long_2h_orn-2,Ornamented Longsword,LongOrn2
-common.items.weapons.sword.long_2h_orn-3,Ornamented Longsword,LongOrn3
-common.items.weapons.sword.long_2h_orn-4,Ornamented Longsword,LongOrn4
-common.items.weapons.sword.long_2h_orn-5,Ornamented Longsword,LongOrn5
-common.items.weapons.sword.long_2h_simple-0,Simple Longsword,LongSimple0
-common.items.weapons.sword.long_2h_simple-1,Simple Longsword,LongSimple1
-common.items.weapons.sword.long_2h_simple-2,Simple Longsword,LongSimple2
-common.items.weapons.sword.long_2h_simple-3,Simple Longsword,LongSimple3
-common.items.weapons.sword.long_2h_simple-4,Simple Longsword,LongSimple4
-common.items.weapons.sword.long_2h_simple-5,Simple Longsword,LongSimple5
-common.items.weapons.sword.short_sword_0,Vicious Gladius,Short0
-common.items.weapons.sword.starter_sword,Battered Sword,BasicSword
-common.items.weapons.sword.wood_sword,Forest Spirit,WoodTraining
-common.items.weapons.sword.zweihander_sword_0,Sturdy Zweihander,Zweihander0
-common.items.weapons.tool.broom,Broom,Broom
-common.items.weapons.tool.fishing_rod,Fishing Rod,FishingRod0
-common.items.weapons.tool.hoe,Hoe,Hoe0
-common.items.weapons.tool.pickaxe,Pickaxe,Pickaxe0
-common.items.weapons.tool.pitchfork,Pitchfork,Pitchfork
-common.items.weapons.tool.rake,Rake,Rake
-common.items.weapons.tool.shovel-0,Shovel,Shovel0
-common.items.weapons.tool.shovel-1,Shovel,Shovel1
diff --git a/server/src/events/entity_manipulation.rs b/server/src/events/entity_manipulation.rs
index a1f5539675..9f9e762d2a 100644
--- a/server/src/events/entity_manipulation.rs
+++ b/server/src/events/entity_manipulation.rs
@@ -522,13 +522,8 @@ pub fn handle_explosion(
             }
             // Don't heal if outside group
             // Don't damage in the same group
-            let (mut is_heal, mut is_damage) = (false, false);
-            if (friendly_damage || !same_group) && (percent_damage > 0.0) {
-                is_damage = true;
-            }
-            if same_group && (percent_damage < 1.0) {
-                is_heal = true;
-            }
+            let is_damage = (friendly_damage || !same_group) && (percent_damage > 0.0);
+            let is_heal = same_group && (percent_damage < 1.0);
             if !is_heal && !is_damage {
                 continue;
             }
diff --git a/voxygen/src/hud/hotbar.rs b/voxygen/src/hud/hotbar.rs
index a2ccc0d6b0..ab02df0c70 100644
--- a/voxygen/src/hud/hotbar.rs
+++ b/voxygen/src/hud/hotbar.rs
@@ -77,12 +77,11 @@ impl State {
                 .filter(|kind| {
                     use common::comp::item::{tool::ToolKind, ItemKind};
                     if let ItemKind::Tool(kind) = kind {
-                        if let ToolKind::Staff(_) = &kind.kind {
-                            true
-                        } else if let ToolKind::Debug(kind) = &kind.kind {
-                            kind == "Boost"
-                        } else {
-                            matches!(&kind.kind, ToolKind::Sword(_))
+                        match &kind.kind {
+                            ToolKind::Staff(_) => true,
+                            ToolKind::Debug(kind) => kind == "Boost",
+                            ToolKind::Sword(_) => true,
+                            _ => false,
                         }
                     } else {
                         false
diff --git a/voxygen/src/render/pipelines/particle.rs b/voxygen/src/render/pipelines/particle.rs
index 8968a96554..929fdbb062 100644
--- a/voxygen/src/render/pipelines/particle.rs
+++ b/voxygen/src/render/pipelines/particle.rs
@@ -35,8 +35,8 @@ gfx_defines! {
         // can save 32 bits per instance, and have cleaner tailor made code.
         inst_mode: i32 = "inst_mode",
 
-        // an extra position for particles that need it
-        inst_pos2: [f32; 3] = "inst_pos2",
+        // A direction for particles to move in
+        inst_dir: [f32; 3] = "inst_dir",
 
         // a triangle is: f32 x 3 x 3 x 1  = 288 bits
         // a quad is:     f32 x 3 x 3 x 2  = 576 bits
@@ -131,7 +131,7 @@ impl Instance {
             inst_entropy: rand::thread_rng().gen(),
             inst_mode: inst_mode as i32,
             inst_pos: inst_pos.into_array(),
-            inst_pos2: [0.0, 0.0, 0.0],
+            inst_dir: [0.0, 0.0, 0.0],
         }
     }
 
@@ -149,7 +149,7 @@ impl Instance {
             inst_entropy: rand::thread_rng().gen(),
             inst_mode: inst_mode as i32,
             inst_pos: inst_pos.into_array(),
-            inst_pos2: inst_pos2.into_array(),
+            inst_dir: (inst_pos2 - inst_pos).into_array(),
         }
     }
 }