From ae8a384b39eabbd42c01c919a12ce8d2a2d79859 Mon Sep 17 00:00:00 2001 From: Mashy Date: Tue, 7 May 2019 16:39:17 +1000 Subject: [PATCH] Buff effects represented as perectanges, slow is now applied by debuff --- CHANGELOG.md | 20 +++++++++++++++----- server/src/skill.rs | 35 +++++++++++++++++------------------ server/src/vbox.rs | 4 +--- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5bad0cc..e3824508 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,13 +39,21 @@ New skill `Impurity` ### Fixed - Ruin sends a skill event so ruin only casts once, followed by debuffs +- ### Changed - Removed Empower (Buff + RR) -> combined effect with amplify +- Skill Slow removed + +- Debuff is now a usable skill `(add buff as a usable skill also)` + Applies slow effect previously applied by skill Slow + Slow effect lasts 3T + Cooldown 1T - Amplify Changed to Buff + RB (was Buff + BB) + Inc red and blue multiplier changed 200% -> 150% Increases both red and blue power. - Attack @@ -59,11 +67,17 @@ New skill `Impurity` RNG range changed from (0 - 20%) -> (0 - 30%) Same dmg range but more RNG +- Curse + Inc red and blue multiplier changed 200% -> 150% + `(More reworks soon to make this skill fun)` + + - Haste Changed to Buff + RG (was Buff + RB) Buff causes target to deal an extra attack when using red attack base skills (strike / slay / chaos) Extra attack does 25% source speed as red damage Cooldown increased to 2T + Speed bonused reduced 200% -> 150% - Heal Changed multiplier 120% -> 130% @@ -84,6 +98,7 @@ New skill `Impurity` - Throw Stun duration reduced from 2T -> 1T + Vulnerable dmg bonus reduced 200% -> 150% - Triage Multiplier changed 65% -> 75% @@ -131,13 +146,8 @@ New skill `Impurity` Cooldown changed 1T -> 2T Debuff duration increased 2T -> 3T Snare -<<<<<<< HEAD Now also deals damage amount of 40% base blue damage This damage amount does 45% more damage per red skill blocked -======= - Now also deals damage amount of 40% base red damage - This damage amount does 45% more damage per red skill blocked ->>>>>>> rebalance Maximum = (0.40)(1.35)*base_red_damage Cooldown changed 1T -> 2T Debuff duration increased 2T -> 3T diff --git a/server/src/skill.rs b/server/src/skill.rs index 802b6ae6..8bd810a4 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -75,6 +75,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio Skill::Corrupt => corrupt(source, target, resolutions, skill), Skill::CorruptionTick => corruption_tick(source, target, resolutions, skill), Skill::Curse => curse(source, target, resolutions, skill), + Skill::Debuff => debuff(source, target, resolutions, skill), // speed slow Skill::Decay => decay(source, target, resolutions, skill), // dot Skill::DecayTick => decay_tick(source, target, resolutions, skill), // dot Skill::Haste => haste(source, target, resolutions, skill), // speed slow @@ -99,7 +100,6 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio Skill::SiphonTick => siphon_tick(source, target, resolutions, skill), // hot Skill::Slay => slay(source, target, resolutions, skill), // hybrid dmg self heal Skill::Sleep => sleep(source, target, resolutions, skill), // speed slow - Skill::Slow => slow(source, target, resolutions, skill), // speed slow Skill::Snare => snare(source, target, resolutions, skill), Skill::Strangle => strangle(source, target, resolutions, skill), Skill::StrangleTick => strangle_tick(source, target, resolutions, skill), @@ -387,17 +387,17 @@ impl Effect { pub fn apply(&self, value: u64, meta: Option) -> u64 { match self { - Effect::Vulnerable => value << 1, - Effect::Block => value >> 1, + Effect::Vulnerable => value.pct(150), + Effect::Block => value.pct(50), - Effect::Amplify => value << 1, - Effect::Curse => value << 1, + Effect::Amplify => value.pct(150), + Effect::Curse => value.pct(150), - Effect::Haste => value << 1, - Effect::Slow => value >> 1, + Effect::Haste => value.pct(150), + Effect::Slow => value.pct(50), - Effect::Impurity => value << 1, - Effect::Wither => value >> 1, + Effect::Impurity => value.pct(150), + Effect::Wither => value.pct(50), Effect::Hatred => value + match meta { Some(EffectMeta::AddedDamage(d)) => d, @@ -494,11 +494,13 @@ pub enum Category { #[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)] pub enum Skill { Attack, + Debuff, + Block, // reduce damage + Stun, // ----------------- // Nature // ----------------- - Block, // reduce damage Parry, // avoid all damage Riposte, Snare, @@ -521,7 +523,6 @@ pub enum Skill { Strike, StrikeII, StrikeIII, - Stun, // Evade, // actively evade // ----------------- @@ -568,7 +569,6 @@ pub enum Skill { Hex, Haste, HasteStrike, - Slow, // used by tests, no cd, 100% multiplier TestAttack, @@ -627,7 +627,7 @@ impl Skill { Skill::Block => 1, Skill::Parry => 1, Skill::Clutch => 1, - + Skill::Debuff => 3, Skill::Reflect => 1, Skill::Injure => 2, @@ -649,7 +649,6 @@ impl Skill { Skill::Curse => 2, Skill::Banish => 1, - Skill::Slow => 2, Skill::Haste => 2, Skill::Amplify => 2, @@ -689,6 +688,7 @@ impl Skill { pub fn base_cd(&self) -> Cooldown { match self { Skill::Attack => None, + Skill::Debuff => Some(1), Skill::Strike => None, Skill::StrikeII => None, Skill::StrikeIII => None, @@ -721,7 +721,6 @@ impl Skill { Skill::Haste => Some(2), Skill::HasteStrike => None, // Used in haste - Skill::Slow => None, Skill::Reflect => Some(2), Skill::Recharge => Some(2), Skill::Ruin => Some(3), @@ -797,7 +796,7 @@ impl Skill { Skill::Purge => Category::Blue, Skill::Banish => Category::Blue, Skill::Hex => Category::Blue, - Skill::Slow => Category::Blue, + Skill::Debuff => Category::Blue, Skill::Ruin => Category::Blue, Skill::Hostility => Category::Blue, Skill::Corrupt => Category::Blue, @@ -1128,7 +1127,7 @@ fn haste(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: return results;; } -fn slow(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { +fn debuff(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { let effect = CrypEffect::new(Effect::Slow, skill.duration()); results.push(Resolution::new(source, target).event(target.add_effect(skill, effect))); return results;; @@ -1638,7 +1637,7 @@ mod tests { amplify(&mut x.clone(), &mut x, vec![], Skill::Amplify); assert!(x.effects.iter().any(|e| e.effect == Effect::Amplify)); - assert_eq!(x.blue_damage(), 100); + assert_eq!(x.blue_damage(), 75); } #[test] diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 19e32714..036c1bfd 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -86,7 +86,6 @@ pub enum Var { Silence, Slay, Sleep, - Slow, Snare, Strangle, Strike, @@ -196,6 +195,7 @@ impl Var { Var::Block => Some(Skill::Block), Var::Chaos => Some(Skill::Chaos), Var::Curse => Some(Skill::Curse), + Var::Debuff => Some(Skill::Debuff), Var::Decay => Some(Skill::Decay), Var::Haste => Some(Skill::Haste), Var::Heal => Some(Skill::Heal), @@ -213,7 +213,6 @@ impl Var { Var::Silence => Some(Skill::Silence), Var::Slay => Some(Skill::Slay), Var::Sleep => Some(Skill::Sleep), - Var::Slow => Some(Skill::Slow), Var::Siphon => Some(Skill::Siphon), Var::Snare => Some(Skill::Snare), Var::Strangle => Some(Skill::Strangle), @@ -290,7 +289,6 @@ impl From for Var { Skill::Siphon => Var::Siphon, Skill::Slay => Var::Slay, Skill::Sleep => Var::Sleep, - Skill::Slow => Var::Slow, Skill::Snare => Var::Snare, Skill::Strangle => Var::Strangle, Skill::Strike => Var::Strike,