added chaos, slay, moved purify

This commit is contained in:
Mashy 2019-05-02 09:36:12 +10:00
parent 0a96adac4e
commit 8c68f7fec9
3 changed files with 59 additions and 14 deletions

View File

@ -216,6 +216,10 @@ function getCombatSequence(event) {
if (dotTicks.includes(event[1].skill)) return ['END_SKILL', 'POST_SKILL']; if (dotTicks.includes(event[1].skill)) return ['END_SKILL', 'POST_SKILL'];
if (['Immunity'].includes(event[0])) return ['START_SKILL', 'POST_SKILL']; if (['Immunity'].includes(event[0])) return ['START_SKILL', 'POST_SKILL'];
if (['Healing'].includes(event[0]) && event[1].skill === 'Slay') return ['POST_SKILL'];
if (['Damage'].includes(event[0])
&& event[1].skill === 'Chaos' && event[1].colour === 'RedDamage') return ['POST_SKILL'];
if (['Ko'].includes(event[0]) if (['Ko'].includes(event[0])
|| (event[1].skill === 'Throw' && event[1].effect === 'Vulnerable')) return ['POST_SKILL']; || (event[1].skill === 'Throw' && event[1].effect === 'Vulnerable')) return ['POST_SKILL'];

View File

@ -41,6 +41,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::Banish => banish(source, target, resolutions, Skill::Banish), // TODO prevent all actions Skill::Banish => banish(source, target, resolutions, Skill::Banish), // TODO prevent all actions
Skill::Blast => blast(source, target, resolutions, Skill::Blast), Skill::Blast => blast(source, target, resolutions, Skill::Blast),
Skill::Block => block(source, target, resolutions, Skill::Block), Skill::Block => block(source, target, resolutions, Skill::Block),
Skill::Chaos => chaos(source, target, resolutions, Skill::Chaos),
Skill::Clutch => clutch(source, target, resolutions, Skill::Clutch), Skill::Clutch => clutch(source, target, resolutions, Skill::Clutch),
Skill::Corrupt => corrupt(source, target, resolutions, Skill::Corrupt), Skill::Corrupt => corrupt(source, target, resolutions, Skill::Corrupt),
Skill::CorruptionTick => corruption_tick(source, target, resolutions, Skill::CorruptionTick), Skill::CorruptionTick => corruption_tick(source, target, resolutions, Skill::CorruptionTick),
@ -65,7 +66,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::Silence => silence(source, target, resolutions, Skill::Silence), // target cannot cast spells Skill::Silence => silence(source, target, resolutions, Skill::Silence), // target cannot cast spells
Skill::Siphon => siphon(source, target, resolutions, Skill::Siphon), Skill::Siphon => siphon(source, target, resolutions, Skill::Siphon),
Skill::SiphonTick => siphon_tick(source, target, resolutions, Skill::SiphonTick), // hot Skill::SiphonTick => siphon_tick(source, target, resolutions, Skill::SiphonTick), // hot
Skill::Slay => unimplemented!(), Skill::Slay => slay(source, target, resolutions, Skill::Slay), // hybrid dmg self heal
Skill::Slow => slow(source, target, resolutions, Skill::Slow), // speed slow Skill::Slow => slow(source, target, resolutions, Skill::Slow), // speed slow
Skill::Snare => snare(source, target, resolutions, Skill::Snare), Skill::Snare => snare(source, target, resolutions, Skill::Snare),
Skill::Strangle => strangle(source, target, resolutions, Skill::Strangle), Skill::Strangle => strangle(source, target, resolutions, Skill::Strangle),
@ -526,6 +527,7 @@ pub enum Skill {
// Chaos // Chaos
// ----------------- // -----------------
Banish, Banish,
Chaos,
Hex, Hex,
Haste, Haste,
Slow, Slow,
@ -541,18 +543,23 @@ pub enum Skill {
impl Skill { impl Skill {
pub fn multiplier(&self) -> u64 { pub fn multiplier(&self) -> u64 {
match self { match self {
// Attack Base
Skill::Attack => 100, // 1.0 to pass tests Skill::Attack => 100, // 1.0 to pass tests
Skill::Strike => 110, Skill::Blast => 130, // BB
Skill::Chaos => 50, // BR
Skill::Heal => 100, //GG 1.0 to pass tests
Skill::Slay => 70, // RG
Skill::Strike => 110, //RR
Skill::StrikeII => 130, Skill::StrikeII => 130,
Skill::StrikeIII => 150, Skill::StrikeIII => 150,
Skill::StrangleTick => 30,
Skill::Riposte => 100, // Others
Skill::Heal => 100, // 1.0 to pass tests
Skill::TriageTick => 65,
Skill::Blast => 130,
Skill::CorruptionTick => 80, Skill::CorruptionTick => 80,
Skill::DecayTick => 60, Skill::DecayTick => 60,
Skill::Riposte => 100,
Skill::SiphonTick => 100, // 1.0 to pass tests Skill::SiphonTick => 100, // 1.0 to pass tests
Skill::StrangleTick => 30,
Skill::TriageTick => 65,
_ => 100, _ => 100,
} }
} }
@ -635,6 +642,7 @@ impl Skill {
Skill::TriageTick => None, Skill::TriageTick => None,
Skill::Throw => Some(1), // no damage stun, adds vulnerable Skill::Throw => Some(1), // no damage stun, adds vulnerable
Skill::Blast => None, Skill::Blast => None,
Skill::Chaos => None,
Skill::Amplify => Some(1), Skill::Amplify => Some(1),
Skill::Invert => Some(2), Skill::Invert => Some(2),
Skill::Decay => None, // dot Skill::Decay => None, // dot
@ -708,6 +716,7 @@ impl Skill {
Skill::Invert => Category::Green, Skill::Invert => Category::Green,
Skill::Blast => Category::Blue, Skill::Blast => Category::Blue,
Skill::Chaos => Category::Red,
Skill::Amplify => Category::Blue, Skill::Amplify => Category::Blue,
Skill::Decay => Category::Blue, // dot Skill::Decay => Category::Blue, // dot
Skill::DecayTick => Category::BlueTick, // hot Skill::DecayTick => Category::BlueTick, // hot
@ -947,6 +956,19 @@ fn empower(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill
return results; return results;
} }
fn slay(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let amount = source.red_damage().pct(skill.multiplier());
target.deal_red_damage(skill, amount)
.into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e)));
source.deal_green_damage(skill, amount)
.into_iter()
.for_each(|e| results.push(Resolution::new(source, source).event(e)));
return results;
}
fn heal(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { fn heal(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let amount = source.green_damage().pct(skill.multiplier()); let amount = source.green_damage().pct(skill.multiplier());
target.deal_green_damage(skill, amount) target.deal_green_damage(skill, amount)
@ -971,6 +993,21 @@ fn triage_tick(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, s
return results; return results;
} }
fn chaos(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let mut rng = thread_rng();
let b_rng: u64 = rng.gen_range(0, 20);
let amount = source.blue_damage().pct(skill.multiplier()) + b_rng;
target.deal_blue_damage(skill, amount)
.into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e)));
let r_rng: u64 = rng.gen_range(0, 20);
let amount = source.red_damage().pct(skill.multiplier()) + r_rng;
target.deal_red_damage(skill, amount)
.into_iter()
.for_each(|e| results.push(Resolution::new(source, target).event(e)));
return results;
}
fn blast(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions { fn blast(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let amount = source.blue_damage().pct(skill.multiplier()); let amount = source.blue_damage().pct(skill.multiplier());
target.deal_blue_damage(skill, amount) target.deal_blue_damage(skill, amount)

View File

@ -65,6 +65,7 @@ pub enum Var {
Amplify, Amplify,
Banish, Banish,
Blast, Blast,
Chaos,
Curse, Curse,
Decay, Decay,
Empower, Empower,
@ -192,6 +193,7 @@ impl Var {
Var::Banish => Some(Skill::Banish), Var::Banish => Some(Skill::Banish),
Var::Blast => Some(Skill::Blast), Var::Blast => Some(Skill::Blast),
Var::Block => Some(Skill::Block), Var::Block => Some(Skill::Block),
Var::Chaos => Some(Skill::Chaos),
Var::Curse => Some(Skill::Curse), Var::Curse => Some(Skill::Curse),
Var::Decay => Some(Skill::Decay), Var::Decay => Some(Skill::Decay),
Var::Empower => Some(Skill::Empower), Var::Empower => Some(Skill::Empower),
@ -208,7 +210,7 @@ impl Var {
Var::Ruin => Some(Skill::Ruin), Var::Ruin => Some(Skill::Ruin),
Var::Shield => Some(Skill::Shield), Var::Shield => Some(Skill::Shield),
Var::Silence => Some(Skill::Silence), Var::Silence => Some(Skill::Silence),
// Var::Slay => Some(Skill::Slay), Var::Slay => Some(Skill::Slay),
Var::Slow => Some(Skill::Slow), Var::Slow => Some(Skill::Slow),
Var::Siphon => Some(Skill::Siphon), Var::Siphon => Some(Skill::Siphon),
Var::Snare => Some(Skill::Snare), Var::Snare => Some(Skill::Snare),
@ -265,6 +267,7 @@ impl From<Skill> for Var {
Skill::Banish => Var::Banish, Skill::Banish => Var::Banish,
Skill::Blast => Var::Blast, Skill::Blast => Var::Blast,
Skill::Block => Var::Block, Skill::Block => Var::Block,
Skill::Chaos => Var::Chaos,
Skill::Curse => Var::Curse, Skill::Curse => Var::Curse,
Skill::Clutch => Var::Clutch, Skill::Clutch => Var::Clutch,
Skill::Decay => Var::Decay, Skill::Decay => Var::Decay,
@ -283,6 +286,7 @@ impl From<Skill> for Var {
Skill::Shield => Var::Shield, Skill::Shield => Var::Shield,
Skill::Silence => Var::Silence, Skill::Silence => Var::Silence,
Skill::Siphon => Var::Siphon, Skill::Siphon => Var::Siphon,
Skill::Slay => Var::Slay,
Skill::Slow => Var::Slow, Skill::Slow => Var::Slow,
Skill::Snare => Var::Snare, Skill::Snare => Var::Snare,
Skill::Strangle => Var::Strangle, Skill::Strangle => Var::Strangle,
@ -362,7 +366,7 @@ fn get_combos() -> Vec<Combo> {
Combo { units: vec![Var::Block, Var::Green, Var::Green], var: Var::Reflect }, Combo { units: vec![Var::Block, Var::Green, Var::Green], var: Var::Reflect },
Combo { units: vec![Var::Block, Var::Blue, Var::Blue], var: Var::Corrupt }, Combo { units: vec![Var::Block, Var::Blue, Var::Blue], var: Var::Corrupt },
Combo { units: vec![Var::Block, Var::Red, Var::Green], var: Var::Taunt }, Combo { units: vec![Var::Block, Var::Red, Var::Green], var: Var::Taunt },
Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Recharge }, // was life before (clash) Combo { units: vec![Var::Block, Var::Green, Var::Blue], var: Var::Purify },
Combo { units: vec![Var::Block, Var::Red, Var::Blue], var: Var::Recharge }, Combo { units: vec![Var::Block, Var::Red, Var::Blue], var: Var::Recharge },
Combo { units: vec![Var::Stun, Var::Red, Var::Red], var: Var::Strangle }, Combo { units: vec![Var::Stun, Var::Red, Var::Red], var: Var::Strangle },
@ -376,11 +380,11 @@ fn get_combos() -> Vec<Combo> {
Combo { units: vec![Var::Strike, Var::Strike, Var::Strike], var: Var::StrikeII }, Combo { units: vec![Var::Strike, Var::Strike, Var::Strike], var: Var::StrikeII },
Combo { units: vec![Var::StrikeII, Var::StrikeII, Var::StrikeII], var: Var::StrikeIII }, Combo { units: vec![Var::StrikeII, Var::StrikeII, Var::StrikeII], var: Var::StrikeIII },
Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal }, Combo { units: vec![Var::Attack, Var::Green, Var::Green], var: Var::Heal },
Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast }, Combo { units: vec![Var::Attack, Var::Blue, Var::Blue], var: Var::Blast },
Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Purify }, Combo { units: vec![Var::Attack, Var::Red, Var::Green], var: Var::Slay },
Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Decay }, Combo { units: vec![Var::Attack, Var::Green, Var::Blue], var: Var::Decay },
Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Blast }, // AAAAAAAAAAAAAAAAAA Combo { units: vec![Var::Attack, Var::Red, Var::Blue], var: Var::Chaos },
Combo { units: vec![Var::Damage, Var::Red, Var::Red], var: Var::RedDamageI }, Combo { units: vec![Var::Damage, Var::Red, Var::Red], var: Var::RedDamageI },
Combo { units: vec![Var::Damage, Var::Green, Var::Green], var: Var::GreenDamageI }, Combo { units: vec![Var::Damage, Var::Green, Var::Green], var: Var::GreenDamageI },