From 2cc7be5b5043ae4fc114d59e821e7b951553e32c Mon Sep 17 00:00:00 2001 From: ntr Date: Sun, 8 Dec 2019 23:09:10 +1000 Subject: [PATCH] more skills impl --- core/fixme.md | 3 + core/src/construct.rs | 17 +- core/src/game.rs | 27 +- core/src/skill.rs | 672 +++++++++++++++++++++++------------------- 4 files changed, 391 insertions(+), 328 deletions(-) diff --git a/core/fixme.md b/core/fixme.md index e0775b5a..28fb5898 100644 --- a/core/fixme.md +++ b/core/fixme.md @@ -1,5 +1,6 @@ # FIXME +tick skips for triage etc game ready not auto starting resolve phase healing action remove immunity @@ -10,4 +11,6 @@ cooldown events leak skills hit event reqs moving eventconstruct into specific events +counter / absorb post resolve etc + cooldown checking -> go through round and find all casters \ No newline at end of file diff --git a/core/src/construct.rs b/core/src/construct.rs index e614c237..465b1f98 100644 --- a/core/src/construct.rs +++ b/core/src/construct.rs @@ -844,7 +844,7 @@ impl Construct { return events; } - pub fn add_effect(&mut self, effect: ConstructEffect) -> Vec { + pub fn effect_add(&mut self, effect: ConstructEffect) -> Vec { if self.is_ko() { return vec![] } if self.affected(Effect::Banish) { panic!("banish immunity not fixt yet") } @@ -871,6 +871,21 @@ impl Construct { return vec![result]; } + pub fn effect_remove(&mut self, effect: Effect) -> Vec { + if self.is_ko() { return vec![] } + + if let Some(p) = self.effects.iter().position(|ce| ce.effect == effect) { + self.effects.remove(p); + return vec![Event::Removal { + construct: self.id, + effect: effect, + display: EventConstruct::new(self), + }]; + } + + return vec![]; + } + // pub fn evade(&self, skill: Skill) -> Option { // if self.evasion.value == 0 { // return None; diff --git a/core/src/game.rs b/core/src/game.rs index 102aa552..8b0464d6 100644 --- a/core/src/game.rs +++ b/core/src/game.rs @@ -549,6 +549,7 @@ impl Game { }, Action::Effect { construct, effect } => self.effect(construct, effect), + Action::Remove { construct, effect } => self.effect_remove(construct, effect), Action::IncreaseCooldowns { construct, turns } => self.increase_cooldowns(construct, turns), }; @@ -559,23 +560,6 @@ impl Game { resolved.append(&mut resolutions); } -// fn slay(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.red_power().pct(skill.multiplier()) + source.green_power().pct(skill.multiplier()); -// let slay_events = target.deal_red_damage(skill, amount); -// for e in slay_events { -// match e { -// Event::Damage { amount, mitigation: _, colour: _, skill: _ } => { -// game.event(Event::new(source, target).event(e)); -// let heal = source.deal_green_damage(skill, amount.pct(50)); -// for h in heal { -// game.event(Event::new(source, source).event(h).stages(EventStages::PostOnly)); -// }; -// }, -// _ => game.event(Event::new(source, target).event(e)), -// } -// } -// } - self.resolutions.last_mut().unwrap().append(&mut resolved); self @@ -665,7 +649,11 @@ impl Game { } fn effect(&mut self, construct: Uuid, effect: ConstructEffect) -> Vec { - self.construct_by_id(construct).unwrap().add_effect(effect) + self.construct_by_id(construct).unwrap().effect_add(effect) + } + + fn effect_remove(&mut self, construct: Uuid, effect: Effect) -> Vec { + self.construct_by_id(construct).unwrap().effect_remove(effect) } fn increase_cooldowns(&mut self, construct: Uuid, turns: usize) -> Vec { @@ -875,6 +863,7 @@ pub enum Action { Heal { construct: Uuid, values: Vec, colour: Colour }, Damage { construct: Uuid, values: Vec, colour: Colour }, Effect { construct: Uuid, effect: ConstructEffect }, + Remove { construct: Uuid, effect: Effect }, IncreaseCooldowns { construct: Uuid, turns: usize }, // Recharge { skill: Skill, red: usize, blue: usize }, } @@ -918,7 +907,7 @@ pub enum Event { Damage { construct: Uuid, amount: usize, mitigation: usize, colour: Colour, display: EventConstruct }, Effect { construct: Uuid, effect: Effect, duration: u8, display: EventConstruct }, - Removal { construct: Uuid, effect: Option, display: EventConstruct }, + Removal { construct: Uuid, effect: Effect, display: EventConstruct }, Healing { construct: Uuid, amount: usize, overhealing: usize }, Recharge { construct: Uuid, red: usize, blue: usize }, diff --git a/core/src/skill.rs b/core/src/skill.rs index 408319cc..22d469fd 100644 --- a/core/src/skill.rs +++ b/core/src/skill.rs @@ -85,6 +85,13 @@ impl Cast { }, ], + Skill::Debuff => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Slow, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }, + }, + ], + Skill::Stun => vec![ Action::Effect { construct: self.target, @@ -145,6 +152,60 @@ impl Cast { colour: Colour::Blue, }, ], + Skill::Absorption => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Absorb, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None, tick: None }, + }, + ], + Skill::AbsorptionPlus => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Absorb, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None, tick: None }, + }, + ], + Skill::AbsorptionPlusPlus => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Absorb, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None, tick: None }, + }, + ], + +// fn absorb(source: &mut Construct, target: &mut Construct, skill: Skill) { +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); +// let blue_amount = source.blue_power().pct(skill.multiplier()); +// target.recharge(skill, 0, blue_amount) +// .into_iter() +// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::PostOnly))); +// } + +// fn absorption(source: &mut Construct, target: &mut Construct, reflect_skill: Skill, amount: usize, skill: Skill) { +// let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount)); + +// game.event(Event::new(source, target) +// .event(target.effect_remove(reflect_skill, absorb)) +// .stages(EventStages::PostOnly)); + +// let absorb_index = target.effects.iter().position(|e| e.effect == Effect::Absorb).expect("No absorb"); +// let ce = target.effects.remove(absorb_index); + +// game.event(Event::new(source, target) +// .event(Event::Remove { skill, effect: Some(ce.effect), construct_effects: target.effects.clone() }) +// .stages(EventStages::PostOnly)); +// } + Skill::Banish | Skill::BanishPlus | @@ -178,7 +239,7 @@ impl Cast { }, Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None } + effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None } }, Action::IncreaseCooldowns { construct: self.target, @@ -199,7 +260,7 @@ impl Cast { Skill::Break => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }, }, Action::Effect { construct: self.target, @@ -209,7 +270,7 @@ impl Cast { Skill::BreakPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }, }, Action::Effect { construct: self.target, @@ -219,7 +280,7 @@ impl Cast { Skill::BreakPlusPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }, }, Action::Effect { construct: self.target, @@ -276,12 +337,130 @@ impl Cast { }, ], + Skill::Decay => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Decay, duration: 2, meta: Some(EffectMeta::Skill(Skill::DecayTick)), tick: None }, + }, + ], + Skill::DecayPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)), tick: None }, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlus)), tick: None }, + }, + ], + Skill::DecayPlusPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)), tick: None }, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None }, + }, + ], + + Skill::Electrify=> vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::Electrocute)), tick: None }, + }, + ], + Skill::ElectrifyPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::ElectrocutePlus)), tick: None }, + }, + ], + Skill::ElectrifyPlusPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 1, meta: Some(EffectMeta::Skill(Skill::ElectrocutePlusPlus)), tick: None }, + }, + ], + Skill::Electrocute => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Electric, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 2, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTick)), tick: None }, + }, + ], + Skill::ElectrocutePlus => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Electric, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 3, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlus)), tick: None }, + }, + ], + Skill::ElectrocutePlusPlus => vec![ + Action::Remove { + construct: self.source, + effect: Effect::Electric, + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Electric, duration: 4, meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlusPlus)), tick: None }, + }, + ], + Skill::ElectrocuteTick | + Skill::ElectrocuteTickPlus | + Skill::ElectrocuteTickPlusPlus => vec![ + Action::Damage { + construct: self.target, + colour: Colour::Blue, + values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }], + }, + ], + + Skill::Heal | + Skill::HealPlus | + Skill::HealPlusPlus => vec![ + Action::Heal { + construct: self.target, + colour: Colour::Green, + values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }], + }, + ], + + Skill::Haste => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None }, + }, + ], + Skill::HastePlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(175)), tick: None }, + }, + ], + Skill::HastePlusPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(225)), tick: None }, + }, + ], + Skill::Intercept | Skill::InterceptPlus | Skill::InterceptPlusPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Intercept, duration: 1, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }, }, Action::Heal { construct: self.target, @@ -305,6 +484,20 @@ impl Cast { ], + Skill::Ruin | + Skill::RuinPlus | + Skill::RuinPlusPlus => vec![ + Action::Damage { + construct: self.target, + colour: Colour::Blue, + values: vec![Value::Stat { construct: self.target, stat: Stat::BluePower, mult: self.skill.multiplier() }], + }, + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None } + } + ], + Skill::Slay | Skill::SlayPlus | Skill::SlayPlusPlus => vec![ @@ -323,7 +516,7 @@ impl Cast { Skill::Sleep => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }, }, Action::Heal { construct: self.target, @@ -334,7 +527,7 @@ impl Cast { Skill::SleepPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }, }, Action::Heal { construct: self.target, @@ -345,7 +538,7 @@ impl Cast { Skill::SleepPlusPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }, }, Action::Heal { construct: self.target, @@ -369,7 +562,7 @@ impl Cast { Skill::SustainPlusPlus => vec![ Action::Effect { construct: self.target, - effect: ConstructEffect {effect: Effect::Sustain, duration: 1, meta: None, tick: None}, + effect: ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }, }, Action::Heal { construct: self.target, @@ -377,6 +570,35 @@ impl Cast { colour: Colour::Red, }, ], + + Skill::Triage => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Triage, duration: 2, meta: Some(EffectMeta::Skill(Skill::TriageTick)), tick: None }, + }, + ], + Skill::TriagePlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Triage, duration: 3, meta: Some(EffectMeta::Skill(Skill::TriageTickPlus)), tick: None }, + }, + ], + Skill::TriagePlusPlus => vec![ + Action::Effect { + construct: self.target, + effect: ConstructEffect { effect: Effect::Triage, duration: 4, meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None }, + }, + ], + Skill::TriageTick | + Skill::TriageTickPlus | + Skill::TriageTickPlusPlus => vec![ + Action::Heal { + construct: self.target, + colour: Colour::Green, + values: vec![Value::Stat { construct: self.source, stat: Stat::GreenPower, mult: self.skill.multiplier() }], + }, + ], + _ => unimplemented!() }; @@ -387,186 +609,20 @@ impl Cast { fn end() {} -// fn heal(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.green_power().pct(skill.multiplier()); -// target.deal_green_damage(skill, amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e))); -// } - -// fn triage(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let skip_tick = target.effects.iter().any(|e| { -// match e.effect { -// Effect::Triage => source.skill_speed(skill) <= e.tick.unwrap().speed, -// _ => false, -// } -// }); - -// let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; -// let tick_skill = match meta { -// Some(EffectMeta::Skill(s)) => s, -// _ => panic!("no triage tick skill"), -// }; -// let triage = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); -// game.event(Event::new(source, target).event(target.add_effect(skill, triage))); - -// match skip_tick { -// false => return triage_tick(source, target, resolutions, tick_skill) -// } -// } - -// fn triage_tick(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.green_power().pct(skill.multiplier()); -// target.deal_green_damage(skill, amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::EndPost))); -// } - -// fn amplify(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); -// } - -// fn haste(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); -// } - -// fn debuff(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); -// } - -// fn decay(source: &mut Construct, target: &mut Construct, skill: Skill) { - -// let wither = skill.effect()[0]; -// game.event(Event::new(source, target).event(target.add_effect(skill, wither))); - -// let skip_tick = target.effects.iter().any(|e| { -// match e.effect { -// Effect::Decay => source.skill_speed(skill) <= e.tick.unwrap().speed, -// _ => false, -// } -// }); -// let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[1]; -// let tick_skill = match meta { -// Some(EffectMeta::Skill(s)) => s, -// _ => panic!("no decay tick skill"), -// }; -// let decay = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); -// game.event(Event::new(source, target) -// .event(target.add_effect(skill, decay)) -// .stages(EventStages::PostOnly)); - -// match skip_tick { -// false => return decay_tick(source, target, resolutions, tick_skill) -// } -// } - -// fn decay_tick(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.blue_power().pct(skill.multiplier()); -// target.deal_blue_damage(skill, amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::EndPost))); -// } - -// // electrify is the buff effect -// // when attacked it runs electrocute and applies a debuff -// fn electrify(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let electrify = skill.effect()[0]; -// game.event(Event::new(source, target).event(target.add_effect(skill, electrify))); -// } - -// fn electrocute(source: &mut Construct, target: &mut Construct, skill: Skill) { -// // Remove electric buff, no need to display if construct is dead -// if !source.is_ko() { -// let electric = source.effects.iter().position(|e| e.effect == Effect::Electric); -// match electric { -// Some(eff) => { -// let ce = source.effects.remove(eff); -// game.event(Event::new(source, source) -// .event(Event::Removal { skill, effect: Some(ce.effect), construct_effects: source.effects.clone() }) -// .stages(EventStages::PostOnly)); -// } -// None => () -// } -// } - -// let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0]; -// let tick_skill = match meta { -// Some(EffectMeta::Skill(s)) => s, -// _ => panic!("no electrocute tick skill"), -// }; - -// let skip_tick = target.effects.iter().any(|e| { -// match e.effect { -// Effect::Electrocute => source.skill_speed(skill) <= e.tick.unwrap().speed, -// _ => false, -// } -// }); -// let electrocute = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); -// game.event(Event::new(source, target) -// .event(target.add_effect(skill, electrocute)) -// .stages(EventStages::PostOnly)); - - -// match skip_tick { -// false => return electrocute_tick(source, target, resolutions, tick_skill) -// } -// } - -// fn electrocute_tick(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.blue_power().pct(skill.multiplier()); -// target.deal_blue_damage(skill, amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::EndPost))); -// } - -// fn ruin(source: &mut Construct, target: &mut Construct, skill: Skill) { -// let amount = source.blue_power().pct(skill.multiplier()); -// target.deal_blue_damage(skill, amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::PostOnly))); - -// game.event(Event::new(source, target) -// .event(target.add_effect(skill, skill.effect()[0])) -// .stages(EventStages::PostOnly)); -// } - -// fn absorb(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); -// let blue_amount = source.blue_power().pct(skill.multiplier()); -// target.recharge(skill, 0, blue_amount) -// .into_iter() -// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::PostOnly))); -// } - -// fn absorption(source: &mut Construct, target: &mut Construct, reflect_skill: Skill, amount: usize, skill: Skill) { -// let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount)); - -// game.event(Event::new(source, target) -// .event(target.add_effect(reflect_skill, absorb)) -// .stages(EventStages::PostOnly)); - -// let absorb_index = target.effects.iter().position(|e| e.effect == Effect::Absorb).expect("No absorb"); -// let ce = target.effects.remove(absorb_index); - -// game.event(Event::new(source, target) -// .event(Event::Removal { skill, effect: Some(ce.effect), construct_effects: target.effects.clone() }) -// .stages(EventStages::PostOnly)); -// } - // fn curse(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // } // fn hybrid(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // } // fn invert(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // } // fn reflect(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // let blue_amount = source.blue_power().pct(skill.multiplier()); // target.recharge(skill, 0, blue_amount) @@ -599,7 +655,7 @@ fn end() {} // _ => panic!("no siphon tick skill"), // }; // let siphon = ConstructEffect::new(effect, duration).set_tick(Cast::new_tick(source, target, tick_skill)); -// game.event(Event::new(source, target).event(target.add_effect(skill, siphon))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, siphon))); // match skip_tick { // false => return siphon_tick(source, target, resolutions, tick_skill) @@ -626,7 +682,7 @@ fn end() {} // } // fn link(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // let amount = source.blue_power().pct(skill.multiplier().saturating_mul(target.effects.len() as usize)); // target.deal_blue_damage(skill, amount) @@ -636,7 +692,7 @@ fn end() {} // } // fn silence(source: &mut Construct, target: &mut Construct, skill: Skill) { -// game.event(Event::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); +// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // let s_multi = target.skills // .iter() @@ -657,12 +713,12 @@ fn end() {} // if target.effects.len() > 0 { // target.effects.clear(); // game.event(Event::new(source, target) -// .event(Event::Removal { skill, effect: None, construct_effects: target.effects.clone() }) +// .event(Event::Remove { skill, effect: None, construct_effects: target.effects.clone() }) // .stages(EventStages::PostOnly)); // } // let effect = skill.effect()[0]; -// game.event(Event::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly)); +// game.event(Event::new(source, target).event(target.effect_remove(skill, effect)).stages(EventStages::PostOnly)); // } @@ -672,14 +728,14 @@ fn end() {} // let amount = source.green_power().pct(skill.multiplier().saturating_mul(target.effects.len() as usize)); // target.effects.clear(); // game.event(Event::new(source, target) -// .event(Event::Removal { skill, effect: None, construct_effects: target.effects.clone() }) +// .event(Event::Remove { skill, effect: None, construct_effects: target.effects.clone() }) // .stages(EventStages::PostOnly)); // target.deal_green_damage(skill, amount) // .into_iter() // .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::PostOnly))); // } // let effect = skill.effect()[0]; -// game.event(Event::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly)); +// game.event(Event::new(source, target).event(target.effect_remove(skill, effect)).stages(EventStages::PostOnly)); // } @@ -1048,168 +1104,168 @@ impl Skill { pub fn effect(&self) -> Vec { match self { // Modifiers - Skill::Amplify => vec![ConstructEffect {effect: Effect::Amplify, duration: 2, - meta: Some(EffectMeta::Multiplier(150)), tick: None}], - Skill::AmplifyPlus => vec![ConstructEffect {effect: Effect::Amplify, duration: 3, - meta: Some(EffectMeta::Multiplier(175)), tick: None}], - Skill::AmplifyPlusPlus => vec![ConstructEffect {effect: Effect::Amplify, duration: 4, - meta: Some(EffectMeta::Multiplier(200)), tick: None}], + Skill::Amplify => vec![ConstructEffect { effect: Effect::Amplify, duration: 2, + meta: Some(EffectMeta::Multiplier(150)), tick: None }], + Skill::AmplifyPlus => vec![ConstructEffect { effect: Effect::Amplify, duration: 3, + meta: Some(EffectMeta::Multiplier(175)), tick: None }], + Skill::AmplifyPlusPlus => vec![ConstructEffect { effect: Effect::Amplify, duration: 4, + meta: Some(EffectMeta::Multiplier(200)), tick: None }], - Skill::Banish => vec![ConstructEffect {effect: Effect::Banish, duration: 2, meta: None, tick: None}], - Skill::BanishPlus => vec![ConstructEffect {effect: Effect::Banish, duration: 2, meta: None, tick: None}], - Skill::BanishPlusPlus => vec![ConstructEffect {effect: Effect::Banish, duration: 2, meta: None, tick: None}], + Skill::Banish => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }], + Skill::BanishPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }], + Skill::BanishPlusPlus => vec![ConstructEffect { effect: Effect::Banish, duration: 2, meta: None, tick: None }], - Skill::Block => vec![ConstructEffect {effect: Effect::Block, duration: 1, - meta: Some(EffectMeta::Multiplier(35)), tick: None}], - Skill::Buff => vec![ConstructEffect {effect: Effect::Buff, duration: 3, + Skill::Block => vec![ConstructEffect { effect: Effect::Block, duration: 1, + meta: Some(EffectMeta::Multiplier(35)), tick: None }], + Skill::Buff => vec![ConstructEffect { effect: Effect::Buff, duration: 3, meta: Some(EffectMeta::Multiplier(130)), tick: None }], - Skill::Electrify => vec![ConstructEffect {effect: Effect::Electric, duration: 1, - meta: Some(EffectMeta::Skill(Skill::Electrocute)), tick: None}], - Skill::ElectrifyPlus => vec![ConstructEffect {effect: Effect::Electric, duration: 1, - meta: Some(EffectMeta::Skill(Skill::ElectrocutePlus)), tick: None}], - Skill::ElectrifyPlusPlus => vec![ConstructEffect {effect: Effect::Electric, duration: 1, - meta: Some(EffectMeta::Skill(Skill::ElectrocutePlusPlus)), tick: None}], - Skill::Electrocute => vec![ConstructEffect {effect: Effect::Electrocute, duration: 2, - meta: Some(EffectMeta::Skill(Skill::ElectrocuteTick)), tick: None}], - Skill::ElectrocutePlus => vec![ConstructEffect {effect: Effect::Electrocute, duration: 3, - meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlus)), tick: None}], - Skill::ElectrocutePlusPlus => vec![ConstructEffect {effect: Effect::Electrocute, duration: 4, - meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlusPlus)), tick: None}], + Skill::Electrify => vec![ConstructEffect { effect: Effect::Electric, duration: 1, + meta: Some(EffectMeta::Skill(Skill::Electrocute)), tick: None }], + Skill::ElectrifyPlus => vec![ConstructEffect { effect: Effect::Electric, duration: 1, + meta: Some(EffectMeta::Skill(Skill::ElectrocutePlus)), tick: None }], + Skill::ElectrifyPlusPlus => vec![ConstructEffect { effect: Effect::Electric, duration: 1, + meta: Some(EffectMeta::Skill(Skill::ElectrocutePlusPlus)), tick: None }], + Skill::Electrocute => vec![ConstructEffect { effect: Effect::Electrocute, duration: 2, + meta: Some(EffectMeta::Skill(Skill::ElectrocuteTick)), tick: None }], + Skill::ElectrocutePlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 3, + meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlus)), tick: None }], + Skill::ElectrocutePlusPlus => vec![ConstructEffect { effect: Effect::Electrocute, duration: 4, + meta: Some(EffectMeta::Skill(Skill::ElectrocuteTickPlusPlus)), tick: None }], - Skill::Sustain => vec![ConstructEffect {effect: Effect::Sustain, duration: 1, meta: None, tick: None }], - Skill::SustainPlus => vec![ConstructEffect {effect: Effect::Sustain, duration: 1, meta: None, tick: None }], - Skill::SustainPlusPlus => vec![ConstructEffect {effect: Effect::Sustain, duration: 1, meta: None, tick: None }], + Skill::Sustain => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }], + Skill::SustainPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }], + Skill::SustainPlusPlus => vec![ConstructEffect { effect: Effect::Sustain, duration: 1, meta: None, tick: None }], - Skill::Curse => vec![ConstructEffect {effect: Effect::Curse, duration: 2, - meta: Some(EffectMeta::Multiplier(150)), tick: None}], - Skill::CursePlus => vec![ConstructEffect {effect: Effect::Curse, duration: 2, - meta: Some(EffectMeta::Multiplier(175)), tick: None}], - Skill::CursePlusPlus => vec![ConstructEffect {effect: Effect::Curse, duration: 3, - meta: Some(EffectMeta::Multiplier(200)), tick: None}], + Skill::Curse => vec![ConstructEffect { effect: Effect::Curse, duration: 2, + meta: Some(EffectMeta::Multiplier(150)), tick: None }], + Skill::CursePlus => vec![ConstructEffect { effect: Effect::Curse, duration: 2, + meta: Some(EffectMeta::Multiplier(175)), tick: None }], + Skill::CursePlusPlus => vec![ConstructEffect { effect: Effect::Curse, duration: 3, + meta: Some(EffectMeta::Multiplier(200)), tick: None }], - Skill::Debuff => vec![ConstructEffect {effect: Effect::Slow, duration: 3, + Skill::Debuff => vec![ConstructEffect { effect: Effect::Slow, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }], - Skill::Decay => vec![ConstructEffect {effect: Effect::Wither, duration: 3, + Skill::Decay => vec![ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }, - ConstructEffect {effect: Effect::Decay, duration: 3, - meta: Some(EffectMeta::Skill(Skill::DecayTick)), tick: None}], - Skill::DecayPlus => vec![ConstructEffect {effect: Effect::Wither, duration: 3, + ConstructEffect { effect: Effect::Decay, duration: 3, + meta: Some(EffectMeta::Skill(Skill::DecayTick)), tick: None }], + Skill::DecayPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(35)), tick: None }, - ConstructEffect {effect: Effect::Decay, duration: 3, - meta: Some(EffectMeta::Skill(Skill::DecayTickPlus)), tick: None}], - Skill::DecayPlusPlus => vec![ConstructEffect {effect: Effect::Wither, duration: 4, + ConstructEffect { effect: Effect::Decay, duration: 3, + meta: Some(EffectMeta::Skill(Skill::DecayTickPlus)), tick: None }], + Skill::DecayPlusPlus => vec![ConstructEffect { effect: Effect::Wither, duration: 4, meta: Some(EffectMeta::Multiplier(20)), tick: None }, - ConstructEffect {effect: Effect::Decay, duration: 4, - meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None}], + ConstructEffect { effect: Effect::Decay, duration: 4, + meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None }], - Skill::Haste => vec![ConstructEffect {effect: Effect::Haste, duration: 3, + Skill::Haste => vec![ConstructEffect { effect: Effect::Haste, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None }], - Skill::HastePlus => vec![ConstructEffect {effect: Effect::Haste, duration: 4, + Skill::HastePlus => vec![ConstructEffect { effect: Effect::Haste, duration: 4, meta: Some(EffectMeta::Multiplier(175)), tick: None }], - Skill::HastePlusPlus => vec![ConstructEffect {effect: Effect::Haste, duration: 5, + Skill::HastePlusPlus => vec![ConstructEffect { effect: Effect::Haste, duration: 5, meta: Some(EffectMeta::Multiplier(225)), tick: None }], - Skill::Absorb => vec![ConstructEffect {effect: Effect::Absorb, duration: 1, - meta: Some(EffectMeta::Skill(Skill::Absorption)), tick: None}], - Skill::AbsorbPlus => vec![ConstructEffect {effect: Effect::Absorb, duration: 1, - meta: Some(EffectMeta::Skill(Skill::AbsorptionPlus)), tick: None}], - Skill::AbsorbPlusPlus => vec![ConstructEffect {effect: Effect::Absorb, duration: 1, - meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None}], + Skill::Absorb => vec![ConstructEffect { effect: Effect::Absorb, duration: 1, + meta: Some(EffectMeta::Skill(Skill::Absorption)), tick: None }], + Skill::AbsorbPlus => vec![ConstructEffect { effect: Effect::Absorb, duration: 1, + meta: Some(EffectMeta::Skill(Skill::AbsorptionPlus)), tick: None }], + Skill::AbsorbPlusPlus => vec![ConstructEffect { effect: Effect::Absorb, duration: 1, + meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None }], - Skill::Absorption => vec![ConstructEffect {effect: Effect::Absorption, duration: 3, meta: None, tick: None}], - Skill::AbsorptionPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 4, meta: None, tick: None}], - Skill::AbsorptionPlusPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 5, meta: None, tick: None}], + Skill::Absorption => vec![ConstructEffect { effect: Effect::Absorption, duration: 3, meta: None, tick: None }], + Skill::AbsorptionPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 4, meta: None, tick: None }], + Skill::AbsorptionPlusPlus => vec![ConstructEffect { effect: Effect::Absorption, duration: 5, meta: None, tick: None }], - Skill::Hybrid => vec![ConstructEffect {effect: Effect::Hybrid, duration: 3, + Skill::Hybrid => vec![ConstructEffect { effect: Effect::Hybrid, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None }], - Skill::HybridPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 4, + Skill::HybridPlus => vec![ConstructEffect { effect: Effect::Hybrid, duration: 4, meta: Some(EffectMeta::Multiplier(175)), tick: None }], - Skill::HybridPlusPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 5, + Skill::HybridPlusPlus => vec![ConstructEffect { effect: Effect::Hybrid, duration: 5, meta: Some(EffectMeta::Multiplier(200)), tick: None }], - Skill::Invert => vec![ConstructEffect {effect: Effect::Invert, duration: 2, meta: None, tick: None}], - Skill::InvertPlus => vec![ConstructEffect {effect: Effect::Invert, duration: 3, meta: None, tick: None}], - Skill::InvertPlusPlus => vec![ConstructEffect {effect: Effect::Invert, duration: 4, meta: None, tick: None}], + Skill::Invert => vec![ConstructEffect { effect: Effect::Invert, duration: 2, meta: None, tick: None }], + Skill::InvertPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 3, meta: None, tick: None }], + Skill::InvertPlusPlus => vec![ConstructEffect { effect: Effect::Invert, duration: 4, meta: None, tick: None }], - Skill::Counter => vec![ConstructEffect {effect: Effect::Counter, duration: 1, - meta: Some(EffectMeta::Skill(Skill::CounterAttack)), tick: None}], - Skill::CounterPlus => vec![ConstructEffect {effect: Effect::Counter, duration: 1, - meta: Some(EffectMeta::Skill(Skill::CounterAttackPlus)), tick: None}], - Skill::CounterPlusPlus => vec![ConstructEffect {effect: Effect::Counter, duration: 1, - meta: Some(EffectMeta::Skill(Skill::CounterAttackPlusPlus)), tick: None}], + Skill::Counter => vec![ConstructEffect { effect: Effect::Counter, duration: 1, + meta: Some(EffectMeta::Skill(Skill::CounterAttack)), tick: None }], + Skill::CounterPlus => vec![ConstructEffect { effect: Effect::Counter, duration: 1, + meta: Some(EffectMeta::Skill(Skill::CounterAttackPlus)), tick: None }], + Skill::CounterPlusPlus => vec![ConstructEffect { effect: Effect::Counter, duration: 1, + meta: Some(EffectMeta::Skill(Skill::CounterAttackPlusPlus)), tick: None }], - Skill::Reflect => vec![ConstructEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }], - Skill::ReflectPlus => vec![ConstructEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }], - Skill::ReflectPlusPlus => vec![ConstructEffect {effect: Effect::Reflect, duration: 1, meta: None, tick: None }], + Skill::Reflect => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }], + Skill::ReflectPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }], + Skill::ReflectPlusPlus => vec![ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None }], - Skill::Break => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}, - ConstructEffect {effect: Effect::Vulnerable, duration: 3, - meta: Some(EffectMeta::Multiplier(150)), tick: None}], - Skill::BreakPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}, - ConstructEffect {effect: Effect::Vulnerable, duration: 4, - meta: Some(EffectMeta::Multiplier(175)), tick: None}], - Skill::BreakPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}, - ConstructEffect {effect: Effect::Vulnerable, duration: 4, - meta: Some(EffectMeta::Multiplier(200)), tick: None}], + Skill::Break => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }, + ConstructEffect { effect: Effect::Vulnerable, duration: 3, + meta: Some(EffectMeta::Multiplier(150)), tick: None }], + Skill::BreakPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }, + ConstructEffect { effect: Effect::Vulnerable, duration: 4, + meta: Some(EffectMeta::Multiplier(175)), tick: None }], + Skill::BreakPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }, + ConstructEffect { effect: Effect::Vulnerable, duration: 4, + meta: Some(EffectMeta::Multiplier(200)), tick: None }], - Skill::Ruin => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], - Skill::RuinPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], - Skill::RuinPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], + Skill::Ruin => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], + Skill::RuinPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], + Skill::RuinPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], - Skill::Purge => vec![ConstructEffect {effect: Effect::Purge, duration: 2, meta: None, tick: None}], - Skill::PurgePlus => vec![ConstructEffect {effect: Effect::Purge, duration: 3, meta: None, tick: None}], - Skill::PurgePlusPlus => vec![ConstructEffect {effect: Effect::Purge, duration: 4, meta: None, tick: None}], + Skill::Purge => vec![ConstructEffect { effect: Effect::Purge, duration: 2, meta: None, tick: None }], + Skill::PurgePlus => vec![ConstructEffect { effect: Effect::Purge, duration: 3, meta: None, tick: None }], + Skill::PurgePlusPlus => vec![ConstructEffect { effect: Effect::Purge, duration: 4, meta: None, tick: None }], - Skill::Link => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], - Skill::LinkPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], - Skill::LinkPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], + Skill::Link => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], + Skill::LinkPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], + Skill::LinkPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None }], - Skill::Silence => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], - Skill::SilencePlus => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], - Skill::SilencePlusPlus => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}], + Skill::Silence => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }], + Skill::SilencePlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }], + Skill::SilencePlusPlus => vec![ConstructEffect { effect: Effect::Silence, duration: 2, meta: None, tick: None }], - Skill::Siphon => vec![ConstructEffect {effect: Effect::Siphon, duration: 2, - meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None}], - Skill::SiphonPlus => vec![ConstructEffect {effect: Effect::Siphon, duration: 3, - meta: Some(EffectMeta::Skill(Skill::SiphonTickPlus)), tick: None}], - Skill::SiphonPlusPlus => vec![ConstructEffect {effect: Effect::Siphon, duration: 4, - meta: Some(EffectMeta::Skill(Skill::SiphonTickPlusPlus)), tick: None}], + Skill::Siphon => vec![ConstructEffect { effect: Effect::Siphon, duration: 2, + meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None }], + Skill::SiphonPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 3, + meta: Some(EffectMeta::Skill(Skill::SiphonTickPlus)), tick: None }], + Skill::SiphonPlusPlus => vec![ConstructEffect { effect: Effect::Siphon, duration: 4, + meta: Some(EffectMeta::Skill(Skill::SiphonTickPlusPlus)), tick: None }], - Skill::Sleep => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], - Skill::SleepPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 3, meta: None, tick: None}], - Skill::SleepPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 4, meta: None, tick: None}], + Skill::Sleep => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }], + Skill::SleepPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 3, meta: None, tick: None }], + Skill::SleepPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 4, meta: None, tick: None }], - Skill::Restrict => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], - Skill::RestrictPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], - Skill::RestrictPlusPlus => vec![ConstructEffect {effect: Effect::Restrict, duration: 2, meta: None, tick: None}], + Skill::Restrict => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }], + Skill::RestrictPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }], + Skill::RestrictPlusPlus => vec![ConstructEffect { effect: Effect::Restrict, duration: 2, meta: None, tick: None }], - Skill::Bash => vec![ConstructEffect {effect: Effect::Stun, duration: 2, - meta: Some(EffectMeta::Skill(Skill::Bash)), tick: None}], - Skill::BashPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, - meta: Some(EffectMeta::Skill(Skill::BashPlus)), tick: None}], - Skill::BashPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, - meta: Some(EffectMeta::Skill(Skill::BashPlusPlus)), tick: None}], - Skill::Stun => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}], + Skill::Bash => vec![ConstructEffect { effect: Effect::Stun, duration: 2, + meta: Some(EffectMeta::Skill(Skill::Bash)), tick: None }], + Skill::BashPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2, + meta: Some(EffectMeta::Skill(Skill::BashPlus)), tick: None }], + Skill::BashPlusPlus => vec![ConstructEffect { effect: Effect::Stun, duration: 2, + meta: Some(EffectMeta::Skill(Skill::BashPlusPlus)), tick: None }], + Skill::Stun => vec![ConstructEffect { effect: Effect::Stun, duration: 2, meta: None, tick: None }], - Skill::Intercept => vec![ConstructEffect {effect: Effect::Intercept, duration: 1, meta: None, tick: None}], - Skill::InterceptPlus => vec![ConstructEffect {effect: Effect::Intercept, duration: 1, meta: None, tick: None}], - Skill::InterceptPlusPlus => vec![ConstructEffect {effect: Effect::Intercept, duration: 1, meta: None, tick: None}], + Skill::Intercept => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }], + Skill::InterceptPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }], + Skill::InterceptPlusPlus => vec![ConstructEffect { effect: Effect::Intercept, duration: 1, meta: None, tick: None }], - Skill::Triage => vec![ConstructEffect {effect: Effect::Triage, duration: 2, - meta: Some(EffectMeta::Skill(Skill::TriageTick)), tick: None}], - Skill::TriagePlus => vec![ConstructEffect {effect: Effect::Triage, duration: 3, - meta: Some(EffectMeta::Skill(Skill::TriageTickPlus)), tick: None}], - Skill::TriagePlusPlus => vec![ConstructEffect {effect: Effect::Triage, duration: 4, - meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None}], + Skill::Triage => vec![ConstructEffect { effect: Effect::Triage, duration: 2, + meta: Some(EffectMeta::Skill(Skill::TriageTick)), tick: None }], + Skill::TriagePlus => vec![ConstructEffect { effect: Effect::Triage, duration: 3, + meta: Some(EffectMeta::Skill(Skill::TriageTickPlus)), tick: None }], + Skill::TriagePlusPlus => vec![ConstructEffect { effect: Effect::Triage, duration: 4, + meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None }], Skill::Purify => vec![ConstructEffect { effect: Effect::Pure, duration: 2, - meta: Some(EffectMeta::Multiplier(150)), tick: None}], + meta: Some(EffectMeta::Multiplier(150)), tick: None }], Skill::PurifyPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2, - meta: Some(EffectMeta::Multiplier(175)), tick: None}], + meta: Some(EffectMeta::Multiplier(175)), tick: None }], Skill::PurifyPlusPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2, - meta: Some(EffectMeta::Multiplier(200)), tick: None}], + meta: Some(EffectMeta::Multiplier(200)), tick: None }], _ => { panic!("{:?} no skill effect", self);