diff --git a/client/src/scenes/statsheet.js b/client/src/scenes/statsheet.js index 45515f53..2bca7e91 100644 --- a/client/src/scenes/statsheet.js +++ b/client/src/scenes/statsheet.js @@ -63,7 +63,7 @@ class StatSheet extends Phaser.Scene { const crypStat = (stat, i) => { const STAT_X = X; const STAT_Y = Y + (i + 2) * TEXT_MARGIN; - this.add.text(STAT_X, STAT_Y, `${stat.stat}: ${stat.value}`, TEXT.NORMAL); + this.add.text(STAT_X, STAT_Y, `${stat.stat}: ${stat.base} -> ${stat.value}`, TEXT.NORMAL); }; const CRYP_STATS = [ diff --git a/server/src/vbox.rs b/server/src/vbox.rs index d59b2d6b..10ffa762 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -35,7 +35,7 @@ pub enum Var { Damage, Protection, Speed, - Hp, + Stamina, StaminaI, RedDamageI, @@ -94,84 +94,57 @@ impl Var { } } - fn effect(&self) -> Result { + fn effect(&self) -> Option { + if let Some(_skill) = self.skill() { + return Some(VarEffect::Skill); + } + if let Some(_spec) = self.spec() { + return Some(VarEffect::Spec); + } + return None; + } + + fn skill(&self) -> Option { match self { - Var::Amplify | - Var::Banish | - Var::Blast | - Var::Curse | - Var::Empower | - Var::Haste | - Var::Heal | - Var::Hex | - Var::Parry | - Var::Purge | - Var::Purify | - // Var::Reflect | - Var::Ruin | - Var::Shield | - Var::Silence | - Var::Slay | - Var::Slow | - Var::Snare | - Var::Strangle | - Var::Strike | - // Var::Clutch | - // Var::Taunt | - Var::Throw | - // Var::Toxic | - Var::Triage => Ok(VarEffect::Skill), - - Var::StaminaI | - Var::RedShieldI | - Var::BlueShieldI | - Var::SpeedI => Ok(VarEffect::Spec), - - _ => Err(err_msg("var has no effect on cryps")) + Var::Amplify => Some(Skill::Amplify), + Var::Banish => Some(Skill::Banish), + Var::Blast => Some(Skill::Blast), + Var::Curse => Some(Skill::Curse), + Var::Empower => Some(Skill::Empower), + Var::Haste => Some(Skill::Haste), + Var::Heal => Some(Skill::Heal), + Var::Hex => Some(Skill::Hex), + Var::Parry => Some(Skill::Parry), + Var::Purge => Some(Skill::Purge), + Var::Purify => Some(Skill::Purify), + // Var::Reflect => Some(Skill::Reflect), + Var::Ruin => Some(Skill::Ruin), + Var::Shield => Some(Skill::Shield), + Var::Silence => Some(Skill::Silence), + Var::Slay => Some(Skill::Slay), + Var::Slow => Some(Skill::Slow), + Var::Snare => Some(Skill::Snare), + Var::Strangle => Some(Skill::Strangle), + Var::Strike => Some(Skill::Strike), + // Var::Clutch => Some(Skill::Clutch), + // Var::Taunt => Some(Skill::Taunt), + Var::Throw => Some(Skill::Throw), + // Var::Toxic => Some(Skill::Toxic), + Var::Triage => Some(Skill::Triage), + _ => None, } } - fn skill(&self) -> Skill { - match self { - Var::Amplify => Skill::Amplify, - Var::Banish => Skill::Banish, - Var::Blast => Skill::Blast, - Var::Curse => Skill::Curse, - Var::Empower => Skill::Empower, - Var::Haste => Skill::Haste, - Var::Heal => Skill::Heal, - Var::Hex => Skill::Hex, - Var::Parry => Skill::Parry, - Var::Purge => Skill::Purge, - Var::Purify => Skill::Purify, - // Var::Reflect => Skill::Reflect, - Var::Ruin => Skill::Ruin, - Var::Shield => Skill::Shield, - Var::Silence => Skill::Silence, - Var::Slay => Skill::Slay, - Var::Slow => Skill::Slow, - Var::Snare => Skill::Snare, - Var::Strangle => Skill::Strangle, - Var::Strike => Skill::Strike, - // Var::Clutch => Skill::Clutch, - // Var::Taunt => Skill::Taunt, - Var::Throw => Skill::Throw, - // Var::Toxic => Skill::Toxic, - Var::Triage => Skill::Triage, - _ => panic!("not a skill var"), - } - } - - fn spec(&self) -> Spec { + fn spec(&self) -> Option { match *self { - Var::StaminaI => Spec::StaminaI, - Var::SpeedI => Spec::SpeedI, - Var::RedDamageI => Spec::RedDamageI, - Var::BlueDamageI => Spec::BlueDamageI, - Var::GreenDamageI => Spec::GreenDamageI, - Var::RedShieldI => Spec::RedShieldI, - Var::BlueShieldI => Spec::BlueShieldI, - _ => panic!("not a spec var"), + Var::StaminaI => Some(Spec::StaminaI), + Var::SpeedI => Some(Spec::SpeedI), + Var::RedDamageI => Some(Spec::RedDamageI), + Var::BlueDamageI => Some(Spec::BlueDamageI), + Var::GreenDamageI => Some(Spec::GreenDamageI), + Var::RedShieldI => Some(Spec::RedShieldI), + Var::BlueShieldI => Some(Spec::BlueShieldI), + _ => None, } } } @@ -243,7 +216,7 @@ impl Vbox { (Var::Damage, 1), (Var::Protection, 1), (Var::Speed, 1), - (Var::Hp, 1), + (Var::Stamina, 1), ]; let mut rng = thread_rng(); @@ -387,7 +360,7 @@ impl Vbox { }, Var::Protection => match colour_code { ColourCode::RR => Var::RedShieldI, - ColourCode::GG => return Err(err_msg("unhandled skill combo")), + ColourCode::GG => Var::StaminaI, ColourCode::BB => Var::BlueShieldI, ColourCode::RG => return Err(err_msg("unhandled skill combo")), ColourCode::GB => return Err(err_msg("unhandled skill combo")), @@ -432,9 +405,9 @@ pub fn vbox_apply(params: VboxApplyParams, tx: &mut Transaction, account: &Accou let mut player = player_get(tx, account.id, params.instance_id)?; let var = player.vbox.bound.remove(params.index); - match var.effect()? { - VarEffect::Skill => { - let skill = var.skill(); + match var.effect() { + Some(VarEffect::Skill) => { + let skill = var.skill().ok_or(format_err!("var {:?} has no associated skill", var))?; let cryp = player.cryp_get(params.cryp_id)?; // done here because i teach them a tonne of skills for tests let max_skills = 4; @@ -444,12 +417,13 @@ pub fn vbox_apply(params: VboxApplyParams, tx: &mut Transaction, account: &Accou cryp.learn_mut(skill); }, - VarEffect::Spec => { - let spec = var.spec(); + Some(VarEffect::Spec) => { + let spec = var.spec().ok_or(format_err!("var {:?} has no associated spec", var))?; let cryp = player.cryp_get(params.cryp_id)?; cryp.spec_add(spec)?; }, + None => return Err(err_msg("var has no effect on cryps")), } return player_update(tx, player, false);