diff --git a/client/src/scenes/statsheet.js b/client/src/scenes/statsheet.js index 43b7bfbc..c5290a67 100644 --- a/client/src/scenes/statsheet.js +++ b/client/src/scenes/statsheet.js @@ -90,7 +90,7 @@ class StatSheet extends Phaser.Scene { this.add.text(X + WIDTH * 0.175, Y, 'Skills', TEXT.HEADER); this.add.text(X + WIDTH * 0.175, Y + HEIGHT * 0.25, 'Specs', TEXT.HEADER); - const knownSpec = (spec, i) => { + const knownSpec = (spec, i) => { const SKILL_X = X + WIDTH * 0.21 + WIDTH * 0.125 * i; const SKILL_Y = Y + HEIGHT * 0.4; const itemObj = new Item(this, spec, i, SKILL_X, SKILL_Y, SKILL_WIDTH, Math.floor(SKILL_WIDTH / 2)); diff --git a/server/src/cryp.rs b/server/src/cryp.rs index c087b45a..8c73152c 100644 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -72,7 +72,7 @@ impl CrypStat { pub fn recalculate(&mut self, specs: &Vec) -> &mut CrypStat { let specs = specs .iter() - .filter(|s| s.affects() == self.stat) + .filter(|s| s.affects().contains(&self.stat)) .map(|s| *s) .collect::>(); diff --git a/server/src/spec.rs b/server/src/spec.rs index 03c3ab54..25a524a3 100644 --- a/server/src/spec.rs +++ b/server/src/spec.rs @@ -1,38 +1,59 @@ +use rand::prelude::*; + use cryp::{Stat}; #[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq)] pub enum Spec { SpeedI, - HpI, + + LifeI, + RedShieldI, + BlueShieldI, + LRSI, + LBSI, + RBSI, + RedDamageI, GreenDamageI, BlueDamageI, - RedShieldI, - BlueShieldI, } impl Spec { - pub fn affects(&self) -> Stat { + pub fn affects(&self) -> Vec { match *self { - Spec::RedDamageI => Stat::RedDamage, - Spec::GreenDamageI => Stat::GreenDamage, - Spec::BlueDamageI => Stat::BlueDamage, - Spec::RedShieldI => Stat::RedShield, - Spec::BlueShieldI => Stat::BlueShield, - Spec::SpeedI => Stat::Speed, - Spec::HpI => Stat::Hp, + Spec::RedDamageI => vec![Stat::RedDamage], + Spec::GreenDamageI => vec![Stat::GreenDamage], + Spec::BlueDamageI => vec![Stat::BlueDamage], + Spec::RedShieldI => vec![Stat::RedShield], + Spec::BlueShieldI => vec![Stat::BlueShield], + Spec::SpeedI => vec![Stat::Speed], + Spec::LifeI => vec![Stat::Hp], + Spec::LRSI => vec![Stat::Hp, Stat::RedShield], + Spec::LBSI => vec![Stat::Hp, Stat::BlueShield], + Spec::RBSI => vec![Stat::BlueShield, Stat::RedShield], + } } pub fn apply(&self, modified: u64, base: u64) -> u64 { + let mut rng = thread_rng(); + + let i_min = 32; + let i_max = 64; + match *self { Spec::RedDamageI => modified + (base * 5 / 100), Spec::GreenDamageI => modified + (base * 5 / 100), Spec::BlueDamageI => modified + (base * 5 / 100), + Spec::SpeedI => modified + (base * 5 / 100), - Spec::HpI => modified + (base * 5 / 100), - Spec::RedShieldI => modified + 50, - Spec::BlueShieldI => modified + 50, + + Spec::LifeI => modified + (base * 5 / 100), + Spec::RedShieldI => modified + rng.gen_range(i_min, i_max), + Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max), + Spec::LRSI => modified + (base * 5 / 100), + Spec::LBSI => modified + (base * 5 / 100), + Spec::RBSI => modified + (base * 5 / 100), } } diff --git a/server/src/vbox.rs b/server/src/vbox.rs index d31e9758..6e6db1db 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -36,7 +36,11 @@ pub enum Var { Hp, Speed, - HpI, + LifeI, + LRSI, + LBSI, + RBSI, + RedDamageI, BlueDamageI, GreenDamageI, @@ -141,7 +145,10 @@ impl Var { Var::BlueDamageI => Some(Spec::BlueDamageI), Var::GreenDamageI => Some(Spec::GreenDamageI), - Var::HpI => Some(Spec::HpI), + Var::LifeI => Some(Spec::LifeI), + Var::LRSI => Some(Spec::LRSI), + Var::LBSI => Some(Spec::LBSI), + Var::RBSI => Some(Spec::RBSI), Var::RedShieldI => Some(Spec::RedShieldI), Var::BlueShieldI => Some(Spec::BlueShieldI), @@ -360,11 +367,11 @@ impl Vbox { }, Var::Hp => match colour_code { ColourCode::RR => Var::RedShieldI, - ColourCode::GG => Var::HpI, + ColourCode::GG => Var::LifeI, ColourCode::BB => Var::BlueShieldI, - ColourCode::RG => return Err(err_msg("unhandled skill combo")), - ColourCode::GB => return Err(err_msg("unhandled skill combo")), - ColourCode::BR => return Err(err_msg("unhandled skill combo")), + ColourCode::RG => Var::LRSI, + ColourCode::GB => Var::LBSI, + ColourCode::BR => Var::RBSI, }, _ => panic!("wrong base {:?}", base),