diff --git a/VERSION b/VERSION
index c56eaaaf..f88cf52e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.12.3
\ No newline at end of file
+1.13.0
\ No newline at end of file
diff --git a/WORKLOG.md b/WORKLOG.md
index f504676b..73c8ea5b 100644
--- a/WORKLOG.md
+++ b/WORKLOG.md
@@ -5,6 +5,9 @@ _ntr_
* can't reset password without knowing password =\
* hard reload client on version change
+decay reflected not applied
+black out timer when game finished
+
* audio
* animation effects
* vbox combine / buy / equip etc
diff --git a/acp/package.json b/acp/package.json
index c072126b..088c98c3 100644
--- a/acp/package.json
+++ b/acp/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.12.3",
+ "version": "1.13.0",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/bin/deploy.sh b/bin/deploy.sh
index dcf11a59..41ae49c3 100755
--- a/bin/deploy.sh
+++ b/bin/deploy.sh
@@ -27,6 +27,3 @@ ssh -q "$TARGET" ls -lah "$CLIENT_DIST_DIR"
echo "restarting mnml service"
ssh -q -t "$TARGET" sudo service mnml restart && sleep 1 && systemctl --no-pager status mnml
-
-echo "restarting nginx service"
-ssh -q -t "$TARGET" sudo service nginx restart && sleep 1 && systemctl --no-pager status nginx
diff --git a/client/assets/styles/colours.less b/client/assets/styles/colours.less
index 4d93f6fc..91c1ba73 100644
--- a/client/assets/styles/colours.less
+++ b/client/assets/styles/colours.less
@@ -33,6 +33,25 @@ svg {
}
}
+// icons from ethan are fills not strokes
+svg.ethan-icon {
+ fill: @white;
+ stroke: none;
+
+ .red {
+ fill: @red;
+ }
+
+ .green {
+ fill: @green;
+ }
+
+ .blue {
+ fill: @blue;
+ }
+}
+
+
.green {
color: @green;
stroke: @green;
diff --git a/client/assets/styles/styles.less b/client/assets/styles/styles.less
index f2576ff4..441e4c11 100644
--- a/client/assets/styles/styles.less
+++ b/client/assets/styles/styles.less
@@ -271,7 +271,6 @@ figure.gray {
.stats svg, .specs svg {
height: 2em;
- fill: none;
}
.credits {
diff --git a/client/package.json b/client/package.json
index 25380772..2d2452b2 100644
--- a/client/package.json
+++ b/client/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.12.3",
+ "version": "1.13.0",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/client/src/components/game.construct.jsx b/client/src/components/game.construct.jsx
index f3980794..2fa74788 100644
--- a/client/src/components/game.construct.jsx
+++ b/client/src/components/game.construct.jsx
@@ -15,7 +15,7 @@ const addState = connect(
ws,
game,
- authenticated,
+ instance,
activeSkill,
animFocus,
resolution,
@@ -30,7 +30,7 @@ const addState = connect(
return {
game,
- authenticated,
+ instance,
activeSkill,
animFocus,
resolution,
@@ -54,7 +54,7 @@ class GameConstruct extends preact.Component {
render() {
const {
// Changing state variables
- authenticated,
+ instance,
game,
activeSkill,
animFocus,
@@ -81,7 +81,9 @@ class GameConstruct extends preact.Component {
const unfocus = animFocus && !animFocus.includes(construct.id) ? 'unfocus' : '';
const targeted = game.stack.find(c => c.target === construct.id);
- const highlight = !authenticated && !targeted && activeSkill ? 'highlight' : '';
+
+ const firstRoundTutorial = instance && instance.time_control === 'Practice' && !game.resolutions.length;
+ const highlight = firstRoundTutorial && !targeted && activeSkill ? 'highlight' : '';
const crypSkills = player
?
diff --git a/client/src/components/shapes.jsx b/client/src/components/shapes.jsx
index 454e51fe..c85f104c 100644
--- a/client/src/components/shapes.jsx
+++ b/client/src/components/shapes.jsx
@@ -11,6 +11,10 @@ const triangle = require('./svgs/triangle');
// const vboxColour = require('./svgs/colour');
const vboxColour = require('./svgs/vbox.colour');
+const speed = require('./svgs/speed');
+const power = require('./svgs/power');
+const life = require('./svgs/life');
+
module.exports = {
circle,
diamond,
@@ -19,6 +23,7 @@ module.exports = {
square,
squircle,
triangle,
+ speed,
saw,
vboxColour,
@@ -27,17 +32,17 @@ module.exports = {
Blue: () => vboxColour('blue'),
// stats
- RedLife: () => square(['red']),
- GreenLife: () => square(['green']),
- BlueLife: () => square(['blue']),
- RedPower: () => circle(['red']),
- GreenPower: () => circle(['green']),
- BluePower: () => circle(['blue']),
- SpeedStat: () => triangle(['white']),
+ RedLife: () => life(['red']),
+ GreenLife: () => life(['green']),
+ BlueLife: () => life(['blue']),
+ RedPower: () => power(['red']),
+ GreenPower: () => power(['green']),
+ BluePower: () => power(['blue']),
+ SpeedStat: () => speed(['white']),
- POWER: () => circle(['white']),
- LIFE: () => square(['white']),
- SPEED: () => triangle(['white']),
+ POWER: () => power(['white']),
+ LIFE: () => life(['white']),
+ SPEED: () => speed(['white']),
// specs
// Base
@@ -50,343 +55,343 @@ module.exports = {
Power: () =>
- {circle(['white'])}
+ {power(['white'])}
Power
,
Life: () =>
- {square(['white'])}
+ {life(['white'])}
Life
,
Speed: () =>
- {triangle(['white'])}
+ {speed(['white'])}
Speed
,
// Lifes Upgrades
LifeGG: () =>
- {square(['green'])}
+ {life(['green'])}
Life
,
LifeRR: () =>
- {square(['red'])}
+ {life(['red'])}
Life
,
LifeBB:() =>
- {square(['blue'])}
+ {life(['blue'])}
Life
,
LifeRG: () =>
- {square(['red', 'green'])}
+ {life(['red', 'green'])}
Life
,
LifeGB: () =>
- {square(['green', 'blue'])}
+ {life(['green', 'blue'])}
Life
,
LifeRB:() =>
- {square(['red', 'blue'])}
+ {life(['red', 'blue'])}
Life
,
LifeGGPlus: () =>
- {square(['green'])}
+ {life(['green'])}
Life+
,
LifeRRPlus: () =>
- {square(['red'])}
+ {life(['red'])}
Life+
,
LifeBBPlus:() =>
- {square(['blue'])}
+ {life(['blue'])}
Life+
,
LifeRGPlus: () =>
- {square(['red', 'green'])}
+ {life(['red', 'green'])}
Life+
,
LifeGBPlus: () =>
- {square(['green', 'blue'])}
+ {life(['green', 'blue'])}
Life+
,
LifeRBPlus:() =>
- {square(['red', 'blue'])}
+ {life(['red', 'blue'])}
Life+
,
LifeGGPlusPlus: () =>
- {square(['green'])}
+ {life(['green'])}
Life++
,
LifeRRPlusPlus: () =>
- {square(['red'])}
+ {life(['red'])}
Life++
,
LifeBBPlusPlus:() =>
- {square(['blue'])}
+ {life(['blue'])}
Life++
,
LifeRGPlusPlus: () =>
- {square(['red', 'green'])}
+ {life(['red', 'green'])}
Life++
,
LifeGBPlusPlus: () =>
- {square(['green', 'blue'])}
+ {life(['green', 'blue'])}
Life++
,
LifeRBPlusPlus:() =>
- {square(['red', 'blue'])}
+ {life(['red', 'blue'])}
Life++
,
// Powers Upgrades
PowerGG: () =>
- {circle(['green'])}
+ {power(['green'])}
Power
,
PowerRR: () =>
- {circle(['red'])}
+ {power(['red'])}
Power
,
PowerBB:() =>
- {circle(['blue'])}
+ {power(['blue'])}
Power
,
PowerRG: () =>
- {circle(['red', 'green'])}
+ {power(['red', 'green'])}
Power
,
PowerGB: () =>
- {circle(['green', 'blue'])}
+ {power(['green', 'blue'])}
Power
,
PowerRB:() =>
- {circle(['red', 'blue'])}
+ {power(['red', 'blue'])}
Power
,
PowerGGPlus: () =>
- {circle(['green'])}
+ {power(['green'])}
Power+
,
PowerRRPlus: () =>
- {circle(['red'])}
+ {power(['red'])}
Power+
,
PowerBBPlus:() =>
- {circle(['blue'])}
+ {power(['blue'])}
Power+
,
PowerRGPlus: () =>
- {circle(['red', 'green'])}
+ {power(['red', 'green'])}
Power+
,
PowerGBPlus: () =>
- {circle(['green', 'blue'])}
+ {power(['green', 'blue'])}
Power+
,
PowerRBPlus:() =>
- {circle(['red', 'blue'])}
+ {power(['red', 'blue'])}
Power+
,
PowerGGPlusPlus: () =>
- {circle(['green'])}
+ {power(['green'])}
Power++
,
PowerRRPlusPlus: () =>
- {circle(['red'])}
+ {power(['red'])}
Power++
,
PowerBBPlusPlus:() =>
- {circle(['blue'])}
+ {power(['blue'])}
Power++
,
PowerRGPlusPlus: () =>
- {circle(['red', 'green'])}
+ {power(['red', 'green'])}
Power++
,
PowerGBPlusPlus: () =>
- {circle(['green', 'blue'])}
+ {power(['green', 'blue'])}
Power++
,
PowerRBPlusPlus:() =>
- {circle(['red', 'blue'])}
+ {power(['red', 'blue'])}
Power++
,
// Speeds Upgrades
SpeedGG: () =>
- {triangle(['green'])}
+ {speed(['green'])}
Speed
,
SpeedRR: () =>
- {triangle(['red'])}
+ {speed(['red'])}
Speed
,
SpeedBB:() =>
- {triangle(['blue'])}
+ {speed(['blue'])}
Speed
,
SpeedRG: () =>
- {triangle(['red', 'green'])}
+ {speed(['red', 'green'])}
Speed
,
SpeedGB: () =>
- {triangle(['green', 'blue'])}
+ {speed(['green', 'blue'])}
Speed
,
SpeedRB:() =>
- {triangle(['red', 'blue'])}
+ {speed(['red', 'blue'])}
Speed
,
SpeedGGPlus: () =>
- {triangle(['green'])}
+ {speed(['green'])}
Speed+
,
SpeedRRPlus: () =>
- {triangle(['red'])}
+ {speed(['red'])}
Speed+
,
SpeedBBPlus:() =>
- {triangle(['blue'])}
+ {speed(['blue'])}
Speed+
,
SpeedRGPlus: () =>
- {triangle(['red', 'green'])}
+ {speed(['red', 'green'])}
Speed+
,
SpeedGBPlus: () =>
- {triangle(['green', 'blue'])}
+ {speed(['green', 'blue'])}
Speed+
,
SpeedRBPlus:() =>
- {triangle(['red', 'blue'])}
+ {speed(['red', 'blue'])}
Speed+
,
SpeedGGPlusPlus: () =>
- {triangle(['green'])}
+ {speed(['green'])}
Speed++
,
SpeedRRPlusPlus: () =>
- {triangle(['red'])}
+ {speed(['red'])}
Speed++
,
SpeedBBPlusPlus:() =>
- {triangle(['blue'])}
+ {speed(['blue'])}
Speed++
,
SpeedRGPlusPlus: () =>
- {triangle(['red', 'green'])}
+ {speed(['red', 'green'])}
Speed++
,
SpeedGBPlusPlus: () =>
- {triangle(['green', 'blue'])}
+ {speed(['green', 'blue'])}
Speed++
,
SpeedRBPlusPlus:() =>
- {triangle(['red', 'blue'])}
+ {speed(['red', 'blue'])}
Speed++
,
};
diff --git a/client/src/components/svgs/life.jsx b/client/src/components/svgs/life.jsx
new file mode 100644
index 00000000..4756e2e5
--- /dev/null
+++ b/client/src/components/svgs/life.jsx
@@ -0,0 +1,33 @@
+const preact = require('preact');
+
+module.exports = function triangle(colours) {
+ if (colours.length === 1) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/client/src/components/svgs/power.jsx b/client/src/components/svgs/power.jsx
new file mode 100644
index 00000000..508f95e5
--- /dev/null
+++ b/client/src/components/svgs/power.jsx
@@ -0,0 +1,23 @@
+const preact = require('preact');
+
+module.exports = function triangle(colours) {
+ if (colours.length === 1) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+};
diff --git a/client/src/components/svgs/speed.jsx b/client/src/components/svgs/speed.jsx
new file mode 100644
index 00000000..6c0d6aaa
--- /dev/null
+++ b/client/src/components/svgs/speed.jsx
@@ -0,0 +1,37 @@
+const preact = require('preact');
+
+module.exports = function triangle(colours) {
+ if (colours.length === 1) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+};
+
diff --git a/client/src/components/targeting.arrows.jsx b/client/src/components/targeting.arrows.jsx
index 2d570121..fba1b064 100644
--- a/client/src/components/targeting.arrows.jsx
+++ b/client/src/components/targeting.arrows.jsx
@@ -44,15 +44,14 @@ class TargetSvg extends Component {
animating,
game,
gameEffectInfo,
- authenticated,
} = props;
const { width, height } = state;
if (!game) return false; // game will be null when battle ends
if (game.phase === 'Finished') return false; // Clear everything if its over (in case of abandon)
- // First time joining game phase
- if (!authenticated && game.stack.length === 0) {
+ // First round of a game
+ if (!game.resolutions.length && game.stack.length === 0) {
return (
Select a skill from each construct, click a target for that skill and then click READY.
diff --git a/client/src/components/vbox.stash.jsx b/client/src/components/vbox.stash.jsx
index 0e737627..3d2f85dd 100644
--- a/client/src/components/vbox.stash.jsx
+++ b/client/src/components/vbox.stash.jsx
@@ -9,7 +9,7 @@ const buttons = require('./buttons');
const { removeTier } = require('../utils');
const addState = connect(
- ({ itemUnequip, vboxHighlight, vboxSelected, tutorial }) => ({ itemUnequip, vboxHighlight, vboxSelected, tutorial }));
+ ({ itemUnequip, vboxHighlight, vboxSelected, tutorial, instance }) => ({ itemUnequip, vboxHighlight, vboxSelected, tutorial, instance }));
class stashElement extends preact.Component {
shouldComponentUpdate(newProps) {
@@ -41,6 +41,7 @@ class stashElement extends preact.Component {
vboxHighlight,
vboxSelected,
tutorial,
+ instance,
} = props;
const { storeSelect, stashSelect } = vboxSelected;
@@ -97,7 +98,7 @@ class stashElement extends preact.Component {
: `${border} ${notValidCombo ? 'fade' : ''}`;
const invObject = shapes[v] ? shapes[v]() : v;
- const tutorialDisable = tutorial === 1;
+ const tutorialDisable = tutorial === 1 && instance.time_control === 'Practice' && instance.rounds.length === 1;
return (