use std::borrow::Cow; use bevy_ecs::{prelude::*, relationship::RelatedSpawner}; use strum::Display; use crate::{ bundle::{ Name, armour::{Armour, ArmourCoverage, ArmourValue, Immunities, Immunity}, bonus::ArmourBonusType, }, dto::draw_id, }; #[derive(Clone, Copy, Debug, Display, PartialEq, Eq)] #[cfg_attr(feature = "json", derive(serde::Deserialize, serde::Serialize))] #[cfg_attr(feature = "json", serde(rename_all = "snake_case"))] pub enum ArmourSlot { Head, Body, Hands, Legs, Feet, } #[derive(Debug, Clone)] #[cfg_attr(feature = "json", derive(serde::Deserialize, serde::Serialize))] pub struct ArmourBonusInfo { pub kind: ArmourBonusType, pub value: Option, } #[derive(Debug, Clone)] #[cfg_attr(feature = "json", derive(serde::Deserialize, serde::Serialize))] pub struct CoverageDto { pub body: f32, pub heart: f32, pub stomach: f32, pub chest: f32, pub arm: f32, pub groin: f32, pub leg: f32, pub throat: f32, pub hand: f32, pub foot: f32, pub head: f32, } #[derive(Debug, Clone)] #[cfg_attr(feature = "json", derive(serde::Deserialize, serde::Serialize))] pub struct ArmourDto { pub slot: ArmourSlot, pub id: i32, pub name: Cow<'static, str>, pub base_armour: f32, pub armour: Option, pub coverage: CoverageDto, pub immunities: Cow<'static, [Immunity]>, pub bonus: Option, } impl ArmourDto { pub fn new(name: &str, armour: Option, bonus: Option) -> Option { let base = match name { "Leather Vest" => Self::LEATHER_VEST, "Police Vest" => Self::POLICE_VEST, "Bulletproof Vest" => Self::BULLETPROOF_VEST, "Full Body Armor" => Self::FULL_BODY_ARMOR, "Outer Tactical Vest" => Self::OUTER_TACTICAL_VEST, "Chain Mail" => Self::CHAIN_MAIL, "Flak Jacket" => Self::FLAK_JACKET, "Combat Vest" => Self::COMBAT_VEST, "Liquid Body Armor" => Self::LIQUID_BODY_ARMOR, "Flexible Body Armor" => Self::FLEXIBLE_BODY_ARMOR, "Hazmat Suit" => Self::HAZMAT_SUIT, "Medieval Helmet" => Self::MEDIEVAL_HELMET, "Kevlar Gloves" => Self::KEVLAR_GLOVES, "WWII Helmet" => Self::WWII_HELMET, "Motorcycle Helmet" => Self::MOTORCYCLE_HELMET, "Construction Helmet" => Self::CONSTRUCTION_HELMET, "Welding Helmet" => Self::WELDING_HELMET, "Safety Boots" => Self::SAFETY_BOOTS, "Hiking Boots" => Self::HIKING_BOOTS, "Leather Helmet" => Self::LEATHER_HELMET, "Leather Pants" => Self::LEATHER_PANTS, "Leather Boots" => Self::LEATHER_BOOTS, "Leather Gloves" => Self::LEATHER_GLOVES, "Combat Helmet" => Self::COMBAT_HELMET, "Combat Pants" => Self::COMBAT_PANTS, "Combat Boots" => Self::COMBAT_BOOTS, "Combat Gloves" => Self::COMBAT_GLOVES, "Riot Helmet" => Self::RIOT_HELMET, "Riot Body" => Self::RIOT_BODY, "Riot Pants" => Self::RIOT_PANTS, "Riot Boots" => Self::RIOT_BOOTS, "Riot Gloves" => Self::RIOT_GLOVES, "Dune Helmet" => Self::DUNE_HELMET, "Dune Vest" => Self::DUNE_VEST, "Dune Pants" => Self::DUNE_PANTS, "Dune Boots" => Self::DUNE_BOOTS, "Dune Gloves" => Self::DUNE_GLOVES, "Assault Helmet" => Self::ASSAULT_HELMET, "Assault Body" => Self::ASSAULT_BODY, "Assault Pants" => Self::ASSAULT_PANTS, "Assault Boots" => Self::ASSAULT_BOOTS, "Assault Gloves" => Self::ASSAULT_GLOVES, "Delta Gas Mask" => Self::DELTA_GAS_MASK, "Delta Body" => Self::DELTA_BODY, "Delta Pants" => Self::DELTA_PANTS, "Delta Boots" => Self::DELTA_BOOTS, "Delta Gloves" => Self::DELTA_GLOVES, "Marauder Face Mask" => Self::MARAUDER_FACE_MASK, "Marauder Body" => Self::MARAUDER_BODY, "Marauder Pants" => Self::MARAUDER_PANTS, "Marauder Boots" => Self::MARAUDER_BOOTS, "Marauder Gloves" => Self::MARAUDER_GLOVES, "EOD Helmet" => Self::EOD_HELMET, "EOD Apron" => Self::EOD_APRON, "EOD Pants" => Self::EOD_PANTS, "EOD Boots" => Self::EOD_BOOTS, "EOD Gloves" => Self::EOD_GLOVES, "Kevlar Lab Coat" => Self::KEVLAR_LAB_COAT, "M'aol Visage" => Self::M_AOL_VISAGE, "M'aol Spathe" => Self::M_AOL_SPATHE, "M'aol Britches" => Self::M_AOL_BRITCHES, "M'aol Hooves" => Self::M_AOL_HOOVES, "M'aol Clawshields" => Self::M_AOL_CLAWSHIELDS, "Starshield Breastplate" => Self::STARSHIELD_BREASTPLATE, "Sentinel Helmet" => Self::SENTINEL_HELMET, "Sentinel Apron" => Self::SENTINEL_APRON, "Sentinel Pants" => Self::SENTINEL_PANTS, "Sentinel Boots" => Self::SENTINEL_BOOTS, "Sentinel Gloves" => Self::SENTINEL_GLOVES, "Vanguard Respirator" => Self::VANGUARD_RESPIRATOR, "Vanguard Body" => Self::VANGUARD_BODY, "Vanguard Pants" => Self::VANGUARD_PANTS, "Vanguard Boots" => Self::VANGUARD_BOOTS, "Vanguard Gloves" => Self::VANGUARD_GLOVES, _ => return None, }; Some(Self { armour, bonus: base.bonus.map(|b| ArmourBonusInfo { value: bonus, ..b }), ..base }) } pub fn head_pieces() -> Vec { Self::ALL .iter() .filter(|a| a.slot == ArmourSlot::Head) .cloned() .collect() } pub fn body_pieces() -> Vec { Self::ALL .iter() .filter(|a| a.slot == ArmourSlot::Body) .cloned() .collect() } pub fn leg_pieces() -> Vec { Self::ALL .iter() .filter(|a| a.slot == ArmourSlot::Legs) .cloned() .collect() } pub fn foot_pieces() -> Vec { Self::ALL .iter() .filter(|a| a.slot == ArmourSlot::Feet) .cloned() .collect() } pub fn hand_pieces() -> Vec { Self::ALL .iter() .filter(|a| a.slot == ArmourSlot::Hands) .cloned() .collect() } pub fn spawn(self, spawner: &mut RelatedSpawner<'_, ChildOf>) -> Entity { let mut commands = spawner.spawn(draw_id()); commands.insert(( Name(self.name.to_string()), Armour, ArmourValue(self.armour.unwrap_or(self.base_armour)), ArmourCoverage::from(self.coverage), Immunities(self.immunities.to_vec()), )); commands.id() } pub const ALL: &[Self] = &[ Self::LEATHER_VEST, Self::POLICE_VEST, Self::BULLETPROOF_VEST, Self::FULL_BODY_ARMOR, Self::OUTER_TACTICAL_VEST, Self::CHAIN_MAIL, Self::FLAK_JACKET, Self::COMBAT_VEST, Self::LIQUID_BODY_ARMOR, Self::FLEXIBLE_BODY_ARMOR, Self::HAZMAT_SUIT, Self::MEDIEVAL_HELMET, Self::KEVLAR_GLOVES, Self::WWII_HELMET, Self::MOTORCYCLE_HELMET, Self::CONSTRUCTION_HELMET, Self::WELDING_HELMET, Self::SAFETY_BOOTS, Self::HIKING_BOOTS, Self::LEATHER_HELMET, Self::LEATHER_PANTS, Self::LEATHER_BOOTS, Self::LEATHER_GLOVES, Self::COMBAT_HELMET, Self::COMBAT_PANTS, Self::COMBAT_BOOTS, Self::COMBAT_GLOVES, Self::RIOT_HELMET, Self::RIOT_BODY, Self::RIOT_PANTS, Self::RIOT_BOOTS, Self::RIOT_GLOVES, Self::DUNE_HELMET, Self::DUNE_VEST, Self::DUNE_PANTS, Self::DUNE_BOOTS, Self::DUNE_GLOVES, Self::ASSAULT_HELMET, Self::ASSAULT_BODY, Self::ASSAULT_PANTS, Self::ASSAULT_BOOTS, Self::ASSAULT_GLOVES, Self::DELTA_GAS_MASK, Self::DELTA_BODY, Self::DELTA_PANTS, Self::DELTA_BOOTS, Self::DELTA_GLOVES, Self::MARAUDER_FACE_MASK, Self::MARAUDER_BODY, Self::MARAUDER_PANTS, Self::MARAUDER_BOOTS, Self::MARAUDER_GLOVES, Self::EOD_HELMET, Self::EOD_APRON, Self::EOD_PANTS, Self::EOD_BOOTS, Self::EOD_GLOVES, Self::KEVLAR_LAB_COAT, Self::M_AOL_VISAGE, Self::M_AOL_SPATHE, Self::M_AOL_BRITCHES, Self::M_AOL_HOOVES, Self::M_AOL_CLAWSHIELDS, Self::STARSHIELD_BREASTPLATE, Self::SENTINEL_HELMET, Self::SENTINEL_APRON, Self::SENTINEL_PANTS, Self::SENTINEL_BOOTS, Self::SENTINEL_GLOVES, Self::VANGUARD_RESPIRATOR, Self::VANGUARD_BODY, Self::VANGUARD_PANTS, Self::VANGUARD_BOOTS, Self::VANGUARD_GLOVES, ]; const LEATHER_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 32, name: Cow::Borrowed("Leather Vest"), base_armour: 20.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 21.12, heart: 97.27, stomach: 95.09, chest: 90.22, arm: 6.5, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const POLICE_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 33, name: Cow::Borrowed("Police Vest"), base_armour: 32.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 26.79, heart: 100.0, stomach: 100.0, chest: 95.44, arm: 35.34, groin: 7.45, leg: 0.77, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const BULLETPROOF_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 34, name: Cow::Borrowed("Bulletproof Vest"), base_armour: 34.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 32.7, heart: 100.0, stomach: 100.0, chest: 95.45, arm: 35.87, groin: 89.16, leg: 0.78, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const FULL_BODY_ARMOR: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 49, name: Cow::Borrowed("Full Body Armor"), base_armour: 31.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 48.46, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 60.68, leg: 0.28, throat: 90.68, hand: 13.4, foot: 0.0, head: 0.0, }, }; const OUTER_TACTICAL_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 50, name: Cow::Borrowed("Outer Tactical Vest"), base_armour: 36.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 27.54, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 23.91, groin: 35.95, leg: 0.93, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const CHAIN_MAIL: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 176, name: Cow::Borrowed("Chain Mail"), base_armour: 23.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 39.41, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 99.9, groin: 48.46, leg: 1.93, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const FLAK_JACKET: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 178, name: Cow::Borrowed("Flak Jacket"), base_armour: 30.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 26.52, heart: 100.0, stomach: 99.99, chest: 96.42, arm: 35.79, groin: 3.12, leg: 0.14, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const COMBAT_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 332, name: Cow::Borrowed("Combat Vest"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 27.45, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 23.18, groin: 36.04, leg: 0.98, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const LIQUID_BODY_ARMOR: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 333, name: Cow::Borrowed("Liquid Body Armor"), base_armour: 40.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 24.12, heart: 100.0, stomach: 99.59, chest: 98.48, arm: 19.85, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const FLEXIBLE_BODY_ARMOR: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 334, name: Cow::Borrowed("Flexible Body Armor"), base_armour: 42.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 26.96, heart: 100.0, stomach: 96.57, chest: 95.73, arm: 36.16, groin: 11.88, leg: 0.51, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const HAZMAT_SUIT: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 348, name: Cow::Borrowed("Hazmat Suit"), base_armour: 10.0, armour: None, immunities: Cow::Borrowed(&[ Immunity::Radiation, Immunity::PepperSpray, Immunity::NerveGas, Immunity::TearGas, ]), bonus: None, coverage: CoverageDto { body: 97.85, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 100.0, leg: 100.0, throat: 100.0, hand: 100.0, foot: 100.0, head: 70.0, }, }; const MEDIEVAL_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 538, name: Cow::Borrowed("Medieval Helmet"), base_armour: 25.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 9.71, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 42.24, hand: 0.0, foot: 0.0, head: 93.54, }, }; const KEVLAR_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 640, name: Cow::Borrowed("Kevlar Gloves"), base_armour: 32.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 14.34, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.32, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const WWII_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 641, name: Cow::Borrowed("WWII Helmet"), base_armour: 34.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 4.64, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 64.85, }, }; const MOTORCYCLE_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 642, name: Cow::Borrowed("Motorcycle Helmet"), base_armour: 30.0, armour: None, immunities: Cow::Borrowed(&[Immunity::PepperSpray]), bonus: None, coverage: CoverageDto { body: 7.76, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 23.19, hand: 0.0, foot: 0.0, head: 85.35, }, }; const CONSTRUCTION_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 643, name: Cow::Borrowed("Construction Helmet"), base_armour: 30.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 2.84, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 39.68, }, }; const WELDING_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 644, name: Cow::Borrowed("Welding Helmet"), base_armour: 34.0, armour: None, immunities: Cow::Borrowed(&[Immunity::FlashGrenade, Immunity::PepperSpray]), bonus: None, coverage: CoverageDto { body: 10.7, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 49.53, hand: 0.0, foot: 0.0, head: 100.0, }, }; const SAFETY_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 645, name: Cow::Borrowed("Safety Boots"), base_armour: 30.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 14.96, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 4.74, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const HIKING_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 646, name: Cow::Borrowed("Hiking Boots"), base_armour: 24.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 15.03, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 5.22, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const LEATHER_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 647, name: Cow::Borrowed("Leather Helmet"), base_armour: 20.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { #[allow(clippy::approx_constant)] body: 3.14, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 8.84, hand: 0.0, foot: 0.0, head: 35.12, }, }; const LEATHER_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 648, name: Cow::Borrowed("Leather Pants"), base_armour: 20.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 24.17, heart: 0.0, stomach: 7.5, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 15.49, head: 0.0, }, }; const LEATHER_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 649, name: Cow::Borrowed("Leather Boots"), base_armour: 20.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 15.54, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 8.77, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const LEATHER_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 650, name: Cow::Borrowed("Leather Gloves"), base_armour: 20.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 14.3, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const COMBAT_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 651, name: Cow::Borrowed("Combat Helmet"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 4.83, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 67.49, }, }; const COMBAT_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 652, name: Cow::Borrowed("Combat Pants"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 24.29, heart: 0.0, stomach: 7.62, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 16.28, head: 0.0, }, }; const COMBAT_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 653, name: Cow::Borrowed("Combat Boots"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 15.42, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 7.92, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const COMBAT_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 654, name: Cow::Borrowed("Combat Gloves"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 14.34, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.32, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const RIOT_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 655, name: Cow::Borrowed("Riot Helmet"), base_armour: 35.0, armour: None, immunities: Cow::Borrowed(&[Immunity::PepperSpray]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impregnable, value: None, }), coverage: CoverageDto { body: 7.13, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 99.61, }, }; const RIOT_BODY: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 656, name: Cow::Borrowed("Riot Body"), base_armour: 45.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impregnable, value: None, }), coverage: CoverageDto { body: 51.99, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 99.9, leg: 3.01, throat: 79.06, hand: 21.6, foot: 0.0, head: 0.0, }, }; const RIOT_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 657, name: Cow::Borrowed("Riot Pants"), base_armour: 45.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impregnable, value: None, }), coverage: CoverageDto { body: 27.28, heart: 0.0, stomach: 2.12, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 39.96, head: 0.0, }, }; const RIOT_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 658, name: Cow::Borrowed("Riot Boots"), base_armour: 45.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impregnable, value: None, }), coverage: CoverageDto { body: 15.95, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 11.62, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const RIOT_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 659, name: Cow::Borrowed("Riot Gloves"), base_armour: 45.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impregnable, value: None, }), coverage: CoverageDto { body: 14.41, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.78, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const DUNE_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 660, name: Cow::Borrowed("Dune Helmet"), base_armour: 44.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Insurmountable, value: None, }), coverage: CoverageDto { body: 4.64, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 64.83, }, }; const DUNE_VEST: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 661, name: Cow::Borrowed("Dune Vest"), base_armour: 44.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Insurmountable, value: None, }), coverage: CoverageDto { body: 45.49, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 9.05, leg: 0.46, throat: 83.93, hand: 21.6, foot: 0.0, head: 0.0, }, }; const DUNE_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 662, name: Cow::Borrowed("Dune Pants"), base_armour: 44.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Insurmountable, value: None, }), coverage: CoverageDto { body: 24.03, heart: 0.0, stomach: 12.28, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 12.1, head: 0.0, }, }; const DUNE_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 663, name: Cow::Borrowed("Dune Boots"), base_armour: 44.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Insurmountable, value: None, }), coverage: CoverageDto { body: 15.78, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 10.47, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const DUNE_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 664, name: Cow::Borrowed("Dune Gloves"), base_armour: 44.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Insurmountable, value: None, }), coverage: CoverageDto { body: 14.36, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.42, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const ASSAULT_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 665, name: Cow::Borrowed("Assault Helmet"), base_armour: 46.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impenetrable, value: None, }), coverage: CoverageDto { body: 5.05, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 3.99, hand: 0.0, foot: 0.0, head: 66.53, }, }; const ASSAULT_BODY: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 666, name: Cow::Borrowed("Assault Body"), base_armour: 46.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impenetrable, value: None, }), coverage: CoverageDto { body: 45.55, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 14.15, leg: 0.56, throat: 81.16, hand: 20.73, foot: 0.0, head: 0.0, }, }; const ASSAULT_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 667, name: Cow::Borrowed("Assault Pants"), base_armour: 46.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impenetrable, value: None, }), coverage: CoverageDto { body: 26.44, heart: 0.0, stomach: 3.84, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 33.25, head: 0.0, }, }; const ASSAULT_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 668, name: Cow::Borrowed("Assault Boots"), base_armour: 46.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impenetrable, value: None, }), coverage: CoverageDto { body: 15.58, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 9.07, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const ASSAULT_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 669, name: Cow::Borrowed("Assault Gloves"), base_armour: 46.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impenetrable, value: None, }), coverage: CoverageDto { body: 14.37, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.5, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const DELTA_GAS_MASK: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 670, name: Cow::Borrowed("Delta Gas Mask"), base_armour: 49.0, armour: None, immunities: Cow::Borrowed(&[Immunity::NerveGas, Immunity::TearGas, Immunity::PepperSpray]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 1.94, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 27.13, }, }; const DELTA_BODY: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 671, name: Cow::Borrowed("Delta Body"), base_armour: 49.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 46.24, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 30.7, leg: 0.64, throat: 88.81, hand: 13.4, foot: 0.0, head: 0.0, }, }; const DELTA_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 672, name: Cow::Borrowed("Delta Pants"), base_armour: 49.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 26.18, heart: 0.0, stomach: 8.59, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 29.06, head: 0.0, }, }; const DELTA_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 673, name: Cow::Borrowed("Delta Boots"), base_armour: 49.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 15.75, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 10.25, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const DELTA_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 674, name: Cow::Borrowed("Delta Gloves"), base_armour: 49.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 14.37, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.5, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const MARAUDER_FACE_MASK: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 675, name: Cow::Borrowed("Marauder Face Mask"), base_armour: 40.0, armour: None, immunities: Cow::Borrowed(&[Immunity::PepperSpray]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 11.49, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 60.57, hand: 0.0, foot: 0.0, head: 100.0, }, }; const MARAUDER_BODY: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 676, name: Cow::Borrowed("Marauder Body"), base_armour: 52.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Imperviable, value: None, }), coverage: CoverageDto { body: 42.47, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 0.0, leg: 0.0, throat: 84.72, hand: 5.05, foot: 0.0, head: 0.0, }, }; const MARAUDER_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 677, name: Cow::Borrowed("Marauder Pants"), base_armour: 52.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Imperviable, value: None, }), coverage: CoverageDto { body: 20.99, heart: 0.0, stomach: 0.52, chest: 0.0, arm: 0.0, groin: 100.0, leg: 96.69, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const MARAUDER_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 678, name: Cow::Borrowed("Marauder Boots"), base_armour: 52.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 15.65, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 9.53, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const MARAUDER_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 679, name: Cow::Borrowed("Marauder Gloves"), base_armour: 52.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Invulnerable, value: None, }), coverage: CoverageDto { body: 14.37, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.5, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const EOD_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 680, name: Cow::Borrowed("EOD Helmet"), base_armour: 55.0, armour: None, immunities: Cow::Borrowed(&[Immunity::ConcussionGrenade, Immunity::PepperSpray]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impassable, value: None, }), coverage: CoverageDto { body: 10.22, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 42.9, hand: 0.0, foot: 0.0, head: 100.0, }, }; const EOD_APRON: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 681, name: Cow::Borrowed("EOD Apron"), base_armour: 55.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impassable, value: None, }), coverage: CoverageDto { body: 55.24, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 100.0, leg: 17.58, throat: 100.0, hand: 16.88, foot: 0.0, head: 4.68, }, }; const EOD_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 682, name: Cow::Borrowed("EOD Pants"), base_armour: 55.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impassable, value: None, }), coverage: CoverageDto { body: 26.01, heart: 0.0, stomach: 23.94, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 20.13, head: 0.0, }, }; const EOD_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 683, name: Cow::Borrowed("EOD Boots"), base_armour: 55.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impassable, value: None, }), coverage: CoverageDto { body: 15.17, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 6.19, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const EOD_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 684, name: Cow::Borrowed("EOD Gloves"), base_armour: 55.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Impassable, value: None, }), coverage: CoverageDto { body: 14.37, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.5, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const KEVLAR_LAB_COAT: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 848, name: Cow::Borrowed("Kevlar Lab Coat"), base_armour: 32.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: None, coverage: CoverageDto { body: 29.15, heart: 0.0, stomach: 14.4, chest: 31.69, arm: 100.0, groin: 12.05, leg: 44.1, throat: 0.0, hand: 31.0, foot: 0.0, head: 0.0, }, }; const M_AOL_VISAGE: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 1164, name: Cow::Borrowed("M'aol Visage"), base_armour: 38.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Kinetokinesis, value: None, }), coverage: CoverageDto { body: 37.76, heart: 70.75, stomach: 18.22, chest: 81.03, arm: 7.22, groin: 0.33, leg: 0.0, throat: 100.0, hand: 0.0, foot: 0.0, head: 100.0, }, }; const M_AOL_SPATHE: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 1165, name: Cow::Borrowed("M'aol Spathe"), base_armour: 50.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Kinetokinesis, value: None, }), coverage: CoverageDto { body: 46.94, heart: 100.0, stomach: 95.91, chest: 100.0, arm: 99.35, groin: 5.14, leg: 0.0, throat: 68.97, hand: 0.0, foot: 0.0, head: 0.0, }, }; const M_AOL_BRITCHES: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 1166, name: Cow::Borrowed("M'aol Britches"), base_armour: 50.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Kinetokinesis, value: None, }), coverage: CoverageDto { body: 19.47, heart: 0.0, stomach: 4.46, chest: 0.0, arm: 0.0, groin: 100.0, leg: 90.19, throat: 0.0, hand: 0.0, foot: 0.0, head: 0.0, }, }; const M_AOL_HOOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 1167, name: Cow::Borrowed("M'aol Hooves"), base_armour: 50.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Kinetokinesis, value: None, }), coverage: CoverageDto { body: 10.99, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 9.9, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const M_AOL_CLAWSHIELDS: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 1168, name: Cow::Borrowed("M'aol Clawshields"), base_armour: 50.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Kinetokinesis, value: None, }), coverage: CoverageDto { body: 10.18, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 1.81, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const STARSHIELD_BREASTPLATE: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 1174, name: Cow::Borrowed("Starshield Breastplate"), base_armour: 39.0, armour: None, immunities: Cow::Borrowed(&[Immunity::Insanity]), bonus: None, coverage: CoverageDto { body: 33.43, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 10.89, groin: 8.17, leg: 0.0, throat: 15.19, hand: 0.0, foot: 0.0, head: 0.0, }, }; const SENTINEL_HELMET: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 1307, name: Cow::Borrowed("Sentinel Helmet"), base_armour: 53.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Immmutable, value: None, }), coverage: CoverageDto { body: 5.33, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 74.24, }, }; const SENTINEL_APRON: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 1308, name: Cow::Borrowed("Sentinel Apron"), base_armour: 53.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Immmutable, value: None, }), coverage: CoverageDto { body: 42.69, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 0.0, leg: 2.24, throat: 95.91, hand: 0.0, foot: 0.0, head: 0.0, }, }; const SENTINEL_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 1309, name: Cow::Borrowed("Sentinel Pants"), base_armour: 53.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Immmutable, value: None, }), coverage: CoverageDto { body: 24.74, heart: 0.0, stomach: 4.71, chest: 0.0, arm: 0.0, groin: 100.0, leg: 100.0, throat: 0.0, hand: 0.0, foot: 20.84, head: 0.0, }, }; const SENTINEL_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 1310, name: Cow::Borrowed("Sentinel Boots"), base_armour: 53.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Immmutable, value: None, }), coverage: CoverageDto { body: 15.11, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 5.63, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const SENTINEL_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 1311, name: Cow::Borrowed("Sentinel Gloves"), base_armour: 53.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Immmutable, value: None, }), coverage: CoverageDto { body: 14.37, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.55, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; const VANGUARD_RESPIRATOR: ArmourDto = ArmourDto { slot: ArmourSlot::Head, id: 1355, name: Cow::Borrowed("Vanguard Respirator"), base_armour: 48.0, armour: None, immunities: Cow::Borrowed(&[Immunity::PepperSpray, Immunity::NerveGas, Immunity::TearGas]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Irrepressible, value: None, }), coverage: CoverageDto { body: 2.82, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 0.0, throat: 0.0, hand: 0.0, foot: 0.0, head: 39.6, }, }; const VANGUARD_BODY: ArmourDto = ArmourDto { slot: ArmourSlot::Body, id: 1356, name: Cow::Borrowed("Vanguard Body"), base_armour: 48.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Irrepressible, value: None, }), coverage: CoverageDto { body: 44.28, heart: 100.0, stomach: 100.0, chest: 100.0, arm: 100.0, groin: 35.39, leg: 0.28, throat: 83.53, hand: 0.13, foot: 0.0, head: 0.0, }, }; const VANGUARD_PANTS: ArmourDto = ArmourDto { slot: ArmourSlot::Legs, id: 1357, name: Cow::Borrowed("Vanguard Pants"), base_armour: 48.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Irrepressible, value: None, }), coverage: CoverageDto { body: 24.96, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 99.07, leg: 100.0, throat: 0.0, hand: 0.0, foot: 25.2, head: 0.0, }, }; const VANGUARD_BOOTS: ArmourDto = ArmourDto { slot: ArmourSlot::Feet, id: 1358, name: Cow::Borrowed("Vanguard Boots"), base_armour: 48.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Irrepressible, value: None, }), coverage: CoverageDto { body: 15.13, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.0, groin: 0.0, leg: 5.83, throat: 0.0, hand: 0.0, foot: 100.0, head: 0.0, }, }; const VANGUARD_GLOVES: ArmourDto = ArmourDto { slot: ArmourSlot::Hands, id: 1359, name: Cow::Borrowed("Vanguard Gloves"), base_armour: 48.0, armour: None, immunities: Cow::Borrowed(&[]), bonus: Some(ArmourBonusInfo { kind: ArmourBonusType::Irrepressible, value: None, }), coverage: CoverageDto { body: 14.4, heart: 0.0, stomach: 0.0, chest: 0.0, arm: 0.73, groin: 0.0, leg: 0.0, throat: 0.0, hand: 100.0, foot: 0.0, head: 0.0, }, }; }