more skills

This commit is contained in:
ntr 2019-12-09 15:14:09 +10:00
parent 994d1c8fb0
commit 69692da9de
2 changed files with 149 additions and 72 deletions

View File

@ -508,6 +508,9 @@ impl Game {
Value::Cooldowns { construct, mult } => unimplemented!(), Value::Cooldowns { construct, mult } => unimplemented!(),
Value::Effects { construct, mult } =>
self.construct_by_id(*construct).unwrap().effects.len().pct(*mult),
Value::ColourSkills { construct, colour, mult } => unimplemented!(), Value::ColourSkills { construct, colour, mult } => unimplemented!(),
Value::DamageTaken { construct, colour, mult } => Value::DamageTaken { construct, colour, mult } =>
@ -887,6 +890,7 @@ pub enum Value {
Fixed { value: usize }, Fixed { value: usize },
Cooldowns { construct: Uuid, mult: usize }, Cooldowns { construct: Uuid, mult: usize },
ColourSkills { construct: Uuid, colour: Colour, mult: usize }, ColourSkills { construct: Uuid, colour: Colour, mult: usize },
Effects { construct: Uuid, mult: usize },
DamageTaken { construct: Uuid, colour: Colour, mult: usize }, DamageTaken { construct: Uuid, colour: Colour, mult: usize },
// Skills { construct: Uuid, colour: Colour }, // Skills { construct: Uuid, colour: Colour },
} }

View File

@ -288,6 +288,25 @@ impl Cast {
}, },
], ],
Skill::Curse => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None },
},
],
Skill::CursePlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(175)), tick: None },
},
],
Skill::CursePlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Curse, duration: 3, meta: Some(EffectMeta::Multiplier(200)), tick: None },
},
],
Skill::Chaos | Skill::Chaos |
Skill::ChaosPlus | Skill::ChaosPlus |
Skill::ChaosPlusPlus => vec![ Skill::ChaosPlusPlus => vec![
@ -367,6 +386,15 @@ impl Cast {
effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None }, effect: ConstructEffect { effect: Effect::Decay, duration: 4, meta: Some(EffectMeta::Skill(Skill::DecayTickPlusPlus)), tick: None },
}, },
], ],
Skill::DecayTick |
Skill::DecayTickPlus |
Skill::DecayTickPlusPlus => vec![
Action::Damage {
construct: self.target,
colour: Colour::Blue,
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
},
],
Skill::Electrify=> vec![ Skill::Electrify=> vec![
Action::Effect { Action::Effect {
@ -455,6 +483,25 @@ impl Cast {
}, },
], ],
Skill::Hybrid => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Hybrid, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None },
},
],
Skill::HybridPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Hybrid, duration: 4, meta: Some(EffectMeta::Multiplier(175)), tick: None },
},
],
Skill::HybridPlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Hybrid, duration: 5, meta: Some(EffectMeta::Multiplier(200)), tick: None },
},
],
Skill::Intercept | Skill::Intercept |
Skill::InterceptPlus | Skill::InterceptPlus |
Skill::InterceptPlusPlus => vec![ Skill::InterceptPlusPlus => vec![
@ -469,6 +516,70 @@ impl Cast {
}, },
], ],
Skill::Invert => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Invert, duration: 2, meta: None, tick: None },
},
],
Skill::InvertPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Invert, duration: 3, meta: None, tick: None },
},
],
Skill::InvertPlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Invert, duration: 4, meta: None, tick: None },
},
],
Skill::Link |
Skill::LinkPlus |
Skill::LinkPlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Stun, duration: 1, meta: None, tick: None },
},
Action::Damage {
construct: self.target,
colour: Colour::Blue,
values: vec![
Value::Effects { construct: self.target, mult: self.skill.multiplier() },
],
},
],
Skill::Recharge |
Skill::RechargePlus |
Skill::RechargePlusPlus => vec![
Action::Heal {
construct: self.target,
colour: Colour::Red,
values: vec![Value::Stat { construct: self.source, stat: Stat::RedPower, mult: self.skill.multiplier() }],
},
Action::Heal {
construct: self.target,
colour: Colour::Blue,
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
},
],
Skill::Reflect |
Skill::ReflectPlus |
Skill::ReflectPlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Reflect, duration: 1, meta: None, tick: None },
},
Action::Heal {
construct: self.target,
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
colour: Colour::Blue,
},
],
Skill::Restrict | Skill::Restrict |
Skill::RestrictPlus | Skill::RestrictPlus |
Skill::RestrictPlusPlus => vec![ Skill::RestrictPlusPlus => vec![
@ -498,6 +609,40 @@ impl Cast {
} }
], ],
Skill::Siphon => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Siphon, duration: 2, meta: Some(EffectMeta::Skill(Skill::SiphonTick)), tick: None },
},
],
Skill::SiphonPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Siphon, duration: 3, meta: Some(EffectMeta::Skill(Skill::SiphonTickPlus)), tick: None },
},
],
Skill::SiphonPlusPlus => vec![
Action::Effect {
construct: self.target,
effect: ConstructEffect { effect: Effect::Siphon, duration: 4, meta: Some(EffectMeta::Skill(Skill::SiphonTickPlusPlus)), tick: None },
},
],
Skill::SiphonTick |
Skill::SiphonTickPlus |
Skill::SiphonTickPlusPlus => vec![
Action::Damage {
construct: self.target,
colour: Colour::Blue,
values: vec![Value::Stat { construct: self.source, stat: Stat::BluePower, mult: self.skill.multiplier() }],
},
Action::Heal {
construct: self.target,
colour: Colour::Green,
values: vec![Value::DamageTaken { construct: self.target, colour: Colour::Blue, mult: 100 }],
},
],
Skill::Slay | Skill::Slay |
Skill::SlayPlus | Skill::SlayPlus |
Skill::SlayPlusPlus => vec![ Skill::SlayPlusPlus => vec![
@ -610,78 +755,6 @@ impl Cast {
fn end() {} fn end() {}
// fn curse(source: &mut Construct, target: &mut Construct, skill: Skill) {
// 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.effect_remove(skill, skill.effect()[0])));
// }
// fn invert(source: &mut Construct, target: &mut Construct, skill: Skill) {
// 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.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 recharge(source: &mut Construct, target: &mut Construct, skill: Skill) {
// game.event(Event::new(source, target).event(Event::Skill { skill }).stages(EventStages::StartEnd));
// let red_amount = source.red_power().pct(skill.multiplier());
// let blue_amount = source.blue_power().pct(skill.multiplier());
// target.recharge(skill, red_amount, blue_amount)
// .into_iter()
// .for_each(|e| game.event(Event::new(source, target).event(e).stages(EventStages::PostOnly)));
// }
// fn siphon(source: &mut Construct, target: &mut Construct, skill: Skill) {
// let skip_tick = target.effects.iter().any(|e| {
// match e.effect {
// Effect::Siphon => 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 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.effect_remove(skill, siphon)));
// match skip_tick {
// false => return siphon_tick(source, target, resolutions, tick_skill)
// }
// }
// fn siphon_tick(source: &mut Construct, target: &mut Construct, skill: Skill) {
// let amount = source.blue_power().pct(skill.multiplier()) + source.green_power().pct(skill.multiplier());
// let siphon_events = target.deal_blue_damage(skill, amount);
// for e in siphon_events {
// match e {
// Event::Damage { amount, mitigation: _, colour: _, skill: _ } => {
// game.event(Event::new(source, target).event(e).stages(EventStages::EndPost));
// let heal = source.deal_green_damage(skill, amount);
// for h in heal {
// game.event(Event::new(source, source).event(h).stages(EventStages::PostOnly));
// };
// },
// _ => game.event(Event::new(source, target).event(e).stages(EventStages::EndPost)),
// }
// }
// }
// fn link(source: &mut Construct, target: &mut Construct, skill: Skill) { // fn link(source: &mut Construct, target: &mut Construct, skill: Skill) {
// game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0]))); // game.event(Event::new(source, target).event(target.effect_remove(skill, skill.effect()[0])));