diff --git a/server/src/cryp.rs b/server/src/cryp.rs index b7efba0e..ad883414 100644 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -870,7 +870,7 @@ mod tests { let mut cryp = Cryp::new() .named(&"redboi".to_string()); - cryp.learn_mut(Skill::Strike); + cryp.learn_mut(Skill::StrikeI); cryp.spec_add(Spec::GreenLifeI).unwrap(); cryp.spec_add(Spec::RedDamageI).unwrap(); cryp.spec_add(Spec::RedDamageI).unwrap(); diff --git a/server/src/game.rs b/server/src/game.rs index 5eaefbc5..f4ae1dc7 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -936,7 +936,7 @@ mod tests { .learn(Skill::TestBlock) .learn(Skill::TestParry) .learn(Skill::TestSiphon) - .learn(Skill::Amplify) + .learn(Skill::AmplifyI) .learn(Skill::Stun) .learn(Skill::Block); @@ -948,7 +948,7 @@ mod tests { .learn(Skill::TestBlock) .learn(Skill::TestParry) .learn(Skill::TestSiphon) - .learn(Skill::Amplify) + .learn(Skill::AmplifyI) .learn(Skill::Stun) .learn(Skill::Block); diff --git a/server/src/item.rs b/server/src/item.rs index f72f8dbd..5e5ffb81 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -46,17 +46,29 @@ pub enum Item { GBSpeedI, RBSpeedI, - Amplify, + AmplifyI, + AmplifyII, + AmplifyIII, Banish, - Blast, - Chaos, - Clutch, + BlastI, + BlastII, + BlastIII, + ChaosI, + ChaosII, + ChaosIII, + ClutchI, + ClutchII, + ClutchIII, Corrupt, - Curse, + CurseI, + CurseII, + CurseIII, Decay, Hostility, Haste, - Heal, + HealI, + HealII, + HealIII, Hex, Impurity, Invert, @@ -72,7 +84,7 @@ pub enum Item { Sleep, Snare, Strangle, - Strike, + StrikeI, StrikeII, StrikeIII, Siphon, @@ -183,17 +195,27 @@ impl Item { pub fn into_skill(&self) -> Option { match self { Item::Attack => Some(Skill::Attack), - Item::Amplify => Some(Skill::Amplify), + Item::AmplifyI => Some(Skill::AmplifyI), + Item::AmplifyII => Some(Skill::AmplifyII), + Item::AmplifyIII => Some(Skill::AmplifyIII), Item::Banish => Some(Skill::Banish), - Item::Blast => Some(Skill::Blast), + Item::BlastI => Some(Skill::BlastI), + Item::BlastII => Some(Skill::BlastII), + Item::BlastIII => Some(Skill::BlastIII), Item::Block => Some(Skill::Block), Item::Buff => Some(Skill::Buff), - Item::Chaos => Some(Skill::Chaos), - Item::Curse => Some(Skill::Curse), + Item::ChaosI => Some(Skill::ChaosI), + Item::ChaosII => Some(Skill::ChaosII), + Item::ChaosIII => Some(Skill::ChaosIII), + Item::CurseI => Some(Skill::CurseI), + Item::CurseII => Some(Skill::CurseII), + Item::CurseIII => Some(Skill::CurseIII), Item::Debuff => Some(Skill::Debuff), Item::Decay => Some(Skill::Decay), Item::Haste => Some(Skill::Haste), - Item::Heal => Some(Skill::Heal), + Item::HealI => Some(Skill::HealI), + Item::HealII => Some(Skill::HealII), + Item::HealIII => Some(Skill::HealIII), Item::Hex => Some(Skill::Hex), Item::Hostility => Some(Skill::Hostility), Item::Impurity => Some(Skill::Impurity), @@ -212,10 +234,12 @@ impl Item { Item::Snare => Some(Skill::Snare), Item::Strangle => Some(Skill::Strangle), Item::Stun => Some(Skill::Stun), - Item::Strike => Some(Skill::Strike), + Item::StrikeI => Some(Skill::StrikeI), Item::StrikeII => Some(Skill::StrikeII), Item::StrikeIII => Some(Skill::StrikeIII), - Item::Clutch => Some(Skill::Clutch), + Item::ClutchI => Some(Skill::ClutchI), + Item::ClutchII => Some(Skill::ClutchII), + Item::ClutchIII => Some(Skill::ClutchIII), Item::Taunt => Some(Skill::Taunt), Item::Throw => Some(Skill::Throw), Item::Corrupt => Some(Skill::Corrupt), @@ -319,7 +343,9 @@ impl Item { Item::RBSpeedI => format!("Increases CRYP SPEED and provides COLOUR BONUSES"), // Skills <- need to move effect mulltipliers into skills - Item::Amplify => format!("Increase red and blue power by {:?}%. Lasts {:?}T", + Item::AmplifyI | + Item::AmplifyII | + Item::AmplifyIII => format!("Increase red and blue power by {:?}%. Lasts {:?}T", self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect().first().unwrap().get_duration()), @@ -327,13 +353,19 @@ impl Item { Banished cryps are immune to all skills and effects.", self.into_skill().unwrap().effect().first().unwrap().get_duration()), - Item::Blast => format!("Deals blue damage {:?}% blue power.", self.into_skill().unwrap().multiplier()), + Item::BlastI | + Item::BlastII | + Item::BlastIII => format!("Deals blue damage {:?}% blue power.", self.into_skill().unwrap().multiplier()), - Item::Chaos => format!( + Item::ChaosI | + Item::ChaosII | + Item::ChaosIII => format!( "Hits twice for red and blue damage. Damage is random 0 to 30% + {:?}% red and blue power.", self.into_skill().unwrap().multiplier()), - Item::Clutch => format!("Cryp cannot be KO'd while active. + Item::ClutchI | + Item::ClutchII | + Item::ClutchIII => format!("Cryp cannot be KO'd while active. Additionally provides immunity to disables."), Item::Corrupt => format!( @@ -343,7 +375,9 @@ impl Item { self.into_skill().unwrap().effect().last().unwrap().get_duration()), - Item::Curse => format!( + Item::CurseI | + Item::CurseII | + Item::CurseIII => format!( "Increases red and blue damage taken by {:?}%. Lasts {:?}T", self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100, self.into_skill().unwrap().effect().first().unwrap().get_duration()), @@ -367,7 +401,9 @@ impl Item { "% Speed as Red Damage", self.into_skill().unwrap().effect().first().unwrap().get_duration()), - Item::Heal => format!("Heals for {:?}% green power.", self.into_skill().unwrap().multiplier()), + Item::HealI | + Item::HealII | + Item::HealIII => format!("Heals for {:?}% green power.", self.into_skill().unwrap().multiplier()), Item::Hex => format!("Blue based skill that applies Hex for {:?}T. \ Hexed targets cannot cast any skills.", @@ -440,12 +476,8 @@ impl Item { self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect().first().unwrap().get_duration()), - Item::Strike => format!( - "Hits at maximum speed dealing red damage {:?}% red power", - self.into_skill().unwrap().multiplier()), - Item::StrikeII => format!( - "Hits at maximum speed dealing red damage {:?}% red power", - self.into_skill().unwrap().multiplier()), + Item::StrikeI | + Item::StrikeII | Item::StrikeIII => format!( "Hits at maximum speed dealing red damage {:?}% red power", self.into_skill().unwrap().multiplier()), @@ -481,22 +513,28 @@ impl Item { match self { Item::Taunt => vec![Item::Buff, Item::Red, Item::Red], Item::Triage => vec![Item::Buff, Item::Green, Item::Green], - Item::Scatter => vec![Item::Buff, Item::Blue, Item::Blue], //To be impl + Item::Scatter => vec![Item::Buff, Item::Blue, Item::Blue], Item::Haste => vec![Item::Buff, Item::Red, Item::Green], Item::Impurity => vec![Item::Buff, Item::Green, Item::Blue], - Item::Amplify => vec![Item::Buff, Item::Red, Item::Blue], // Some flavour + 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::Snare => vec![Item::Debuff, Item::Red, Item::Red], Item::Purge => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour Item::Silence => vec![Item::Debuff, Item::Blue, Item::Blue], - Item::Curse => vec![Item::Debuff, Item::Red, Item::Green], // To be reworked + 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::Decay => vec![Item::Debuff, Item::Green, Item::Blue], Item::Invert => vec![Item::Debuff, Item::Red, Item::Blue], Item::Parry => vec![Item::Block, Item::Red, Item::Red], // Add red recharge Item::Purify => vec![Item::Block, Item::Green, Item::Green], Item::Corrupt => vec![Item::Block, Item::Blue, Item::Blue], - Item::Clutch => vec![Item::Block, Item::Red, Item::Green], + 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::Reflect => vec![Item::Block, Item::Green, Item::Blue], Item::Recharge => vec![Item::Block, Item::Red, Item::Blue], @@ -507,15 +545,20 @@ impl Item { Item::Hex => vec![Item::Stun, Item::Green, Item::Blue], Item::Banish => vec![Item::Stun, Item::Red, Item::Blue], - Item::Strike => vec![Item::Attack, Item::Red, Item::Red], - Item::StrikeII => vec![Item::Strike, Item::Strike, Item::Strike], - Item::StrikeIII => vec![Item::StrikeII, Item::StrikeII, Item::StrikeII], - - Item::Heal => vec![Item::Attack, Item::Green, Item::Green], - Item::Blast => vec![Item::Attack, Item::Blue, Item::Blue], + 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::Slay => vec![Item::Attack, Item::Red, Item::Green], Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue], - Item::Chaos => vec![Item::Attack, Item::Red, Item::Blue], + Item::ChaosI => vec![Item::Attack, Item::Red, Item::Blue], + Item::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI], + Item::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], @@ -546,20 +589,32 @@ impl Item { impl From for Item { fn from(skill: Skill) -> Item { match skill { - Skill::Amplify => Item::Amplify, + Skill::AmplifyI => Item::AmplifyI, + Skill::AmplifyII => Item::AmplifyII, + Skill::AmplifyIII => Item::AmplifyIII, Skill::Attack => Item::Attack, Skill::Banish => Item::Banish, - Skill::Blast => Item::Blast, + Skill::BlastI => Item::BlastI, + Skill::BlastII => Item::BlastII, + Skill::BlastIII => Item::BlastIII, Skill::Block => Item::Block, Skill::Buff => Item::Buff, - Skill::Chaos => Item::Chaos, - Skill::Curse => Item::Curse, - Skill::Clutch => Item::Clutch, + Skill::ChaosI => Item::ChaosI, + Skill::ChaosII => Item::ChaosII, + Skill::ChaosIII => Item::ChaosIII, + Skill::ClutchI => Item::ClutchI, + Skill::ClutchII => Item::ClutchII, + Skill::ClutchIII => Item::ClutchIII, + Skill::CurseI => Item::CurseI, + Skill::CurseII => Item::CurseII, + Skill::CurseIII => Item::CurseIII, Skill::Decay => Item::Decay, Skill::Debuff => Item::Debuff, Skill::Haste => Item::Haste, Skill::Hostility => Item::Hostility, - Skill::Heal => Item::Heal, + Skill::HealI => Item::HealI, + Skill::HealII => Item::HealII, + Skill::HealIII => Item::HealIII, Skill::Hex => Item::Hex, Skill::Impurity => Item::Impurity, Skill::Invert => Item::Invert, @@ -576,7 +631,7 @@ impl From for Item { Skill::Sleep => Item::Sleep, Skill::Snare => Item::Snare, Skill::Strangle => Item::Strangle, - Skill::Strike => Item::Strike, + Skill::StrikeI => Item::StrikeI, Skill::StrikeII => Item::StrikeII, Skill::StrikeIII => Item::StrikeIII, Skill::Stun => Item::Stun, @@ -641,64 +696,76 @@ pub struct Combo { pub fn get_combos() -> Vec { let mut combinations = vec![ - Combo { components: Item::Taunt.combo(), item: Item::Taunt }, - Combo { components: Item::Triage.combo(), item: Item::Triage }, - Combo { components: Item::Scatter.combo(), item: Item::Scatter }, //To be impl - Combo { components: Item::Haste.combo(), item: Item::Haste }, - Combo { components: Item::Impurity.combo(), item: Item::Impurity }, - Combo { components: Item::Amplify.combo(), item: Item::Amplify }, // Some flavour + Combo { components: Item::Taunt.combo(), item: Item::Taunt }, + Combo { components: Item::Triage.combo(), item: Item::Triage }, + Combo { components: Item::Scatter.combo(), item: Item::Scatter }, + Combo { components: Item::Haste.combo(), item: Item::Haste }, + Combo { components: Item::Impurity.combo(), item: Item::Impurity }, + Combo { components: Item::AmplifyI.combo(), item: Item::AmplifyI }, + Combo { components: Item::AmplifyII.combo(), item: Item::AmplifyII }, + Combo { components: Item::AmplifyIII.combo(), item: Item::AmplifyIII }, + + Combo { components: Item::Snare.combo(), item: Item::Snare }, + Combo { components: Item::Purge.combo(), item: Item::Purge }, // Needs flavour + Combo { components: Item::Silence.combo(), item: Item::Silence }, + Combo { components: Item::CurseI.combo(), item: Item::CurseI }, + Combo { components: Item::CurseII.combo(), item: Item::CurseII }, + Combo { components: Item::CurseIII.combo(), item: Item::CurseIII }, + Combo { components: Item::Decay.combo(), item: Item::Decay }, + Combo { components: Item::Invert.combo(), item: Item::Invert }, - Combo { components: Item::Snare.combo(), item: Item::Snare }, - Combo { components: Item::Purge.combo(), item: Item::Purge }, // Needs flavour - Combo { components: Item::Silence.combo(), item: Item::Silence }, - Combo { components: Item::Curse.combo(), item: Item::Curse }, // To be reworked - Combo { components: Item::Decay.combo(), item: Item::Decay }, - Combo { components: Item::Invert.combo(), item: Item::Invert }, + Combo { components: Item::Parry.combo(), item: Item::Parry }, // Add red recharge + Combo { components: Item::Purify.combo(), item: Item::Purify }, + Combo { components: Item::Corrupt.combo(), item: Item::Corrupt }, + Combo { components: Item::ClutchI.combo(), item: Item::ClutchI }, + Combo { components: Item::ClutchII.combo(), item: Item::ClutchII }, + Combo { components: Item::ClutchIII.combo(), item: Item::ClutchIII }, + Combo { components: Item::Reflect.combo(), item: Item::Reflect }, + Combo { components: Item::Recharge.combo(), item: Item::Recharge }, - Combo { components: Item::Parry.combo(), item: Item::Parry }, // Add red recharge - Combo { components: Item::Purify.combo(), item: Item::Purify }, - Combo { components: Item::Corrupt.combo(), item: Item::Corrupt }, - Combo { components: Item::Clutch.combo(), item: Item::Clutch }, - Combo { components: Item::Reflect.combo(), item: Item::Reflect }, - Combo { components: Item::Recharge.combo(), item: Item::Recharge }, + Combo { components: Item::Strangle.combo(), item: Item::Strangle }, + Combo { components: Item::Sleep.combo(), item: Item::Sleep }, + Combo { components: Item::Ruin.combo(), item: Item::Ruin }, + Combo { components: Item::Throw.combo(), item: Item::Throw }, + Combo { components: Item::Hex.combo(), item: Item::Hex }, + Combo { components: Item::Banish.combo(), item: Item::Banish }, - Combo { components: Item::Strangle.combo(), item: Item::Strangle }, - Combo { components: Item::Sleep.combo(), item: Item::Sleep }, - Combo { components: Item::Ruin.combo(), item: Item::Ruin }, - Combo { components: Item::Throw.combo(), item: Item::Throw }, - Combo { components: Item::Hex.combo(), item: Item::Hex }, - Combo { components: Item::Banish.combo(), item: Item::Banish }, + Combo { components: Item::StrikeI.combo(), item: Item::StrikeI }, + Combo { components: Item::StrikeII.combo(), item: Item::StrikeII }, + Combo { components: Item::StrikeIII.combo(), item: Item::StrikeIII }, - Combo { components: Item::Strike.combo(), item: Item::Strike }, - Combo { components: Item::StrikeII.combo(), item: Item::StrikeII }, - Combo { components: Item::StrikeIII.combo(), item: Item::StrikeIII }, + Combo { components: Item::HealI.combo(), item: Item::HealI }, + Combo { components: Item::HealII.combo(), item: Item::HealII }, + Combo { components: Item::HealIII.combo(), item: Item::HealIII }, + Combo { components: Item::BlastI.combo(), item: Item::BlastI }, + Combo { components: Item::BlastII.combo(), item: Item::BlastII }, + Combo { components: Item::BlastIII.combo(), item: Item::BlastIII }, + Combo { components: Item::Slay.combo(), item: Item::Slay }, + Combo { components: Item::Siphon.combo(), item: Item::Siphon }, + Combo { components: Item::ChaosI.combo(), item: Item::ChaosI }, + Combo { components: Item::ChaosII.combo(), item: Item::ChaosII }, + Combo { components: Item::ChaosIII.combo(), item: Item::ChaosIII }, - Combo { components: Item::Heal.combo(), item: Item::Heal }, - Combo { components: Item::Blast.combo(), item: Item::Blast }, - Combo { components: Item::Slay.combo(), item: Item::Slay }, - Combo { components: Item::Siphon.combo(), item: Item::Siphon }, - Combo { components: Item::Chaos.combo(), item: Item::Chaos }, - - Combo { components: Item::RedDamageI.combo(), item: Item::RedDamageI }, - Combo { components: Item::GreenDamageI.combo(), item: Item::GreenDamageI }, + Combo { components: Item::RedDamageI.combo(), item: Item::RedDamageI }, + Combo { components: Item::GreenDamageI.combo(), item: Item::GreenDamageI }, Combo { components: Item::BlueDamageI.combo(), item: Item::BlueDamageI }, - Combo { components: Item::GRDI.combo(), item: Item::GRDI }, - Combo { components: Item::GBDI.combo(), item: Item::GBDI }, - Combo { components: Item::RBDI.combo(), item: Item::RBDI }, + Combo { components: Item::GRDI.combo(), item: Item::GRDI }, + Combo { components: Item::GBDI.combo(), item: Item::GBDI }, + Combo { components: Item::RBDI.combo(), item: Item::RBDI }, - Combo { components: Item::RedLifeI.combo(), item: Item::RedLifeI }, - Combo { components: Item::GreenLifeI.combo(), item: Item::GreenLifeI }, - Combo { components: Item::BlueLifeI.combo(), item: Item::BlueLifeI }, - Combo { components: Item::GRLI.combo(), item: Item::GRLI }, - Combo { components: Item::GBLI.combo(), item: Item::GBLI }, - Combo { components: Item::RBLI.combo(), item: Item::RBLI }, + Combo { components: Item::RedLifeI.combo(), item: Item::RedLifeI }, + Combo { components: Item::GreenLifeI.combo(), item: Item::GreenLifeI }, + Combo { components: Item::BlueLifeI.combo(), item: Item::BlueLifeI }, + Combo { components: Item::GRLI.combo(), item: Item::GRLI }, + Combo { components: Item::GBLI.combo(), item: Item::GBLI }, + Combo { components: Item::RBLI.combo(), item: Item::RBLI }, - Combo { components: Item::RedSpeedI.combo(), item: Item::RedSpeedI }, + Combo { components: Item::RedSpeedI.combo(), item: Item::RedSpeedI }, Combo { components: Item::GreenSpeedI.combo(), item: Item::GreenSpeedI }, - Combo { components: Item::BlueSpeedI.combo(), item: Item::BlueSpeedI }, - Combo { components: Item::GRSpeedI.combo(), item: Item::GRSpeedI }, - Combo { components: Item::GBSpeedI.combo(), item: Item::GBSpeedI }, - Combo { components: Item::RBSpeedI.combo(), item: Item::RBSpeedI }, + Combo { components: Item::BlueSpeedI.combo(), item: Item::BlueSpeedI }, + Combo { components: Item::GRSpeedI.combo(), item: Item::GRSpeedI }, + Combo { components: Item::GBSpeedI.combo(), item: Item::GBSpeedI }, + Combo { components: Item::RBSpeedI.combo(), item: Item::RBSpeedI }, ]; @@ -759,7 +826,7 @@ mod tests { #[test] fn item_components_test() { - assert_eq!(Item::Strike.components(), vec![Item::Red, Item::Red, Item::Attack]); + assert_eq!(Item::StrikeI.components(), vec![Item::Red, Item::Red, Item::Attack]); assert_eq!(Item::StrikeII.components(), vec![ Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack, diff --git a/server/src/skill.rs b/server/src/skill.rs index 6d917f89..256d38e8 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -76,8 +76,8 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio match skill { Skill::Attack | Skill::Slay | - Skill::Chaos | - Skill::Strike => { + Skill::ChaosI | + Skill::StrikeI => { let amount = source.speed().pct(Skill::HasteStrike.multiplier()); target.deal_red_damage(Skill::HasteStrike, amount) .into_iter() @@ -89,8 +89,8 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio if source.affected(Effect::Impurity) { match skill { - Skill::Blast | - Skill::Chaos | + Skill::BlastI | + Skill::ChaosI | Skill::Siphon => { let amount = source.green_damage().pct(Skill::ImpureBlast.multiplier()); target.deal_blue_damage(Skill::ImpureBlast, amount) @@ -112,24 +112,38 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio // } resolutions = match skill { - Skill::Amplify => amplify(source, target, resolutions, skill), // increase magic damage + Skill::AmplifyI => amplify(source, target, resolutions, skill), + Skill::AmplifyII => amplify(source, target, resolutions, skill), + Skill::AmplifyIII => amplify(source, target, resolutions, skill), Skill::Attack => attack(source, target, resolutions, skill), Skill::Banish => banish(source, target, resolutions, skill), // TODO prevent all actions - Skill::Blast => blast(source, target, resolutions, skill), + Skill::BlastI => blast(source, target, resolutions, skill), + Skill::BlastII => blast(source, target, resolutions, skill), + Skill::BlastIII => blast(source, target, resolutions, skill), Skill::Block => block(source, target, resolutions, skill), Skill::Buff => buff(source, target, resolutions, skill), - Skill::Chaos => chaos(source, target, resolutions, skill), - Skill::Clutch => clutch(source, target, resolutions, skill), + Skill::ChaosI => chaos(source, target, resolutions, skill), + Skill::ChaosII => chaos(source, target, resolutions, skill), + Skill::ChaosIII => chaos(source, target, resolutions, skill), + Skill::ClutchI => clutch(source, target, resolutions, skill), + Skill::ClutchII => clutch(source, target, resolutions, skill), + Skill::ClutchIII => clutch(source, target, resolutions, skill), Skill::Corrupt => corrupt(source, target, resolutions, skill), Skill::CorruptionTick => corruption_tick(source, target, resolutions, skill), - Skill::Curse => curse(source, target, resolutions, skill), + Skill::CurseI => curse(source, target, resolutions, skill), + Skill::CurseII => curse(source, target, resolutions, skill), + Skill::CurseIII => curse(source, target, resolutions, skill), Skill::Debuff => debuff(source, target, resolutions, skill), // speed slow Skill::Decay => decay(source, target, resolutions, skill), // dot Skill::DecayTick => decay_tick(source, target, resolutions, skill), // dot Skill::Haste => haste(source, target, resolutions, skill), // speed slow Skill::HasteStrike => panic!("haste strike should not be caste"), - Skill::Heal => heal(source, target, resolutions, skill), - Skill::Hex => hex(source, target, resolutions, skill), + Skill::HealI => heal(source, target, resolutions, skill), + Skill::HealII => heal(source, target, resolutions, skill), + Skill::HealIII => heal(source, target, resolutions, skill), + Skill::HexI => hex(source, target, resolutions, skill), + Skill::HexII => hex(source, target, resolutions, skill), + Skill::HexIII => hex(source, target, resolutions, skill), Skill::Hostility => hostility(source, target, resolutions, skill), Skill::Impurity => impurity(source, target, resolutions, skill), Skill::ImpureBlast => panic!("impure blast should not be caste"), @@ -151,11 +165,9 @@ pub fn resolve(skill: Skill, source: &mut Cryp, target: &mut Cryp, mut resolutio Skill::Snare => snare(source, target, resolutions, skill), Skill::Strangle => strangle(source, target, resolutions, skill), Skill::StrangleTick => strangle_tick(source, target, resolutions, skill), - - Skill::Strike => strike(source, target, resolutions, skill), - Skill::StrikeII => strike(source, target, resolutions, skill), - Skill::StrikeIII => strike(source, target, resolutions, skill), - + Skill::StrikeI => strike(source, target, resolutions, skill), + Skill::StrikeII => strike(source, target, resolutions, skill), + Skill::StrikeIII => strike(source, target, resolutions, skill), Skill::Stun => stun(source, target, resolutions, skill), Skill::Taunt => taunt(source, target, resolutions, skill), Skill::Throw => throw(source, target, resolutions, skill), // no damage stun, adds vulnerable @@ -390,7 +402,9 @@ impl Effect { Effect::Banish => true, Effect::Clutch => [ Skill::Stun, - Skill::Hex, + Skill::HexI, + Skill::HexII, + Skill::HexIII, Skill::Silence, Skill::Ruin, Skill::Strangle, @@ -544,19 +558,31 @@ pub enum Skill { // Evade, // actively evade // Nightmare, // Sleep, - Amplify, + AmplifyI, + AmplifyII, + AmplifyIII, Banish, - Blast, - Chaos, - Clutch, + BlastI, + BlastII, + BlastIII, + ChaosI, + ChaosII, + ChaosIII, + ClutchI, + ClutchII, + ClutchIII, Corrupt, CorruptionTick, - Curse, + CurseI, + CurseII, + CurseIII, Decay, // dot DecayTick, // dot Haste, HasteStrike, - Heal, + HealI, + HealII, + HealIII, Hex, Hostility, ImpureBlast, @@ -579,7 +605,7 @@ pub enum Skill { Snare, Strangle, StrangleTick, - Strike, + StrikeI, StrikeII, StrikeIII, Taunt, @@ -603,39 +629,44 @@ impl Skill { // Attack Base Skill::Attack => 80, // Base - Skill::Blast => 110, // BB - Skill::Chaos => 40, // BR - Skill::Heal => 130, //GG + Skill::BlastI => 110, // BB + Skill::BlastII => 130, // BB + Skill::BlastIII => 150, // BB + Skill::ChaosI => 40, // BR + Skill::ChaosII => 50, // BR + Skill::ChaosIII => 60, // BR + Skill::HealI => 130, //GG + Skill::HealII => 160, //GG + Skill::HealIII => 200, //GG Skill::SiphonTick => 40, // GB Skill::Slay => 70, // RG - Skill::Strike => 90, //RR + Skill::StrikeI => 90, //RR Skill::StrikeII => 110, Skill::StrikeIII => 130, // Block Base Skill::CorruptionTick => 80, - Skill::Purify => 45, //Green dmg (heal) - Skill::Recharge => 85, //restore red and blue life (heal) - Skill::Reflect => 45, //restore blue life (heal) - Skill::Parry => 110, - Skill::Riposte => 70, + Skill::Riposte => 70, + Skill::Purify => 45, //Green dmg (heal) + Skill::Reflect => 45, //restore blue life (heal) + Skill::Recharge => 85, //restore red and blue life (heal) // Stun Base Skill::Sleep => 240, //Green dmg (heal) Skill::StrangleTick => 65, // Debuff Base + Skill::DecayTick => 25, Skill::Silence => 55, // Deals more per blue skill on target Skill::Snare => 40, // Deals more per red skill on target - Skill::DecayTick => 25, // Buff base Skill::ImpureBlast => 25, Skill::HasteStrike => 30, + Skill::Scatter => 140, Skill::Taunt => 80, Skill::TriageTick => 75, - Skill::Scatter => 140, _ => 100, } @@ -644,7 +675,9 @@ impl Skill { pub fn effect(&self) -> Vec { match self { // Modifiers - Skill::Amplify => vec![CrypEffect {effect: Effect::Amplify, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None}], + Skill::AmplifyI => vec![CrypEffect {effect: Effect::Amplify, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None}], + Skill::AmplifyII => vec![CrypEffect {effect: Effect::Amplify, duration: 3, meta: Some(EffectMeta::Multiplier(175)), tick: None}], + 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::Block => vec![CrypEffect {effect: Effect::Block, duration: 1, meta: Some(EffectMeta::Multiplier(50)), tick: None}], Skill::Buff => vec![CrypEffect {effect: Effect::Buff, duration: 2, meta: Some(EffectMeta::Multiplier(125)), tick: None }], @@ -652,13 +685,19 @@ impl Skill { Skill::Corrupt => vec![CrypEffect {effect: Effect::Corrupt, duration: 2, meta: None, tick: None}, CrypEffect {effect: Effect::Corruption, duration: 3, meta: None, tick: None}], - Skill::Clutch => vec![CrypEffect {effect: Effect::Clutch, duration: 1, meta: None, tick: None }], - Skill::Curse => vec![CrypEffect {effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None}], + Skill::ClutchI => vec![CrypEffect {effect: Effect::Clutch, duration: 1, meta: None, tick: None }], + Skill::ClutchII => vec![CrypEffect {effect: Effect::Clutch, duration: 2, meta: None, tick: None }], + Skill::ClutchIII => vec![CrypEffect {effect: Effect::Clutch, duration: 3, meta: None, tick: None }], + Skill::CurseI => vec![CrypEffect {effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None}], + Skill::CurseII => vec![CrypEffect {effect: Effect::Curse, duration: 2, meta: Some(EffectMeta::Multiplier(200)), tick: None}], + Skill::CurseIII => vec![CrypEffect {effect: Effect::Curse, duration: 3, meta: Some(EffectMeta::Multiplier(250)), tick: None}], Skill::Debuff => vec![CrypEffect {effect: Effect::Slow, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }], Skill::Decay => vec![CrypEffect {effect: Effect::Wither, duration: 3, meta: Some(EffectMeta::Multiplier(50)), tick: None }, CrypEffect {effect: Effect::Decay, duration: 3, meta: None, tick: None }], Skill::Haste => vec![CrypEffect {effect: Effect::Haste, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None }], - Skill::Hex => vec![CrypEffect {effect: Effect::Hex, duration: 2, meta: None, tick: None}], + Skill::HexI => vec![CrypEffect {effect: Effect::Hex, duration: 2, meta: None, tick: None}], + Skill::HexII => vec![CrypEffect {effect: Effect::Hex, duration: 3, meta: None, tick: None}], + Skill::HexIII => vec![CrypEffect {effect: Effect::Hex, duration: 4, meta: None, tick: None}], Skill::Hostility => vec![CrypEffect {effect: Effect::Hostility, duration: 2, meta: None, tick: None}, CrypEffect {effect: Effect::Hatred, duration: 5, meta: None, tick: None}], Skill::Impurity => vec![CrypEffect {effect: Effect::Impurity, duration: 3, meta: Some(EffectMeta::Multiplier(150)), tick: None }], @@ -696,7 +735,7 @@ impl Skill { Skill::Attack => None, Skill::Debuff => Some(1), Skill::Buff => None, - Skill::Strike => None, + Skill::StrikeI => None, Skill::StrikeII => None, Skill::StrikeIII => None, Skill::Block => None, // reduce damage @@ -704,13 +743,21 @@ impl Skill { Skill::Riposte => None, // used on parry Skill::Snare => Some(2), Skill::Stun => Some(2), - Skill::Heal => None, + Skill::HealI => None, + Skill::HealII => None, + Skill::HealIII => None, Skill::Triage => None, // hot Skill::TriageTick => None, Skill::Throw => Some(1), // no damage stun, adds vulnerable - Skill::Blast => None, - Skill::Chaos => None, - Skill::Amplify => Some(1), + Skill::BlastI => None, + Skill::BlastII => None, + Skill::BlastIII => None, + Skill::ChaosI => None, + Skill::ChaosII => None, + Skill::ChaosIII => None, + Skill::AmplifyI => Some(1), + Skill::AmplifyII => Some(1), + Skill::AmplifyIII => Some(1), Skill::Impurity => Some(3), Skill::ImpureBlast => None, Skill::Invert => Some(2), @@ -718,13 +765,16 @@ impl Skill { Skill::DecayTick => None, Skill::Siphon => None, Skill::SiphonTick => None, - Skill::Curse => Some(1), + Skill::CurseI => Some(1), + Skill::CurseII => Some(1), + Skill::CurseIII => Some(1), Skill::Scatter => Some(2), Skill::Silence => Some(2), Skill::Purify => None, Skill::Purge => None, Skill::Banish => Some(1), - Skill::Hex => Some(1), + Skill::HexI => Some(1), + Skill::HexII => Some(1), Skill::Haste => Some(2), Skill::HasteStrike => None, // Used in haste @@ -736,7 +786,9 @@ impl Skill { Skill::Strangle => Some(2), Skill::StrangleTick => None, - Skill::Clutch => Some(2), + Skill::ClutchI => Some(1), + Skill::ClutchII => Some(2), + Skill::ClutchIII => Some(3), Skill::Taunt => Some(2), Skill::Injure => Some(2), @@ -790,9 +842,9 @@ impl Skill { Skill::TestParry => 10, Skill::TestSiphon => 10, - Skill::Strike => u8::max_value(), - Skill::StrikeII => Skill::Strike.speed(), - Skill::StrikeIII => Skill::Strike.speed(), + Skill::StrikeI => u8::max_value(), + Skill::StrikeII => Skill::StrikeI.speed(), + Skill::StrikeIII => Skill::StrikeI.speed(), Skill::SiphonTick => Skill::Siphon.speed(), Skill::DecayTick => Skill::Decay.speed(), @@ -813,13 +865,15 @@ impl Skill { pub fn self_targeting(&self) -> bool { match self { - Skill::Block => true, - Skill::Parry => true, - Skill::Clutch => true, - Skill::Corrupt => true, - - Skill::TestBlock => true, + Skill::Block | + Skill::Parry | + Skill::ClutchI | + Skill::ClutchII | + Skill::ClutchIII | + Skill::Corrupt | + Skill::TestBlock | Skill::TestParry => true, + _ => false, } } @@ -828,17 +882,23 @@ impl Skill { let mut rng = thread_rng(); match self { - Skill::Heal | + Skill::HealI | + Skill::HealII | + Skill::HealIII | Skill::Triage | Skill::Purify | Skill::Parry | - Skill::Clutch | + Skill::ClutchI | + Skill::ClutchII | + Skill::ClutchIII | Skill::Scatter | Skill::Recharge | Skill::Reflect | Skill::Haste | Skill::Invert | - Skill::Amplify | + Skill::AmplifyI | + Skill::AmplifyII | + Skill::AmplifyIII | Skill::Hostility | Skill::Corrupt | Skill::Block => true, @@ -1360,15 +1420,15 @@ mod tests { fn heal_test() { let mut x = Cryp::new() .named(&"muji".to_string()) - .learn(Skill::Heal); + .learn(Skill::HealI); let mut y = Cryp::new() .named(&"camel".to_string()) - .learn(Skill::Heal); + .learn(Skill::HealI); x.deal_red_damage(Skill::Attack, 5); - heal(&mut y, &mut x, vec![], Skill::Heal); + heal(&mut y, &mut x, vec![], Skill::HealI); } #[test] @@ -1422,7 +1482,7 @@ mod tests { x.red_damage.force(10000000000000); // multiplication of int max will cause overflow - clutch(&mut y.clone(), &mut y, vec![], Skill::Clutch); + clutch(&mut y.clone(), &mut y, vec![], Skill::ClutchI); assert!(y.affected(Effect::Clutch)); let mut results = hex(&mut x, &mut y, vec![], Skill::Hex); @@ -1451,7 +1511,7 @@ mod tests { .named(&"camel".to_string()); resolve(Skill::Injure, &mut x, &mut y, vec![]); - assert!(y.immune(Skill::Heal).is_some()); + assert!(y.immune(Skill::HealI).is_some()); // resolutions = heal(&mut y.clone(), &mut y, resolutions); } @@ -1596,7 +1656,7 @@ mod tests { y.blue_life.force(50); y.deal_red_damage(Skill::Attack, 5); - y.deal_blue_damage(Skill::Blast, 5); + y.deal_blue_damage(Skill::BlastI, 5); let mut results = recharge(&mut x, &mut y, vec![], Skill::Recharge); @@ -1628,7 +1688,7 @@ mod tests { x.blue_damage.force(50); - amplify(&mut x.clone(), &mut x, vec![], Skill::Amplify); + amplify(&mut x.clone(), &mut x, vec![], Skill::AmplifyI); assert!(x.effects.iter().any(|e| e.effect == Effect::Amplify)); assert_eq!(x.blue_damage(), 75); } diff --git a/server/src/vbox.rs b/server/src/vbox.rs index b3e61de6..3446ef9b 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -200,7 +200,7 @@ mod tests { let mut vbox = Vbox::new(); vbox.bound = vec![Item::Attack, Item::Green, Item::Green]; vbox.combine(vec![1,2,0]).unwrap(); - assert_eq!(vbox.bound[0], Item::Heal); + assert_eq!(vbox.bound[0], Item::HealI); } #[test] @@ -218,14 +218,14 @@ mod tests { #[test] fn reclaim_test() { let mut vbox = Vbox::new(); - vbox.bound = vec![Item::Strike]; + vbox.bound = vec![Item::StrikeI]; vbox.reclaim(0).unwrap(); assert_eq!(vbox.bits, 22); } #[test] fn colours_count_test() { - let strike = Item::Strike; + let strike = Item::StrikeI; let mut count = Colours::new(); strike.colours(&mut count);