diff --git a/CHANGELOG.md b/CHANGELOG.md
index c6a2090e..d8674203 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,17 +2,24 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
-## [0.0.0] - YYYY-MM-DD
-### Added
-### Fixed
+## [1.5.5] - 2019-10-15
### Changed
+* Purge
+ * Fixed bug where client animations would freeze when clearing a buff
+ * Cooldown increased to 1T
-## [0.1.5] - YYYY-MM-DD
+* VBOX
+ * You can no longer select invalid combinations.
+
+* Controls
+ * Abandon button now asks for confirmation.
+
+## [1.1.5] - 2019-10-10
### Changed
`Recharge` Skill multiplier reduced 85/130/200 -> 70/110/170
`Absorption` Skill duration reduced 5/7/9 -> 3/5/7
-## [0.1.4 2019-09-18]
+## [1.1.4 2019-09-18]
### Changed
Removed self targetting, all skills can be used on any target
@@ -21,16 +28,16 @@ Removed self targetting, all skills can be used on any target
`Purify` No cooldown
`Recharge` No cooldown
-`Banish`
+`Banish`
Now deals 40 / 75 / 125% target red / blue life before applying banish debuff
Constant 2T duration at all levels
Constant 3T cooldown at all levels
-`Link` reworked ->
+`Link` reworked ->
Stuns caster for 3/2/1T
If target has higher green life than caster:
- Deal blue damage to target equal to difference between green life
- Heal with green damage to source equal to difference between green life
+ Deal blue damage to target equal to difference between green life
+ Heal with green damage to source equal to difference between green life
`Counter` effect no longer applies immunities
Counter no cooldown
@@ -38,7 +45,7 @@ Removed self targetting, all skills can be used on any target
Counter skill now applies block at 40% / 60% / 80% reduction for 1T
Counter no longer recharges red life
-`Electrify`
+`Electrify`
No Cooldown
Duration -> 1T
Electrocute duration now 2/3/4T
diff --git a/VERSION b/VERSION
index 63ebd3fe..5ebba4f0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.5.4
\ No newline at end of file
+1.5.5
\ No newline at end of file
diff --git a/WORKLOG.md b/WORKLOG.md
index 1dd73284..4aa80673 100644
--- a/WORKLOG.md
+++ b/WORKLOG.md
@@ -1,20 +1,25 @@
# WORK WORK
-## NOW (Before PAX)
+## NOW
*PRODUCTION*
+* border colours for skills e.g. strike red border, slay half red half green
+* rename vbox to shop
+* combat phase info system
+* drag and drop buy / equip / unequip items
+
* mobile styles
* mobile info page
* fix info page for tablet layout
-* Add TOS and accept to register page
-
* can't reset password without knowing password =\
-
-## SOON (Before or After PAX)
-
* Invert recharge
+
+## SOON
+
+* equip from shop (buy and equip without putting in your inventory) for bases
+
* bot game grind
* ACP
* essential
@@ -48,7 +53,7 @@
reconnect based on time delta
consolidate game and instance
- * return of the combat log (last few events with condensed descriptions)
+ * return of the combat log (last few events with condensed descriptions)
- click in to scroll
* elo + leaderboards
diff --git a/acp/package.json b/acp/package.json
index 43040b88..c1034fe4 100644
--- a/acp/package.json
+++ b/acp/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.5.4",
+ "version": "1.5.5",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/client/assets/styles/game.less b/client/assets/styles/game.less
index 7c55e35a..4f22174a 100644
--- a/client/assets/styles/game.less
+++ b/client/assets/styles/game.less
@@ -205,7 +205,6 @@
.resolving-skill {
grid-area: target;
align-self: center;
- text-align: center;
height: auto;
svg {
display: inline;
diff --git a/client/package.json b/client/package.json
index e84f1421..acec772b 100644
--- a/client/package.json
+++ b/client/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.5.4",
+ "version": "1.5.5",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/client/src/app.jsx b/client/src/app.jsx
index b63b55a6..cfc877b7 100644
--- a/client/src/app.jsx
+++ b/client/src/app.jsx
@@ -30,23 +30,21 @@ const store = createStore(
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
);
-document.fonts.load('16pt "Jura"').then(() => {
- const events = registerEvents(store);
- // store.subscribe(() => console.log(store.getState()));
- setupKeys(store);
+const events = registerEvents(store);
+// store.subscribe(() => console.log(store.getState()));
+setupKeys(store);
- const ws = createSocket(events);
- ws.connect();
- events.setWs(ws);
+const ws = createSocket(events);
+ws.connect();
+events.setWs(ws);
- const App = () => (
-
-
-
-
-
- );
+const App = () => (
+
+
+
+
+
+);
- // eslint-disable-next-line
- preact.render(, document.body);
-});
+// eslint-disable-next-line
+preact.render(, document.body);
diff --git a/client/src/components/game.ctrl.btns.top.jsx b/client/src/components/game.ctrl.btns.top.jsx
index 5abcdcae..4ab0d543 100644
--- a/client/src/components/game.ctrl.btns.top.jsx
+++ b/client/src/components/game.ctrl.btns.top.jsx
@@ -49,9 +49,10 @@ function GameCtrlTopBtns(args) {
};
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
+ const abandonText = abandonState ? 'Confirm' : 'Abandon';
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
- const abandonBtn = ;
+ const abandonBtn = ;
const leaveBtn = ;
return (
diff --git a/client/src/components/instance.ctrl.top.btns.jsx b/client/src/components/instance.ctrl.top.btns.jsx
index 0a93c693..528e5d0e 100644
--- a/client/src/components/instance.ctrl.top.btns.jsx
+++ b/client/src/components/instance.ctrl.top.btns.jsx
@@ -49,9 +49,10 @@ function InstanceTopBtns(args) {
};
const abandonClasses = `abandon ${abandonState ? 'confirming' : ''}`;
+ const abandonText = abandonState ? 'Confirm' : 'Abandon';
const abandonAction = abandonState ? sendAbandon : abandonStateTrue;
- const abandonBtn = ;
+ const abandonBtn = ;
const leaveBtn = ;
return (
diff --git a/client/src/components/vbox.component.jsx b/client/src/components/vbox.component.jsx
index 53c03819..067f8310 100644
--- a/client/src/components/vbox.component.jsx
+++ b/client/src/components/vbox.component.jsx
@@ -1,5 +1,6 @@
const preact = require('preact');
const range = require('lodash/range');
+const countBy = require('lodash/countBy');
const without = require('lodash/without');
const { connect } = require('preact-redux');
@@ -249,12 +250,35 @@ function Vbox(args) {
if (vboxSelecting) clearVboxSelected();
if (reclaiming) return sendVboxReclaim(i);
+ // 4 things selected
+ if (combiner.length > 2) return combinerChange([i]);
+
+ // removing
const combinerIndex = combiner.indexOf(i);
if (combinerIndex > -1) {
return combinerChange(without(combiner, i));
}
combiner.push(i);
+
+ // invalid combo
+ const combinerItems = combiner.map(j => vbox.bound[j]);
+ const combinerCounts = countBy(combinerItems, c => c);
+
+ // unless some combo
+ // contains every combinerItems
+ // and combinerItems.count of item >= components.count(item)
+
+ if (!itemInfo.combos
+ .some(combo => {
+ const comboCount = countBy(combo.components, c => c);
+ return combinerItems.every(c =>
+ combo.components.includes(c) && comboCount[c] >= combinerCounts[c]
+ );
+ })) {
+ return combinerChange([i]);
+ }
+
return combinerChange(combiner);
}
diff --git a/ops/package.json b/ops/package.json
index cc715b58..8cb6c98f 100755
--- a/ops/package.json
+++ b/ops/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-ops",
- "version": "1.5.4",
+ "version": "1.5.5",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 1855f2a4..fcf67d51 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mnml"
-version = "1.5.4"
+version = "1.5.5"
authors = ["ntr "]
[dependencies]
diff --git a/server/src/skill.rs b/server/src/skill.rs
index 06fc7b38..5bb44cea 100644
--- a/server/src/skill.rs
+++ b/server/src/skill.rs
@@ -415,7 +415,7 @@ pub enum EventStages {
EndPost, // Skip Anim Anim
EndOnly, // Skip Anim Skip
PostOnly, // Skip Skip Anim
- NoStages, // Skip Skip Skip
+ NoStages, // Skip Skip Skip
}
#[derive(Debug,Clone,PartialEq,Serialize,Deserialize)]
@@ -1080,9 +1080,9 @@ impl Skill {
Skill::PurifyPlus |
Skill::PurifyPlusPlus => None,
- Skill::Purge=> None,
- Skill::PurgePlus => None,
- Skill::PurgePlusPlus => None,
+ Skill::Purge=> Some(1),
+ Skill::PurgePlus => Some(1),
+ Skill::PurgePlusPlus => Some(1),
Skill::Banish |
Skill::BanishPlus |
@@ -1395,7 +1395,7 @@ fn sustain(source: &mut Construct, target: &mut Construct, mut results: Resoluti
fn intercept(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
let intercept = skill.effect()[0];
results.push(Resolution::new(source, target).event(target.add_effect(skill, intercept)));
-
+
let red_amount = source.red_power().pct(skill.multiplier());
let e = target.recharge(skill, red_amount, 0);
let stages = match e {
@@ -1614,7 +1614,7 @@ fn electrocute(source: &mut Construct, target: &mut Construct, mut results: Reso
None => ()
}
}
-
+
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
Some(EffectMeta::Skill(s)) => s,
@@ -1660,10 +1660,10 @@ fn absorption(source: &mut Construct, target: &mut Construct, mut results: Resol
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));
@@ -1717,7 +1717,7 @@ fn recharge(source: &mut Construct, target: &mut Construct, mut results: Resolut
}
fn siphon(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions {
-
+
let skip_tick = target.effects.iter().any(|e| e.effect == Effect::Siphon);
let ConstructEffect { effect, duration, meta, tick: _ } = skill.effect()[0];
let tick_skill = match meta {
@@ -1804,7 +1804,8 @@ fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolution
}) {
let ce = target.effects.remove(i);
results.push(Resolution::new(source, target)
- .event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() }));
+ .event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })
+ .stages(EventStages::PostOnly));
}
let effect = skill.effect()[0];