group attack skills
This commit is contained in:
parent
efd82f3cf2
commit
b630d0b76c
@ -218,14 +218,9 @@ pub enum Skill {
|
|||||||
Attack,
|
Attack,
|
||||||
Debuff,
|
Debuff,
|
||||||
Buff,
|
Buff,
|
||||||
Block, // reduce damage
|
Block,
|
||||||
Stun,
|
Stun,
|
||||||
|
|
||||||
// Boost -- sounds nice
|
|
||||||
// Evade, // actively evade
|
|
||||||
// Nightmare,
|
|
||||||
// Sleep,
|
|
||||||
|
|
||||||
Amplify,
|
Amplify,
|
||||||
#[serde(rename = "Amplify+")]
|
#[serde(rename = "Amplify+")]
|
||||||
AmplifyPlus,
|
AmplifyPlus,
|
||||||
@ -771,6 +766,214 @@ fn attack(cast: Cast, game: &mut Game, values: Attack) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
|
enum Blast { Base, Plus, PlusPlus, Hybrid }
|
||||||
|
impl Blast {
|
||||||
|
fn dmg_multi(self) -> usize {
|
||||||
|
match self {
|
||||||
|
Blast::Base => 105,
|
||||||
|
Blast::Plus => 125,
|
||||||
|
Blast::PlusPlus => 145,
|
||||||
|
Blast::Hybrid => 50,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn blast(cast: Cast, game: &mut Game, values: Blast) {
|
||||||
|
let amount = match values {
|
||||||
|
Blast::Hybrid => game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.dmg_multi()),
|
||||||
|
_ => game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.dmg_multi())
|
||||||
|
};
|
||||||
|
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Blue,
|
||||||
|
amount,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
|
enum Chaos { Base, Plus, PlusPlus }
|
||||||
|
impl Chaos {
|
||||||
|
fn dmg_multi(self) -> usize {
|
||||||
|
match self { Chaos::Base => 40, Chaos::Plus => 50, Chaos::PlusPlus => 65 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn chaos(cast: Cast, game: &mut Game, values: Chaos) {
|
||||||
|
let mut rng = thread_rng();
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Red,
|
||||||
|
amount:
|
||||||
|
game.value(Value::Stat { construct: cast.source, stat: Stat::RedPower }).pct(values.dmg_multi().pct(rng.gen_range(100, 130)))
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Blue,
|
||||||
|
amount:
|
||||||
|
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.dmg_multi().pct(rng.gen_range(100, 130)))
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Heal { Base, Plus, PlusPlus }
|
||||||
|
impl Heal {
|
||||||
|
pub fn heal_multiplier(self) -> usize {
|
||||||
|
match self { Heal::Base => 115, Heal::Plus => 135, Heal::PlusPlus => 160 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn heal(cast: Cast, game: &mut Game, values: Heal) {
|
||||||
|
game.action(cast,
|
||||||
|
Action::Heal {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Green,
|
||||||
|
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.heal_multiplier()),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
|
enum Siphon { Base, Plus, PlusPlus }
|
||||||
|
impl Siphon {
|
||||||
|
pub fn blue_dmg_multi(self) -> usize {
|
||||||
|
match self { Siphon::Base => 25, Siphon::Plus => 27, Siphon::PlusPlus => 30 }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn green_dmg_multi(self) -> usize {
|
||||||
|
match self { Siphon::Base => 25, Siphon::Plus => 27, Siphon::PlusPlus => 30 }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn duration(self) -> u8 {
|
||||||
|
match self { Siphon::Base => 2, Siphon::Plus => 3, Siphon::PlusPlus => 4 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn siphon(cast: Cast, game: &mut Game, values: Siphon) {
|
||||||
|
let amount =
|
||||||
|
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.blue_dmg_multi())
|
||||||
|
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.green_dmg_multi());
|
||||||
|
|
||||||
|
game.action(cast,
|
||||||
|
Action::Effect {
|
||||||
|
construct: cast.target,
|
||||||
|
effect: ConstructEffect { effect: Effect::Siphon, duration: values.duration(), meta:
|
||||||
|
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick, speed: cast.speed, amount }) },
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Blue,
|
||||||
|
amount,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Effect {
|
||||||
|
construct: cast.target,
|
||||||
|
effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Heal {
|
||||||
|
construct: cast.source,
|
||||||
|
colour: Colour::Green,
|
||||||
|
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Blue }).pct(100),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn siphon_tick(cast: Cast, game: &mut Game) {
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Blue,
|
||||||
|
amount: game.value(Value::TickDamage { construct: cast.target, effect: Effect::Siphon }),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Effect {
|
||||||
|
construct: cast.target,
|
||||||
|
effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Heal {
|
||||||
|
construct: cast.source,
|
||||||
|
colour: Colour::Green,
|
||||||
|
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Blue }).pct(100),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
|
enum Slay { Base, Plus, PlusPlus }
|
||||||
|
impl Slay {
|
||||||
|
pub fn blue_dmg_multi(self) -> usize {
|
||||||
|
match self { Slay::Base => 40, Slay::Plus => 50, Slay::PlusPlus => 65 }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn green_dmg_multi(self) -> usize {
|
||||||
|
match self { Slay::Base => 40, Slay::Plus => 50, Slay::PlusPlus => 65 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn slay(cast: Cast, game: &mut Game, values: Slay) {
|
||||||
|
let amount =
|
||||||
|
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.blue_dmg_multi())
|
||||||
|
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.green_dmg_multi());
|
||||||
|
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Red,
|
||||||
|
amount,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
game.action(cast,
|
||||||
|
Action::Heal {
|
||||||
|
construct: cast.source,
|
||||||
|
colour: Colour::Green,
|
||||||
|
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Red }),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
|
enum Strike { Base, Plus, PlusPlus, Haste }
|
||||||
|
impl Strike {
|
||||||
|
pub fn dmg_multi(self) -> usize {
|
||||||
|
match self {
|
||||||
|
Strike::Base => 90,
|
||||||
|
Strike::Plus => 110,
|
||||||
|
Strike::PlusPlus => 140,
|
||||||
|
Strike::Haste => 60,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn strike(cast: Cast, game: &mut Game, values: Strike) {
|
||||||
|
let amount = match values {
|
||||||
|
Strike::Haste => game.value(Value::Stat { construct: cast.source, stat: Stat::Speed }).pct(values.dmg_multi()),
|
||||||
|
_ => game.value(Value::Stat { construct: cast.source, stat: Stat::RedPower }).pct(values.dmg_multi())
|
||||||
|
};
|
||||||
|
|
||||||
|
game.action(cast,
|
||||||
|
Action::Damage {
|
||||||
|
construct: cast.target,
|
||||||
|
colour: Colour::Red,
|
||||||
|
amount,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Block { Base }
|
enum Block { Base }
|
||||||
impl Block {
|
impl Block {
|
||||||
@ -1023,34 +1226,6 @@ fn bash(cast: Cast, game: &mut Game, values: Bash) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
|
||||||
enum Blast { Base, Plus, PlusPlus, Hybrid }
|
|
||||||
impl Blast {
|
|
||||||
fn dmg_multi(self) -> usize {
|
|
||||||
match self {
|
|
||||||
Blast::Base => 105,
|
|
||||||
Blast::Plus => 125,
|
|
||||||
Blast::PlusPlus => 145,
|
|
||||||
Blast::Hybrid => 50,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn blast(cast: Cast, game: &mut Game, values: Blast) {
|
|
||||||
let amount = match values {
|
|
||||||
Blast::Hybrid => game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.dmg_multi()),
|
|
||||||
_ => game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.dmg_multi())
|
|
||||||
};
|
|
||||||
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Blue,
|
|
||||||
amount,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Break { Base, Plus, PlusPlus }
|
enum Break { Base, Plus, PlusPlus }
|
||||||
impl Break {
|
impl Break {
|
||||||
@ -1108,34 +1283,6 @@ fn curse(cast: Cast, game: &mut Game, values: Curse) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
|
||||||
enum Chaos { Base, Plus, PlusPlus }
|
|
||||||
impl Chaos {
|
|
||||||
fn dmg_multi(self) -> usize {
|
|
||||||
match self { Chaos::Base => 40, Chaos::Plus => 50, Chaos::PlusPlus => 65 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn chaos(cast: Cast, game: &mut Game, values: Chaos) {
|
|
||||||
let mut rng = thread_rng();
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Red,
|
|
||||||
amount:
|
|
||||||
game.value(Value::Stat { construct: cast.source, stat: Stat::RedPower }).pct(values.dmg_multi().pct(rng.gen_range(100, 130)))
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Blue,
|
|
||||||
amount:
|
|
||||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.dmg_multi().pct(rng.gen_range(100, 130)))
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Counter { Base, Plus, PlusPlus }
|
enum Counter { Base, Plus, PlusPlus }
|
||||||
impl Counter {
|
impl Counter {
|
||||||
@ -1330,23 +1477,6 @@ fn electrocute_tick(cast: Cast, game: &mut Game) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Heal { Base, Plus, PlusPlus }
|
|
||||||
impl Heal {
|
|
||||||
pub fn heal_multiplier(self) -> usize {
|
|
||||||
match self { Heal::Base => 115, Heal::Plus => 135, Heal::PlusPlus => 160 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn heal(cast: Cast, game: &mut Game, values: Heal) {
|
|
||||||
game.action(cast,
|
|
||||||
Action::Heal {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Green,
|
|
||||||
amount: game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.heal_multiplier()),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Haste { Base, Plus, PlusPlus }
|
enum Haste { Base, Plus, PlusPlus }
|
||||||
impl Haste {
|
impl Haste {
|
||||||
@ -1639,112 +1769,6 @@ fn ruin(cast: Cast, game: &mut Game, values: Ruin) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
|
||||||
enum Siphon { Base, Plus, PlusPlus }
|
|
||||||
impl Siphon {
|
|
||||||
pub fn blue_dmg_multi(self) -> usize {
|
|
||||||
match self { Siphon::Base => 25, Siphon::Plus => 27, Siphon::PlusPlus => 30 }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn green_dmg_multi(self) -> usize {
|
|
||||||
match self { Siphon::Base => 25, Siphon::Plus => 27, Siphon::PlusPlus => 30 }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn duration(self) -> u8 {
|
|
||||||
match self { Siphon::Base => 2, Siphon::Plus => 3, Siphon::PlusPlus => 4 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn siphon(cast: Cast, game: &mut Game, values: Siphon) {
|
|
||||||
let amount =
|
|
||||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.blue_dmg_multi())
|
|
||||||
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.green_dmg_multi());
|
|
||||||
|
|
||||||
game.action(cast,
|
|
||||||
Action::Effect {
|
|
||||||
construct: cast.target,
|
|
||||||
effect: ConstructEffect { effect: Effect::Siphon, duration: values.duration(), meta:
|
|
||||||
Some(EffectMeta::CastTick { source: cast.source, target: cast.target, skill: Skill::SiphonTick, speed: cast.speed, amount }) },
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Blue,
|
|
||||||
amount,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Effect {
|
|
||||||
construct: cast.target,
|
|
||||||
effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Heal {
|
|
||||||
construct: cast.source,
|
|
||||||
colour: Colour::Green,
|
|
||||||
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Blue }).pct(100),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn siphon_tick(cast: Cast, game: &mut Game) {
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Blue,
|
|
||||||
amount: game.value(Value::TickDamage { construct: cast.target, effect: Effect::Siphon }),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Effect {
|
|
||||||
construct: cast.target,
|
|
||||||
effect: ConstructEffect { effect: Effect::Siphoned, duration: 1, meta: None }, // immunity to additional ticks
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Heal {
|
|
||||||
construct: cast.source,
|
|
||||||
colour: Colour::Green,
|
|
||||||
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Blue }).pct(100),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
|
||||||
enum Slay { Base, Plus, PlusPlus }
|
|
||||||
impl Slay {
|
|
||||||
pub fn blue_dmg_multi(self) -> usize {
|
|
||||||
match self { Slay::Base => 40, Slay::Plus => 50, Slay::PlusPlus => 65 }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn green_dmg_multi(self) -> usize {
|
|
||||||
match self { Slay::Base => 40, Slay::Plus => 50, Slay::PlusPlus => 65 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn slay(cast: Cast, game: &mut Game, values: Slay) {
|
|
||||||
let amount =
|
|
||||||
game.value(Value::Stat { construct: cast.source, stat: Stat::BluePower }).pct(values.blue_dmg_multi())
|
|
||||||
+ game.value(Value::Stat { construct: cast.source, stat: Stat::GreenPower }).pct(values.green_dmg_multi());
|
|
||||||
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Red,
|
|
||||||
amount,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
game.action(cast,
|
|
||||||
Action::Heal {
|
|
||||||
construct: cast.source,
|
|
||||||
colour: Colour::Green,
|
|
||||||
amount: game.value(Value::DamageReceived { construct: cast.target, colour: Colour::Red }),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Sleep { Base, Plus, PlusPlus }
|
enum Sleep { Base, Plus, PlusPlus }
|
||||||
impl Sleep {
|
impl Sleep {
|
||||||
@ -1802,34 +1826,6 @@ fn silence(cast: Cast, game: &mut Game, values: Silence) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
|
||||||
enum Strike { Base, Plus, PlusPlus, Haste }
|
|
||||||
impl Strike {
|
|
||||||
pub fn dmg_multi(self) -> usize {
|
|
||||||
match self {
|
|
||||||
Strike::Base => 90,
|
|
||||||
Strike::Plus => 110,
|
|
||||||
Strike::PlusPlus => 140,
|
|
||||||
Strike::Haste => 60,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn strike(cast: Cast, game: &mut Game, values: Strike) {
|
|
||||||
let amount = match values {
|
|
||||||
Strike::Haste => game.value(Value::Stat { construct: cast.source, stat: Stat::Speed }).pct(values.dmg_multi()),
|
|
||||||
_ => game.value(Value::Stat { construct: cast.source, stat: Stat::RedPower }).pct(values.dmg_multi())
|
|
||||||
};
|
|
||||||
|
|
||||||
game.action(cast,
|
|
||||||
Action::Damage {
|
|
||||||
construct: cast.target,
|
|
||||||
colour: Colour::Red,
|
|
||||||
amount,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
enum Sustain { Base, Plus, PlusPlus }
|
enum Sustain { Base, Plus, PlusPlus }
|
||||||
impl Sustain {
|
impl Sustain {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user