Merge branch 'release/1.5.2'

This commit is contained in:
ntr 2019-09-30 21:15:11 +10:00
commit 87ffb48b7e
17 changed files with 2850 additions and 194 deletions

View File

@ -1 +1 @@
1.5.1 1.5.2

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-client", "name": "mnml-client",
"version": "1.5.1", "version": "1.5.2",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -187,6 +187,11 @@
align-self: center; align-self: center;
text-align: center; text-align: center;
height: auto; height: auto;
svg {
display: inline;
height: 1em;
margin-right: 0.1em
}
} }
/* some stupid bug in chrome makes it fill the entire screen */ /* some stupid bug in chrome makes it fill the entire screen */

View File

@ -288,7 +288,7 @@ li {
.logo { .logo {
height: 2em; height: 2em;
background-image: url("../../src/components/svgs/menu.logo.svg"); background-image: url("../../assets/mnml.logo.trim.svg");
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: left; background-position: left;

View File

@ -3,7 +3,7 @@
font-size: 12pt; font-size: 12pt;
padding: 0; padding: 0;
grid-template-columns: 1fr; grid-template-columns: 1fr;
grid-template-rows: 1fr min-content; grid-template-rows: 10fr 1fr;
grid-template-areas: grid-template-areas:
"main" "main"
"footer"; "footer";
@ -31,6 +31,9 @@
footer { footer {
display: flex; display: flex;
position: fixed;
bottom: 0;
width: 100%;
} }
#nav-btn, #instance-nav { #nav-btn, #instance-nav {

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-client", "name": "mnml-client",
"version": "1.5.1", "version": "1.5.2",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -74,8 +74,8 @@ function getObjects(resolution, stages, game, account) {
function getSequence(resolution) { function getSequence(resolution) {
if (!resolution.event) return []; if (!resolution.event) return [];
if (resolution.event[0] === 'Inversion') return []; if (resolution.event[0] === 'Inversion') return [];
if (['TargetKo', 'Ko'].includes(resolution.event[0])) return [];
if (['Skill', 'AoeSkill'].includes(resolution.event[0])) return ['START_SKILL', 'END_SKILL']; if (['Skill', 'AoeSkill'].includes(resolution.event[0])) return ['START_SKILL', 'END_SKILL'];
if (resolution.event[0] === 'Ko') return ['POST_SKILL'];
switch (resolution.stages) { switch (resolution.stages) {
case 'AllStages': return ['START_SKILL', 'END_SKILL', 'POST_SKILL']; case 'AllStages': return ['START_SKILL', 'END_SKILL', 'POST_SKILL'];

View File

@ -52,6 +52,8 @@ function GameFooter(props) {
sendInstanceState, sendInstanceState,
} = props; } = props;
if (!game) return false; // ???
const playerTeam = game.players.find(t => t.id === account.id); const playerTeam = game.players.find(t => t.id === account.id);
function quitClick() { function quitClick() {

View File

@ -32,7 +32,7 @@ function Instance(args) {
sendInstanceReady, sendInstanceReady,
} = args; } = args;
if (!instance) return false;
const rdyClasses = `ready-btn ready`; const rdyClasses = `ready-btn ready`;
const readyInfo = instance.phase === 'Lobby' const readyInfo = instance.phase === 'Lobby'
? 'lobbyReady' ? 'lobbyReady'

View File

@ -106,7 +106,7 @@ function JoinButtons(args) {
try { try {
document.execCommand('copy'); document.execCommand('copy');
infoToast('Invite link copied.'); infoToast('Invite link copied to clipboard.');
} catch (err) { } catch (err) {
console.error('link copy error', err); console.error('link copy error', err);
errorToast('Invite link copy error.'); errorToast('Invite link copy error.');

View File

@ -2,12 +2,15 @@ const preact = require('preact');
const { Component } = require('preact'); const { Component } = require('preact');
const { connect } = require('preact-redux'); const { connect } = require('preact-redux');
// const anime = require('animejs').default; // const anime = require('animejs').default;
const reactStringReplace = require('react-string-replace');
const throttle = require('lodash/throttle'); const throttle = require('lodash/throttle');
const shapes = require('./shapes');
const { removeTier } = require('../utils');
const addState = connect( const addState = connect(
({ game, account, animTarget, animating }) => ({ game, account, animTarget, animating, itemInfo }) =>
({ game, account, animTarget, animating }) ({ game, account, animTarget, animating, itemInfo })
); );
class TargetSvg extends Component { class TargetSvg extends Component {
@ -25,7 +28,7 @@ class TargetSvg extends Component {
} }
render(props, state) { render(props, state) {
const { game, account, animating, animTarget } = props; const { game, account, animating, animTarget, itemInfo } = props;
const { width, height } = state; const { width, height } = state;
if (!game) return false; // game will be null when battle ends if (!game) return false; // game will be null when battle ends
@ -33,9 +36,17 @@ class TargetSvg extends Component {
// just put skill name up // just put skill name up
if (animating) { if (animating) {
if (!animTarget) return false; if (!animTarget) return false;
const itemSource = itemInfo.combos.filter(c => c.item === removeTier(animTarget.skill));
const itemSourceInfo = itemSource.length
? `${itemSource[0].components[0]} ${itemSource[0].components[1]} ${itemSource[0].components[2]}`
: false;
const itemRegEx = /(Red|Blue|Green)/;
const itemSourceDescription = reactStringReplace(itemSourceInfo, itemRegEx, match => shapes[match]());
return ( return (
<h1 class="resolving-skill">{animTarget.skill}</h1> <div class="resolving-skill">
<h1>{animTarget.skill}</h1>
<div> {itemSourceDescription} </div>
</div>
); );
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "mnml-ops", "name": "mnml-ops",
"version": "1.5.1", "version": "1.5.2",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {

View File

@ -1,6 +1,6 @@
[package] [package]
name = "mnml" name = "mnml"
version = "1.5.1" version = "1.5.2"
authors = ["ntr <ntr@smokestack.io>"] authors = ["ntr <ntr@smokestack.io>"]
[dependencies] [dependencies]

View File

@ -967,9 +967,9 @@ 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(50)); assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(35));
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(75)); assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(50));
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(100)); assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(70));
return; return;
} }
@ -993,7 +993,7 @@ mod tests {
assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(10)); assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(10));
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(10)); assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(10));
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(10)); assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(10));
assert!(construct.green_life.value == construct.green_life.base + 100); assert!(construct.green_life.value == construct.green_life.base + 125);
return; return;
} }
@ -1039,7 +1039,7 @@ 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(50)); assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(35));
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(25)); assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(25));
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(25)); assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(25));

View File

@ -305,7 +305,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
}; };
} }
if target.affected(Effect::Absorb) { if target.affected(Effect::Absorb) && !target.is_ko() {
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
.find(|e| e.effect == Effect::Absorb).unwrap().clone(); .find(|e| e.effect == Effect::Absorb).unwrap().clone();
match meta { match meta {
@ -316,7 +316,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
}; };
} }
if c == Colour::Red { if c == Colour::Red {
if target.affected(Effect::Counter) { if target.affected(Effect::Counter) && !target.is_ko() {
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter() let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
.find(|e| e.effect == Effect::Counter).unwrap().clone(); .find(|e| e.effect == Effect::Counter).unwrap().clone();
match meta { match meta {
@ -717,27 +717,28 @@ impl Skill {
Skill::Attack => 80, // Base Skill::Attack => 80, // Base
Skill::Blast=> 110, // BB Skill::Blast=> 110, // BB
Skill::BlastPlus => 130, // BB Skill::BlastPlus => 145, // BB
Skill::BlastPlusPlus => 150, // BB Skill::BlastPlusPlus => 210, // BB
Skill::Chaos=> 40, // BR Skill::Chaos=> 40, // BR
Skill::ChaosPlus => 50, // BR Skill::ChaosPlus => 65, // BR
Skill::ChaosPlusPlus => 60, // BR Skill::ChaosPlusPlus => 90, // BR
Skill::Heal=> 125, //GG
Skill::HealPlus => 185, //GG
Skill::HealPlusPlus => 270, //GG
Skill::Heal=> 130, //GG
Skill::HealPlus => 160, //GG
Skill::HealPlusPlus => 200, //GG
Skill::SiphonTick=> 40, // GB Skill::SiphonTick=> 40, // GB
Skill::SiphonTickPlus => 70, Skill::SiphonTickPlus => 50,
Skill::SiphonTickPlusPlus => 110, Skill::SiphonTickPlusPlus => 60,
Skill::Slay=> 70, // RG Skill::Slay=> 70, // RG
Skill::SlayPlus => 90, Skill::SlayPlus => 115,
Skill::SlayPlusPlus => 120, Skill::SlayPlusPlus => 180,
Skill::Strike=> 90, //RR Skill::Strike=> 90, //RR
Skill::StrikePlus => 110, Skill::StrikePlus => 140,
Skill::StrikePlusPlus => 140, Skill::StrikePlusPlus => 200,
// Block Base // Block Base
Skill::ElectrocuteTick=> 80, Skill::ElectrocuteTick=> 80,
@ -1583,9 +1584,17 @@ fn absorb(source: &mut Construct, target: &mut Construct, mut results: Resolutio
fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions { fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resolutions, reflect_skill: Skill, amount: u64, skill: Skill) -> Resolutions {
let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount)); let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount));
results.push(Resolution::new(source, target) results.push(Resolution::new(source, target)
.event(target.add_effect(reflect_skill, absorb)) .event(target.add_effect(reflect_skill, absorb))
.stages(EventStages::PostOnly)); .stages(EventStages::PostOnly));
let absorb_index = target.effects.iter().position(|e| e.effect == Effect::Absorb).expect("No absorb");
let ce = target.effects.remove(absorb_index);
results.push(Resolution::new(source, target)
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
.stages(EventStages::PostOnly));
return results;; return results;;
} }

View File

@ -174,161 +174,161 @@ impl Spec {
Spec::PowerRR=> SpecValues { Spec::PowerRR=> SpecValues {
base: 25, base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 15 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 25 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 20 }
], ],
}, },
Spec::PowerGG=> SpecValues { Spec::PowerGG=> SpecValues {
base: 25, base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 15 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 25 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 20 }
], ],
}, },
Spec::PowerBB=> SpecValues { Spec::PowerBB=> SpecValues {
base: 25, base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 15 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 25 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 20 }
], ],
}, },
Spec::PowerRG=> SpecValues { Spec::PowerRG=> SpecValues {
base: 15, base: 20,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 5 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 10 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 15 } SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 15 }
], ],
}, },
Spec::PowerGB=> SpecValues { Spec::PowerGB=> SpecValues {
base: 15, base: 20,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 5 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 10 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 15 } SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 15 }
], ],
}, },
Spec::PowerRB=> SpecValues { Spec::PowerRB=> SpecValues {
base: 15, base: 20,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 15 }, SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 5 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 10 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 15 } SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 15 }
], ],
}, },
Spec::PowerRRPlus => SpecValues { Spec::PowerRRPlus => SpecValues {
base: 40, base: 45,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 15 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 25 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 35 }
], ],
}, },
Spec::PowerGGPlus => SpecValues { Spec::PowerGGPlus => SpecValues {
base: 40, base: 45,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 15 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 25 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 35 }
], ],
}, },
Spec::PowerBBPlus => SpecValues { Spec::PowerBBPlus => SpecValues {
base: 40, base: 45,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 15 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 25 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 35 }
], ],
}, },
Spec::PowerRGPlus => SpecValues { Spec::PowerRGPlus => SpecValues {
base: 25, base: 35,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 25 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 20 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 25 } SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 25 }
], ],
}, },
Spec::PowerGBPlus => SpecValues { Spec::PowerGBPlus => SpecValues {
base: 25, base: 35,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 25 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 20 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 } SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 }
], ],
}, },
Spec::PowerRBPlus => SpecValues { Spec::PowerRBPlus => SpecValues {
base: 25, base: 35,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 25 }, SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 25 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 20 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 } SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 }
], ],
}, },
Spec::PowerRRPlusPlus => SpecValues { Spec::PowerRRPlusPlus => SpecValues {
base: 60, base: 80,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 60 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 25 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 60 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 45 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 60 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 60 }
], ],
}, },
Spec::PowerGGPlusPlus => SpecValues { Spec::PowerGGPlusPlus => SpecValues {
base: 60, base: 80,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 60 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 25 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 60 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 45 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 60 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 60 }
], ],
}, },
Spec::PowerBBPlusPlus => SpecValues { Spec::PowerBBPlusPlus => SpecValues {
base: 60, base: 80,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 60 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 25 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 60 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 45 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 60 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 60 }
], ],
}, },
Spec::PowerRGPlusPlus => SpecValues { Spec::PowerRGPlusPlus => SpecValues {
base: 40, base: 60,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 20 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 40 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 30 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 40 } SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 45 }
], ],
}, },
Spec::PowerGBPlusPlus => SpecValues { Spec::PowerGBPlusPlus => SpecValues {
base: 40, base: 60,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 20 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 40 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 30 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 40 } SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 45 }
], ],
}, },
Spec::PowerRBPlusPlus => SpecValues { Spec::PowerRBPlusPlus => SpecValues {
base: 40, base: 60,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 40 }, SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 20 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 40 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 30 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 40 } SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 45 }
], ],
}, },
@ -500,167 +500,167 @@ impl Spec {
}, },
Spec::Life => SpecValues { Spec::Life => SpecValues {
base: 100, base: 125,
bonuses: vec![]}, bonuses: vec![]},
Spec::LifeRR=> SpecValues { Spec::LifeRR=> SpecValues {
base: 200, base: 275,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 100 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 75 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 100 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 125 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 100 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 175 }
], ],
}, },
Spec::LifeGG=> SpecValues { Spec::LifeGG=> SpecValues {
base: 200, base: 225,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 100 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 50 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 100 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 75 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 100 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 125 }
], ],
}, },
Spec::LifeBB=> SpecValues { Spec::LifeBB=> SpecValues {
base: 200, base: 275,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 100 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 75 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 100 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 125 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 100 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 175 }
], ],
}, },
Spec::LifeRG=> SpecValues { Spec::LifeRG=> SpecValues {
base: 150, base: 125,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 75 }, SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 50 },
SpecBonus { req: Colours { red: 5, green: 5, 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 } SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 125 }
], ],
}, },
Spec::LifeGB=> SpecValues { Spec::LifeGB=> SpecValues {
base: 150, base: 125,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 75 }, SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 50 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 75 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 75 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 75 } SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 125 }
], ],
}, },
Spec::LifeRB=> SpecValues { Spec::LifeRB=> SpecValues {
base: 150, base: 175,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 75 }, SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 50 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 75 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 75 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 75 } SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 125 }
], ],
}, },
Spec::LifeRRPlus => SpecValues { Spec::LifeRRPlus => SpecValues {
base: 300, base: 500,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 150 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 125 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 150 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 225 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 150 }
],
},
Spec::LifeGGPlus => SpecValues {
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::LifeBBPlus => SpecValues {
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::LifeRGPlus => SpecValues {
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::LifeGBPlus => SpecValues {
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::LifeRBPlus => SpecValues {
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::LifeRRPlusPlus => SpecValues {
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 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 300 }
], ],
}, },
Spec::LifeGGPlusPlus => SpecValues { Spec::LifeGGPlus => SpecValues {
base: 300, base: 400,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 300 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 90 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 300 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 130 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 225 }
],
},
Spec::LifeBBPlus => SpecValues {
base: 500,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 125 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 225 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 300 }
],
},
Spec::LifeRGPlus => SpecValues {
base: 225,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 100 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 150 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 225 }
],
},
Spec::LifeGBPlus => SpecValues {
base: 225,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 100 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 150 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 225 }
],
},
Spec::LifeRBPlus => SpecValues {
base: 350,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 100 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 150 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 225 }
],
},
Spec::LifeRRPlusPlus => SpecValues {
base: 875,
bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 225 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 400 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 525 }
],
},
Spec::LifeGGPlusPlus => SpecValues {
base: 475,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 130 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 225 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 300 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 300 }
], ],
}, },
Spec::LifeBBPlusPlus => SpecValues { Spec::LifeBBPlusPlus => SpecValues {
base: 300, base: 875,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 300 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 225 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 300 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 400 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 300 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 525 }
], ],
}, },
Spec::LifeRGPlusPlus => SpecValues { Spec::LifeRGPlusPlus => SpecValues {
base: 200, base: 400,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 200 }, SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 175 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 200 }, SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 275 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 200 } SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 400 }
], ],
}, },
Spec::LifeGBPlusPlus => SpecValues { Spec::LifeGBPlusPlus => SpecValues {
base: 200, base: 625,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 200 }, SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 175 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 200 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 275 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 200 } SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 400 }
], ],
}, },
Spec::LifeRBPlusPlus => SpecValues { Spec::LifeRBPlusPlus => SpecValues {
base: 200, base: 400,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 200 }, SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 175 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 200 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 275 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 200 } SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 400 }
], ],
}, },
} }