From 17ecfdb41e69fd58bce22053ee3ee6cda06996a4 Mon Sep 17 00:00:00 2001 From: ntr Date: Fri, 22 Mar 2019 22:33:43 +1100 Subject: [PATCH] strangle --- server/WORKLOG.md | 7 ++++-- server/src/skill.rs | 59 ++++++++++++++++++++++++++++++++++++++++----- server/src/vbox.rs | 4 ++- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/server/WORKLOG.md b/server/WORKLOG.md index e7151270..05913a5b 100644 --- a/server/WORKLOG.md +++ b/server/WORKLOG.md @@ -20,13 +20,16 @@ ensure all skills impl Skill::Reflect -> reflect incoming attacks back to opponent Skill::Ruin -> aoe stun Skill::Slay -> red attack with bonus somethingorother for blue / maim no healing - Skill::Strangle -> stun + dot - Skill::Clutch -> cannot go below 1hp Skill::Taunt -> redirect incomnig attacks to self Skill::Toxic -> apply debuff to attackers colour speeds +ticks apply on first turn +update speed of rest of stack on cryp speed change +include target name in effect resolution + eg strangle applies buff to self + make parry semi-aggressive constants change to ownership pattern diff --git a/server/src/skill.rs b/server/src/skill.rs index de873634..40e19ee0 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -105,6 +105,8 @@ pub enum Effect { Empower, Invert, + Strangle, + Strangling, // magic Hex, @@ -145,6 +147,8 @@ impl Effect { Category::Red => false, _ => false, }, + Effect::Strangle => skill != Skill::StrangleTick, + Effect::Strangling => true, Effect::Banish => true, _ => false, } @@ -155,6 +159,8 @@ impl Effect { Effect::Stun => true, Effect::Hex => true, Effect::Banish => true, + Effect::Strangle => true, + Effect::Strangling => skill != Skill::StrangleTick, Effect::Silence => match skill.category() { Category::Blue => true, Category::Red => false, @@ -229,6 +235,8 @@ impl Effect { Effect::Snare => Category::RedDebuff, Effect::Clutch => Category::RedBuff, Effect::Empower => Category::RedBuff, + Effect::Strangle => Category::RedDebuff, + Effect::Strangling => Category::RedBuff, // magic Effect::Hex => Category::BlueDebuff, @@ -265,6 +273,9 @@ impl Effect { Effect::Parry => 1, Effect::Clutch => 1, + Effect::Strangle => 2, + Effect::Strangling => 2, + Effect::Vulnerable => 2, Effect::Snare => 2, @@ -329,12 +340,14 @@ pub enum Skill { Reflect, Ruin, Slay, - Strangle, Clutch, Taunt, Toxic, Invert, + Strangle, + StrangleTick, + Strike, Stun, // Evade, // actively evade @@ -420,7 +433,8 @@ impl Skill { Skill::Recharge => Some(2), Skill::Ruin => Some(1), Skill::Slay => None, - Skill::Strangle => Some(1), + Skill::Strangle => Some(2), + Skill::StrangleTick => None, Skill::Clutch => Some(2), Skill::Taunt => Some(1), Skill::Toxic => Some(1), @@ -441,12 +455,16 @@ impl Skill { Skill::Attack => Category::Red, Skill::Strike => Category::Red, + Skill::Strangle => Category::Red, + Skill::StrangleTick => Category::Red, + // ----------------- // Nature // ----------------- Skill::Block => Category::Red, // reduce damage Skill::Parry => Category::Red, // avoid all damage Skill::Snare => Category::Red, + Skill::Clutch => Category::Red, @@ -500,8 +518,6 @@ impl Skill { Skill::Reflect => Category::Blue, Skill::Ruin => Category::Blue, Skill::Slay => Category::Blue, - Skill::Strangle => Category::Blue, - Skill::Clutch => Category::Red, Skill::Taunt => Category::Blue, Skill::Toxic => Category::Blue, @@ -569,7 +585,8 @@ impl Skill { Skill::Reflect => 1, Skill::Ruin => 1, Skill::Slay => 1, - Skill::Strangle => 1, + Skill::Strangle => 5, + Skill::StrangleTick => 5, Skill::Clutch => 1, Skill::Taunt => 1, Skill::Toxic => 1, @@ -645,11 +662,12 @@ impl Skill { Skill::Triage => triage(source, target, resolution), // hot Skill::TriageTick => triage_tick(source, target, resolution), // hot Skill::Clutch => clutch(source, target, resolution), + Skill::Strangle => strangle(source, target, resolution), + Skill::StrangleTick => strangle_tick(source, target, resolution), Skill::Reflect => unimplemented!(), Skill::Ruin => unimplemented!(), Skill::Slay => unimplemented!(), - Skill::Strangle => unimplemented!(), Skill::Taunt => unimplemented!(), Skill::Toxic => unimplemented!(), @@ -716,6 +734,35 @@ fn throw(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Res return resolution; } +fn strangle(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { + let target_stun = CrypEffect { + effect: Effect::Strangle, + duration: Effect::Strangle.duration(), + tick: Some(Cast::new_tick(cryp, target, Skill::StrangleTick)) + }; + let attacker_immunity = CrypEffect { effect: Effect::Strangling, duration: Effect::Strangling.duration(), tick: None }; + + resolution.results.push(target.add_effect(Skill::Strangle, target_stun)); + resolution.results.push(cryp.add_effect(Skill::Strangle, attacker_immunity)); + + return resolution; +} + +fn strangle_tick(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { + let amount = cryp.red_damage(); + resolution.results.push(target.deal_red_damage(Skill::StrangleTick, amount)); + + // remove immunity if target ko + if target.is_ko() { + let i = cryp.effects + .iter() + .position(|e| e.effect == Effect::Strangling) + .expect("no strangling on cryp"); + cryp.effects.remove(i); + } + + return resolution; +} fn block(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { let block = CrypEffect { effect: Effect::Block, duration: Effect::Block.duration(), tick: None }; diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 50e8d354..ac677f48 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -161,6 +161,7 @@ impl Var { Var::Amplify => Some(Skill::Amplify), Var::Banish => Some(Skill::Banish), Var::Blast => Some(Skill::Blast), + Var::Block => Some(Skill::Block), Var::Curse => Some(Skill::Curse), Var::Empower => Some(Skill::Empower), Var::Haste => Some(Skill::Haste), @@ -178,7 +179,7 @@ impl Var { // Var::Slay => Some(Skill::Slay), Var::Slow => Some(Skill::Slow), Var::Snare => Some(Skill::Snare), - // Var::Strangle => Some(Skill::Strangle), + Var::Strangle => Some(Skill::Strangle), Var::Strike => Some(Skill::Strike), Var::Clutch => Some(Skill::Clutch), // Var::Taunt => Some(Skill::Taunt), @@ -243,6 +244,7 @@ impl From for Var { Skill::Slow => Var::Slow, Skill::Snare => Var::Snare, Skill::Strike => Var::Strike, + Skill::Strangle => Var::Strangle, Skill::Stun => Var::Stun, Skill::Throw => Var::Throw, Skill::Triage => Var::Triage,