Merge branch 'develop' of ssh://git.mnml.gg:40022/~/mnml into develop

This commit is contained in:
ntr 2019-09-16 15:26:50 +10:00
commit e1c8a1b507
4 changed files with 288 additions and 324 deletions

View File

@ -79,7 +79,7 @@ function registerEvents(store) {
store.dispatch(actions.setAnimTarget(anims.animTarget)); store.dispatch(actions.setAnimTarget(anims.animTarget));
if (!['Banish', 'Invert'].includes(removeTier(anims.animTarget.skill))) store.dispatch(actions.setAnimCb(cb)); if (!['Banish', 'Invert'].includes(removeTier(anims.animTarget.skill))) store.dispatch(actions.setAnimCb(cb));
} }
if (sequence.includes('POST_SKILL' && text)) { if (sequence.includes('POST_SKILL') && text) {
// timeout to prevent text classes from being added too soon // timeout to prevent text classes from being added too soon
setTimeout( setTimeout(
() => store.dispatch(actions.setAnimText(text)), () => store.dispatch(actions.setAnimText(text)),

View File

@ -38,7 +38,6 @@ pub enum Effect {
Absorption, Absorption,
// magic immunity // magic immunity
Link,
// effects over time // effects over time
Triage, Triage,
@ -125,8 +124,6 @@ impl Effect {
Effect::Haste => vec![Stat::Speed], Effect::Haste => vec![Stat::Speed],
Effect::Slow => vec![Stat::Speed], Effect::Slow => vec![Stat::Speed],
Effect::Link => vec![Stat::BlueDamageTaken, Stat::GreenDamageTaken, Stat::RedDamageTaken],
_ => vec![], _ => vec![],
} }
} }
@ -146,8 +143,6 @@ impl Effect {
_ => 100, _ => 100,
}), }),
Effect::Link => value >> 1,
Effect::Absorption => value + match meta { Effect::Absorption => value + match meta {
Some(EffectMeta::AddedDamage(d)) => d, Some(EffectMeta::AddedDamage(d)) => d,
_ => panic!("absorb meta not damage"), _ => panic!("absorb meta not damage"),
@ -194,7 +189,6 @@ impl Effect {
// magic // magic
Effect::Hybrid => Some(Colour::Green), Effect::Hybrid => Some(Colour::Green),
Effect::Link => Some(Colour::Green),
Effect::Invert => Some(Colour::Green), Effect::Invert => Some(Colour::Green),
// effects over time // effects over time

View File

@ -785,9 +785,11 @@ impl Item {
Item::Link| Item::Link|
Item::LinkPlus | Item::LinkPlus |
Item::LinkPlusPlus => format!( Item::LinkPlusPlus => format!(
"Caster links with target. Linked constructs split incoming Damage evenly. "Form a link with target swapping relative life values.
Recharges target BlueLife based on {:?}% of BluePower", If the target construct has more green life than caster, {:?}% of green life difference as blue damage to the target and heal to the caster.
self.into_skill().unwrap().multiplier()), Stuns caster for {:?}T in the process.",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration()),
Item::Silence| Item::Silence|
Item::SilencePlus | Item::SilencePlus |
@ -813,10 +815,9 @@ impl Item {
Item::Restrict| Item::Restrict|
Item::RestrictPlus | Item::RestrictPlus |
Item::RestrictPlusPlus => format!( Item::RestrictPlusPlus => format!(
"Block the target from using red skills for {:?}T and deals {:?}% RedPower as red damage. {}", "Block the target from using red skills for {:?}T and deals {:?}% RedPower as red damage. Deals 35% more damage per red skill on target",
self.into_skill().unwrap().effect()[0].get_duration(), self.into_skill().unwrap().effect()[0].get_duration(),
self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().multiplier()),
"Deals 35% more damage per red skill on target"),
Item::Bash| Item::Bash|
Item::BashPlus | Item::BashPlus |
@ -866,97 +867,97 @@ impl Item {
fn combo(&self) -> Vec<Item> { fn combo(&self) -> Vec<Item> {
match self { match self {
Item::Intercept => vec![Item::Buff, Item::Red, Item::Red], Item::Intercept => vec![Item::Buff, Item::Red, Item::Red],
Item::Triage => vec![Item::Buff, Item::Green, Item::Green],
Item::Absorb => vec![Item::Buff, Item::Blue, Item::Blue],
Item::Amplify => vec![Item::Buff, Item::Red, Item::Blue],
Item::Haste => vec![Item::Buff, Item::Red, Item::Green],
Item::Hybrid => vec![Item::Buff, Item::Green, Item::Blue],
Item::InterceptPlus => vec![Item::Intercept, Item::Intercept, Item::Intercept], Item::InterceptPlus => vec![Item::Intercept, Item::Intercept, Item::Intercept],
Item::InterceptPlusPlus => vec![Item::InterceptPlus, Item::InterceptPlus, Item::InterceptPlus], Item::InterceptPlusPlus => vec![Item::InterceptPlus, Item::InterceptPlus, Item::InterceptPlus],
Item::Triage => vec![Item::Buff, Item::Green, Item::Green],
Item::TriagePlus => vec![Item::Triage, Item::Triage, Item::Triage], Item::TriagePlus => vec![Item::Triage, Item::Triage, Item::Triage],
Item::TriagePlusPlus => vec![Item::TriagePlus, Item::TriagePlus, Item::TriagePlus], Item::TriagePlusPlus => vec![Item::TriagePlus, Item::TriagePlus, Item::TriagePlus],
Item::Link => vec![Item::Buff, Item::Blue, Item::Blue],
Item::LinkPlus => vec![Item::Link, Item::Link, Item::Link],
Item::LinkPlusPlus => vec![Item::LinkPlusPlus, Item::LinkPlusPlus, Item::LinkPlusPlus],
Item::Haste => vec![Item::Buff, Item::Red, Item::Green],
Item::HastePlus => vec![Item::Haste, Item::Haste, Item::Haste], Item::HastePlus => vec![Item::Haste, Item::Haste, Item::Haste],
Item::HastePlusPlus => vec![Item::HastePlus, Item::HastePlus, Item::HastePlus], Item::HastePlusPlus => vec![Item::HastePlus, Item::HastePlus, Item::HastePlus],
Item::Hybrid => vec![Item::Buff, Item::Green, Item::Blue],
Item::HybridPlus => vec![Item::Hybrid, Item::Hybrid, Item::Hybrid], Item::HybridPlus => vec![Item::Hybrid, Item::Hybrid, Item::Hybrid],
Item::HybridPlusPlus => vec![Item::HybridPlus, Item::HybridPlus, Item::HybridPlus], Item::HybridPlusPlus => vec![Item::HybridPlus, Item::HybridPlus, Item::HybridPlus],
Item::Amplify => vec![Item::Buff, Item::Red, Item::Blue], Item::AbsorbPlus => vec![Item::Absorb, Item::Absorb, Item::Absorb],
Item::AbsorbPlusPlus => vec![Item::AbsorbPlus, Item::AbsorbPlus, Item::AbsorbPlus],
Item::AmplifyPlus => vec![Item::Amplify, Item::Amplify, Item::Amplify], Item::AmplifyPlus => vec![Item::Amplify, Item::Amplify, Item::Amplify],
Item::AmplifyPlusPlus => vec![Item::AmplifyPlus, Item::AmplifyPlus, Item::AmplifyPlus], Item::AmplifyPlusPlus => vec![Item::AmplifyPlus, Item::AmplifyPlus, Item::AmplifyPlus],
Item::Purge => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour
Item::Invert => vec![Item::Debuff, Item::Red, Item::Blue],
Item::Restrict => vec![Item::Debuff, Item::Red, Item::Red], Item::Restrict => vec![Item::Debuff, Item::Red, Item::Red],
Item::Silence => vec![Item::Debuff, Item::Blue, Item::Blue],
Item::Curse => vec![Item::Debuff, Item::Red, Item::Green],
Item::Decay => vec![Item::Debuff, Item::Green, Item::Blue],
Item::RestrictPlus => vec![Item::Restrict, Item::Restrict, Item::Restrict], Item::RestrictPlus => vec![Item::Restrict, Item::Restrict, Item::Restrict],
Item::RestrictPlusPlus => vec![Item::RestrictPlus, Item::RestrictPlus, Item::RestrictPlus], Item::RestrictPlusPlus => vec![Item::RestrictPlus, Item::RestrictPlus, Item::RestrictPlus],
Item::Purge => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour
Item::PurgePlus => vec![Item::Purge, Item::Purge, Item::Purge], // Needs flavour Item::PurgePlus => vec![Item::Purge, Item::Purge, Item::Purge], // Needs flavour
Item::PurgePlusPlus => vec![Item::PurgePlus, Item::PurgePlus, Item::PurgePlus], // Needs flavour Item::PurgePlusPlus => vec![Item::PurgePlus, Item::PurgePlus, Item::PurgePlus], // Needs flavour
Item::Silence => vec![Item::Debuff, Item::Blue, Item::Blue],
Item::SilencePlus => vec![Item::Silence, Item::Silence, Item::Silence], Item::SilencePlus => vec![Item::Silence, Item::Silence, Item::Silence],
Item::SilencePlusPlus => vec![Item::SilencePlus, Item::SilencePlus, Item::SilencePlus], Item::SilencePlusPlus => vec![Item::SilencePlus, Item::SilencePlus, Item::SilencePlus],
Item::Curse => vec![Item::Debuff, Item::Red, Item::Green],
Item::CursePlus => vec![Item::Curse, Item::Curse, Item::Curse], Item::CursePlus => vec![Item::Curse, Item::Curse, Item::Curse],
Item::CursePlusPlus => vec![Item::CursePlus, Item::CursePlus, Item::CursePlus], Item::CursePlusPlus => vec![Item::CursePlus, Item::CursePlus, Item::CursePlus],
Item::Decay => vec![Item::Debuff, Item::Green, Item::Blue],
Item::DecayPlus => vec![Item::Decay, Item::Decay, Item::Decay], Item::DecayPlus => vec![Item::Decay, Item::Decay, Item::Decay],
Item::DecayPlusPlus => vec![Item::DecayPlus, Item::DecayPlus, Item::DecayPlus], Item::DecayPlusPlus => vec![Item::DecayPlus, Item::DecayPlus, Item::DecayPlus],
Item::Invert => vec![Item::Debuff, Item::Red, Item::Blue],
Item::InvertPlus => vec![Item::Invert, Item::Invert, Item::Invert], Item::InvertPlus => vec![Item::Invert, Item::Invert, Item::Invert],
Item::InvertPlusPlus => vec![Item::InvertPlus, Item::InvertPlus, Item::InvertPlus], Item::InvertPlusPlus => vec![Item::InvertPlus, Item::InvertPlus, Item::InvertPlus],
Item::Counter => vec![Item::Block, Item::Red, Item::Red], Item::Counter => vec![Item::Block, Item::Red, Item::Red],
Item::Reflect => vec![Item::Block, Item::Green, Item::Blue],
Item::Purify => vec![Item::Block, Item::Green, Item::Green],
Item::Sustain => vec![Item::Block, Item::Red, Item::Green],
Item::Electrify => vec![Item::Block, Item::Blue, Item::Blue],
Item::Recharge => vec![Item::Block, Item::Red, Item::Blue],
Item::CounterPlus => vec![Item::Counter, Item::Counter, Item::Counter], Item::CounterPlus => vec![Item::Counter, Item::Counter, Item::Counter],
Item::CounterPlusPlus => vec![Item::CounterPlus, Item::CounterPlus, Item::CounterPlus], // Add red recharge Item::CounterPlusPlus => vec![Item::CounterPlus, Item::CounterPlus, Item::CounterPlus], // Add red recharge
Item::Purify => vec![Item::Block, Item::Green, Item::Green],
Item::PurifyPlus => vec![Item::Purify, Item::Purify, Item::Purify], Item::PurifyPlus => vec![Item::Purify, Item::Purify, Item::Purify],
Item::PurifyPlusPlus => vec![Item::PurifyPlus, Item::PurifyPlus, Item::PurifyPlus], Item::PurifyPlusPlus => vec![Item::PurifyPlus, Item::PurifyPlus, Item::PurifyPlus],
Item::Electrify => vec![Item::Block, Item::Blue, Item::Blue],
Item::ElectrifyPlus => vec![Item::Electrify, Item::Electrify, Item::Electrify], Item::ElectrifyPlus => vec![Item::Electrify, Item::Electrify, Item::Electrify],
Item::ElectrifyPlusPlus => vec![Item::ElectrifyPlus, Item::ElectrifyPlus, Item::ElectrifyPlus], Item::ElectrifyPlusPlus => vec![Item::ElectrifyPlus, Item::ElectrifyPlus, Item::ElectrifyPlus],
Item::Sustain => vec![Item::Block, Item::Red, Item::Green],
Item::SustainPlus => vec![Item::Sustain, Item::Sustain, Item::Sustain], Item::SustainPlus => vec![Item::Sustain, Item::Sustain, Item::Sustain],
Item::SustainPlusPlus => vec![Item::SustainPlus, Item::SustainPlus, Item::SustainPlus], Item::SustainPlusPlus => vec![Item::SustainPlus, Item::SustainPlus, Item::SustainPlus],
Item::Reflect => vec![Item::Block, Item::Green, Item::Blue],
Item::ReflectPlus => vec![Item::Reflect, Item::Reflect, Item::Reflect], Item::ReflectPlus => vec![Item::Reflect, Item::Reflect, Item::Reflect],
Item::ReflectPlusPlus => vec![Item::ReflectPlus, Item::ReflectPlus, Item::ReflectPlus], Item::ReflectPlusPlus => vec![Item::ReflectPlus, Item::ReflectPlus, Item::ReflectPlus],
Item::Recharge => vec![Item::Block, Item::Red, Item::Blue],
Item::RechargePlus => vec![Item::Recharge, Item::Recharge, Item::Recharge], Item::RechargePlus => vec![Item::Recharge, Item::Recharge, Item::Recharge],
Item::RechargePlusPlus => vec![Item::RechargePlus, Item::RechargePlus, Item::RechargePlus], Item::RechargePlusPlus => vec![Item::RechargePlus, Item::RechargePlus, Item::RechargePlus],
Item::Bash => vec![Item::Stun, Item::Red, Item::Red], Item::Bash => vec![Item::Stun, Item::Red, Item::Red],
Item::Sleep => vec![Item::Stun, Item::Green, Item::Green],
Item::Ruin => vec![Item::Stun, Item::Blue, Item::Blue],
Item::Link => vec![Item::Stun, Item::Blue, Item::Green],
Item::Banish => vec![Item::Stun, Item::Red, Item::Blue],
Item::Break => vec![Item::Stun, Item::Red, Item::Green],
Item::BashPlus => vec![Item::Bash, Item::Bash, Item::Bash], Item::BashPlus => vec![Item::Bash, Item::Bash, Item::Bash],
Item::BashPlusPlus => vec![Item::BashPlus, Item::BashPlus, Item::BashPlus], Item::BashPlusPlus => vec![Item::BashPlus, Item::BashPlus, Item::BashPlus],
Item::Sleep => vec![Item::Stun, Item::Green, Item::Green],
Item::SleepPlus => vec![Item::Sleep, Item::Sleep, Item::Sleep], Item::SleepPlus => vec![Item::Sleep, Item::Sleep, Item::Sleep],
Item::SleepPlusPlus => vec![Item::SleepPlus, Item::SleepPlus, Item::SleepPlus], Item::SleepPlusPlus => vec![Item::SleepPlus, Item::SleepPlus, Item::SleepPlus],
Item::Ruin => vec![Item::Stun, Item::Blue, Item::Blue],
Item::RuinPlus => vec![Item::Ruin, Item::Ruin, Item::Ruin], Item::RuinPlus => vec![Item::Ruin, Item::Ruin, Item::Ruin],
Item::RuinPlusPlus => vec![Item::RuinPlus, Item::RuinPlus, Item::RuinPlus], Item::RuinPlusPlus => vec![Item::RuinPlus, Item::RuinPlus, Item::RuinPlus],
Item::Break => vec![Item::Stun, Item::Red, Item::Green],
Item::BreakPlus => vec![Item::Break, Item::Break, Item::Break], Item::BreakPlus => vec![Item::Break, Item::Break, Item::Break],
Item::BreakPlusPlus => vec![Item::BreakPlus, Item::BreakPlus, Item::BreakPlus], Item::BreakPlusPlus => vec![Item::BreakPlus, Item::BreakPlus, Item::BreakPlus],
Item::Absorb => vec![Item::Stun, Item::Green, Item::Blue], Item::LinkPlus => vec![Item::Link, Item::Link, Item::Link],
Item::AbsorbPlus => vec![Item::Absorb, Item::Absorb, Item::Absorb], Item::LinkPlusPlus => vec![Item::LinkPlusPlus, Item::LinkPlusPlus, Item::LinkPlusPlus],
Item::AbsorbPlusPlus => vec![Item::AbsorbPlus, Item::AbsorbPlus, Item::AbsorbPlus],
Item::Banish => vec![Item::Stun, Item::Red, Item::Blue],
Item::BanishPlus => vec![Item::Banish, Item::Banish, Item::Banish], Item::BanishPlus => vec![Item::Banish, Item::Banish, Item::Banish],
Item::BanishPlusPlus => vec![Item::BanishPlus, Item::BanishPlus, Item::BanishPlus], Item::BanishPlusPlus => vec![Item::BanishPlus, Item::BanishPlus, Item::BanishPlus],
Item::Strike => vec![Item::Attack, Item::Red, Item::Red], Item::Strike => vec![Item::Attack, Item::Red, Item::Red],
Item::Chaos => vec![Item::Attack, Item::Red, Item::Blue],
Item::Heal => vec![Item::Attack, Item::Green, Item::Green],
Item::Blast => vec![Item::Attack, Item::Blue, Item::Blue],
Item::Slay => vec![Item::Attack, Item::Red, Item::Green],
Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue],
Item::StrikePlus => vec![Item::Strike, Item::Strike, Item::Strike], Item::StrikePlus => vec![Item::Strike, Item::Strike, Item::Strike],
Item::StrikePlusPlus => vec![Item::StrikePlus, Item::StrikePlus, Item::StrikePlus], Item::StrikePlusPlus => vec![Item::StrikePlus, Item::StrikePlus, Item::StrikePlus],
Item::Heal => vec![Item::Attack, Item::Green, Item::Green],
Item::HealPlus => vec![Item::Heal, Item::Heal, Item::Heal], Item::HealPlus => vec![Item::Heal, Item::Heal, Item::Heal],
Item::HealPlusPlus => vec![Item::HealPlus, Item::HealPlus, Item::HealPlus], Item::HealPlusPlus => vec![Item::HealPlus, Item::HealPlus, Item::HealPlus],
Item::Blast => vec![Item::Attack, Item::Blue, Item::Blue],
Item::BlastPlus => vec![Item::Blast, Item::Blast, Item::Blast], Item::BlastPlus => vec![Item::Blast, Item::Blast, Item::Blast],
Item::BlastPlusPlus => vec![Item::BlastPlus, Item::BlastPlus, Item::BlastPlus], Item::BlastPlusPlus => vec![Item::BlastPlus, Item::BlastPlus, Item::BlastPlus],
Item::Slay => vec![Item::Attack, Item::Red, Item::Green],
Item::SlayPlus => vec![Item::Slay, Item::Slay, Item::Slay], Item::SlayPlus => vec![Item::Slay, Item::Slay, Item::Slay],
Item::SlayPlusPlus => vec![Item::SlayPlus, Item::SlayPlus, Item::SlayPlus], Item::SlayPlusPlus => vec![Item::SlayPlus, Item::SlayPlus, Item::SlayPlus],
Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue],
Item::SiphonPlus => vec![Item::Siphon, Item::Siphon, Item::Siphon], Item::SiphonPlus => vec![Item::Siphon, Item::Siphon, Item::Siphon],
Item::SiphonPlusPlus => vec![Item::SiphonPlus, Item::SiphonPlus, Item::SiphonPlus], Item::SiphonPlusPlus => vec![Item::SiphonPlus, Item::SiphonPlus, Item::SiphonPlus],
Item::Chaos => vec![Item::Attack, Item::Red, Item::Blue],
Item::ChaosPlus => vec![Item::Chaos, Item::Chaos, Item::Chaos], Item::ChaosPlus => vec![Item::Chaos, Item::Chaos, Item::Chaos],
Item::ChaosPlusPlus => vec![Item::ChaosPlus, Item::ChaosPlus, Item::ChaosPlus], Item::ChaosPlusPlus => vec![Item::ChaosPlus, Item::ChaosPlus, Item::ChaosPlus],
@ -998,22 +999,18 @@ impl Item {
Item::LifeGBPlusPlus => vec![Item::LifeGBPlus, Item::LifeGBPlus, Item::LifeGBPlus], Item::LifeGBPlusPlus => vec![Item::LifeGBPlus, Item::LifeGBPlus, Item::LifeGBPlus],
Item::LifeRBPlusPlus => vec![Item::LifeRBPlus, Item::LifeRBPlus, Item::LifeRBPlus], Item::LifeRBPlusPlus => vec![Item::LifeRBPlus, Item::LifeRBPlus, Item::LifeRBPlus],
Item::SpeedRR => vec![Item::Speed, Item::Red, Item::Red], Item::SpeedRR => vec![Item::Speed, Item::Red, Item::Red],
Item::SpeedGG => vec![Item::Speed, Item::Green, Item::Green], Item::SpeedGG => vec![Item::Speed, Item::Green, Item::Green],
Item::SpeedBB => vec![Item::Speed, Item::Blue, Item::Blue], Item::SpeedBB => vec![Item::Speed, Item::Blue, Item::Blue],
Item::SpeedRG => vec![Item::Speed, Item::Red, Item::Green], Item::SpeedRG => vec![Item::Speed, Item::Red, Item::Green],
Item::SpeedGB => vec![Item::Speed, Item::Green, Item::Blue], Item::SpeedGB => vec![Item::Speed, Item::Green, Item::Blue],
Item::SpeedRB => vec![Item::Speed, Item::Red, Item::Blue], Item::SpeedRB => vec![Item::Speed, Item::Red, Item::Blue],
Item::SpeedRRPlus => vec![Item::SpeedRR, Item::SpeedRR, Item::SpeedRR], Item::SpeedRRPlus => vec![Item::SpeedRR, Item::SpeedRR, Item::SpeedRR],
Item::SpeedGGPlus => vec![Item::SpeedGG, Item::SpeedGG, Item::SpeedGG], Item::SpeedGGPlus => vec![Item::SpeedGG, Item::SpeedGG, Item::SpeedGG],
Item::SpeedBBPlus => vec![Item::SpeedBB, Item::SpeedBB, Item::SpeedBB], Item::SpeedBBPlus => vec![Item::SpeedBB, Item::SpeedBB, Item::SpeedBB],
Item::SpeedRGPlus => vec![Item::SpeedRG, Item::SpeedRG, Item::SpeedRG], Item::SpeedRGPlus => vec![Item::SpeedRG, Item::SpeedRG, Item::SpeedRG],
Item::SpeedGBPlus => vec![Item::SpeedGB, Item::SpeedGB, Item::SpeedGB], Item::SpeedGBPlus => vec![Item::SpeedGB, Item::SpeedGB, Item::SpeedGB],
Item::SpeedRBPlus => vec![Item::SpeedRB, Item::SpeedRB, Item::SpeedRB], Item::SpeedRBPlus => vec![Item::SpeedRB, Item::SpeedRB, Item::SpeedRB],
Item::SpeedRRPlusPlus => vec![Item::SpeedRRPlus, Item::SpeedRRPlus, Item::SpeedRRPlus], Item::SpeedRRPlusPlus => vec![Item::SpeedRRPlus, Item::SpeedRRPlus, Item::SpeedRRPlus],
Item::SpeedGGPlusPlus => vec![Item::SpeedGGPlus, Item::SpeedGGPlus, Item::SpeedGGPlus], Item::SpeedGGPlusPlus => vec![Item::SpeedGGPlus, Item::SpeedGGPlus, Item::SpeedGGPlus],
Item::SpeedBBPlusPlus => vec![Item::SpeedBBPlus, Item::SpeedBBPlus, Item::SpeedBBPlus], Item::SpeedBBPlusPlus => vec![Item::SpeedBBPlus, Item::SpeedBBPlus, Item::SpeedBBPlus],

View File

@ -319,12 +319,6 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
_ => panic!("no absorb skill"), _ => panic!("no absorb skill"),
}; };
} }
// beware that link doesn't cause any damage
// because then applying it will proc this
if target.affected(Effect::Link) {
resolutions = link_hit(&source, &target, resolutions, game, event)
}
}, },
Event::Immunity { skill: _, immunity } => match immunity.contains(&Effect::Counter) { Event::Immunity { skill: _, immunity } => match immunity.contains(&Effect::Counter) {
@ -805,9 +799,9 @@ impl Skill {
// Buff base // Buff base
Skill::HybridBlast => 25, Skill::HybridBlast => 25,
Skill::HasteStrike => 30, Skill::HasteStrike => 30,
Skill::Link=> 140, Skill::Link=> 75,
Skill::LinkPlus => 200, Skill::LinkPlus => 100,
Skill::LinkPlusPlus => 300, Skill::LinkPlusPlus => 150,
Skill::Intercept=> 80, Skill::Intercept=> 80,
Skill::InterceptPlus => 110, Skill::InterceptPlus => 110,
Skill::InterceptPlusPlus => 150, Skill::InterceptPlusPlus => 150,
@ -932,9 +926,9 @@ impl Skill {
Skill::PurgePlus => vec![ConstructEffect {effect: Effect::Purge, duration: 2, meta: None, tick: None}], Skill::PurgePlus => vec![ConstructEffect {effect: Effect::Purge, duration: 2, meta: None, tick: None}],
Skill::PurgePlusPlus => vec![ConstructEffect {effect: Effect::Purge, duration: 3, meta: None, tick: None}], Skill::PurgePlusPlus => vec![ConstructEffect {effect: Effect::Purge, duration: 3, meta: None, tick: None}],
Skill::Link => vec![ConstructEffect {effect: Effect::Link, duration: 2, meta: None, tick: None}], Skill::Link => vec![ConstructEffect {effect: Effect::Stun, duration: 3, meta: None, tick: None}],
Skill::LinkPlus => vec![ConstructEffect {effect: Effect::Link, duration: 3, meta: None, tick: None}], Skill::LinkPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}],
Skill::LinkPlusPlus => vec![ConstructEffect {effect: Effect::Link, duration: 4, 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::Silence => vec![ConstructEffect {effect: Effect::Silence, duration: 2, meta: None, tick: None}],
Skill::SilencePlus => vec![ConstructEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}], Skill::SilencePlus => vec![ConstructEffect {effect: Effect::Silence, duration: 3, meta: None, tick: None}],
@ -1180,10 +1174,6 @@ impl Skill {
pub fn speed(&self) -> u64 { pub fn speed(&self) -> u64 {
match self { match self {
Skill::Strike=> Item::from(Skill::Strike).speed().pct(150),
Skill::StrikePlus => Skill::Strike.speed(),
Skill::StrikePlusPlus => Skill::Strike.speed(),
Skill::SiphonTick| Skill::SiphonTick|
Skill::SiphonTickPlus | Skill::SiphonTickPlus |
Skill::SiphonTickPlusPlus => Skill::Siphon.speed(), Skill::SiphonTickPlusPlus => Skill::Siphon.speed(),
@ -1674,40 +1664,23 @@ fn siphon_tick(source: &mut Construct, target: &mut Construct, mut results: Reso
} }
fn link(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn link(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let blue_amount = source.blue_power().pct(skill.multiplier()); let swap = match target.green_life().checked_sub(source.green_life()) {
results.push(Resolution::new(source, target).event(target.recharge(skill, 0, blue_amount))); Some(s) => s.pct(skill.multiplier()),
None => 0
let link = skill.effect()[0].set_meta(EffectMeta::LinkTarget(target.id));
results.push(Resolution::new(source, target).event(source.add_effect(skill, link)).stages(EventStages::PostOnly));
return results;
}
fn link_hit(source: &Construct, target: &Construct, mut results: Resolutions, game: &mut Game, event: Event) -> Resolutions {
match event {
Event::Damage { amount, skill, mitigation: _, colour } => {
let link = target.effects.iter().find(|e| e.effect == Effect::Link).unwrap();
if let Some(EffectMeta::LinkTarget(link_target_id)) = link.meta {
let mut link_target = game.construct_by_id(link_target_id).unwrap();
let res = match colour {
Colour::Red => link_target.deal_red_damage(skill, amount),
Colour::Blue => link_target.deal_blue_damage(skill, amount),
Colour::Green => link_target.deal_green_damage(skill, amount),
}; };
results.push(Resolution::new(target, link_target).event(Event::Skill { skill: Skill::Link})); target.deal_blue_damage(skill, swap)
res.into_iter().for_each(|e| results.push(Resolution::new(&source, &link_target) .into_iter()
.event(e).stages(EventStages::EndPost))); .for_each(|e| results.push(Resolution::new(source, target).event(e)));
} else {
panic!("not a link target {:?}", link); source.deal_green_damage(skill, swap)
} .into_iter()
.for_each(|e| results.push(Resolution::new(source, source).event(e).stages(EventStages::PostOnly)));
results.push(Resolution::new(source, source)
.event(source.add_effect(skill, skill.effect()[0])).stages(EventStages::PostOnly));
return results; return results;
},
_ => panic!("{:?} link hit not damage event", event),
}
} }
fn silence(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { fn silence(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {