Merge branch 'master' of ssh://mnml.gg:40022/~/mnml
This commit is contained in:
commit
cbe83b3a1e
@ -891,7 +891,7 @@ mod tests {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn construct_player_modifiers_test() {
|
fn construct_player_modifiers_test() {
|
||||||
let mut construct = Construct::new()
|
let mut construct = Construct::new()
|
||||||
.named(&"player player".to_string());
|
.named(&"player player".to_string());
|
||||||
@ -899,6 +899,30 @@ mod tests {
|
|||||||
construct.spec_add(Spec::PowerRRI).unwrap();
|
construct.spec_add(Spec::PowerRRI).unwrap();
|
||||||
construct.spec_add(Spec::PowerGGI).unwrap();
|
construct.spec_add(Spec::PowerGGI).unwrap();
|
||||||
construct.spec_add(Spec::PowerBBI).unwrap();
|
construct.spec_add(Spec::PowerBBI).unwrap();
|
||||||
|
construct.learn_mut(Skill::StrikeIII); // 18 reds (24 total)
|
||||||
|
|
||||||
|
let player_colours = Colours {
|
||||||
|
red: 5,
|
||||||
|
green: 15,
|
||||||
|
blue: 25,
|
||||||
|
};
|
||||||
|
|
||||||
|
construct.apply_modifiers(&player_colours);
|
||||||
|
|
||||||
|
assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(80));
|
||||||
|
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(120));
|
||||||
|
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(160));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn construct_player_modifiers_base_test() {
|
||||||
|
let mut construct = Construct::new()
|
||||||
|
.named(&"player player".to_string());
|
||||||
|
|
||||||
|
construct.spec_add(Spec::Power).unwrap();
|
||||||
|
construct.spec_add(Spec::Life).unwrap();
|
||||||
|
|
||||||
let player_colours = Colours {
|
let player_colours = Colours {
|
||||||
red: 5,
|
red: 5,
|
||||||
@ -909,9 +933,35 @@ mod tests {
|
|||||||
construct.apply_modifiers(&player_colours);
|
construct.apply_modifiers(&player_colours);
|
||||||
|
|
||||||
assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(20));
|
assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(20));
|
||||||
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(40));
|
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(20));
|
||||||
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(80));
|
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(20));
|
||||||
|
assert!(construct.green_life.value == construct.green_life.base + 150);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn construct_player_modifiers_spec_bonus_test() {
|
||||||
|
let mut construct = Construct::new()
|
||||||
|
.named(&"player player".to_string());
|
||||||
|
|
||||||
|
construct.spec_add(Spec::PowerRRI).unwrap();
|
||||||
|
construct.spec_add(Spec::PowerGGI).unwrap();
|
||||||
|
construct.spec_add(Spec::PowerBBI).unwrap();
|
||||||
|
|
||||||
|
let player_colours = Colours {
|
||||||
|
red: 5,
|
||||||
|
green: 0,
|
||||||
|
blue: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
construct.apply_modifiers(&player_colours);
|
||||||
|
|
||||||
|
assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(60));
|
||||||
|
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(40));
|
||||||
|
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(40));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -690,78 +690,78 @@ impl Item {
|
|||||||
Item::ParryIII => vec![Item::ParryII, Item::ParryII, Item::ParryII], // Add red recharge
|
Item::ParryIII => vec![Item::ParryII, Item::ParryII, Item::ParryII], // Add red recharge
|
||||||
Item::PurifyI => vec![Item::Block, Item::Green, Item::Green],
|
Item::PurifyI => vec![Item::Block, Item::Green, Item::Green],
|
||||||
Item::PurifyII => vec![Item::PurifyI, Item::PurifyI, Item::PurifyI],
|
Item::PurifyII => vec![Item::PurifyI, Item::PurifyI, Item::PurifyI],
|
||||||
Item::PurifyIII => vec![Item::PurifyII, Item::PurifyII, Item::PurifyII],
|
Item::PurifyIII => vec![Item::PurifyII, Item::PurifyII, Item::PurifyII],
|
||||||
Item::CorruptI => vec![Item::Block, Item::Blue, Item::Blue],
|
Item::CorruptI => vec![Item::Block, Item::Blue, Item::Blue],
|
||||||
Item::CorruptII => vec![Item::CorruptI, Item::CorruptI, Item::CorruptI],
|
Item::CorruptII => vec![Item::CorruptI, Item::CorruptI, Item::CorruptI],
|
||||||
Item::CorruptIII => vec![Item::CorruptII, Item::CorruptII, Item::CorruptII],
|
Item::CorruptIII => vec![Item::CorruptII, Item::CorruptII, Item::CorruptII],
|
||||||
Item::ClutchI => 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::ClutchII => vec![Item::ClutchI, Item::ClutchI, Item::ClutchI],
|
||||||
Item::ClutchIII => vec![Item::ClutchII, Item::ClutchII, Item::ClutchII],
|
Item::ClutchIII => vec![Item::ClutchII, Item::ClutchII, Item::ClutchII],
|
||||||
Item::ReflectI => vec![Item::Block, Item::Green, Item::Blue],
|
Item::ReflectI => vec![Item::Block, Item::Green, Item::Blue],
|
||||||
Item::ReflectII => vec![Item::ReflectI, Item::ReflectI, Item::ReflectI],
|
Item::ReflectII => vec![Item::ReflectI, Item::ReflectI, Item::ReflectI],
|
||||||
Item::ReflectIII => vec![Item::ReflectII, Item::ReflectII, Item::ReflectII],
|
Item::ReflectIII => vec![Item::ReflectII, Item::ReflectII, Item::ReflectII],
|
||||||
Item::RechargeI => vec![Item::Block, Item::Red, Item::Blue],
|
Item::RechargeI => vec![Item::Block, Item::Red, Item::Blue],
|
||||||
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
|
Item::RechargeII => vec![Item::RechargeI, Item::RechargeI, Item::RechargeI],
|
||||||
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
|
Item::RechargeIII => vec![Item::RechargeII, Item::RechargeII, Item::RechargeII],
|
||||||
|
|
||||||
Item::StrangleI => vec![Item::Stun, Item::Red, Item::Red],
|
Item::StrangleI => vec![Item::Stun, Item::Red, Item::Red],
|
||||||
Item::StrangleII => vec![Item::StrangleI, Item::StrangleI, Item::StrangleI],
|
Item::StrangleII => vec![Item::StrangleI, Item::StrangleI, Item::StrangleI],
|
||||||
Item::StrangleIII => vec![Item::StrangleII, Item::StrangleII, Item::StrangleII],
|
Item::StrangleIII => vec![Item::StrangleII, Item::StrangleII, Item::StrangleII],
|
||||||
Item::SleepI => vec![Item::Stun, Item::Green, Item::Green],
|
Item::SleepI => vec![Item::Stun, Item::Green, Item::Green],
|
||||||
Item::SleepII => vec![Item::SleepI, Item::SleepI, Item::SleepI],
|
Item::SleepII => vec![Item::SleepI, Item::SleepI, Item::SleepI],
|
||||||
Item::SleepIII => vec![Item::SleepII, Item::SleepII, Item::SleepII],
|
Item::SleepIII => vec![Item::SleepII, Item::SleepII, Item::SleepII],
|
||||||
Item::RuinI => vec![Item::Stun, Item::Blue, Item::Blue],
|
Item::RuinI => vec![Item::Stun, Item::Blue, Item::Blue],
|
||||||
Item::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI],
|
Item::RuinII => vec![Item::RuinI, Item::RuinI, Item::RuinI],
|
||||||
Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII],
|
Item::RuinIII => vec![Item::RuinII, Item::RuinII, Item::RuinII],
|
||||||
Item::ThrowI => vec![Item::Stun, Item::Red, Item::Green],
|
Item::ThrowI => vec![Item::Stun, Item::Red, Item::Green],
|
||||||
Item::ThrowII => vec![Item::ThrowI, Item::ThrowI, Item::ThrowI],
|
Item::ThrowII => vec![Item::ThrowI, Item::ThrowI, Item::ThrowI],
|
||||||
Item::ThrowIII => vec![Item::ThrowII, Item::ThrowII, Item::ThrowII],
|
Item::ThrowIII => vec![Item::ThrowII, Item::ThrowII, Item::ThrowII],
|
||||||
Item::HexI => vec![Item::Stun, Item::Green, Item::Blue],
|
Item::HexI => vec![Item::Stun, Item::Green, Item::Blue],
|
||||||
Item::HexII => vec![Item::HexI, Item::HexI, Item::HexI],
|
Item::HexII => vec![Item::HexI, Item::HexI, Item::HexI],
|
||||||
Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII],
|
Item::HexIII => vec![Item::HexII, Item::HexII, Item::HexII],
|
||||||
Item::BanishI => vec![Item::Stun, Item::Red, Item::Blue],
|
Item::BanishI => vec![Item::Stun, Item::Red, Item::Blue],
|
||||||
Item::BanishII => vec![Item::BanishI, Item::BanishI, Item::BanishI],
|
Item::BanishII => vec![Item::BanishI, Item::BanishI, Item::BanishI],
|
||||||
Item::BanishIII => vec![Item::BanishII, Item::BanishII, Item::BanishII],
|
Item::BanishIII => vec![Item::BanishII, Item::BanishII, Item::BanishII],
|
||||||
|
|
||||||
Item::StrikeI => vec![Item::Attack, Item::Red, Item::Red],
|
Item::StrikeI => vec![Item::Attack, Item::Red, Item::Red],
|
||||||
Item::StrikeII => vec![Item::StrikeI, Item::StrikeI, Item::StrikeI],
|
Item::StrikeII => vec![Item::StrikeI, Item::StrikeI, Item::StrikeI],
|
||||||
Item::StrikeIII => vec![Item::StrikeII, Item::StrikeII, Item::StrikeII],
|
Item::StrikeIII => vec![Item::StrikeII, Item::StrikeII, Item::StrikeII],
|
||||||
Item::HealI => vec![Item::Attack, Item::Green, Item::Green],
|
Item::HealI => vec![Item::Attack, Item::Green, Item::Green],
|
||||||
Item::HealII => vec![Item::HealI, Item::HealI, Item::HealI],
|
Item::HealII => vec![Item::HealI, Item::HealI, Item::HealI],
|
||||||
Item::HealIII => vec![Item::HealII, Item::HealII, Item::HealII],
|
Item::HealIII => vec![Item::HealII, Item::HealII, Item::HealII],
|
||||||
Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue],
|
Item::BlastI => vec![Item::Attack, Item::Blue, Item::Blue],
|
||||||
Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI],
|
Item::BlastII => vec![Item::BlastI, Item::BlastI, Item::BlastI],
|
||||||
Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII],
|
Item::BlastIII => vec![Item::BlastII, Item::BlastII, Item::BlastII],
|
||||||
Item::SlayI => vec![Item::Attack, Item::Red, Item::Green],
|
Item::SlayI => vec![Item::Attack, Item::Red, Item::Green],
|
||||||
Item::SlayII => vec![Item::SlayI, Item::SlayI, Item::SlayI],
|
Item::SlayII => vec![Item::SlayI, Item::SlayI, Item::SlayI],
|
||||||
Item::SlayIII => vec![Item::SlayII, Item::SlayII, Item::SlayII],
|
Item::SlayIII => vec![Item::SlayII, Item::SlayII, Item::SlayII],
|
||||||
Item::SiphonI => vec![Item::Attack, Item::Green, Item::Blue],
|
Item::SiphonI => vec![Item::Attack, Item::Green, Item::Blue],
|
||||||
Item::SiphonII => vec![Item::SiphonI, Item::SiphonI, Item::SiphonI],
|
Item::SiphonII => vec![Item::SiphonI, Item::SiphonI, Item::SiphonI],
|
||||||
Item::SiphonIII => vec![Item::SiphonII, Item::SiphonII, Item::SiphonII],
|
Item::SiphonIII => vec![Item::SiphonII, Item::SiphonII, Item::SiphonII],
|
||||||
Item::ChaosI => 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::ChaosII => vec![Item::ChaosI, Item::ChaosI, Item::ChaosI],
|
||||||
Item::ChaosIII => vec![Item::ChaosII, Item::ChaosII, Item::ChaosII],
|
Item::ChaosIII => vec![Item::ChaosII, Item::ChaosII, Item::ChaosII],
|
||||||
|
|
||||||
Item::PowerRRI => vec![Item::Power, Item::Red, Item::Red],
|
Item::PowerRRI => vec![Item::Power, Item::Red, Item::Red],
|
||||||
Item::PowerGGI => vec![Item::Power, Item::Green, Item::Green],
|
Item::PowerGGI => vec![Item::Power, Item::Green, Item::Green],
|
||||||
Item::PowerBBI => vec![Item::Power, Item::Blue, Item::Blue],
|
Item::PowerBBI => vec![Item::Power, Item::Blue, Item::Blue],
|
||||||
Item::PowerRGI => vec![Item::Power, Item::Red, Item::Green],
|
Item::PowerRGI => vec![Item::Power, Item::Red, Item::Green],
|
||||||
Item::PowerGBI => vec![Item::Power, Item::Green, Item::Blue],
|
Item::PowerGBI => vec![Item::Power, Item::Green, Item::Blue],
|
||||||
Item::PowerRBI => vec![Item::Power, Item::Red, Item::Blue],
|
Item::PowerRBI => vec![Item::Power, Item::Red, Item::Blue],
|
||||||
|
|
||||||
Item::LifeRRI => vec![Item::Life, Item::Red, Item::Red],
|
Item::LifeRRI => vec![Item::Life, Item::Red, Item::Red],
|
||||||
Item::LifeGGI => vec![Item::Life, Item::Green, Item::Green],
|
Item::LifeGGI => vec![Item::Life, Item::Green, Item::Green],
|
||||||
Item::LifeBBI => vec![Item::Life, Item::Blue, Item::Blue],
|
Item::LifeBBI => vec![Item::Life, Item::Blue, Item::Blue],
|
||||||
Item::LifeRGI => vec![Item::Life, Item::Red, Item::Green],
|
Item::LifeRGI => vec![Item::Life, Item::Red, Item::Green],
|
||||||
Item::LifeGBI => vec![Item::Life, Item::Green, Item::Blue],
|
Item::LifeGBI => vec![Item::Life, Item::Green, Item::Blue],
|
||||||
Item::LifeRBI => vec![Item::Life, Item::Red, Item::Blue],
|
Item::LifeRBI => vec![Item::Life, Item::Red, Item::Blue],
|
||||||
|
|
||||||
Item::SpeedRRI => vec![Item::Speed, Item::Red, Item::Red],
|
Item::SpeedRRI => vec![Item::Speed, Item::Red, Item::Red],
|
||||||
Item::SpeedGGI => vec![Item::Speed, Item::Green, Item::Green],
|
Item::SpeedGGI => vec![Item::Speed, Item::Green, Item::Green],
|
||||||
Item::SpeedBBI => vec![Item::Speed, Item::Blue, Item::Blue],
|
Item::SpeedBBI => vec![Item::Speed, Item::Blue, Item::Blue],
|
||||||
Item::SpeedRGI => vec![Item::Speed, Item::Red, Item::Green],
|
Item::SpeedRGI => vec![Item::Speed, Item::Red, Item::Green],
|
||||||
Item::SpeedGBI => vec![Item::Speed, Item::Green, Item::Blue],
|
Item::SpeedGBI => vec![Item::Speed, Item::Green, Item::Blue],
|
||||||
Item::SpeedRBI => vec![Item::Speed, Item::Red, Item::Blue],
|
Item::SpeedRBI => vec![Item::Speed, Item::Red, Item::Blue],
|
||||||
|
|
||||||
_ => vec![*self],
|
_ => vec![*self],
|
||||||
}
|
}
|
||||||
@ -786,6 +786,9 @@ impl From<Skill> for Item {
|
|||||||
Skill::ChaosI => Item::ChaosI,
|
Skill::ChaosI => Item::ChaosI,
|
||||||
Skill::ChaosII => Item::ChaosII,
|
Skill::ChaosII => Item::ChaosII,
|
||||||
Skill::ChaosIII => Item::ChaosIII,
|
Skill::ChaosIII => Item::ChaosIII,
|
||||||
|
Skill::CorruptI => Item::CorruptI,
|
||||||
|
Skill::CorruptII => Item::CorruptII,
|
||||||
|
Skill::CorruptIII => Item::CorruptIII,
|
||||||
Skill::ClutchI => Item::ClutchI,
|
Skill::ClutchI => Item::ClutchI,
|
||||||
Skill::ClutchII => Item::ClutchII,
|
Skill::ClutchII => Item::ClutchII,
|
||||||
Skill::ClutchIII => Item::ClutchIII,
|
Skill::ClutchIII => Item::ClutchIII,
|
||||||
@ -866,16 +869,34 @@ impl From<Skill> for Item {
|
|||||||
Skill::TriageI => Item::TriageI,
|
Skill::TriageI => Item::TriageI,
|
||||||
Skill::TriageII => Item::TriageII,
|
Skill::TriageII => Item::TriageII,
|
||||||
Skill::TriageIII => Item::TriageIII,
|
Skill::TriageIII => Item::TriageIII,
|
||||||
Skill::CorruptI => Item::CorruptI,
|
|
||||||
Skill::CorruptII => Item::CorruptII,
|
|
||||||
Skill::CorruptIII => Item::CorruptIII,
|
|
||||||
|
|
||||||
Skill::Attack => Item::Attack,
|
// Convert subskills into parent skills
|
||||||
Skill::Stun => Item::Stun,
|
Skill::CorruptionI => Item::CorruptI,
|
||||||
Skill::Block => Item::Block,
|
Skill::CorruptionII => Item::CorruptII,
|
||||||
Skill::ParryI => Item::ParryI,
|
Skill::CorruptionIII => Item::CorruptIII,
|
||||||
Skill::SiphonI => Item::SiphonI,
|
Skill::CorruptionTickI => Item::CorruptI,
|
||||||
_ => panic!("{:?} not implemented with item conversion", skill),
|
Skill::CorruptionTickII => Item::CorruptII,
|
||||||
|
Skill::CorruptionTickIII => Item::CorruptII,
|
||||||
|
Skill::DecayTickI => Item::DecayI,
|
||||||
|
Skill::DecayTickII => Item::DecayII,
|
||||||
|
Skill::DecayTickIII => Item::DecayIII,
|
||||||
|
Skill::HatredI => Item::HostilityI,
|
||||||
|
Skill::HatredII => Item::HostilityII,
|
||||||
|
Skill::HatredIII => Item::HostilityIII,
|
||||||
|
Skill::HasteStrike => Item::HasteI,
|
||||||
|
Skill::ImpureBlast => Item::ImpurityI,
|
||||||
|
Skill::RiposteI => Item::ParryI,
|
||||||
|
Skill::RiposteII => Item::ParryII,
|
||||||
|
Skill::RiposteIII => Item::ParryIII,
|
||||||
|
Skill::SiphonTickI => Item::SiphonI,
|
||||||
|
Skill::SiphonTickII => Item::SiphonII,
|
||||||
|
Skill::SiphonTickIII => Item::SiphonIII,
|
||||||
|
Skill::StrangleTickI => Item::StrangleI,
|
||||||
|
Skill::StrangleTickII => Item::StrangleII,
|
||||||
|
Skill::StrangleTickIII => Item::StrangleIII,
|
||||||
|
Skill::TriageTickI => Item::TriageI,
|
||||||
|
Skill::TriageTickII => Item::TriageII,
|
||||||
|
Skill::TriageTickIII => Item::TriageIII,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -275,7 +275,7 @@ pub fn resolve(skill: Skill, source: &mut Construct, target: &mut Construct, mut
|
|||||||
|
|
||||||
|
|
||||||
// Not used
|
// Not used
|
||||||
Skill::Injure => injure(source, target, resolutions, skill),
|
// Skill::Injure => injure(source, target, resolutions, skill),
|
||||||
};
|
};
|
||||||
|
|
||||||
return resolutions;
|
return resolutions;
|
||||||
@ -749,7 +749,7 @@ pub enum Skill {
|
|||||||
ImpurityI,
|
ImpurityI,
|
||||||
ImpurityII,
|
ImpurityII,
|
||||||
ImpurityIII,
|
ImpurityIII,
|
||||||
Injure,
|
// Injure,
|
||||||
|
|
||||||
InvertI,
|
InvertI,
|
||||||
InvertII,
|
InvertII,
|
||||||
@ -1077,7 +1077,7 @@ impl Skill {
|
|||||||
Skill::TriageIII => vec![ConstructEffect {effect: Effect::Triage, duration: 4,
|
Skill::TriageIII => vec![ConstructEffect {effect: Effect::Triage, duration: 4,
|
||||||
meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}],
|
meta: Some(EffectMeta::Skill(Skill::TriageTickIII)), tick: None}],
|
||||||
//Unused
|
//Unused
|
||||||
Skill::Injure => vec![ConstructEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }],
|
// Skill::Injure => vec![ConstructEffect {effect: Effect::Injured, duration: 2, meta: None, tick: None }],
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
panic!("{:?} no skill effect", self);
|
panic!("{:?} no skill effect", self);
|
||||||
@ -1204,7 +1204,7 @@ impl Skill {
|
|||||||
Skill::TauntI => Some(2),
|
Skill::TauntI => Some(2),
|
||||||
Skill::TauntII => Some(2),
|
Skill::TauntII => Some(2),
|
||||||
Skill::TauntIII => Some(2),
|
Skill::TauntIII => Some(2),
|
||||||
Skill::Injure => Some(2),
|
// Skill::Injure => Some(2),
|
||||||
|
|
||||||
Skill::CorruptI =>Some(1),
|
Skill::CorruptI =>Some(1),
|
||||||
Skill::CorruptII =>Some(1),
|
Skill::CorruptII =>Some(1),
|
||||||
@ -2004,7 +2004,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
/* #[test]
|
||||||
fn injure_test() {
|
fn injure_test() {
|
||||||
let mut x = Construct::new()
|
let mut x = Construct::new()
|
||||||
.named(&"muji".to_string());
|
.named(&"muji".to_string());
|
||||||
@ -2016,7 +2016,7 @@ mod tests {
|
|||||||
assert!(y.immune(Skill::HealI).is_some());
|
assert!(y.immune(Skill::HealI).is_some());
|
||||||
// resolutions = heal(&mut y.clone(), &mut y, resolutions);
|
// resolutions = heal(&mut y.clone(), &mut y, resolutions);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
#[test]
|
#[test]
|
||||||
fn invert_test() {
|
fn invert_test() {
|
||||||
let mut x = Construct::new()
|
let mut x = Construct::new()
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use construct::{Stat, Colours};
|
use construct::{Stat, Colours};
|
||||||
use util::{IntPct};
|
use util::{IntPct};
|
||||||
|
use std::cmp;
|
||||||
|
|
||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
pub struct SpecBonus {
|
pub struct SpecBonus {
|
||||||
@ -19,9 +20,21 @@ impl SpecBonus {
|
|||||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||||
pub struct SpecValues {
|
pub struct SpecValues {
|
||||||
pub base: u64,
|
pub base: u64,
|
||||||
|
pub multi: u64,
|
||||||
pub bonuses: Vec<SpecBonus>,
|
pub bonuses: Vec<SpecBonus>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SpecValues {
|
||||||
|
pub fn max_value (&self, c: &Colours) -> u64 {
|
||||||
|
self.bonuses.iter().fold(self.base, |acc, s| acc + s.get_bonus(c))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn calc_multi (&self, c: &Colours) -> u64 {
|
||||||
|
self.multi * (c.red + c.green + c.blue) as u64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)]
|
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)]
|
||||||
pub enum Spec {
|
pub enum Spec {
|
||||||
Speed,
|
Speed,
|
||||||
@ -31,8 +44,7 @@ pub enum Spec {
|
|||||||
SpeedRGI,
|
SpeedRGI,
|
||||||
SpeedGBI,
|
SpeedGBI,
|
||||||
SpeedRBI,
|
SpeedRBI,
|
||||||
// Pure redLife has to come first as it applies the base amount
|
|
||||||
// that is multiplied
|
|
||||||
Life,
|
Life,
|
||||||
LifeGGI,
|
LifeGGI,
|
||||||
LifeRRI,
|
LifeRRI,
|
||||||
@ -82,217 +94,213 @@ impl Spec {
|
|||||||
pub fn values(&self) -> SpecValues {
|
pub fn values(&self) -> SpecValues {
|
||||||
match *self {
|
match *self {
|
||||||
Spec::Power => SpecValues {
|
Spec::Power => SpecValues {
|
||||||
base: 5,
|
multi: 0, base: 20,
|
||||||
bonuses: vec![]
|
bonuses: vec![]
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerRRI => SpecValues {
|
Spec::PowerRRI => SpecValues {
|
||||||
base: 10,
|
multi: 10, base: 40,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerGGI => SpecValues {
|
Spec::PowerGGI => SpecValues {
|
||||||
base: 10,
|
multi: 10, base: 40,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerBBI => SpecValues {
|
Spec::PowerBBI => SpecValues {
|
||||||
base: 10,
|
multi: 10, base: 40,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 40 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerRGI => SpecValues {
|
Spec::PowerRGI => SpecValues {
|
||||||
base: 5,
|
multi: 7, base: 25,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 25 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerGBI => SpecValues {
|
Spec::PowerGBI => SpecValues {
|
||||||
base: 5,
|
multi: 7, base: 25,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::PowerRBI => SpecValues {
|
Spec::PowerRBI => SpecValues {
|
||||||
base: 5,
|
multi: 7, base: 25,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 25 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::Speed => SpecValues {
|
Spec::Speed => SpecValues {
|
||||||
base: 5,
|
multi: 0, base: 40,
|
||||||
bonuses: vec![]
|
bonuses: vec![]
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedRRI => SpecValues {
|
Spec::SpeedRRI => SpecValues {
|
||||||
base: 10,
|
multi: 20, base: 80,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 80 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedGGI => SpecValues {
|
Spec::SpeedGGI => SpecValues {
|
||||||
base: 10,
|
multi: 20, base: 80,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 80 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedBBI => SpecValues {
|
Spec::SpeedBBI => SpecValues {
|
||||||
base: 10,
|
multi: 20, base: 80,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 80 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 80 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedRGI => SpecValues {
|
Spec::SpeedRGI => SpecValues {
|
||||||
base: 5,
|
multi: 15, base: 60,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 60 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedGBI => SpecValues {
|
Spec::SpeedGBI => SpecValues {
|
||||||
base: 5,
|
multi: 15, base: 60,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 60 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::SpeedRBI => SpecValues {
|
Spec::SpeedRBI => SpecValues {
|
||||||
base: 5,
|
multi: 15, base: 60,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 60 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 60 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::Life => SpecValues {
|
Spec::Life => SpecValues {
|
||||||
base: 5,
|
multi: 0, base: 150,
|
||||||
bonuses: vec![]},
|
bonuses: vec![]},
|
||||||
|
|
||||||
Spec::LifeRRI => SpecValues {
|
Spec::LifeRRI => SpecValues {
|
||||||
base: 10,
|
multi: 75, base: 300,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 300 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::LifeGGI => SpecValues {
|
Spec::LifeGGI => SpecValues {
|
||||||
base: 10,
|
multi: 75, base: 300,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 300 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::LifeBBI => SpecValues {
|
Spec::LifeBBI => SpecValues {
|
||||||
base: 10,
|
multi: 75, base: 300,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 300 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 300 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::LifeRGI => SpecValues {
|
Spec::LifeRGI => SpecValues {
|
||||||
base: 5,
|
multi: 50, base: 200,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 200 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
Spec::LifeGBI => SpecValues {
|
Spec::LifeGBI => SpecValues {
|
||||||
base: 5,
|
multi: 50, base: 200,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 200 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
Spec::LifeRBI => SpecValues {
|
Spec::LifeRBI => SpecValues {
|
||||||
base: 5,
|
multi: 50, base: 200,
|
||||||
bonuses: vec![
|
bonuses: vec![
|
||||||
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 200 },
|
||||||
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 200 }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply(&self, modified: u64, base: u64, construct_colours: &Colours, player_colours: &Colours) -> u64 {
|
pub fn apply(&self, modified: u64, base: u64, construct_colours: &Colours, player_colours: &Colours) -> u64 {
|
||||||
let construct_colour_total: u64 = (construct_colours.red + construct_colours.green + construct_colours.blue) as u64;
|
|
||||||
match *self {
|
match *self {
|
||||||
// Upgrades to Power Spec
|
// Percentage multipliers based on base value
|
||||||
Spec::Power |
|
Spec::Power |
|
||||||
|
Spec::Speed => modified + base.pct(self.values().base),
|
||||||
Spec::PowerRRI |
|
Spec::PowerRRI |
|
||||||
Spec::PowerGGI |
|
Spec::PowerGGI |
|
||||||
Spec::PowerBBI |
|
Spec::PowerBBI |
|
||||||
Spec::PowerRGI |
|
Spec::PowerRGI |
|
||||||
Spec::PowerGBI |
|
Spec::PowerGBI |
|
||||||
Spec::PowerRBI |
|
Spec::PowerRBI |
|
||||||
Spec::Speed |
|
|
||||||
Spec::SpeedRRI |
|
Spec::SpeedRRI |
|
||||||
Spec::SpeedGGI |
|
Spec::SpeedGGI |
|
||||||
Spec::SpeedBBI |
|
Spec::SpeedBBI |
|
||||||
Spec::SpeedRGI |
|
Spec::SpeedRGI |
|
||||||
Spec::SpeedGBI |
|
Spec::SpeedGBI |
|
||||||
Spec::SpeedRBI => modified + {
|
Spec::SpeedRBI => modified + {
|
||||||
let spec_values = self.values();
|
base.pct(cmp::min(self.values().calc_multi(construct_colours),
|
||||||
base.pct(spec_values.bonuses.iter()
|
self.values().max_value(player_colours)))
|
||||||
.fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours)))
|
|
||||||
},
|
},
|
||||||
|
// Flat bonus
|
||||||
Spec::Life |
|
Spec::Life => modified + self.values().base,
|
||||||
Spec::LifeRRI |
|
Spec::LifeRRI |
|
||||||
Spec::LifeGGI |
|
Spec::LifeGGI |
|
||||||
Spec::LifeBBI |
|
Spec::LifeBBI |
|
||||||
Spec::LifeRGI |
|
Spec::LifeRGI |
|
||||||
Spec::LifeGBI |
|
Spec::LifeGBI |
|
||||||
Spec::LifeRBI => modified + {
|
Spec::LifeRBI => modified + {
|
||||||
let spec_values = self.values();
|
cmp::min(self.values().calc_multi(construct_colours),
|
||||||
construct_colour_total * (spec_values.bonuses.iter()
|
self.values().max_value(player_colours))
|
||||||
.fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours)))
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user