This commit is contained in:
Mashy 2019-05-27 10:41:36 +10:00
parent 6bbf8d0e34
commit b0eb9a8a51
3 changed files with 231 additions and 107 deletions

View File

@ -1346,15 +1346,15 @@ mod tests {
let x_cryp = x_player.cryps[0].clone(); let x_cryp = x_player.cryps[0].clone();
let y_cryp = x_player.cryps[1].clone(); let y_cryp = x_player.cryps[1].clone();
game.cryp_by_id(x_cryp.id).unwrap().learn_mut(Skill::Taunt); game.cryp_by_id(x_cryp.id).unwrap().learn_mut(Skill::TauntI);
while game.cryp_by_id(x_cryp.id).unwrap().skill_on_cd(Skill::Taunt).is_some() { while game.cryp_by_id(x_cryp.id).unwrap().skill_on_cd(Skill::TauntI).is_some() {
game.cryp_by_id(x_cryp.id).unwrap().reduce_cooldowns(); game.cryp_by_id(x_cryp.id).unwrap().reduce_cooldowns();
} }
game.add_skill(i_player.id, i_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap(); game.add_skill(i_player.id, i_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap();
game.add_skill(i_player.id, j_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap(); game.add_skill(i_player.id, j_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap();
game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::Taunt).unwrap(); game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::TauntI).unwrap();
game.add_skill(x_player.id, y_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap(); game.add_skill(x_player.id, y_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap();
game.player_ready(i_player.id).unwrap(); game.player_ready(i_player.id).unwrap();

View File

@ -98,16 +98,26 @@ pub enum Item {
SilenceI, SilenceI,
SilenceII, SilenceII,
SilenceIII, SilenceIII,
Slay, SlayI,
Sleep, SlayII,
Snare, SlayIII,
SleepI,
SleepII,
SleepIII,
SnareI,
SnareII,
SnareIII,
Strangle, Strangle,
StrikeI, StrikeI,
StrikeII, StrikeII,
StrikeIII, StrikeIII,
Siphon, Siphon,
Taunt, TauntI,
Throw, TauntII,
TauntIII,
ThrowI,
ThrowII,
ThrowIII,
Triage, Triage,
@ -264,10 +274,16 @@ impl Item {
Item::SilenceI => Some(Skill::SilenceI), Item::SilenceI => Some(Skill::SilenceI),
Item::SilenceII => Some(Skill::SilenceII), Item::SilenceII => Some(Skill::SilenceII),
Item::SilenceIII => Some(Skill::SilenceIII), Item::SilenceIII => Some(Skill::SilenceIII),
Item::Slay => Some(Skill::Slay), Item::SlayI => Some(Skill::SlayI),
Item::Sleep => Some(Skill::Sleep), Item::SlayII => Some(Skill::SlayII),
Item::SlayIII => Some(Skill::SlayIII),
Item::SleepI => Some(Skill::SleepI),
Item::SleepII => Some(Skill::SleepII),
Item::SleepIII => Some(Skill::SleepIII),
Item::Siphon => Some(Skill::Siphon), Item::Siphon => Some(Skill::Siphon),
Item::Snare => Some(Skill::Snare), Item::SnareI => Some(Skill::SnareI),
Item::SnareII => Some(Skill::SnareII),
Item::SnareIII => Some(Skill::SnareIII),
Item::Strangle => Some(Skill::Strangle), Item::Strangle => Some(Skill::Strangle),
Item::Stun => Some(Skill::Stun), Item::Stun => Some(Skill::Stun),
Item::StrikeI => Some(Skill::StrikeI), Item::StrikeI => Some(Skill::StrikeI),
@ -276,8 +292,12 @@ impl Item {
Item::ClutchI => Some(Skill::ClutchI), Item::ClutchI => Some(Skill::ClutchI),
Item::ClutchII => Some(Skill::ClutchII), Item::ClutchII => Some(Skill::ClutchII),
Item::ClutchIII => Some(Skill::ClutchIII), Item::ClutchIII => Some(Skill::ClutchIII),
Item::Taunt => Some(Skill::Taunt), Item::TauntI => Some(Skill::TauntI),
Item::Throw => Some(Skill::Throw), Item::TauntII => Some(Skill::TauntII),
Item::TauntIII => Some(Skill::TauntIII),
Item::ThrowI => Some(Skill::ThrowI),
Item::ThrowII => Some(Skill::ThrowII),
Item::ThrowIII => Some(Skill::ThrowIII),
Item::Corrupt => Some(Skill::Corrupt), Item::Corrupt => Some(Skill::Corrupt),
Item::Triage => Some(Skill::Triage), Item::Triage => Some(Skill::Triage),
_ => None, _ => None,
@ -509,16 +529,22 @@ impl Item {
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
"Deals 45% more damage per blue skill on target"), "Deals 45% more damage per blue skill on target"),
Item::Slay => format!( Item::SlayI |
Item::SlayII |
Item::SlayIII => format!(
"Deals red damage {:?}% red power and provides self healing based on damage dealt.", "Deals red damage {:?}% red power and provides self healing based on damage dealt.",
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::Sleep => format!( Item::SleepI |
Item::SleepII |
Item::SleepIII => format!(
"Stun for {:?}T and heal for {:?}% green power.", "Stun for {:?}T and heal for {:?}% green power.",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::Snare => format!( Item::SnareI |
Item::SnareII |
Item::SnareIII => format!(
"Block the target from using red skills for {:?}T and deals red damage {:?}% red power. {}", "Block the target from using red skills for {:?}T and deals red damage {:?}% red power. {}",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
@ -541,12 +567,16 @@ impl Item {
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()), self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::Taunt => format!("{} {:?}T. Recharges RedLife for {:?} red power.", Item::TauntI |
Item::TauntII |
Item::TauntIII => format!("{} {:?}T. Recharges RedLife for {:?} red power.",
"Taunt redirects skills against the team to target, lasts", "Taunt redirects skills against the team to target, lasts",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().multiplier()), self.into_skill().unwrap().multiplier()),
Item::Throw => format!( Item::ThrowI |
Item::ThrowII |
Item::ThrowIII => format!(
"Stun the target for {:?}T and applies Vulnerable increasing red damage taken by {:?}% for {:?}T", "Stun the target for {:?}T and applies Vulnerable increasing red damage taken by {:?}% for {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration(), self.into_skill().unwrap().effect().first().unwrap().get_duration(),
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
@ -565,7 +595,9 @@ impl Item {
fn combo(&self) -> Vec<Item> { fn combo(&self) -> Vec<Item> {
match self { match self {
Item::Taunt => vec![Item::Buff, Item::Red, Item::Red], Item::TauntI => vec![Item::Buff, Item::Red, Item::Red],
Item::TauntII => vec![Item::TauntI, Item::TauntI, Item::TauntI],
Item::TauntIII => vec![Item::TauntII, Item::TauntII, Item::TauntII],
Item::Triage => vec![Item::Buff, Item::Green, Item::Green], Item::Triage => vec![Item::Buff, Item::Green, Item::Green],
Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue], Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue],
Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI], Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI],
@ -576,7 +608,9 @@ impl Item {
Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI], Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI],
Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII], Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII],
Item::Snare => vec![Item::Debuff, Item::Red, Item::Red], Item::SnareI => vec![Item::Debuff, Item::Red, Item::Red],
Item::SnareII => vec![Item::SnareI, Item::SnareI, Item::SnareI],
Item::SnareIII => vec![Item::SnareII, Item::SnareII, Item::SnareII],
Item::PurgeI => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour Item::PurgeI => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour
Item::PurgeII => vec![Item::PurgeI, Item::PurgeI, Item::PurgeI], // Needs flavour Item::PurgeII => vec![Item::PurgeI, Item::PurgeI, Item::PurgeI], // Needs flavour
Item::PurgeIII => vec![Item::PurgeII, Item::PurgeII, Item::PurgeII], // Needs flavour Item::PurgeIII => vec![Item::PurgeII, Item::PurgeII, Item::PurgeII], // Needs flavour
@ -608,11 +642,15 @@ impl Item {
Item::Strangle => vec![Item::Stun, Item::Red, Item::Red], Item::Strangle => vec![Item::Stun, Item::Red, Item::Red],
Item::Sleep => vec![Item::Stun, Item::Green, Item::Green], Item::SleepI => vec![Item::Stun, Item::Green, Item::Green],
Item::SleepII => vec![Item::SleepI, Item::SleepI, Item::SleepI],
Item::SleepIII => vec![Item::SleepII, Item::SleepII, Item::SleepII],
Item::RuinI => vec![Item::Stun, Item::Blue, Item::Blue], Item::RuinI => vec![Item::Stun, Item::Blue, Item::Blue],
Item::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI], Item::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI],
Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII], Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII],
Item::Throw => vec![Item::Stun, Item::Red, Item::Green], Item::ThrowI => vec![Item::Stun, Item::Red, Item::Green],
Item::ThrowII => vec![Item::ThrowI, Item::ThrowI, Item::ThrowI],
Item::ThrowIII => vec![Item::ThrowII, Item::ThrowII, Item::ThrowII],
Item::HexI => vec![Item::Stun, Item::Green, Item::Blue], Item::HexI => vec![Item::Stun, Item::Green, Item::Blue],
Item::HexII => vec![Item::HexI, Item::HexI, Item::HexI], Item::HexII => vec![Item::HexI, Item::HexI, Item::HexI],
Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII], Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII],
@ -627,7 +665,9 @@ impl Item {
Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue], Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue],
Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI], Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI],
Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII], Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII],
Item::Slay => vec![Item::Attack, Item::Red, Item::Green], Item::SlayI => vec![Item::Attack, Item::Red, Item::Green],
Item::SlayII => vec![Item::SlayI, Item::SlayI, Item::SlayI],
Item::SlayIII => vec![Item::SlayII, Item::SlayII, Item::SlayII],
Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue], Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue],
Item::ChaosI => vec![Item::Attack, Item::Red, Item::Blue], Item::ChaosI => vec![Item::Attack, Item::Red, Item::Blue],
Item::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI], Item::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI],
@ -718,16 +758,26 @@ impl From<Skill> for Item {
Skill::SilenceII => Item::SilenceII, Skill::SilenceII => Item::SilenceII,
Skill::SilenceIII => Item::SilenceIII, Skill::SilenceIII => Item::SilenceIII,
Skill::Siphon => Item::Siphon, Skill::Siphon => Item::Siphon,
Skill::Slay => Item::Slay, Skill::SlayI => Item::SlayI,
Skill::Sleep => Item::Sleep, Skill::SlayII => Item::SlayII,
Skill::Snare => Item::Snare, Skill::SlayIII => Item::SlayIII,
Skill::SleepI => Item::SleepI,
Skill::SleepII => Item::SleepII,
Skill::SleepIII => Item::SleepIII,
Skill::SnareI => Item::SnareI,
Skill::SnareII => Item::SnareII,
Skill::SnareIII => Item::SnareIII,
Skill::Strangle => Item::Strangle, Skill::Strangle => Item::Strangle,
Skill::StrikeI => Item::StrikeI, Skill::StrikeI => Item::StrikeI,
Skill::StrikeII => Item::StrikeII, Skill::StrikeII => Item::StrikeII,
Skill::StrikeIII => Item::StrikeIII, Skill::StrikeIII => Item::StrikeIII,
Skill::Stun => Item::Stun, Skill::Stun => Item::Stun,
Skill::Taunt => Item::Taunt, Skill::TauntI => Item::TauntI,
Skill::Throw => Item::Throw, Skill::TauntII => Item::TauntII,
Skill::TauntIII => Item::TauntIII,
Skill::ThrowI => Item::ThrowI,
Skill::ThrowII => Item::ThrowII,
Skill::ThrowIII => Item::ThrowIII,
Skill::Triage => Item::Triage, Skill::Triage => Item::Triage,
Skill::Corrupt => Item::Corrupt, Skill::Corrupt => Item::Corrupt,
@ -787,7 +837,9 @@ pub struct Combo {
pub fn get_combos() -> Vec<Combo> { pub fn get_combos() -> Vec<Combo> {
let mut combinations = vec![ let mut combinations = vec![
Combo { components: Item::Taunt.combo(), item: Item::Taunt }, Combo { components: Item::TauntI.combo(), item: Item::TauntI },
Combo { components: Item::TauntII.combo(), item: Item::TauntII },
Combo { components: Item::TauntIII.combo(), item: Item::TauntIII },
Combo { components: Item::Triage.combo(), item: Item::Triage }, Combo { components: Item::Triage.combo(), item: Item::Triage },
Combo { components: Item::ScatterI.combo(), item: Item::ScatterI }, Combo { components: Item::ScatterI.combo(), item: Item::ScatterI },
Combo { components: Item::ScatterII.combo(), item: Item::ScatterII }, Combo { components: Item::ScatterII.combo(), item: Item::ScatterII },
@ -798,7 +850,9 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::AmplifyII.combo(), item: Item::AmplifyII }, Combo { components: Item::AmplifyII.combo(), item: Item::AmplifyII },
Combo { components: Item::AmplifyIII.combo(), item: Item::AmplifyIII }, Combo { components: Item::AmplifyIII.combo(), item: Item::AmplifyIII },
Combo { components: Item::Snare.combo(), item: Item::Snare }, Combo { components: Item::SnareI.combo(), item: Item::SnareI },
Combo { components: Item::SnareII.combo(), item: Item::SnareII },
Combo { components: Item::SnareIII.combo(), item: Item::SnareIII },
Combo { components: Item::PurgeI.combo(), item: Item::PurgeI }, // Needs flavour Combo { components: Item::PurgeI.combo(), item: Item::PurgeI }, // Needs flavour
Combo { components: Item::PurgeII.combo(), item: Item::PurgeII }, Combo { components: Item::PurgeII.combo(), item: Item::PurgeII },
Combo { components: Item::PurgeIII.combo(), item: Item::PurgeIII }, Combo { components: Item::PurgeIII.combo(), item: Item::PurgeIII },
@ -834,13 +888,17 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::RechargeIII.combo(), item: Item::RechargeIII }, Combo { components: Item::RechargeIII.combo(), item: Item::RechargeIII },
Combo { components: Item::Strangle.combo(), item: Item::Strangle }, Combo { components: Item::Strangle.combo(), item: Item::Strangle },
Combo { components: Item::Sleep.combo(), item: Item::Sleep }, Combo { components: Item::SleepI.combo(), item: Item::SleepI },
Combo { components: Item::SleepII.combo(), item: Item::SleepII },
Combo { components: Item::SleepIII.combo(), item: Item::SleepIII },
Combo { components: Item::RuinI.combo(), item: Item::RuinI }, Combo { components: Item::RuinI.combo(), item: Item::RuinI },
Combo { components: Item::RuinII.combo(), item: Item::RuinII }, Combo { components: Item::RuinII.combo(), item: Item::RuinII },
Combo { components: Item::RuinIII.combo(), item: Item::RuinIII }, Combo { components: Item::RuinIII.combo(), item: Item::RuinIII },
Combo { components: Item::Throw.combo(), item: Item::Throw }, Combo { components: Item::ThrowI.combo(), item: Item::ThrowI },
Combo { components: Item::ThrowII.combo(), item: Item::ThrowII },
Combo { components: Item::ThrowIII.combo(), item: Item::ThrowIII },
Combo { components: Item::HexI.combo(), item: Item::HexI }, Combo { components: Item::HexI.combo(), item: Item::HexI },
Combo { components: Item::HexII.combo(), item: Item::HexII }, Combo { components: Item::HexII.combo(), item: Item::HexII },
Combo { components: Item::HexIII.combo(), item: Item::HexIII }, Combo { components: Item::HexIII.combo(), item: Item::HexIII },
@ -856,7 +914,9 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::BlastI.combo(), item: Item::BlastI }, Combo { components: Item::BlastI.combo(), item: Item::BlastI },
Combo { components: Item::BlastII.combo(), item: Item::BlastII }, Combo { components: Item::BlastII.combo(), item: Item::BlastII },
Combo { components: Item::BlastIII.combo(), item: Item::BlastIII }, Combo { components: Item::BlastIII.combo(), item: Item::BlastIII },
Combo { components: Item::Slay.combo(), item: Item::Slay }, Combo { components: Item::SlayI.combo(), item: Item::SlayI },
Combo { components: Item::SlayII.combo(), item: Item::SlayII },
Combo { components: Item::SlayIII.combo(), item: Item::SlayIII },
Combo { components: Item::Siphon.combo(), item: Item::Siphon }, Combo { components: Item::Siphon.combo(), item: Item::Siphon },
Combo { components: Item::ChaosI.combo(), item: Item::ChaosI }, Combo { components: Item::ChaosI.combo(), item: Item::ChaosI },
Combo { components: Item::ChaosII.combo(), item: Item::ChaosII }, Combo { components: Item::ChaosII.combo(), item: Item::ChaosII },

View File

@ -75,7 +75,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
if source.affected(Effect::Haste) { if source.affected(Effect::Haste) {
match skill { match skill {
Skill::Attack | Skill::Attack |
Skill::Slay | Skill::SlayI |
Skill::ChaosI | Skill::ChaosI |
Skill::StrikeI => { Skill::StrikeI => {
let amount = source.speed().pct(Skill::HasteStrike.multiplier()); let amount = source.speed().pct(Skill::HasteStrike.multiplier());
@ -116,16 +116,12 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::AmplifyII | Skill::AmplifyII |
Skill::AmplifyIII => amplify(source, target, resolutions, skill), Skill::AmplifyIII => amplify(source, target, resolutions, skill),
Skill::Attack => attack(source, target, resolutions, skill),
Skill::Banish => banish(source, target, resolutions, skill), // TODO prevent all actions Skill::Banish => banish(source, target, resolutions, skill), // TODO prevent all actions
Skill::BlastI | Skill::BlastI |
Skill::BlastII | Skill::BlastII |
Skill::BlastIII => blast(source, target, resolutions, skill), Skill::BlastIII => blast(source, target, resolutions, skill),
Skill::Block => block(source, target, resolutions, skill),
Skill::Buff => buff(source, target, resolutions, skill),
Skill::ChaosI | Skill::ChaosI |
Skill::ChaosII | Skill::ChaosII |
Skill::ChaosIII => chaos(source, target, resolutions, skill), Skill::ChaosIII => chaos(source, target, resolutions, skill),
@ -135,16 +131,15 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::ClutchIII => clutch(source, target, resolutions, skill), Skill::ClutchIII => clutch(source, target, resolutions, skill),
Skill::Corrupt => corrupt(source, target, resolutions, skill), Skill::Corrupt => corrupt(source, target, resolutions, skill),
Skill::CorruptionTick => corruption_tick(source, target, resolutions, skill), Skill::CorruptionTick => corruption_tick(source, target, resolutions, skill),
Skill::CurseI | Skill::CurseI |
Skill::CurseII | Skill::CurseII |
Skill::CurseIII => curse(source, target, resolutions, skill), Skill::CurseIII => curse(source, target, resolutions, skill),
Skill::Debuff => debuff(source, target, resolutions, skill), // speed slow
Skill::Decay => decay(source, target, resolutions, skill), // dot Skill::Decay => decay(source, target, resolutions, skill), // dot
Skill::DecayTick => decay_tick(source, target, resolutions, skill), // dot Skill::DecayTick => decay_tick(source, target, resolutions, skill), // dot
Skill::Haste => haste(source, target, resolutions, skill), // speed slow Skill::Haste => haste(source, target, resolutions, skill), // speed slow
Skill::HealI | Skill::HealI |
@ -161,6 +156,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::InvertI | Skill::InvertI |
Skill::InvertII | Skill::InvertII |
Skill::InvertIII => invert(source, target, resolutions, skill), Skill::InvertIII => invert(source, target, resolutions, skill),
Skill::Parry => parry(source, target, resolutions, skill), Skill::Parry => parry(source, target, resolutions, skill),
Skill::PurgeI | Skill::PurgeI |
@ -191,24 +187,47 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::SilenceII | Skill::SilenceII |
Skill::SilenceIII => silence(source, target, resolutions, skill), // target cannot cast spells Skill::SilenceIII => silence(source, target, resolutions, skill), // target cannot cast spells
// Recharge -> Silence
Skill::Siphon => siphon(source, target, resolutions, skill), Skill::Siphon => siphon(source, target, resolutions, skill),
Skill::SiphonTick => siphon_tick(source, target, resolutions, skill), // hot Skill::SiphonTick => siphon_tick(source, target, resolutions, skill), // hot
Skill::Slay => slay(source, target, resolutions, skill), // hybrid dmg self heal
Skill::Sleep => sleep(source, target, resolutions, skill), // speed slow Skill::SlayI |
Skill::Snare => snare(source, target, resolutions, skill), Skill::SlayII |
Skill::SlayIII => slay(source, target, resolutions, skill), // hybrid dmg self heal
Skill::SleepI |
Skill::SleepII |
Skill::SleepIII => sleep(source, target, resolutions, skill), // heal stun
Skill::SnareI |
Skill::SnareII |
Skill::SnareIII => snare(source, target, resolutions, skill),
Skill::Strangle => strangle(source, target, resolutions, skill), Skill::Strangle => strangle(source, target, resolutions, skill),
Skill::StrangleTick => strangle_tick(source, target, resolutions, skill), Skill::StrangleTick => strangle_tick(source, target, resolutions, skill),
Skill::StrikeI => strike(source, target, resolutions, skill),
Skill::StrikeII => strike(source, target, resolutions, skill), Skill::StrikeI |
Skill::StrikeII |
Skill::StrikeIII => strike(source, target, resolutions, skill), Skill::StrikeIII => strike(source, target, resolutions, skill),
Skill::Stun => stun(source, target, resolutions, skill),
Skill::Taunt => taunt(source, target, resolutions, skill), Skill::TauntI |
Skill::Throw => throw(source, target, resolutions, skill), // no damage stun, adds vulnerable Skill::TauntII |
Skill::TauntIII => taunt(source, target, resolutions, skill),
Skill::ThrowI |
Skill::ThrowII |
Skill::ThrowIII => throw(source, target, resolutions, skill), // no damage stun, adds vulnerable
Skill::Triage => triage(source, target, resolutions, skill), // hot Skill::Triage => triage(source, target, resolutions, skill), // hot
Skill::TriageTick => triage_tick(source, target, resolutions, skill), // hot Skill::TriageTick => triage_tick(source, target, resolutions, skill), // hot
// Base Skills
Skill::Attack => attack(source, target, resolutions, skill),
Skill::Block => block(source, target, resolutions, skill),
Skill::Buff => buff(source, target, resolutions, skill),
Skill::Debuff => debuff(source, target, resolutions, skill), // speed slow
Skill::Stun => stun(source, target, resolutions, skill),
//Triggered
Skill::HasteStrike => panic!("should only trigger from haste"), Skill::HasteStrike => panic!("should only trigger from haste"),
Skill::ImpureBlast => panic!("should only trigger from impurity"), Skill::ImpureBlast => panic!("should only trigger from impurity"),
Skill::Riposte => panic!("should only trigger from parry"), Skill::Riposte => panic!("should only trigger from parry"),
@ -447,11 +466,15 @@ impl Effect {
Skill::HexII, Skill::HexII,
Skill::HexIII, Skill::HexIII,
Skill::SilenceI, Skill::SilenceI,
Skill::SilenceII,
Skill::SilenceIII,
Skill::RuinI, Skill::RuinI,
Skill::RuinII, Skill::RuinII,
Skill::RuinIII, Skill::RuinIII,
Skill::Strangle, Skill::Strangle,
Skill::Snare Skill::SnareI,
Skill::SnareII,
Skill::SnareIII
].contains(&skill), ].contains(&skill),
Effect::Injured => skill.colours().contains(&Colour::Green), Effect::Injured => skill.colours().contains(&Colour::Green),
_ => false, _ => false,
@ -659,16 +682,26 @@ pub enum Skill {
SilenceIII, SilenceIII,
Siphon, Siphon,
SiphonTick, SiphonTick,
Slay, SlayI,
Sleep, SlayII,
Snare, SlayIII,
SleepI,
SleepII,
SleepIII,
SnareI,
SnareII,
SnareIII,
Strangle, Strangle,
StrangleTick, StrangleTick,
StrikeI, StrikeI,
StrikeII, StrikeII,
StrikeIII, StrikeIII,
Taunt, TauntI,
Throw, // no damage stun, adds vulnerable TauntII,
TauntIII,
ThrowI, // no damage stun, adds vulnerable
ThrowII,
ThrowIII,
Triage, // hot Triage, // hot
TriageTick, TriageTick,
@ -698,10 +731,12 @@ impl Skill {
Skill::HealII => 160, //GG Skill::HealII => 160, //GG
Skill::HealIII => 200, //GG Skill::HealIII => 200, //GG
Skill::SiphonTick => 40, // GB Skill::SiphonTick => 40, // GB
Skill::Slay => 70, // RG Skill::SlayI => 70, // RG
Skill::SlayII => 90,
Skill::SlayIII => 120,
Skill::StrikeI => 90, //RR Skill::StrikeI => 90, //RR
Skill::StrikeII => 110, Skill::StrikeII => 110,
Skill::StrikeIII => 130, Skill::StrikeIII => 140,
// Block Base // Block Base
Skill::CorruptionTick => 80, Skill::CorruptionTick => 80,
@ -718,7 +753,9 @@ impl Skill {
Skill::RechargeIII => 200, Skill::RechargeIII => 200,
// Stun Base // Stun Base
Skill::Sleep => 240, //Green dmg (heal) Skill::SleepI => 240, //Green dmg (heal)
Skill::SleepII => 300,
Skill::SleepIII => 400,
Skill::StrangleTick => 65, Skill::StrangleTick => 65,
// Debuff Base // Debuff Base
@ -726,7 +763,9 @@ impl Skill {
Skill::SilenceI => 55, // Deals more per blue skill on target Skill::SilenceI => 55, // Deals more per blue skill on target
Skill::SilenceII => 80, // Deals more per blue skill on target Skill::SilenceII => 80, // Deals more per blue skill on target
Skill::SilenceIII => 110, // Deals more per blue skill on target Skill::SilenceIII => 110, // Deals more per blue skill on target
Skill::Snare => 40, // Deals more per red skill on target Skill::SnareI => 40, // Deals more per red skill on target
Skill::SnareII => 65,
Skill::SnareIII => 100,
// Buff base // Buff base
Skill::ImpureBlast => 25, Skill::ImpureBlast => 25,
@ -734,7 +773,9 @@ impl Skill {
Skill::ScatterI => 140, Skill::ScatterI => 140,
Skill::ScatterII => 200, Skill::ScatterII => 200,
Skill::ScatterIII => 300, Skill::ScatterIII => 300,
Skill::Taunt => 80, Skill::TauntI => 80,
Skill::TauntII => 110,
Skill::TauntIII => 150,
Skill::TriageTick => 75, Skill::TriageTick => 75,
_ => 100, _ => 100,
@ -779,8 +820,13 @@ impl Skill {
Skill::ReflectI => vec![CrypEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }], Skill::ReflectI => vec![CrypEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }],
Skill::ReflectII => vec![CrypEffect {effect: Effect::Reflect, duration: 2, meta: None, tick: None }], Skill::ReflectII => vec![CrypEffect {effect: Effect::Reflect, duration: 2, meta: None, tick: None }],
Skill::ReflectIII => vec![CrypEffect {effect: Effect::Reflect, duration: 3, meta: None, tick: None }], Skill::ReflectIII => vec![CrypEffect {effect: Effect::Reflect, duration: 3, meta: None, tick: None }],
Skill::Throw => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None},
Skill::ThrowI => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None},
CrypEffect {effect: Effect::Vulnerable, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None}], CrypEffect {effect: Effect::Vulnerable, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None}],
Skill::ThrowII => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None},
CrypEffect {effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(200)), tick: None}],
Skill::ThrowIII => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None},
CrypEffect {effect: Effect::Vulnerable, duration: 4, meta: Some(EffectMeta::Multiplier(250)), tick: None}],
Skill::RuinI => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::RuinI => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],
Skill::RuinII => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::RuinII => vec![CrypEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],
@ -792,11 +838,19 @@ impl Skill {
Skill::SilenceII => vec![CrypEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], Skill::SilenceII => vec![CrypEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}],
Skill::SilenceIII => vec![CrypEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}], Skill::SilenceIII => vec![CrypEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}],
Skill::Siphon => vec![CrypEffect {effect: Effect::Siphon, duration: 2, meta: None, tick: None}], Skill::Siphon => vec![CrypEffect {effect: Effect::Siphon, duration: 2, meta: None, tick: None}],
Skill::Sleep => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], Skill::SleepI => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
Skill::Snare => vec![CrypEffect {effect: Effect::Snare, duration: 2, meta: None, tick: None}], Skill::SleepII => vec![CrypEffect {effect: Effect::Stun, duration: 3, meta: None, tick: None}],
Skill::SleepIII => vec![CrypEffect {effect: Effect::Stun, duration: 4, meta: None, tick: None}],
Skill::SnareI => vec![CrypEffect {effect: Effect::Snare, duration: 2, meta: None, tick: None}],
Skill::SnareII => vec![CrypEffect {effect: Effect::Snare, duration: 3, meta: None, tick: None}],
Skill::SnareIII => vec![CrypEffect {effect: Effect::Snare, duration: 4, meta: None, tick: None}],
Skill::Strangle => vec![CrypEffect {effect: Effect::Strangle, duration: 2, meta: None, tick: None}], Skill::Strangle => vec![CrypEffect {effect: Effect::Strangle, duration: 2, meta: None, tick: None}],
Skill::Stun => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], Skill::Stun => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
Skill::Taunt => vec![CrypEffect {effect: Effect::Taunt, duration: 2, meta: None, tick: None}], Skill::TauntI => vec![CrypEffect {effect: Effect::Taunt, duration: 2, meta: None, tick: None}],
Skill::TauntII => vec![CrypEffect {effect: Effect::Taunt, duration: 3, meta: None, tick: None}],
Skill::TauntIII => vec![CrypEffect {effect: Effect::Taunt, duration: 4, meta: None, tick: None}],
Skill::Triage => vec![CrypEffect {effect: Effect::Triage, duration: 2, meta: None, tick: None}], Skill::Triage => vec![CrypEffect {effect: Effect::Triage, duration: 2, meta: None, tick: None}],
//Unused //Unused
@ -819,14 +873,18 @@ impl Skill {
Skill::Block => None, // reduce damage Skill::Block => None, // reduce damage
Skill::Parry => Some(2), // avoid all damage Skill::Parry => Some(2), // avoid all damage
Skill::Riposte => None, // used on parry Skill::Riposte => None, // used on parry
Skill::Snare => Some(2), Skill::SnareI => Some(2),
Skill::SnareII => Some(2),
Skill::SnareIII => Some(2),
Skill::Stun => Some(2), Skill::Stun => Some(2),
Skill::HealI => None, Skill::HealI => None,
Skill::HealII => None, Skill::HealII => None,
Skill::HealIII => None, Skill::HealIII => None,
Skill::Triage => None, // hot Skill::Triage => None, // hot
Skill::TriageTick => None, Skill::TriageTick => None,
Skill::Throw => Some(1), // no damage stun, adds vulnerable Skill::ThrowI => Some(1), // no damage stun, adds vulnerable
Skill::ThrowII => Some(1),
Skill::ThrowIII => Some(1),
Skill::BlastI => None, Skill::BlastI => None,
Skill::BlastII => None, Skill::BlastII => None,
Skill::BlastIII => None, Skill::BlastIII => None,
@ -876,15 +934,21 @@ impl Skill {
Skill::RuinI => Some(3), Skill::RuinI => Some(3),
Skill::RuinII => Some(2), Skill::RuinII => Some(2),
Skill::RuinIII => Some(2), Skill::RuinIII => Some(2),
Skill::Slay => None, Skill::SlayI => None,
Skill::Sleep => Some(3), Skill::SlayII => None,
Skill::SlayIII => None,
Skill::SleepI => Some(3),
Skill::SleepII => Some(3),
Skill::SleepIII => Some(3),
Skill::Strangle => Some(2), Skill::Strangle => Some(2),
Skill::StrangleTick => None, Skill::StrangleTick => None,
Skill::ClutchI => Some(1), Skill::ClutchI => Some(1),
Skill::ClutchII => Some(2), Skill::ClutchII => Some(2),
Skill::ClutchIII => Some(3), Skill::ClutchIII => Some(3),
Skill::Taunt => Some(2), Skill::TauntI => Some(2),
Skill::TauntII => Some(2),
Skill::TauntIII => Some(2),
Skill::Injure => Some(2), Skill::Injure => Some(2),
Skill::Corrupt => Some(1), Skill::Corrupt => Some(1),