Merge branch 'develop' into core

This commit is contained in:
ntr 2019-12-04 15:36:32 +10:00
commit c91c94b656
15 changed files with 674 additions and 361 deletions

View File

@ -1,3 +1,15 @@
## [1.10.1] - 2019-12-04
### Changed
- Reduced the number of items to create + and ++ versions from 3 to 2 (need 4 items total to make a ++)
- Reduced the power of ++ skills to be closer to the power of previous + versions
- Tweaked all values of power specs to reduce their power bonuses
## [1.10.0] - 2019-11-29
### Changed
- Reworked the vbox layout
- Floating combat text and faster animations
- Mobile UI fixes
## [1.9.1] - 2019-11-21 ## [1.9.1] - 2019-11-21
### Fixed ### Fixed
- Fixed Item+ Purchasing Bug - Fixed Item+ Purchasing Bug

200
COMBOS.md Normal file
View File

@ -0,0 +1,200 @@
# Spec / Skill hybrid specs #
Create skills specs by combining an upgraded skills with corresponding colour specs:
Strike (RR + A) can be combined with (PowerRR, SpeedRR, LifeRR)
- Strike + PowerRR -> StrikePower
- Strike + SpeedRR -> StrikeSpeed
- Strike + LifeRR -> StrikeLife
Could also create SkillSpec+ by combining two together.
## Why Skill Specs
- Give tools to players to make cool unique builds
- Passive utility that you work towards
- Specialise in a type of skill
- Repurpose skills that you aren't using much for active use
- More layers of complexity
## Skill specs philosphy
- Should be more interesting than just another stat "multiplier" we have that already (could be placeholder though)
- Passives should help build a theme / identity to the skills
- Specs should be numerically scalable so they can be `balanced` (also for upgraded versions think continuous vs discrete)
- While specialised should be useful for multiple skills
e.g. StrikeSpeed -> Causes your red attack skills to cast on another target on the same team for (X% damage)
A StrikeSpeed should do something for `some` other active skill that isn't strike
- They don't have to be `competely game changing` to be viable / fun / interesting
## Brainstorming on what kind of things skill specs could do
- Passive
- (Abosrb Spec) when you take damage you permanently gain X Power/Speed/Life
- Grant you Amplify with (X% multiplier) when you KO a target
- Convert (X% of your red / blue power -> green power)
- Reduce / Increase damage taken of a certain type (Block type upgrades maybe?)
- Active
- Make a skill cast another skill (strike another guy)
- Apply an effect when you cast a skill
- Change damage / healing / speed of a skill
## The BIG LIST
### Attack Base
Strike
Power
Life
Speed (Repeat skill at X% multiplier)
Chaos
Power
Life
Speed
Heal
Power (Convert X% Red/Blue Power to GreenPower)
Life
Speed
Blast
Power
Life
Speed
Slay
Power
Life
Speed
Siphon
Power
Life
Speed
### Stun Base
Bash
Power
Life
Speed
Sleep
Power
Life
Speed
Ruin
Power
Life
Speed
Link
Power
Life
Speed
Banish
Power
Life
Speed
Break
Power
Life
Speed
### Block Base
Counter
Power
Life
Speed
Reflect
Power
Life
Speed
Purify
Power
Life
Speed
Sustain
Power
Life
Speed
Electrify
Power
Life
Speed
Recharge
Power
Life
Speed
### Buff Base
Intercept
Power
Life
Speed
Triage
Power
Life
Speed
Absorb
Power (Gain X Power when you take damage)
Life (Gain X Life when you take damage)
Speed (Gain X Speed when you take damage)
Amplify
Power
Life
Speed
Haste
Power
Life
Speed
Hybrid
Power
Life
Speed
### Debuff Base
Purge
Power
Life
Speed
Invert
Power
Life
Speed
Restrict
Power
Life
Speed
Silence
Power
Life
Speed
Curse
Power
Life
Speed
Decay
Power
Life
Speed

67
ROADMAP.md Normal file
View File

@ -0,0 +1,67 @@
### Road Map ###
# NOW Phase 1 (Dev -> Alpha)
Form company structure
Brainstorm Names?
Finalise documents
Game
Server T2 / T3 / Custom Specs
Any other outstanding "major" features ???
# Phase 2 (Alpha -> Beta)
Friends / Word of mouth testing
Server balance adjustments based on data
Client improvements based on feedback
Combat animations
Make in game shop
Payment processors / CC etc
Handler for game purchases
MTX - Construct Avatars
MTX - Skill anims
Setup company bank accounts
Accounting system - Xero etc
# Phase 3 (Beta -> Release)
Player Events e.g. chatwheel
Matchmaking + ELO / Leaderboard
Game skill private fields
# Phase 4 (Release -> Full Shill mode)
Refine artwork, icons, scaling etc
Music
Skill Specs
Some sort viewable combat log
Marketing materials
Videos
Twitch
Advertisments?
Information
# china shit
You need to read the details more carefully. Playsaurus messed up:
1. They launched in China without registering a trademark
2. A competitor registered the trademark after 3 months of their launch
3. They continued to sell for 4 years under a name trademarked by another company, making $73,000+ yearly from that one country
Now, they complain about it on Reddit, even though China is a 'First to File' company.
The fault lies entirely with Playsaurus, nothing illegal occurred here.
https://www.trademarknow.com/blog/first-to-file-versus-first...
This situation could have occurred in many other countries - the difference is probably that the competitor is content to just sell in China, under a Chinese name, whereas products sold anywhere else would need to use the English name.

View File

@ -1 +1 @@
1.10.0 1.10.1

View File

@ -2,23 +2,38 @@
## NOW ## NOW
_ntr_ _ntr_
* effects rework * can't reset password without knowing password =\
Siphon = [
Apply(Siphon(2T), target)
Apply(Siphoning(2T), source)
Skill(SiphonTick, source, target)
DamageBlue(50% BluePower, target),
]
* change cooldowns to delay & recharge * change cooldowns to delay & recharge
- delay is cooldown before skill can first be used - delay is cooldown before skill can first be used
- recharge is cooldown after using skill - recharge is cooldown after using skill
- every x speed reduces delay of skills - every x speed reduces delay of skills
* audio
* animation effects
* vbox combine / buy / equip etc
* background music
* effects rework
Siphon =
[
DamageBlue(50%),
Apply(
Siphon(2T)
- Siphoning(2T)
),
]
Hexagon Set
- Pick Colour
- Random Walk
- Draw hex
- Increase intensity for each visit
_mashy_ _mashy_
* rebalance
* speed specs
* life specs
* represent construct colours during game phase (try %bar or dots) * represent construct colours during game phase (try %bar or dots)
* reduce combos from 3->2 and rebalance
_external_ _external_
* Graphics * Graphics
@ -38,36 +53,7 @@ _tba_
## SOON ## SOON
* can't reset password without knowing password =\ * Skill / Spec hybrids - SEE COMBOS.md
* audio
* animation effects
* vbox combine / buy / equip etc
* background music
Hexagon Set
- Pick Colour
- Random Walk
- Draw hex
- Increase intensity for each visit
* combo rework
- reduce number of items for creating t2/t3 items from 3 -> 2
- add lost complexity by adding skill spec items
- Created by combining a skill with corresponding spec
e.g.
- Strike + PowerRR -> StrikePower (Will be the power symbol with strike text under)
- Construct does Y% more damage with Strike
- Strike + SpeedRR -> StrikeSpeed (strike has Y% more speed)
- Strike + LifeRR -> StrikeLife (Strike recharges X% of damage as red life)
- Can also work as module style passive keystones
* troll life -> dmg -> Invert life spec?
* prince of peace
* bonus healing / no damage -> Heal power spec?
* fuck magic -> Some sort of reflect spec?
* empower on ko -> Amplify + Power spec
* elo + leaderboards * elo + leaderboards
## LATER ## LATER

View File

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

View File

@ -1,6 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><style>@font-face {
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><style>@font-face {
font-family: octicons-anchor; font-family: octicons-anchor;
src: url(https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.woff) format('woff'); src: url(https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.woff) format('woff');
} }
@ -733,6 +731,24 @@ pre {
} }
} }
</style><title>CHANGELOG</title></head><body><article class="markdown-body"><h2> </style><title>CHANGELOG</title></head><body><article class="markdown-body"><h2>
<a id="user-content-1101---2019-12-04" class="anchor" href="#1101---2019-12-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.10.1] - 2019-12-04</h2>
<h3>
<a id="user-content-changed" class="anchor" href="#changed" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul>
<li>Reduced the number of items to create + and ++ versions from 3 to 2 (need 4 items total to make a ++)</li>
<li>Reduced the power of ++ skills to be closer to the power of previous + versions</li>
<li>Tweaked all values of power specs to reduce their power bonuses</li>
</ul>
<h2>
<a id="user-content-1100---2019-11-29" class="anchor" href="#1100---2019-11-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.10.0] - 2019-11-29</h2>
<h3>
<a id="user-content-changed-1" class="anchor" href="#changed-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul>
<li>Reworked the vbox layout</li>
<li>Floating combat text and faster animations</li>
<li>Mobile UI fixes</li>
</ul>
<h2>
<a id="user-content-191---2019-11-21" class="anchor" href="#191---2019-11-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.9.1] - 2019-11-21</h2> <a id="user-content-191---2019-11-21" class="anchor" href="#191---2019-11-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.9.1] - 2019-11-21</h2>
<h3> <h3>
<a id="user-content-fixed" class="anchor" href="#fixed" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fixed</h3> <a id="user-content-fixed" class="anchor" href="#fixed" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fixed</h3>
@ -742,7 +758,7 @@ pre {
<h2> <h2>
<a id="user-content-190---2019-11-21" class="anchor" href="#190---2019-11-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.9.0] - 2019-11-21</h2> <a id="user-content-190---2019-11-21" class="anchor" href="#190---2019-11-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.9.0] - 2019-11-21</h2>
<h3> <h3>
<a id="user-content-changed" class="anchor" href="#changed" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-2" class="anchor" href="#changed-2" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li>VBOX <li>VBOX
<ul> <ul>
@ -794,7 +810,7 @@ pre {
<li>Resizing of vbox when you buy / create certain items</li> <li>Resizing of vbox when you buy / create certain items</li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-1" class="anchor" href="#changed-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-3" class="anchor" href="#changed-3" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li>Automatically shows a preview of combo item when you have 3 items selected for combining</li> <li>Automatically shows a preview of combo item when you have 3 items selected for combining</li>
<li>Only highlight the first available item slot when equipping</li> <li>Only highlight the first available item slot when equipping</li>
@ -826,7 +842,7 @@ pre {
<li>An issue where skills would not be put on cooldown after being used.</li> <li>An issue where skills would not be put on cooldown after being used.</li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-2" class="anchor" href="#changed-2" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-4" class="anchor" href="#changed-4" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Game phase</p> <p>Game phase</p>
@ -893,7 +909,7 @@ pre {
</li> </li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-3" class="anchor" href="#changed-3" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-5" class="anchor" href="#changed-5" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Construct life changed</p> <p>Construct life changed</p>
@ -979,7 +995,7 @@ pre {
</li> </li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-4" class="anchor" href="#changed-4" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-6" class="anchor" href="#changed-6" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Vbox phase</p> <p>Vbox phase</p>
@ -1125,7 +1141,7 @@ pre {
<li>Player width styling</li> <li>Player width styling</li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-5" class="anchor" href="#changed-5" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-7" class="anchor" href="#changed-7" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li>Improved wiggle animation</li> <li>Improved wiggle animation</li>
<li>Intercept is now considered defensive by bots</li> <li>Intercept is now considered defensive by bots</li>
@ -1134,7 +1150,7 @@ pre {
<h2> <h2>
<a id="user-content-164---2019-10-24" class="anchor" href="#164---2019-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.6.4] - 2019-10-24</h2> <a id="user-content-164---2019-10-24" class="anchor" href="#164---2019-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.6.4] - 2019-10-24</h2>
<h3> <h3>
<a id="user-content-changed-6" class="anchor" href="#changed-6" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-8" class="anchor" href="#changed-8" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li>Animations processing on client side reduced.</li> <li>Animations processing on client side reduced.</li>
</ul> </ul>
@ -1176,7 +1192,7 @@ pre {
<li>Subscriber chat!</li> <li>Subscriber chat!</li>
</ul> </ul>
<h3> <h3>
<a id="user-content-changed-7" class="anchor" href="#changed-7" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-9" class="anchor" href="#changed-9" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Made available skill / effect information during the combat phase.</p> <p>Made available skill / effect information during the combat phase.</p>
@ -1208,7 +1224,7 @@ pre {
<a id="user-content-156---2019-10-17" class="anchor" href="#156---2019-10-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.5.6] - 2019-10-17</h2> <a id="user-content-156---2019-10-17" class="anchor" href="#156---2019-10-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.5.6] - 2019-10-17</h2>
<p>We've updated the UI during the vbox / buy phase to give a better indication of valid actions.</p> <p>We've updated the UI during the vbox / buy phase to give a better indication of valid actions.</p>
<h3> <h3>
<a id="user-content-changed-8" class="anchor" href="#changed-8" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-10" class="anchor" href="#changed-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Borders for skill combo's represent the base colours.</p> <p>Borders for skill combo's represent the base colours.</p>
@ -1234,7 +1250,7 @@ pre {
<h2> <h2>
<a id="user-content-155---2019-10-15" class="anchor" href="#155---2019-10-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.5.5] - 2019-10-15</h2> <a id="user-content-155---2019-10-15" class="anchor" href="#155---2019-10-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>[1.5.5] - 2019-10-15</h2>
<h3> <h3>
<a id="user-content-changed-9" class="anchor" href="#changed-9" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3> <a id="user-content-changed-11" class="anchor" href="#changed-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changed</h3>
<ul> <ul>
<li> <li>
<p>Purge</p> <p>Purge</p>

View File

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

View File

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

View File

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

View File

@ -223,7 +223,7 @@ impl Construct {
red_life: ConstructStat { base: 125, value: 125, max: 125, stat: Stat::RedLife }, red_life: ConstructStat { base: 125, value: 125, max: 125, stat: Stat::RedLife },
blue_power: ConstructStat { base: 320, value: 320, max: 320, stat: Stat::BluePower }, blue_power: ConstructStat { base: 320, value: 320, max: 320, stat: Stat::BluePower },
blue_life: ConstructStat { base: 125, value: 125, max: 125, stat: Stat::BlueLife }, blue_life: ConstructStat { base: 125, value: 125, max: 125, stat: Stat::BlueLife },
green_power: ConstructStat { base: 300, value: 300, max: 300, stat: Stat::GreenPower }, green_power: ConstructStat { base: 320, value: 320, max: 320, stat: Stat::GreenPower },
green_life: ConstructStat { base: 800, value: 800, max: 800, stat: Stat::GreenLife }, green_life: ConstructStat { base: 800, value: 800, max: 800, stat: Stat::GreenLife },
speed: ConstructStat { base: 100, value: 100, max: 100, stat: Stat::Speed }, speed: ConstructStat { base: 100, value: 100, max: 100, stat: Stat::Speed },
// evasion: ConstructStat { base: 0, value: 0, max: 0, stat: Stat::Evasion }, // evasion: ConstructStat { base: 0, value: 0, max: 0, stat: Stat::Evasion },
@ -1031,9 +1031,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(35)); assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(15));
assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(50)); assert!(construct.green_power.value == construct.green_power.base + construct.green_power.base.pct(24));
assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(70)); assert!(construct.blue_power.value == construct.blue_power.base + construct.blue_power.base.pct(37));
return; return;
} }
@ -1082,7 +1082,7 @@ mod tests {
let colours = Colours::from_construct(&construct); let colours = Colours::from_construct(&construct);
assert!(colours.red == 4); assert!(colours.red == 4);
assert!(colours.blue == 20); assert!(colours.blue == 10);
assert!(colours.green == 2); assert!(colours.green == 2);
} }
@ -1103,9 +1103,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(35)); assert!(construct.red_power.value == construct.red_power.base + construct.red_power.base.pct(15));
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(10));
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(10));
return; return;
} }

View File

@ -959,37 +959,51 @@ impl Item {
Item::Amplify => vec![Item::Buff, Item::Red, Item::Blue], Item::Amplify => vec![Item::Buff, Item::Red, Item::Blue],
Item::Haste => vec![Item::Buff, Item::Red, Item::Green], Item::Haste => vec![Item::Buff, Item::Red, Item::Green],
Item::Hybrid => vec![Item::Buff, Item::Green, Item::Blue], Item::Hybrid => vec![Item::Buff, Item::Green, Item::Blue],
Item::InterceptPlus => vec![Item::Intercept, Item::Intercept, Item::Intercept],
Item::InterceptPlusPlus => vec![Item::InterceptPlus, Item::InterceptPlus, Item::InterceptPlus],
Item::TriagePlus => vec![Item::Triage, Item::Triage, Item::Triage],
Item::TriagePlusPlus => vec![Item::TriagePlus, Item::TriagePlus, Item::TriagePlus],
Item::HastePlus => vec![Item::Haste, Item::Haste, Item::Haste],
Item::HastePlusPlus => vec![Item::HastePlus, Item::HastePlus, Item::HastePlus],
Item::HybridPlus => vec![Item::Hybrid, Item::Hybrid, Item::Hybrid],
Item::HybridPlusPlus => vec![Item::HybridPlus, Item::HybridPlus, Item::HybridPlus],
Item::AbsorbPlus => vec![Item::Absorb, Item::Absorb, Item::Absorb],
Item::AbsorbPlusPlus => vec![Item::AbsorbPlus, Item::AbsorbPlus, Item::AbsorbPlus],
Item::AmplifyPlus => vec![Item::Amplify, Item::Amplify, Item::Amplify],
Item::AmplifyPlusPlus => vec![Item::AmplifyPlus, Item::AmplifyPlus, Item::AmplifyPlus],
Item::Purge => vec![Item::Debuff, Item::Green, Item::Green], // Needs flavour Item::InterceptPlus => vec![Item::Intercept, Item::Intercept],
Item::InterceptPlusPlus => vec![Item::InterceptPlus, Item::InterceptPlus],
Item::TriagePlus => vec![Item::Triage, Item::Triage],
Item::TriagePlusPlus => vec![Item::TriagePlus, Item::TriagePlus],
Item::AbsorbPlus => vec![Item::Absorb, Item::Absorb],
Item::AbsorbPlusPlus => vec![Item::AbsorbPlus, Item::AbsorbPlus],
Item::AmplifyPlus => vec![Item::Amplify, Item::Amplify],
Item::AmplifyPlusPlus => vec![Item::AmplifyPlus, Item::AmplifyPlus],
Item::HastePlus => vec![Item::Haste, Item::Haste],
Item::HastePlusPlus => vec![Item::HastePlus, Item::HastePlus],
Item::HybridPlus => vec![Item::Hybrid, Item::Hybrid],
Item::HybridPlusPlus => vec![Item::HybridPlus, Item::HybridPlus],
Item::Purge => vec![Item::Debuff, Item::Green, Item::Green],
Item::Invert => vec![Item::Debuff, Item::Red, Item::Green], Item::Invert => vec![Item::Debuff, Item::Red, Item::Green],
Item::Restrict => vec![Item::Debuff, Item::Red, Item::Red], Item::Restrict => vec![Item::Debuff, Item::Red, Item::Red],
Item::Silence => vec![Item::Debuff, Item::Blue, Item::Blue], Item::Silence => vec![Item::Debuff, Item::Blue, Item::Blue],
Item::Curse => vec![Item::Debuff, Item::Red, Item::Blue], Item::Curse => vec![Item::Debuff, Item::Red, Item::Blue],
Item::Decay => vec![Item::Debuff, Item::Green, Item::Blue], Item::Decay => vec![Item::Debuff, Item::Green, Item::Blue],
Item::RestrictPlus => vec![Item::Restrict, Item::Restrict, Item::Restrict],
Item::RestrictPlusPlus => vec![Item::RestrictPlus, Item::RestrictPlus, Item::RestrictPlus], Item::PurgePlus => vec![Item::Purge, Item::Purge],
Item::PurgePlus => vec![Item::Purge, Item::Purge, Item::Purge], // Needs flavour Item::PurgePlusPlus => vec![Item::PurgePlus, Item::PurgePlus],
Item::PurgePlusPlus => vec![Item::PurgePlus, Item::PurgePlus, Item::PurgePlus], // Needs flavour
Item::SilencePlus => vec![Item::Silence, Item::Silence, Item::Silence], Item::InvertPlus => vec![Item::Invert, Item::Invert],
Item::SilencePlusPlus => vec![Item::SilencePlus, Item::SilencePlus, Item::SilencePlus], Item::InvertPlusPlus => vec![Item::InvertPlus, Item::InvertPlus],
Item::CursePlus => vec![Item::Curse, Item::Curse, Item::Curse],
Item::CursePlusPlus => vec![Item::CursePlus, Item::CursePlus, Item::CursePlus], Item::RestrictPlus => vec![Item::Restrict, Item::Restrict],
Item::DecayPlus => vec![Item::Decay, Item::Decay, Item::Decay], Item::RestrictPlusPlus => vec![Item::RestrictPlus, Item::RestrictPlus],
Item::DecayPlusPlus => vec![Item::DecayPlus, Item::DecayPlus, Item::DecayPlus],
Item::InvertPlus => vec![Item::Invert, Item::Invert, Item::Invert], Item::SilencePlus => vec![Item::Silence, Item::Silence],
Item::InvertPlusPlus => vec![Item::InvertPlus, Item::InvertPlus, Item::InvertPlus], Item::SilencePlusPlus => vec![Item::SilencePlus, Item::SilencePlus],
Item::CursePlus => vec![Item::Curse, Item::Curse],
Item::CursePlusPlus => vec![Item::CursePlus, Item::CursePlus],
Item::DecayPlus => vec![Item::Decay, Item::Decay],
Item::DecayPlusPlus => vec![Item::DecayPlus, Item::DecayPlus],
Item::Counter => vec![Item::Block, Item::Red, Item::Red], Item::Counter => vec![Item::Block, Item::Red, Item::Red],
Item::Reflect => vec![Item::Block, Item::Green, Item::Blue], Item::Reflect => vec![Item::Block, Item::Green, Item::Blue],
@ -997,18 +1011,24 @@ impl Item {
Item::Sustain => vec![Item::Block, Item::Red, Item::Green], Item::Sustain => vec![Item::Block, Item::Red, Item::Green],
Item::Electrify => vec![Item::Block, Item::Blue, Item::Blue], Item::Electrify => vec![Item::Block, Item::Blue, Item::Blue],
Item::Recharge => vec![Item::Block, Item::Red, Item::Blue], Item::Recharge => vec![Item::Block, Item::Red, Item::Blue],
Item::CounterPlus => vec![Item::Counter, Item::Counter, Item::Counter],
Item::CounterPlusPlus => vec![Item::CounterPlus, Item::CounterPlus, Item::CounterPlus], // Add red recharge Item::CounterPlus => vec![Item::Counter, Item::Counter],
Item::PurifyPlus => vec![Item::Purify, Item::Purify, Item::Purify], Item::CounterPlusPlus => vec![Item::CounterPlus, Item::CounterPlus],
Item::PurifyPlusPlus => vec![Item::PurifyPlus, Item::PurifyPlus, Item::PurifyPlus],
Item::ElectrifyPlus => vec![Item::Electrify, Item::Electrify, Item::Electrify], Item::PurifyPlus => vec![Item::Purify, Item::Purify],
Item::ElectrifyPlusPlus => vec![Item::ElectrifyPlus, Item::ElectrifyPlus, Item::ElectrifyPlus], Item::PurifyPlusPlus => vec![Item::PurifyPlus, Item::PurifyPlus],
Item::SustainPlus => vec![Item::Sustain, Item::Sustain, Item::Sustain],
Item::SustainPlusPlus => vec![Item::SustainPlus, Item::SustainPlus, Item::SustainPlus], Item::ElectrifyPlus => vec![Item::Electrify, Item::Electrify],
Item::ReflectPlus => vec![Item::Reflect, Item::Reflect, Item::Reflect], Item::ElectrifyPlusPlus => vec![Item::ElectrifyPlus, Item::ElectrifyPlus],
Item::ReflectPlusPlus => vec![Item::ReflectPlus, Item::ReflectPlus, Item::ReflectPlus],
Item::RechargePlus => vec![Item::Recharge, Item::Recharge, Item::Recharge], Item::SustainPlus => vec![Item::Sustain, Item::Sustain],
Item::RechargePlusPlus => vec![Item::RechargePlus, Item::RechargePlus, Item::RechargePlus], Item::SustainPlusPlus => vec![Item::SustainPlus, Item::SustainPlus],
Item::ReflectPlus => vec![Item::Reflect, Item::Reflect],
Item::ReflectPlusPlus => vec![Item::ReflectPlus, Item::ReflectPlus, ],
Item::RechargePlus => vec![Item::Recharge, Item::Recharge],
Item::RechargePlusPlus => vec![Item::RechargePlus, Item::RechargePlus],
Item::Bash => vec![Item::Stun, Item::Red, Item::Red], Item::Bash => vec![Item::Stun, Item::Red, Item::Red],
Item::Sleep => vec![Item::Stun, Item::Green, Item::Green], Item::Sleep => vec![Item::Stun, Item::Green, Item::Green],
@ -1016,18 +1036,25 @@ impl Item {
Item::Link => vec![Item::Stun, Item::Blue, Item::Green], Item::Link => vec![Item::Stun, Item::Blue, Item::Green],
Item::Banish => vec![Item::Stun, Item::Red, Item::Blue], Item::Banish => vec![Item::Stun, Item::Red, Item::Blue],
Item::Break => vec![Item::Stun, Item::Red, Item::Green], Item::Break => vec![Item::Stun, Item::Red, Item::Green],
Item::BashPlus => vec![Item::Bash, Item::Bash, Item::Bash],
Item::BashPlusPlus => vec![Item::BashPlus, Item::BashPlus, Item::BashPlus], Item::BashPlus => vec![Item::Bash, Item::Bash],
Item::SleepPlus => vec![Item::Sleep, Item::Sleep, Item::Sleep], Item::BashPlusPlus => vec![Item::BashPlus, Item::BashPlus],
Item::SleepPlusPlus => vec![Item::SleepPlus, Item::SleepPlus, Item::SleepPlus],
Item::RuinPlus => vec![Item::Ruin, Item::Ruin, Item::Ruin], Item::SleepPlus => vec![Item::Sleep, Item::Sleep],
Item::RuinPlusPlus => vec![Item::RuinPlus, Item::RuinPlus, Item::RuinPlus], Item::SleepPlusPlus => vec![Item::SleepPlus, Item::SleepPlus,],
Item::BreakPlus => vec![Item::Break, Item::Break, Item::Break],
Item::BreakPlusPlus => vec![Item::BreakPlus, Item::BreakPlus, Item::BreakPlus], Item::RuinPlus => vec![Item::Ruin, Item::Ruin],
Item::LinkPlus => vec![Item::Link, Item::Link, Item::Link], Item::RuinPlusPlus => vec![Item::RuinPlus, Item::RuinPlus],
Item::LinkPlusPlus => vec![Item::LinkPlus, Item::LinkPlus, Item::LinkPlus],
Item::BanishPlus => vec![Item::Banish, Item::Banish, Item::Banish], Item::LinkPlus => vec![Item::Link, Item::Link],
Item::BanishPlusPlus => vec![Item::BanishPlus, Item::BanishPlus, Item::BanishPlus], Item::LinkPlusPlus => vec![Item::LinkPlus, Item::LinkPlus],
Item::BanishPlus => vec![Item::Banish, Item::Banish],
Item::BanishPlusPlus => vec![Item::BanishPlus, Item::BanishPlus],
Item::BreakPlus => vec![Item::Break, Item::Break],
Item::BreakPlusPlus => vec![Item::BreakPlus, Item::BreakPlus],
Item::Strike => vec![Item::Attack, Item::Red, Item::Red], Item::Strike => vec![Item::Attack, Item::Red, Item::Red],
Item::Chaos => vec![Item::Attack, Item::Red, Item::Blue], Item::Chaos => vec![Item::Attack, Item::Red, Item::Blue],
@ -1035,18 +1062,24 @@ impl Item {
Item::Blast => vec![Item::Attack, Item::Blue, Item::Blue], Item::Blast => vec![Item::Attack, Item::Blue, Item::Blue],
Item::Slay => vec![Item::Attack, Item::Red, Item::Green], Item::Slay => vec![Item::Attack, Item::Red, Item::Green],
Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue], Item::Siphon => vec![Item::Attack, Item::Green, Item::Blue],
Item::StrikePlus => vec![Item::Strike, Item::Strike, Item::Strike],
Item::StrikePlusPlus => vec![Item::StrikePlus, Item::StrikePlus, Item::StrikePlus], Item::StrikePlus => vec![Item::Strike, Item::Strike],
Item::HealPlus => vec![Item::Heal, Item::Heal, Item::Heal], Item::StrikePlusPlus => vec![Item::StrikePlus, Item::StrikePlus],
Item::HealPlusPlus => vec![Item::HealPlus, Item::HealPlus, Item::HealPlus],
Item::BlastPlus => vec![Item::Blast, Item::Blast, Item::Blast], Item::ChaosPlus => vec![Item::Chaos, Item::Chaos],
Item::BlastPlusPlus => vec![Item::BlastPlus, Item::BlastPlus, Item::BlastPlus], Item::ChaosPlusPlus => vec![Item::ChaosPlus, Item::ChaosPlus],
Item::SlayPlus => vec![Item::Slay, Item::Slay, Item::Slay],
Item::SlayPlusPlus => vec![Item::SlayPlus, Item::SlayPlus, Item::SlayPlus], Item::HealPlus => vec![Item::Heal, Item::Heal],
Item::SiphonPlus => vec![Item::Siphon, Item::Siphon, Item::Siphon], Item::HealPlusPlus => vec![Item::HealPlus, Item::HealPlus],
Item::SiphonPlusPlus => vec![Item::SiphonPlus, Item::SiphonPlus, Item::SiphonPlus],
Item::ChaosPlus => vec![Item::Chaos, Item::Chaos, Item::Chaos], Item::BlastPlus => vec![Item::Blast, Item::Blast],
Item::ChaosPlusPlus => vec![Item::ChaosPlus, Item::ChaosPlus, Item::ChaosPlus], Item::BlastPlusPlus => vec![Item::BlastPlus, Item::BlastPlus],
Item::SlayPlus => vec![Item::Slay, Item::Slay],
Item::SlayPlusPlus => vec![Item::SlayPlus, Item::SlayPlus],
Item::SiphonPlus => vec![Item::Siphon, Item::Siphon],
Item::SiphonPlusPlus => vec![Item::SiphonPlus, Item::SiphonPlus],
Item::PowerRR => vec![Item::Power, Item::Red, Item::Red], Item::PowerRR => vec![Item::Power, Item::Red, Item::Red],
Item::PowerGG => vec![Item::Power, Item::Green, Item::Green], Item::PowerGG => vec![Item::Power, Item::Green, Item::Green],
@ -1054,18 +1087,18 @@ impl Item {
Item::PowerRG => vec![Item::Power, Item::Red, Item::Green], Item::PowerRG => vec![Item::Power, Item::Red, Item::Green],
Item::PowerGB => vec![Item::Power, Item::Green, Item::Blue], Item::PowerGB => vec![Item::Power, Item::Green, Item::Blue],
Item::PowerRB => vec![Item::Power, Item::Red, Item::Blue], Item::PowerRB => vec![Item::Power, Item::Red, Item::Blue],
Item::PowerRRPlus => vec![Item::PowerRR, Item::PowerRR, Item::PowerRR], Item::PowerRRPlus => vec![Item::PowerRR, Item::PowerRR],
Item::PowerGGPlus => vec![Item::PowerGG, Item::PowerGG, Item::PowerGG], Item::PowerGGPlus => vec![Item::PowerGG, Item::PowerGG],
Item::PowerBBPlus => vec![Item::PowerBB, Item::PowerBB, Item::PowerBB], Item::PowerBBPlus => vec![Item::PowerBB, Item::PowerBB],
Item::PowerRGPlus => vec![Item::PowerRG, Item::PowerRG, Item::PowerRG], Item::PowerRGPlus => vec![Item::PowerRG, Item::PowerRG],
Item::PowerGBPlus => vec![Item::PowerGB, Item::PowerGB, Item::PowerGB], Item::PowerGBPlus => vec![Item::PowerGB, Item::PowerGB],
Item::PowerRBPlus => vec![Item::PowerRB, Item::PowerRB, Item::PowerRB], Item::PowerRBPlus => vec![Item::PowerRB, Item::PowerRB],
Item::PowerRRPlusPlus => vec![Item::PowerRRPlus, Item::PowerRRPlus, Item::PowerRRPlus], Item::PowerRRPlusPlus => vec![Item::PowerRRPlus, Item::PowerRRPlus],
Item::PowerGGPlusPlus => vec![Item::PowerGGPlus, Item::PowerGGPlus, Item::PowerGGPlus], Item::PowerGGPlusPlus => vec![Item::PowerGGPlus, Item::PowerGGPlus],
Item::PowerBBPlusPlus => vec![Item::PowerBBPlus, Item::PowerBBPlus, Item::PowerBBPlus], Item::PowerBBPlusPlus => vec![Item::PowerBBPlus, Item::PowerBBPlus],
Item::PowerRGPlusPlus => vec![Item::PowerRGPlus, Item::PowerRGPlus, Item::PowerRGPlus], Item::PowerRGPlusPlus => vec![Item::PowerRGPlus, Item::PowerRGPlus],
Item::PowerGBPlusPlus => vec![Item::PowerGBPlus, Item::PowerGBPlus, Item::PowerGBPlus], Item::PowerGBPlusPlus => vec![Item::PowerGBPlus, Item::PowerGBPlus],
Item::PowerRBPlusPlus => vec![Item::PowerRBPlus, Item::PowerRBPlus, Item::PowerRBPlus], Item::PowerRBPlusPlus => vec![Item::PowerRBPlus, Item::PowerRBPlus],
Item::LifeRR => vec![Item::Life, Item::Red, Item::Red], Item::LifeRR => vec![Item::Life, Item::Red, Item::Red],
Item::LifeGG => vec![Item::Life, Item::Green, Item::Green], Item::LifeGG => vec![Item::Life, Item::Green, Item::Green],
@ -1073,18 +1106,18 @@ impl Item {
Item::LifeRG => vec![Item::Life, Item::Red, Item::Green], Item::LifeRG => vec![Item::Life, Item::Red, Item::Green],
Item::LifeGB => vec![Item::Life, Item::Green, Item::Blue], Item::LifeGB => vec![Item::Life, Item::Green, Item::Blue],
Item::LifeRB => vec![Item::Life, Item::Red, Item::Blue], Item::LifeRB => vec![Item::Life, Item::Red, Item::Blue],
Item::LifeRRPlus => vec![Item::LifeRR, Item::LifeRR, Item::LifeRR], Item::LifeRRPlus => vec![Item::LifeRR, Item::LifeRR],
Item::LifeGGPlus => vec![Item::LifeGG, Item::LifeGG, Item::LifeGG], Item::LifeGGPlus => vec![Item::LifeGG, Item::LifeGG],
Item::LifeBBPlus => vec![Item::LifeBB, Item::LifeBB, Item::LifeBB], Item::LifeBBPlus => vec![Item::LifeBB, Item::LifeBB],
Item::LifeRGPlus => vec![Item::LifeRG, Item::LifeRG, Item::LifeRG], Item::LifeRGPlus => vec![Item::LifeRG, Item::LifeRG],
Item::LifeGBPlus => vec![Item::LifeGB, Item::LifeGB, Item::LifeGB], Item::LifeGBPlus => vec![Item::LifeGB, Item::LifeGB],
Item::LifeRBPlus => vec![Item::LifeRB, Item::LifeRB, Item::LifeRB], Item::LifeRBPlus => vec![Item::LifeRB, Item::LifeRB],
Item::LifeRRPlusPlus => vec![Item::LifeRRPlus, Item::LifeRRPlus, Item::LifeRRPlus], Item::LifeRRPlusPlus => vec![Item::LifeRRPlus, Item::LifeRRPlus],
Item::LifeGGPlusPlus => vec![Item::LifeGGPlus, Item::LifeGGPlus, Item::LifeGGPlus], Item::LifeGGPlusPlus => vec![Item::LifeGGPlus, Item::LifeGGPlus],
Item::LifeBBPlusPlus => vec![Item::LifeBBPlus, Item::LifeBBPlus, Item::LifeBBPlus], Item::LifeBBPlusPlus => vec![Item::LifeBBPlus, Item::LifeBBPlus],
Item::LifeRGPlusPlus => vec![Item::LifeRGPlus, Item::LifeRGPlus, Item::LifeRGPlus], Item::LifeRGPlusPlus => vec![Item::LifeRGPlus, Item::LifeRGPlus],
Item::LifeGBPlusPlus => vec![Item::LifeGBPlus, Item::LifeGBPlus, Item::LifeGBPlus], Item::LifeGBPlusPlus => vec![Item::LifeGBPlus, Item::LifeGBPlus],
Item::LifeRBPlusPlus => vec![Item::LifeRBPlus, Item::LifeRBPlus, Item::LifeRBPlus], Item::LifeRBPlusPlus => vec![Item::LifeRBPlus, Item::LifeRBPlus],
Item::SpeedRR => vec![Item::Speed, Item::Red, Item::Red], Item::SpeedRR => vec![Item::Speed, Item::Red, Item::Red],
Item::SpeedGG => vec![Item::Speed, Item::Green, Item::Green], Item::SpeedGG => vec![Item::Speed, Item::Green, Item::Green],
@ -1092,18 +1125,18 @@ impl Item {
Item::SpeedRG => vec![Item::Speed, Item::Red, Item::Green], Item::SpeedRG => vec![Item::Speed, Item::Red, Item::Green],
Item::SpeedGB => vec![Item::Speed, Item::Green, Item::Blue], Item::SpeedGB => vec![Item::Speed, Item::Green, Item::Blue],
Item::SpeedRB => vec![Item::Speed, Item::Red, Item::Blue], Item::SpeedRB => vec![Item::Speed, Item::Red, Item::Blue],
Item::SpeedRRPlus => vec![Item::SpeedRR, Item::SpeedRR, Item::SpeedRR], Item::SpeedRRPlus => vec![Item::SpeedRR, Item::SpeedRR],
Item::SpeedGGPlus => vec![Item::SpeedGG, Item::SpeedGG, Item::SpeedGG], Item::SpeedGGPlus => vec![Item::SpeedGG, Item::SpeedGG],
Item::SpeedBBPlus => vec![Item::SpeedBB, Item::SpeedBB, Item::SpeedBB], Item::SpeedBBPlus => vec![Item::SpeedBB, Item::SpeedBB],
Item::SpeedRGPlus => vec![Item::SpeedRG, Item::SpeedRG, Item::SpeedRG], Item::SpeedRGPlus => vec![Item::SpeedRG, Item::SpeedRG],
Item::SpeedGBPlus => vec![Item::SpeedGB, Item::SpeedGB, Item::SpeedGB], Item::SpeedGBPlus => vec![Item::SpeedGB, Item::SpeedGB],
Item::SpeedRBPlus => vec![Item::SpeedRB, Item::SpeedRB, Item::SpeedRB], Item::SpeedRBPlus => vec![Item::SpeedRB, Item::SpeedRB],
Item::SpeedRRPlusPlus => vec![Item::SpeedRRPlus, Item::SpeedRRPlus, Item::SpeedRRPlus], Item::SpeedRRPlusPlus => vec![Item::SpeedRRPlus, Item::SpeedRRPlus],
Item::SpeedGGPlusPlus => vec![Item::SpeedGGPlus, Item::SpeedGGPlus, Item::SpeedGGPlus], Item::SpeedGGPlusPlus => vec![Item::SpeedGGPlus, Item::SpeedGGPlus],
Item::SpeedBBPlusPlus => vec![Item::SpeedBBPlus, Item::SpeedBBPlus, Item::SpeedBBPlus], Item::SpeedBBPlusPlus => vec![Item::SpeedBBPlus, Item::SpeedBBPlus],
Item::SpeedRGPlusPlus => vec![Item::SpeedRGPlus, Item::SpeedRGPlus, Item::SpeedRGPlus], Item::SpeedRGPlusPlus => vec![Item::SpeedRGPlus, Item::SpeedRGPlus],
Item::SpeedGBPlusPlus => vec![Item::SpeedGBPlus, Item::SpeedGBPlus, Item::SpeedGBPlus], Item::SpeedGBPlusPlus => vec![Item::SpeedGBPlus, Item::SpeedGBPlus],
Item::SpeedRBPlusPlus => vec![Item::SpeedRBPlus, Item::SpeedRBPlus, Item::SpeedRBPlus], Item::SpeedRBPlusPlus => vec![Item::SpeedRBPlus, Item::SpeedRBPlus],
_ => vec![*self], _ => vec![*self],
} }
@ -1338,7 +1371,7 @@ pub fn get_combos() -> Vec<Combo> {
Combo { components: Item::Restrict.combo(), item: Item::Restrict }, Combo { components: Item::Restrict.combo(), item: Item::Restrict },
Combo { components: Item::RestrictPlus.combo(), item: Item::RestrictPlus }, Combo { components: Item::RestrictPlus.combo(), item: Item::RestrictPlus },
Combo { components: Item::RestrictPlusPlus.combo(), item: Item::RestrictPlusPlus }, Combo { components: Item::RestrictPlusPlus.combo(), item: Item::RestrictPlusPlus },
Combo { components: Item::Purge.combo(), item: Item::Purge }, // Needs flavour Combo { components: Item::Purge.combo(), item: Item::Purge },
Combo { components: Item::PurgePlus.combo(), item: Item::PurgePlus }, Combo { components: Item::PurgePlus.combo(), item: Item::PurgePlus },
Combo { components: Item::PurgePlusPlus.combo(), item: Item::PurgePlusPlus }, Combo { components: Item::PurgePlusPlus.combo(), item: Item::PurgePlusPlus },
@ -1556,20 +1589,13 @@ mod tests {
assert_eq!(Item::StrikePlus.components(), vec![ assert_eq!(Item::StrikePlus.components(), vec![
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
]); ]);
assert_eq!(Item::StrikePlusPlus.components(), vec![ assert_eq!(Item::StrikePlusPlus.components(), vec![
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack, Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
Item::Red, Item::Red, Item::Attack,
]); ]);
} }

View File

@ -184,6 +184,7 @@ impl Player {
// do we have any colours in store? // do we have any colours in store?
let colours = self.vbox.store[&ItemType::Colours].keys() let colours = self.vbox.store[&ItemType::Colours].keys()
.cloned() .cloned()
.take(2)
.collect::<Vec<String>>(); .collect::<Vec<String>>();
// how about a base skill? // how about a base skill?
@ -193,11 +194,13 @@ impl Player {
}; };
// if no: try to refill and start again // if no: try to refill and start again
match colours.len() < 2 || base.is_none() { match colours.len() != 2 || base.is_none() {
true => match self.vbox_refill() { true => {
Ok(_) => continue, match self.vbox_refill() {
Err(_) => break, // give up Ok(_) => continue,
}, Err(_) => break, // give up
};
}
false => { false => {
let mut vbox_items = HashMap::new(); let mut vbox_items = HashMap::new();
vbox_items.insert(ItemType::Colours, colours); vbox_items.insert(ItemType::Colours, colours);
@ -230,7 +233,7 @@ impl Player {
// there's a bad bug here where if this apply fails // there's a bad bug here where if this apply fails
// the item in question will be silently dropped // the item in question will be silently dropped
let item = self.vbox.stash.remove(&i).unwrap(); let item = self.vbox.stash.remove(&i).unwrap();
self.vbox_apply(item, construct_id).ok(); self.vbox_apply(item, construct_id).unwrap();
continue; continue;
} }
// need to buy one // need to buy one
@ -238,6 +241,7 @@ impl Player {
// do we have any colours in store? // do we have any colours in store?
let colours = self.vbox.store[&ItemType::Colours].keys() let colours = self.vbox.store[&ItemType::Colours].keys()
.cloned() .cloned()
.take(2)
.collect::<Vec<String>>(); .collect::<Vec<String>>();
// how about a base spec? // how about a base spec?
@ -247,7 +251,7 @@ impl Player {
}; };
// if no: try to refill and start again // if no: try to refill and start again
match colours.len() < 2 || base.is_none() { match colours.len() != 2 || base.is_none() {
true => match self.vbox_refill() { true => match self.vbox_refill() {
Ok(_) => continue, Ok(_) => continue,
Err(_) => break, // give up Err(_) => break, // give up
@ -446,9 +450,11 @@ mod tests {
let mut player = Player::new(player_account, &"test".to_string(), constructs).set_bot(true); let mut player = Player::new(player_account, &"test".to_string(), constructs).set_bot(true);
player.vbox.fill(); player.vbox.fill();
player.vbox.bits = 100;
player.autobuy(); player.autobuy();
assert!(player.constructs.iter().all(|c| c.skills.len() >= 1)); assert!(player.constructs.iter().all(|c| c.skills.len() > 1));
assert!(player.constructs.iter().all(|c| c.specs.len() >= 1));
} }
#[test] #[test]

View File

@ -758,87 +758,87 @@ impl Skill {
Skill::Attack => 80, // Base Skill::Attack => 80, // Base
Skill::Blast => 105, // BB Skill::Blast => 105, // BB
Skill::BlastPlus => 140, // BB Skill::BlastPlus => 125, // BB
Skill::BlastPlusPlus => 200, // BB Skill::BlastPlusPlus => 145, // BB
Skill::Chaos => 40, // BR Skill::Chaos => 40, // BR
Skill::ChaosPlus => 65, // BR Skill::ChaosPlus => 50, // BR
Skill::ChaosPlusPlus => 90, // BR Skill::ChaosPlusPlus => 65, // BR
Skill::Heal => 125, //GG Skill::Heal => 115, //GG
Skill::HealPlus => 185, //GG Skill::HealPlus => 135, //GG
Skill::HealPlusPlus => 270, //GG Skill::HealPlusPlus => 160, //GG
Skill::SiphonTick => 25, // GB Skill::SiphonTick => 25, // GB
Skill::SiphonTickPlus => 30, Skill::SiphonTickPlus => 27,
Skill::SiphonTickPlusPlus => 40, Skill::SiphonTickPlusPlus => 30,
Skill::Slay => 45, // RG Skill::Slay => 40, // RG
Skill::SlayPlus => 65, Skill::SlayPlus => 50,
Skill::SlayPlusPlus => 100, Skill::SlayPlusPlus => 65,
Skill::Strike => 90, //RR Skill::Strike => 90, //RR
Skill::StrikePlus => 140, Skill::StrikePlus => 110,
Skill::StrikePlusPlus => 200, Skill::StrikePlusPlus => 140,
// Block Base // Block Base
Skill::ElectrocuteTick => 80, Skill::ElectrocuteTick => 80,
Skill::ElectrocuteTickPlus => 100, Skill::ElectrocuteTickPlus => 90,
Skill::ElectrocuteTickPlusPlus => 130, Skill::ElectrocuteTickPlusPlus => 100,
Skill::CounterAttack => 120, Skill::CounterAttack => 115,
Skill::CounterAttackPlus => 160, Skill::CounterAttackPlus => 130,
Skill::CounterAttackPlusPlus => 230, Skill::CounterAttackPlusPlus => 160,
Skill::Purify => 45, //Green dmg (heal) Skill::Purify => 45, //Green dmg (heal)
Skill::PurifyPlus => 70, Skill::PurifyPlus => 60,
Skill::PurifyPlusPlus => 105, Skill::PurifyPlusPlus => 85,
Skill::Reflect => 45, //Recharge blue life (heal) Skill::Reflect => 45, //Recharge blue life (heal)
Skill::ReflectPlus => 70, Skill::ReflectPlus => 70,
Skill::ReflectPlusPlus => 100, Skill::ReflectPlusPlus => 100,
Skill::Recharge => 70, //Recharge red and blue life (heal) Skill::Recharge => 70, //Recharge red and blue life (heal)
Skill::RechargePlus => 110, Skill::RechargePlus => 90,
Skill::RechargePlusPlus => 170, Skill::RechargePlusPlus => 110,
Skill::Sustain => 120, // Recharge red life (heal) Skill::Sustain => 110, // Recharge red life (heal)
Skill::SustainPlus => 150, Skill::SustainPlus => 130,
Skill::SustainPlusPlus => 230, Skill::SustainPlusPlus => 150,
// Stun Base // Stun Base
Skill::Sleep => 200, //Green dmg (heal) Skill::Sleep => 160, //Green dmg (heal)
Skill::SleepPlus => 290, Skill::SleepPlus => 200,
Skill::SleepPlusPlus => 400, Skill::SleepPlusPlus => 240,
Skill::Banish => 40, //Green dmg (heal) Skill::Banish => 50, //Green dmg (heal)
Skill::BanishPlus => 75, Skill::BanishPlus => 65,
Skill::BanishPlusPlus => 125, Skill::BanishPlusPlus => 80,
Skill::Bash => 45, Skill::Bash => 45,
Skill::BashPlus => 65, Skill::BashPlus => 55,
Skill::BashPlusPlus => 100, Skill::BashPlusPlus => 70,
Skill::Link => 25, Skill::Link => 25,
Skill::LinkPlus => 40, Skill::LinkPlus => 35,
Skill::LinkPlusPlus => 70, Skill::LinkPlusPlus => 45,
Skill::Ruin => 40, Skill::Ruin => 40,
Skill::RuinPlus => 70, Skill::RuinPlus => 55,
Skill::RuinPlusPlus => 100, Skill::RuinPlusPlus => 70,
// Debuff Base // Debuff Base
Skill::DecayTick => 33, Skill::DecayTick => 33,
Skill::DecayTickPlus => 45, Skill::DecayTickPlus => 37,
Skill::DecayTickPlusPlus => 70, Skill::DecayTickPlusPlus => 45,
Skill::Silence => 55, // Deals more per blue skill on target Skill::Silence => 55, // Deals more per blue skill on target
Skill::SilencePlus => 80, Skill::SilencePlus => 65,
Skill::SilencePlusPlus => 110, Skill::SilencePlusPlus => 80,
Skill::Restrict => 40, // Deals more per red skill on target Skill::Restrict => 40, // Deals more per red skill on target
Skill::RestrictPlus => 65, Skill::RestrictPlus => 55,
Skill::RestrictPlusPlus => 100, Skill::RestrictPlusPlus => 70,
// Buff base // Buff base
Skill::HybridBlast => 50, Skill::HybridBlast => 50,
@ -846,16 +846,16 @@ impl Skill {
Skill::HasteStrike => 60, Skill::HasteStrike => 60,
Skill::Absorb=> 95, Skill::Absorb=> 95,
Skill::AbsorbPlus => 120, Skill::AbsorbPlus => 110,
Skill::AbsorbPlusPlus => 155, Skill::AbsorbPlusPlus => 120,
Skill::Intercept => 80, Skill::Intercept => 85,
Skill::InterceptPlus => 110, Skill::InterceptPlus => 100,
Skill::InterceptPlusPlus => 150, Skill::InterceptPlusPlus => 125,
Skill::TriageTick => 75, Skill::TriageTick => 75,
Skill::TriageTickPlus => 110, Skill::TriageTickPlus => 90,
Skill::TriageTickPlusPlus => 140, Skill::TriageTickPlusPlus => 110,
_ => 100, _ => 100,
} }
@ -899,9 +899,9 @@ impl Skill {
Skill::Curse => vec![ConstructEffect {effect: Effect::Curse, duration: 2, Skill::Curse => vec![ConstructEffect {effect: Effect::Curse, duration: 2,
meta: Some(EffectMeta::Multiplier(150)), tick: None}], meta: Some(EffectMeta::Multiplier(150)), tick: None}],
Skill::CursePlus => vec![ConstructEffect {effect: Effect::Curse, duration: 2, Skill::CursePlus => vec![ConstructEffect {effect: Effect::Curse, duration: 2,
meta: Some(EffectMeta::Multiplier(200)), tick: None}], meta: Some(EffectMeta::Multiplier(175)), tick: None}],
Skill::CursePlusPlus => vec![ConstructEffect {effect: Effect::Curse, duration: 3, Skill::CursePlusPlus => vec![ConstructEffect {effect: Effect::Curse, duration: 3,
meta: Some(EffectMeta::Multiplier(250)), tick: None}], meta: Some(EffectMeta::Multiplier(200)), tick: None}],
Skill::Debuff => vec![ConstructEffect {effect: Effect::Slow, duration: 3, Skill::Debuff => vec![ConstructEffect {effect: Effect::Slow, duration: 3,
meta: Some(EffectMeta::Multiplier(50)), tick: None }], meta: Some(EffectMeta::Multiplier(50)), tick: None }],
@ -934,15 +934,15 @@ impl Skill {
meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None}], meta: Some(EffectMeta::Skill(Skill::AbsorptionPlusPlus)), tick: None}],
Skill::Absorption => vec![ConstructEffect {effect: Effect::Absorption, duration: 3, meta: None, tick: None}], Skill::Absorption => vec![ConstructEffect {effect: Effect::Absorption, duration: 3, meta: None, tick: None}],
Skill::AbsorptionPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 5, meta: None, tick: None}], Skill::AbsorptionPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 4, meta: None, tick: None}],
Skill::AbsorptionPlusPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 7, meta: None, tick: None}], Skill::AbsorptionPlusPlus => vec![ConstructEffect {effect: Effect::Absorption, duration: 5, meta: None, tick: None}],
Skill::Hybrid => vec![ConstructEffect {effect: Effect::Hybrid, duration: 3, Skill::Hybrid => vec![ConstructEffect {effect: Effect::Hybrid, duration: 3,
meta: Some(EffectMeta::Multiplier(150)), tick: None }], meta: Some(EffectMeta::Multiplier(150)), tick: None }],
Skill::HybridPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 4, Skill::HybridPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 4,
meta: Some(EffectMeta::Multiplier(175)), tick: None }], meta: Some(EffectMeta::Multiplier(175)), tick: None }],
Skill::HybridPlusPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 5, Skill::HybridPlusPlus => vec![ConstructEffect {effect: Effect::Hybrid, duration: 5,
meta: Some(EffectMeta::Multiplier(225)), tick: None }], meta: Some(EffectMeta::Multiplier(200)), tick: None }],
Skill::Invert => vec![ConstructEffect {effect: Effect::Invert, duration: 2, meta: None, tick: None}], Skill::Invert => vec![ConstructEffect {effect: Effect::Invert, duration: 2, meta: None, tick: None}],
Skill::InvertPlus => vec![ConstructEffect {effect: Effect::Invert, duration: 3, meta: None, tick: None}], Skill::InvertPlus => vec![ConstructEffect {effect: Effect::Invert, duration: 3, meta: None, tick: None}],
@ -964,10 +964,10 @@ impl Skill {
meta: Some(EffectMeta::Multiplier(150)), tick: None}], meta: Some(EffectMeta::Multiplier(150)), tick: None}],
Skill::BreakPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}, Skill::BreakPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None},
ConstructEffect {effect: Effect::Vulnerable, duration: 4, ConstructEffect {effect: Effect::Vulnerable, duration: 4,
meta: Some(EffectMeta::Multiplier(200)), tick: None}], meta: Some(EffectMeta::Multiplier(175)), tick: None}],
Skill::BreakPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None}, Skill::BreakPlusPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 2, meta: None, tick: None},
ConstructEffect {effect: Effect::Vulnerable, duration: 4, ConstructEffect {effect: Effect::Vulnerable, duration: 4,
meta: Some(EffectMeta::Multiplier(250)), tick: None}], meta: Some(EffectMeta::Multiplier(200)), tick: None}],
Skill::Ruin => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::Ruin => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],
Skill::RuinPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}], Skill::RuinPlus => vec![ConstructEffect {effect: Effect::Stun, duration: 1, meta: None, tick: None}],

View File

@ -172,34 +172,141 @@ impl Spec {
}, },
Spec::PowerRR=> SpecValues { Spec::PowerRR=> SpecValues {
base: 25, base: 10,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 5 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 9 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 20 } SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 13 }
], ],
}, },
Spec::PowerGG=> SpecValues { Spec::PowerGG=> SpecValues {
base: 25, base: 10,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 5 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 9 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 20 } SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 13 }
], ],
}, },
Spec::PowerBB=> SpecValues { Spec::PowerBB=> SpecValues {
base: 25, base: 10,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 5 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 15 }, SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 9 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 20 } SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 13 }
], ],
}, },
Spec::PowerRG=> SpecValues { Spec::PowerRG=> SpecValues {
base: 20, base: 10,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 3 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 6 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 9 }
],
},
Spec::PowerGB=> SpecValues {
base: 10,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 3 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 6 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 9 }
],
},
Spec::PowerRB=> SpecValues {
base: 10,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 3 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 6 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 9 }
],
},
Spec::PowerRRPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 6 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 12 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 18 }
],
},
Spec::PowerGGPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 6 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 12 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 18 }
],
},
Spec::PowerBBPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 6 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 12 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 18 }
],
},
Spec::PowerRGPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 4 },
SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 8 },
SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 12 }
],
},
Spec::PowerGBPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 4 },
SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 8 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 12 }
],
},
Spec::PowerRBPlus => SpecValues {
base: 15,
bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 4 },
SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 8 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 12 }
],
},
Spec::PowerRRPlusPlus => SpecValues {
base: 25,
bonuses: vec![
SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 8 },
SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 16 },
SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 24 }
],
},
Spec::PowerGGPlusPlus => SpecValues {
base: 25,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 8 },
SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 16 },
SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 24 }
],
},
Spec::PowerBBPlusPlus => SpecValues {
base: 25,
bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 8 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 16 },
SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 24 }
],
},
Spec::PowerRGPlusPlus => SpecValues {
base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 5 }, 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: 5, green: 5, blue: 0 }, bonus: 10 },
@ -207,8 +314,8 @@ impl Spec {
], ],
}, },
Spec::PowerGB=> SpecValues { Spec::PowerGBPlusPlus => SpecValues {
base: 20, base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 5 }, 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: 5, blue: 5 }, bonus: 10 },
@ -216,8 +323,8 @@ impl Spec {
], ],
}, },
Spec::PowerRB=> SpecValues { Spec::PowerRBPlusPlus => SpecValues {
base: 20, base: 25,
bonuses: vec![ bonuses: vec![
SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 5 }, 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: 5, green: 0, blue: 5 }, bonus: 10 },
@ -225,113 +332,6 @@ impl Spec {
], ],
}, },
Spec::PowerRRPlus => SpecValues {
base: 45,
bonuses: vec![
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: 45,
bonuses: vec![
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: 45,
bonuses: vec![
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: 35,
bonuses: vec![
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: 35,
bonuses: vec![
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: 35,
bonuses: vec![
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: 80,
bonuses: vec![
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: 80,
bonuses: vec![
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: 80,
bonuses: vec![
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: 60,
bonuses: vec![
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: 60,
bonuses: vec![
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: 60,
bonuses: vec![
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 }
],
},
Spec::Speed => SpecValues { Spec::Speed => SpecValues {
base: 40, base: 40,
bonuses: vec![] bonuses: vec![]