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

View File

@ -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

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 };

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,