parry and other T2/T3

This commit is contained in:
Mashy 2019-05-27 14:21:01 +10:00
parent 9aa6346be6
commit 88c3e97bc1
4 changed files with 335 additions and 188 deletions

View File

@ -62,7 +62,7 @@ impl CrypSkill {
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
pub enum EffectMeta {
SkillTick(Skill),
Skill(Skill),
TickAmount(u64),
AddedDamage(u64),
ScatterTarget(Uuid),

View File

@ -1166,7 +1166,7 @@ mod tests {
// should not be stunned because of parry
assert!(game.player_by_id(x_player.id).unwrap().cryps[0].is_stunned() == false);
// riposte
assert_eq!(game.player_by_id(y_player.id).unwrap().cryps[0].green_life(), (1024 - x_cryp.red_damage().pct(Skill::Riposte.multiplier())));
assert_eq!(game.player_by_id(y_player.id).unwrap().cryps[0].green_life(), (1024 - x_cryp.red_damage().pct(Skill::RiposteI.multiplier())));
}
#[test]
@ -1437,8 +1437,8 @@ mod tests {
game.cryp_by_id(x_cryp.id).unwrap().reduce_cooldowns();
}
game.cryp_by_id(x_cryp.id).unwrap().learn_mut(Skill::Siphon);
while game.cryp_by_id(x_cryp.id).unwrap().skill_on_cd(Skill::Siphon).is_some() {
game.cryp_by_id(x_cryp.id).unwrap().learn_mut(Skill::SiphonI);
while game.cryp_by_id(x_cryp.id).unwrap().skill_on_cd(Skill::SiphonI).is_some() {
game.cryp_by_id(x_cryp.id).unwrap().reduce_cooldowns();
}
@ -1476,7 +1476,7 @@ mod tests {
}
};
game.add_skill(y_player.id, x_cryp.id, Some(y_cryp.id), Skill::Siphon).unwrap();
game.add_skill(y_player.id, x_cryp.id, Some(y_cryp.id), Skill::SiphonI).unwrap();
game.player_ready(x_player.id).unwrap();
game.player_ready(y_player.id).unwrap();
game = game.resolve_phase_start();

View File

@ -49,7 +49,9 @@ pub enum Item {
AmplifyI,
AmplifyII,
AmplifyIII,
Banish,
BanishI,
BanishII,
BanishIII,
BlastI,
BlastII,
BlastIII,
@ -78,7 +80,9 @@ pub enum Item {
InvertI,
InvertII,
InvertIII,
Parry,
ParryI,
ParryII,
ParryIII,
PurgeI,
PurgeII,
PurgeIII,
@ -109,11 +113,15 @@ pub enum Item {
SnareI,
SnareII,
SnareIII,
Strangle,
StrangleI,
StrangleII,
StrangleIII,
StrikeI,
StrikeII,
StrikeIII,
Siphon,
SiphonI,
SiphonII,
SiphonIII,
TauntI,
TauntII,
TauntIII,
@ -230,7 +238,9 @@ impl Item {
Item::AmplifyI => Some(Skill::AmplifyI),
Item::AmplifyII => Some(Skill::AmplifyII),
Item::AmplifyIII => Some(Skill::AmplifyIII),
Item::Banish => Some(Skill::Banish),
Item::BanishI => Some(Skill::BanishI),
Item::BanishII => Some(Skill::BanishII),
Item::BanishIII => Some(Skill::BanishIII),
Item::BlastI => Some(Skill::BlastI),
Item::BlastII => Some(Skill::BlastII),
Item::BlastIII => Some(Skill::BlastIII),
@ -258,7 +268,9 @@ impl Item {
Item::InvertI => Some(Skill::InvertI),
Item::InvertII => Some(Skill::InvertII),
Item::InvertIII => Some(Skill::InvertIII),
Item::Parry => Some(Skill::Parry),
Item::ParryI => Some(Skill::ParryI),
Item::ParryII => Some(Skill::ParryII),
Item::ParryIII => Some(Skill::ParryIII),
Item::PurgeI => Some(Skill::PurgeI),
Item::PurgeII => Some(Skill::PurgeII),
Item::PurgeIII => Some(Skill::PurgeIII),
@ -286,11 +298,15 @@ impl Item {
Item::SleepI => Some(Skill::SleepI),
Item::SleepII => Some(Skill::SleepII),
Item::SleepIII => Some(Skill::SleepIII),
Item::Siphon => Some(Skill::Siphon),
Item::SiphonI => Some(Skill::SiphonI),
Item::SiphonII => Some(Skill::SiphonII),
Item::SiphonIII => Some(Skill::SiphonIII),
Item::SnareI => Some(Skill::SnareI),
Item::SnareII => Some(Skill::SnareII),
Item::SnareIII => Some(Skill::SnareIII),
Item::Strangle => Some(Skill::Strangle),
Item::StrangleI => Some(Skill::StrangleI),
Item::StrangleII => Some(Skill::StrangleII),
Item::StrangleIII => Some(Skill::StrangleIII),
Item::Stun => Some(Skill::Stun),
Item::StrikeI => Some(Skill::StrikeI),
Item::StrikeII => Some(Skill::StrikeII),
@ -413,7 +429,9 @@ impl Item {
self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::Banish => format!("Banish target for {:?}T.
Item::BanishI |
Item::BanishII |
Item::BanishIII => format!("Banish target for {:?}T.
Banished cryps are immune to all skills and effects.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
@ -491,12 +509,14 @@ impl Item {
"Reverse healing into damage and damage into healing.
Any excess red or blue damage is converted into shield recharge."),
Item::Parry => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
Item::ParryI |
Item::ParryII |
Item::ParryIII => format!("{} {:?}% red power and blocks red skills for {:?}T. {} {:?}% red power.",
"Self targetting skill. Recharges RedLife for",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
"If a red skill is parried the cryp will riposte the source dealing red damage",
Skill::Riposte.multiplier()),
Skill::RiposteI.multiplier()),
Item::PurgeI |
Item::PurgeII |
@ -560,7 +580,9 @@ impl Item {
self.into_skill().unwrap().multiplier(),
"Deals 35% more damage per red skill on target"),
Item::Strangle => format!(
Item::StrangleI |
Item::StrangleII |
Item::StrangleIII => format!(
"Strangle the target disabling skills from both the caster and the target.
While strangling deal red damage each turn {:?}% red power. Lasts {:?}T.",
self.into_skill().unwrap().multiplier(),
@ -572,7 +594,9 @@ impl Item {
"Hits at maximum speed dealing red damage {:?}% red power",
self.into_skill().unwrap().multiplier()),
Item::Siphon => format!(
Item::SiphonI |
Item::SiphonII |
Item::SiphonIII => format!(
"Deals blue damage {:?}% blue power each turn and heals caster based on damage dealt. Lasts {:?}T",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
@ -607,87 +631,95 @@ impl Item {
fn combo(&self) -> Vec<Item> {
match self {
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::TriageI => vec![Item::Buff, Item::Green, Item::Green],
Item::TriageII => vec![Item::TriageI, Item::TriageI, Item::TriageI],
Item::TriageIII => vec![Item::TriageII, Item::TriageII, Item::TriageII],
Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue],
Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI],
Item::ScatterIII => vec![Item::ScatterIII, Item::ScatterIII, Item::ScatterIII],
Item::Haste => vec![Item::Buff, Item::Red, Item::Green],
Item::Impurity => vec![Item::Buff, Item::Green, Item::Blue],
Item::AmplifyI => vec![Item::Buff, Item::Red, Item::Blue],
Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI],
Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII],
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::TriageI => vec![Item::Buff, Item::Green, Item::Green],
Item::TriageII => vec![Item::TriageI, Item::TriageI, Item::TriageI],
Item::TriageIII => vec![Item::TriageII, Item::TriageII, Item::TriageII],
Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue],
Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI],
Item::ScatterIII => vec![Item::ScatterIII, Item::ScatterIII, Item::ScatterIII],
Item::Haste => vec![Item::Buff, Item::Red, Item::Green],
Item::Impurity => vec![Item::Buff, Item::Green, Item::Blue],
Item::AmplifyI => vec![Item::Buff, Item::Red, Item::Blue],
Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI],
Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII],
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::PurgeII => vec![Item::PurgeI, Item::PurgeI, Item::PurgeI], // Needs flavour
Item::PurgeIII => vec![Item::PurgeII, Item::PurgeII, Item::PurgeII], // Needs flavour
Item::SilenceI => vec![Item::Debuff, Item::Blue, Item::Blue],
Item::SilenceII => vec![Item::SilenceI, Item::SilenceI, Item::SilenceI],
Item::SilenceIII => vec![Item::SilenceII, Item::SilenceII, Item::SilenceII],
Item::CurseI => vec![Item::Debuff, Item::Red, Item::Green],
Item::CurseII => vec![Item::CurseI, Item::CurseI, Item::CurseI],
Item::CurseIII => vec![Item::CurseII, Item::CurseII, Item::CurseII],
Item::DecayI => vec![Item::Debuff, Item::Green, Item::Blue],
Item::DecayII => vec![Item::DecayI, Item::DecayI, Item::DecayI],
Item::DecayIII => vec![Item::DecayII, Item::DecayII, Item::DecayII],
Item::InvertI => vec![Item::Debuff, Item::Red, Item::Blue],
Item::InvertII => vec![Item::InvertI, Item::InvertI, Item::InvertI],
Item::InvertIII => vec![Item::InvertII, Item::InvertII, Item::InvertII],
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::PurgeII => vec![Item::PurgeI, Item::PurgeI, Item::PurgeI], // Needs flavour
Item::PurgeIII => vec![Item::PurgeII, Item::PurgeII, Item::PurgeII], // Needs flavour
Item::SilenceI => vec![Item::Debuff, Item::Blue, Item::Blue],
Item::SilenceII => vec![Item::SilenceI, Item::SilenceI, Item::SilenceI],
Item::SilenceIII => vec![Item::SilenceII, Item::SilenceII, Item::SilenceII],
Item::CurseI => vec![Item::Debuff, Item::Red, Item::Green],
Item::CurseII => vec![Item::CurseI, Item::CurseI, Item::CurseI],
Item::CurseIII => vec![Item::CurseII, Item::CurseII, Item::CurseII],
Item::DecayI => vec![Item::Debuff, Item::Green, Item::Blue],
Item::DecayII => vec![Item::DecayI, Item::DecayI, Item::DecayI],
Item::DecayIII => vec![Item::DecayII, Item::DecayII, Item::DecayII],
Item::InvertI => vec![Item::Debuff, Item::Red, Item::Blue],
Item::InvertII => vec![Item::InvertI, Item::InvertI, Item::InvertI],
Item::InvertIII => vec![Item::InvertII, Item::InvertII, Item::InvertII],
Item::Parry => vec![Item::Block, Item::Red, Item::Red], // Add red recharge
Item::PurifyI => vec![Item::Block, Item::Green, Item::Green],
Item::PurifyII => vec![Item::PurifyI, Item::PurifyI, Item::PurifyI],
Item::PurifyIII => vec![Item::PurifyII, Item::PurifyII, Item::PurifyII],
Item::Corrupt => vec![Item::Block, Item::Blue, Item::Blue],
Item::ClutchI => vec![Item::Block, Item::Red, Item::Green],
Item::ClutchII => vec![Item::ClutchI, Item::ClutchI, Item::ClutchI],
Item::ClutchIII => vec![Item::ClutchII, Item::ClutchII, Item::ClutchII],
Item::ReflectI => vec![Item::Block, Item::Green, Item::Blue],
Item::ReflectII => vec![Item::ReflectI, Item::ReflectI, Item::ReflectI],
Item::ReflectIII => vec![Item::ReflectII, Item::ReflectII, Item::ReflectII],
Item::RechargeI => vec![Item::Block, Item::Red, Item::Blue],
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
Item::ParryI => vec![Item::Block, Item::Red, Item::Red],
Item::ParryII => vec![Item::ParryI, Item::ParryI, Item::ParryI],
Item::ParryIII => vec![Item::ParryII, Item::ParryII, Item::ParryII], // Add red recharge
Item::PurifyI => vec![Item::Block, Item::Green, Item::Green],
Item::PurifyII => vec![Item::PurifyI, Item::PurifyI, Item::PurifyI],
Item::PurifyIII => vec![Item::PurifyII, Item::PurifyII, Item::PurifyII],
Item::Corrupt => vec![Item::Block, Item::Blue, Item::Blue],
Item::ClutchI => vec![Item::Block, Item::Red, Item::Green],
Item::ClutchII => vec![Item::ClutchI, Item::ClutchI, Item::ClutchI],
Item::ClutchIII => vec![Item::ClutchII, Item::ClutchII, Item::ClutchII],
Item::ReflectI => vec![Item::Block, Item::Green, Item::Blue],
Item::ReflectII => vec![Item::ReflectI, Item::ReflectI, Item::ReflectI],
Item::ReflectIII => vec![Item::ReflectII, Item::ReflectII, Item::ReflectII],
Item::RechargeI => vec![Item::Block, Item::Red, Item::Blue],
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
Item::Strangle => vec![Item::Stun, Item::Red, Item::Red],
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::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI],
Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII],
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::HexII => vec![Item::HexI, Item::HexI, Item::HexI],
Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII],
Item::Banish => vec![Item::Stun, Item::Red, Item::Blue],
Item::StrangleI => vec![Item::Stun, Item::Red, Item::Red],
Item::StrangleII => vec![Item::StrangleI, Item::StrangleI, Item::StrangleI],
Item::StrangleIII => vec![Item::StrangleII, Item::StrangleII, Item::StrangleII],
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::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI],
Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII],
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::HexII => vec![Item::HexI, Item::HexI, Item::HexI],
Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII],
Item::BanishI => vec![Item::Stun, Item::Red, Item::Blue],
Item::BanishII => vec![Item::BanishI, Item::BanishI, Item::BanishI],
Item::BanishIII => vec![Item::BanishII, Item::BanishII, Item::BanishII],
Item::StrikeI => vec![Item::Attack, Item::Red, Item::Red],
Item::StrikeII => vec![Item::StrikeI, Item::StrikeI, Item::StrikeI],
Item::StrikeIII => vec![Item::StrikeII, Item::StrikeII, Item::StrikeII],
Item::HealI => vec![Item::Attack, Item::Green, Item::Green],
Item::HealII => vec![Item::HealI, Item::HealI, Item::HealI],
Item::HealIII => vec![Item::HealII, Item::HealII, Item::HealII],
Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue],
Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI],
Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII],
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::ChaosI => vec![Item::Attack, Item::Red, Item::Blue],
Item::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI],
Item::ChaosIII => vec![Item::ChaosII, Item::ChaosII, Item::ChaosII],
Item::StrikeI => vec![Item::Attack, Item::Red, Item::Red],
Item::StrikeII => vec![Item::StrikeI, Item::StrikeI, Item::StrikeI],
Item::StrikeIII => vec![Item::StrikeII, Item::StrikeII, Item::StrikeII],
Item::HealI => vec![Item::Attack, Item::Green, Item::Green],
Item::HealII => vec![Item::HealI, Item::HealI, Item::HealI],
Item::HealIII => vec![Item::HealII, Item::HealII, Item::HealII],
Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue],
Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI],
Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII],
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::SiphonI => vec![Item::Attack, Item::Green, Item::Blue],
Item::SiphonII => vec![Item::SiphonI, Item::SiphonI, Item::SiphonI],
Item::SiphonIII => vec![Item::SiphonII, Item::SiphonII, Item::SiphonII],
Item::ChaosI => vec![Item::Attack, Item::Red, Item::Blue],
Item::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI],
Item::ChaosIII => vec![Item::ChaosII, Item::ChaosII, Item::ChaosII],
Item::RedDamageI => vec![Item::Damage, Item::Red, Item::Red],
Item::GreenDamageI => vec![Item::Damage, Item::Green, Item::Green],
@ -722,7 +754,9 @@ impl From<Skill> for Item {
Skill::AmplifyII => Item::AmplifyII,
Skill::AmplifyIII => Item::AmplifyIII,
Skill::Attack => Item::Attack,
Skill::Banish => Item::Banish,
Skill::BanishI => Item::BanishI,
Skill::BanishII => Item::BanishII,
Skill::BanishIII => Item::BanishIII,
Skill::BlastI => Item::BlastI,
Skill::BlastII => Item::BlastII,
Skill::BlastIII => Item::BlastIII,
@ -753,7 +787,9 @@ impl From<Skill> for Item {
Skill::InvertI => Item::InvertI,
Skill::InvertII => Item::InvertII,
Skill::InvertIII => Item::InvertIII,
Skill::Parry => Item::Parry,
Skill::ParryI => Item::ParryI,
Skill::ParryII => Item::ParryII,
Skill::ParryIII => Item::ParryIII,
Skill::PurgeI => Item::PurgeI,
Skill::PurgeII => Item::PurgeII,
Skill::PurgeIII => Item::PurgeIII,
@ -775,7 +811,9 @@ impl From<Skill> for Item {
Skill::SilenceI => Item::SilenceI,
Skill::SilenceII => Item::SilenceII,
Skill::SilenceIII => Item::SilenceIII,
Skill::Siphon => Item::Siphon,
Skill::SiphonI => Item::SiphonI,
Skill::SiphonII => Item::SiphonII,
Skill::SiphonIII => Item::SiphonIII,
Skill::SlayI => Item::SlayI,
Skill::SlayII => Item::SlayII,
Skill::SlayIII => Item::SlayIII,
@ -785,7 +823,9 @@ impl From<Skill> for Item {
Skill::SnareI => Item::SnareI,
Skill::SnareII => Item::SnareII,
Skill::SnareIII => Item::SnareIII,
Skill::Strangle => Item::Strangle,
Skill::StrangleI => Item::StrangleI,
Skill::StrangleII => Item::StrangleII,
Skill::StrangleIII => Item::StrangleIII,
Skill::StrikeI => Item::StrikeI,
Skill::StrikeII => Item::StrikeII,
Skill::StrikeIII => Item::StrikeIII,
@ -802,8 +842,6 @@ impl From<Skill> for Item {
Skill::Corrupt => Item::Corrupt,
Skill::CorruptionTick => Item::Corrupt,
Skill::SiphonTick => Item::Siphon,
Skill::StrangleTick => Item::Strangle,
Skill::TestTouch => Item::TestTouch,
Skill::TestStun => Item::TestStun,
@ -894,7 +932,9 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::InvertII.combo(), item: Item::InvertII },
Combo { components: Item::InvertIII.combo(), item: Item::InvertIII },
Combo { components: Item::Parry.combo(), item: Item::Parry }, // Add red recharge
Combo { components: Item::ParryI.combo(), item: Item::ParryI },
Combo { components: Item::ParryII.combo(), item: Item::ParryII },
Combo { components: Item::ParryIII.combo(), item: Item::ParryIII },
Combo { components: Item::PurifyI.combo(), item: Item::PurifyI },
Combo { components: Item::PurifyII.combo(), item: Item::PurifyII },
Combo { components: Item::PurifyIII.combo(), item: Item::PurifyIII },
@ -911,10 +951,12 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::RechargeII.combo(), item: Item::RechargeII },
Combo { components: Item::RechargeIII.combo(), item: Item::RechargeIII },
Combo { components: Item::Strangle.combo(), item: Item::Strangle },
Combo { components: Item::StrangleI.combo(), item: Item::StrangleI },
Combo { components: Item::StrangleII.combo(), item: Item::StrangleII },
Combo { components: Item::StrangleIII.combo(), item: Item::StrangleIII },
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::SleepII.combo(), item: Item::SleepII },
Combo { components: Item::SleepIII.combo(), item: Item::SleepIII },
Combo { components: Item::RuinI.combo(), item: Item::RuinI },
Combo { components: Item::RuinII.combo(), item: Item::RuinII },
Combo { components: Item::RuinIII.combo(), item: Item::RuinIII },
@ -926,7 +968,9 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::HexI.combo(), item: Item::HexI },
Combo { components: Item::HexII.combo(), item: Item::HexII },
Combo { components: Item::HexIII.combo(), item: Item::HexIII },
Combo { components: Item::Banish.combo(), item: Item::Banish },
Combo { components: Item::BanishI.combo(), item: Item::BanishI },
Combo { components: Item::BanishII.combo(), item: Item::BanishII },
Combo { components: Item::BanishIII.combo(), item: Item::BanishIII },
Combo { components: Item::StrikeI.combo(), item: Item::StrikeI },
Combo { components: Item::StrikeII.combo(), item: Item::StrikeII },
@ -941,7 +985,9 @@ pub fn get_combos() -> Vec<Combo> {
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::SiphonI.combo(), item: Item::SiphonI },
Combo { components: Item::SiphonII.combo(), item: Item::SiphonII },
Combo { components: Item::SiphonIII.combo(), item: Item::SiphonIII },
Combo { components: Item::ChaosI.combo(), item: Item::ChaosI },
Combo { components: Item::ChaosII.combo(), item: Item::ChaosII },
Combo { components: Item::ChaosIII.combo(), item: Item::ChaosIII },

View File

@ -91,7 +91,7 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
match skill {
Skill::BlastI |
Skill::ChaosI |
Skill::Siphon => {
Skill::SiphonI => {
let amount = source.green_damage().pct(Skill::ImpureBlast.multiplier());
target.deal_blue_damage(Skill::ImpureBlast, amount)
.into_iter()
@ -116,7 +116,9 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::AmplifyII |
Skill::AmplifyIII => amplify(source, target, resolutions, skill),
Skill::Banish => banish(source, target, resolutions, skill), // TODO prevent all actions
Skill::BanishI |
Skill::BanishII |
Skill::BanishIII => banish(source, target, resolutions, skill), // TODO prevent all actions
Skill::BlastI |
Skill::BlastII |
@ -161,7 +163,9 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::InvertII |
Skill::InvertIII => invert(source, target, resolutions, skill),
Skill::Parry => parry(source, target, resolutions, skill),
Skill::ParryI |
Skill::ParryII |
Skill::ParryIII => parry(source, target, resolutions, skill),
Skill::PurgeI |
Skill::PurgeII |
@ -191,8 +195,12 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::SilenceII |
Skill::SilenceIII => silence(source, target, resolutions, skill), // target cannot cast spells
Skill::Siphon => siphon(source, target, resolutions, skill),
Skill::SiphonTick => siphon_tick(source, target, resolutions, skill), // hot
Skill::SiphonI |
Skill::SiphonII |
Skill::SiphonIII => siphon(source, target, resolutions, skill), // dot
Skill::SiphonTickI |
Skill::SiphonTickII |
Skill::SiphonTickIII => siphon_tick(source, target, resolutions, skill), // dot
Skill::SlayI |
Skill::SlayII |
@ -206,8 +214,12 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::SnareII |
Skill::SnareIII => snare(source, target, resolutions, skill),
Skill::Strangle => strangle(source, target, resolutions, skill),
Skill::StrangleTick => strangle_tick(source, target, resolutions, skill),
Skill::StrangleI |
Skill::StrangleII |
Skill::StrangleIII => strangle(source, target, resolutions, skill),
Skill::StrangleTickI |
Skill::StrangleTickII |
Skill::StrangleTickIII => strangle_tick(source, target, resolutions, skill),
Skill::StrikeI |
Skill::StrikeII |
@ -239,7 +251,9 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
//Triggered
Skill::HasteStrike => panic!("should only trigger from haste"),
Skill::ImpureBlast => panic!("should only trigger from impurity"),
Skill::Riposte => panic!("should only trigger from parry"),
Skill::RiposteI |
Skill::RiposteII |
Skill::RiposteIII => panic!("should only trigger from parry"),
// Not used
@ -252,8 +266,8 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio
Skill::TestTouch => touch(source, target, resolutions, skill),
Skill::TestStun => stun(source, target, resolutions, Skill::Stun),
Skill::TestBlock => block(source, target, resolutions, Skill::Block),
Skill::TestParry => parry(source, target, resolutions, Skill::Parry),
Skill::TestSiphon => siphon(source, target, resolutions, Skill::Siphon),
Skill::TestParry => parry(source, target, resolutions, Skill::ParryI),
Skill::TestSiphon => siphon(source, target, resolutions, Skill::SiphonI),
};
return resolutions;
@ -283,8 +297,15 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
Event::Immunity { skill: _, immunity } => match immunity.contains(&Effect::Parry) {
true => {
resolutions = riposte(&mut target, &mut source, resolutions, Skill::Riposte);
}
let im_targ = target.clone();
let CrypEffect { effect: _, duration: _, meta, tick: _ } = im_targ.effects.iter()
.find(|e| e.effect == Effect::Parry).unwrap();
let &riposte_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no parry skill"),
};
resolutions = riposte(&mut target, &mut source, resolutions, riposte_skill);
},
false => (),
},
_ => (),
@ -472,18 +493,20 @@ impl Effect {
Effect::Clutch => [
Skill::Stun,
Skill::HexI,
Skill::HexII,
Skill::HexIII,
Skill::HexII,
Skill::HexIII,
Skill::SilenceI,
Skill::SilenceII,
Skill::SilenceIII,
Skill::SilenceII,
Skill::SilenceIII,
Skill::RuinI,
Skill::RuinII,
Skill::RuinIII,
Skill::Strangle,
Skill::RuinII,
Skill::RuinIII,
Skill::StrangleI,
Skill::StrangleII,
Skill::StrangleIII,
Skill::SnareI,
Skill::SnareII,
Skill::SnareIII
Skill::SnareII,
Skill::SnareIII
].contains(&skill),
Effect::Injured => skill.colours().contains(&Colour::Green),
_ => false,
@ -500,7 +523,12 @@ impl Effect {
Effect::Hex => true,
Effect::Banish => true,
Effect::Strangle => true,
Effect::Strangling => skill != Skill::StrangleTick,
Effect::Strangling => match skill {
Skill::StrangleTickI |
Skill::StrangleTickII |
Skill::StrangleTickIII => false,
_ => true,
},
Effect::Silence => skill.colours().contains(&Colour::Blue),
Effect::Snare => skill.colours().contains(&Colour::Red),
Effect::Ko => skill.ko_castable(),
@ -635,7 +663,9 @@ pub enum Skill {
AmplifyII,
AmplifyIII,
Banish,
BanishI,
BanishII,
BanishIII,
BlastI,
BlastII,
@ -683,8 +713,9 @@ pub enum Skill {
InvertII,
InvertIII,
Parry, // avoid all damage
ParryI, // avoid all damage
ParryII,
ParryIII,
PurgeI,
PurgeII,
PurgeIII,
@ -701,7 +732,9 @@ pub enum Skill {
ReflectII,
ReflectIII,
Riposte,
RiposteI,
RiposteII,
RiposteIII,
RuinI,
RuinII,
@ -715,8 +748,12 @@ pub enum Skill {
SilenceII,
SilenceIII,
Siphon,
SiphonTick,
SiphonI,
SiphonII,
SiphonIII,
SiphonTickI,
SiphonTickII,
SiphonTickIII,
SlayI,
SlayII,
@ -730,8 +767,12 @@ pub enum Skill {
SnareII,
SnareIII,
Strangle,
StrangleTick,
StrangleI,
StrangleII,
StrangleIII,
StrangleTickI,
StrangleTickII,
StrangleTickIII,
StrikeI,
StrikeII,
@ -780,7 +821,9 @@ impl Skill {
Skill::HealI => 130, //GG
Skill::HealII => 160, //GG
Skill::HealIII => 200, //GG
Skill::SiphonTick => 40, // GB
Skill::SiphonTickI => 40, // GB
Skill::SiphonTickII => 70,
Skill::SiphonTickIII => 110,
Skill::SlayI => 70, // RG
Skill::SlayII => 90,
@ -792,8 +835,12 @@ impl Skill {
// Block Base
Skill::CorruptionTick => 80,
Skill::Parry => 110,
Skill::Riposte => 70,
Skill::ParryI => 110,
Skill::ParryII => 145,
Skill::ParryIII => 200,
Skill::RiposteI => 70,
Skill::RiposteII => 95,
Skill::RiposteIII => 120,
Skill::PurifyI => 45, //Green dmg (heal)
Skill::PurifyII => 70,
@ -811,7 +858,9 @@ impl Skill {
Skill::SleepI => 240, //Green dmg (heal)
Skill::SleepII => 300,
Skill::SleepIII => 400,
Skill::StrangleTick => 65,
Skill::StrangleTickI => 65,
Skill::StrangleTickII => 95,
Skill::StrangleTickIII => 140,
// Debuff Base
Skill::DecayTickI => 25,
@ -851,7 +900,9 @@ impl Skill {
Skill::AmplifyIII => vec![CrypEffect {effect: Effect::Amplify, duration: 4,
meta: Some(EffectMeta::Multiplier(200)), tick: None}],
Skill::Banish => vec![CrypEffect {effect: Effect::Banish, duration: 1,meta: None, tick: None}],
Skill::BanishI => vec![CrypEffect {effect: Effect::Banish, duration: 1,meta: None, tick: None}],
Skill::BanishII => vec![CrypEffect {effect: Effect::Banish, duration: 2,meta: None, tick: None}],
Skill::BanishIII => vec![CrypEffect {effect: Effect::Banish, duration: 3,meta: None, tick: None}],
Skill::Block => vec![CrypEffect {effect: Effect::Block, duration: 1,
meta: Some(EffectMeta::Multiplier(50)), tick: None}],
Skill::Buff => vec![CrypEffect {effect: Effect::Buff, duration: 2,
@ -876,13 +927,13 @@ impl Skill {
Skill::DecayI => vec![CrypEffect {effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None },
CrypEffect {effect: Effect::Decay, duration: 3,
meta: Some(EffectMeta::SkillTick(Skill::DecayTickI)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::DecayTickI)), tick: None}],
Skill::DecayII => vec![CrypEffect {effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)), tick: None },
CrypEffect {effect: Effect::Decay, duration: 3,
meta: Some(EffectMeta::SkillTick(Skill::DecayTickII)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::DecayTickII)), tick: None}],
Skill::DecayIII => vec![CrypEffect {effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)), tick: None },
CrypEffect {effect: Effect::Decay, duration: 4,
meta: Some(EffectMeta::SkillTick(Skill::DecayTickIII)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::DecayTickIII)), tick: None}],
Skill::Haste => vec![CrypEffect {effect: Effect::Haste, duration: 2,
meta: Some(EffectMeta::Multiplier(150)), tick: None }],
@ -900,7 +951,12 @@ impl Skill {
Skill::InvertII => vec![CrypEffect {effect: Effect::Invert, duration: 3, meta: None, tick: None}],
Skill::InvertIII => vec![CrypEffect {effect: Effect::Invert, duration: 4, meta: None, tick: None}],
Skill::Parry => vec![CrypEffect {effect: Effect::Parry, duration: 2, meta: None, tick: None }],
Skill::ParryI => vec![CrypEffect {effect: Effect::Parry, duration: 2,
meta: Some(EffectMeta::Skill(Skill::RiposteI)), tick: None}],
Skill::ParryII => vec![CrypEffect {effect: Effect::Parry, duration: 2,
meta: Some(EffectMeta::Skill(Skill::RiposteII)), tick: None}],
Skill::ParryIII => vec![CrypEffect {effect: Effect::Parry, duration: 2,
meta: Some(EffectMeta::Skill(Skill::RiposteIII)), 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 }],
@ -925,7 +981,12 @@ impl Skill {
Skill::SilenceII => vec![CrypEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}],
Skill::SilenceIII => vec![CrypEffect {effect: Effect::Silence, duration: 4, meta: None, tick: None}],
Skill::Siphon => vec![CrypEffect {effect: Effect::Siphon, duration: 2, meta: None, tick: None}],
Skill::SiphonI => vec![CrypEffect {effect: Effect::Siphon, duration: 2,
meta: Some(EffectMeta::Skill(Skill::SiphonTickI)), tick: None}],
Skill::SiphonII => vec![CrypEffect {effect: Effect::Siphon, duration: 3,
meta: Some(EffectMeta::Skill(Skill::SiphonTickII)), tick: None}],
Skill::SiphonIII => vec![CrypEffect {effect: Effect::Siphon, duration: 4,
meta: Some(EffectMeta::Skill(Skill::SiphonTickIII)), tick: None}],
Skill::SleepI => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
Skill::SleepII => vec![CrypEffect {effect: Effect::Stun, duration: 3, meta: None, tick: None}],
@ -935,7 +996,12 @@ impl Skill {
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::StrangleI => vec![CrypEffect {effect: Effect::Strangle, duration: 2,
meta: Some(EffectMeta::Skill(Skill::StrangleTickI)), tick: None}],
Skill::StrangleII => vec![CrypEffect {effect: Effect::Strangle, duration: 2,
meta: Some(EffectMeta::Skill(Skill::StrangleTickII)), tick: None}],
Skill::StrangleIII => vec![CrypEffect {effect: Effect::Strangle, duration: 2,
meta: Some(EffectMeta::Skill(Skill::StrangleTickIII)), tick: None}],
Skill::Stun => vec![CrypEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
Skill::TauntI => vec![CrypEffect {effect: Effect::Taunt, duration: 2, meta: None, tick: None}],
@ -943,11 +1009,11 @@ impl Skill {
Skill::TauntIII => vec![CrypEffect {effect: Effect::Taunt, duration: 4, meta: None, tick: None}],
Skill::TriageI => vec![CrypEffect {effect: Effect::Triage, duration: 2,
meta: Some(EffectMeta::SkillTick(Skill::TriageTickI)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::TriageTickI)), tick: None}],
Skill::TriageII => vec![CrypEffect {effect: Effect::Triage, duration: 3,
meta: Some(EffectMeta::SkillTick(Skill::TriageTickII)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::TriageTickII)), tick: None}],
Skill::TriageIII => vec![CrypEffect {effect: Effect::Triage, duration: 4,
meta: Some(EffectMeta::SkillTick(Skill::TriageTickIII)), tick: None}],
meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}],
//Unused
Skill::Injure => vec![CrypEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }],
@ -968,7 +1034,9 @@ impl Skill {
Skill::StrikeII => None,
Skill::StrikeIII => None,
Skill::Block => None, // reduce damage
Skill::Parry => Some(2), // avoid all damage
Skill::ParryI |
Skill::ParryII |
Skill::ParryIII => Some(2), // avoid all damage
Skill::SnareI => Some(2),
Skill::SnareII => Some(2),
@ -1006,7 +1074,9 @@ impl Skill {
Skill::DecayI => Some(1), // dot
Skill::DecayII => Some(1),
Skill::DecayIII => Some(1),
Skill::Siphon => None,
Skill::SiphonI |
Skill::SiphonII |
Skill::SiphonIII => None,
Skill::CurseI => Some(1),
Skill::CurseII => Some(1),
@ -1028,7 +1098,9 @@ impl Skill {
Skill::PurgeII => None,
Skill::PurgeIII => None,
Skill::Banish => Some(1),
Skill::BanishI => Some(1),
Skill::BanishII => Some(1),
Skill::BanishIII => Some(1),
Skill::HexI => Some(1),
Skill::HexII => Some(2),
@ -1055,7 +1127,9 @@ impl Skill {
Skill::SleepII => Some(3),
Skill::SleepIII => Some(3),
Skill::Strangle => Some(2),
Skill::StrangleI => Some(2),
Skill::StrangleII => Some(2),
Skill::StrangleIII => Some(2),
Skill::ClutchI => Some(1),
Skill::ClutchII => Some(2),
@ -1076,14 +1150,20 @@ impl Skill {
// Trigger
Skill::ImpureBlast |
Skill::HasteStrike |
Skill::Riposte | // parry
Skill::RiposteI |
Skill::RiposteII |
Skill::RiposteIII | // parry
// Ticks
Skill::CorruptionTick |
Skill::DecayTickI |
Skill::DecayTickII |
Skill::DecayTickIII |
Skill::SiphonTick |
Skill::StrangleTick |
Skill::SiphonTickI |
Skill::SiphonTickII |
Skill::SiphonTickIII |
Skill::StrangleTickI |
Skill::StrangleTickII |
Skill::StrangleTickIII |
Skill::TriageTickI |
Skill::TriageTickII |
Skill::TriageTickIII => None,
@ -1107,7 +1187,9 @@ impl Skill {
Skill::DecayTickI |
Skill::DecayTickII |
Skill::DecayTickIII |
Skill::SiphonTick |
Skill::SiphonTickI |
Skill::SiphonTickII |
Skill::SiphonTickIII |
Skill::TriageTickI |
Skill::TriageTickII |
@ -1122,8 +1204,12 @@ impl Skill {
Skill::DecayTickI |
Skill::DecayTickII |
Skill::DecayTickIII |
Skill::SiphonTick |
Skill::StrangleTick |
Skill::SiphonTickI |
Skill::SiphonTickII |
Skill::SiphonTickIII |
Skill::StrangleTickI |
Skill::StrangleTickII |
Skill::StrangleTickIII |
Skill::TriageTickI |
Skill::TriageTickII |
@ -1148,7 +1234,9 @@ impl Skill {
Skill::StrikeII => Skill::StrikeI.speed(),
Skill::StrikeIII => Skill::StrikeI.speed(),
Skill::SiphonTick => Skill::Siphon.speed(),
Skill::SiphonTickI |
Skill::SiphonTickII |
Skill::SiphonTickIII => Skill::SiphonI.speed(),
Skill::DecayTickI |
Skill::DecayTickII |
Skill::DecayTickIII => Skill::DecayI.speed(),
@ -1157,7 +1245,9 @@ impl Skill {
Skill::TriageTickII |
Skill::TriageTickIII => Skill::TriageI.speed(),
Skill::StrangleTick => Skill::Strangle.speed(),
Skill::StrangleTickI |
Skill::StrangleTickII |
Skill::StrangleTickIII => Skill::StrangleI.speed(),
Skill::CorruptionTick => Skill::Corrupt.speed(),
_ => Item::from(*self).speed(),
@ -1180,7 +1270,9 @@ impl Skill {
Skill::ClutchI |
Skill::ClutchII |
Skill::ClutchIII |
Skill::Parry |
Skill::ParryI |
Skill::ParryII |
Skill::ParryIII |
Skill::TestBlock |
Skill::TestParry => true,
@ -1208,7 +1300,9 @@ impl Skill {
Skill::InvertI |
Skill::InvertII |
Skill::InvertIII |
Skill::Parry |
Skill::ParryI |
Skill::ParryII |
Skill::ParryIII |
Skill::PurifyI |
Skill::PurifyII |
Skill::PurifyIII |
@ -1225,7 +1319,9 @@ impl Skill {
Skill::TriageII |
Skill::TriageIII => true,
Skill::Banish => rng.gen_bool(0.5),
Skill::BanishI |
Skill::BanishII |
Skill::BanishIII => rng.gen_bool(0.5),
_ => false,
}
@ -1337,17 +1433,19 @@ fn throw(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill:
}
fn strangle(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let CrypEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no strangle tick skill"),
};
let strangle = CrypEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target).event(target.add_effect(skill, strangle)));
skill.effect().into_iter().for_each(|e| {
let CrypEffect { effect: _, duration, meta: _, tick: _ } = e;
let strangle = e.clone().set_tick(Cast::new_tick(source, target, Skill::StrangleTick));
results.push(Resolution::new(source, target).event(target.add_effect(skill, strangle)));
let attacker_strangle = CrypEffect::new(Effect::Strangling, duration);
results.push(Resolution::new(source, source).event(source.add_effect(skill, attacker_strangle)));
let attacker_strangle = CrypEffect::new(Effect::Strangling, duration);
results.push(Resolution::new(source, source).event(source.add_effect(skill, attacker_strangle)));
});
return strangle_tick(source, target, results, Skill::StrangleTick);
return strangle_tick(source, target, results, tick_skill);
}
fn strangle_tick(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
@ -1450,7 +1548,7 @@ fn heal(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: S
fn triage(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let CrypEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let tick_skill = match meta {
Some(EffectMeta::SkillTick(s)) => s,
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no triage tick skill"),
};
let triage = CrypEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
@ -1515,7 +1613,7 @@ fn decay(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill:
let CrypEffect { effect, duration, meta, tick: _ } = skill.effect().last().unwrap().clone();
let tick_skill = match meta {
Some(EffectMeta::SkillTick(s)) => s,
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no decay tick skill"),
};
let decay = CrypEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
@ -1620,23 +1718,26 @@ fn recharge(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skil
}
fn siphon(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
skill.effect().into_iter().for_each(|e| {
let siphon = e.clone().set_tick(Cast::new_tick(source, target, Skill::SiphonTick));
results.push(Resolution::new(source, target).event(target.add_effect(skill, siphon)));
});
let CrypEffect { effect, duration, meta, tick: _ } = skill.effect().first().unwrap().clone();
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
_ => panic!("no siphon tick skill"),
};
let siphon = CrypEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill));
results.push(Resolution::new(source, target).event(target.add_effect(skill, siphon)));
return siphon_tick(source, target, results, Skill::SiphonTick);
return siphon_tick(source, target, results, tick_skill);
}
fn siphon_tick(source: &mut Cryp, target: &mut Cryp, mut results: Resolutions, skill: Skill) -> Resolutions {
let amount = source.blue_damage().pct(skill.multiplier());
let siphon_events = target.deal_blue_damage(Skill::SiphonTick, amount);
let siphon_events = target.deal_blue_damage(skill, amount);
for e in siphon_events {
match e {
Event::Damage { amount, mitigation: _, colour: _, skill: _ } => {
results.push(Resolution::new(source, target).event(e));
let heal = source.deal_green_damage(Skill::SiphonTick, amount);
let heal = source.deal_green_damage(skill, amount);
for h in heal {
results.push(Resolution::new(source, source).event(h));
};
@ -1919,10 +2020,10 @@ mod tests {
x.green_life.reduce(512);
let mut results = resolve(Skill::Siphon, &mut x, &mut y, vec![]);
let mut results = resolve(Skill::SiphonI, &mut x, &mut y, vec![]);
assert!(y.affected(Effect::Siphon));
assert!(x.green_life() == (512 + 256.pct(Skill::SiphonTick.multiplier())));
assert!(x.green_life() == (512 + 256.pct(Skill::SiphonTickI.multiplier())));
let Resolution { source: _, target: _, event } = results.remove(0);
match event {
@ -1932,14 +2033,14 @@ mod tests {
let Resolution { source: _, target: _, event } = results.remove(0);
match event {
Event::Damage { amount, skill: _, mitigation: _, colour: _} => assert_eq!(amount, 256.pct(Skill::SiphonTick.multiplier())),
Event::Damage { amount, skill: _, mitigation: _, colour: _} => assert_eq!(amount, 256.pct(Skill::SiphonTickI.multiplier())),
_ => panic!("not damage siphon"),
};
let Resolution { source: _, target, event } = results.remove(0);
match event {
Event::Healing { amount, skill: _, overhealing: _ } => {
assert_eq!(amount, 256.pct(Skill::SiphonTick.multiplier()));
assert_eq!(amount, 256.pct(Skill::SiphonTickI.multiplier()));
assert_eq!(target.id, x.id);
},
_ => panic!("not healing"),