From 6fa3fc043f4ee9978e146396889c8870e512abbe Mon Sep 17 00:00:00 2001 From: ntr Date: Sun, 13 Jan 2019 15:12:24 +1100 Subject: [PATCH] evasion --- server/WORKLOG.md | 11 +++++++---- server/src/cryp.rs | 14 +++++++++++--- server/src/game.rs | 6 +++--- server/src/mob.rs | 4 +++- server/src/skill.rs | 2 +- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/server/WORKLOG.md b/server/WORKLOG.md index 4dc7ad91..e9ff2e96 100644 --- a/server/WORKLOG.md +++ b/server/WORKLOG.md @@ -24,10 +24,8 @@ strangle ## NOW -* armour and SS - * rolls as a drop item - * armour and SS the same - * evasion is a % function of the value +* rolls as a drop item +* evasion is a % function of the hp value ## SOON * clean up categories @@ -66,6 +64,11 @@ strangle * Pixel * Industrial +# notables +* prince of peace + * bonus healing / no damage +* fuck magic + # Mechanic Ideas teams 1v1 2v2 3v3 diff --git a/server/src/cryp.rs b/server/src/cryp.rs index d3e862cd..eda5b7f5 100644 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -526,12 +526,20 @@ impl Cryp { pub fn evade(&self, skill: Skill) -> Option { let mut rng = thread_rng(); - let rating = 100 - self.evasion.base; - let roll = rng.gen_range(0, 100); + let hp_pct = self.hp.base as f64 / self.stamina.base as f64; + let evasion_rating = self.evasion.base as f64 * hp_pct; - match roll > rating { + // println!("{:?}", evasion_rating); + if evasion_rating == 0.0 { + return None; + } + + let roll = rng.gen_bool(evasion_rating / 100.0); + + match roll { true => Some(ResolutionResult::Evasion { skill, + evasion_rating: evasion_rating.round(), }), false => None, } diff --git a/server/src/game.rs b/server/src/game.rs index 24b5fe96..7eb593e3 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -379,9 +379,9 @@ impl Game { cast.resolution.speed, source.name, target.name, effect)), } }, - ResolutionResult::Evasion { skill: _ } => { - self.log.push(format!("[{:}] {:} {:?} {:} evaded", - cast.resolution.speed, source.name, cast.skill, target.name)); + ResolutionResult::Evasion { skill: _, evasion_rating } => { + self.log.push(format!("[{:}] {:} {:?} {:} evaded ({:}%)", + cast.resolution.speed, source.name, cast.skill, target.name, evasion_rating)); }, } } diff --git a/server/src/mob.rs b/server/src/mob.rs index 29ed5b5b..4ccfe356 100644 --- a/server/src/mob.rs +++ b/server/src/mob.rs @@ -32,10 +32,12 @@ fn generate_mob(lvl: u8) -> Cryp { // _ => rng.gen_range(lvl.saturating_sub(2), lvl) // }; - return Cryp::new() + let mob = Cryp::new() .named(&name) .level(lvl) .create(); + + return mob; } fn quick_game(mob_lvl: u8, team_size: usize) -> Vec { diff --git a/server/src/skill.rs b/server/src/skill.rs index 7f9f376c..6be796ab 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -70,7 +70,7 @@ pub enum ResolutionResult { Healing { amount: u64, overhealing: u64, category: Category , immunity: Immunity }, Effect { effect: Effect, duration: u8, immunity: Immunity }, Removal { effect: Effect, immunity: Immunity }, - Evasion { skill: Skill }, + Evasion { skill: Skill, evasion_rating: f64 }, } #[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]