744 lines
30 KiB
Rust
744 lines
30 KiB
Rust
use construct::{Stat, Colours};
|
|
use util::{IntPct};
|
|
use std::cmp;
|
|
|
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
pub struct SpecBonus {
|
|
pub req: Colours,
|
|
pub bonus: u64,
|
|
}
|
|
|
|
impl SpecBonus {
|
|
pub fn get_bonus(&self, c: &Colours) -> u64 {
|
|
if c.red >= self.req.red && c.blue >= self.req.blue && c.green >= self.req.green {
|
|
return self.bonus;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
#[derive(Debug,Clone,Serialize,Deserialize)]
|
|
pub struct SpecValues {
|
|
pub base: u64,
|
|
pub multi: u64,
|
|
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)]
|
|
pub enum Spec {
|
|
Speed,
|
|
SpeedRRI,
|
|
SpeedBBI,
|
|
SpeedGGI,
|
|
SpeedRGI,
|
|
SpeedGBI,
|
|
SpeedRBI,
|
|
|
|
SpeedRRII,
|
|
SpeedBBII,
|
|
SpeedGGII,
|
|
SpeedRGII,
|
|
SpeedGBII,
|
|
SpeedRBII,
|
|
|
|
SpeedRRIII,
|
|
SpeedBBIII,
|
|
SpeedGGIII,
|
|
SpeedRGIII,
|
|
SpeedGBIII,
|
|
SpeedRBIII,
|
|
|
|
Life,
|
|
LifeGGI,
|
|
LifeRRI,
|
|
LifeBBI,
|
|
LifeRGI,
|
|
LifeGBI,
|
|
LifeRBI,
|
|
LifeGGII,
|
|
LifeRRII,
|
|
LifeBBII,
|
|
LifeRGII,
|
|
LifeGBII,
|
|
LifeRBII,
|
|
LifeGGIII,
|
|
LifeRRIII,
|
|
LifeBBIII,
|
|
LifeRGIII,
|
|
LifeGBIII,
|
|
LifeRBIII,
|
|
|
|
Power,
|
|
PowerRRI,
|
|
PowerGGI,
|
|
PowerBBI,
|
|
PowerRGI,
|
|
PowerGBI,
|
|
PowerRBI,
|
|
PowerRRII,
|
|
PowerGGII,
|
|
PowerBBII,
|
|
PowerRGII,
|
|
PowerGBII,
|
|
PowerRBII,
|
|
PowerRRIII,
|
|
PowerGGIII,
|
|
PowerBBIII,
|
|
PowerRGIII,
|
|
PowerGBIII,
|
|
PowerRBIII,
|
|
|
|
}
|
|
|
|
impl Spec {
|
|
pub fn affects(&self) -> Vec<Stat> {
|
|
match *self {
|
|
Spec::Power => vec![Stat::BluePower, Stat::RedPower, Stat::GreenPower],
|
|
Spec::PowerRRI => vec![Stat::RedPower],
|
|
Spec::PowerGGI => vec![Stat::GreenPower],
|
|
Spec::PowerBBI => vec![Stat::BluePower],
|
|
Spec::PowerRGI => vec![Stat::GreenPower, Stat::RedPower],
|
|
Spec::PowerGBI => vec![Stat::GreenPower, Stat::BluePower],
|
|
Spec::PowerRBI => vec![Stat::RedPower, Stat::BluePower],
|
|
Spec::PowerRRII => vec![Stat::RedPower],
|
|
Spec::PowerGGII => vec![Stat::GreenPower],
|
|
Spec::PowerBBII => vec![Stat::BluePower],
|
|
Spec::PowerRGII => vec![Stat::GreenPower, Stat::RedPower],
|
|
Spec::PowerGBII => vec![Stat::GreenPower, Stat::BluePower],
|
|
Spec::PowerRBII => vec![Stat::RedPower, Stat::BluePower],
|
|
Spec::PowerRRIII => vec![Stat::RedPower],
|
|
Spec::PowerGGIII => vec![Stat::GreenPower],
|
|
Spec::PowerBBIII => vec![Stat::BluePower],
|
|
Spec::PowerRGIII => vec![Stat::GreenPower, Stat::RedPower],
|
|
Spec::PowerGBIII => vec![Stat::GreenPower, Stat::BluePower],
|
|
Spec::PowerRBIII => vec![Stat::RedPower, Stat::BluePower],
|
|
|
|
Spec::Speed => vec![Stat::Speed],
|
|
Spec::SpeedRRI => vec![Stat::Speed],
|
|
Spec::SpeedBBI => vec![Stat::Speed],
|
|
Spec::SpeedGGI => vec![Stat::Speed],
|
|
Spec::SpeedRGI => vec![Stat::Speed],
|
|
Spec::SpeedGBI => vec![Stat::Speed],
|
|
Spec::SpeedRBI => vec![Stat::Speed],
|
|
Spec::SpeedRRII => vec![Stat::Speed],
|
|
Spec::SpeedBBII => vec![Stat::Speed],
|
|
Spec::SpeedGGII => vec![Stat::Speed],
|
|
Spec::SpeedRGII => vec![Stat::Speed],
|
|
Spec::SpeedGBII => vec![Stat::Speed],
|
|
Spec::SpeedRBII => vec![Stat::Speed],
|
|
Spec::SpeedRRIII => vec![Stat::Speed],
|
|
Spec::SpeedBBIII => vec![Stat::Speed],
|
|
Spec::SpeedGGIII => vec![Stat::Speed],
|
|
Spec::SpeedRGIII => vec![Stat::Speed],
|
|
Spec::SpeedGBIII => vec![Stat::Speed],
|
|
Spec::SpeedRBIII => vec![Stat::Speed],
|
|
|
|
|
|
|
|
Spec::Life => vec![Stat::GreenLife],
|
|
Spec::LifeRRI => vec![Stat::RedLife],
|
|
Spec::LifeBBI => vec![Stat::BlueLife],
|
|
Spec::LifeGGI => vec![Stat::GreenLife],
|
|
Spec::LifeRGI => vec![Stat::GreenLife, Stat::RedLife],
|
|
Spec::LifeGBI => vec![Stat::GreenLife, Stat::BlueLife],
|
|
Spec::LifeRBI => vec![Stat::BlueLife, Stat::RedLife],
|
|
Spec::LifeRRII => vec![Stat::RedLife],
|
|
Spec::LifeBBII => vec![Stat::BlueLife],
|
|
Spec::LifeGGII => vec![Stat::GreenLife],
|
|
Spec::LifeRGII => vec![Stat::GreenLife, Stat::RedLife],
|
|
Spec::LifeGBII => vec![Stat::GreenLife, Stat::BlueLife],
|
|
Spec::LifeRBII => vec![Stat::BlueLife, Stat::RedLife],
|
|
Spec::LifeRRIII => vec![Stat::RedLife],
|
|
Spec::LifeBBIII => vec![Stat::BlueLife],
|
|
Spec::LifeGGIII => vec![Stat::GreenLife],
|
|
Spec::LifeRGIII => vec![Stat::GreenLife, Stat::RedLife],
|
|
Spec::LifeGBIII => vec![Stat::GreenLife, Stat::BlueLife],
|
|
Spec::LifeRBIII => vec![Stat::BlueLife, Stat::RedLife],
|
|
}
|
|
}
|
|
|
|
pub fn values(&self) -> SpecValues {
|
|
match *self {
|
|
Spec::Power => SpecValues {
|
|
multi: 0, base: 10,
|
|
bonuses: vec![]
|
|
},
|
|
|
|
Spec::PowerRRI => SpecValues {
|
|
multi: 10, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGGI => SpecValues {
|
|
multi: 10, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerBBI => SpecValues {
|
|
multi: 10, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRGI => SpecValues {
|
|
multi: 5, base: 15,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 15 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGBI => SpecValues {
|
|
multi: 5, base: 15,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 15 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRBI => SpecValues {
|
|
multi: 5, base: 15,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 15 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRRII => SpecValues {
|
|
multi: 10, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGGII => SpecValues {
|
|
multi: 10, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerBBII => SpecValues {
|
|
multi: 10, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRGII => SpecValues {
|
|
multi: 7, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGBII => SpecValues {
|
|
multi: 7, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRBII => SpecValues {
|
|
multi: 7, base: 25,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 }
|
|
],
|
|
},
|
|
Spec::PowerRRIII => SpecValues {
|
|
multi: 20, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGGIII => SpecValues {
|
|
multi: 20, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerBBIII => SpecValues {
|
|
multi: 20, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRGIII => SpecValues {
|
|
multi: 20, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 40 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 40 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerGBIII => SpecValues {
|
|
multi: 20, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::PowerRBIII => SpecValues {
|
|
multi: 20, base: 40,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 25 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 }
|
|
],
|
|
},
|
|
|
|
Spec::Speed => SpecValues {
|
|
multi: 0, base: 40,
|
|
bonuses: vec![]
|
|
},
|
|
|
|
Spec::SpeedRRI => SpecValues {
|
|
multi: 20, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGGI => SpecValues {
|
|
multi: 20, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedBBI => SpecValues {
|
|
multi: 20, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRGI => SpecValues {
|
|
multi: 15, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGBI => SpecValues {
|
|
multi: 15, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRBI => SpecValues {
|
|
multi: 15, base: 60,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 60 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 60 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRRII => SpecValues {
|
|
multi: 20, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGGII => SpecValues {
|
|
multi: 20, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedBBII => SpecValues {
|
|
multi: 20, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRGII => SpecValues {
|
|
multi: 15, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGBII => SpecValues {
|
|
multi: 15, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRBII => SpecValues {
|
|
multi: 15, base: 80,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 80 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 80 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRRIII => SpecValues {
|
|
multi: 20, base: 160,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 160 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGGIII => SpecValues {
|
|
multi: 20, base: 160,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 160 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedBBIII => SpecValues {
|
|
multi: 20, base: 160,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 160 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 160 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRGIII => SpecValues {
|
|
multi: 15, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedGBIII => SpecValues {
|
|
multi: 15, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::SpeedRBIII => SpecValues {
|
|
multi: 15, base: 120,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 120 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 120 }
|
|
],
|
|
},
|
|
|
|
Spec::Life => SpecValues {
|
|
multi: 0, base: 100,
|
|
bonuses: vec![]},
|
|
|
|
Spec::LifeRRI => SpecValues {
|
|
multi: 50, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 100 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGGI => SpecValues {
|
|
multi: 50, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 100 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeBBI => SpecValues {
|
|
multi: 50, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 100 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRGI => SpecValues {
|
|
multi: 40, base: 150,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 75 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGBI => SpecValues {
|
|
multi: 40, base: 150,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 75 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRBI => SpecValues {
|
|
multi: 40, base: 150,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 75 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 75 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRRII => SpecValues {
|
|
multi: 50, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 150 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGGII => SpecValues {
|
|
multi: 50, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 150 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeBBII => SpecValues {
|
|
multi: 50, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 150 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 150 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRGII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 100 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGBII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 100 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRBII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 100 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 100 }
|
|
],
|
|
},
|
|
Spec::LifeRRIII => SpecValues {
|
|
multi: 40, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 300 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGGIII => SpecValues {
|
|
multi: 40, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 300 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeBBIII => SpecValues {
|
|
multi: 40, base: 300,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 300 },
|
|
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 300 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRGIII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 200 },
|
|
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 200 },
|
|
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 200 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeGBIII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 200 },
|
|
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 200 },
|
|
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 200 }
|
|
],
|
|
},
|
|
|
|
Spec::LifeRBIII => SpecValues {
|
|
multi: 40, base: 200,
|
|
bonuses: vec![
|
|
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 200 },
|
|
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 200 },
|
|
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 {
|
|
match *self {
|
|
// Percentage multipliers based on base value
|
|
Spec::Power |
|
|
Spec::Speed => modified + base.pct(self.values().base),
|
|
Spec::PowerRRI |
|
|
Spec::PowerGGI |
|
|
Spec::PowerBBI |
|
|
Spec::PowerRGI |
|
|
Spec::PowerGBI |
|
|
Spec::PowerRBI |
|
|
Spec::PowerRRII |
|
|
Spec::PowerGGII |
|
|
Spec::PowerBBII |
|
|
Spec::PowerRGII |
|
|
Spec::PowerGBII |
|
|
Spec::PowerRBII |
|
|
Spec::PowerRRIII |
|
|
Spec::PowerGGIII |
|
|
Spec::PowerBBIII |
|
|
Spec::PowerRGIII |
|
|
Spec::PowerGBIII |
|
|
Spec::PowerRBIII |
|
|
|
|
Spec::SpeedRRI |
|
|
Spec::SpeedGGI |
|
|
Spec::SpeedBBI |
|
|
Spec::SpeedRGI |
|
|
Spec::SpeedGBI |
|
|
Spec::SpeedRBI |
|
|
Spec::SpeedRRII |
|
|
Spec::SpeedGGII |
|
|
Spec::SpeedBBII |
|
|
Spec::SpeedRGII |
|
|
Spec::SpeedGBII |
|
|
Spec::SpeedRBII |
|
|
Spec::SpeedRRIII |
|
|
Spec::SpeedGGIII |
|
|
Spec::SpeedBBIII |
|
|
Spec::SpeedRGIII |
|
|
Spec::SpeedGBIII |
|
|
Spec::SpeedRBIII => modified + {
|
|
base.pct(cmp::min(self.values().calc_multi(construct_colours),
|
|
self.values().max_value(player_colours)))
|
|
},
|
|
// Flat bonus
|
|
Spec::Life => modified + self.values().base,
|
|
Spec::LifeRRI |
|
|
Spec::LifeGGI |
|
|
Spec::LifeBBI |
|
|
Spec::LifeRGI |
|
|
Spec::LifeGBI |
|
|
Spec::LifeRBI |
|
|
Spec::LifeRRII |
|
|
Spec::LifeGGII |
|
|
Spec::LifeBBII |
|
|
Spec::LifeRGII |
|
|
Spec::LifeGBII |
|
|
Spec::LifeRBII |
|
|
Spec::LifeRRIII |
|
|
Spec::LifeGGIII |
|
|
Spec::LifeBBIII |
|
|
Spec::LifeRGIII |
|
|
Spec::LifeGBIII |
|
|
Spec::LifeRBIII => modified + {
|
|
cmp::min(self.values().calc_multi(construct_colours),
|
|
self.values().max_value(player_colours))
|
|
},
|
|
}
|
|
}
|
|
}
|