Chakart: almost there
authorBenjamin Auder <benjamin.auder@somewhere>
Mon, 27 Apr 2020 00:57:53 +0000 (02:57 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Mon, 27 Apr 2020 00:57:53 +0000 (02:57 +0200)
18 files changed:
client/public/images/pieces/Chakart/SOURCE
client/public/images/pieces/Chakart/ab.svg [deleted file]
client/public/images/pieces/Chakart/ad.svg [new file with mode: 0644]
client/public/images/pieces/Chakart/ae.svg
client/public/images/pieces/Chakart/am.svg
client/public/images/pieces/Chakart/an.svg [deleted file]
client/public/images/pieces/Chakart/aw.svg [new file with mode: 0644]
client/src/base_rules.js
client/src/components/BaseGame.vue
client/src/components/Board.vue
client/src/translations/rules/Chakart/en.pug
client/src/translations/rules/Chakart/fr.pug
client/src/variants/Apocalypse.js
client/src/variants/Chakart.js
client/src/variants/Dark.js
client/src/variants/Hidden.js
client/src/variants/Hiddenqueen.js
client/src/variants/Synchrone.js

index 988a2a3..9714f7c 100644 (file)
@@ -1,5 +1,5 @@
 Objects were found here:
 https://fr.m.wikiversity.org/wiki/Fichier:Tango_Style_Mushroom_icon.svg
 https://commons.wikimedia.org/wiki/File:Tux_Paint_banana.svg
-https://fr.wikipedia.org/wiki/Fichier:Font_Awesome_5_solid_bomb.svg
+https://www.onlinewebfonts.com/icon/425540
 https://www.svgrepo.com/svg/264673/easter-egg-easter
diff --git a/client/public/images/pieces/Chakart/ab.svg b/client/public/images/pieces/Chakart/ab.svg
deleted file mode 100644 (file)
index 63e70e3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z"/></svg>
-<!--
-Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com
-License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
--->
\ No newline at end of file
diff --git a/client/public/images/pieces/Chakart/ad.svg b/client/public/images/pieces/Chakart/ad.svg
new file mode 100644 (file)
index 0000000..b0f1fc9
--- /dev/null
@@ -0,0 +1,147 @@
+<?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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg1"
+   sodipodi:version="0.32"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   width="400.00000pt"
+   height="400.00000pt"
+   sodipodi:docname="aa.svg"
+   version="1.1">
+  <metadata
+     id="metadata20" />
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient855">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="0.0000000"
+         id="stop856" />
+      <stop
+         style="stop-color:#5f0e00;stop-opacity:0.41666666;"
+         offset="1.0000000"
+         id="stop857" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient829">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.52499998;"
+         offset="0.0000000"
+         id="stop830" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop831" />
+    </linearGradient>
+    <radialGradient
+       xlink:href="#linearGradient829"
+       id="radialGradient832" />
+    <linearGradient
+       xlink:href="#linearGradient829"
+       id="linearGradient850"
+       x1="62.831094"
+       y1="339.76997"
+       x2="312.91139"
+       y2="191.31802"
+       gradientTransform="scale(1.5329819,0.65232341)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       xlink:href="#linearGradient855"
+       id="linearGradient854"
+       x1="109.53184"
+       y1="332.16704"
+       x2="370.90093"
+       y2="332.16704"
+       gradientTransform="scale(1.2211061,0.81892967)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="303.06094"
+     inkscape:cy="199.24188"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     showgrid="true"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg1" />
+  <g
+     id="g845"
+     transform="matrix(1.0251326,0,0,1.0341708,7.390093,17.812187)">
+    <path
+       style="fill:#ffe200;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linejoin:round;stroke-dasharray:none"
+       d="M 388.75,93.75 C 370,76.25 420,63.75 426.25,70 c 10,5 -8.75,8.75 -7.5,17.5 1.25,8.75 0,55 10,57.5 10,2.5 22.5,11.25 22.5,23.75 C 482.5,246.25 360,458.75 70,352.5 65,348.75 37.5,317.5 32.5,310 30,301.25 26.25,280 41.25,272.5 170,238.75 318.75,305 386.25,153.75 c 11.25,-26.25 2.5,-60 2.5,-60 z"
+       id="path847"
+       sodipodi:nodetypes="cccccccccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient850);fill-rule:evenodd;stroke-width:1.00000003pt"
+       d="m 43.75,290 2.5,-12.5 C 138.75,242.5 310,316.25 392.5,157.5 351.25,270 278.75,338.75 43.75,290 Z"
+       id="path849"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#442400;fill-rule:evenodd;stroke-width:1.00000003pt"
+       d="M 386.15267,89.13626 C 389.06731,71.53588 415.26511,71.062953 422.59733,70.191604 434.58256,71.75792 407.11069,91.63626 386.15267,89.13626 Z"
+       id="path851"
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#442400;fill-rule:evenodd;stroke-width:1.00000003pt"
+       d="m 32.517518,305.14122 c -0.932686,-18.36985 -1.865381,-24.42824 8.743911,-30.48663 4.61679,6.92518 3.749991,28.36984 -8.743911,30.48663 z"
+       id="path852"
+       sodipodi:nodetypes="ccc"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:url(#linearGradient854);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.00000003pt"
+       d="M 133.75,366.25 C 352.5,421.25 426.74042,283.12802 440,250 c 22.5,-40 8.75,-85 8.75,-85 -1.25,135 -142.5,243.75 -315,201.25 z"
+       id="path853"
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0" />
+  </g>
+  <metadata
+     id="metadata22">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:title>Clipart by Nicu Buculei - pear</dc:title>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Nicu Buculei</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://web.resource.org/cc/PublicDomain" />
+        <dc:format>image/svg+xml</dc:format>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://web.resource.org/cc/PublicDomain">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+</svg>
index e9c6df6..91e2b18 100644 (file)
-<?xml version="1.0" encoding="iso-8859-1"?>\r
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">\r
-<path style="fill:#73D8D0;" d="M458.901,296.772c0,7.105-0.24,14.033-0.708,20.81C449.621,444.059,362.375,512,256,512\r
-       c-106.362,0-193.621-67.941-202.193-194.418c-0.468-6.776-0.708-13.705-0.708-20.81c0-16.246,1.226-32.706,3.565-49.142\r
-       C74.49,122.621,156.958,0,256,0c99.055,0,181.51,122.621,199.336,247.631C457.675,264.066,458.901,280.527,458.901,296.772z"/>\r
-<path style="fill:#69CCC2;" d="M256,0.005c-76.007,0-137.615,156.958-137.615,296.772c0,138.715,60.647,214.039,135.832,215.215\r
-       c-111.23-0.796-201.118-76.159-201.118-215.215C53.099,156.963,143.949,0.005,256,0.005z"/>\r
-<path style="fill:#E8564F;" d="M458.901,296.772c0,7.105-0.24,14.033-0.708,20.81H53.807c-0.468-6.776-0.708-13.705-0.708-20.81\r
-       c0-16.246,1.226-32.706,3.565-49.142h398.672C457.675,264.066,458.901,280.527,458.901,296.772z"/>\r
-<g>\r
-       <path style="fill:#FC675B;" d="M225,322.841l-60.533,30.266c-22.39,11.189-48.737-5.095-48.737-30.127v-80.748\r
-               c0-25.032,26.347-41.316,48.737-30.127L225,242.371"/>\r
-       <path style="fill:#FC675B;" d="M287.012,322.854l60.533,30.254c22.39,11.189,48.737-5.095,48.737-30.127v-80.748\r
-               c0-25.032-26.347-41.316-48.737-30.127l-60.533,30.254"/>\r
-</g>\r
-<g>\r
-       <polygon style="fill:#E8564F;" points="296.136,260.387 362.035,263.084 299.192,279.103 290.184,282.777 286.428,259.769  "/>\r
-       <polygon style="fill:#E8564F;" points="298.58,288.601 351.198,302.698 295.885,307.373 286.113,308.711 289.58,284.568    "/>\r
-       <polygon style="fill:#E8564F;" points="212.814,279.103 149.972,263.084 215.87,260.387 225.578,259.769 221.822,282.777   "/>\r
-       <polygon style="fill:#E8564F;" points="216.121,307.373 160.809,302.698 213.426,288.601 222.426,284.568 225.893,308.711  "/>\r
-</g>\r
-<path style="fill:#FC675B;" d="M298.144,282.611c0,32.808-18.863,59.42-42.138,59.42c-1.998,0-3.97-0.202-5.904-0.582\r
-       c-20.481-4.046-36.246-28.85-36.246-58.839c0-30.001,15.765-54.806,36.259-58.839c1.922-0.379,3.894-0.582,5.891-0.582\r
-       C279.281,223.191,298.144,249.791,298.144,282.611z"/>\r
-<path style="fill:#E8564F;" d="M261.06,341.45c-20.481-4.046-36.246-28.85-36.246-58.839c0-30.001,15.765-54.806,36.259-58.839\r
-       c0.131-0.027,0.264-0.044,0.396-0.068c-1.789-0.326-3.608-0.513-5.46-0.513c-1.998,0-3.97,0.202-5.891,0.582\r
-       c-20.494,4.033-36.259,28.838-36.259,58.839c0,29.988,15.765,54.793,36.246,58.839c1.934,0.379,3.907,0.582,5.904,0.582\r
-       c1.85,0,3.668-0.186,5.455-0.512C261.328,341.496,261.194,341.477,261.06,341.45z"/>\r
-<g>\r
-       <circle style="fill:#69CCC2;" cx="304.257" cy="163.001" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="223.142" cy="97.045" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="211.587" cy="197.579" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="351.022" cy="86.754" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="423.552" cy="214.153" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="380.745" cy="378.216" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="248.465" cy="447.422" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="294.434" cy="363.93" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="164.189" cy="395.17" r="7.797"/>\r
-       <circle style="fill:#69CCC2;" cx="133.051" cy="184.291" r="7.797"/>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-<g>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<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"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 512 512"
+   style="enable-background:new 0 0 512 512;"
+   xml:space="preserve"
+   sodipodi:docname="ae.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+   id="metadata85"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs83" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="960"
+   inkscape:window-height="1060"
+   id="namedview81"
+   showgrid="false"
+   inkscape:zoom="0.4609375"
+   inkscape:cx="260.33898"
+   inkscape:cy="256"
+   inkscape:window-x="0"
+   inkscape:window-y="20"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="Layer_1" />
+<path
+   style="fill:#73d8d0;stroke-width:0.90124917"
+   d="m 448.75595,290.86006 c 0,6.07477 -0.228,11.99821 -0.6726,17.79255 C 439.93995,416.79044 357.05625,474.88 256,474.88 154.9561,474.88 72.06005,416.79044 63.91665,308.65261 c -0.4446,-5.79348 -0.6726,-11.71777 -0.6726,-17.79255 0,-13.89033 1.1647,-27.96363 3.38675,-42.01641 C 83.5655,141.96095 161.9101,37.12 256,37.12 c 94.10225,0 172.4345,104.84095 189.3692,211.7245 2.22205,14.05193 3.38675,28.12608 3.38675,42.01556 z"
+   id="path2"
+   inkscape:connector-curvature="0" />
+<path
+   style="fill:#69ccc2;stroke-width:0.90124917"
+   d="m 256,37.124275 c -72.20665,0 -130.73425,134.199085 -130.73425,253.740055 0,118.60133 57.61465,183.00335 129.0404,184.00883 C 148.63765,474.19258 63.24405,409.75721 63.24405,290.86433 63.24405,171.32336 149.55155,37.124275 256,37.124275 Z"
+   id="path4"
+   inkscape:connector-curvature="0" />
+<path
+   style="fill:#e8564f;stroke-width:0.90124917"
+   d="m 448.75595,290.86006 c 0,6.07477 -0.228,11.99821 -0.6726,17.79255 H 63.91665 c -0.4446,-5.79348 -0.6726,-11.71778 -0.6726,-17.79255 0,-13.89033 1.1647,-27.96363 3.38675,-42.01641 h 378.7384 c 2.22205,14.05278 3.38675,28.12693 3.38675,42.01641 z"
+   id="path6"
+   inkscape:connector-curvature="0" />
+<g
+   id="g12"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+       <path
+   style="fill:#fc675b"
+   d="m 225,322.841 -60.533,30.266 c -22.39,11.189 -48.737,-5.095 -48.737,-30.127 v -80.748 c 0,-25.032 26.347,-41.316 48.737,-30.127 L 225,242.371"
+   id="path8"
+   inkscape:connector-curvature="0" />
+       <path
+   style="fill:#fc675b"
+   d="m 287.012,322.854 60.533,30.254 c 22.39,11.189 48.737,-5.095 48.737,-30.127 v -80.748 c 0,-25.032 -26.347,-41.316 -48.737,-30.127 l -60.533,30.254"
+   id="path10"
+   inkscape:connector-curvature="0" />
+</g>
+<g
+   id="g22"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+       <polygon
+   style="fill:#e8564f"
+   points="299.192,279.103 290.184,282.777 286.428,259.769 296.136,260.387 362.035,263.084 "
+   id="polygon14" />
+       <polygon
+   style="fill:#e8564f"
+   points="295.885,307.373 286.113,308.711 289.58,284.568 298.58,288.601 351.198,302.698 "
+   id="polygon16" />
+       <polygon
+   style="fill:#e8564f"
+   points="215.87,260.387 225.578,259.769 221.822,282.777 212.814,279.103 149.972,263.084 "
+   id="polygon18" />
+       <polygon
+   style="fill:#e8564f"
+   points="213.426,288.601 222.426,284.568 225.893,308.711 216.121,307.373 160.809,302.698 "
+   id="polygon20" />
+</g>
+<path
+   style="fill:#fc675b;stroke-width:0.90124917"
+   d="m 296.0368,278.7524 c 0,28.05084 -17.91985,50.80411 -40.0311,50.80411 -1.8981,0 -3.7715,-0.17272 -5.6088,-0.49762 -19.45695,-3.45932 -34.4337,-24.66674 -34.4337,-50.30734 0,-25.65086 14.97675,-46.85913 34.44605,-50.30735 1.8259,-0.32404 3.6993,-0.49761 5.59645,-0.49761 22.11125,0.002 40.0311,22.74471 40.0311,50.80581 z"
+   id="path24"
+   inkscape:connector-curvature="0" />
+<path
+   style="fill:#e8564f;stroke-width:0.90124917"
+   d="m 260.807,329.05975 c -19.45695,-3.45933 -34.4337,-24.66675 -34.4337,-50.30735 0,-25.65085 14.97675,-46.85913 34.44605,-50.30734 0.12445,-0.0231 0.2508,-0.0376 0.3762,-0.0581 -1.69955,-0.27873 -3.4276,-0.43862 -5.187,-0.43862 -1.8981,0 -3.7715,0.17271 -5.59645,0.49761 -19.4693,3.44822 -34.44605,24.65649 -34.44605,50.30735 0,25.63974 14.97675,46.84801 34.4337,50.30734 1.8373,0.32405 3.71165,0.49761 5.6088,0.49761 1.7575,0 3.4846,-0.15903 5.18225,-0.43776 -0.1292,-0.0214 -0.2565,-0.0376 -0.3838,-0.0607 z"
+   id="path26"
+   inkscape:connector-curvature="0" />
+<g
+   id="g48"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+       <circle
+   style="fill:#69ccc2"
+   cx="304.25699"
+   cy="163.00101"
+   r="7.7969999"
+   id="circle28" />
+       <circle
+   style="fill:#69ccc2"
+   cx="223.142"
+   cy="97.044998"
+   r="7.7969999"
+   id="circle30" />
+       <circle
+   style="fill:#69ccc2"
+   cx="211.58701"
+   cy="197.57899"
+   r="7.7969999"
+   id="circle32" />
+       <circle
+   style="fill:#69ccc2"
+   cx="351.022"
+   cy="86.753998"
+   r="7.7969999"
+   id="circle34" />
+       <circle
+   style="fill:#69ccc2"
+   cx="423.552"
+   cy="214.153"
+   r="7.7969999"
+   id="circle36" />
+       <circle
+   style="fill:#69ccc2"
+   cx="380.745"
+   cy="378.216"
+   r="7.7969999"
+   id="circle38" />
+       <circle
+   style="fill:#69ccc2"
+   cx="248.465"
+   cy="447.422"
+   r="7.7969999"
+   id="circle40" />
+       <circle
+   style="fill:#69ccc2"
+   cx="294.43399"
+   cy="363.92999"
+   r="7.7969999"
+   id="circle42" />
+       <circle
+   style="fill:#69ccc2"
+   cx="164.189"
+   cy="395.17001"
+   r="7.7969999"
+   id="circle44" />
+       <circle
+   style="fill:#69ccc2"
+   cx="133.05099"
+   cy="184.291"
+   r="7.7969999"
+   id="circle46" />
+</g>
+<g
+   id="g50"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g52"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g54"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g56"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g58"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g60"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g62"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g64"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g66"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g68"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g70"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g72"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g74"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g76"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+<g
+   id="g78"
+   transform="matrix(0.95,0,0,0.855,12.8,37.12)">
+</g>
+</svg>
\ No newline at end of file
index 3fb5ad3..977697b 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
- <metadata id="metadata4687">
-  <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>Tango Style &apos;Shroom</dc:title>
-    <dc:creator>
-     <cc:Agent>
-      <dc:title>Andrew Higginson</dc:title>
-     </cc:Agent>
-    </dc:creator>
-    <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/"/>
-   </cc:Work>
-   <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
-    <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
-    <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
-    <cc:requires rdf:resource="http://creativecommons.org/ns#Notice"/>
-    <cc:requires rdf:resource="http://creativecommons.org/ns#Attribution"/>
-    <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
-    <cc:requires rdf:resource="http://creativecommons.org/ns#ShareAlike"/>
-   </cc:License>
-  </rdf:RDF>
- </metadata>
- <defs id="defs4">
-  <radialGradient id="radialGradient5305" gradientUnits="userSpaceOnUse" cy="537.53" cx="436.73" gradientTransform="matrix(1.2279e-7 .17872 -.99562 6.8401e-7 748.63 140.01)" r="212.52">
-   <stop id="stop3220" offset="0"/>
-   <stop id="stop3222" stop-opacity="0" offset="1"/>
-  </radialGradient>
-  <radialGradient id="radialGradient5307" gradientUnits="userSpaceOnUse" cy="314.05" cx="276.82" gradientTransform="matrix(0 .88122 -1.8234 0 707.91 -204.77)" r="212.52">
-   <stop id="stop3262" stop-color="#ef2929" offset="0"/>
-   <stop id="stop3264" stop-color="#c00" offset="1"/>
-  </radialGradient>
- </defs>
- <g id="g5288" transform="matrix(.11912 0 0 .11912 -1.4307 .59834)">
-  <g id="g5267" transform="matrix(.55612 0 0 1 94.333 0)">
-   <path id="path3284" stroke-linejoin="round" d="m357.31 339.46c-25-51.89-32.62-95.94-21.66-115.92 10.7-19.5 63.76 5.48 83.51-26.73 19.47-31.76-31.66-193.85-214.54-194.81-180.36-0.9349-214.33 167.06-199.53 195.76 14.54 28.2 63.72 7.23 83.514 22.31 19.796 15.09 5.112 83.53-15.336 123.81-20.194 39.79 75.402 49.97 147.04 49.02 71.63-0.94 161.27-3.05 137-53.44z" fill-rule="evenodd" stroke="#2e3436" stroke-width="12" fill="#eeeeec"/>
-   <path id="path5246" d="m319.09 237.98c-84.55 7.9-144.44 5.87-209 3.62 1.05 29.48-9.91 74.95-25.309 107.68-1.47 3.13-1.388 4.57-1.156 5.63 0.232 1.05 0.83 2.36 3.031 4.34 4.404 3.96 15.084 8.86 29.154 12.28 28.14 6.84 69.17 9.15 104.35 8.69 35.76-0.47 75.76-1.51 101.59-7.84 12.92-3.17 21.66-7.95 24.72-11.6s4.13-6-0.59-15.81c-0.04-0.05-0.07-0.11-0.1-0.16-18.97-41.02-27.27-78.79-26.69-106.83z" stroke="#fff" stroke-width="12" fill="none"/>
-   <path id="path2383" opacity=".55128" d="m357.31 285.91c-25-51.9-32.62-42.39-21.66-62.37 10.7-19.5 63.76 5.48 83.51-26.73 19.47-31.76-31.66-193.85-214.54-194.81-180.36-0.9349-214.33 167.06-199.53 195.76 14.54 28.2 63.72 7.23 83.514 22.31 19.796 15.09 5.112 29.97-15.336 70.26-20.194 39.78 70.882 14.91 142.51 13.96 71.64-0.94 165.8 32 141.53-18.38z" fill-rule="evenodd" fill="url(#radialGradient5305)"/>
+
+<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"
+   id="svg2"
+   height="48"
+   width="48"
+   version="1.0"
+   sodipodi:docname="am.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview27"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="24.40678"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <metadata
+     id="metadata4687">
+    <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>Tango Style 'Shroom</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Andrew Higginson</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4">
+    <radialGradient
+       id="radialGradient5305"
+       gradientUnits="userSpaceOnUse"
+       cy="537.53"
+       cx="436.73"
+       gradientTransform="matrix(1.2279e-7,0.17872,-0.99562,6.8401e-7,748.63,140.01)"
+       r="212.52">
+      <stop
+         id="stop3220"
+         offset="0" />
+      <stop
+         id="stop3222"
+         stop-opacity="0"
+         offset="1" />
+    </radialGradient>
+    <radialGradient
+       id="radialGradient5307"
+       gradientUnits="userSpaceOnUse"
+       cy="314.05"
+       cx="276.82"
+       gradientTransform="matrix(0,0.88122,-1.8234,0,707.91,-204.77)"
+       r="212.52">
+      <stop
+         id="stop3262"
+         stop-color="#ef2929"
+         offset="0" />
+      <stop
+         id="stop3264"
+         stop-color="#c00"
+         offset="1" />
+    </radialGradient>
+  </defs>
+  <g
+     id="g5288"
+     transform="matrix(0.101252,0,0,0.101252,2.3665409,4.1268864)">
+    <g
+       id="g5267"
+       transform="matrix(0.55612,0,0,1,94.333,0)">
+      <path
+         id="path3284"
+         d="m 357.31,339.46 c -25,-51.89 -32.62,-95.94 -21.66,-115.92 10.7,-19.5 63.76,5.48 83.51,-26.73 C 438.63,165.05 387.5,2.96 204.62,2 24.26,1.0651 -9.71,169.06 5.09,197.76 c 14.54,28.2 63.72,7.23 83.514,22.31 19.796,15.09 5.112,83.53 -15.336,123.81 -20.194,39.79 75.402,49.97 147.04,49.02 71.63,-0.94 161.27,-3.05 137,-53.44 z"
+         inkscape:connector-curvature="0"
+         style="fill:#eeeeec;fill-rule:evenodd;stroke:#2e3436;stroke-width:12;stroke-linejoin:round" />
+      <path
+         id="path5246"
+         d="m 319.09,237.98 c -84.55,7.9 -144.44,5.87 -209,3.62 1.05,29.48 -9.91,74.95 -25.309,107.68 -1.47,3.13 -1.388,4.57 -1.156,5.63 0.232,1.05 0.83,2.36 3.031,4.34 4.404,3.96 15.084,8.86 29.154,12.28 28.14,6.84 69.17,9.15 104.35,8.69 35.76,-0.47 75.76,-1.51 101.59,-7.84 12.92,-3.17 21.66,-7.95 24.72,-11.6 3.06,-3.65 4.13,-6 -0.59,-15.81 -0.04,-0.05 -0.07,-0.11 -0.1,-0.16 -18.97,-41.02 -27.27,-78.79 -26.69,-106.83 z"
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#ffffff;stroke-width:12" />
+      <path
+         id="path2383"
+         d="m 357.31,285.91 c -25,-51.9 -32.62,-42.39 -21.66,-62.37 10.7,-19.5 63.76,5.48 83.51,-26.73 C 438.63,165.05 387.5,2.96 204.62,2 24.26,1.0651 -9.71,169.06 5.09,197.76 c 14.54,28.2 63.72,7.23 83.514,22.31 19.796,15.09 5.112,29.97 -15.336,70.26 -20.194,39.78 70.882,14.91 142.51,13.96 71.64,-0.94 165.8,32 141.53,-18.38 z"
+         style="opacity:0.55128;fill:url(#radialGradient5305);fill-rule:evenodd"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g5274"
+       transform="matrix(0.88922,0,0,1,23.542,0)">
+      <path
+         id="path2387"
+         d="m 303.55,227.32 c 40.31,-4.83 95.86,1.7 115.61,-30.51 C 438.63,165.05 387.5,2.96 204.62,2 24.26,1.0651 -9.71,169.06 5.09,197.76 c 14.54,28.2 74.881,30.19 111.84,31.76 36.93,1.56 146.92,2.55 186.62,-2.2 z"
+         style="fill:url(#radialGradient5307);fill-rule:evenodd;stroke:#780000;stroke-width:12;stroke-linejoin:round"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3272"
+         d="m 72.617,124.5 c -4.775,14.67 -15.876,24.22 -24.791,21.31 -8.915,-2.9 -12.265,-17.15 -7.481,-31.82 4.775,-14.676 15.876,-24.22 24.791,-21.316 8.915,2.904 12.265,17.156 7.481,31.826 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3274"
+         d="m 145.64,80.871 c -9.45,10.458 -24.26,12.688 -33.06,4.98 -8.81,-7.708 -8.28,-22.433 1.18,-32.884 9.46,-10.458 24.26,-12.689 33.07,-4.981 8.8,7.708 8.27,22.434 -1.19,32.885 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3276"
+         d="m 282.76,129.11 c 5.48,14.38 -4.82,28.27 -22.99,31.03 -18.17,2.75 -37.33,-6.68 -42.78,-21.06 -5.48,-14.38 4.82,-28.28 22.99,-31.03 18.17,-2.76 37.33,6.67 42.78,21.06 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3278"
+         d="m 306.81,38.724 c 11.21,8.819 10.94,17.049 -0.59,18.38 -11.54,1.332 -29.97,-4.741 -41.16,-13.561 -11.2,-8.818 -10.93,-17.048 0.6,-18.38 11.53,-1.331 29.96,4.742 41.15,13.561 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3280"
+         d="m 374.03,167.81 c -4.64,13.78 -16.08,17.37 -25.55,8.03 -9.46,-9.35 -13.36,-28.09 -8.71,-41.86 4.64,-13.78 16.08,-17.38 25.55,-8.03 9.46,9.34 13.37,28.09 8.71,41.86 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3282"
+         d="m 167.42,169.44 c 6.27,15.6 -0.53,33.33 -15.19,39.58 -14.65,6.25 -31.61,-1.33 -37.86,-16.94 -6.27,-15.6 0.53,-33.32 15.18,-39.58 14.66,-6.25 31.61,1.34 37.87,16.94 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3288"
+         d="m 213.4,73.159 c -1.54,6.54 -8.62,11.423 -15.82,10.905 -7.19,-0.518 -11.78,-6.241 -10.23,-12.78 1.54,-6.54 8.63,-11.423 15.82,-10.905 7.2,0.518 11.78,6.24 10.23,12.78 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path3290"
+         d="m 331.07,87.891 c 0.86,6.293 -2.92,9.92 -8.44,8.099 -5.52,-1.82 -10.68,-8.398 -11.53,-14.689 -0.86,-6.293 2.92,-9.92 8.44,-8.099 5.51,1.82 10.68,8.398 11.53,14.689 z"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+      <path
+         id="path5251"
+         d="M 204.56,14.625 C 118.31,14.176 69.6,53.079 42.31,95.594 28.667,116.85 20.681,139.13 17.062,157.38 c -3.618,18.24 -1.247,33.62 -0.75,34.59 4.068,7.89 18.629,15.34 38.719,19.28 20.09,3.94 43.895,4.87 62.439,5.66 36.09,1.53 147.8,2.27 184.56,-2.13 21.51,-2.57 45.33,-2.14 65.28,-4.94 19.96,-2.79 34.18,-8.34 41.1,-19.62 1.07,-1.76 3.38,-16.13 -1.1,-34.06 C 402.84,138.22 393.24,116.34 377.66,95.406 346.49,53.533 292.28,15.082 204.56,14.625 Z"
+         inkscape:connector-curvature="0"
+         style="opacity:0.66239002;fill:none;stroke:#ffffff;stroke-width:12;stroke-linejoin:round" />
+    </g>
   </g>
-  <g id="g5274" transform="matrix(.88922 0 0 1 23.542 0)">
-   <path id="path2387" stroke-linejoin="round" d="m303.55 227.32c40.31-4.83 95.86 1.7 115.61-30.51 19.47-31.76-31.66-193.85-214.54-194.81-180.36-0.9349-214.33 167.06-199.53 195.76 14.54 28.2 74.881 30.19 111.84 31.76 36.93 1.56 146.92 2.55 186.62-2.2z" fill-rule="evenodd" stroke="#780000" stroke-width="12" fill="url(#radialGradient5307)"/>
-   <path id="path3272" d="m72.617 124.5c-4.775 14.67-15.876 24.22-24.791 21.31-8.915-2.9-12.265-17.15-7.481-31.82 4.775-14.676 15.876-24.22 24.791-21.316s12.265 17.156 7.481 31.826z" fill="#fff"/>
-   <path id="path3274" d="m145.64 80.871c-9.45 10.458-24.26 12.688-33.06 4.98-8.81-7.708-8.28-22.433 1.18-32.884 9.46-10.458 24.26-12.689 33.07-4.981 8.8 7.708 8.27 22.434-1.19 32.885z" fill="#fff"/>
-   <path id="path3276" d="m282.76 129.11c5.48 14.38-4.82 28.27-22.99 31.03-18.17 2.75-37.33-6.68-42.78-21.06-5.48-14.38 4.82-28.28 22.99-31.03 18.17-2.76 37.33 6.67 42.78 21.06z" fill="#fff"/>
-   <path id="path3278" d="m306.81 38.724c11.21 8.819 10.94 17.049-0.59 18.38-11.54 1.332-29.97-4.741-41.16-13.561-11.2-8.818-10.93-17.048 0.6-18.38 11.53-1.331 29.96 4.742 41.15 13.561z" fill="#fff"/>
-   <path id="path3280" d="m374.03 167.81c-4.64 13.78-16.08 17.37-25.55 8.03-9.46-9.35-13.36-28.09-8.71-41.86 4.64-13.78 16.08-17.38 25.55-8.03 9.46 9.34 13.37 28.09 8.71 41.86z" fill="#fff"/>
-   <path id="path3282" d="m167.42 169.44c6.27 15.6-0.53 33.33-15.19 39.58-14.65 6.25-31.61-1.33-37.86-16.94-6.27-15.6 0.53-33.32 15.18-39.58 14.66-6.25 31.61 1.34 37.87 16.94z" fill="#fff"/>
-   <path id="path3288" d="m213.4 73.159c-1.54 6.54-8.62 11.423-15.82 10.905-7.19-0.518-11.78-6.241-10.23-12.78 1.54-6.54 8.63-11.423 15.82-10.905 7.2 0.518 11.78 6.24 10.23 12.78z" fill="#fff"/>
-   <path id="path3290" d="m331.07 87.891c0.86 6.293-2.92 9.92-8.44 8.099-5.52-1.82-10.68-8.398-11.53-14.689-0.86-6.293 2.92-9.92 8.44-8.099 5.51 1.82 10.68 8.398 11.53 14.689z" fill="#fff"/>
-   <path id="path5251" opacity=".66239" stroke-linejoin="round" d="m204.56 14.625c-86.25-0.449-134.96 38.454-162.25 80.969-13.643 21.256-21.629 43.536-25.248 61.786-3.618 18.24-1.247 33.62-0.75 34.59 4.068 7.89 18.629 15.34 38.719 19.28s43.895 4.87 62.439 5.66c36.09 1.53 147.8 2.27 184.56-2.13 21.51-2.57 45.33-2.14 65.28-4.94 19.96-2.79 34.18-8.34 41.1-19.62 1.07-1.76 3.38-16.13-1.1-34.06-4.47-17.94-14.07-39.82-29.65-60.754-31.17-41.873-85.38-80.324-173.1-80.781z" stroke="#fff" stroke-width="12" fill="none"/>
-  </g>
- </g>
 </svg>
diff --git a/client/public/images/pieces/Chakart/an.svg b/client/public/images/pieces/Chakart/an.svg
deleted file mode 100644 (file)
index f51de6f..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   id="svg1"
-   sodipodi:version="0.32"
-   inkscape:version="0.38.1"
-   width="400.00000pt"
-   height="400.00000pt"
-   sodipodi:docbase="/var/www/html/svg_gallery/svg/fruits"
-   sodipodi:docname="banana.svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:xlink="http://www.w3.org/1999/xlink">
-  <defs
-     id="defs3">
-    <linearGradient
-       id="linearGradient855">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.0000000;"
-         offset="0.0000000"
-         id="stop856" />
-      <stop
-         style="stop-color:#5f0e00;stop-opacity:0.41666666;"
-         offset="1.0000000"
-         id="stop857" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient829">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.52499998;"
-         offset="0.0000000"
-         id="stop830" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.0000000;"
-         offset="1.0000000"
-         id="stop831" />
-    </linearGradient>
-    <radialGradient
-       xlink:href="#linearGradient829"
-       id="radialGradient832" />
-    <linearGradient
-       xlink:href="#linearGradient829"
-       id="linearGradient850"
-       x1="0.15073529"
-       y1="0.43220338"
-       x2="1.2500000"
-       y2="-0.22033899" />
-    <linearGradient
-       xlink:href="#linearGradient855"
-       id="linearGradient854"
-       x1="4.9005938e-17"
-       y1="0.50000000"
-       x2="1.0000000"
-       y2="0.50000000" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.0000000"
-     inkscape:cx="303.06094"
-     inkscape:cy="199.24188"
-     inkscape:window-width="737"
-     inkscape:window-height="637"
-     showgrid="true"
-     inkscape:window-x="343"
-     inkscape:window-y="109" />
-  <g
-     id="g845">
-    <path
-       style="fill:#ffe200;fill-rule:evenodd;stroke:#000000;stroke-width:10.000000;stroke-dasharray:none;stroke-linejoin:round;"
-       d="M 388.75000,93.750000 C 370.00000,76.250000 420.00000,63.750000 426.25000,70.000000 C 436.25000,75.000000 417.50000,78.750000 418.75000,87.500000 C 420.00000,96.250000 418.75000,142.50000 428.75000,145.00000 C 438.75000,147.50000 451.25000,156.25000 451.25000,168.75000 C 482.50000,246.25000 360.00000,458.75000 70.000000,352.50000 C 65.000000,348.75000 37.500000,317.50000 32.500000,310.00000 C 30.000000,301.25000 26.250000,280.00000 41.250000,272.50000 C 170.00000,238.75000 318.75000,305.00000 386.25000,153.75000 C 397.50000,127.50000 388.75000,93.750000 388.75000,93.750000 z "
-       id="path847"
-       sodipodi:nodetypes="cccccccccc" />
-    <path
-       style="fill:url(#linearGradient850);fill-rule:evenodd;stroke-width:1.0000000pt;"
-       d="M 43.750000,290.00000 L 46.250000,277.50000 C 138.75000,242.50000 310.00000,316.25000 392.50000,157.50000 C 351.25000,270.00000 278.75000,338.75000 43.750000,290.00000 z "
-       id="path849"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:#442400;fill-rule:evenodd;stroke-width:1.0000000pt;"
-       d="M 386.15267,89.136260 C 389.06731,71.535880 415.26511,71.062953 422.59733,70.191604 C 434.58256,71.757920 407.11069,91.636260 386.15267,89.136260 z "
-       id="path851"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:#442400;fill-rule:evenodd;stroke-width:1.0000000pt;"
-       d="M 32.517518,305.14122 C 31.584832,286.77137 30.652137,280.71298 41.261429,274.65459 C 45.878219,281.57977 45.011420,303.02443 32.517518,305.14122 z "
-       id="path852"
-       sodipodi:nodetypes="ccc" />
-    <path
-       style="fill:url(#linearGradient854);fill-opacity:0.75000000;fill-rule:evenodd;stroke-width:1.0000000pt;"
-       d="M 133.75000,366.25000 C 352.50000,421.25000 426.74042,283.12802 440.00000,250.00000 C 462.50000,210.00000 448.75000,165.00000 448.75000,165.00000 C 447.50000,300.00000 306.25000,408.75000 133.75000,366.25000 z "
-       id="path853"
-       sodipodi:nodetypes="cccc" />
-  </g>
-
-  <rdf:RDF 
-   xmlns="http://web.resource.org/cc/"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-  <Work rdf:about="">
-    <dc:title>Clipart by Nicu Buculei - pear</dc:title>
-    <dc:rights>
-       <Agent>
-         <dc:title>Nicu Buculei</dc:title>
-       </Agent>
-    </dc:rights>
-    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-    <license rdf:resource="http://web.resource.org/cc/PublicDomain" />
-  </Work>
-   
-  <License rdf:about="http://web.resource.org/cc/PublicDomain">
-     <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
-     <permits rdf:resource="http://web.resource.org/cc/Distribution" />
-     <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
-  </License>
-
-</rdf:RDF>
-</svg>
diff --git a/client/public/images/pieces/Chakart/aw.svg b/client/public/images/pieces/Chakart/aw.svg
new file mode 100644 (file)
index 0000000..74a432e
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
+
+<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"
+   version="1.1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 1000 1000"
+   enable-background="new 0 0 1000 1000"
+   xml:space="preserve"
+   id="svg10"
+   sodipodi:docname="aw.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><defs
+   id="defs14" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1060"
+   id="namedview12"
+   showgrid="false"
+   inkscape:zoom="0.236"
+   inkscape:cx="-254.23729"
+   inkscape:cy="500"
+   inkscape:window-x="0"
+   inkscape:window-y="20"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="svg10" />
+<metadata
+   id="metadata2"> Svg Vector Icons : http://www.onlinewebfonts.com/icon <rdf:RDF><cc:Work
+     rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+       rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata>
+<g
+   id="g8"
+   transform="matrix(0.9,0,0,0.9,49.985,50.015)"><g
+     transform="matrix(1,0,0,-1,0,1920)"
+     id="g6"><path
+       d="m 349.2,950.7 c -30.7,0 -60.7,4.1 -90.1,12.3 -29.4,8.2 -56.5,19.5 -81.2,34.1 -24.8,14.6 -47.6,32.3 -68.4,53.1 -20.9,20.9 -38.6,43.7 -53.1,68.4 -14.6,24.8 -25.9,51.8 -34.1,81.2 -8.2,29.4 -12.3,59.5 -12.3,90.2 0,28.6 4.2,57.1 12.6,85.4 8.4,28.3 19.9,54.2 34.5,77.8 14.6,23.6 31.5,45.7 50.7,66.1 19.2,20.5 39.7,38.3 61.4,53.3 21.7,15.1 44,27.4 66.9,36.9 v 91.2 h 94.2 c 0,37.7 9.1,69.5 27.3,95.5 18.2,26 42.7,42.2 73.3,48.4 8.8,1.8 17.5,2.6 26,2.6 28.4,0 54.8,-8.7 79.3,-26.2 24.5,-17.5 43.3,-41.3 56.3,-71.4 13.3,-30.9 31.7,-49.6 55,-56.2 6.5,-1.8 13.6,-2.6 21.1,-2.6 15.3,0 32.3,3.8 50.9,11.3 l -65.2,19.2 98,29 -49,89.7 89.7,-49 29,98 28.6,-98 90.1,49 -49,-89.7 98,-29 -98,-28.6 49,-90.1 -90.1,49 -28.6,-98 -29,98 -89.7,-49 36.9,67.1 c -25.4,-11.3 -49.3,-17 -71.6,-17 -11.6,0 -22,1.3 -31.3,3.8 -35.2,10.1 -61.7,35.8 -79.5,77.3 -10.8,25.4 -25.4,44.4 -43.9,56.9 -18.5,12.6 -37.6,18.8 -57.5,18.8 -6.3,0 -12.2,-0.6 -17.7,-1.9 -9.5,-1.8 -18.2,-4.8 -25.8,-9.2 -7.7,-4.4 -15.1,-10.6 -22.2,-18.5 -7.2,-7.9 -12.8,-18.6 -16.8,-32 -4,-13.4 -6,-29.2 -6,-47.3 h 94.2 v -91.2 c 36.9,-11.6 69.9,-27.8 98.8,-48.8 28.9,-21 52.6,-45.4 71,-73.3 18.5,-27.9 32.5,-58.5 42,-91.8 9.5,-33.3 14.3,-68.5 14.3,-105.7 0,-30.7 -4.1,-60.7 -12.3,-90.1 -8.2,-29.4 -19.5,-56.5 -34.1,-81.2 -14.6,-24.8 -32.3,-47.6 -53.1,-68.4 -20.9,-20.9 -43.7,-38.6 -68.4,-53.1 -24.8,-14.6 -51.8,-25.9 -81.2,-34.1 -29.2,-8.1 -59.2,-12.2 -89.9,-12.2 z"
+       id="path4"
+       inkscape:connector-curvature="0" /></g></g>
+<path
+   style="fill:#483e37;fill-opacity:1;stroke-width:3.81355929"
+   d="M 289.55515,910.8568 C 204.13872,888.49569 132.74726,830.84844 93.628906,752.65003 54.974192,675.37851 51.151601,586.83975 83.170924,510.42255 110.89217,444.26314 176.7069,374.55038 242.76043,341.38101 l 20.02118,-10.05382 v -41.88491 -41.8849 h 43.32627 43.32627 l 2.02758,-22.36049 c 2.53828,-27.99263 13.0488,-52.11172 31.71057,-72.76807 23.06851,-25.53409 39.83988,-32.53552 77.91439,-32.52643 28.11708,0.007 35.12349,1.42686 52.8398,10.71017 27.25265,14.28035 50.387,38.83267 65.9435,69.98538 23.8381,47.73712 49.37843,63.20909 90.65746,54.91907 30.35666,-6.09649 31.40085,-10.14374 4.5601,-17.67487 -12.82759,-3.59924 -23.32289,-7.61614 -23.32289,-8.92646 0,-1.31031 17.16101,-7.33829 38.1356,-13.3955 20.97457,-6.0572 38.13559,-11.84002 38.13559,-12.8507 0,-1.01067 -8.69762,-17.92393 -19.32808,-37.58502 -10.63045,-19.66108 -18.5736,-35.74743 -17.65144,-35.74743 0.92216,0 17.4867,8.72209 36.81008,19.38242 19.32338,10.66033 35.66327,18.81182 36.31084,18.11441 0.64763,-0.69741 6.72392,-19.28708 13.50294,-41.31039 l 12.3255,-40.042368 11.58392,40.042368 c 6.37112,22.02331 12.05344,40.6478 12.62738,41.38776 0.57393,0.73995 17.45611,-7.52865 37.51593,-18.37469 20.05981,-10.84603 36.47242,-18.63269 36.47242,-17.30368 0,1.32901 -8.60373,18.01189 -19.11943,37.07306 -10.51567,19.06118 -18.66715,35.0375 -18.11441,35.50292 0.55277,0.46542 17.30799,5.54526 37.23384,11.28853 19.92584,5.74326 37.4294,11.53506 38.89682,12.87064 1.46738,1.33559 -14.83558,7.40789 -36.22882,13.49401 -21.39327,6.08611 -39.34907,11.40066 -39.90184,11.8101 -0.55273,0.40942 7.74034,16.59656 18.42907,35.9714 10.68871,19.37484 18.69719,35.96382 17.79658,36.86441 -0.90058,0.90058 -17.48956,-7.1079 -36.86438,-17.79661 -19.37487,-10.68872 -35.67685,-18.86343 -36.22665,-18.16602 -0.5498,0.6974 -5.858,18.89692 -11.79602,40.44338 -5.93802,21.54645 -11.91169,37.84941 -13.27477,36.2288 -1.36312,-1.6206 -7.30499,-19.67854 -13.20415,-40.12875 -5.89915,-20.45021 -11.12327,-37.18221 -11.60911,-37.18221 -0.48585,0 -16.43675,8.58051 -35.44647,19.06781 -19.00975,10.48728 -35.68107,19.06779 -37.04747,19.06779 -1.36635,0 3.82619,-11.28423 11.53903,-25.07607 7.71285,-13.79183 13.27652,-25.82287 12.36375,-26.73563 -0.91273,-0.91276 -8.86893,0.88405 -17.68042,3.99293 -41.98321,14.81253 -81.13126,9.59082 -109.38067,-14.58961 -8.97994,-7.68648 -22.35309,-26.21943 -32.31285,-44.78019 -26.04505,-48.5368 -49.48974,-67.50164 -88.05196,-71.22676 -46.8725,-4.52791 -81.70923,26.06124 -86.2102,75.69876 l -2.05218,22.63183 h 42.47881 42.47882 v 41.54361 41.54361 l 25.2106,10.0925 c 82.60166,33.0677 140.77422,98.66952 166.11777,187.33269 11.78294,41.2221 12.62204,128.0017 1.60195,165.67403 -17.66521,60.38877 -43.39826,102.32229 -89.27649,145.48122 -35.69171,33.57618 -84.10442,59.98698 -131.91216,71.96255 -40.83805,10.22972 -107.31816,10.08023 -147.08678,-0.33064 z"
+   id="path16"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#800080;fill-opacity:1;stroke-width:4.237288"
+   d="m 339.43336,917.31585 c -1.1845,-1.91653 -8.15809,-3.0911 -15.49689,-2.61009 -7.33878,0.48098 -16.20342,-0.28445 -19.69918,-1.70093 -3.49576,-1.41648 -11.12288,-3.38619 -16.94915,-4.37708 -5.82628,-0.99089 -14.82905,-3.16432 -20.00616,-4.82978 -5.17711,-1.66551 -10.68427,-2.65716 -12.23812,-2.20373 -1.55385,0.45347 -3.99176,-0.86555 -5.41758,-2.93119 -1.42581,-2.06563 -13.07967,-9.11555 -25.89747,-15.66657 -12.81779,-6.55097 -26.64195,-14.85317 -30.72034,-18.44936 -4.07839,-3.59619 -7.41525,-5.03246 -7.41525,-3.19174 0,1.84076 -3.9232,-1.64072 -8.71823,-7.73661 -4.79503,-6.09589 -10.03867,-10.69568 -11.65255,-10.22174 -1.61386,0.4739 -8.98466,-5.28296 -16.37955,-12.79309 -7.39488,-7.51013 -12.51086,-13.65479 -11.36885,-13.65479 1.14201,0 -4.50353,-8.10381 -12.54565,-18.00847 -8.04211,-9.90466 -19.99003,-28.49576 -26.550928,-41.31356 -6.560897,-12.8178 -13.618959,-24.47165 -15.684582,-25.89746 -2.065623,-1.42585 -3.495088,-4.28602 -3.176589,-6.35593 0.3185,-2.06996 -0.633807,-7.57712 -2.116235,-12.23814 -1.482429,-4.66101 -3.385303,-13.03161 -4.228608,-18.60127 -0.843305,-5.5697 -2.796895,-13.19682 -4.341311,-16.94915 C 60.78461,658.03758 60.27664,586.3136 68.01657,562.71186 c 6.897063,-21.03156 16.843405,-57.45439 16.070275,-58.84829 -0.501795,-0.90469 1.0044,-2.82951 3.3471,-4.27738 2.342701,-1.44787 4.889034,-5.40016 5.658517,-8.78287 0.769487,-3.38271 4.669991,-9.85047 8.667788,-14.3728 3.9978,-4.52233 6.39223,-9.64063 5.32095,-11.37399 -1.07128,-1.73336 1.17435,-4.34965 4.99029,-5.81396 3.81594,-1.46432 5.99998,-3.60047 4.85344,-4.74702 -3.51257,-3.51256 51.0336,-59.74638 76.47001,-78.83598 13.18787,-9.89728 26.36142,-20.84672 29.27455,-24.3321 2.91314,-3.48537 5.29661,-4.97025 5.29661,-3.29971 0,3.99936 26.64297,-9.7152 30.65546,-15.78001 1.71219,-2.58796 3.14227,-22.34309 3.17796,-43.90029 l 0.0649,-39.19492 h 44.94487 c 39.1304,0 44.61409,-0.86197 42.38807,-6.66289 -1.40624,-3.66459 -0.66706,-10.19388 1.64261,-14.50953 2.30966,-4.31565 4.6863,-14.66099 5.28141,-22.98963 0.59511,-8.32865 2.28077,-15.14682 3.74592,-15.15149 1.46514,-0.005 5.00321,-5.65611 7.86238,-12.55876 6.85854,-16.55796 43.98492,-51.00905 54.97016,-51.00905 4.76086,0 8.65517,-1.43009 8.65403,-3.17797 -0.003,-4.77961 55.42915,-2.47016 69.32673,2.88834 22.59818,8.71315 49.17441,31.23495 64.90492,55.0031 8.61839,13.022 20.52237,31.09379 26.45335,40.15954 5.93093,9.06576 17.93406,21.21518 26.6736,26.99872 13.85754,9.1705 19.20165,10.23646 41.78042,8.33366 28.77568,-2.42504 39.16098,-8.2736 26.61458,-14.98822 -4.3286,-2.31659 -8.82356,-4.45387 -9.98882,-4.74951 -20.55957,-5.21618 -21.26017,-5.69693 -16.55834,-11.36229 2.64368,-3.18545 6.33741,-4.84569 8.2083,-3.68942 1.87089,1.15626 8.80526,-0.13505 15.40971,-2.86956 14.0597,-5.8213 16.49953,-6.56324 23.91012,-7.27097 3.05034,-0.29131 8.91165,-2.99065 13.02521,-5.99853 6.4289,-4.70093 6.74462,-7.08097 2.24835,-16.94916 -2.87691,-6.31415 -6.83148,-11.48028 -8.78792,-11.48028 -1.9564,0 -3.1717,-1.43008 -2.7006,-3.17796 0.47111,-1.74788 -3.32826,-11.17801 -8.44305,-20.95585 -5.63665,-10.77553 -7.643,-18.8017 -5.09381,-20.37719 2.31318,-1.42962 4.20576,-0.95995 4.20576,1.0437 0,3.27017 34.91988,22.34653 40.42721,22.08498 1.23661,-0.0587 5.29919,2.94407 9.028,6.67288 6.43081,6.43083 15.50289,3.35011 16.5778,-5.62954 0.19534,-1.63135 2.50373,-8.13651 5.12987,-14.45589 2.62615,-6.31938 5.60208,-15.85328 6.61322,-21.18644 3.38183,-17.83697 7.92204,-28.764449 11.95123,-28.764449 2.19623,0 2.91361,1.746771 1.59411,3.881712 -1.31945,2.134941 -0.18728,9.285367 2.51627,15.889827 2.70339,6.60447 5.59941,15.82168 6.43556,20.4827 0.83614,4.66102 2.76347,11.33474 4.28296,14.83051 3.22729,7.42479 4.35538,11.16262 5.0836,16.84427 0.54543,4.25538 21.57331,-1.90286 25.86716,-7.57546 2.21852,-2.93088 40.95056,-21.98068 44.69111,-21.98068 2.703,0 0.54991,10.05457 -2.72212,12.71187 -4.36047,3.54126 -22.46907,40.03281 -21.55284,43.4322 0.4711,1.74788 -0.73246,3.17797 -2.67454,3.17797 -5.94398,0 -3.91584,12.67579 2.11865,13.24152 7.4833,0.70157 9.94453,1.44258 23.49542,7.0739 6.31937,2.62614 15.85327,5.37481 21.18644,6.10817 5.33318,0.73335 12.40615,3.02918 15.71771,5.10184 4.78022,2.99186 3.907,4.627 -4.23728,7.93436 -5.64208,2.29124 -14.07191,4.85959 -18.73293,5.70744 -4.66101,0.84786 -11.33474,2.76593 -14.83051,4.26237 -3.49576,1.49645 -11.08843,3.50549 -16.87262,4.46455 -5.78416,0.95905 -11.20191,2.42897 -12.03941,3.26649 -2.42733,2.42732 3.56729,18.55549 9.0625,24.38207 8.47335,8.98434 24.24606,45.57593 19.64538,45.57593 -2.3822,0 -9.03114,-3.07947 -14.77542,-6.84326 -5.74428,-3.76379 -10.47335,-5.19388 -10.50903,-3.17797 -0.0339,2.01592 -1.46576,1.53797 -3.17796,-1.0621 -1.71221,-2.60007 -11.17606,-8.81503 -21.03085,-13.81102 l -17.91775,-9.08362 -2.46539,9.82295 c -1.35597,5.40263 -3.01059,12.57098 -3.67695,15.92967 -0.66631,3.35869 -3.42491,11.51036 -6.13021,18.11483 -2.70525,6.60446 -4.12072,13.29922 -3.14546,14.87724 0.97525,1.57801 -0.91788,6.54939 -4.20699,11.04751 -3.28907,4.49812 -5.98017,6.0313 -5.98017,3.40708 0,-2.62422 -2.19822,-10.13909 -4.88496,-16.6997 -2.68674,-6.56061 -5.58305,-15.74195 -6.43627,-20.40297 -0.85322,-4.66101 -3.53873,-14.5775 -5.96784,-22.03664 -4.05894,-12.46395 -5.25326,-13.18083 -14.75017,-8.85375 -5.68352,2.58958 -10.33365,6.42156 -10.33365,8.51553 0,2.09397 -1.90678,2.62876 -4.23728,1.18842 -2.33051,-1.44033 -4.23729,-0.59947 -4.23729,1.86858 0,2.46804 -1.43009,4.09532 -3.17797,3.61616 -1.74788,-0.47916 -9.28029,2.38101 -16.73873,6.35593 -17.07881,9.10205 -17.82932,9.04715 -17.05385,-1.24745 0.35127,-4.66101 2.4572,-8.47457 4.68017,-8.47457 2.22301,0 2.86139,-1.18039 1.41873,-2.62309 -1.44272,-1.44269 0.14618,-5.39245 3.53105,-8.77723 6.46263,-6.46262 8.41297,-18.34839 2.97619,-18.13732 -1.74788,0.0679 -16.1478,3.66499 -31.99979,7.99363 -25.63237,6.9993 -30.95745,7.22753 -48.12025,2.06229 -29.97276,-9.02049 -46.0978,-21.13061 -63.12776,-47.40978 -30.73661,-47.43023 -36.39928,-55.14293 -48.21622,-65.67187 -18.26335,-16.2727 -27.28356,-19.87326 -54.88041,-21.90638 -47.48977,-3.49867 -77.49573,24.17029 -83.78315,77.25772 l -2.62065,22.12728 h 42.9631 42.9631 v 41.95837 41.95837 l 12.71186,4.43138 c 6.99153,2.43726 12.74106,3.10048 12.77674,1.47383 0.0339,-1.62665 1.46576,-0.83021 3.17797,1.76986 3.97902,6.04236 39.13004,23.98398 39.13004,19.97257 0,-1.65804 2.79953,0.68668 6.22118,5.2105 3.42161,4.52382 6.28178,6.5838 6.35594,4.57773 0.0742,-2.00606 3.88487,0.85411 8.46834,6.35593 4.58348,5.50183 8.39704,8.55306 8.47458,6.7805 0.0775,-1.77255 9.19818,6.99795 20.26809,19.49 30.19009,34.06858 42.87263,49.41079 40.84513,49.41079 -3.17894,0 16.22716,35.87852 21.16475,39.13003 2.60008,1.7122 3.49728,3.14228 1.99377,3.17797 -1.50352,0.0356 1.11826,11.98226 5.82618,26.54794 4.70788,14.56567 8.28221,31.84516 7.94288,38.39885 -0.3394,6.55369 0.55839,13.8175 1.99488,16.14178 4.07224,6.58907 2.28517,75.49373 -2.56924,99.06106 -2.40017,11.65254 -4.83758,24.04661 -5.41644,27.54237 -0.5789,3.49577 -2.53996,8.73941 -4.35797,11.65255 -1.81796,2.91313 -1.76284,5.3258 0.12246,5.36148 1.88543,0.0339 0.94907,1.63733 -2.0808,3.55924 -3.02992,1.9219 -5.81916,7.613 -6.19835,12.64699 -0.37924,5.03394 -2.06195,9.15262 -3.73949,9.15262 -3.09288,0 -7.94932,11.8703 -7.52555,18.39437 0.12712,1.96008 -2.38272,5.77364 -5.57784,8.47457 -3.19517,2.70089 -14.2567,16.1539 -24.58123,29.8956 -31.34708,41.72207 -101.84119,91.4239 -145.05273,102.26932 -6.40299,1.60703 -12.63823,4.53415 -13.8561,6.50475 -1.21787,1.97055 -4.9221,2.54372 -8.23163,1.27372 -3.30952,-1.26995 -8.49096,-0.78025 -11.5143,1.08827 -3.02333,1.86851 -10.69864,2.85169 -17.05623,2.18483 -6.35759,-0.66687 -13.89339,0.23008 -16.74621,1.99322 -7.09047,4.38216 -46.12317,4.6397 -48.79169,0.32203 z"
+   id="path18"
+   inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
index 95a90cf..d2bd30a 100644 (file)
@@ -80,6 +80,14 @@ export const ChessRules = class ChessRules {
     return V.ShowMoves;
   }
 
+  // Sometimes moves must remain hidden until game ends
+  static get SomeHiddenMoves() {
+    return false;
+  }
+  get someHiddenMoves() {
+    return V.SomeHiddenMoves;
+  }
+
   // Generally true, unless the variant includes random effects
   static get CorrConfirm() {
     return true;
index cd31e70..79f089e 100644 (file)
@@ -121,13 +121,15 @@ export default {
     // TODO: is it OK to pass "computed" as properties?
     // Also, some are seemingly not recomputed when vr is initialized.
     showMoves: function() {
-      return this.game.score != "*"
-        ? "all"
-        : (!!this.vr ? this.vr.showMoves : "none");
+      return (
+        !!this.game.score && this.game.score != "*"
+          ? "all"
+          : (!!this.vr ? this.vr.showMoves : "none")
+      );
     },
     showTurn: function() {
       return (
-        this.game.score == '*' &&
+        !!this.game.score && this.game.score == '*' &&
         !!this.vr &&
         (
           this.vr.showMoves != "all" ||
@@ -138,7 +140,7 @@ export default {
     },
     canAnalyze: function() {
       return (
-        this.game.mode != "analyze" &&
+        !!this.game.mode && this.game.mode != "analyze" &&
         !!this.vr && this.vr.canAnalyze
       );
     },
@@ -147,8 +149,8 @@ export default {
     },
     allowDownloadPGN: function() {
       return (
-        this.game.score != "*" ||
-        (!!this.vr && this.vr.showMoves == "all")
+        (!!this.game.score && this.game.score != "*") ||
+        (!!this.vr && !this.vr.someHiddenMoves)
       );
     }
   },
index 4305280..0fd4e1f 100644 (file)
@@ -60,9 +60,9 @@ export default {
     if (!!lm) {
       if (!Array.isArray(lm)) lm = [lm];
       lm.forEach(m => {
-        if (V.OnBoard(m.start.x, m.start.y))
+        if (!m.start.noHighlight && V.OnBoard(m.start.x, m.start.y))
           lmHighlights[m.start.x + sizeX * m.start.y] = true;
-        if (V.OnBoard(m.end.x, m.end.y))
+        if (!m.end.noHighlight && V.OnBoard(m.end.x, m.end.y))
           lmHighlights[m.end.x + sizeX * m.end.y] = true;
       });
     }
@@ -904,7 +904,7 @@ img.ghost
 
 .hover-highlight:hover
   // TODO: color dependant on board theme, or inner border...
-  background-color: #C571E6
+  background-color: #C571E6 !important
 
 .light-square.lichess.highlight-light
   background-color: #cdd26a
index 859ebcf..9b5f9a4 100644 (file)
@@ -1,2 +1,7 @@
 p.boxed.
   TODO
+
+// TODO: banane ou bombe redirige vers bonus, puis enchaînement
+// (mushroom ou egg ou autre banane...etc)
+// Example a1 to a5 banana => b5 mushroom => jump over c5, arrive on d5, egg
+// Possible en sortant les fonctions applyEffect() de getBasicMove() ?
index 5d1985a..f9b0931 100644 (file)
@@ -2,45 +2,57 @@ p.boxed.
   TODO
 
   //Détails :
-  //Si une pièce pose quelque chose sur une case ça remplace ce qui y était déjà.
-    
-    //Toad: pion
-    //  laisse sur sa case d'arrivée -1 un champi turbo permettant à Peach et cavalier et autres pions d'aller
-    //  un dep plus loin (evt 2 cases si pion saut initial), et aux pièces arrivant sur cette case de sauter par
-    //  dessus une pièce immédiatement adjacente dans leur trajectoire (en atterissant juste derrière, si case vide? Ou avec capture aussi?).
-  
-    //Donkey : tour
-    //  pose une banane (optionnel) sur une case adjacente (diagonale) à celle d'arrivée
-    //  Si une pièce arrive sur la peau de banane, alors elle effectue un déplacement
-    //  aléatoire d'une (2?) case (vertical ou horizontal) depuis sa position finale.
+            //Si une pièce pose quelque chose sur une case ça remplace ce qui y était déjà.
+              
+              //Toad: pion
+              //  laisse sur sa case d'arrivée -1 un champi turbo permettant à Peach et cavalier et autres pions d'aller
+              //  un dep plus loin (evt 2 cases si pion saut initial), et aux pièces arrivant sur cette case de sauter par
+              //  dessus une pièce immédiatement adjacente dans leur trajectoire (en atterissant juste derrière, si case vide? Ou avec capture aussi?).
+            
+              //Donkey : tour
+              //  pose une banane (optionnel) sur une case adjacente (diagonale) à celle d'arrivée
+              //  Si une pièce arrive sur la peau de banane, alors elle effectue un déplacement
+              //  aléatoire d'une (2?) case (vertical ou horizontal) depuis sa position finale.
 
-    //Wario: fou
-    //  pose une bombe (optionnel) sur une case orthogonalement adjacente à la case d'arrivée
-    //  Si une pièce arrive sur une bombe, alors elle effectue un déplacement diagonal
-    //  aléatoire d'une (2?) case depuis sa position finale (juste une case si impossible).
-    
-    //Yoshi: cavalier
-    //  laisse sur sa case de départ un bonus aléatoire
-    //  (NOTE: certains bonus pourraient ne pas être applicables ==> pion bloqué par exemple)
-    //    - i) roi boo(*E*) : échange avec n'importe quelle pièce (choix du joueur, type et/ou couleur différents)
-    //    - i*) koopa(*B*) : ramène sur la case initiale
-    //    - ii) toadette(*R*) : permet de poser une pièce capturée sur le plateau
-    //                         (n'importe où sauf 8eme rangée pour les pions)
-    //    - ii*) chomp(*W*) : mange la pièce ; si c'est Peach, c'est perdu
-    //    - iii) daisy(*T*) : permet de rejouer un coup avec la même pièce --> cumulable si ensuite coup sur bonus Daisy.
-    //    - iii*) bowser(*M*) : immobilise la pièce (marquée jaune/rouge), qui ne pourra pas jouer au tour suivant
-    //    - iv) luigi(*L*) : fait changer de camp une pièce adverse (aléatoire) (sauf le roi)
-    //    - iv*) waluigi(*D*) : fait changer de camp une de nos pièces (aléatoire, sauf le roi)
-    //  --> i, ii, iii en deux temps (subTurn 1 & 2)
-  
-    //Mario: dame
-    //  pouvoir "fantôme" : peut effectuer une fois dans la partie un coup non-capturant invisible (=> choix à chaque coup, getPPpath(m) teste m.nvisible...)
-    //wg bg ghost once in the game the queen can make an invisible move --> printed as "?"
+              //Wario: fou
+              //  pose une bombe (optionnel) sur une case orthogonalement adjacente à la case d'arrivée
+              //  Si une pièce arrive sur une bombe, alors elle effectue un déplacement diagonal
+              //  aléatoire d'une (2?) case depuis sa position finale (juste une case si impossible).
+              
+              //Yoshi: cavalier
+              //  laisse sur sa case de départ un bonus aléatoire
+              //  (NOTE: certains bonus pourraient ne pas être applicables ==> pion bloqué par exemple)
+              //    - i) roi boo(*E*) : échange avec n'importe quelle pièce (choix du joueur, type et/ou couleur différents)
+          B
+          //    - i*) koopa(*B*) : ramène sur la case initiale
+          K
+          //    - ii) toadette(*R*) : permet de poser une pièce capturée sur le plateau
+          T
+          //                         (n'importe où sauf 8eme rangée pour les pions)
+              //    - ii*) chomp(*W*) : mange la pièce ; si c'est Peach, c'est perdu
+          C
+          //    - iii) daisy(*T*) : permet de rejouer un coup avec la même pièce --> cumulable si ensuite coup sur bonus Daisy.
+          D
+          //    - iii*) bowser(*M*) : immobilise la pièce (marquée jaune/rouge), qui ne pourra pas jouer au tour suivant
+          I
+          //    - iv) luigi(*L*) : fait changer de camp une pièce adverse (aléatoire) (sauf le roi)
+          L
+          //    - iv*) waluigi(*D*) : fait changer de camp une de nos pièces (aléatoire, sauf le roi)
+          W
+          //  --> i, ii, iii en deux temps (subTurn 1 & 2)
+            
+              //Mario: dame
+              //  pouvoir "fantôme" : peut effectuer une fois dans la partie un coup non-capturant invisible (=> choix à chaque coup, getPPpath(m) teste m.nvisible...)
+              //wg bg ghost once in the game the queen can make an invisible move --> printed as "?"
 
-    //Peach: roi
-    //  Carapace rouge (disons ^^) jouable une seule fois dans la partie,
-    //  au lieu de se déplacer. Capture un ennemi au choix parmi les plus proches,
-    //  à condition qu'ils soient visibles (suivant les directions de déplacement d'une dame).
-    //  Profite des accélérateurs posés par les pions (+ 1 case : obligatoire).
+              //Peach: roi
+              //  Carapace rouge (disons ^^) jouable une seule fois dans la partie,
+              //  au lieu de se déplacer. Capture un ennemi au choix parmi les plus proches,
+              //  à condition qu'ils soient visibles (suivant les directions de déplacement d'une dame).
+              //  Profite des accélérateurs posés par les pions (+ 1 case : obligatoire).
 
-    // Promotion pion: n'importe quelle pièce y compris roi => Si plusieurs rois, il faut tous les capturer.
+              // Promotion pion: n'importe quelle pièce y compris roi => Si plusieurs rois, il faut tous les capturer.
+
+          p.
+            Règles imaginées par Charlotte Blard
+            et développées par Benjamin Auder (2020).
index 4587be3..addf5dd 100644 (file)
@@ -13,6 +13,10 @@ export class ApocalypseRules extends ChessRules {
     );
   }
 
+  static get SomeHiddenMoves() {
+    return true;
+  }
+
   static get HasCastle() {
     return false;
   }
index cc7affd..9a02663 100644 (file)
@@ -1,5 +1,6 @@
 import { ChessRules, Move, PiPo } from "@/base_rules";
 import { SuicideRules } from "@/variants/Suicide";
+import { ArrayFun } from "@/utils/array";
 import { randInt } from "@/utils/alea";
 
 export class ChakartRules extends ChessRules {
@@ -17,7 +18,11 @@ export class ChakartRules extends ChessRules {
   }
 
   static get CanAnalyze() {
-    return false;
+    return true; //false;
+  }
+
+  static get SomeHiddenMoves() {
+    return true;
   }
 
   hoverHighlight(x, y) {
@@ -25,8 +30,8 @@ export class ChakartRules extends ChessRules {
     const L = this.firstMove.length;
     const fm = this.firstMove[L-1];
     if (fm.end.effect != 0) return false;
-    const deltaX = Math.abs(fm.end.x - x);
-    const deltaY = Math.abs(fm.end.y - y);
+    const deltaX = Math.abs(fm.appear[0].x - x);
+    const deltaY = Math.abs(fm.appear[0].y - y);
     return (
       (deltaX == 0 && deltaY == 0) ||
       (
@@ -67,11 +72,10 @@ export class ChakartRules extends ChessRules {
 
   // Fictive color 'a', bomb banana mushroom egg
   static get BOMB() {
-    // Doesn't collide with bishop because color is 'a'
-    return 'b';
+    return 'w'; //"Wario"
   }
   static get BANANA() {
-    return 'n';
+    return 'd'; //"Donkey"
   }
   static get EGG() {
     return 'e';
@@ -80,6 +84,14 @@ export class ChakartRules extends ChessRules {
     return 'm';
   }
 
+  static fen2board(f) {
+    return (
+      f.charCodeAt() <= 90
+        ? "w" + f.toLowerCase()
+        : (['w', 'd', 'e', 'm'].includes(f) ? "a" : "b") + f
+    );
+  }
+
   static get PIECES() {
     return (
       ChessRules.PIECES.concat(
@@ -100,6 +112,13 @@ export class ChakartRules extends ChessRules {
     return prefix + b;
   }
 
+  getPPpath(m) {
+    let piece = m.appear[0].p;
+    if (Object.keys(V.IMMOBILIZE_DECODE).includes(piece))
+      piece = V.IMMOBILIZE_DECODE[piece];
+    return this.getPpath(m.appear[0].c + piece);
+  }
+
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
     return Object.assign(
@@ -117,7 +136,7 @@ export class ChakartRules extends ChessRules {
     for (let row of rows) {
       let sumElts = 0;
       for (let i = 0; i < row.length; i++) {
-        if (['K','k','L','l'].includes(row[i])) kings[row[i]]++;
+        if (['K', 'k', 'L', 'l'].includes(row[i])) kings[row[i]]++;
         if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
         else {
           const num = parseInt(row[i]);
@@ -140,8 +159,8 @@ export class ChakartRules extends ChessRules {
   setFlags(fenflags) {
     // King can send shell? Queen can be invisible?
     this.powerFlags = {
-      w: [{ 'k': false, 'q': false }],
-      b: [{ 'k': false, 'q': false }]
+      w: { 'k': false, 'q': false },
+      b: { 'k': false, 'q': false }
     };
     for (let c of ["w", "b"]) {
       for (let p of ['k', 'q']) {
@@ -212,6 +231,10 @@ export class ChakartRules extends ChessRules {
     return fen;
   }
 
+  getReservePpath(index, color) {
+    return color + V.RESERVE_PIECES[index];
+  }
+
   static get RESERVE_PIECES() {
     return [V.PAWN, V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN];
   }
@@ -225,6 +248,15 @@ export class ChakartRules extends ChessRules {
     const end = (color == 'b' && p == V.PAWN ? 7 : 8);
     for (let i = start; i < end; i++) {
       for (let j = 0; j < V.size.y; j++) {
+        // TODO: allow also to drop on bonus square?
+        // No effect if mushroom, but normal (recursive) effect otherwise.
+        //
+        //Koopa --> shift()
+        //
+        //Egg: no effect on subTurn == 2 => OK
+        //Juste bootstrap banan or bomb effect => getBasicMove otherwise
+        //
+        //
         if (this.board[i][j] == V.EMPTY) {
           let mv = new Move({
             appear: [
@@ -247,49 +279,88 @@ export class ChakartRules extends ChessRules {
   }
 
   getPotentialMovesFrom([x, y]) {
-    if (this.subTurn == 1) return super.getPotentialMovesFrom([x, y]);
-    if (this.subTurn == 2) {
-      let moves = [];
+    let moves = [];
+    if (this.subTurn == 1) {
+      moves = super.getPotentialMovesFrom([x, y]);
+      const finalPieces = V.PawnSpecs.promotions;
+      const color = this.turn;
+      const lastRank = (color == "w" ? 0 : 7);
+      let pMoves = [];
+      moves.forEach(m => {
+        if (
+          m.appear.length > 0 &&
+          ['p', 's'].includes(m.appear[0].p) &&
+          m.appear[0].x == lastRank
+        ) {
+          for (let i = 1; i < finalPieces.length; i++) {
+            const piece = finalPieces[i];
+            let otherM = JSON.parse(JSON.stringify(m));
+            otherM.appear[0].p =
+              m.appear[0].p == V.PAWN
+                ? finalPieces[i]
+                : V.IMMOBILIZE_CODE[finalPieces[i]];
+            pMoves.push(otherM);
+          }
+          // Finally alter m itself:
+          m.appear[0].p =
+            m.appear[0].p == V.PAWN
+              ? finalPieces[0]
+              : V.IMMOBILIZE_CODE[finalPieces[0]];
+        }
+      });
+      Array.prototype.push.apply(moves, pMoves);
+    }
+    else {
+      // Subturn == 2
       const L = this.firstMove.length;
       const fm = this.firstMove[L-1];
       switch (fm.end.effect) {
         // case 0: a click is required (banana or bomb)
-        case 1:
-          // Exchange position with any piece
+        case "kingboo":
+          // Exchange position with any piece,
+          // except pawns if arriving on last rank.
+          const lastRank = { 'w': 0, 'b': 7 };
+          const color = this.turn;
+          const allowLastRank = (this.getPiece(x, y) != V.PAWN);
           for (let i=0; i<8; i++) {
             for (let j=0; j<8; j++) {
               const colIJ = this.getColor(i, j);
               if (
-                i != x &&
-                j != y &&
+                (i != x || j != y) &&
                 this.board[i][j] != V.EMPTY &&
                 colIJ != 'a'
               ) {
-                const movedUnit = new PiPo({
-                  x: x,
-                  y: y,
-                  c: colIJ,
-                  p: this.getPiece(i, j)
-                });
-                let mMove = this.getBasicMove([x, y], [i, j]);
-                mMove.appear.push(movedUnit);
-                moves.push(mMove);
+                const pieceIJ = this.getPiece(i, j);
+                if (
+                  (pieceIJ != V.PAWN || x != lastRank[colIJ]) &&
+                  (allowLastRank || i != lastRank[color])
+                ) {
+                  const movedUnit = new PiPo({
+                    x: x,
+                    y: y,
+                    c: colIJ,
+                    p: this.getPiece(i, j)
+                  });
+                  let mMove = this.getBasicMove([x, y], [i, j]);
+                  mMove.appear.push(movedUnit);
+                  moves.push(mMove);
+                }
               }
             }
           }
           break;
-        case 2:
+        case "toadette":
           // Resurrect a captured piece
           if (x >= V.size.x) moves = this.getReserveMoves([x, y]);
           break;
-        case 3:
+        case "daisy":
           // Play again with the same piece
-          if (fm.end.x == x && fm.end.y == y)
+          if (fm.appear[0].x == x && fm.appear[0].y == y)
             moves = super.getPotentialMovesFrom([x, y]);
           break;
       }
-      return moves;
     }
+    return moves;
   }
 
   // Helper for getBasicMove()
@@ -317,10 +388,8 @@ export class ChakartRules extends ChessRules {
     const piece1 = this.getPiece(x1, y1);
     const piece2 = this.getPiece(x2, y2);
     const oppCol = V.GetOppCol(color1);
-    if (
-      [V.PAWN, V.KNIGHT].includes(piece1) &&
-      (color2 != 'a' || !([V.BANANA, V.BOMB].includes(piece2)))
-    ) {
+    if ([V.PAWN, V.KNIGHT].includes(piece1)) {
+      //&& (color2 != 'a' || !([V.BANANA, V.BOMB].includes(piece2)))
       switch (piece1) {
         case V.PAWN: {
           const twoSquaresMove = (Math.abs(x2 - x1) == 2);
@@ -348,46 +417,77 @@ export class ChakartRules extends ChessRules {
         case V.KNIGHT: {
           const deltaX = Math.abs(x2 - x1);
           const deltaY = Math.abs(y2 - y1);
-          const eggSquare = [
+          let eggSquare = [
             x1 + (deltaX == 2 ? (x2 - x1) / 2 : 0),
             y1 + (deltaY == 2 ? (y2 - y1) / 2 : 0)
           ];
           if (
-            this.board[eggSquare[0]][eggSquare[1]] == V.EMPTY ||
-            this.getColor(eggSquare[0], eggSquare[1]) == 'a'
+            this.board[eggSquare[0]][eggSquare[1]] != V.EMPTY &&
+            this.getColor(eggSquare[0], eggSquare[1]) != 'a'
           ) {
-            move.appear.push(
+            eggSquare[0] = x1;
+            eggSquare[1] = y1;
+          }
+          move.appear.push(
+            new PiPo({
+              x: eggSquare[0],
+              y: eggSquare[1],
+              c: 'a',
+              p: V.EGG
+            })
+          );
+          if (this.getColor(eggSquare[0], eggSquare[1]) == 'a') {
+            move.vanish.push(
               new PiPo({
                 x: eggSquare[0],
                 y: eggSquare[1],
                 c: 'a',
-                p: V.EGG
+                p: this.getPiece(eggSquare[0], eggSquare[1])
               })
             );
-            if (this.getColor(eggSquare[0], eggSquare[1]) == 'a') {
-              move.vanish.push(
-                new PiPo({
-                  x: eggSquare[0],
-                  y: eggSquare[1],
-                  c: 'a',
-                  p: this.getPiece(eggSquare[0], eggSquare[1])
-                })
-              );
-            }
           }
           break;
         }
       }
     }
+    // Avoid looping back on effect already applied:
+    let usedEffect = ArrayFun.init(8, 8, false);
     const applyBeffect = (steps) => {
       const [x, y] = [move.appear[0].x, move.appear[0].y];
+      if (usedEffect[x][y]) return;
+      usedEffect[x][y] = true;
       const moveTo = this.getRandomSquare([x, y], steps);
       move.appear[0].x = moveTo[0];
       move.appear[0].y = moveTo[1];
+      if (
+        this.board[moveTo[0]][moveTo[1]] != V.EMPTY &&
+        this.getColor(moveTo[0], moveTo[1]) == 'a'
+      ) {
+        // Artificially change direction, before applying new effects:
+        x1 = x;
+        y1 = y;
+        x2 = moveTo[0];
+        x2 = moveTo[1];
+        switch (this.getPiece(moveTo[0], moveTo[1])) {
+          case V.BANANA:
+            applyBeffect(V.steps[V.ROOK]);
+            break;
+          case V.BOMB:
+            applyBeffect(V.steps[V.BISHOP]);
+            break;
+          case V.MUSHROOM:
+            applyMushroomEffect();
+            break;
+          case V.EGG:
+            applyEggEffect();
+            break;
+        }
+      }
     };
     // For (wa)luigi effect:
     const changePieceColor = (color) => {
       let pieces = [];
+      const oppLastRank = (color == 'w' ? 7 : 0);
       for (let i=0; i<8; i++) {
         for (let j=0; j<8; j++) {
           if (
@@ -395,7 +495,7 @@ export class ChakartRules extends ChessRules {
             this.getColor(i, j) == color
           ) {
             const piece = this.getPiece(i, j);
-            if (piece != V.KING)
+            if (piece != V.KING && (piece != V.PAWN || i != oppLastRank))
               pieces.push({ x: i, y: j, p: piece });
           }
         }
@@ -419,59 +519,90 @@ export class ChakartRules extends ChessRules {
       );
     };
     const applyEggEffect = () => {
-      if (this.subTurn == 1) {
-        // 1) Determine the effect (some may be impossible)
-        let effects = ["kingboo", "koopa", "chomp", "bowser"];
-        if (this.captured[color1].some(c => c >= 1))
-          effects.push("toadette");
-        V.PlayOnBoard(this.board, move);
-        const canPlayAgain = this.getPotentialMovesFrom([x2, y2]).length > 0;
-        V.UndoOnBoard(this.board, move);
-        if (canPlayAgain) effects.push("daisy");
-        if (
-          board.some(b =>
-            b.some(cell => cell[0] == oppCol && cell[1] != V.KING))
-        ) {
-          effects.push("luigi");
-        }
-        if (
-          board.some(b =>
-            b.some(cell => cell[0] == color1 && cell[1] != V.KING))
-        ) {
-          effects.push("waluigi");
-        }
-        const effect = effects[randInd(effects.length)];
-        // 2) Apply it if possible, or set move.end.effect
-        if (["kingboo", "toadette", "daisy"].includes(effect))
-          move.end.effect = effect;
-        else {
-          switch (effect) {
-            case "koopa":
-              move.appear[0].x = x1;
-              move.appear[0].y = y1;
-              break;
-            case "chomp":
-              move.appear.unshift();
-              break;
-            case "bowser":
-              move.appear[0].p = V.IMMOBILIZE_CODE[piece1];
-              break;
-            case "luigi":
-              changePieceColor(oppCol);
-              break;
-            case "waluigi":
-              changePieceColor(color1);
-              break;
-          }
+      if (this.subTurn == 2)
+        // No egg effects at subTurn 2
+        return;
+      // 1) Determine the effect (some may be impossible)
+      let effects = ["kingboo", "koopa", "chomp", "bowser"];
+      if (Object.values(this.captured[color1]).some(c => c >= 1))
+        effects.push("toadette");
+      const lastRank = { 'w': 0, 'b': 7 };
+      let canPlayAgain = undefined;
+      if (
+        move.appear[0].p == V.PAWN &&
+        move.appear[0].x == lastRank[color1]
+      ) {
+        // Always possible: promote into a queen rook or king
+        canPlayAgain = true;
+      }
+      else {
+        move.end.effect = "toadette";
+        this.play(move);
+        canPlayAgain = this.getPotentialMovesFrom([x2, y2]).length > 0;
+        this.undo(move);
+        delete move.end["effect"];
+      }
+      if (canPlayAgain) effects.push("daisy");
+      if (
+        this.board.some((b,i) =>
+          b.some(cell => {
+            return (
+              cell[0] == oppCol &&
+              cell[1] != V.KING &&
+              (cell[1] != V.PAWN || i != lastRank[oppCol])
+            );
+          })
+        )
+      ) {
+        effects.push("luigi");
+      }
+      if (
+        this.board.some((b,i) =>
+          b.some(cell => {
+            return (
+              cell[0] == color1 &&
+              cell[1] != V.KING &&
+              (cell[1] != V.PAWN || i != lastRank[color1])
+            );
+          })
+        )
+      ) {
+        effects.push("waluigi");
+      }
+      const effect = effects[randInt(effects.length)];
+      move.end.effect = effect;
+      // 2) Apply it if possible
+      if (!(["kingboo", "toadette", "daisy"].includes(effect))) {
+        switch (effect) {
+          case "koopa":
+            move.appear = [];
+            // Maybe egg effect was applied after others,
+            // so just shift vanish array:
+            move.vanish.shift();
+            break;
+          case "chomp":
+            move.appear = [];
+            break;
+          case "bowser":
+            move.appear[0].p = V.IMMOBILIZE_CODE[piece1];
+            break;
+          case "luigi":
+            changePieceColor(oppCol);
+            break;
+          case "waluigi":
+            changePieceColor(color1);
+            break;
         }
       }
     };
     const applyMushroomEffect = () => {
+      if (usedEffect[move.appear[0].x][move.appear[0].y]) return;
+      usedEffect[move.appear[0].x][move.appear[0].y] = true;
       if ([V.PAWN, V.KING, V.KNIGHT].includes(piece1)) {
         // Just make another similar step, if possible (non-capturing)
         const [i, j] = [
-          move.appear[0].x + 2 * (x2 - x1),
-          move.appear[0].y + 2 * (y2 - y1)
+          move.appear[0].x + (x2 - x1),
+          move.appear[0].y + (y2 - y1)
         ];
         if (
           V.OnBoard(i, j) &&
@@ -576,7 +707,7 @@ export class ChakartRules extends ChessRules {
               // "play again" nothing can be done after next move.
               const steps = V.steps[piece1 == V.ROOK ? V.BISHOP : V.ROOK];
               const object = (piece1 == V.ROOK ? V.BANANA : V.BOMB);
-              const dropOn = this.getRandomSquare([x, y], steps);
+              const dropOn = this.getRandomSquare([x2, y2], steps);
               move.appear.push(
                 new PiPo({
                   x: dropOn[0],
@@ -591,8 +722,9 @@ export class ChakartRules extends ChessRules {
           break;
       }
     }
-    else if (
+    if (
       this.subTurn == 1 &&
+      (color2 != 'a' || piece2 != V.EGG) &&
       [V.ROOK, V.BISHOP].includes(piece1)
     ) {
       move.end.effect = 0;
@@ -635,7 +767,10 @@ export class ChakartRules extends ChessRules {
       this.addPawnMoves([x, y], [x + shiftX, y], moves);
       if (
         [firstRank, firstRank + shiftX].includes(x) &&
-        this.board[x + 2 * shiftX][y] == V.EMPTY
+        (
+          this.board[x + 2 * shiftX][y] == V.EMPTY ||
+          this.getColor(x + 2 * shiftX, y) == 'a'
+        )
       ) {
         moves.push(this.getBasicMove([x, y], [x + 2 * shiftX, y]));
       }
@@ -665,7 +800,8 @@ export class ChakartRules extends ChessRules {
       normalMoves.forEach(m => {
         if (m.vanish.length == 1) {
           let im = JSON.parse(JSON.stringify(m));
-          m.appear[0].p = V.INVISIBLE_QUEEN;
+          im.appear[0].p = V.INVISIBLE_QUEEN;
+          im.end.noHighlight = true;
           invisibleMoves.push(im);
         }
       });
@@ -679,23 +815,43 @@ export class ChakartRules extends ChessRules {
     // If flag allows it, add 'remote shell captures'
     if (this.powerFlags[this.turn][V.KING]) {
       V.steps[V.ROOK].concat(V.steps[V.BISHOP]).forEach(step => {
-        let [i, j] = [x + 2 * step[0], y + 2 * step[1]];
-        while (
-          V.OnBoard(i, j) &&
-          (
-            this.board[i][j] == V.EMPTY ||
+        if (
+          V.OnBoard(x + step[0], y + step[1]) &&
+          this.board[x + step[0]][y + step[1]] == V.EMPTY
+        ) {
+          let [i, j] = [x + 2 * step[0], y + 2 * step[1]];
+          while (
+            V.OnBoard(i, j) &&
             (
-              this.getColor(i, j) == 'a' &&
-              [V.EGG, V.MUSHROOM].includes(this.getPiece(i, j))
+              this.board[i][j] == V.EMPTY ||
+              (
+                this.getColor(i, j) == 'a' &&
+                [V.EGG, V.MUSHROOM].includes(this.getPiece(i, j))
+              )
             )
-          )
-        ) {
-          i += step[0];
-          j += step[1];
+          ) {
+            i += step[0];
+            j += step[1];
+          }
+          if (V.OnBoard(i, j)) {
+            const colIJ = this.getColor(i, j);
+            if (colIJ != color) {
+              // May just destroy a bomb or banana:
+              moves.push(
+                new Move({
+                  start: { x: x, y: y},
+                  end: { x: i, y: j },
+                  appear: [],
+                  vanish: [
+                    new PiPo({
+                      x: i, y: j, c: colIJ, p: this.getPiece(i, j)
+                    })
+                  ]
+                })
+              );
+            }
+          }
         }
-        if (V.OnBoard(i, j) && this.getColor(i, j) != color)
-          // May just destroy a bomb or banana:
-          moves.push(this.getBasicMove([x, y], [i, j]));
       });
     }
     return moves;
@@ -744,7 +900,7 @@ export class ChakartRules extends ChessRules {
           let step of
           (fm.vanish[0].p == V.ROOK ? V.steps[V.BISHOP] : V.steps[V.ROOK])
         ) {
-          const [i, j] = [fm.end.x + step[0], fm.end.y + step[1]];
+          const [i, j] = [fm.appear[0].x + step[0], fm.appear[0].y + step[1]];
           if (
             V.OnBoard(i, j) &&
             (this.board[i][j] == V.EMPTY || this.getColor(i, j) == 'a')
@@ -770,8 +926,8 @@ export class ChakartRules extends ChessRules {
           }
         }
         break;
-      case 1: {
-        const [x, y] = [fm.end.x, fm.end.y];
+      case "kingboo": {
+        const [x, y] = [fm.appear[0].x, fm.appear[0].y];
         for (let i=0; i<8; i++) {
           for (let j=0; j<8; j++) {
             const colIJ = this.getColor(i, j);
@@ -795,14 +951,14 @@ export class ChakartRules extends ChessRules {
         }
         break;
       }
-      case 2: {
+      case "toadette": {
         const x = V.size.x + (this.turn == 'w' ? 0 : 1);
         for (let y = 0; y < 8; y++)
           Array.prototype.push.apply(moves, this.getReserveMoves([x, y]));
         break;
       }
-      case 3:
-        moves = super.getPotentialMovesFrom([fm.end.x, fm.end.y]);
+      case "daisy":
+        moves = super.getPotentialMovesFrom([fm.appear[0].x, fm.appear[0].y]);
         break;
     }
     return moves;
@@ -815,8 +971,8 @@ export class ChakartRules extends ChessRules {
     const fm = this.firstMove[L-1];
     if (fm.end.effect != 0) return null;
     const [x, y] = [square[0], square[1]];
-    const deltaX = Math.abs(fm.end.x - x);
-    const deltaY = Math.abs(fm.end.y - y);
+    const deltaX = Math.abs(fm.appear[0].x - x);
+    const deltaY = Math.abs(fm.appear[0].y - y);
     if (deltaX == 0 && deltaY == 0) {
       // Empty move:
       return {
@@ -860,7 +1016,7 @@ export class ChakartRules extends ChessRules {
     this.epSquares.push(this.getEpSquare(move));
     V.PlayOnBoard(this.board, move);
     move.turn = [this.turn, this.subTurn];
-    if (move.end.effect !== undefined) {
+    if ([0, "kingboo", "toadette", "daisy"].includes(move.end.effect)) {
       this.firstMove.push(move);
       this.subTurn = 2;
     }
@@ -873,26 +1029,36 @@ export class ChakartRules extends ChessRules {
   }
 
   postPlay(move) {
-    if (move.end.effect == 2) this.reserve = this.captured;
-    else this.reserve = null;
+    if (move.end.effect == "toadette") this.reserve = this.captured;
+    else this.reserve = undefined;
     if (move.vanish.length == 2 && move.vanish[1].c != 'a')
       // Capture: update this.captured
       this.captured[move.vanish[1].c][move.vanish[1].p]++;
     else if (move.vanish.length == 0) {
+      if (move.appear.length == 0 || move.appear[0].c == 'a') return;
       // A piece is back on board
-      this.captured[move.appear[0].c][move.appear[0].p]++;
-      this.reserve = null;
+      this.captured[move.appear[0].c][move.appear[0].p]--;
     }
+
+
+
+
+// TODO: simplify and fix this
+
+
+
     if (this.subTurn == 1) {
       // Update flags:
       if (
-        move.vanish[0].p == V.KING &&
+        this.board[move.start.x][move.start.y] != V.EMPTY &&
+        this.getPiece(move.start.x, move.start.y) == V.KING &&
         (
           Math.abs(move.end.x - move.start.x) >= 2 ||
           Math.abs(move.end.y - move.start.y) >= 2
         )
       ) {
-        this.powerFlags[move.vanish[0].c][V.KING] = false;
+        const myColor = this.getColor(move.start.x, move.start.y);
+        this.powerFlags[myColor][V.KING] = false;
       }
       else if (
         move.vanish[0].p == V.QUEEN &&
@@ -935,9 +1101,9 @@ export class ChakartRules extends ChessRules {
     this.epSquares.pop();
     this.disaggregateFlags(JSON.parse(move.flags));
     V.UndoOnBoard(this.board, move);
-    if (move.end.effect !== undefined) this.firstMove.pop();
+    if ([0, "kingboo", "toadette", "daisy"].includes(move.end.effect))
+      this.firstMove.pop();
     else this.movesCount--;
-    if (this.subTurn == 1) this.movesCount--;
     this.turn = move.turn[0];
     this.subTurn = move.turn[1];
     this.postUndo(move);
@@ -957,12 +1123,12 @@ export class ChakartRules extends ChessRules {
     if (move.vanish.length == 2 && move.vanish[1].c != 'a')
       this.captured[move.vanish[1].c][move.vanish[1].p]--;
     else if (move.vanish.length == 0) {
-      // A piece is back on board
-      this.captured[move.vanish[1].c][move.vanish[1].p]++;
-      this.reserve = null;
+      if (move.appear.length == 0 || move.appear[0].c == 'a') return;
+      // A piece was back on board
+      this.captured[move.appear[0].c][move.appear[0].p]++;
     }
     if (move.vanish.length == 0) this.reserve = this.captured;
-    else this.reserve = null;
+    else this.reserve = undefined;
   }
 
   getCheckSquares() {
@@ -974,12 +1140,17 @@ export class ChakartRules extends ChessRules {
     let kingThere = { w: false, b: false };
     for (let i=0; i<8; i++) {
       for (let j=0; j<8; j++) {
-        if (this.board[i][j] != V.EMPTY && this.getPiece(i, j) == V.KING)
+        if (
+          this.board[i][j] != V.EMPTY &&
+          ['k', 'l'].includes(this.getPiece(i, j))
+        ) {
           kingThere[this.getColor(i, j)] = true;
+        }
       }
     }
     if (!kingThere['w']) return "0-1";
     if (!kingThere['b']) return "1-0";
+    if (!this.atLeastOneMove()) return (this.turn == 'w' ? "0-1" : "1-0");
     return "*";
   }
 
@@ -987,7 +1158,7 @@ export class ChakartRules extends ChessRules {
     return (
       SuicideRules.GenRandInitFen(randomness).slice(0, -1) +
       // Add Peach + Mario flags, re-add en-passant + capture counts
-      "0000 - 0000000000"
+      "1111 - 0000000000"
     );
   }
 
@@ -1004,6 +1175,8 @@ export class ChakartRules extends ChessRules {
     if (this.subTurn == 2) {
       const moves2 = this.getAllValidMoves();
       move2 = moves2[randInt(moves2.length)];
+console.log(move2);
+
     }
     this.undo(move1);
     if (!move2) return move1;
@@ -1011,14 +1184,84 @@ export class ChakartRules extends ChessRules {
   }
 
   getNotation(move) {
-    // TODO: invisibility used => move notation Q??
-    // Also, bonus should be clearly indicated + bomb/bananas locations
-    // TODO: effect name + code to help move notation
     if (move.vanish.length == 0) {
+      if (move.appear.length == 0) return "-";
       const piece =
         move.appear[0].p != V.PAWN ? move.appear[0].p.toUpperCase() : "";
       return piece + "@" + V.CoordsToSquare(move.end);
     }
-    return super.getNotation(move);
+    if (
+      !move.end.effect &&
+      move.appear.length > 0 &&
+      move.appear[0].p == V.INVISIBLE_QUEEN
+    ) {
+      return "Q??";
+    }
+    const finalSquare = V.CoordsToSquare(move.end);
+    const piece = move.vanish[0].p;
+    if (move.appear.length == 0) {
+      // Koopa or Chomp
+      return (
+        piece.toUpperCase() + "x" + finalSquare +
+        "*" + (move.end.effect == "koopa" ? "K" : "C")
+      );
+    }
+    let notation = undefined;
+    if (piece == V.PAWN) {
+      // Pawn move
+      if (move.vanish.length >= 2) {
+        // Capture
+        const startColumn = V.CoordToColumn(move.start.y);
+        notation = startColumn + "x" + finalSquare;
+      }
+      else notation = finalSquare;
+      if (move.appear[0].p != V.PAWN)
+        // Promotion
+        notation += "=" + move.appear[0].p.toUpperCase();
+    }
+    else {
+      notation =
+        piece.toUpperCase() +
+        (move.vanish.length >= 2 ? "x" : "") +
+        finalSquare;
+    }
+    if (!!move.end.effect) {
+      switch (move.end.effect) {
+        case "kingboo":
+          notation += "*B";
+          break;
+        case "toadette":
+          notation += "*T";
+          break;
+        case "daisy":
+          notation += "*D";
+          break;
+        case "bowser":
+          notation += "*M";
+          break;
+        case "luigi":
+          notation += "*L";
+          break;
+        case "waluigi":
+          notation += "*W";
+          break;
+      }
+    }
+    else if (move.vanish.length >= 2 && move.vanish[1].c == 'a') {
+      let symbol = "";
+      switch (move.vanish[1].p) {
+        case V.MUSHROOM:
+          symbol = 'M';
+          break;
+        case V.BANANA:
+          symbol = 'B';
+          break;
+        case V.BOMB:
+          symbol = 'X';
+          break;
+      }
+      notation.replace('x', 'x' + symbol);
+    }
+    return notation;
   }
 };
index 8f94176..cb073cf 100644 (file)
@@ -13,6 +13,10 @@ export class DarkRules extends ChessRules {
     return "none";
   }
 
+  static get SomeHiddenMoves() {
+    return true;
+  }
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     const [sizeX, sizeY] = [V.size.x, V.size.y];
index 98a8b45..f9455fd 100644 (file)
@@ -11,6 +11,10 @@ export class HiddenRules extends ChessRules {
     return false;
   }
 
+  static get SomeHiddenMoves() {
+    return true;
+  }
+
   // Analyse in Hidden mode makes no sense
   static get CanAnalyze() {
     return false;
index 72feea4..f824785 100644 (file)
@@ -12,6 +12,10 @@ export class HiddenqueenRules extends ChessRules {
     return 't';
   }
 
+  static get SomeHiddenMoves() {
+    return true;
+  }
+
   static get PIECES() {
     return ChessRules.PIECES.concat([V.HIDDEN_QUEEN]);
   }
index c8f2be5..fea6337 100644 (file)
@@ -10,6 +10,10 @@ export class SynchroneRules extends ChessRules {
     return "byrow";
   }
 
+  static get SomeHiddenMoves() {
+    return true;
+  }
+
   static IsGoodFen(fen) {
     if (!ChessRules.IsGoodFen(fen)) return false;
     const fenParsed = V.ParseFen(fen);