From b866a62ab3d1d427688954383ed7035111b0e132 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sat, 28 Mar 2020 00:02:03 +0100
Subject: [PATCH] Fix Apocalypse (again...), moveslist highlighting and get a
 first working draft of a tiny subset of Dynamo (knights push/pull +
 'dynamate')

---
 client/public/images/pieces/Dynamo/pstep.svg  |  84 +++++++++++++
 client/public/images/pieces/Dynamo/raus.svg   |  84 +++++++++++++
 .../public/images/pieces/Dynamo/shift_1.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_2.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_3.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_4.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_5.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_6.svg   |  61 ++++++++++
 .../public/images/pieces/Dynamo/shift_7.svg   |  61 ++++++++++
 client/public/images/pieces/SOURCE            |   4 +
 client/src/components/MoveList.vue            |   6 +-
 client/src/variants/Apocalypse.js             |  55 ++++++---
 client/src/variants/Dynamo.js                 | 115 ++++++++++++++----
 13 files changed, 726 insertions(+), 49 deletions(-)
 create mode 100644 client/public/images/pieces/Dynamo/pstep.svg
 create mode 100644 client/public/images/pieces/Dynamo/raus.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_1.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_2.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_3.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_4.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_5.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_6.svg
 create mode 100644 client/public/images/pieces/Dynamo/shift_7.svg

diff --git a/client/public/images/pieces/Dynamo/pstep.svg b/client/public/images/pieces/Dynamo/pstep.svg
new file mode 100644
index 00000000..17b0440a
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/pstep.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="42.84"
+   height="47.09"
+   id="svg3017"
+   version="1.1"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="pstep.svg">
+  <defs
+     id="defs3019" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.919596"
+     inkscape:cx="0.15461729"
+     inkscape:cy="31.379202"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3022">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-129.38761,-210.45665)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:'Linux Libertine O';-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="26.263966"
+       y="33.44817"
+       id="text3037"
+       transform="translate(260.07679,165.41838)"><tspan
+         sodipodi:role="line"
+         id="tspan3039"
+         x="26.263966"
+         y="33.44817"
+         style="font-size:72px;line-height:1.25"> </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.36832905px;line-height:0%;font-family:'Linux Libertine O';-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.86402738"
+       x="121.15683"
+       y="266.12671"
+       id="text3101"
+       transform="scale(1.0389894,0.96247374)"><tspan
+         sodipodi:role="line"
+         id="tspan3103"
+         x="121.15683"
+         y="266.12671"
+         style="font-size:62.20997238px;line-height:1.25;stroke-width:0.86402738">P</tspan></text>
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/raus.svg b/client/public/images/pieces/Dynamo/raus.svg
new file mode 100644
index 00000000..1d831147
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/raus.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48.549999"
+   height="47.75"
+   id="svg3017"
+   version="1.1"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="raus.svg">
+  <defs
+     id="defs3019" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="14.247608"
+     inkscape:cy="32.005965"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3022">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-139.51755,-210.42342)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:0%;font-family:'Linux Libertine O';-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="26.263966"
+       y="33.44817"
+       id="text3037"
+       transform="translate(260.07679,165.41838)"><tspan
+         sodipodi:role="line"
+         id="tspan3039"
+         x="26.263966"
+         y="33.44817"
+         style="font-size:72px;line-height:1.25"> </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.31848526px;line-height:0%;font-family:'Linux Libertine O';-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85987371"
+       x="131.2245"
+       y="269.13638"
+       id="text3109"
+       transform="scale(1.0490261,0.95326513)"><tspan
+         sodipodi:role="line"
+         id="tspan3111"
+         x="131.2245"
+         y="269.13638"
+         style="font-size:61.91091156px;line-height:1.25;stroke-width:0.85987371">R</tspan></text>
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_1.svg b/client/public/images/pieces/Dynamo/shift_1.svg
new file mode 100644
index 00000000..3bcd08bd
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_1.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg42"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_1.svg">
+  <defs
+     id="defs36" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata39">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="M 58.349428,36.064396 V 59.96862 l 2.716384,1.785055 c 2.483558,1.552221 4.03579,4.113389 1.785058,2.794 -0.620884,-0.310446 -0.776094,-0.232834 -0.388058,0.155232 0.388058,0.388056 1.086558,0.6985 1.552232,0.6985 0.543268,0 0.853732,0.620889 0.853732,1.397 -0.07766,0.6985 0.1551,1.164168 0.465652,0.931333 0.853732,-0.543277 1.707442,3.337277 1.086558,4.423835 -0.388058,0.543274 -0.15532,0.62089 0.465674,0.232832 0.6985,-0.465667 0.931326,0.07762 0.620884,2.17311 -0.15532,1.552223 0,2.561165 0.310442,2.405948 0.388058,-0.232834 0.620884,31.975775 0.620884,71.635055 0,75.12756 -0.07766,75.90365 -3.337268,82.19015 -0.6985,1.31941 -2.483558,3.18208 -3.958174,4.26864 l -2.794,1.86263 v 24.21467 24.29227 h 52.309882 52.30991 l 0.38806,-1.62982 c 0.23282,-0.93133 0.46565,-11.8745 0.46565,-24.29227 l 0.0777,-22.58485 -3.18206,-2.17309 c -2.01788,-1.397 -3.80294,-3.4925 -4.81188,-5.82085 L 154.19925,225.28029 153.9664,118.72023 153.8113,12.237787 H 106.08028 58.349428 Z"
+       id="path8"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_2.svg b/client/public/images/pieces/Dynamo/shift_2.svg
new file mode 100644
index 00000000..4f7eeb51
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_2.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg93"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_2.svg">
+  <defs
+     id="defs87" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata90">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="M 96.39771,9.1620063 C 64.809974,11.257506 37.878916,19.329059 14.362751,33.687116 l -5.2775555,3.259665 -0.07762,5.044723 c -0.07762,5.898444 -0.07762,62.942606 0,66.357496 l 0.07762,2.32834 38.1846625,-0.15523 c 21.032612,-0.0776 39.038382,-0.15524 39.892112,-0.15524 1.62983,-0.0776 1.70745,-0.38805 2.01789,-14.280438 0.31044,-12.107334 0.62088,-14.746109 2.01788,-18.471444 2.71641,-6.829781 8.07156,-10.787944 14.74612,-10.787944 3.88056,0 8.07156,1.474612 7.37306,2.561163 -0.31045,0.465667 -0.0777,0.543281 0.46567,0.232833 1.16415,-0.776108 4.11338,1.785058 3.41488,2.871616 -0.23282,0.465667 -0.0777,0.543276 0.38806,0.232832 1.08656,-0.62089 2.794,2.328335 2.01789,3.57011 -0.38806,0.543276 -0.23283,0.62089 0.46567,0.232834 0.77612,-0.465667 0.93133,-0.310444 0.54327,0.6985 -0.31044,0.6985 -0.23283,1.086556 0.15532,0.853724 1.16417,-0.6985 2.63879,8.071551 2.17311,13.116276 -1.47461,15.134168 -7.06261,20.256498 -38.10705,34.769768 -33.838446,15.83269 -49.28304,24.83558 -59.993388,35.08025 -12.107324,11.48644 -18.1609905,24.13704 -20.4117135,42.76371 -0.931333,7.29544 -1.629833,74.58427 -0.931333,79.70662 l 0.310444,2.17311 h 99.6526605 99.65267 v -42.68611 -42.68612 h -39.96973 -39.89209 l -0.38806,2.48356 c -0.23285,1.397 -0.62088,4.81188 -0.85373,7.60588 -0.6985,7.6835 -2.94921,11.56406 -8.382,14.28044 -4.26862,2.0955 -5.27756,2.25074 -16.14312,2.63879 l -11.56403,0.38806 v -4.1134 c 0,-6.05366 1.397,-9.779 5.35515,-14.20283 5.12235,-5.66562 11.8745,-9.779 36.71006,-22.27438 34.14888,-17.22968 44.93682,-23.20574 53.31882,-29.56983 6.20891,-4.65667 12.72823,-11.95212 17.07444,-19.09235 12.88347,-21.0326 13.50435,-62.709762 1.31941,-88.321431 C 189.2207,28.099116 168.57614,15.06045 136.52276,10.481394 128.68403,9.3948383 104.85741,8.5411153 96.39782,9.1620063 Z"
+       id="path4"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_3.svg b/client/public/images/pieces/Dynamo/shift_3.svg
new file mode 100644
index 00000000..50b2d025
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_3.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg160"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_3.svg">
+  <defs
+     id="defs154" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata157">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="M 92.521149,10.397783 C 63.416988,12.726116 37.10682,20.952895 15.22049,34.612449 c -4.191,2.638779 -7.838723,5.122334 -8.071556,5.510388 -0.232833,0.310446 -0.388056,7.295446 -0.310444,15.367 0,11.408835 -0.155232,14.590891 -0.931335,14.202833 -0.6985,-0.388052 -0.6985,-0.310442 0.07762,0.543281 0.620891,0.6985 0.931335,3.725335 0.931335,9.0805 0,6.208886 -0.232835,7.838719 -0.931335,7.450661 -0.776109,-0.465666 -0.776109,-0.388052 -0.07762,0.543281 0.620891,0.776109 0.931335,4.113386 0.853723,9.701386 v 8.459611 l 40.823442,0.23284 40.823444,0.15521 V 95.61477 c 0,-20.101276 3.880555,-27.319109 14.668506,-27.163886 4.65667,0 10.63273,1.940277 9.85661,3.182058 -0.23285,0.388052 0.0777,1.086552 0.6985,1.629835 0.62089,0.543275 1.16415,0.6985 1.16415,0.388051 0,-0.310444 0.54329,-0.15521 1.16418,0.388056 0.6985,0.543277 1.08656,1.47461 0.85373,2.0955 -0.23285,0.620893 -0.15532,0.931335 0.23283,0.6985 0.62088,-0.465665 1.70744,1.707444 2.87161,5.665609 0.77612,2.949226 0.54327,17.074445 -0.38806,21.265447 -2.01788,8.69244 -5.82082,12.65061 -14.43567,14.90133 -3.4925,0.85372 -8.925271,1.16417 -23.050502,1.16417 H 63.572209 v 15.67744 c 0,8.69245 -0.07762,20.79978 -0.232833,27.00867 l -0.155232,11.25361 16.686388,-0.15523 c 22.740058,-0.15523 29.492238,1.16417 35.545888,6.90739 2.40594,2.40595 3.4149,4.42384 1.55223,3.25967 -0.54329,-0.31045 -0.62088,-0.23283 -0.31044,0.38805 0.31044,0.46567 0.85371,0.6985 1.16415,0.46567 1.16417,-0.6985 3.33729,6.44172 2.794,9.0805 -0.38804,2.01789 -0.31044,2.32833 0.38806,1.397 1.47461,-1.94028 0.46567,20.48934 -1.08656,25.45646 -1.62983,4.96709 -5.74321,9.85659 -9.54615,11.09836 -4.03579,1.31938 -12.184941,0.54329 -14.746121,-1.31938 -2.94923,-2.25071 -5.43277,-6.82977 -6.208883,-11.48645 -0.310442,-2.17309 -0.620884,-4.34621 -0.6985,-4.73426 -0.07766,-0.46568 -0.1551,-6.59695 -0.232848,-13.73718 l -0.07766,-12.96105 -40.512995,0.15523 -40.59061,0.15523 -0.465665,8.92528 c -0.232835,4.88951 -0.465667,8.4596 -0.543279,7.83872 -0.07762,-0.62089 -0.388056,-0.85371 -0.620888,-0.62089 -0.310444,0.31045 -0.15521,0.93133 0.310444,1.47462 1.241779,1.55221 1.241779,33.45038 0,32.75188 -0.776112,-0.46567 -0.853721,-0.31044 0,0.54327 0.620888,0.6985 0.931335,3.72533 0.931335,9.0805 0,6.20889 -0.232835,7.83873 -0.931335,7.45068 -0.776112,-0.46568 -0.6985,-0.23285 0,0.62088 0.620888,0.85373 0.931335,2.63877 0.6985,4.81188 -0.15521,1.94029 -0.07762,3.41489 0.155232,3.33729 0.931333,-0.23284 3.958165,1.86266 3.570112,2.56116 -0.232835,0.38805 0,0.93134 0.465665,1.24179 0.620888,0.31044 0.6985,0.23282 0.388056,-0.31045 -0.853721,-1.397 -0.310445,-1.16417 5.976055,2.63877 3.259666,1.94029 9.468556,5.12233 13.892387,7.06262 4.423834,1.94027 8.149167,3.88056 8.226779,4.26861 0.155232,0.31045 0.620888,0.46566 1.008944,0.1551 0.388056,-0.23282 3.570111,0.46568 7.140221,1.55224 16.143111,5.04471 35.545899,7.52826 58.751614,7.60588 18.08338,0.0777 30.34594,-1.00894 41.52194,-3.64773 18.47144,-4.34621 29.80267,-10.16704 39.96973,-20.48933 9.70138,-9.85661 14.6685,-19.63561 18.23862,-35.77871 1.70744,-7.91632 2.40594,-30.19073 1.24176,-39.19362 -3.10444,-23.28333 -15.83267,-40.51299 -34.925,-47.34278 -2.40594,-0.85371 -2.56117,-1.08655 -1.24176,-1.55221 7.37303,-2.71639 13.65953,-6.67456 19.09232,-12.02973 10.16706,-10.01183 14.35806,-20.955 15.21177,-39.581665 C 207.30794,45.710837 183.63656,18.779783 135.44006,11.561951 125.273,10.087339 104.08517,9.4664512 92.521109,10.397783 Z M 114.79553,72.48667 c 0,0.388058 -0.1551,0.776116 -0.31044,0.776116 -0.23282,0 -0.62088,-0.388058 -0.85371,-0.776116 -0.23285,-0.465668 -0.0777,-0.77611 0.31044,-0.77611 0.46568,0 0.85371,0.310442 0.85371,0.77611 z"
+       id="path6"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_4.svg b/client/public/images/pieces/Dynamo/shift_4.svg
new file mode 100644
index 00000000..96557131
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_4.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg227"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_4.svg">
+  <defs
+     id="defs221" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata224">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="M 143.99778,12.324748 95.646069,12.47998 69.180681,52.29448 C 54.589797,74.103201 33.401955,105.76853 22.070732,122.61014 L 1.50379,153.18891 1.58141,183.53488 c 0,16.68638 0.07762,31.51009 0.07762,32.82948 l 0.07762,2.56117 h 55.103884 55.103886 v 2.01788 c 0,1.08656 -0.31045,1.78506 -0.62089,1.55224 -0.38806,-0.23283 -0.54327,0.62088 -0.31044,1.78505 0.15532,1.24177 -0.38806,3.57012 -1.31938,5.35516 -1.31939,2.56117 -2.56118,3.64773 -6.59695,5.588 l -5.044731,2.40594 0.15532,23.82661 0.15532,23.82662 51.378561,0.1551 c 28.32806,0.0777 52.15465,-0.0777 53.00838,-0.31044 1.55221,-0.38806 1.55221,-1.00894 1.55221,-24.36989 v -23.98182 l -2.09549,-0.85373 c -4.57906,-1.70745 -7.52827,-6.3641 -8.4596,-13.03866 l -0.54329,-3.95806 h 9.00289 8.92526 l 0.23283,-2.17312 c 0.15532,-1.16415 0.31046,-13.65953 0.31046,-27.70715 l -0.0777,-25.61167 -9.0805,-0.23283 -9.0805,-0.23285 V 87.76275 c 0,-41.366723 -0.23282,-75.282779 -0.54329,-75.438002 -0.38803,-0.15521 -22.352,-0.15521 -48.895,0 z m -30.1131,116.571882 v 34.14889 H 91.144619 68.482181 l 1.707442,-2.71638 c 9.778996,-15.21178 42.996557,-65.50378 43.306997,-65.58139 0.23283,0 0.38806,15.367 0.38806,34.14888 z"
+       id="path12"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_5.svg b/client/public/images/pieces/Dynamo/shift_5.svg
new file mode 100644
index 00000000..b2237d73
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_5.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg294"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_5.svg">
+  <defs
+     id="defs288" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata291">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="m 8.8831786,16.031897 c -0.388056,1.862668 -0.465667,3.414889 -0.232832,3.570112 0.543276,0.232833 0.310444,7.062609 -0.310445,7.6835 -0.232834,0.232833 -0.07762,1.008944 0.310445,1.707444 0.388055,0.77611 0.388055,1.785056 0,2.328333 -0.310445,0.620888 -0.310445,2.0955 0,3.337277 0.465665,1.474612 0.388055,2.017888 -0.155232,1.707444 -0.543277,-0.310444 -0.543277,0 -0.07762,0.931333 0.388055,0.853723 0.62089,3.725335 0.465667,6.519335 -0.232833,5.588 -0.232833,7.295444 0.07762,12.417776 0.155232,1.940277 -0.155232,3.958167 -0.620888,4.579056 -0.620889,0.853721 -0.620889,1.008944 0.07762,0.620888 0.6985,-0.465667 0.853721,0.388056 0.543276,3.4925 -0.232832,2.250723 -0.620888,4.346223 -0.853723,4.656668 -0.15521,0.388055 0,0.620888 0.310447,0.620888 0.388053,0 0.543276,1.62983 0.465665,3.647721 -0.15521,2.0955 -0.310444,4.191 -0.232833,4.656667 0,1.164168 0,2.0955 0,6.208891 0,1.629833 0.07762,4.268609 0.232833,5.898442 0.07762,1.629835 -0.07762,3.337277 -0.388056,3.880558 -0.310444,0.465667 -0.15521,1.319384 0.232835,1.862667 0.543277,0.620884 0.543277,1.397 0,2.405942 -0.465668,0.853724 -0.620891,1.707441 -0.388056,1.940271 0.776112,0.77612 0.776112,9.46856 -0.07762,10.55512 -0.543277,0.85372 -0.543277,1.00894 0.15521,0.62088 0.620891,-0.38805 0.853723,0.0776 0.6985,1.55223 -0.15521,1.24177 -0.310444,3.18206 -0.388054,4.34622 -0.07762,1.47461 -0.388055,2.01789 -1.008946,1.70745 -0.543277,-0.31045 -0.465665,-0.0776 0.155232,0.54327 0.853723,0.6985 1.164167,2.0955 1.008944,4.50145 -0.15521,1.94028 -0.232832,3.95817 -0.232832,4.42383 0,2.48355 0,3.4925 0,6.20889 0,1.62983 0.07762,4.26861 0.15521,5.89843 0.155232,1.62985 0,3.33729 -0.310445,3.88056 -0.310444,0.46567 -0.15521,1.31941 0.232835,1.86267 0.543277,0.62089 0.543277,1.397 0,2.40595 -0.465667,0.85373 -0.62089,1.70744 -0.388056,1.94029 0.77611,0.77609 0.77611,9.46853 -0.07762,10.55509 -0.620888,0.93135 -0.543279,1.00894 0.310445,0.46567 0.853723,-0.46567 1.008944,-0.31044 0.620888,0.62089 -0.232833,0.77611 -0.232833,1.31938 0.07762,1.31938 1.2417774,0.0777 66.3575004,0.0777 73.2648754,0 h 7.528268 l 2.328348,-3.41488 c 5.432765,-7.83871 15.134156,-9.54615 22.817656,-4.11339 1.3194,0.85374 2.0179,1.94027 1.78506,2.63877 -0.23283,0.62091 -0.15532,0.85373 0.31044,0.62091 1.00896,-0.62091 2.7164,3.02682 3.80296,7.99394 0.54327,2.48356 0.85371,12.80583 0.85371,25.92212 0,24.91315 -0.62088,29.18176 -5.12232,33.60561 -5.27756,5.27754 -15.13418,5.12233 -20.644561,-0.31046 -4.501445,-4.57904 -5.976061,-12.34015 -6.053677,-32.131 V 182.74056 H 49.784235 c -35.313056,0 -40.3577774,0.15532 -40.4353884,1.16417 -0.07762,1.16415 -0.310445,2.17312 -0.6985,3.25965 -0.07762,0.38806 -0.07762,0.93135 0,1.397 0.465665,2.01791 0.388055,5.97606 -0.155232,6.82979 -0.310445,0.46568 -0.15521,1.31939 0.232834,1.86268 0.543277,0.62088 0.543277,1.397 0,2.40594 -0.465667,0.85371 -0.62089,1.70744 -0.388055,1.94027 0.776109,0.77611 0.776109,9.46855 -0.07762,10.55511 -0.543279,0.85373 -0.543279,1.00894 0.15521,0.62089 0.62089,-0.38806 0.853723,0.0777 0.6985,1.55223 -0.15521,1.24177 -0.310445,3.18206 -0.388054,4.34621 -0.07762,1.47461 -0.388056,2.0179 -1.008946,1.70746 -0.543277,-0.31046 -0.465666,-0.0777 0.155232,0.54327 1.319388,1.08656 1.552221,6.51933 0.388055,8.382 -0.388055,0.62088 -0.310444,0.85373 0.232833,0.46567 0.543279,-0.31044 0.776112,0.23283 0.620888,1.62983 -0.15521,1.24177 -0.388055,2.17309 -0.465665,2.17309 -0.07762,0 -0.155232,1.16418 -0.232835,2.56118 -0.07762,1.31938 0,2.48356 0.310445,2.48356 0.232834,0 0.232834,1.62982 0.155232,3.64773 -0.155232,2.0955 -0.310445,4.191 -0.232833,4.65665 0,2.01788 0,3.02685 -0.07762,5.66562 -0.155232,4.8895 0,5.19994 4.3462214,8.14917 2.328335,1.62983 4.035779,3.25965 3.802944,3.57009 -0.232832,0.38806 0.232835,0.46568 0.931335,0.15532 0.931333,-0.31044 1.164165,-0.23282 0.776112,0.46568 -0.310447,0.46565 -0.310447,0.77609 0.07762,0.6985 1.164165,-0.31044 4.113388,1.00894 3.725332,1.70744 -0.232832,0.38806 0,0.93133 0.465668,1.24177 0.620888,0.38806 0.6985,0.23285 0.310444,-0.46565 -0.6985,-1.16418 -1.319391,-1.47462 10.167053,4.42382 16.143112,8.22677 32.519047,13.03865 55.414335,16.14312 6.131269,0.85371 30.34595,1.00894 38.80554,0.31044 20.79979,-1.78506 38.02947,-7.14023 49.90397,-15.367 9.15809,-6.2865 18.00576,-17.77294 22.19676,-28.71612 5.74324,-14.82371 7.83874,-29.25938 7.83874,-53.47405 0,-17.77295 -0.62091,-24.91316 -3.18206,-38.10706 -5.89844,-30.34602 -20.87741,-46.33392 -49.36068,-52.62042 -4.73426,-1.086547 -9.85661,-1.396996 -23.12811,-1.396996 -15.13415,0 -18.00577,0.232835 -25.2236,1.785056 -4.50146,1.00894 -9.856611,2.56117 -12.029731,3.33728 -2.095503,0.77611 -3.958177,1.47461 -4.035771,1.47461 -0.15532,0 -0.232848,-8.381997 -0.232848,-18.549053 V 68.729839 l 8.692449,0.388056 c 15.987901,0.543277 19.325171,2.949219 21.886351,15.910277 l 0.46565,2.017891 38.57273,-0.155232 c 21.26544,-0.07759 39.27121,-0.232824 40.04733,-0.310434 1.24179,-0.07762 1.31938,-2.405948 1.31938,-36.94289 V 12.77223 H 105.35379 9.5040676 Z"
+       id="path14"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_6.svg b/client/public/images/pieces/Dynamo/shift_6.svg
new file mode 100644
index 00000000..4897edc3
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_6.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg361"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_6.svg">
+  <defs
+     id="defs355" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata358">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="M 87.003221,9.4227343 C 38.108221,12.139123 14.048779,31.619511 7.0637789,73.995176 c -1.241768,7.605893 -2.794,27.707174 -2.173116,28.638494 0.15532,0.38806 0,0.62091 -0.310442,0.62091 -0.388058,0 -0.620884,1.16415 -0.465674,2.48353 0.15532,1.397 0.388058,25.92212 0.54329,54.56062 0.232826,28.56088 0.543268,53.24123 0.776116,54.71582 1.086558,7.14023 2.328326,16.14312 2.328326,18.00577 0.07766,1.08656 0.232826,1.86267 0.465674,1.70746 0.5432683,-0.6209 3.0268261,9.31333 2.7163841,10.94316 -0.232826,0.85373 -0.15532,1.08655 0.07766,0.46567 0.620884,-1.24179 5.976058,9.62377 5.898442,11.79688 0,0.6985 0.232826,1.16418 0.543268,1.00895 0.853732,-0.54327 4.113384,4.03579 3.570116,4.96711 -0.310442,0.46568 -0.07766,0.6985 0.543268,0.62089 0.54329,-0.15532 0.931348,0.23282 0.776116,0.77611 -0.07766,0.62089 0.15532,0.85371 0.465674,0.62089 0.931326,-0.54327 3.414884,2.17311 2.716384,3.02682 -0.388058,0.31047 -0.232826,0.38806 0.232826,0.15532 1.086558,-0.62088 4.423848,2.794 3.647732,3.72533 -0.388058,0.31044 -0.232826,0.38806 0.232826,0.15532 1.164174,-0.62089 4.346232,1.70744 3.725348,2.71638 -0.310442,0.54329 -0.15532,0.62089 0.388058,0.31044 0.543268,-0.38805 2.173094,0.23285 3.802942,1.24179 1.55221,1.08656 4.8895,2.71639 7.295442,3.72533 2.405942,1.00894 4.191,2.17312 3.958152,2.56117 -0.232826,0.46566 -0.07766,0.54327 0.388058,0.23283 0.465674,-0.23283 3.414906,0.23283 6.519348,1.08656 12.72821,3.57011 22.662442,4.73427 43.617438,5.19994 36.244395,0.77612 58.984445,-3.25967 75.981275,-13.50433 17.69533,-10.71034 27.31912,-27.62955 31.12206,-54.94867 1.31938,-9.31333 1.55223,-35.46827 0.46567,-44.62638 -5.35517,-43.69524 -27.39673,-65.03827 -68.84106,-66.51289 -16.60879,-0.62088 -31.35488,1.24177 -45.868175,5.89845 l -2.638766,0.77611 0.388056,-18.781883 c 0.388058,-20.877401 0.776094,-23.128124 5.199942,-27.784792 2.0955,-2.250716 3.570118,-3.026832 6.441713,-3.414886 6.2865,-0.931333 11.09841,-0.155232 14.35806,2.483554 4.191,3.41489 5.66562,8.071558 6.2865,19.247566 l 0.46567,9.313326 39.42645,0.232826 39.34882,0.15532 V 68.562401 38.44929 l -5.66561,-3.570112 C 165.39046,15.39879 129.61172,7.0167903 87.003221,9.4227343 Z M 115.25367,165.57628 c 2.17311,1.47462 3.18205,2.56118 2.87161,3.33727 -0.23282,0.62091 -0.15532,1.00897 0.23283,0.77612 0.93135,-0.62089 2.7164,3.88056 1.94029,5.04473 -0.31044,0.54327 -0.23285,0.77612 0.23282,0.46565 1.31939,-0.85371 1.78506,4.50147 1.78506,21.73112 0.0777,21.18782 -0.46567,24.91317 -4.34623,30.26832 -3.72533,5.04474 -14.59088,6.44174 -20.722157,2.63879 -6.053674,-3.72532 -7.52829,-10.32229 -7.52829,-32.98473 0,-22.66244 1.552232,-28.56088 8.537232,-32.131 4.967125,-2.56115 12.417775,-2.17309 16.996835,0.85373 z"
+       id="path10"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Dynamo/shift_7.svg b/client/public/images/pieces/Dynamo/shift_7.svg
new file mode 100644
index 00000000..59970898
--- /dev/null
+++ b/client/public/images/pieces/Dynamo/shift_7.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg428"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="shift_7.svg">
+  <defs
+     id="defs422" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="405.71429"
+     inkscape:cy="560"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata425">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke:none;stroke-width:0.07761112"
+       d="m 9.1638318,16.179728 c -0.155232,3.337268 -0.155232,101.981002 0.07762,106.404822 0.07762,1.31939 2.2507212,1.397 35.0026002,1.397 h 34.924993 v -14.6685 c 0,-32.829496 3.41491,-38.107054 24.369905,-38.107054 h 6.51933 l -2.94924,7.916326 c -1.62982,4.423848 -5.82082,15.832678 -9.313315,25.456438 -3.4925,9.62379 -7.60589,20.79979 -9.0805,24.83556 -1.47462,4.03579 -3.02683,8.22679 -3.33727,9.31335 -3.18206,9.779 -10.71035,28.6385 -11.25362,28.17283 -0.31044,-0.38806 -0.38805,-0.23283 -0.0777,0.31044 0.54327,1.00894 0.23283,2.0955 -8.226761,25.06838 -3.259674,8.77006 -9.468558,25.68929 -13.81479,37.64139 -4.34621,11.95211 -9.623768,26.4654 -11.796884,32.20861 -2.0955,5.74323 -4.8895,13.2715 -6.13129,16.60879 -1.241768,3.33727 -2.173094,6.28648 -2.017884,6.3641 0.620884,0.62088 89.330374,0.31044 89.873664,-0.23283 0.31044,-0.31044 2.0955,-4.96712 4.03577,-10.32227 4.11341,-11.33123 11.64167,-31.82056 29.64744,-80.71556 7.14023,-19.40279 14.74612,-40.04734 16.84162,-45.79055 7.83873,-21.42068 26.23256,-71.247004 28.87135,-78.387214 l 2.794,-7.373058 V 37.212322 12.221556 H 106.7986 9.4742758 Z"
+       id="path26"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/SOURCE b/client/public/images/pieces/SOURCE
index 9cb132af..ada138cd 100644
--- a/client/public/images/pieces/SOURCE
+++ b/client/public/images/pieces/SOURCE
@@ -5,3 +5,7 @@ Some fairy pieces found on the web and icon scout: https://iconscout.com/
 PNG images for Eightpieces from https://greenchess.net/index.php and Jeff Kubach design.
 Images of the Hawk and Elephant were designed by "Couch Tomato #2218" on Discord,
 for the pychess-variants website (http://pychess-variants.herokuapp.com/)
+For Dynamo:
+https://commons.wikimedia.org/wiki/File:Font_P.svg
+https://commons.wikimedia.org/wiki/File:Font_R.svg
+https://svgsilh.com/image/3203304.html
diff --git a/client/src/components/MoveList.vue b/client/src/components/MoveList.vue
index 91d138ef..6eaf43ce 100644
--- a/client/src/components/MoveList.vue
+++ b/client/src/components/MoveList.vue
@@ -53,7 +53,7 @@ div
         | {{ notation(moves[moveIdx]) }}
       .td(
         v-if="moveIdx < moves.length-1"
-        :class="{'highlight-lm': highlightBlackmove(moveIdx)}"
+        :class="{'highlight-lm': highlightBlackmove(moveIdx+1)}"
         @click="() => gotoMove(moveIdx+1)"
       )
         | {{ notation(moves[moveIdx+1]) }}
@@ -139,8 +139,8 @@ export default {
     },
     highlightBlackmove: function(moveIdx) {
       return (
-        this.cursor == moveIdx + 1 ||
-        (this.show == "byrow" && this.cursor == moveIdx + 2)
+        this.cursor == moveIdx ||
+        (this.show == "byrow" && this.cursor == moveIdx + 1)
       );
     },
     gotoMove: function(index) {
diff --git a/client/src/variants/Apocalypse.js b/client/src/variants/Apocalypse.js
index abcfd703..c136ff28 100644
--- a/client/src/variants/Apocalypse.js
+++ b/client/src/variants/Apocalypse.js
@@ -274,29 +274,44 @@ export class ApocalypseRules extends ChessRules {
       return (
         (
           m.vanish[0].p == V.KNIGHT &&
-          (m.vanish.length == 1 || m.vanish[1].c != m.vanish[0].c)
-        )
-        ||
-        (
-          // Promotion attempt
-          m.end.x == (m.vanish[0].c == "w" ? 0 : V.size.x - 1) &&
-          other.vanish.length == 2 &&
-          other.vanish[1].p == V.KNIGHT &&
-          other.vanish[1].c == m.vanish[0].c
-        )
-        ||
-        (
-          // Moving attempt
-          !movingLikeCapture(m) &&
-          other.start.x == m.end.x &&
-          other.start.y == m.end.y
+          (
+            m.vanish.length == 1 ||
+            m.vanish[1].c != m.vanish[0].c ||
+            // Self-capture attempt
+            (
+              !other.illegal &&
+              other.end.x == m.end.x &&
+              other.end.y == m.end.y
+            )
+          )
         )
         ||
         (
-          // Capture attempt
-          movingLikeCapture(m) &&
-          other.end.x == m.end.x &&
-          other.end.y == m.end.y
+          m.vanish[0].p == V.PAWN &&
+          !other.illegal &&
+          (
+            (
+              // Promotion attempt
+              m.end.x == (m.vanish[0].c == "w" ? 0 : V.size.x - 1) &&
+              other.vanish.length == 2 &&
+              other.vanish[1].p == V.KNIGHT &&
+              other.vanish[1].c == m.vanish[0].c
+            )
+            ||
+            (
+              // Moving attempt
+              !movingLikeCapture(m) &&
+              other.start.x == m.end.x &&
+              other.start.y == m.end.y
+            )
+            ||
+            (
+              // Capture attempt
+              movingLikeCapture(m) &&
+              other.end.x == m.end.x &&
+              other.end.y == m.end.y
+            )
+          )
         )
       );
     };
diff --git a/client/src/variants/Dynamo.js b/client/src/variants/Dynamo.js
index 4d443eb5..7a794ea2 100644
--- a/client/src/variants/Dynamo.js
+++ b/client/src/variants/Dynamo.js
@@ -1,4 +1,10 @@
-import { ChessRules } from "@/base_rules";
+import { ChessRules, Move, PiPo } from "@/base_rules";
+
+// TODO: need FEN lastmove pour interdire défaire dernière poussée
+// --> check appear et vanish totally reversed.
+
+// TODO: pawn promotions by push (en + des promotions standard)
+// --> similar to Zen promotions.
 
 export class DynamoRules extends ChessRules {
   canIplay(side, [x, y]) {
@@ -6,29 +12,6 @@ export class DynamoRules extends ChessRules {
     return true;
   }
 
-  // NOTE: to push a piece out of the board, make it slide until our piece
-  // (doing the action, moving or not)
-  getPotentialMovesFrom([x, y]) {
-    const color = this.turn;
-    let moves = [];
-    if (this.getColor(x, y) != color) {
-      // Push or pull something: freely only if subTurn == 1
-      if (this.subTurn == 2) {
-        // I know that someone is pushing/pulling: find out who,
-        // and deduce my possible squares (or exit).
-        // TODO
-      } else {
-        // Look in every direction for a friendly pusher/puller.
-        // This means that the action is done without moving.
-        // TODO
-      }
-    } else {
-      // My piece: fill first with normal moves (if any),
-      // and add pushes/pulls (if any).
-      // TODO
-    }
-  }
-
   getPPpath(m) {
     let imgName = "";
     if (m.vanish.length == 1) imgName = "empty";
@@ -40,8 +23,8 @@ export class DynamoRules extends ChessRules {
       else {
         const deltaX = Math.abs(m.appear[1].x - m.vanish[1].x);
         const deltaY = Math.abs(m.appear[1].y - m.vanish[1].y);
-        if (deltaX == 0) imgName = "shift" + deltaY;
-        else if (deltaY == 0) imgName = "shift" + deltaX;
+        if (deltaX == 0) imgName = "shift_" + deltaY;
+        else if (deltaY == 0) imgName = "shift_" + deltaX;
         else
           // Special knight push/pull: just print "P"
           imgName = "pstep";
@@ -50,6 +33,86 @@ export class DynamoRules extends ChessRules {
     return "Dynamo/" + imgName;
   }
 
+  getPactions(sq, by, color) {
+    const [x, y] = sq;
+    let moves = [];
+    let squares = {};
+//    const lineAdd = (allowedPieces) = {
+//      // attacking piece must be of the allowed types
+//    };
+    if (!by) {
+      // Look in all directions for a "color" piece
+      for (let step of V.steps[V.KNIGHT]) {
+        const xx = x + step[0],
+              yy = y + step[1];
+        if (
+          V.OnBoard(xx, yy) &&
+          this.getPiece(xx, yy) == V.KNIGHT &&
+          this.getColor(xx, yy) == color
+        ) {
+          const px = x - step[0],
+                py = y - step[1];
+          if (V.OnBoard(px, py) && this.board[px][py] == V.EMPTY) {
+            const hash = "s" + px + py;
+            if (!squares[hash]) {
+              squares[hash] = true;
+              moves.push(this.getBasicMove([x, y], [px, py]));
+            }
+          } else {
+            const hash = "s" + xx + yy;
+            if (!squares[hash]) {
+              squares[hash] = true;
+              moves.push(
+                new Move({
+                  start: { x: x, y: y },
+                  end: { x: xx, y: yy },
+                  appear: [],
+                  vanish: [
+                    new PiPo({
+                      x: x,
+                      y: y,
+                      p: this.getPiece(x, y),
+                      c: oppCol
+                    })
+                  ]
+                })
+              );
+            }
+          }
+        }
+      }
+      for (let step in V.steps[V.ROOK]) {
+        // color is enemy, so no pawn pushes: king, rook and queen
+      }
+      for (let step in V.steps[V.BISHOP]) {
+        // King, bishop, queen, and possibly pawns attacks
+      }
+    }
+//    else {
+//      // TODO: probably in a different function for now.
+//    }
+    return moves;
+  }
+
+  // NOTE: to push a piece out of the board, make it slide until our piece
+  // (doing the action, moving or not)
+  getPotentialMovesFrom([x, y]) {
+    const color = this.turn;
+    const oppCol = V.GetOppCol(color);
+    if (this.getColor(x, y) != color) {
+      // Look in every direction for a friendly pusher/puller.
+      // This means that the action is done without moving.
+      return this.getPactions([x, y], null, color);
+    } else {
+      // Playing my pieces: do they attack an enemy?
+      // If yes ... TODO
+      //this.getPattacks(sq, [x, y]);
+      // Temporary:
+      return super.getPotentialMovesFrom([x, y]);
+    }
+    return []; //never reached
+  }
+
   isAttackedBySlideNJump([x, y], color, piece, steps, oneStep) {
     for (let step of steps) {
       let rx = x + step[0],
-- 
2.44.0