diff --git a/VERSION b/VERSION index 8e03717d..a73b4325 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.5.1 \ No newline at end of file +1.5.2 \ No newline at end of file diff --git a/acp/package.json b/acp/package.json index de966aac..809c390d 100644 --- a/acp/package.json +++ b/acp/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.5.1", + "version": "1.5.2", "description": "", "main": "index.js", "scripts": { diff --git a/client/assets/mnml.logo.trim.svg b/client/assets/mnml.logo.trim.svg new file mode 100644 index 00000000..63f45668 --- /dev/null +++ b/client/assets/mnml.logo.trim.svg @@ -0,0 +1,2626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/assets/styles/game.less b/client/assets/styles/game.less index a8765ba5..5e9586de 100644 --- a/client/assets/styles/game.less +++ b/client/assets/styles/game.less @@ -187,6 +187,11 @@ align-self: center; text-align: center; height: auto; + svg { + display: inline; + height: 1em; + margin-right: 0.1em + } } /* some stupid bug in chrome makes it fill the entire screen */ diff --git a/client/assets/styles/styles.less b/client/assets/styles/styles.less index 2a1d8451..589fc2d8 100644 --- a/client/assets/styles/styles.less +++ b/client/assets/styles/styles.less @@ -288,7 +288,7 @@ li { .logo { height: 2em; - background-image: url("../../src/components/svgs/menu.logo.svg"); + background-image: url("../../assets/mnml.logo.trim.svg"); background-size: contain; background-repeat: no-repeat; background-position: left; diff --git a/client/assets/styles/styles.mobile.css b/client/assets/styles/styles.mobile.css index ec43c8d2..8cc73e6f 100644 --- a/client/assets/styles/styles.mobile.css +++ b/client/assets/styles/styles.mobile.css @@ -3,7 +3,7 @@ font-size: 12pt; padding: 0; grid-template-columns: 1fr; - grid-template-rows: 1fr min-content; + grid-template-rows: 10fr 1fr; grid-template-areas: "main" "footer"; @@ -31,6 +31,9 @@ footer { display: flex; + position: fixed; + bottom: 0; + width: 100%; } #nav-btn, #instance-nav { diff --git a/client/package.json b/client/package.json index bdfacdc3..4fd0e2f6 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.5.1", + "version": "1.5.2", "description": "", "main": "index.js", "scripts": { diff --git a/client/src/animations.utils.jsx b/client/src/animations.utils.jsx index feda087b..39ef17ef 100644 --- a/client/src/animations.utils.jsx +++ b/client/src/animations.utils.jsx @@ -74,8 +74,8 @@ function getObjects(resolution, stages, game, account) { function getSequence(resolution) { if (!resolution.event) 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 (resolution.event[0] === 'Ko') return ['POST_SKILL']; switch (resolution.stages) { case 'AllStages': return ['START_SKILL', 'END_SKILL', 'POST_SKILL']; diff --git a/client/src/components/game.footer.jsx b/client/src/components/game.footer.jsx index 40095d45..101318a4 100644 --- a/client/src/components/game.footer.jsx +++ b/client/src/components/game.footer.jsx @@ -52,6 +52,8 @@ function GameFooter(props) { sendInstanceState, } = props; + if (!game) return false; // ??? + const playerTeam = game.players.find(t => t.id === account.id); function quitClick() { diff --git a/client/src/components/instance.footer.jsx b/client/src/components/instance.footer.jsx index 82e01681..90c3bc37 100644 --- a/client/src/components/instance.footer.jsx +++ b/client/src/components/instance.footer.jsx @@ -32,7 +32,7 @@ function Instance(args) { sendInstanceReady, } = args; - + if (!instance) return false; const rdyClasses = `ready-btn ready`; const readyInfo = instance.phase === 'Lobby' ? 'lobbyReady' diff --git a/client/src/components/play.ctrl.jsx b/client/src/components/play.ctrl.jsx index 4b0ed01c..1f4c0d4c 100644 --- a/client/src/components/play.ctrl.jsx +++ b/client/src/components/play.ctrl.jsx @@ -106,7 +106,7 @@ function JoinButtons(args) { try { document.execCommand('copy'); - infoToast('Invite link copied.'); + infoToast('Invite link copied to clipboard.'); } catch (err) { console.error('link copy error', err); errorToast('Invite link copy error.'); diff --git a/client/src/components/targeting.arrows.jsx b/client/src/components/targeting.arrows.jsx index 6ea195f1..7d401887 100644 --- a/client/src/components/targeting.arrows.jsx +++ b/client/src/components/targeting.arrows.jsx @@ -2,12 +2,15 @@ const preact = require('preact'); const { Component } = require('preact'); const { connect } = require('preact-redux'); // const anime = require('animejs').default; - +const reactStringReplace = require('react-string-replace'); const throttle = require('lodash/throttle'); +const shapes = require('./shapes'); +const { removeTier } = require('../utils'); + const addState = connect( - ({ game, account, animTarget, animating }) => - ({ game, account, animTarget, animating }) + ({ game, account, animTarget, animating, itemInfo }) => + ({ game, account, animTarget, animating, itemInfo }) ); class TargetSvg extends Component { @@ -25,7 +28,7 @@ class TargetSvg extends Component { } render(props, state) { - const { game, account, animating, animTarget } = props; + const { game, account, animating, animTarget, itemInfo } = props; const { width, height } = state; if (!game) return false; // game will be null when battle ends @@ -33,9 +36,17 @@ class TargetSvg extends Component { // just put skill name up if (animating) { 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 ( -

{animTarget.skill}

+
+

{animTarget.skill}

+
{itemSourceDescription}
+
); } diff --git a/ops/package.json b/ops/package.json index 53e29b4b..f0210790 100755 --- a/ops/package.json +++ b/ops/package.json @@ -1,6 +1,6 @@ { "name": "mnml-ops", - "version": "1.5.1", + "version": "1.5.2", "description": "", "main": "index.js", "scripts": { diff --git a/server/Cargo.toml b/server/Cargo.toml index ba774a81..967fccad 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mnml" -version = "1.5.1" +version = "1.5.2" authors = ["ntr "] [dependencies] diff --git a/server/src/construct.rs b/server/src/construct.rs index fdc62ed6..d1f5eab9 100644 --- a/server/src/construct.rs +++ b/server/src/construct.rs @@ -967,9 +967,9 @@ mod tests { construct.apply_modifiers(&player_colours); - assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(50)); - assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(75)); - assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(100)); + 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(50)); + assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(70)); return; } @@ -993,7 +993,7 @@ mod tests { 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.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; } @@ -1039,7 +1039,7 @@ mod tests { 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.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(25)); diff --git a/server/src/skill.rs b/server/src/skill.rs index 3f9b1cbc..a965f7de 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -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() .find(|e| e.effect == Effect::Absorb).unwrap().clone(); match meta { @@ -316,7 +316,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) -> }; } 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() .find(|e| e.effect == Effect::Counter).unwrap().clone(); match meta { @@ -717,27 +717,28 @@ impl Skill { Skill::Attack => 80, // Base Skill::Blast=> 110, // BB - Skill::BlastPlus => 130, // BB - Skill::BlastPlusPlus => 150, // BB + Skill::BlastPlus => 145, // BB + Skill::BlastPlusPlus => 210, // BB Skill::Chaos=> 40, // BR - Skill::ChaosPlus => 50, // BR - Skill::ChaosPlusPlus => 60, // BR + Skill::ChaosPlus => 65, // 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::SiphonTickPlus => 70, - Skill::SiphonTickPlusPlus => 110, + Skill::SiphonTickPlus => 50, + Skill::SiphonTickPlusPlus => 60, Skill::Slay=> 70, // RG - Skill::SlayPlus => 90, - Skill::SlayPlusPlus => 120, + Skill::SlayPlus => 115, + Skill::SlayPlusPlus => 180, Skill::Strike=> 90, //RR - Skill::StrikePlus => 110, - Skill::StrikePlusPlus => 140, + Skill::StrikePlus => 140, + Skill::StrikePlusPlus => 200, // Block Base 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 { let absorb = skill.effect()[0].set_meta(EffectMeta::AddedDamage(amount)); + results.push(Resolution::new(source, target) .event(target.add_effect(reflect_skill, absorb)) .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;; } diff --git a/server/src/spec.rs b/server/src/spec.rs index a809339d..736eaba1 100644 --- a/server/src/spec.rs +++ b/server/src/spec.rs @@ -174,161 +174,161 @@ impl Spec { Spec::PowerRR=> SpecValues { 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 } + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 15 }, + SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 20 } ], }, Spec::PowerGG=> SpecValues { 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 } + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 15 }, + SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 20 } ], }, Spec::PowerBB=> SpecValues { 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 } + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 15 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 20 } ], }, Spec::PowerRG=> SpecValues { - base: 15, + base: 20, 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: 2, green: 2, blue: 0 }, bonus: 5 }, + SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 15 } ], }, Spec::PowerGB=> SpecValues { - base: 15, + base: 20, 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: 2, blue: 2 }, bonus: 5 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 15 } ], }, Spec::PowerRB=> SpecValues { - base: 15, + base: 20, 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: 2, green: 0, blue: 2 }, bonus: 5 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 15 } ], }, Spec::PowerRRPlus => SpecValues { - base: 40, + base: 45, 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 } + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 15 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 25 }, + SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 35 } ], }, Spec::PowerGGPlus => SpecValues { - base: 40, + base: 45, 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 } + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 15 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 25 }, + SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 35 } ], }, Spec::PowerBBPlus => SpecValues { - base: 40, + base: 45, 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 } + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 15 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 25 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 35 } ], }, Spec::PowerRGPlus => SpecValues { - base: 25, + base: 35, 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: 2, green: 2, blue: 0 }, bonus: 10 }, + SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 20 }, SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 25 } ], }, Spec::PowerGBPlus => SpecValues { - base: 25, + base: 35, 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: 2, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 20 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 25 } ], }, Spec::PowerRBPlus => SpecValues { - base: 25, + base: 35, 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: 2, green: 0, blue: 2 }, bonus: 10 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 20 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 25 } ], }, Spec::PowerRRPlusPlus => SpecValues { - base: 60, + base: 80, 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: 5, green: 0, blue: 0 }, bonus: 25 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 45 }, SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 60 } ], }, Spec::PowerGGPlusPlus => SpecValues { - base: 60, + base: 80, 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: 5, blue: 0 }, bonus: 25 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 45 }, SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 60 } ], }, Spec::PowerBBPlusPlus => SpecValues { - base: 60, + base: 80, 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: 5 }, bonus: 25 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 45 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 60 } ], }, Spec::PowerRGPlusPlus => SpecValues { - base: 40, + base: 60, 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 } + SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 20 }, + SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 30 }, + SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 45 } ], }, Spec::PowerGBPlusPlus => SpecValues { - base: 40, + base: 60, bonuses: vec![ - SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 40 }, - SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 40 }, - SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 40 } + SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 20 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 30 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 45 } ], }, Spec::PowerRBPlusPlus => SpecValues { - base: 40, + base: 60, bonuses: vec![ - SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 40 }, - SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 40 }, - SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 40 } + SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 20 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 30 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 45 } ], }, @@ -500,167 +500,167 @@ impl Spec { }, Spec::Life => SpecValues { - base: 100, + base: 125, bonuses: vec![]}, Spec::LifeRR=> SpecValues { - base: 200, + base: 275, 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 } + SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 75 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 125 }, + SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 175 } ], }, Spec::LifeGG=> SpecValues { - base: 200, + base: 225, 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 } + SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 50 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 75 }, + SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 125 } ], }, Spec::LifeBB=> SpecValues { - base: 200, + base: 275, 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 } + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 75 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 125 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 175 } ], }, Spec::LifeRG=> SpecValues { - base: 150, + base: 125, 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: 10, green: 10, blue: 0 }, bonus: 75 } + SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 125 } ], }, Spec::LifeGB=> SpecValues { - base: 150, + base: 125, 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: 10, blue: 10 }, bonus: 75 } + SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 125 } ], }, Spec::LifeRB=> SpecValues { - base: 150, + base: 175, 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: 10, green: 0, blue: 10 }, bonus: 75 } + SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 125 } ], }, Spec::LifeRRPlus => SpecValues { - base: 300, + base: 500, 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::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: 5, green: 0, blue: 0 }, bonus: 125 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 225 }, SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 300 } ], }, - Spec::LifeGGPlusPlus => SpecValues { - base: 300, + Spec::LifeGGPlus => SpecValues { + base: 400, 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: 5, blue: 0 }, bonus: 90 }, + 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 } ], }, Spec::LifeBBPlusPlus => SpecValues { - base: 300, + base: 875, 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 } + SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 225 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 400 }, + SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 525 } ], }, Spec::LifeRGPlusPlus => SpecValues { - base: 200, + base: 400, 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 } + SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 175 }, + SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 275 }, + SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 400 } ], }, Spec::LifeGBPlusPlus => SpecValues { - base: 200, + base: 625, 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 } + SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 175 }, + SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 275 }, + SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 400 } ], }, Spec::LifeRBPlusPlus => SpecValues { - base: 200, + base: 400, 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 } + SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 175 }, + SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 275 }, + SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 400 } ], }, }