This commit is contained in:
ntr 2019-03-28 07:24:51 +11:00
parent efb55f6024
commit 2494b2dd5f

View File

@ -52,9 +52,10 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::Empower => empower(source, target, resolutions), // increased phys damage Skill::Empower => empower(source, target, resolutions), // increased phys damage
Skill::Haste => haste(source, target, resolutions), // speed slow Skill::Haste => haste(source, target, resolutions), // speed slow
Skill::Heal => heal(source, target, resolutions), Skill::Heal => heal(source, target, resolutions),
Skill::Hex => hex(source, target, resolutions), // todo prevent casting Skill::Hex => hex(source, target, resolutions),
Skill::Hostility => hostility(source, target, resolutions), Skill::Hostility => hostility(source, target, resolutions),
Skill::Invert => invert(source, target, resolutions), // todo prevent casting Skill::Invert => invert(source, target, resolutions),
Skill::Injure => injure(source, target, resolutions),
Skill::Parry => parry(source, target, resolutions), Skill::Parry => parry(source, target, resolutions),
Skill::Purge => purge(source, target, resolutions), // dispel all buffs Skill::Purge => purge(source, target, resolutions), // dispel all buffs
Skill::Purify => purify(source, target, resolutions), // dispel all debuffs Skill::Purify => purify(source, target, resolutions), // dispel all debuffs
@ -68,7 +69,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::SiphonTick => siphon_tick(source, target, resolutions), // hot Skill::SiphonTick => siphon_tick(source, target, resolutions), // hot
Skill::Slay => unimplemented!(), Skill::Slay => unimplemented!(),
Skill::Slow => slow(source, target, resolutions), // speed slow Skill::Slow => slow(source, target, resolutions), // speed slow
Skill::Snare => snare(source, target, resolutions), // TODO prevent physical moves Skill::Snare => snare(source, target, resolutions),
Skill::Strangle => strangle(source, target, resolutions), Skill::Strangle => strangle(source, target, resolutions),
Skill::StrangleTick => strangle_tick(source, target, resolutions), Skill::StrangleTick => strangle_tick(source, target, resolutions),
Skill::Strike => strike(source, target, resolutions), Skill::Strike => strike(source, target, resolutions),
@ -226,6 +227,7 @@ pub enum Effect {
Blind, Blind,
Snare, Snare,
Clutch, Clutch,
Injured,
Reflect, Reflect,
@ -289,6 +291,11 @@ impl Effect {
Effect::Strangle => skill != Skill::StrangleTick, Effect::Strangle => skill != Skill::StrangleTick,
Effect::Strangling => true, Effect::Strangling => true,
Effect::Banish => true, Effect::Banish => true,
Effect::Injured => match skill.category() {
Category::Green => true,
Category::GreenTick => true,
_ => false,
},
_ => false, _ => false,
} }
} }
@ -314,6 +321,7 @@ impl Effect {
Effect::Ko => match skill.category() { Effect::Ko => match skill.category() {
Category::BlueTick => false, Category::BlueTick => false,
Category::GreenTick => false,
_ => true, _ => true,
}, },
_ => false, _ => false,
@ -380,6 +388,7 @@ impl Effect {
Effect::Clutch => Category::RedBuff, Effect::Clutch => Category::RedBuff,
Effect::Taunt => Category::RedBuff, Effect::Taunt => Category::RedBuff,
Effect::Empower => Category::RedBuff, Effect::Empower => Category::RedBuff,
Effect::Injured => Category::RedDebuff,
Effect::Strangle => Category::RedDebuff, Effect::Strangle => Category::RedDebuff,
Effect::Strangling => Category::RedBuff, Effect::Strangling => Category::RedBuff,
@ -428,6 +437,8 @@ impl Effect {
Effect::Reflect => 1, Effect::Reflect => 1,
Effect::Injured => 2,
Effect::Strangle => 2, Effect::Strangle => 2,
Effect::Strangling => 2, Effect::Strangling => 2,
@ -483,6 +494,7 @@ pub enum Category {
BlueBuff, BlueBuff,
BlueTick, BlueTick,
Green, Green,
GreenTick,
GreenDamage, GreenDamage,
GreenBuff, GreenBuff,
Ko, Ko,
@ -499,6 +511,7 @@ pub enum Skill {
Parry, // avoid all damage Parry, // avoid all damage
Riposte, Riposte,
Snare, Snare,
Injure,
Recharge, Recharge,
Reflect, Reflect,
@ -607,6 +620,7 @@ impl Skill {
Skill::StrangleTick => None, Skill::StrangleTick => None,
Skill::Clutch => Some(2), Skill::Clutch => Some(2),
Skill::Taunt => Some(1), Skill::Taunt => Some(1),
Skill::Injure => Some(2),
Skill::Corrupt => Some(1), Skill::Corrupt => Some(1),
Skill::CorruptionTick => None, Skill::CorruptionTick => None,
@ -628,39 +642,30 @@ impl Skill {
match self { match self {
Skill::Attack => Category::Red, Skill::Attack => Category::Red,
Skill::Strike => Category::Red, Skill::Strike => Category::Red,
Skill::Injure => Category::Red,
Skill::Strangle => Category::Red, Skill::Strangle => Category::Red,
Skill::StrangleTick => Category::Red, Skill::StrangleTick => Category::Red,
// -----------------
// Nature
// -----------------
Skill::Block => Category::Red, // reduce damage Skill::Block => Category::Red, // reduce damage
Skill::Parry => Category::Red, // avoid all damage Skill::Parry => Category::Red, // avoid all damage
Skill::Riposte => Category::Red, // avoid all damage Skill::Riposte => Category::Red, // avoid all damage
Skill::Snare => Category::Red, Skill::Snare => Category::Red,
Skill::Clutch => Category::Red, Skill::Clutch => Category::Red,
Skill::Stun => Category::Red, Skill::Stun => Category::Red,
Skill::Slay => Category::Red,
Skill::Taunt => Category::Red,
// ----------------- Skill::Heal => Category::Green,
// Technology Skill::Triage => Category::Green, // hot
// ----------------- Skill::TriageTick => Category::GreenTick, // hot
Skill::Throw => Category::Green,
// ----------------- Skill::Empower => Category::Green,
// Preservation Skill::Shield => Category::Green,
// ----------------- Skill::Purify => Category::Green,
Skill::Heal => Category::Red, Skill::Recharge => Category::Green,
Skill::Triage => Category::Blue, // hot Skill::Reflect => Category::Green,
Skill::TriageTick => Category::BlueTick, // hot Skill::Haste => Category::Green,
Skill::Throw => Category::Red, // no damage stun, adds vulnerable
// -----------------
// Destruction
// -----------------
Skill::Invert => Category::Green, Skill::Invert => Category::Green,
Skill::Blast => Category::Blue, Skill::Blast => Category::Blue,
Skill::Amplify => Category::Blue, Skill::Amplify => Category::Blue,
Skill::Decay => Category::Blue, // dot Skill::Decay => Category::Blue, // dot
@ -668,35 +673,13 @@ impl Skill {
Skill::Siphon => Category::Blue, Skill::Siphon => Category::Blue,
Skill::SiphonTick => Category::BlueTick, // hot Skill::SiphonTick => Category::BlueTick, // hot
Skill::Curse => Category::Blue, Skill::Curse => Category::Blue,
// -----------------
// Purity
// -----------------
Skill::Empower => Category::Red,
Skill::Shield => Category::Blue,
Skill::Silence => Category::Blue, Skill::Silence => Category::Blue,
Skill::Purify => Category::Blue,
Skill::Purge => Category::Blue, Skill::Purge => Category::Blue,
// -----------------
// Chaos
// -----------------
Skill::Banish => Category::Blue, Skill::Banish => Category::Blue,
Skill::Hex => Category::Blue, Skill::Hex => Category::Blue,
// Skill::Lag => 2, //
Skill::Haste => Category::Blue,
Skill::Slow => Category::Blue, Skill::Slow => Category::Blue,
// WRONG
Skill::Recharge => Category::Green,
Skill::Reflect => Category::Green,
Skill::Ruin => Category::Blue, Skill::Ruin => Category::Blue,
Skill::Slay => Category::Red,
Skill::Taunt => Category::Red,
Skill::Hostility => Category::Blue, Skill::Hostility => Category::Blue,
Skill::Corrupt => Category::Blue, Skill::Corrupt => Category::Blue,
Skill::CorruptionTick => Category::Blue, Skill::CorruptionTick => Category::Blue,
@ -804,6 +787,16 @@ fn strike(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions) -> Res
return results; return results;
} }
fn injure(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions) -> Resolutions {
let amount = source.red_damage();
target.deal_red_damage(Skill::Injure, amount)
.into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e)));
let effect = CrypEffect::new(Effect::Injured);
results.push(Resolution::new(source, target).event(target.add_effect(Skill::Injure, effect)));
return results;
}
fn stun(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions) -> Resolutions { fn stun(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions) -> Resolutions {
let effect = CrypEffect::new(Effect::Stun); let effect = CrypEffect::new(Effect::Stun);
@ -1188,6 +1181,19 @@ mod tests {
}; };
} }
#[test]
fn injure_test() {
let mut x = Cryp::new()
.named(&"muji".to_string());
let mut y = Cryp::new()
.named(&"camel".to_string());
resolve(Skill::Injure, &mut x, &mut y, vec![]);
assert!(y.immune(Skill::Heal).is_some());
// resolutions = heal(&mut y.clone(), &mut y, resolutions);
}
#[test] #[test]
fn invert_test() { fn invert_test() {
let mut x = Cryp::new() let mut x = Cryp::new()