This commit is contained in:
ntr
2019-03-22 22:33:43 +11:00
parent d814e20656
commit 17ecfdb41e
3 changed files with 61 additions and 9 deletions
+53 -6
View File
@@ -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 };
+3 -1
View File
@@ -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<Skill> 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,