Draft Ball variant + some fixes, enhancements and code cleaning
authorBenjamin Auder <benjamin.auder@somewhere>
Sat, 21 Mar 2020 05:14:22 +0000 (06:14 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Sat, 21 Mar 2020 05:14:22 +0000 (06:14 +0100)
48 files changed:
client/public/images/pieces/Ball/aa.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bc.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bl.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bo.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bs.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bt.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bu.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bw.svg [new file with mode: 0644]
client/public/images/pieces/Ball/by.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wc.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wl.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wo.svg [new file with mode: 0644]
client/public/images/pieces/Ball/ws.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wt.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wu.svg [new file with mode: 0644]
client/public/images/pieces/Ball/ww.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wy.svg [new file with mode: 0644]
client/src/App.vue
client/src/base_rules.js
client/src/translations/en.js
client/src/translations/es.js
client/src/translations/fr.js
client/src/translations/rules/Ball/en.pug [new file with mode: 0644]
client/src/translations/rules/Ball/es.pug [new file with mode: 0644]
client/src/translations/rules/Ball/fr.pug [new file with mode: 0644]
client/src/variants/Antiking1.js
client/src/variants/Antiking2.js
client/src/variants/Arena.js
client/src/variants/Ball.js [new file with mode: 0644]
client/src/variants/Cannibal.js
client/src/variants/Checkered.js
client/src/variants/Coregal.js
client/src/variants/Crazyhouse.js
client/src/variants/Extinction.js
client/src/variants/Grand.js
client/src/variants/Hidden.js
client/src/variants/Hiddenqueen.js
client/src/variants/Knightrelay1.js
client/src/variants/Recycle.js
client/src/variants/Royalrace.js
client/src/variants/Rugby.js
client/src/variants/Suction.js
client/src/variants/Suicide.js
client/src/variants/Wildebeest.js
client/src/views/Hall.vue
client/src/views/Problems.vue
server/db/populate.sql
server/models/Game.js

diff --git a/client/public/images/pieces/Ball/aa.svg b/client/public/images/pieces/Ball/aa.svg
new file mode 100644 (file)
index 0000000..8ba364b
--- /dev/null
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="225.85715"
+   height="225.85715"
+   id="svg2"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
+   sodipodi:docname="aa.svg">
+  <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="namedview2990"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="1.2685914"
+     inkscape:cx="147.83296"
+     inkscape:cy="79.109664"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     transform="matrix(0.85,0,0,0.85,-173.64285,-305.57927)">
+    <path
+       d="m 448.57143,492.36218 a 111.42857,111.42857 0 1 1 -222.85715,0 111.42858,111.42858 0 1 1 222.85715,0 z"
+       id="path2985"
+       style="fill:#999999;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Ball/bc.svg b/client/public/images/pieces/Ball/bc.svg
new file mode 100644 (file)
index 0000000..03c4273
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg16"
+   sodipodi:docname="bc.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata22">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs20" />
+  <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="namedview18"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg16" />
+  <path
+     style="color:black;"
+     d="m1290 582l-42 102q-102 22-224 22-121 0-222-22l-42-101q124 31 264 31 138 0 266-32zm-84 206l-29 70v27q-76 11-153 11-75 0-152-11l-1-27-27-70q85 15 180 15 96 0 182-15zm-35-378q-40 30-80 95h-32q0-49 23-95h89zm-206 0q23 49 23 95h-32q-39-64-81-95h90zm59-18q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm-37 744v-85q0-37 37-37t37 37v86h90q35 0 35 36t-35 36h-90v90q0 37-37 37t-37-37v-90h-88q-35 0-35-36t35-36l88-1z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g14">
+    <path
+       style="color:black;"
+       d="m1290 1466-42-102q-102-22-224-22-121 0-222 22l-42 101q124-31 264-31 138 0 266 32z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1206 1260-29-70v-27q-76-11-153-11-75 0-152 11l-1 27-27 70q85-15 180-15 96 0 182 15z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1171 1638q-40-30-80-95h-32q0 49 23 95h89z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m965 1638q23-49 23-95h-32q-39 64-81 95h90z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m987 912v85q0 37 37 37t37-37v-86h90q35 0 35-36t-35-36h-90v-90q0-37-37-37t-37 37v90h-88q-35 0-35 36t35 36l88 1z"
+       display="block"
+       id="path12" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 588.3661,1806.9043 c -140.23544,-21.1298 -204.39621,-20.6655 -259.5019,1.8779 -16.2447,6.6456 -30.23101,11.0554 -31.0807,9.7995 -35.96451,-53.1571 -82.34661,-142.2128 -78.83437,-151.3656 6.51642,-16.9815 87.66619,-52.8844 143.43971,-63.4616 68.1344,-12.9214 120.91212,-10.9979 260.68913,9.5008 146.49435,21.4839 174.87198,17.5972 232.65788,-31.8654 38.04886,-32.5684 40.24466,-47.1255 7.10842,-47.1255 -26.20215,0 -155.33701,-33.9649 -164.97106,-43.3905 -4.37824,-4.2835 13.23685,-59.6688 41.22034,-129.6047 26.87617,-67.1687 48.86577,-123.7619 48.86577,-125.7628 0,-2.0009 -27.08103,-21.6414 -60.18007,-43.6456 C 635.14989,1130.281 595.93066,1056.1639 595.64535,942.15247 595.32739,815.09576 632.71111,746.38082 755.6375,648.07111 849.62661,572.90383 961.51864,468.15819 961.51864,455.3393 c 0,-4.21397 -9.84073,-15.40249 -21.8683,-24.86338 -49.81664,-39.18578 -62.4405,-112.72331 -28.03,-163.28281 43.95297,-64.5803 107.49346,-84.57707 169.01566,-53.19078 87.8805,44.83331 98.4051,161.46802 20.2732,224.67101 l -21.1518,17.11027 64.5416,64.37856 c 35.4979,35.40821 96.0034,88.27038 134.4567,117.4715 112.8465,85.69483 141.6889,125.13229 165.2212,225.91436 22.6,96.78918 3.2669,194.32507 -53.1897,268.34357 -11.8057,15.4781 -46.6364,44.4207 -77.4014,64.3168 l -55.9364,36.1749 14.2774,35.9575 c 7.8525,19.7767 30.7334,76.9609 50.8464,127.0761 25.9358,64.6237 33.5999,92.8072 26.3577,96.9256 -15.6736,8.9131 -149.3244,41.9219 -169.7394,41.9219 -53.942,0 30.5251,76.2259 100.6463,90.8265 15.3486,3.1958 84.7086,-2.6302 156.2034,-13.1206 88.8154,-13.032 148.9911,-17.3471 194.5258,-13.9493 70.3813,5.2517 148.5137,30.01 184.812,58.5622 l 22.2161,17.4752 -44.0299,71.1199 c -24.2163,39.116 -45.2702,72.4127 -46.7864,73.9926 -1.5162,1.5799 -11.1141,-1.6001 -21.3286,-7.0668 -47.8594,-25.6136 -115.1656,-26.7104 -274.5188,-4.4737 -181.0592,25.2657 -213.7654,26.316 -264.2958,8.4879 -54.7038,-19.3006 -126.5456,-78.0493 -144.1004,-117.8381 -8.2131,-18.6155 -17.302,-33.8463 -20.1975,-33.8463 -2.8956,0 -10.149,13.5073 -16.1187,30.0163 -14.5729,40.3007 -79.19646,95.5786 -137.03754,117.2197 -59.22578,22.1592 -107.56401,21.3389 -280.81536,-4.7656 z m 385.81112,-176.6024 c 2.7527,-4.454 8.33663,-25.9319 12.40873,-47.7288 7.39285,-39.5721 7.36694,-39.6307 -17.50971,-39.6307 -13.70244,0 -24.91353,3.3552 -24.91353,7.4562 0,4.1009 -15.95222,25.5789 -35.44938,47.7288 L 873.26396,1638.4 h 47.95417 c 26.37481,0 50.2064,-3.6441 52.95909,-8.0981 z m 176.66458,-15.7663 c -12.2073,-13.1254 -29.0073,-34.6034 -37.3334,-47.7288 -19.7924,-31.201 -56.5321,-33.4526 -56.5321,-3.4644 0,11.2199 4.2871,32.6978 9.5269,47.7288 9.1533,26.2571 11.4289,27.3288 58.0303,27.3288 h 48.5035 z m 122.6248,-201.1221 c -13.5873,-34.208 -26.4857,-53.248 -38.2273,-56.4293 -54.2484,-14.6978 -216.4602,-22.3342 -302.08568,-14.2212 -133.48885,12.6482 -131.64355,11.8389 -156.3763,68.585 -11.78301,27.0345 -20.02908,50.6967 -18.32458,52.5827 1.70449,1.886 33.44754,-2.0191 70.54012,-8.678 86.69607,-15.5636 333.83234,-13.9043 405.88174,2.7252 28.6373,6.6096 53.6497,10.9029 55.5832,9.5405 1.9335,-1.3623 -5.7125,-25.7096 -16.9912,-54.1049 z m -246.8632,-161.183 c 62.0474,0 129.487,2.9872 149.8656,6.6383 l 37.0521,6.6384 -14.2646,-32.6723 c -7.8455,-17.9697 -16.1376,-41.1963 -18.4268,-51.6146 -2.2893,-10.4184 -10.3968,-21.3348 -18.0167,-24.2588 -18.5728,-7.1271 -263.30563,-6.8273 -281.99736,0.3453 -8.11504,3.1141 -14.75462,12.5774 -14.75462,21.0296 0,8.4523 -5.85763,29.387 -13.01695,46.5217 -7.15932,17.1347 -13.01695,33.278 -13.01695,35.8742 0,2.5961 16.59661,1.7453 36.88135,-1.8907 20.28475,-3.6361 87.64746,-6.6111 149.69493,-6.6111 z m 22.2654,-221.5935 c 13.7152,-7.3401 16.7854,-18.4512 16.7854,-60.74572 v -51.76247 h 43.9604 c 57.51,0 77.5312,-11.20475 77.5312,-43.38983 0,-32.18507 -20.0212,-43.38983 -77.5312,-43.38983 h -43.9604 v -50.3322 c 0,-56.28724 -9.4759,-71.15932 -45.3402,-71.15932 -29.08705,0 -41.43942,24.43161 -41.43942,81.9626 v 37.4429 l -52.75739,3.81612 c -53.12381,3.84263 -68.3295,13.42013 -68.60125,43.20937 -0.25068,27.47928 24.87622,41.84019 73.20667,41.84019 h 46.06594 l 3.81613,52.75739 c 4.69394,64.8931 25.16892,82.8147 68.26412,59.7508 z"
+     id="path24"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bl.svg b/client/public/images/pieces/Ball/bl.svg
new file mode 100644 (file)
index 0000000..965d8de
--- /dev/null
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="bl.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <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="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g8">
+    <path
+       style="color:black;"
+       d="m1060 1261q172 3 282 17t198 33q55-54 122-103t94-84q48-65 48-162 0-89-43-149-77-113-235-113-92 0-192 40-91 36-132 78-85 82-124 216-15 46-16 117t-2 110z"
+       display="block"
+       id="path2" />
+    <path
+       style="color:black;"
+       d="m988 1260q0-40-2-110t-15-118q-41-134-124-216-43-42-132-78-102-40-193-40-158 0-234 113-43 60-43 150 0 98 48 161 25 36 96 89t120 98q87-19 196-33t283-16z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1024 1009q7-28 12-39 10-39 23-66 6-17 17-39t25-52q8-17 17-41t18-49q8-20 8-43 0-49-35-83t-85-35q-119 0-119 119 0 23 8 43 22 65 34 90 13 29 24 51t19 40q13 33 22 66 2 6 12 38z"
+       display="block"
+       id="path6" />
+  </g>
+  <g
+     fill-rule="nonzero"
+     id="g16">
+    <path
+       style="color:black;"
+       d="m1133 865q0 29 6 82t21 84q37 81 106 150 20 20 86 54 65 32 139 32 56 0 111-19t84-60q25-34 25-110 0-60-49-112-32-33-69-66t-71-79q-58 20-161 31t-228 13zm-73-78q172-3 282-17t198-33q55 54 122 103t94 84q48 65 48 162 0 89-43 149-77 113-235 113-92 0-192-40-91-36-132-78-85-82-124-216-15-46-16-117t-2-110zm458-173q-184 51-490 51-308 0-496-52l15-101q189 49 481 49 291 0 474-48l16 101zm26-299l-30 118q-195 45-490 45-292 0-488-45l-32-119q190 58 521 58 159 0 295-16t224-41zm-1081 207l-33 187q-1 0-3 4-5 7-28 18t-55 40q-44 37-68 60t-45 50q-61 84-68 203-10 115 93 229 104 114 281 107 66-4 155-32 29-12 59-23t61-24q16-8 28-16-5 21-5 42 0 78 55 133t134 56q78 0 133-55t55-133q0-16-4-42 14 9 27 15 46 20 121 47 86 29 155 33 177 8 280-107 101-114 94-229-8-119-69-203-20-27-45-50t-67-60q-33-28-56-39t-27-19q-1-2-2-3t-1-2l-32-188 66-247q-50-45-224-74t-402-29q-232 0-408 30t-221 77l66 244zm525 266q0 40-2 110t-15 118q-41 134-124 216-43 42-132 78-102 40-193 40-158 0-234-113-43-60-43-150 0-98 48-161 25-36 96-89t120-98q87 19 196 33t283 16zm36 251q7 28 12 39 10 39 23 66 6 17 17 39t25 52q8 17 17 41t18 49q8 20 8 43 0 49-35 83t-85 35q-119 0-119-119 0-23 8-43 22-65 34-90 13-29 24-51t19-40q13-33 22-66 2-6 12-38zm35 520h-71v131h-83q-34 0-34 33v1q0 33 34 33h83v85q0 35 36 35 35 0 35-35v-85h86q33 0 33-33v-1q0-33-33-33l-85-1-1-130zm-147-694q-125-2-228-13t-161-31q-30 37-69 74t-70 71q-50 51-50 112 0 75 25 110 27 40 83 59t113 20q72 0 138-32 65-34 86-54 68-69 106-150 13-30 19-83t8-83zm112 345q-2 10-5 17-6 20-10 29-3 7-8 17t-10 23q-3 7-7 18t-8 22q-3 9-3 19 0 53 51 53 53 0 53-52 0-13-4-19-14-38-15-41-15-30-19-39-7-16-9-29-3-6-4-10t-2-8z"
+       transform="translate(0,2048) scale(1,-1)"
+       display="block"
+       fill="#000"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m1518 1434q-184-51-490-51-308 0-496 52l15 101q189-49 481-49 291 0 474 48l16-101z"
+       display="block"
+       fill="#fff"
+       id="path12" />
+    <path
+       style="color:black;"
+       d="m1544 1733-30-118q-195-45-490-45-292 0-488 45l-32 119q190-58 521-58 159 0 295 16t224 41z"
+       display="block"
+       fill="#fff"
+       id="path14" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 439.32682,1131.2116 c -98.82271,-105.3974 -111.7667,-134.02476 -95.73625,-211.73358 7.73972,-37.51884 17.18343,-55.62427 40.09616,-76.87211 67.97136,-63.0324 207.47751,-72.60657 311.53302,-21.38021 121.28402,59.70793 191.91453,166.13911 208.99297,314.9258 l 4.60567,40.1244 -97.31089,5.9429 c -92.49989,5.6491 -247.34705,24.8888 -275.24004,34.1985 -8.35119,2.7874 -42.95058,-27.6237 -96.94064,-85.2057 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 1005.1044,774.15188 c -10.55563,-23.42963 -21.23712,-56.85097 -23.73661,-74.26963 -3.84815,-26.81744 -1.24252,-33.83383 17.00471,-45.78988 16.4602,-10.78511 26.8921,-12.08824 44.1731,-5.518 34.2561,13.02416 36.1042,40.76668 7.2254,108.46198 l -25.4744,59.71487 z"
+     id="path28"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 1460.5017,1207.9452 c -28.6373,-6.3435 -113.6885,-16.2631 -189.0027,-22.0435 l -136.9349,-10.5097 5.7244,-52.6994 c 14.2209,-130.91879 92.9106,-244.32988 209.2242,-301.54301 54.6546,-26.88388 64.581,-28.84612 145.5674,-28.77556 72.7791,0.0634 92.7333,3.1768 122.7029,19.1449 53.6661,28.5939 79.094,63.73513 85.9762,118.81872 9.1819,73.48905 -5.0423,102.20955 -99.2517,200.40135 -45.793,47.7288 -85.2126,87.2207 -87.599,87.7597 -2.3865,0.5391 -27.7695,-4.21 -56.4068,-10.5535 z"
+     id="path30"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 785.92018,1863.2971 c -201.24404,-16.6257 -379.79137,-63.1895 -379.79137,-99.0467 0,-6.9033 13.8276,-63.5869 30.72799,-125.9637 l 30.72797,-113.4124 -17.76195,-97.271 c -9.76907,-53.4991 -21.72672,-98.6003 -26.57257,-100.2249 -20.82867,-6.9831 -112.32734,-81.8827 -154.49038,-126.4639 -54.61477,-57.7471 -83.98352,-118.2082 -96.85629,-199.397 -12.45395,-78.54728 -0.40692,-136.18907 42.26009,-202.20323 112.11625,-173.46565 287.8935,-210.56482 532.27438,-112.34072 l 91.49115,36.77308 4.41236,-54.96859 c 3.31286,-41.27141 10.45025,-63.68128 28.64329,-89.93385 62.04763,-89.53476 185.73005,-108.4543 267.63655,-40.94002 43.9988,36.2675 65.8803,82.91028 65.8803,140.431 v 47.27066 l 70.4895,-29.7287 c 196.4792,-82.86444 340.4643,-84.76224 456.771,-6.0205 78.4784,53.13115 148.9638,171.8734 149.4148,251.70945 0.762,134.87732 -74.3963,258.28002 -217.7037,357.44772 -43.889,30.3709 -47.418,35.5365 -57.3235,83.9086 -25.0377,122.2687 -24.0831,148.4142 9.9696,273.0685 36.8902,135.0416 39.6815,127.1799 -55.6045,156.6107 -166.211,51.3374 -501.3376,73.2706 -774.59472,50.6955 z M 649.11186,1706.8698 c 195.25251,-35.9892 601.19994,-30.9348 799.35874,9.9526 44.8001,9.244 85.9001,16.8585 91.3333,16.9212 13.3744,0.1545 -12.0864,-104.8009 -28.6791,-118.2217 -6.7055,-5.4236 -55.9845,-17.1364 -109.5091,-26.0286 -139.1908,-23.1239 -606.26613,-23.5441 -750.44941,-0.6751 -53.75822,8.5266 -102.76239,17.4294 -108.89818,19.7839 -9.04089,3.4693 -40.68167,97.7781 -40.68167,121.2561 0,3.3929 12.69153,3.3875 28.20339,-0.01 15.51186,-3.3996 69.20678,-13.7388 119.32203,-22.9762 z m 44.12555,-194.4725 c 204.53804,-29.7929 538.21829,-25.2765 730.84309,9.892 42.0159,7.671 77.9526,12.3872 79.8594,10.4803 1.9069,-1.9069 6.9393,-25.6087 11.183,-52.6708 l 7.7159,-49.2038 -57.2024,-12.8975 c -122.8995,-27.7101 -215.9846,-35.1662 -439.033,-35.1662 -223.92949,0 -316.05364,7.4341 -440.82011,35.5727 l -58.98959,13.3039 5.48176,40.4309 c 9.44606,69.6694 9.81098,70.2025 41.97347,61.322 15.73305,-4.3441 69.27787,-13.8227 118.98848,-21.0635 z m 891.91639,-236.8458 c 26.899,-22.97 73.0853,-60.1206 102.6362,-82.5568 89.4999,-67.9515 116.4813,-122.1203 116.7182,-234.32671 0.177,-83.88867 -25.8732,-144.05703 -84.8445,-195.96564 -95.7999,-84.32645 -264.6372,-86.24052 -433.7158,-4.91695 -137.3485,66.06195 -217.6108,209.20757 -226.6018,404.1382 l -4.6404,100.6084 116.1183,6.0859 c 136.4965,7.154 289.4128,27.3349 362.262,47.8091 1.7384,0.4885 25.1689,-17.9054 52.0678,-40.8755 z m -927.36397,11.69 c 45.34237,-7.1901 138.08814,-15.6866 206.1017,-18.8812 l 123.66101,-5.8083 v -87.9477 c 0,-130.6831 -28.09478,-218.54319 -102.53655,-320.65979 C 820.48276,765.4201 664.92476,697.09289 527.62034,696.96224 c -126.31097,-0.12018 -203.8673,40.92543 -256.24146,135.61222 -23.62437,42.71032 -25.67384,53.22802 -25.12588,128.94418 0.89364,123.48236 23.35594,161.71286 155.76012,265.10156 38.99403,30.4488 76.24398,61.8026 82.77767,69.6752 12.94977,15.6036 19.74715,15.2478 172.99904,-9.0539 z M 1096.4427,831.34915 c 65.1512,-143.28338 63.2234,-208.98378 -7.3955,-252.04287 -34.0369,-20.75359 -100.55873,-22.39132 -137.3211,-3.38075 -28.51738,14.74691 -50.95322,57.71487 -50.95322,97.58297 0,31.47804 23.808,100.95947 68.93487,201.17999 19.3604,42.99677 35.20075,81.82146 35.20075,86.2771 0,4.45563 4.4566,19.09436 9.9036,32.53049 l 9.9036,24.42932 15.1476,-47.72879 c 8.3312,-26.25085 33.7919,-88.7322 56.5794,-138.84746 z"
+     id="path32"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="M 994.4412,421.31525 991.89153,358.4 935.48475,354.06102 c -48.90829,-3.76218 -56.75086,-6.74717 -58.99505,-22.45428 -3.75804,-26.30261 14.26853,-36.90089 67.93608,-39.94136 l 47.46575,-2.68911 2.5634,-53.46 c 2.75393,-57.43339 14.48147,-71.43611 45.79407,-54.67813 13.6245,7.2916 16.7273,18.47695 16.7273,60.30055 v 51.34838 l 54.2373,2.58359 c 53.9042,2.56771 54.2372,2.74345 54.2372,28.61748 0,25.87402 -0.333,26.04976 -54.2372,28.61747 l -54.2373,2.58359 v 64.67065 64.67066 h -29.9927 -29.99274 z"
+     id="path34"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bo.svg b/client/public/images/pieces/Ball/bo.svg
new file mode 100644 (file)
index 0000000..a3e425a
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="bo.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <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="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <path
+     style="color:black;"
+     d="m490 683q4 9 13 27 17 42 17 50-2 28-29 28-20 0-47-57-4-8-12-14-27-28 8-47 32-19 50 13zm590 371q70 92 69 205-4 33-38 33-46 0-36-34 3-55-11-91-23-57-51-85-15-30 18-44 32-15 49 16zm-261 488q-5 36 2 78-60-12-113-56-32-17-15-47 17-31 47-10 21 11 38 20t41 15zm937-1268q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q4-23 3-47t0-46q97-33 183-82t126-106q48-66 89-156t75-219q34-133 35-266t1-259q0-63-3-117t0-55h141zm-677 1423q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm-675-836q29 20 6 48-24 23-53 4-61-40-65-105 1-33 39-31 36 3 35 37 8 32 38 47zm252 498q22 11 22 11 30 12 19 44-12 30-46 20-118-43-163-158-7-33 24-45 31-10 42 22 8 17 12 22 11-9 29-12 61-10 71 54 3 22-10 42z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g16">
+    <path
+       style="color:black;"
+       d="m490 1365q4-9 13-27 17-42 17-50-2-28-29-28-20 0-47 57-4 8-12 14-27 28 8 47 32 19 50-13z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1080 994q70-92 69-205-4-33-38-33-46 0-36 34 3 55-11 91-23 57-51 85-15 30 18 44 32 15 49-16z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m819 506q-5-36 2-78-60 12-113 56-32 17-15 47 17 31 47 10 21-11 38-20t41-15z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q4 23 3 47t0 46q97 33 183 82t126 106q48 66 89 156t75 219q34 133 35 266t1 259q0 63-3 117t0 55h141z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m404 1187q29-20 6-48-24-23-53-4-61 40-65 105 1 33 39 31 36-3 35-37 8-32 38-47z"
+       display="block"
+       id="path12" />
+    <path
+       style="color:black;"
+       d="m656 689q22-11 22-11 30-12 19-44-12-30-46-20-118 43-163 158-7 33 24 45 31 10 42-22 8-17 12-22 11 9 29 12 61 10 71-54 3-22-10-42z"
+       display="block"
+       id="path14" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 646.21921,1832.2079 c -10.00828,-10.0082 -6.30707,-75.2883 7.31789,-129.0694 27.57329,-108.8385 73.24924,-181.1348 197.493,-312.5933 128.44638,-135.9053 160.6095,-189.813 169.0975,-283.4197 l 4.725,-52.1083 -33.83647,22.2525 c -18.61006,12.2389 -63.1246,34.6632 -98.92121,49.8319 -77.93743,33.0257 -143.03789,73.5851 -195.02734,121.5072 -36.95402,34.0631 -55.25152,59.8891 -117.30029,165.5634 -43.42063,73.9489 -89.96943,87.6211 -142.19631,41.7652 -26.00964,-22.8367 -34.35014,-25.5487 -63.99469,-20.8083 -67.1276,10.7341 -154.55105,-60.6648 -180.25316,-147.2132 -33.0723,-111.3665 -11.69934,-184.2653 99.51191,-339.41421 86.82291,-121.12518 111.75745,-175.12012 121.88812,-263.94475 8.87757,-77.83762 21.35225,-103.80076 88.01133,-183.17507 l 32.96696,-39.25542 -17.81128,-56.20221 C 507.24622,372.33801 498.11422,313.52758 495.19655,259.7764 l -4.88234,-89.94563 20.82256,6.45933 c 69.74805,21.63642 181.04741,92.41254 256.8937,163.36069 l 54.17301,50.67454 20.73439,-46.33555 c 24.62032,-55.01949 87.52909,-128.77622 109.83614,-128.77622 16.95035,0 88.96959,74.96611 108.73049,113.17959 10.4458,20.19979 20.4378,24.51428 78.4435,33.87162 281.7725,45.45478 487.1035,222.21278 620.3091,533.98952 78.1472,182.90861 102.0903,333.07871 109.6803,687.90841 l 5.4296,253.8305 h -611.6812 c -336.42473,0 -614.28467,-2.6034 -617.46659,-5.7853 z M 1762.8767,1692.6373 c 13.654,-206.1902 2.6158,-460.2011 -25.2131,-580.1967 C 1703.1619,963.67214 1649.8798,831.23499 1582.828,727.58348 1506.5698,609.70041 1422.9542,537.98321 1289.9234,476.35885 1224.8518,446.21546 1110.396,410.5622 1102.8677,418.0905 c -1.6178,1.61781 -0.2907,25.49356 2.9486,53.05722 4.6832,39.84656 9.4128,51.03695 23.0817,54.61142 34.386,8.99216 175.7428,81.92122 215.8462,111.35983 97.5639,71.61851 192.5346,263.62226 246.305,497.95903 11.9645,52.1423 15.7265,122.4629 18.9182,353.6271 l 3.984,288.5424 h 71.6612 71.6612 z M 507.37237,1334.9712 c 20.55826,-51.706 15.68732,-78.4017 -14.30534,-78.4017 -16.11508,0 -78.26025,81.3404 -78.26025,102.4331 0,14.353 27.61574,27.8896 52.04043,25.5092 17.46106,-1.7019 25.32851,-11.3195 40.52516,-49.5406 z M 360.47983,1263.078 c 4.69917,-5.9661 10.98909,-21.1073 13.97759,-33.647 2.98851,-12.5399 15.24222,-29.2265 27.23049,-37.0815 37.59148,-24.6308 23.39389,-65.9495 -22.66105,-65.9495 -48.06383,0 -106.80373,90.7585 -85.04876,131.408 9.9471,18.5863 53.30676,22.0223 66.50173,5.27 z m 719.12927,-262.6575 c 49.0435,-49.04358 91.0188,-201.77738 64.301,-233.97025 -12.9227,-15.57092 -57.148,-17.61614 -66.1449,-3.05888 -3.4481,5.57915 -7.1601,30.25614 -8.2488,54.83776 -1.8989,42.86996 -35.3883,126.25508 -55.7649,138.84855 -15.31299,9.46392 -9.6222,37.62295 10.4438,51.67772 25.5672,17.9079 29.8089,17.2699 55.4138,-8.3349 z M 554.32803,802.96295 c 7.59653,-16.67257 14.31795,-19.19914 43.63712,-16.40311 47.48399,4.52833 68.50265,-15.24546 68.50265,-64.44545 0,-29.49959 3.56342,-38.25207 17.35593,-42.62964 21.36617,-6.78136 23.78917,-48.94253 3.76768,-65.5589 -11.14905,-9.25288 -19.32737,-9.24006 -45.55933,0.0712 -94.58155,33.57321 -185.04038,152.37994 -149.04466,195.75213 16.50526,19.88762 50.92201,16.07993 61.34061,-6.78641 z m 220.42209,-272.8114 47.92107,-23.5027 v -42.16684 c 0,-39.72789 -1.12936,-41.81846 -19.52543,-36.1437 -51.63915,15.92948 -119.32203,61.18842 -119.32203,79.78958 0,19.88352 17.17128,45.52635 30.48595,45.52635 6.88566,0 34.08385,-10.57621 60.44044,-23.50269 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bs.svg b/client/public/images/pieces/Ball/bs.svg
new file mode 100644 (file)
index 0000000..fab7c21
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   viewBox="0 0 2048 2048"
+   version="1.1"
+   id="svg4"
+   sodipodi:docname="bs.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata10">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <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="namedview6"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg4" />
+  <path
+     style="color:black;"
+     d="m1024 205h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 469.31646,1788.1605 c -11.61476,-37.5927 -15.29959,-77.897 -14.88199,-162.7774 0.50066,-101.7611 2.9474,-119.1722 24.97416,-177.716 13.43051,-35.6963 39.62644,-88.9815 58.21317,-118.4115 48.85236,-77.3523 148.25891,-168.3848 222.66932,-203.9117 33.7718,-16.1243 61.62304,-31.3576 61.89166,-33.8519 0.26858,-2.4942 -13.43621,-12.0339 -30.45518,-21.1992 -41.35934,-22.2735 -79.80482,-67.4541 -105.89865,-124.45051 -18.71228,-40.87297 -20.95348,-55.85031 -17.58997,-117.54853 4.37581,-80.2672 16.78508,-109.89694 70.55808,-168.47227 36.96271,-40.26374 107.49168,-79.8968 142.4504,-80.04858 25.73651,-0.11175 24.84417,-4.12898 -9.94513,-44.77247 -70.84573,-82.76729 -61.74879,-196.19826 21.75579,-271.27605 52.32789,-47.04727 106.0704,-61.96735 172.15668,-47.79438 149.9893,32.16696 208.6663,224.02326 101.0632,330.44722 -25.9659,25.68142 -25.5135,26.31205 29.5457,41.18098 116.7417,31.52649 204.1497,164.44684 187.5896,285.2654 -10.5135,76.70514 -69.3478,167.43729 -128.3611,197.95429 -13.4842,6.9729 -24.5166,15.7046 -24.5166,19.4038 0,3.6993 18.5491,15.7065 41.2203,26.6826 150.1855,72.7117 269.4605,218.1014 310.1069,378.003 17.6521,69.4431 16.2055,218.7233 -2.7785,286.7191 l -14.537,52.0678 -539.8969,2.2351 -539.89692,2.2351 z"
+     id="path12"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bt.svg b/client/public/images/pieces/Ball/bt.svg
new file mode 100644 (file)
index 0000000..311d5fd
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg12"
+   sodipodi:docname="bt.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata18">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs16" />
+  <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="namedview14"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg12" />
+  <path
+     style="color:black;"
+     d="m1588 793q-83 30-233 49t-333 20q-178 0-326-18t-233-49l50-91q84 25 218 36t293 11q159 0 294-11t219-37l51 90zm226 668q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97q0-57-40-96t-96-40zm-1578 0q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97q0-57-40-96t-97-40zm1208 110q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-840 0q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm1036-1288q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-96 32l-30 118q-195 45-490 45-292 0-488-45l-32-119q190 58 521 58 159 0 295-16t224-41zm-26 299q-184 51-490 51-308 0-496-52l15-101q189 49 481 49 291 0 474-48l16 101zm-494 1007q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g10">
+    <path
+       style="color:black;"
+       d="m1588 1255q-83-30-233-49t-333-20q-178 0-326 18t-233 49l50 91q84-25 218-36t293-11 294 11 219 37l51-90z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1544 1733-30-118q-195-45-490-45-292 0-488 45l-32 119q190-58 521-58 159 0 295 16t224 41z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1518 1434q-184-51-490-51-308 0-496 52l15 101q189-49 481-49 291 0 474 48l16-101z"
+       display="block"
+       id="path8" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 822.67119,1855.297 c -180.52333,-14.9818 -350.15015,-51.8342 -389.59443,-84.6417 l -18.15803,-15.1028 31.01025,-115.8962 31.01024,-115.8963 -13.80948,-81.0148 c -11.60124,-68.0599 -20.88223,-93.2389 -58.03956,-157.4597 l -44.23006,-76.4448 -42.23213,-307.69057 c -43.50945,-316.99676 -43.61493,-321.25423 -7.9568,-321.16288 7.15932,0.0182 28.26779,26.31787 46.90771,58.44338 18.63992,32.12553 79.16874,134.5592 134.50847,227.63039 l 100.61771,169.22038 5.41801,-125.83055 c 2.97989,-69.20678 5.9087,-192.70509 6.50847,-274.44068 L 605.72203,486.4 l 27.66102,-5.5322 c 15.21356,-3.04272 30.25849,-2.55458 33.43318,1.08474 3.17469,3.63932 49.71187,123.76949 103.41596,266.95593 53.7041,143.18645 100.86815,263.77643 104.809,267.97783 3.94087,4.2013 9.93712,-7.514 13.325,-26.03394 3.3879,-18.51999 28.21517,-150.82524 55.17173,-294.01168 l 49.01192,-260.33899 31.15676,-2.63035 c 26.4724,-2.23489 31.8408,0.37454 35.7061,17.35593 2.5022,10.99246 27.0071,141.04392 54.4553,289.00324 27.4483,147.95932 52.5036,272.01819 55.6783,275.68649 3.1748,3.6682 51.8549,-116.41318 108.178,-266.84751 63.0581,-168.42281 106.7926,-273.51695 113.8232,-273.51695 6.2797,0 21.4345,3.80843 33.6774,8.46318 l 22.2598,8.46318 v 269.23174 c 0,148.07745 2.9289,269.13726 6.5085,269.02176 3.5797,-0.1155 67.0373,-102.99897 141.017,-228.6299 127.7343,-216.91613 135.4918,-227.98 154.0339,-219.6852 10.739,4.80408 19.5254,12.9122 19.5254,18.01806 0,5.10585 -18.0755,144.0858 -40.1677,308.84434 l -40.1678,299.561 -43.652,73.7627 c -36.239,61.2361 -46.243,87.763 -58.9084,156.2034 l -15.2562,82.4407 29.6524,109.6894 c 16.3087,60.3293 29.6522,115.8765 29.6522,123.4382 0,29.9564 -117.0414,66.1083 -286.0604,88.3589 -122.6973,16.1525 -397.80461,22.7863 -520.99041,12.563 z M 649.11186,1706.8698 c 195.25251,-35.9892 601.19994,-30.9348 799.35874,9.9526 44.8001,9.244 85.9001,16.8585 91.3333,16.9212 13.3744,0.1545 -12.0864,-104.8009 -28.6791,-118.2217 -6.7055,-5.4236 -55.9845,-17.1364 -109.5091,-26.0286 -139.1908,-23.1239 -606.26613,-23.5441 -750.44941,-0.6751 -53.75822,8.5266 -102.76239,17.4294 -108.89818,19.7839 -9.04089,3.4693 -40.68167,97.7781 -40.68167,121.2561 0,3.3929 12.69153,3.3875 28.20339,-0.01 15.51186,-3.3996 69.20678,-13.7388 119.32203,-22.9762 z m 47.72882,-194.5141 c 197.08117,-29.8042 534.85912,-25.1903 727.23982,9.9336 42.0159,7.671 77.9526,12.3872 79.8594,10.4803 1.9069,-1.9069 6.9393,-25.6087 11.183,-52.6708 l 7.7159,-49.2038 -57.2024,-12.8975 c -122.8995,-27.7101 -215.9846,-35.1662 -439.033,-35.1662 -223.92949,0 -316.05364,7.4341 -440.82011,35.5727 l -58.98959,13.3039 5.48176,40.4309 c 9.50433,70.0991 9.28518,69.8049 45.51823,61.0961 17.74703,-4.2657 71.31817,-13.6613 119.04699,-20.8792 z m 870.30072,-211.6338 28.2052,-51.3053 -76.1004,-17.4843 c -277.0485,-63.6525 -699.23196,-65.8529 -978.79072,-5.1013 -86.4101,18.778 -86.24551,18.5751 -58.35057,71.9386 21.90243,41.8997 25.91682,45.2546 49.85441,41.6645 14.31865,-2.1475 70.94237,-10.7646 125.83051,-19.1491 77.63183,-11.8589 157.61778,-15.3633 360.13557,-15.7787 258.1251,-0.5294 378.3091,7.8883 470.0626,32.9238 23.0656,6.2936 43.9649,11.9276 46.4429,12.52 2.4779,0.5927 17.1977,-22.0104 32.7105,-50.2282 z"
+     id="path20"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 545.17481,456.51841 c -98.2783,-50.63299 -95.72312,-184.28376 4.45029,-232.77688 53.74389,-26.01697 101.1103,-17.62428 144.30314,25.56856 57.31547,57.31547 52.86179,142.17807 -10.10451,192.53604 -43.50368,34.79254 -90.03749,39.71689 -138.64892,14.67228 z"
+     id="path22"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 161.78419,558.79732 c -39.19303,-27.20368 -64.140205,-85.54505 -55.73591,-130.3438 6.65537,-35.47617 39.95853,-78.24942 75.05615,-96.39911 105.38182,-54.49505 226.34374,65.15877 173.59618,171.71891 -25.03664,50.57877 -54.84905,70.06224 -113.05885,73.88795 -40.47781,2.66031 -53.16476,-0.33662 -79.85757,-18.86395 z"
+     id="path24"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 974.10537,411.75119 c -35.5659,-16.127 -71.4059,-60.29067 -78.16468,-96.31807 -7.95608,-42.40956 2.74678,-79.88455 32.48988,-113.76007 51.56311,-58.72714 134.43053,-56.96409 191.46093,4.07344 31.5899,33.8095 37.1663,51.75721 32.6004,104.9247 -6.8165,79.37485 -104.3602,134.64649 -178.38653,101.08 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 1386.6068,456.02712 c -98.4624,-49.90758 -97.2074,-181.27547 2.2046,-230.76986 51.7422,-25.76096 98.9418,-19.8734 141.7087,17.67638 73.6587,64.67324 55.9853,175.00971 -34.6245,216.16261 -46.123,20.94802 -62.8312,20.47881 -109.2888,-3.06913 z"
+     id="path28"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 1744.6258,562.37908 c -81.8609,-49.9112 -83.457,-160.69556 -3.1874,-221.24303 32.4941,-24.5103 102.7223,-27.05411 137.8545,-4.99337 46.2129,29.01875 64.3204,66.10175 60.5998,124.10457 -3.4319,53.50156 -22.4243,83.05357 -68.9262,107.24846 -33.8091,17.59089 -93.0311,15.19248 -126.3407,-5.11663 z"
+     id="path30"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bu.svg b/client/public/images/pieces/Ball/bu.svg
new file mode 100644 (file)
index 0000000..bce3eed
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg16"
+   sodipodi:docname="bu.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata22">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs20" />
+  <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="namedview18"
+     showgrid="false"
+     inkscape:zoom="0.23046875"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg16" />
+  <path
+     style="color:black;"
+     d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm-597-1246v-102h920v102h-920zm460 1092h-512v-46l73-55h879l71 55v46h-511zm0-169h-350l60-47v-57h580v57l60 47h-350zm0-546h-290v-46l-60-58h700l-60 58v46h-290zm0-172h-414l-46-43v-58h920v58l-46 43h-414z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g14">
+    <path
+       style="color:black;"
+       d="m564 1588v102h920v-102h-920z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1024 496h-512v46l73 55h879l71-55v-46h-511z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1024 665h-350l60 47v57h580v-57l60-47h-350z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m1024 1211h-290v46l-60 58h700l-60-58v-46h-290z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m1024 1383h-414l-46 43v58h920v-58l-46-43h-414z"
+       display="block"
+       id="path12" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:4.33898306"
+     d="m 341.91186,1721.7085 v -117.1526 h 78.1017 78.10169 v -103.0926 -103.0925 l 84.64611,-84.5626 84.6461,-84.5626 L 666.28678,988.74598 665.1661,748.24639 555.60678,663.86727 446.04746,579.48815 V 393.44577 207.40339 h 134.50847 134.50848 v 67.25424 67.25423 h 86.77966 86.77966 v -67.25423 -67.25424 h 134.50847 134.5085 v 67.25424 67.25423 h 86.7796 86.7797 v -67.25423 -67.25424 h 136.678 136.6779 l -0.1349,185.49152 -0.135,185.49153 -112.6786,86.49485 -112.6786,86.49481 v 238.68741 238.68739 l 86.7797,87.1566 86.7796,87.1566 v 100.7459 100.7459 h 75.9322 75.9322 v 117.1526 117.1525 H 1023.1322 341.91186 Z M 1487.4034,1639.2678 V 1587.2 H 1025.3017 563.2 v 52.0678 52.0678 h 462.1017 462.1017 z m -0.1011,-183.322 -0.1011,-31.4577 -25.5942,-22.7796 -25.5941,-22.7797 H 1023.2109 610.409 l -23.60468,22.3243 -23.60432,22.3243 v 31.913 31.913 h 462.1017 462.1017 z m -112.7125,-141.414 c 0,-2.0081 -12.6915,-15.8382 -28.2034,-30.7335 -27.9077,-26.7984 -28.2033,-27.3286 -28.2033,-50.586 v -23.5038 H 1025.3017 732.42034 v 22.6776 c 0,22.3396 -0.46733,23.1481 -31.34903,54.2373 l -31.34904,31.5597 h 352.43383 c 193.8385,0 352.4337,-1.6431 352.4337,-3.6513 z m -57.3077,-573.88696 1.2687,-28.6569 29.1042,-23.4109 29.1043,-23.41094 -176.8135,-1.13343 c -97.2475,-0.62338 -256.14765,-0.62338 -353.11151,0 l -176.29792,1.13343 30.77174,23.86441 30.77175,23.86441 0.17022,29.31868 0.17026,29.31868 291.79656,-1.11529 291.7967,-1.1153 z m 184.223,-169.16694 33.6271,-26.267 v -25.71732 -25.71731 h -512 -512 v 25.58082 25.58082 l 35.50525,26.48697 35.50526,26.48698 442.86759,-0.0835 442.8677,-0.0835 z"
+     id="path24"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bw.svg b/client/public/images/pieces/Ball/bw.svg
new file mode 100644 (file)
index 0000000..6d4f960
--- /dev/null
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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 62 64"
+   xml:space="preserve"
+   sodipodi:docname="bw.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
+     id="defs28" /><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="namedview26"
+     showgrid="false"
+     inkscape:zoom="14.75"
+     inkscape:cx="32.220339"
+     inkscape:cy="32"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Layer_1" /><g
+     id="wildebeest__x5F_glyphs"
+     transform="matrix(0.8425369,0,0,0.89830508,4.8813559,3.5254237)"><path
+       d="m 25,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path2"
+       inkscape:connector-curvature="0" /><path
+       d="m 34,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path4"
+       inkscape:connector-curvature="0" /><path
+       d="M 11,36 V 24.7 c -0.1,0.2 -0.2,0.3 -0.4,0.5 -1.3,1.4 -3.1,2.3 -5,2.4 H 5 V 42.5 C 5,43.8 3.9,45 2.5,45 1.1,45 0,43.4 0,42 v 2.5 c 0,3.6 3,6.9 9,6.5 6.9,-0.5 7,-4.4 7,-6.4 C 12.9,43.2 11,39 11,36 Z"
+       id="path6"
+       inkscape:connector-curvature="0" /><path
+       d="M 11,12 C 11,8.1 14.1,5 18,5 H 28.8 C 26.6,2 22.9,0 17.5,0 10.6,0 5,5.6 5,12.5 V 19 h 6 z"
+       id="path8"
+       inkscape:connector-curvature="0" /><path
+       d="M 5.5,25.6 C 6.9,25.5 8.2,24.9 9.1,23.9 9.8,23 10.3,22 10.4,21 H 0.2 c 0.3,1.1 0.8,2.1 1.6,3 1.1,1.1 2.4,1.6 3.7,1.6 z"
+       id="path10"
+       inkscape:connector-curvature="0" /><path
+       d="m 51,12 v 7 h 6 V 12.5 C 57,5.6 51.4,0 44.5,0 39.1,0 35.5,2 33.2,5 H 44 c 3.9,0 7,3.1 7,7 z"
+       id="path12"
+       inkscape:connector-curvature="0" /><path
+       d="m 61.8,43 c -0.5,1.6 -2.3,2.9 -4,1.2 C 57.3,43.6 57,42.8 57,42 V 27.6 h -0.6 c -1.9,-0.1 -3.7,-1 -5,-2.4 C 51.3,25 51.1,24.9 51,24.7 V 36 c 0,3 -1.9,7.2 -5,8.6 0,2 0.1,5.9 7,6.4 6,0.4 9,-2.9 9,-6.5 V 43 Z"
+       id="path14"
+       inkscape:connector-curvature="0" /><path
+       d="m 52.9,23.8 c 0.9,1 2.2,1.7 3.6,1.7 1.3,0.1 2.6,-0.5 3.7,-1.6 0.8,-0.8 1.4,-1.9 1.6,-3 H 51.6 c 0.1,1.1 0.6,2.1 1.3,2.9 z"
+       id="path16"
+       inkscape:connector-curvature="0" /><path
+       d="M 49,36 V 21 h -6 c -2.2,0 -4,1.8 -4,4 V 52.6 L 37.4,57 h -13 L 23,53.6 V 25 c 0,-2.2 -1.8,-4 -4,-4 h -6 v 15 c 0,2.2 1.5,5.4 3.5,6.6 l 6.4,16.1 c 0.1,3 2.7,5.3 6.1,5.3 h 4 c 3.3,0 5.8,-2.2 5.9,-5.3 L 44.8,42.9 C 47.1,42.2 49,38.5 49,36 Z M 18,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z m 15,33 h -4 c -1.9,0 -3.8,-1 -4.1,-3 h 11.9 c -0.2,1.8 -1.7,3 -3.8,3 z M 44,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z"
+       id="path18"
+       inkscape:connector-curvature="0" /><path
+       d="m 43,19 h 6 V 12 C 49,9.2 46.8,7 44,7 H 18 c -2.8,0 -5,2.2 -5,5 v 7 h 6 c 3.3,0 6,2.7 6,6 v 20 h 1 c 2.1,0 3.9,1.1 5,2.7 1.1,-1.6 2.9,-2.7 5,-2.7 h 1 V 25 c 0,-3.3 2.7,-6 6,-6 z m -7,-1 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z m 0,-4 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z"
+       id="path20"
+       inkscape:connector-curvature="0" /></g><metadata
+     id="metadata23"><rdf:RDF><rdf:Description
+         about="https://iconscout.com/legal#licenses"
+         dc:title="wildebeest"
+         dc:description="wildebeest"
+         dc:publisher="Iconscout"
+         dc:date="2017-09-07"
+         dc:format="image/svg+xml"
+         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><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><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 13.491525,20.338983 0.0678,6.847458"
+     id="path19"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 48.187753,26.162712 0.01564,-5.688136"
+     id="path25"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 18.361946,43.58983 1.027885,-0.945762"
+     id="path27"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 43.638053,43.58983 42.101695,42.644068"
+     id="path29"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 29.146419,8.0169491 4.141717,-0.016949"
+     id="path31"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 24.867298,53.155092 -0.592722,-1.543213 -0.001,-13.050007 C 24.272475,24.222465 24.2981,25.110056 23.860117,24.242416 23.588471,23.704287 22.95384,23.043279 22.45206,22.775833 21.704131,22.377189 21.535948,22.359322 18.531519,22.359322 H 15.8 v 6.937205 c 0,7.710287 -0.0076,7.562258 0.454296,8.889152 0.501435,1.440583 1.344891,2.753735 2.167872,3.375092 0.240157,0.181321 0.38019,0.346543 0.435341,0.513651 l 0.0813,0.246348 -0.480734,0.45032 c -0.360366,0.337566 -0.461348,0.469707 -0.403304,0.527751 0.172807,0.172807 -0.05907,0.05965 -0.451264,-0.220206 -1.534243,-1.094813 -2.792258,-3.308081 -3.308513,-5.820778 -0.04595,-0.223652 -0.09525,-2.500176 -0.132515,-6.118874 -0.03264,-3.169491 -0.07528,-6.838136 -0.09477,-8.152542 -0.02413,-1.627526 -0.013,-2.389831 0.03487,-2.389831 0.04759,0 0.07039,-1.08961 0.07057,-3.372881 3.01e-4,-3.725439 0.03389,-4.152349 0.408062,-5.186423 0.334943,-0.925661 0.748533,-1.563658 1.483325,-2.2881535 0.845975,-0.8341211 1.458229,-1.1934301 2.620984,-1.5381585 0.365354,-0.1083183 0.865304,-0.1213238 5.402611,-0.1405417 l 5,-0.021178 v 0.2397694 0.2397694 h 2.101695 2.101695 V 8.2889663 8.0491191 l 4.830508,0.021441 c 4.807637,0.021339 4.832904,0.022174 5.336362,0.1762589 2.003853,0.6132865 3.455555,2.111906 4.115101,4.248096 l 0.188389,0.61017 0.0228,3.677966 c 0.0158,2.549403 8.47e-4,3.677966 -0.04874,3.677966 -0.04906,0 -0.07154,0.905201 -0.07154,2.881356 0,1.948169 0.02282,2.881356 0.07045,2.881356 0.04835,0 0.06309,1.70686 0.04696,5.440678 -0.02274,5.267391 -0.02806,5.459225 -0.166815,6.023003 -0.60213,2.446463 -1.832709,4.461596 -3.356453,5.496351 -0.388655,0.26393 -0.569269,0.305906 -0.390759,0.09082 0.04791,-0.05773 0.07514,-0.115541 0.06051,-0.128458 -0.01463,-0.01292 -0.31644,-0.200153 -0.670678,-0.416077 -0.354237,-0.215925 -0.652413,-0.398557 -0.662613,-0.40585 -0.08478,-0.06062 0.130034,-0.257541 0.447446,-0.410175 0.515893,-0.248079 1.433235,-1.186602 1.862796,-1.905809 0.426687,-0.714393 0.832807,-1.662729 1.054531,-2.462444 l 0.178568,-0.644068 0.01903,-7.271187 0.01902,-7.271186 h -2.676391 c -1.691994,0 -2.808534,0.02756 -3.035661,0.07492 -1.299614,0.271018 -2.376616,1.387144 -2.668856,2.76581 -0.07928,0.374007 -0.09503,2.510552 -0.09598,13.023676 L 37.698367,50.8 l -0.661048,1.948359 -0.661046,1.948358 -5.458126,7.94e-4 -5.458126,7.93e-4 -0.592722,-1.543213 z m 4.188372,-4.03788 c 0.425642,-0.425642 0.376391,-1.133108 -0.10122,-1.453975 -0.232209,-0.156002 -0.256625,-0.157859 -1.812385,-0.137803 l -1.577007,0.02033 -0.213909,0.21404 c -0.39611,0.396352 -0.33955,1.183981 0.104465,1.454741 0.188499,0.114947 0.362661,0.127347 1.791844,0.127575 l 1.583051,2.72e-4 0.225161,-0.225162 z m 7.551407,0.05072 c 0.483075,-0.40648 0.385213,-1.32968 -0.165335,-1.559714 -0.174614,-0.07296 -0.57845,-0.09635 -1.663216,-0.09635 -1.578472,0 -1.766953,0.03818 -1.981505,0.401387 -0.142924,0.241951 -0.15019,0.758923 -0.01436,1.021594 0.205792,0.397959 0.252995,0.407528 2.01027,0.407528 h 1.606832 z m -5.317156,-3.145408 c 0.338848,-0.461603 1.016621,-1.069251 1.535689,-1.376801 0.72215,-0.427878 1.381867,-0.606219 2.379354,-0.643212 l 0.862591,-0.03199 0.01939,-9.432718 0.01939,-9.432718 0.152471,-0.53844 c 0.526973,-1.860974 1.854887,-3.248954 3.610094,-3.773392 0.483102,-0.144346 0.646116,-0.152945 3.408428,-0.179785 l 2.901061,-0.02819 -0.01971,-3.638403 -0.0197,-3.638402 -0.209172,-0.584255 C 45.421746,11.305103 44.369254,10.297888 42.986441,9.9074701 42.566804,9.7889915 41.995452,9.7830508 31.020339,9.7830508 c -10.806814,0 -11.5529,0.00747 -11.966102,0.1197817 -1.216023,0.3305305 -2.199539,1.1369585 -2.747866,2.2530995 -0.470031,0.956765 -0.464601,0.902856 -0.490054,4.864407 l -0.02298,3.576271 h 2.530533 c 1.391793,0 2.784059,0.03179 3.093925,0.07064 2.004124,0.251296 3.646929,1.704191 4.292613,3.796384 l 0.156114,0.505854 0.01896,9.508474 0.01896,9.508475 0.693544,0.0012 c 1.413937,0.0024 2.470363,0.417126 3.467954,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.167748,-0.15156 0.303725,-0.336798 z"
+     id="path33"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 19.543394,29.460558 c -0.314382,-0.100737 -0.792209,-0.542603 -0.953415,-0.881661 -0.351674,-0.739659 -0.224415,-1.483645 0.352369,-2.060046 0.394395,-0.394132 0.758086,-0.531845 1.273725,-0.482299 0.876608,0.08423 1.557822,0.984879 1.460853,1.931427 -0.111582,1.089196 -1.142234,1.810221 -2.133532,1.492579 z"
+     id="path35"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 41.32493,29.390654 c -0.641139,-0.306689 -0.997845,-0.877086 -1.00572,-1.608212 -0.0059,-0.551804 0.183568,-0.9751 0.6011,-1.342626 0.513583,-0.452074 1.122318,-0.538687 1.713943,-0.243868 1.546485,0.770646 1.124603,3.189951 -0.579989,3.325983 -0.314523,0.0251 -0.455456,-2.64e-4 -0.729334,-0.131277 z"
+     id="path37"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="M 24.865072,53.155932 24.27143,51.613559 24.271769,38.833898 C 24.271972,31.285773 24.245921,25.804967 24.208096,25.445317 24.15764,24.965571 24.092359,24.731798 23.900368,24.34333 23.445834,23.423642 22.617144,22.72204 21.70378,22.483612 21.319075,22.383186 20.881212,22.3666 18.525904,22.36323 l -2.731663,-0.0039 0.02137,7.20339 0.02137,7.20339 0.180495,0.659032 c 0.4734,1.728506 1.403635,3.34181 2.360242,4.093364 0.268196,0.210707 0.425819,0.392362 0.478217,0.551131 0.07785,0.23589 0.07635,0.238652 -0.378512,0.697028 -0.256442,0.258422 -0.436428,0.492955 -0.4105,0.534906 0.09592,0.1552 -0.09785,0.06428 -0.48789,-0.228911 -1.470737,-1.105572 -2.685996,-3.175369 -3.216212,-5.477769 -0.137754,-0.598177 -0.146403,-0.86584 -0.198762,-6.150815 -0.03011,-3.038983 -0.07392,-6.722882 -0.09737,-8.186441 -0.03064,-1.912456 -0.02169,-2.661017 0.03179,-2.661017 0.05302,0 0.07441,-0.96355 0.07441,-3.351026 0,-1.980065 0.02938,-3.567994 0.07182,-3.881356 0.0948,-0.700089 0.444206,-1.713942 0.81527,-2.365648 0.562489,-0.987908 1.615981,-1.9547486 2.649167,-2.4312685 1.071624,-0.4942481 0.757103,-0.4696861 6.345103,-0.4955089 l 5.033899,-0.023262 V 8.288677 8.5288135 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 4.976342,0 5.115067,0.00845 6.072929,0.3697394 1.133115,0.4273964 2.273128,1.40118 2.923735,2.4974153 0.190649,0.321231 0.465198,0.92872 0.610109,1.349976 l 0.263475,0.76592 0.02119,3.711865 c 0.01477,2.586496 -6.1e-4,3.711864 -0.05079,3.711864 -0.09927,0 -0.100739,5.639038 -0.0015,5.738283 0.048,0.048 0.063,1.798617 0.04702,5.488135 -0.02114,4.880629 -0.03526,5.467044 -0.142497,5.915959 -0.601974,2.520035 -1.83244,4.525859 -3.454352,5.631058 -0.324497,0.221118 -0.484248,0.241322 -0.317269,0.04012 0.04792,-0.05773 0.07514,-0.114004 0.06051,-0.125045 -0.01463,-0.01104 -0.31644,-0.198838 -0.670678,-0.417328 -0.354237,-0.218489 -0.652413,-0.402657 -0.662613,-0.409262 -0.08706,-0.05637 0.131355,-0.257471 0.447446,-0.411982 0.463813,-0.226721 1.281552,-1.024025 1.695704,-1.653332 0.371493,-0.564485 0.829086,-1.515759 1.051677,-2.186293 0.390243,-1.175579 0.383038,-1.012531 0.383038,-8.668654 v -7.043358 h -2.674629 c -1.70137,0 -2.805362,0.02742 -3.033898,0.07536 -1.182093,0.247955 -2.169605,1.195355 -2.606797,2.500911 -0.119037,0.355474 -0.12646,0.97106 -0.159008,13.186441 l -0.03414,12.813559 -0.644068,1.880804 -0.644068,1.880805 -5.458779,5.42e-4 -5.458779,5.43e-4 -0.593641,-1.542373 z m 4.14554,-3.98527 c 0.508146,-0.427576 0.410097,-1.323368 -0.171444,-1.566352 -0.301108,-0.125811 -3.027675,-0.130568 -3.274421,-0.0057 -0.424218,0.214657 -0.59548,0.828718 -0.366002,1.312305 0.192217,0.40507 0.2904,0.425739 2.036731,0.428756 l 1.57107,0.0027 z m 7.605477,-0.01473 c 0.534716,-0.479157 0.313205,-1.485457 -0.354561,-1.610731 -0.127374,-0.02389 -0.877715,-0.03354 -1.667425,-0.02144 l -1.435836,0.022 -0.213904,0.21404 c -0.396103,0.396356 -0.33954,1.183984 0.104472,1.454741 0.188419,0.114899 0.36249,0.127347 1.783994,0.127575 l 1.575202,2.72e-4 0.208058,-0.186441 z m -5.335064,-3.121289 c 0.131086,-0.178573 0.400633,-0.477482 0.598995,-0.664241 1.011678,-0.9525 2.10527,-1.383961 3.50782,-1.383961 h 0.679717 l 0.01988,-9.474577 0.01988,-9.474576 0.155657,-0.508474 c 0.480117,-1.568373 1.435989,-2.744737 2.757368,-3.393414 0.99295,-0.487448 1.019577,-0.490715 4.254237,-0.522028 l 2.898305,-0.02806 v -3.475033 c 0,-3.95017 -0.0077,-4.020371 -0.554797,-5.072002 C 45.07089,10.986504 43.94992,10.112105 42.86446,9.8903472 42.614961,9.8393752 38.978724,9.8169491 30.96345,9.8169491 c -12.726879,0 -11.855989,-0.028943 -12.788228,0.4249989 -0.64266,0.312935 -1.517726,1.202643 -1.849146,1.880086 -0.488407,0.998334 -0.480471,0.922037 -0.509517,4.898305 l -0.02612,3.576271 h 2.576148 c 1.473783,0 2.801315,0.03132 3.102349,0.07319 1.969563,0.273941 3.535747,1.662003 4.239475,3.757321 l 0.15939,0.474576 0.01853,9.542373 0.01853,9.542373 0.69333,0.0012 c 1.413712,0.0024 2.470202,0.417177 3.467739,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.163744,-0.146106 0.294829,-0.32468 z"
+     id="path39"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04335,-0.220339 h 4.986743 4.986743 l -0.04269,0.220339 c -0.232307,1.199152 -1.116189,2.096397 -2.313193,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
+     id="path41"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 19.529332,29.456525 c -0.388514,-0.123715 -0.918287,-0.694794 -1.044982,-1.126457 -0.135012,-0.460004 -0.135309,-0.634102 -0.0018,-1.083523 0.126794,-0.426962 0.549453,-0.918859 0.944614,-1.099358 1.10635,-0.50535 2.382318,0.527304 2.249807,1.820792 -0.112351,1.096702 -1.140404,1.809268 -2.147594,1.488546 z"
+     id="path28"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 41.4417,29.464608 c -0.12249,-0.04148 -0.356375,-0.193071 -0.519746,-0.336875 -0.830178,-0.730752 -0.825155,-1.963033 0.011,-2.699048 0.510112,-0.449018 1.104191,-0.530288 1.701298,-0.232737 1.551687,0.773238 1.125605,3.211848 -0.579989,3.319471 -0.214421,0.01353 -0.490075,-0.0093 -0.612564,-0.05081 z"
+     id="path30"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 24.880657,53.223729 -0.572182,-1.474576 -0.03411,-13.254238 -0.03411,-13.254237 -0.152962,-0.450843 c -0.414948,-1.223022 -1.479741,-2.166476 -2.661495,-2.358206 -0.251982,-0.04088 -1.546671,-0.0715 -3.035728,-0.0718 l -2.596365,-5.12e-4 0.02193,7.20339 0.02193,7.20339 0.178371,0.651832 c 0.477104,1.743505 1.383217,3.297466 2.409402,4.132064 0.220639,0.179446 0.383294,0.376331 0.431451,0.522247 0.07674,0.232533 0.07402,0.237514 -0.379375,0.694412 -0.256443,0.258422 -0.436428,0.492955 -0.410501,0.534906 0.09408,0.152219 -0.09365,0.06647 -0.479796,-0.21917 -1.505019,-1.11328 -2.738185,-3.245706 -3.259448,-5.636334 -0.08511,-0.390334 -0.113685,-1.396637 -0.157914,-5.561313 -0.0297,-2.79661 -0.07614,-6.475935 -0.103205,-8.176278 -0.03659,-2.298664 -0.02926,-3.103858 0.02856,-3.139594 0.05678,-0.03509 0.07777,-0.942388 0.07777,-3.36119 0,-3.518015 0.03141,-4.002372 0.318627,-4.913363 0.314677,-0.998089 0.716849,-1.677929 1.439925,-2.4340838 0.747044,-0.7812176 1.597603,-1.3113598 2.592049,-1.6155893 0.492613,-0.1507043 0.53985,-0.1521909 5.530755,-0.174055 l 5.033898,-0.022052 V 8.288677 8.5288136 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 3.679858,0 4.704083,0.019178 5.101695,0.095524 2.239222,0.42996 3.981671,2.1383567 4.639205,4.5485437 0.12095,0.443341 0.128468,0.715531 0.114231,4.135593 -0.0084,2.01356 -0.03212,4.911865 -0.05275,6.440678 -0.02588,1.917763 -0.01495,2.822092 0.03524,2.916501 0.05058,0.09514 0.06619,1.789196 0.05122,5.559322 l -0.02153,5.422482 -0.209872,0.779661 c -0.625275,2.322853 -1.865617,4.293463 -3.300667,5.243975 -0.383614,0.254088 -0.560602,0.29 -0.384706,0.07806 0.04791,-0.05773 0.07514,-0.11383 0.06051,-0.124658 -0.01463,-0.01083 -0.31644,-0.196852 -0.670678,-0.413386 -0.354237,-0.216535 -0.652413,-0.400876 -0.662613,-0.409649 -0.06627,-0.05699 0.103367,-0.258403 0.281006,-0.333649 0.333065,-0.141082 0.995308,-0.671236 1.341954,-1.074291 0.948687,-1.103065 1.726992,-2.851277 1.885567,-4.235315 0.04136,-0.361024 0.06845,-3.298276 0.06878,-7.459899 l 5.56e-4,-6.864407 -2.593221,4.07e-4 c -1.426271,2.03e-4 -2.776271,0.03013 -3,0.06649 -0.5378,0.08738 -1.278339,0.459631 -1.679913,0.844448 -0.426032,0.408254 -0.828536,1.039993 -1.014485,1.592257 l -0.150023,0.445568 -0.01878,12.745763 -0.01878,12.745762 -0.659678,1.949153 -0.659678,1.949152 H 30.915582 25.45284 l -0.572183,-1.474576 z m 4.176258,-4.116827 c 0.28316,-0.300238 0.351448,-0.65617 0.198991,-1.037198 -0.199828,-0.499417 -0.276696,-0.52105 -1.93848,-0.54554 -1.606414,-0.02367 -1.840748,0.01675 -2.062963,0.355897 -0.176371,0.269174 -0.203228,0.719991 -0.06078,1.020182 0.193533,0.40784 0.329655,0.436465 2.089834,0.439476 l 1.551318,0.0027 0.222077,-0.235471 z m 7.47415,0.129661 c 0.346182,-0.242476 0.469962,-0.930659 0.238016,-1.323312 -0.223761,-0.378797 -0.406688,-0.412951 -2.08381,-0.389068 -1.402798,0.01998 -1.526507,0.03164 -1.664903,0.157013 -0.484449,0.438854 -0.4373,1.333331 0.08218,1.559034 0.340491,0.147937 3.216465,0.14486 3.428518,-0.0037 z m -5.386246,-3.039286 c 0.219147,-0.334461 0.89766,-1.011539 1.304892,-1.302135 0.872855,-0.622856 1.797089,-0.908701 2.938135,-0.908701 h 0.679724 l 0.01876,-9.508475 0.01876,-9.508474 0.224384,-0.644068 c 0.529212,-1.519035 1.40638,-2.558859 2.69087,-3.189847 0.992616,-0.487608 1.019351,-0.49089 4.254238,-0.522205 l 2.898305,-0.02806 -0.0013,-3.333336 c -7.46e-4,-1.845913 -0.03146,-3.541656 -0.06883,-3.800185 -0.216906,-1.500548 -1.355859,-2.902935 -2.796082,-3.442803 L 42.884746,9.8508475 31.427119,9.8317889 c -7.412733,-0.01233 -11.661069,0.00512 -12.033898,0.04943 -1.570077,0.1866001 -2.997951,1.5191011 -3.431966,3.2027331 -0.09267,0.359487 -0.115489,0.994354 -0.142707,3.970285 l -0.0324,3.542373 h 2.578291 c 2.668712,0 3.336394,0.04642 4.045729,0.281271 0.842199,0.27884 1.872893,1.045963 2.43329,1.811045 0.289587,0.395359 0.604922,1.014402 0.841303,1.651589 l 0.183034,0.493383 0.01853,9.576271 0.01853,9.576272 0.693335,0.0012 c 1.492866,0.0025 2.556358,0.443295 3.625403,1.502535 0.232977,0.230839 0.492299,0.520628 0.576271,0.643975 0.182471,0.268031 0.207686,0.272647 0.344954,0.06315 z"
+     id="path32"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04334,-0.220339 h 4.986742 4.986743 l -0.04268,0.220339 c -0.232308,1.199152 -1.11619,2.096397 -2.313194,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
+     id="path34"
+     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/by.svg b/client/public/images/pieces/Ball/by.svg
new file mode 100644 (file)
index 0000000..0632479
--- /dev/null
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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 62 64"
+   xml:space="preserve"
+   sodipodi:docname="by.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
+     id="defs28" /><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="namedview26"
+     showgrid="false"
+     inkscape:zoom="14.75"
+     inkscape:cx="32.355932"
+     inkscape:cy="32"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Layer_1" /><g
+     id="wildebeest__x5F_glyphs"
+     transform="matrix(0.8425369,0,0,0.89830508,4.8813559,3.5254237)"><path
+       d="m 25,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path2"
+       inkscape:connector-curvature="0" /><path
+       d="m 34,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path4"
+       inkscape:connector-curvature="0" /><path
+       d="M 11,36 V 24.7 c -0.1,0.2 -0.2,0.3 -0.4,0.5 -1.3,1.4 -3.1,2.3 -5,2.4 H 5 V 42.5 C 5,43.8 3.9,45 2.5,45 1.1,45 0,43.4 0,42 v 2.5 c 0,3.6 3,6.9 9,6.5 6.9,-0.5 7,-4.4 7,-6.4 C 12.9,43.2 11,39 11,36 Z"
+       id="path6"
+       inkscape:connector-curvature="0" /><path
+       d="M 11,12 C 11,8.1 14.1,5 18,5 H 28.8 C 26.6,2 22.9,0 17.5,0 10.6,0 5,5.6 5,12.5 V 19 h 6 z"
+       id="path8"
+       inkscape:connector-curvature="0" /><path
+       d="M 5.5,25.6 C 6.9,25.5 8.2,24.9 9.1,23.9 9.8,23 10.3,22 10.4,21 H 0.2 c 0.3,1.1 0.8,2.1 1.6,3 1.1,1.1 2.4,1.6 3.7,1.6 z"
+       id="path10"
+       inkscape:connector-curvature="0" /><path
+       d="m 51,12 v 7 h 6 V 12.5 C 57,5.6 51.4,0 44.5,0 39.1,0 35.5,2 33.2,5 H 44 c 3.9,0 7,3.1 7,7 z"
+       id="path12"
+       inkscape:connector-curvature="0" /><path
+       d="m 61.8,43 c -0.5,1.6 -2.3,2.9 -4,1.2 C 57.3,43.6 57,42.8 57,42 V 27.6 h -0.6 c -1.9,-0.1 -3.7,-1 -5,-2.4 C 51.3,25 51.1,24.9 51,24.7 V 36 c 0,3 -1.9,7.2 -5,8.6 0,2 0.1,5.9 7,6.4 6,0.4 9,-2.9 9,-6.5 V 43 Z"
+       id="path14"
+       inkscape:connector-curvature="0" /><path
+       d="m 52.9,23.8 c 0.9,1 2.2,1.7 3.6,1.7 1.3,0.1 2.6,-0.5 3.7,-1.6 0.8,-0.8 1.4,-1.9 1.6,-3 H 51.6 c 0.1,1.1 0.6,2.1 1.3,2.9 z"
+       id="path16"
+       inkscape:connector-curvature="0" /><path
+       d="M 49,36 V 21 h -6 c -2.2,0 -4,1.8 -4,4 V 52.6 L 37.4,57 h -13 L 23,53.6 V 25 c 0,-2.2 -1.8,-4 -4,-4 h -6 v 15 c 0,2.2 1.5,5.4 3.5,6.6 l 6.4,16.1 c 0.1,3 2.7,5.3 6.1,5.3 h 4 c 3.3,0 5.8,-2.2 5.9,-5.3 L 44.8,42.9 C 47.1,42.2 49,38.5 49,36 Z M 18,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z m 15,33 h -4 c -1.9,0 -3.8,-1 -4.1,-3 h 11.9 c -0.2,1.8 -1.7,3 -3.8,3 z M 44,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z"
+       id="path18"
+       inkscape:connector-curvature="0" /><path
+       d="m 43,19 h 6 V 12 C 49,9.2 46.8,7 44,7 H 18 c -2.8,0 -5,2.2 -5,5 v 7 h 6 c 3.3,0 6,2.7 6,6 v 20 h 1 c 2.1,0 3.9,1.1 5,2.7 1.1,-1.6 2.9,-2.7 5,-2.7 h 1 V 25 c 0,-3.3 2.7,-6 6,-6 z m -7,-1 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z m 0,-4 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z"
+       id="path20"
+       inkscape:connector-curvature="0" /></g><metadata
+     id="metadata23"><rdf:RDF><rdf:Description
+         about="https://iconscout.com/legal#licenses"
+         dc:title="wildebeest"
+         dc:description="wildebeest"
+         dc:publisher="Iconscout"
+         dc:date="2017-09-07"
+         dc:format="image/svg+xml"
+         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 13.491525,20.338983 0.0678,6.847458"
+     id="path19"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 48.187753,26.162712 0.01564,-5.688136"
+     id="path25"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 18.361946,43.58983 1.027885,-0.945762"
+     id="path27"
+     inkscape:connector-curvature="0" /><path
+     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 43.638053,43.58983 42.101695,42.644068"
+     id="path29"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="m 29.146419,8.0169491 4.141717,-0.016949"
+     id="path31"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 24.867298,53.155092 -0.592722,-1.543213 -0.001,-13.050007 C 24.272475,24.222465 24.2981,25.110056 23.860117,24.242416 23.588471,23.704287 22.95384,23.043279 22.45206,22.775833 21.704131,22.377189 21.535948,22.359322 18.531519,22.359322 H 15.8 v 6.937205 c 0,7.710287 -0.0076,7.562258 0.454296,8.889152 0.501435,1.440583 1.344891,2.753735 2.167872,3.375092 0.240157,0.181321 0.38019,0.346543 0.435341,0.513651 l 0.0813,0.246348 -0.480734,0.45032 c -0.360366,0.337566 -0.461348,0.469707 -0.403304,0.527751 0.172807,0.172807 -0.05907,0.05965 -0.451264,-0.220206 -1.534243,-1.094813 -2.792258,-3.308081 -3.308513,-5.820778 -0.04595,-0.223652 -0.09525,-2.500176 -0.132515,-6.118874 -0.03264,-3.169491 -0.07528,-6.838136 -0.09477,-8.152542 -0.02413,-1.627526 -0.013,-2.389831 0.03487,-2.389831 0.04759,0 0.07039,-1.08961 0.07057,-3.372881 3.01e-4,-3.725439 0.03389,-4.152349 0.408062,-5.186423 0.334943,-0.925661 0.748533,-1.563658 1.483325,-2.2881535 0.845975,-0.8341211 1.458229,-1.1934301 2.620984,-1.5381585 0.365354,-0.1083183 0.865304,-0.1213238 5.402611,-0.1405417 l 5,-0.021178 v 0.2397694 0.2397694 h 2.101695 2.101695 V 8.2889663 8.0491191 l 4.830508,0.021441 c 4.807637,0.021339 4.832904,0.022174 5.336362,0.1762589 2.003853,0.6132865 3.455555,2.111906 4.115101,4.248096 l 0.188389,0.61017 0.0228,3.677966 c 0.0158,2.549403 8.47e-4,3.677966 -0.04874,3.677966 -0.04906,0 -0.07154,0.905201 -0.07154,2.881356 0,1.948169 0.02282,2.881356 0.07045,2.881356 0.04835,0 0.06309,1.70686 0.04696,5.440678 -0.02274,5.267391 -0.02806,5.459225 -0.166815,6.023003 -0.60213,2.446463 -1.832709,4.461596 -3.356453,5.496351 -0.388655,0.26393 -0.569269,0.305906 -0.390759,0.09082 0.04791,-0.05773 0.07514,-0.115541 0.06051,-0.128458 -0.01463,-0.01292 -0.31644,-0.200153 -0.670678,-0.416077 -0.354237,-0.215925 -0.652413,-0.398557 -0.662613,-0.40585 -0.08478,-0.06062 0.130034,-0.257541 0.447446,-0.410175 0.515893,-0.248079 1.433235,-1.186602 1.862796,-1.905809 0.426687,-0.714393 0.832807,-1.662729 1.054531,-2.462444 l 0.178568,-0.644068 0.01903,-7.271187 0.01902,-7.271186 h -2.676391 c -1.691994,0 -2.808534,0.02756 -3.035661,0.07492 -1.299614,0.271018 -2.376616,1.387144 -2.668856,2.76581 -0.07928,0.374007 -0.09503,2.510552 -0.09598,13.023676 L 37.698367,50.8 l -0.661048,1.948359 -0.661046,1.948358 -5.458126,7.94e-4 -5.458126,7.93e-4 -0.592722,-1.543213 z m 4.188372,-4.03788 c 0.425642,-0.425642 0.376391,-1.133108 -0.10122,-1.453975 -0.232209,-0.156002 -0.256625,-0.157859 -1.812385,-0.137803 l -1.577007,0.02033 -0.213909,0.21404 c -0.39611,0.396352 -0.33955,1.183981 0.104465,1.454741 0.188499,0.114947 0.362661,0.127347 1.791844,0.127575 l 1.583051,2.72e-4 0.225161,-0.225162 z m 7.551407,0.05072 c 0.483075,-0.40648 0.385213,-1.32968 -0.165335,-1.559714 -0.174614,-0.07296 -0.57845,-0.09635 -1.663216,-0.09635 -1.578472,0 -1.766953,0.03818 -1.981505,0.401387 -0.142924,0.241951 -0.15019,0.758923 -0.01436,1.021594 0.205792,0.397959 0.252995,0.407528 2.01027,0.407528 h 1.606832 z m -5.317156,-3.145408 c 0.338848,-0.461603 1.016621,-1.069251 1.535689,-1.376801 0.72215,-0.427878 1.381867,-0.606219 2.379354,-0.643212 l 0.862591,-0.03199 0.01939,-9.432718 0.01939,-9.432718 0.152471,-0.53844 c 0.526973,-1.860974 1.854887,-3.248954 3.610094,-3.773392 0.483102,-0.144346 0.646116,-0.152945 3.408428,-0.179785 l 2.901061,-0.02819 -0.01971,-3.638403 -0.0197,-3.638402 -0.209172,-0.584255 C 45.421746,11.305103 44.369254,10.297888 42.986441,9.9074701 42.566804,9.7889915 41.995452,9.7830508 31.020339,9.7830508 c -10.806814,0 -11.5529,0.00747 -11.966102,0.1197817 -1.216023,0.3305305 -2.199539,1.1369585 -2.747866,2.2530995 -0.470031,0.956765 -0.464601,0.902856 -0.490054,4.864407 l -0.02298,3.576271 h 2.530533 c 1.391793,0 2.784059,0.03179 3.093925,0.07064 2.004124,0.251296 3.646929,1.704191 4.292613,3.796384 l 0.156114,0.505854 0.01896,9.508474 0.01896,9.508475 0.693544,0.0012 c 1.413937,0.0024 2.470363,0.417126 3.467954,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.167748,-0.15156 0.303725,-0.336798 z"
+     id="path33"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 19.543394,29.460558 c -0.314382,-0.100737 -0.792209,-0.542603 -0.953415,-0.881661 -0.351674,-0.739659 -0.224415,-1.483645 0.352369,-2.060046 0.394395,-0.394132 0.758086,-0.531845 1.273725,-0.482299 0.876608,0.08423 1.557822,0.984879 1.460853,1.931427 -0.111582,1.089196 -1.142234,1.810221 -2.133532,1.492579 z"
+     id="path35"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 41.32493,29.390654 c -0.641139,-0.306689 -0.997845,-0.877086 -1.00572,-1.608212 -0.0059,-0.551804 0.183568,-0.9751 0.6011,-1.342626 0.513583,-0.452074 1.122318,-0.538687 1.713943,-0.243868 1.546485,0.770646 1.124603,3.189951 -0.579989,3.325983 -0.314523,0.0251 -0.455456,-2.64e-4 -0.729334,-0.131277 z"
+     id="path37"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="M 24.865072,53.155932 24.27143,51.613559 24.271769,38.833898 C 24.271972,31.285773 24.245921,25.804967 24.208096,25.445317 24.15764,24.965571 24.092359,24.731798 23.900368,24.34333 23.445834,23.423642 22.617144,22.72204 21.70378,22.483612 21.319075,22.383186 20.881212,22.3666 18.525904,22.36323 l -2.731663,-0.0039 0.02137,7.20339 0.02137,7.20339 0.180495,0.659032 c 0.4734,1.728506 1.403635,3.34181 2.360242,4.093364 0.268196,0.210707 0.425819,0.392362 0.478217,0.551131 0.07785,0.23589 0.07635,0.238652 -0.378512,0.697028 -0.256442,0.258422 -0.436428,0.492955 -0.4105,0.534906 0.09592,0.1552 -0.09785,0.06428 -0.48789,-0.228911 -1.470737,-1.105572 -2.685996,-3.175369 -3.216212,-5.477769 -0.137754,-0.598177 -0.146403,-0.86584 -0.198762,-6.150815 -0.03011,-3.038983 -0.07392,-6.722882 -0.09737,-8.186441 -0.03064,-1.912456 -0.02169,-2.661017 0.03179,-2.661017 0.05302,0 0.07441,-0.96355 0.07441,-3.351026 0,-1.980065 0.02938,-3.567994 0.07182,-3.881356 0.0948,-0.700089 0.444206,-1.713942 0.81527,-2.365648 0.562489,-0.987908 1.615981,-1.9547486 2.649167,-2.4312685 1.071624,-0.4942481 0.757103,-0.4696861 6.345103,-0.4955089 l 5.033899,-0.023262 V 8.288677 8.5288135 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 4.976342,0 5.115067,0.00845 6.072929,0.3697394 1.133115,0.4273964 2.273128,1.40118 2.923735,2.4974153 0.190649,0.321231 0.465198,0.92872 0.610109,1.349976 l 0.263475,0.76592 0.02119,3.711865 c 0.01477,2.586496 -6.1e-4,3.711864 -0.05079,3.711864 -0.09927,0 -0.100739,5.639038 -0.0015,5.738283 0.048,0.048 0.063,1.798617 0.04702,5.488135 -0.02114,4.880629 -0.03526,5.467044 -0.142497,5.915959 -0.601974,2.520035 -1.83244,4.525859 -3.454352,5.631058 -0.324497,0.221118 -0.484248,0.241322 -0.317269,0.04012 0.04792,-0.05773 0.07514,-0.114004 0.06051,-0.125045 -0.01463,-0.01104 -0.31644,-0.198838 -0.670678,-0.417328 -0.354237,-0.218489 -0.652413,-0.402657 -0.662613,-0.409262 -0.08706,-0.05637 0.131355,-0.257471 0.447446,-0.411982 0.463813,-0.226721 1.281552,-1.024025 1.695704,-1.653332 0.371493,-0.564485 0.829086,-1.515759 1.051677,-2.186293 0.390243,-1.175579 0.383038,-1.012531 0.383038,-8.668654 v -7.043358 h -2.674629 c -1.70137,0 -2.805362,0.02742 -3.033898,0.07536 -1.182093,0.247955 -2.169605,1.195355 -2.606797,2.500911 -0.119037,0.355474 -0.12646,0.97106 -0.159008,13.186441 l -0.03414,12.813559 -0.644068,1.880804 -0.644068,1.880805 -5.458779,5.42e-4 -5.458779,5.43e-4 -0.593641,-1.542373 z m 4.14554,-3.98527 c 0.508146,-0.427576 0.410097,-1.323368 -0.171444,-1.566352 -0.301108,-0.125811 -3.027675,-0.130568 -3.274421,-0.0057 -0.424218,0.214657 -0.59548,0.828718 -0.366002,1.312305 0.192217,0.40507 0.2904,0.425739 2.036731,0.428756 l 1.57107,0.0027 z m 7.605477,-0.01473 c 0.534716,-0.479157 0.313205,-1.485457 -0.354561,-1.610731 -0.127374,-0.02389 -0.877715,-0.03354 -1.667425,-0.02144 l -1.435836,0.022 -0.213904,0.21404 c -0.396103,0.396356 -0.33954,1.183984 0.104472,1.454741 0.188419,0.114899 0.36249,0.127347 1.783994,0.127575 l 1.575202,2.72e-4 0.208058,-0.186441 z m -5.335064,-3.121289 c 0.131086,-0.178573 0.400633,-0.477482 0.598995,-0.664241 1.011678,-0.9525 2.10527,-1.383961 3.50782,-1.383961 h 0.679717 l 0.01988,-9.474577 0.01988,-9.474576 0.155657,-0.508474 c 0.480117,-1.568373 1.435989,-2.744737 2.757368,-3.393414 0.99295,-0.487448 1.019577,-0.490715 4.254237,-0.522028 l 2.898305,-0.02806 v -3.475033 c 0,-3.95017 -0.0077,-4.020371 -0.554797,-5.072002 C 45.07089,10.986504 43.94992,10.112105 42.86446,9.8903472 42.614961,9.8393752 38.978724,9.8169491 30.96345,9.8169491 c -12.726879,0 -11.855989,-0.028943 -12.788228,0.4249989 -0.64266,0.312935 -1.517726,1.202643 -1.849146,1.880086 -0.488407,0.998334 -0.480471,0.922037 -0.509517,4.898305 l -0.02612,3.576271 h 2.576148 c 1.473783,0 2.801315,0.03132 3.102349,0.07319 1.969563,0.273941 3.535747,1.662003 4.239475,3.757321 l 0.15939,0.474576 0.01853,9.542373 0.01853,9.542373 0.69333,0.0012 c 1.413712,0.0024 2.470202,0.417177 3.467739,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.163744,-0.146106 0.294829,-0.32468 z"
+     id="path39"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
+     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04335,-0.220339 h 4.986743 4.986743 l -0.04269,0.220339 c -0.232307,1.199152 -1.116189,2.096397 -2.313193,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
+     id="path41"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 19.529332,29.456525 c -0.388514,-0.123715 -0.918287,-0.694794 -1.044982,-1.126457 -0.135012,-0.460004 -0.135309,-0.634102 -0.0018,-1.083523 0.126794,-0.426962 0.549453,-0.918859 0.944614,-1.099358 1.10635,-0.50535 2.382318,0.527304 2.249807,1.820792 -0.112351,1.096702 -1.140404,1.809268 -2.147594,1.488546 z"
+     id="path28"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 41.4417,29.464608 c -0.12249,-0.04148 -0.356375,-0.193071 -0.519746,-0.336875 -0.830178,-0.730752 -0.825155,-1.963033 0.011,-2.699048 0.510112,-0.449018 1.104191,-0.530288 1.701298,-0.232737 1.551687,0.773238 1.125605,3.211848 -0.579989,3.319471 -0.214421,0.01353 -0.490075,-0.0093 -0.612564,-0.05081 z"
+     id="path30"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 24.880657,53.223729 -0.572182,-1.474576 -0.03411,-13.254238 -0.03411,-13.254237 -0.152962,-0.450843 c -0.414948,-1.223022 -1.479741,-2.166476 -2.661495,-2.358206 -0.251982,-0.04088 -1.546671,-0.0715 -3.035728,-0.0718 l -2.596365,-5.12e-4 0.02193,7.20339 0.02193,7.20339 0.178371,0.651832 c 0.477104,1.743505 1.383217,3.297466 2.409402,4.132064 0.220639,0.179446 0.383294,0.376331 0.431451,0.522247 0.07674,0.232533 0.07402,0.237514 -0.379375,0.694412 -0.256443,0.258422 -0.436428,0.492955 -0.410501,0.534906 0.09408,0.152219 -0.09365,0.06647 -0.479796,-0.21917 -1.505019,-1.11328 -2.738185,-3.245706 -3.259448,-5.636334 -0.08511,-0.390334 -0.113685,-1.396637 -0.157914,-5.561313 -0.0297,-2.79661 -0.07614,-6.475935 -0.103205,-8.176278 -0.03659,-2.298664 -0.02926,-3.103858 0.02856,-3.139594 0.05678,-0.03509 0.07777,-0.942388 0.07777,-3.36119 0,-3.518015 0.03141,-4.002372 0.318627,-4.913363 0.314677,-0.998089 0.716849,-1.677929 1.439925,-2.4340838 0.747044,-0.7812176 1.597603,-1.3113598 2.592049,-1.6155893 0.492613,-0.1507043 0.53985,-0.1521909 5.530755,-0.174055 l 5.033898,-0.022052 V 8.288677 8.5288136 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 3.679858,0 4.704083,0.019178 5.101695,0.095524 2.239222,0.42996 3.981671,2.1383567 4.639205,4.5485437 0.12095,0.443341 0.128468,0.715531 0.114231,4.135593 -0.0084,2.01356 -0.03212,4.911865 -0.05275,6.440678 -0.02588,1.917763 -0.01495,2.822092 0.03524,2.916501 0.05058,0.09514 0.06619,1.789196 0.05122,5.559322 l -0.02153,5.422482 -0.209872,0.779661 c -0.625275,2.322853 -1.865617,4.293463 -3.300667,5.243975 -0.383614,0.254088 -0.560602,0.29 -0.384706,0.07806 0.04791,-0.05773 0.07514,-0.11383 0.06051,-0.124658 -0.01463,-0.01083 -0.31644,-0.196852 -0.670678,-0.413386 -0.354237,-0.216535 -0.652413,-0.400876 -0.662613,-0.409649 -0.06627,-0.05699 0.103367,-0.258403 0.281006,-0.333649 0.333065,-0.141082 0.995308,-0.671236 1.341954,-1.074291 0.948687,-1.103065 1.726992,-2.851277 1.885567,-4.235315 0.04136,-0.361024 0.06845,-3.298276 0.06878,-7.459899 l 5.56e-4,-6.864407 -2.593221,4.07e-4 c -1.426271,2.03e-4 -2.776271,0.03013 -3,0.06649 -0.5378,0.08738 -1.278339,0.459631 -1.679913,0.844448 -0.426032,0.408254 -0.828536,1.039993 -1.014485,1.592257 l -0.150023,0.445568 -0.01878,12.745763 -0.01878,12.745762 -0.659678,1.949153 -0.659678,1.949152 H 30.915582 25.45284 l -0.572183,-1.474576 z m 4.176258,-4.116827 c 0.28316,-0.300238 0.351448,-0.65617 0.198991,-1.037198 -0.199828,-0.499417 -0.276696,-0.52105 -1.93848,-0.54554 -1.606414,-0.02367 -1.840748,0.01675 -2.062963,0.355897 -0.176371,0.269174 -0.203228,0.719991 -0.06078,1.020182 0.193533,0.40784 0.329655,0.436465 2.089834,0.439476 l 1.551318,0.0027 0.222077,-0.235471 z m 7.47415,0.129661 c 0.346182,-0.242476 0.469962,-0.930659 0.238016,-1.323312 -0.223761,-0.378797 -0.406688,-0.412951 -2.08381,-0.389068 -1.402798,0.01998 -1.526507,0.03164 -1.664903,0.157013 -0.484449,0.438854 -0.4373,1.333331 0.08218,1.559034 0.340491,0.147937 3.216465,0.14486 3.428518,-0.0037 z m -5.386246,-3.039286 c 0.219147,-0.334461 0.89766,-1.011539 1.304892,-1.302135 0.872855,-0.622856 1.797089,-0.908701 2.938135,-0.908701 h 0.679724 l 0.01876,-9.508475 0.01876,-9.508474 0.224384,-0.644068 c 0.529212,-1.519035 1.40638,-2.558859 2.69087,-3.189847 0.992616,-0.487608 1.019351,-0.49089 4.254238,-0.522205 l 2.898305,-0.02806 -0.0013,-3.333336 c -7.46e-4,-1.845913 -0.03146,-3.541656 -0.06883,-3.800185 -0.216906,-1.500548 -1.355859,-2.902935 -2.796082,-3.442803 L 42.884746,9.8508475 31.427119,9.8317889 c -7.412733,-0.01233 -11.661069,0.00512 -12.033898,0.04943 -1.570077,0.1866001 -2.997951,1.5191011 -3.431966,3.2027331 -0.09267,0.359487 -0.115489,0.994354 -0.142707,3.970285 l -0.0324,3.542373 h 2.578291 c 2.668712,0 3.336394,0.04642 4.045729,0.281271 0.842199,0.27884 1.872893,1.045963 2.43329,1.811045 0.289587,0.395359 0.604922,1.014402 0.841303,1.651589 l 0.183034,0.493383 0.01853,9.576271 0.01853,9.576272 0.693335,0.0012 c 1.492866,0.0025 2.556358,0.443295 3.625403,1.502535 0.232977,0.230839 0.492299,0.520628 0.576271,0.643975 0.182471,0.268031 0.207686,0.272647 0.344954,0.06315 z"
+     id="path32"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
+     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04334,-0.220339 h 4.986742 4.986743 l -0.04268,0.220339 c -0.232308,1.199152 -1.11619,2.096397 -2.313194,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
+     id="path34"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="m 30.624563,45.81302 c -0.644332,-0.788705 -1.520183,-1.386624 -2.48558,-1.696836 -0.307816,-0.09891 -0.700685,-0.152947 -1.303074,-0.179232 l -0.862396,-0.03763 -0.01896,-9.532713 -0.01896,-9.532712 -0.226779,-0.610169 C 25.148159,22.715241 24.218955,21.638383 22.966362,21.045485 22.011301,20.59342 21.902478,20.580608 18.726568,20.546318 l -2.870042,-0.03099 0.02518,-3.569531 0.02518,-3.56953 0.195122,-0.566253 c 0.437945,-1.270938 1.358541,-2.245263 2.579355,-2.729893 l 0.40678,-0.1614809 11.747202,-0.018432 c 12.993681,-0.020388 12.117285,-0.048132 12.99856,0.4114939 0.580598,0.30281 1.430354,1.17155 1.75084,1.789956 0.508037,0.980303 0.520347,1.097952 0.520347,4.973209 v 3.439622 l -2.864407,0.03169 c -2.702603,0.0299 -2.893024,0.04012 -3.371026,0.181072 -1.11397,0.328473 -2.149384,1.064344 -2.810411,1.997364 -0.378701,0.534525 -0.538274,0.85604 -0.804598,1.621138 l -0.217118,0.623738 -0.01951,9.465517 -0.01951,9.465518 -0.828062,0.03573 c -1.485183,0.06409 -2.508397,0.523905 -3.521008,1.582278 -0.176037,0.183991 -0.391825,0.431794 -0.47953,0.550671 l -0.15948,0.216145 z M 35.6698,19.599589 c 0.37757,-0.223036 0.512021,-0.817138 0.29055,-1.283855 -0.210957,-0.444558 -0.06822,-0.430988 -4.533231,-0.430988 -4.433017,0 -4.327142,-0.0094 -4.541225,0.40456 -0.131866,0.255 -0.132015,0.766101 -2.72e-4,1.020817 0.212228,0.410402 0.08885,0.399445 4.531061,0.402417 3.705602,0.0025 4.07431,-0.0073 4.253141,-0.112951 z m 0,-3.59322 c 0.37757,-0.223036 0.512021,-0.817138 0.29055,-1.283855 -0.210957,-0.444559 -0.06822,-0.430989 -4.533231,-0.430989 -4.433017,0 -4.327142,-0.0094 -4.541225,0.404561 -0.131866,0.255 -0.132015,0.766101 -2.72e-4,1.020816 0.212228,0.410403 0.08885,0.399446 4.531061,0.402417 3.705602,0.0025 4.07431,-0.0073 4.253141,-0.11295 z"
+     id="path3734"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="m 28.514503,60.930958 c -1.583316,-0.242351 -2.940251,-1.145069 -3.687796,-2.453351 -0.271133,-0.47451 -0.528636,-1.27161 -0.585755,-1.8132 -0.04252,-0.403196 -1.055151,-3.189642 -4.72433,-12.999946 l -0.133103,-0.355877 -0.337086,0.284235 -0.337086,0.284235 -0.318781,-0.318781 -0.318782,-0.318781 0.463424,-0.436859 c 0.435815,-0.410834 0.460538,-0.449998 0.414986,-0.657391 -0.03456,-0.15733 -0.221646,-0.384936 -0.652815,-0.794186 C 17.224399,40.332624 16.53643,39.085517 16.0173,37.21787 15.924,36.882215 15.907586,35.927468 15.886847,29.630508 l -0.02372,-7.203389 h 2.699958 c 2.207,0 2.772807,0.01897 3.098956,0.103926 1.273382,0.331673 2.308975,1.507721 2.475575,2.811328 0.03937,0.308046 0.06581,5.590552 0.06707,13.401378 l 0.0021,12.892903 0.601417,1.547774 0.601419,1.547775 h 5.507878 5.507878 l 0.670365,-1.961042 0.670365,-1.961043 0.0012,-12.344042 c 6.99e-4,-7.167851 0.02777,-12.596582 0.06456,-12.946292 0.148038,-1.407277 1.190737,-2.640355 2.535485,-2.99842 0.266132,-0.07086 0.981873,-0.09282 3.045138,-0.09344 l 2.69723,-8.04e-4 -0.02132,7.271186 -0.02132,7.271187 -0.179001,0.610169 c -0.604379,2.060177 -1.861018,3.862212 -3.037234,4.355428 -0.279671,0.117273 -0.244121,0.08584 -0.298859,0.264219 -0.03876,0.126299 0.04287,0.19908 0.63078,0.562429 l 0.675298,0.417357 -0.246514,0.395671 -0.246515,0.395671 -0.579129,-0.359324 c -0.388235,-0.240884 -0.593529,-0.333221 -0.622816,-0.280133 -0.02403,0.04355 -1.043572,2.931733 -2.265652,6.418174 -1.834529,5.233682 -2.237176,6.447134 -2.309212,6.959237 -0.109377,0.777578 -0.300361,1.357087 -0.633456,1.922118 -0.638071,1.082365 -1.643706,1.838325 -2.907036,2.18529 -0.472906,0.129881 -0.723331,0.144048 -2.824007,0.159769 -1.267797,0.0095 -2.486949,-0.01059 -2.709226,-0.04461 z m 4.994024,-1.765201 c 0.868195,-0.181051 1.697979,-0.781462 2.055751,-1.487492 0.188934,-0.372844 0.388054,-1.067519 0.331992,-1.158229 -0.02017,-0.03263 -2.277631,-0.05902 -5.049424,-0.05902 -4.456645,0 -5.012948,0.01152 -5.012948,0.103834 0,0.183179 0.271099,0.915704 0.433998,1.172689 0.390754,0.616441 1.254516,1.202657 2.059673,1.397854 0.495715,0.120178 4.633973,0.14443 5.180958,0.03036 z M 20.797623,29.420028 c 0.552567,-0.281898 0.968479,-0.984895 0.968479,-1.636977 0,-0.71115 -0.458348,-1.418982 -1.096651,-1.693573 -0.713765,-0.307053 -1.547441,-0.04515 -2.000378,0.628427 -0.84433,1.255632 0.03534,2.966648 1.474818,2.868625 0.207784,-0.01415 0.501964,-0.08907 0.653732,-0.166502 z m 21.901696,-0.0017 c 0.352182,-0.17967 0.726344,-0.619745 0.859713,-1.011162 0.423948,-1.244221 -0.530105,-2.561917 -1.762795,-2.434692 -0.916164,0.09456 -1.533625,0.825865 -1.533625,1.816394 0,0.567213 0.164016,0.963492 0.556381,1.344268 0.494409,0.479809 1.268661,0.59724 1.880326,0.285192 z"
+     id="path3736"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="M 10.452241,49.26674 C 9.6527692,49.173991 8.9059843,48.949371 8.1050848,48.560755 6.8656542,47.959353 6.1001422,47.215759 5.5246854,46.054237 5.0606077,45.117527 4.9491477,44.581969 4.9109098,43.105085 l -0.032473,-1.254238 0.1279689,0.338984 c 0.2043449,0.541298 0.3466223,0.778741 0.6805341,1.135719 0.4482888,0.479257 0.754104,0.622558 1.3333995,0.624813 0.8299278,0.0032 1.4795324,-0.447352 1.8880508,-1.3096 l 0.2136441,-0.450932 0.019359,-6.922387 0.019359,-6.922386 0.6247088,-0.0389 c 0.975663,-0.06076 1.987924,-0.437417 2.912844,-1.083853 l 0.389831,-0.272457 v -1.380007 c 0,-0.759004 -0.01167,-1.380007 -0.02594,-1.380007 -0.01426,0 -0.156307,0.200102 -0.31565,0.444671 -0.559097,0.858134 -1.57365,1.542434 -2.607568,1.758762 -0.6351027,0.132882 -0.9310848,0.12673 -1.5528077,-0.03228 C 7.5814134,26.104014 6.7063399,25.493875 6.1143479,24.637529 5.7252719,24.074711 5.3659415,23.345714 5.2002549,22.783051 L 5.0954441,22.427119 H 9.0578915 13.020339 V 21.477966 20.528814 H 11.083952 9.1475661 l 0.027214,-3.711865 c 0.025317,-3.453082 0.037108,-3.757657 0.1691219,-4.368695 0.959961,-4.4432621 4.057484,-7.7158697 8.210025,-8.6740897 0.763101,-0.1760892 2.613485,-0.2429101 3.678332,-0.1328315 1.981719,0.2048603 3.750204,0.8071568 5.208214,1.7737719 0.933643,0.6189766 1.639395,1.2817422 2.431051,2.2829774 l 0.224066,0.2833847 -5.003727,0.021665 c -5.601582,0.024253 -5.301187,-5.424e-4 -6.451811,0.5324806 -1.717118,0.7954443 -2.872613,2.2767766 -3.379265,4.3321846 -0.09072,0.368036 -0.113212,1.035784 -0.136445,4.050847 -0.01933,2.508803 -0.05002,3.61017 -0.100589,3.61017 -0.05141,0 -0.05862,0.771269 -0.02459,2.627118 0.0265,1.444915 0.07166,5.128814 0.100355,8.186441 0.04991,5.318844 0.05841,5.587182 0.196375,6.20339 0.576164,2.573315 1.927827,4.782318 3.531732,5.771853 l 0.479684,0.295943 6.1e-4,0.495488 c 0.0026,2.18039 -1.014758,3.773846 -2.905475,4.550958 -1.35118,0.555355 -3.316591,0.796252 -4.950178,0.606735 z"
+     id="path3738"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="m 49.359322,49.301913 c -0.798915,-0.09548 -1.664473,-0.269084 -2.177463,-0.436721 -2.278198,-0.744481 -3.356047,-2.144547 -3.488117,-4.530871 l -0.03989,-0.720762 0.425703,-0.237288 c 0.526989,-0.293746 1.479956,-1.219478 1.954149,-1.898305 0.665696,-0.952971 1.22202,-2.189184 1.577891,-3.50625 l 0.215845,-0.798835 0.02349,-5.508474 c 0.01626,-3.813322 0.0016,-5.508475 -0.04762,-5.508475 -0.04848,0 -0.07111,-0.895571 -0.07111,-2.813559 0,-1.938738 0.02237,-2.813559 0.07195,-2.813559 0.05016,0 0.06453,-1.134299 0.04744,-3.745763 L 47.827079,13.037288 47.6045,12.359322 C 46.952012,10.371873 45.606214,8.9241098 43.849443,8.319763 42.904348,7.9946405 42.665228,7.9820747 37.8,8.0018635 l -4.542373,0.018475 0.02129,0.220339 0.02129,0.2203389 H 31.228066 29.155932 V 8.0302872 7.5995574 l 0.518704,-0.043846 c 0.285287,-0.024116 1.201514,-0.043846 2.03606,-0.043846 h 1.517356 l 0.727876,-0.7288136 c 2.171957,-2.1747557 4.838837,-3.2009367 8.32365,-3.2028335 2.316076,-0.00126 4.213912,0.6238318 6.130592,2.0192408 0.682351,0.4967757 1.760772,1.6070289 2.322789,2.3913531 0.836163,1.1669093 1.554607,2.8065618 1.869585,4.2668158 0.236007,1.094146 0.282202,1.938753 0.282202,5.159726 v 3.111461 h -2.101695 -2.101695 v 0.915254 0.915254 h 4.101695 c 3.359746,0 4.101695,0.01625 4.101695,0.08982 0,0.0494 -0.07612,0.313606 -0.169143,0.587121 -0.502155,1.476395 -1.659845,2.713775 -2.992372,3.198351 -0.526753,0.191553 -1.5705,0.206283 -2.160519,0.03049 -1.115426,-0.332337 -2.034774,-1.122161 -2.691802,-2.312561 l -0.187098,-0.338983 -0.0012,1.271187 -0.0012,1.271186 -0.288136,0.0023 -0.288135,0.0023 0.450397,0.430988 c 1.117695,1.069528 2.597699,1.732198 3.871637,1.73352 l 0.457627,4.69e-4 v 6.663722 c 0,7.335896 -0.01577,7.04171 0.421369,7.861862 0.434298,0.814827 1.318418,1.274622 2.064575,1.073703 0.618854,-0.16664 1.297861,-0.842517 1.518717,-1.511716 0.16922,-0.512741 0.21634,-0.274769 0.180667,0.912429 -0.03642,1.211895 -0.103404,1.591824 -0.417991,2.370663 -0.27869,0.689968 -0.597267,1.153265 -1.224964,1.781427 -0.890029,0.890689 -1.918901,1.419763 -3.30556,1.699809 -0.484364,0.09782 -2.300731,0.179748 -2.762237,0.12459 z"
+     id="path3740"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="m 33.116624,49.19698 c -0.517167,-0.250947 -0.462355,-1.345902 0.07765,-1.551212 0.09563,-0.03636 0.820193,-0.06566 1.610139,-0.06511 1.539976,0.0011 1.653506,0.0221 1.898143,0.351652 0.248685,0.335 0.117405,1.091437 -0.220836,1.272458 -0.171397,0.09173 -3.174328,0.08478 -3.365097,-0.0078 z"
+     id="path3742"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
+     d="m 25.386441,49.044068 c -0.196047,-0.196047 -0.230509,-0.277637 -0.230509,-0.54574 0,-0.173377 0.04628,-0.404725 0.102843,-0.514107 0.189825,-0.367081 0.361343,-0.40456 1.851418,-0.40456 1.545903,0 1.709615,0.02135 1.941435,0.253169 0.327,0.327 0.286747,1.017209 -0.07596,1.302516 -0.167122,0.131458 -0.265807,0.13923 -1.76786,0.13923 h -1.590857 z"
+     id="path3744"
+     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/wc.svg b/client/public/images/pieces/Ball/wc.svg
new file mode 100644 (file)
index 0000000..b51dea5
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="wc.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <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="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.16296602"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <path
+     style="color:black;"
+     d="m1024 1166q97 0 186 15 98-35 142-109 38-64 38-141 0-46-23-101t-75-101q-59-49-129-107t-139-137q-70 78-140 136t-128 108q-53 45-75 100t-23 102q0 77 37 141 43 74 143 109 88-15 186-15z"
+     fill-rule="nonzero"
+     display="block"
+     fill="#fff"
+     id="path2" />
+  <path
+     style="color:black;"
+     d="m988 1138l-83 1q-34 0-34 34t34 34h83v86q0 35 36 35 35 0 35-35v-86h86q33 0 33-34t-33-34h-86v-82q0-36-35-36-36 0-36 36v81zm36-578q68 0 132 11t125 28q-117 31-257 31-142 0-257-31 58-16 123-27t134-12zm0 1089q68 0 68 68t-68 68-68-68 68-68zm0-949q117 0 225-23l-48 123q-88 14-177 14-91 0-178-14l-48-123q107 23 226 23zm0 182q97 0 186-15 98 35 142 109 38 64 38 141 0 46-23 101t-75 101q-59 49-129 107t-139 137q-70-78-140-136t-128-108q-53-45-75-100t-23-102q0-77 37-141 43-74 143-109 88 15 186 15zm-36-377h-32q-56-90-107-113-24-12-53-22t-67-10q-7 0-107 16-48 7-76 15t-44 10q-57 7-133-6-46-8-86-29l48-78q12 12 31 15t36 8q42 7 80 2 13-3 51-7t101-15q75-11 102-11 105 0 161 40 34 26 64 72t31 113zm36-113q-14-57-34-79t-53-46q-36-25-85-42t-109-9l-281 39q-17 2-30 0t-26-2q-21 0-53-9t-51-28l-97 159q18 20 32 28t33 17q58 27 124 33 28 2 55 1t56 2q54-9 108-16t110-16q60 0 81 12 11 6 35 22t48 47q-53 6-108 20t-97 31l104 258q-78 45-109 72t-49 64q-26 46-33 89t-7 77q1 60 28 132t104 130q63 48 123 99t119 119q-74 38-74 121 0 56 39 96t97 40q56 0 96-40t40-96q0-82-74-121 58-68 117-119t125-99q75-57 102-129t29-133q0-34-7-77t-32-89q-20-36-50-63t-108-73l104-258q-44-16-99-30t-106-21q23-31 47-47t36-22q21-12 81-12 54 8 108 15t110 17q27-3 54-2t57-1q64-6 124-33 18-9 32-17t33-28l-98-159q-18 18-50 27t-53 10q-13 0-26 2t-31 0l-280-39q-60-9-111 8t-85 45q-33 27-52 46t-33 77zm35 113q0-66 30-112t66-73q55-40 161-40 26 0 102 11 62 10 100 14t51 8q38 5 80-2 16-4 35-7t33-16l48 78q-41 21-87 29-76 13-133 6-17-2-44-10t-75-15q-101-16-107-16-39 0-68 10t-52 22q-53 24-108 113h-32z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path4" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g16">
+    <path
+       style="color:black;"
+       d="m1024 1488q68 0 132-11t125-28q-117-31-257-31-142 0-257 31 58 16 123 27t134 12z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1024 399q68 0 68-68t-68-68-68 68 68 68z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m1024 1348q117 0 225 23l-48-123q-88-14-177-14-91 0-178 14l-48 123q107-23 226-23z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m988 1543h-32q-56 90-107 113-24 12-53 22t-67 10q-7 0-107-16-48-7-76-15t-44-10q-57-7-133 6-46 8-86 29l48 78q12-12 31-15t36-8q42-7 80-2 13 3 51 7t101 15q75 11 102 11 105 0 161-40 34-26 64-72t31-113z"
+       display="block"
+       id="path12" />
+    <path
+       style="color:black;"
+       d="m1059 1543q0 66 30 112t66 73q55 40 161 40 26 0 102-11 62-10 100-14t51-8q38-5 80 2 16 4 35 7t33 16l48-78q-41-21-87-29-76-13-133-6-17 2-44 10t-75 15q-101 16-107 16-39 0-68-10t-52-22q-53-24-108-113h-32z"
+       display="block"
+       id="path14" />
+  </g>
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 800.97627,1159.9976 c -87.05319,-45.5347 -134.28336,-121.7479 -134.4237,-216.91333 -0.0957,-64.874 16.01692,-118.77001 48.07071,-160.79468 11.9796,-15.70607 75.36062,-75.0641 140.8467,-131.90673 65.48609,-56.84264 130.14234,-115.11812 143.68056,-129.50107 l 24.61496,-26.15082 53.5363,53.32604 c 29.4449,29.32932 95.1582,87.77276 146.0294,129.8743 50.8712,42.10154 102.3803,91.48882 114.4646,109.7495 88.4137,133.60205 46.2579,305.60949 -91.1339,371.85219 -34.534,16.6504 -43.4781,17.4252 -102.906,8.9146 -59.5244,-8.5245 -247.60906,-4.9704 -290.71183,5.4933 -9.54576,2.3173 -32.97627,-3.9571 -52.0678,-13.9433 z m 255.69463,-145.8407 c 4.9409,-9.2319 8.9833,-36.3812 8.9833,-60.33163 v -43.54624 l 54.2373,-2.58359 54.2373,-2.58358 V 874.73898 844.3661 l -54.2373,-2.58358 -54.2373,-2.58358 v -45.65611 c 0,-56.70368 -13.6186,-77.51264 -48.1567,-73.58221 -25.2414,2.87247 -25.64251,3.74795 -28.17196,61.49023 l -2.56599,58.57627 h -55.42549 c -47.804,0 -56.18298,2.3866 -60.93406,17.35593 -3.0297,9.54576 -3.0297,25.1661 0,34.71187 4.51121,14.21358 13.13006,17.35593 47.60385,17.35593 65.68527,0 69.54869,3.38582 69.54869,60.95104 0,32.21321 3.91652,51.99651 10.84746,54.79321 24.0776,9.7155 49.7684,4.8489 58.2709,-11.0382 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="M 980.80548,383.94182 C 965.9735,373.5531 961.51864,361.83719 961.51864,333.219 c 0,-45.35868 19.33129,-65.93764 61.93996,-65.93764 40.385,0 58.8912,15.24021 65.1207,53.62822 4.3157,26.59489 1.4726,35.57656 -17.1596,54.20882 -25.6026,25.60251 -61.6477,29.11236 -90.61422,8.82342 z"
+     id="path28"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:6.13624859"
+     d="m 824.27286,1308.2731 22.31222,-58.1295 27.739,-4.767 c 41.69951,-7.1662 295.03742,-5.0229 313.07462,2.6486 11.7646,5.0037 20.0466,19.0271 35.5293,60.1597 11.1038,29.4994 18.9677,54.8562 17.4753,56.3485 -1.4923,1.4923 -18.8612,-0.51 -38.5974,-4.4497 -62.8066,-12.5372 -254.18711,-14.5583 -326.90268,-3.4524 -35.18755,5.3743 -65.99454,9.7714 -68.45997,9.7714 -2.46544,0 5.55788,-26.1583 17.82961,-58.1296 z"
+     id="path30"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:6.13624859"
+     d="m 917.40371,1478.8636 c -8.43734,-1.3511 -44.3344,-8.386 -79.77123,-15.6331 l -64.43062,-13.1767 30.68125,-7.8691 c 92.74715,-23.7878 307.47489,-26.448 416.02979,-5.154 29.695,5.825 53.073,11.5089 51.9509,12.631 -1.1221,1.1221 -36.8103,9.0803 -79.3071,17.6849 -64.1926,12.9976 -92.711,15.5034 -168.5396,14.8092 -50.20003,-0.4597 -98.17605,-1.9411 -106.61339,-3.2922 z"
+     id="path32"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:6.13624859"
+     d="m 1226.5694,1756.5958 c -85.9282,-20.8535 -148.5732,-92.8152 -164.7316,-189.231 -3.5744,-21.3281 -2.7675,-23.0109 11.0339,-23.0109 10.0951,0 20.3623,7.4104 31.8819,23.0109 49.5841,67.1496 92.5625,97.6408 163.0995,115.7115 35.0317,8.9747 42.4333,8.7516 121.0967,-3.6493 46.0814,-7.2646 99.3702,-17.1567 118.4195,-21.9826 63.8895,-16.1854 178.1437,-8.0013 236.3262,16.9284 l 19.3751,8.3017 -22.0782,35.5659 c -18.3708,29.5934 -24.2005,34.8766 -34.7158,31.4615 -6.9506,-2.2574 -32.7732,-7.8997 -57.3835,-12.5385 -41.9984,-7.9162 -52.7373,-7.3136 -174.8831,9.813 -139.1255,19.5074 -197.3666,21.7715 -247.4406,9.6194 z"
+     id="path34"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:6.13624859"
+     d="m 656.61314,1759.3398 c -16.87468,-2.8531 -72.10092,-10.8073 -122.72497,-17.6761 -83.4441,-11.3218 -96.56781,-11.6966 -140.46584,-4.0122 -26.63215,4.6621 -51.21774,11.2721 -54.63464,14.689 -4.19258,4.1926 -11.67949,-2.4079 -23.02639,-20.3001 -34.29128,-54.0718 -34.79139,-50.0288 8.03284,-64.9395 58.74999,-20.4559 158.16962,-23.6557 228.80111,-7.3639 30.21035,6.9682 84.43739,16.9551 120.50454,22.1929 73.86422,10.727 104.55953,7.5072 159.32433,-16.7124 41.13417,-18.1914 68.31378,-41.5723 100.32021,-86.2991 17.92779,-25.0528 28.4976,-34.3355 39.20627,-34.4322 13.99857,-0.1263 14.49707,1.2543 11.02825,30.5429 -5.39032,45.5132 -24.09109,81.9322 -63.03786,122.7638 -46.40503,48.6508 -80.91833,61.9238 -168.216,64.6916 -35.43683,1.1235 -78.23717,-0.2916 -95.11185,-3.1447 z"
+     id="path36"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/wl.svg b/client/public/images/pieces/Ball/wl.svg
new file mode 100644 (file)
index 0000000..322c54c
--- /dev/null
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="wl.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <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="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <path
+     style="color:black;"
+     d="m524 583q190 48 504 48 308 0 497-46l25 147q-201 53-526 53-327 0-525-54l25-148zm-61-61l-33 187q-1 0-3 4-5 7-28 18t-55 40q-44 37-68 60t-45 50q-61 84-68 203-10 115 93 229 104 114 281 107 66-4 155-32 29-12 59-23t61-24q16-8 28-16-5 21-5 42 0 78 55 133t134 56q78 0 133-55t55-133q0-16-4-42 14 9 27 15 46 20 121 47 86 29 155 33 177 8 280-107 101-114 94-229-8-119-69-203-20-27-45-50t-67-60q-33-28-56-39t-27-19q-1-2-2-3t-1-2l-32-188 66-247q-50-45-224-74t-402-29q-232 0-408 30t-221 77l66 244zm1081-117l-30 115q-198 44-490 44-291 0-489-44l-32-116q191 56 522 56 329 0 519-55zm26-94q-193 78-542 78-362 0-548-80 176-70 545-70 176 0 321 19t224 53zm-581 542q-1 39-3 77t-15 86q-41 134-124 216-43 42-132 78-102 40-193 40-158 0-234-113-43-60-43-150 0-98 48-161 29-37 74-74t84-67q175 63 538 68zm35 186q7 28 12 39 10 39 23 66 6 17 17 39t25 52q8 17 17 41t18 49q8 20 8 43 0 49-35 83t-85 35q-119 0-119-119 0-23 8-43 22-65 34-90 13-29 24-51t19-40q13-33 22-66 2-6 12-38zm34-186q172-2 315-20t224-47q38 30 83 66t75 75q48 61 48 161 0 90-43 150-77 112-234 112-94 0-193-39-87-35-132-78-84-84-124-216-14-47-16-85t-3-79zm1 706h-71v131h-83q-34 0-34 33v1q0 33 34 33h83v85q0 35 36 35 35 0 35-35v-85h86q33 0 33-33v-1q0-33-33-33l-85-1-1-130z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g16">
+    <path
+       style="color:black;"
+       d="m524 1465q190-48 504-48 308 0 497 46l25-147q-201-53-526-53-327 0-525 54l25 148z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1544 1643-30-115q-198-44-490-44-291 0-489 44l-32 116q191-56 522-56 329 0 519 55z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1570 1737q-193-78-542-78-362 0-548 80 176 70 545 70 176 0 321-19t224-53z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m989 1195q-1-39-3-77t-15-86q-41-134-124-216-43-42-132-78-102-40-193-40-158 0-234 113-43 60-43 150 0 98 48 161 29 37 74 74t84 67q175-63 538-68z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m1024 1009q7-28 12-39 10-39 23-66 6-17 17-39t25-52q8-17 17-41t18-49q8-20 8-43 0-49-35-83t-85-35q-119 0-119 119 0 23 8 43 22 65 34 90 13 29 24 51t19 40q13 33 22 66 2 6 12 38z"
+       display="block"
+       id="path12" />
+    <path
+       style="color:black;"
+       d="m1058 1195q172 2 315 20t224 47q38-30 83-66t75-75q48-61 48-161 0-90-43-150-77-112-234-112-94 0-193 39-87 35-132 78-84 84-124 216-14 47-16 85t-3 79z"
+       display="block"
+       id="path14" />
+  </g>
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 383.03567,1205.1689 c -105.99809,-88.475 -133.59261,-139.9162 -132.45004,-246.9108 0.7615,-71.31086 10.26284,-101.85753 48.49408,-155.90774 90.63834,-128.14186 326.68084,-133.11317 511.16521,-10.7657 87.7216,58.17575 161.45674,201.26075 173.65637,336.98484 l 6.04518,67.2542 h -77.79149 c -137.59645,0 -267.76383,16.5969 -449.61939,57.3285 -11.93079,2.6722 -36.78099,-12.3265 -79.49992,-47.9833 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="M 1017.5383,974.53559 C 1010.378,954.66005 981.33843,884.06646 939.00306,783.62034 890.14568,667.6999 904.42735,591.05673 978.60737,571.08212 c 70.74513,-19.04968 138.40633,14.31467 157.36683,77.59893 11.1621,37.25596 0.097,80.3255 -46.9281,182.6681 -14.2552,31.02373 -34.7692,79.83729 -45.5868,108.47458 -15.8795,42.03783 -20.8727,48.72447 -25.921,34.71186 z"
+     id="path30"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 1538.6034,1242.9695 c -76.6525,-21.2841 -213.4658,-38.7073 -347.7261,-44.2829 l -130.777,-5.431 3.2917,-48.6142 c 10.7318,-158.49703 89.9776,-307.13586 197.2702,-370.01347 79.5751,-46.63413 158.2416,-67.63186 256.2463,-68.39747 77.611,-0.6063 97.689,2.26217 135.4404,19.34988 118.4057,53.59482 173.8493,188.22493 134.2228,325.92466 -13.6125,47.3028 -77.8269,123.0538 -147.9466,174.5264 -46.6117,34.2161 -41.1362,33.2888 -100.0217,16.9381 z"
+     id="path32"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 524.39888,1448.9453 c -2.16755,-7.9626 -6.36809,-30.0978 -9.33452,-49.1894 -2.96643,-19.0915 -7.41004,-44.9375 -9.87468,-57.4355 -4.12206,-20.9027 -1.25316,-23.5365 35.80059,-32.8667 199.30282,-50.1851 651.82343,-57.0832 898.58693,-13.6979 117.1382,20.5949 109.9898,12.4696 93.6286,106.4224 l -9.7367,55.9118 -31.4837,-5.4653 c -171.5669,-29.7826 -224.2581,-33.7233 -456.704,-34.1566 -236.2115,-0.4403 -391.69667,11.5282 -479.0979,36.8787 -22.982,6.6659 -28.53173,5.5481 -31.78462,-6.4015 z"
+     id="path34"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 510.26441,1633.0456 c 0,-3.5881 6.259,-28.8309 13.9089,-56.0949 l 13.9089,-49.5709 96.73516,-16.0831 c 141.35286,-23.5012 662.33203,-21.9898 790.25223,2.2925 l 86.0594,16.3362 15.4783,55.1374 15.4782,55.1374 -19.097,-5.1829 c -237.4101,-64.4318 -778.14573,-64.3834 -997.53765,0.089 -8.35254,2.4546 -15.18644,1.5271 -15.18644,-2.0611 z"
+     id="path36"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="M 748.90847,1793.7305 C 663.75136,1784.847 551.37641,1762.6453 515.36585,1747.59 l -26.79636,-11.2031 60.74576,-18.2931 c 138.43078,-41.6872 210.32612,-49.0743 477.28815,-49.0405 207.317,0.026 266.9521,2.8519 338.4407,16.0356 89.5021,16.5058 199.7674,47.1482 193.2202,53.6954 -10.7394,10.7394 -154.7451,40.5988 -249.5738,51.7488 -117.677,13.8365 -440.13961,15.6784 -559.78203,3.1974 z"
+     id="path38"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/wo.svg b/client/public/images/pieces/Ball/wo.svg
new file mode 100644 (file)
index 0000000..0e3bd47
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg6"
+   sodipodi:docname="wo.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata12">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <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="namedview8"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6" />
+  <path
+     style="color:black;"
+     d="m1756 1774q-1 0 2-54t3-118q1-125 0-258t-36-267q-34-128-75-218t-89-157q-72-108-196-183t-259-98q9 49 8 96-2 36-34 36-37 0-33-36 3-132-94-226-76 80-82 186-2 35-36 31-32-1-32-37 0 0 2-8-41 13-86 37-29 20-47-10t16-47q43-22 65-33-86-88-196-142 12 139 76 263 17 26-8 46-28 22-47-7-7-10-20-36-21 21-28 31-7 9-24 40t-26 51q-9 25-8 40t3 35q-9 59-40 111t-81 127q-47 72-72 108t-38 92q-9 34 0 82t39 76q46 47 89 43 14 0 37-11t37-42q26-57 43-57 25 0 27 28 0 6-16 50-9 20-24 42-19 26-17 22 16 57 53 20 11-11 25-41t44-81q35-59 75-96t71-60q18-13 44-30t70-35q35-14 77-34t76-53q46-45 71-111 13-37 10-91-9-34 34-34 32 0 36 33 0 113-64 206 21 64 11 140-9 61-42 130t-136 155q-207 172-196 354 0 0 170 0t321 0h547z"
+     fill-rule="nonzero"
+     display="block"
+     fill="#fff"
+     id="path2" />
+  <path
+     style="color:black;"
+     d="m697 1359q13-20 10-42-10-64-71-54-18 3-29 12-4-5-12-22-11-32-42-22-31 12-24 45 45 115 163 158 34 10 45-20 12-32-18-44-6-3-11-5t-11-6zm-297-477q-29-18-35-48 1-33-31-36-35-4-36 30 4 66 59 105 26 21 48-4 22-27-5-47zm679 815q157-10 291-81t228-182q66-78 124-188t94-233q40-143 50-300t11-292v-218t-155 0-404 0h-671q-9 0-9 49t7 79q4 24 19 68t50 107q16 32 76 93t138 143q45 46 70 116t22 127q-37-30-81-49-212-76-307-220-7-9-45-81-20-38-34-52-19-19-55-21-56-3-87 54-42-12-75-10-56 21-81 45-51 51-66 102t-16 110q0 84 104 222 122 159 130 242 0 36 7 81 6 31 25 60 13 20 17 27t17 23q9 12 15 18t15 18q11 13 28 30-53 146-43 301 199-71 334-223 33 113 130 183 80-56 127-148zm677-1423q-1 0 2 54t3 118q1 125 0 258t-36 267q-34 128-75 218t-89 157q-72 108-196 183t-259 98q9-49 8-96-2-36-34-36-37 0-33 36 3 132-94 226-76-80-82-186-2-35-36-31-32 1-32 37 0 0 2 8-41-13-86-37-29-20-47 10t16 47q43 22 65 33-86 88-196 142 12-139 76-263 17-26-8-46-28-22-47 7-7 10-20 36-21-21-28-31-7-9-24-40t-26-51q-9-25-8-40t3-35q-9-59-40-111t-81-127q-47-72-72-108t-38-92q-9-34 0-82t39-76q46-47 89-43 14 0 37 11t37 42q26 57 43 57 25 0 27-28 0-6-16-50-9-20-24-42-19-26-17-22 16-57 53-20 11 11 25 41t44 81q35 59 75 96t71 60q18 13 44 30t70 35q35 14 77 34t76 53q46 45 71 111 13 37 10 91-9 34 34 34 32 0 36-33 0-113-64-206 21-64 11-140-9-61-42-130t-136-155q-207-172-196-354 0 0 170 0t321 0h547z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path4" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 722.74458,1727.3607 c 16.40726,-109.4115 63.67577,-182.6701 199.96743,-309.9175 83.23649,-77.713 104.10369,-102.5993 129.91119,-154.9325 38.7086,-78.4943 53.3173,-152.8139 42.3597,-215.499 -7.3451,-42.0189 -5.7974,-51.49462 16.2498,-99.49011 29.0323,-63.20179 43.8935,-142.67319 32.3551,-173.02155 -6.0672,-15.95776 -14.4923,-21.25258 -33.8168,-21.25258 -32.2052,0 -37.9061,9.2458 -39.6909,64.37136 -0.7855,24.25677 -9.4727,62.15409 -19.3051,84.21629 -32.5474,73.0306 -72.41612,106.88849 -197.95463,168.10979 -150.88953,73.5842 -228.01818,143.0876 -298.61096,269.089 -47.61765,84.9931 -63.27682,101.2682 -80.68573,83.8592 -6.93497,-6.9349 -1.83237,-24.7258 18.68537,-65.149 31.8715,-62.792 32.79204,-95.3592 2.8157,-99.6156 -14.60744,-2.0742 -23.42111,4.3334 -34.71186,25.2359 -8.32328,15.4087 -25.37742,39.895 -37.8981,54.4138 -56.20367,65.1735 -161.78391,2.1435 -176.57684,-105.4139 -8.3618,-60.7976 10.55309,-105.8294 105.67285,-251.58186 102.82608,-157.56091 123.8202,-201.21193 124.04174,-257.90786 0.18267,-46.74605 30.82423,-124.20952 62.51052,-158.02983 l 17.97199,-19.18236 16.79537,21.35185 c 18.20256,23.14081 40.68698,27.44124 57.18992,10.9383 15.47223,-15.47223 13.27433,-27.96929 -19.34645,-110.00203 -27.52833,-69.22653 -54.37982,-180.16774 -45.706,-188.84156 5.77615,-5.77615 128.94222,79.11386 155.9892,107.51277 l 24.11642,25.32186 -35.49115,16.00428 c -44.41077,20.02646 -55.43387,38.54413 -37.87079,63.61895 16.49659,23.55217 27.89964,23.4312 78.03159,-0.82779 l 40.34981,-19.52543 13.0086,19.52543 c 8.43604,12.66218 21.72941,19.52542 37.81868,19.52542 20.06687,0 25.767,-4.56242 29.81528,-23.86441 17.49782,-83.42855 25.29925,-106.27688 48.89022,-143.18644 14.49044,-22.67122 29.64551,-41.22037 33.67793,-41.22037 13.11696,0 52.47762,58.6544 69.59962,103.71595 9.1944,24.19761 16.717,62.69816 16.717,85.5568 0,47.54783 10.6948,62.38827 44.9601,62.38827 29.3042,0 37.8281,-24.23251 30.4467,-86.5564 -5.6719,-47.89102 -10.5631,-47.04037 89.4746,-15.56102 145.9368,45.92263 280.8633,145.66447 363.2466,268.52305 69.6749,103.90646 133.4153,263.42643 166.6274,417.01043 20.2898,93.8263 32.0005,386.0828 21.5662,538.2111 l -6.3985,93.2881 H 1233.0542 716.56493 Z m -364.96444,-484.428 c 7.50025,-7.5002 13.63681,-20.4873 13.63681,-28.8602 0,-8.3729 9.94031,-24.5618 22.08958,-35.9755 24.88653,-23.3797 25.9875,-57.3133 2.33977,-72.1159 -31.07515,-19.4519 -86.83428,35.2232 -99.25463,97.3249 -9.16803,45.8402 29.76275,71.0525 61.18847,39.6267 z M 594.24473,803.14576 c 12.64983,-15.61639 23.03712,-18.99915 51.88393,-16.89673 29.40919,2.14342 38.62092,-1.01662 49.8983,-17.11734 7.60686,-10.86031 13.83067,-32.89524 13.83067,-48.9665 0,-19.4332 6.25147,-34.28259 18.66417,-44.33377 22.50576,-18.22407 16.93304,-57.22656 -9.36938,-65.57463 -55.67266,-17.66981 -191.53208,102.04858 -191.53208,168.77677 0,44.25275 38.9045,58.33278 66.62439,24.1122 z"
+     id="path14"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/ws.svg b/client/public/images/pieces/Ball/ws.svg
new file mode 100644 (file)
index 0000000..dfcd791
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg6"
+   sodipodi:docname="ws.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata12">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <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="namedview8"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6" />
+  <path
+     style="color:black;"
+     d="m1024 273h491q21 72 21 141 0 156-86 283t-223 187q-66 5-66 72 0 53 67 78 93 65 93 172 0 77-52 135t-126 67q-60 5-60 68 0 28 22 52 54 42 54 110 0 56-40 96t-95 40q-57 0-96-40t-40-96q0-67 54-110 22-22 22-52 0-63-59-68-75-9-126-67t-52-135q0-107 93-172 67-26 67-78 0-67-67-72-136-60-222-187t-86-283q0-74 21-141h491zm0-68h-540q-40 100-40 209 0 185 105 332t270 210q-71 33-115 99t-45 151q0 105 70 182t172 89q-81 61-81 161 0 84 59 144t145 60q84 0 144-60t60-144q0-100-81-161 102-12 172-89t70-182q0-84-45-150t-116-100q165-63 270-210t105-332q0-108-39-209h-540z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <path
+     style="color:black;"
+     d="m1024 1775h491q21-72 21-141 0-156-86-283t-223-187q-66-5-66-72 0-53 67-78 93-65 93-172 0-77-52-135t-126-67q-60-5-60-68 0-28 22-52 54-42 54-110 0-56-40-96t-95-40q-57 0-96 40t-40 96q0 67 54 110 22 22 22 52 0 63-59 68-75 9-126 67t-52 135q0 107 93 172 67 26 67 78 0 67-67 72-136 60-222 187t-86 283q0 74 21 141h491z"
+     fill-rule="nonzero"
+     display="block"
+     fill="#fff"
+     id="path4" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 530.51551,1757.722 c -11.56221,-18.4249 -13.98618,-183.0494 -3.44305,-233.8354 30.86336,-148.6681 167.86144,-314.2043 293.39179,-354.5085 42.10797,-13.5197 60.67979,-30.2303 67.35021,-60.6005 6.64553,-30.2569 -14.5735,-74.3868 -39.58439,-82.325 -50.41474,-16.001 -106.70711,-91.74529 -117.26813,-157.79033 -15.6993,-98.17803 66.46814,-209.49645 165.60947,-224.36361 72.1681,-10.82228 90.96067,-71.74246 40.02622,-129.75359 -50.0224,-56.97236 -58.11106,-112.21326 -25.04542,-171.04563 65.44593,-116.44533 240.88169,-69.48178 240.88169,64.4832 0,47.27635 -8.0535,66.94767 -44.6625,109.0922 -46.9025,53.99453 -27.483,114.40491 40.9006,127.23374 103.2185,19.36391 168.9829,99.55401 168.4527,205.40332 -0.349,69.65536 -29.6897,112.33403 -129.5206,188.399 -20.2268,15.4115 -26.4922,27.0447 -26.4922,49.1885 0,47.2555 7.0561,54.8616 84.6094,91.2043 181.5573,85.0807 300.613,287.9589 285.1599,485.9302 -2.7942,35.7966 -7.5365,73.8712 -10.5387,84.6102 l -5.4582,19.5254 h -488.7809 c -381.60888,0 -490.27335,-2.3785 -495.58789,-10.8475 z"
+     id="path14"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/wt.svg b/client/public/images/pieces/Ball/wt.svg
new file mode 100644 (file)
index 0000000..e2a5a23
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg34"
+   sodipodi:docname="wt.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata40">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs38" />
+  <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="namedview36"
+     showgrid="false"
+     inkscape:zoom="0.23046875"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg34" />
+  <path
+     style="color:black;"
+     d="m1024 1621q-57 0-96 40t-40 97q0 56 39 96t97 40q56 0 96-40t41-96q0-57-40-97t-97-40zm0 70q67 0 67 67 0 66-67 66-66 0-66-66 0-67 66-67zm509-1007q-193 49-505 49-320 0-511-50l15-96q195 46 496 46 299 0 488-45l17 96zm25 60 65 115q-48-19-98-19-134 0-214 109-60-50-134-50-96 0-153 75-64-70-153-70-72 0-132 49-84-107-217-107-51 0-101 19l70-120q194 56 533 56 345 0 534-57zm-448 239-85 489-85-483q3 2 14 10 23 45 70 45 51 0 66-45 6-6 20-16zm277-19v463l-165-454q19 7 32 18 20 25 54 25 40 0 64-35 3-4 7-8t8-9zm-562 14-164 449v-457q3 4 9 10 20 42 66 42 38 0 62-32 27-12 27-12zm-254-56-215 371 55-338q57-40 111-40 21 0 49 7zm903-5q23-7 51-7 61 0 114 38l55 346-220-377zm60-506-30 113q-196 43-480 43-281 0-479-43l-31-114q186 56 511 56 317 0 509-55zm106-128q-49-43-220-72t-394-29q-227 0-399 30t-217 75l63 240-28 157-88 153-85 622 49 19 274-462 6 550 68 12 209-553 112 595h69l112-593 207 551 69-12 6-550 275 463 47-22-83-619-89-153-28-159 65-243zm-81 36q-183 76-531 76-355 0-537-78 175-69 534-69 172 0 314 19t220 52zm-955 1252q-57 0-97 39t-40 97q0 56 40 96t97 40q56 0 96-40t40-96q0-57-40-96t-96-40zm0 70q66 0 66 66t-66 66q-67 0-67-66t67-66zm840 0q67 0 67 66t-67 66q-66 0-66-66t66-66zm0-70q-57 0-96 39t-40 97q0 56 39 96t97 40q57 0 97-40t40-96q0-57-40-96t-97-40zm-1208-110q-57 0-96 39t-40 97q0 56 39 96t97 41q57 0 97-40t40-97-40-96-97-40zm0 70q67 0 67 66 0 67-67 67-66 0-66-67 0-66 66-66zm1578 0q66 0 66 66 0 67-66 67-67 0-67-67 0-66 67-66zm0-70q-57 0-97 39t-40 97q0 56 40 96t97 41q56 0 96-40t40-97-40-96-96-40z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g32">
+    <path
+       style="color:black;"
+       d="m1024 357q67 0 67-67 0-66-67-66-66 0-66 66 0 67 66 67z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1533 1364q-193-49-505-49-320 0-511 50l15 96q195-46 496-46 299 0 488 45l17-96z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1558 1304 65-115q-48 19-98 19-134 0-214-109-60 50-134 50-96 0-153-75-64 70-153 70-72 0-132-49-84 107-217 107-51 0-101-19l70 120q194-56 533-56 345 0 534 57z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m1110 1065-85-489-85 483q3-2 14-10 23-45 70-45 51 0 66 45 6 6 20 16z"
+       display="block"
+       id="path10" />
+    <path
+       style="color:black;"
+       d="m1387 1084v-463l-165 454q19-7 32-18 20-25 54-25 40 0 64 35 3 4 7 8t8 9z"
+       display="block"
+       id="path12" />
+    <path
+       style="color:black;"
+       d="m825 1070-164-449v457q3-4 9-10 20-42 66-42 38 0 62 32 27 12 27 12z"
+       display="block"
+       id="path14" />
+    <path
+       style="color:black;"
+       d="m571 1126-215-371 55 338q57 40 111 40 21 0 49-7z"
+       display="block"
+       id="path16" />
+    <path
+       style="color:black;"
+       d="m1474 1131q23 7 51 7 61 0 114-38l55-346-220 377z"
+       display="block"
+       id="path18" />
+    <path
+       style="color:black;"
+       d="m1534 1637-30-113q-196-43-480-43-281 0-479 43l-31 114q186-56 511-56 317 0 509 55z"
+       display="block"
+       id="path20" />
+    <path
+       style="color:black;"
+       d="m1559 1729q-183-76-531-76-355 0-537 78 175 69 534 69 172 0 314-19t220-52z"
+       display="block"
+       id="path22" />
+    <path
+       style="color:black;"
+       d="m604 407q66 0 66-66t-66-66q-67 0-67 66t67 66z"
+       display="block"
+       id="path24" />
+    <path
+       style="color:black;"
+       d="m1444 407q67 0 67-66t-67-66q-66 0-66 66t66 66z"
+       display="block"
+       id="path26" />
+    <path
+       style="color:black;"
+       d="m236 517q67 0 67-66 0-67-67-67-66 0-66 67 0 66 66 66z"
+       display="block"
+       id="path28" />
+    <path
+       style="color:black;"
+       d="m1814 517q66 0 66-66 0-67-66-67-67 0-67 67 0 66 67 66z"
+       display="block"
+       id="path30" />
+  </g>
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 209.08584,512.48735 c -5.04076,-0.99113 -14.80347,-7.68734 -21.69492,-14.88046 -11.68421,-12.19569 -12.5299,-15.42603 -12.5299,-47.86128 0,-33.66656 0.44642,-35.18176 13.90981,-47.2113 23.94702,-21.39666 71.99101,-22.58681 93.85391,-2.32496 30.04512,27.84488 22.43336,94.51793 -12.45492,109.09518 -13.91991,5.81611 -40.61671,7.20716 -61.08398,3.18282 z"
+     id="path42"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 577.66146,402.44442 c -30.71593,-9.35977 -47.42412,-50.30499 -35.53808,-87.08986 7.98586,-24.71461 23.57903,-35.35751 55.14881,-37.64106 47.45137,-3.43232 70.08026,17.51893 70.04718,64.85411 -0.0174,24.77895 -10.22666,47.29994 -25.03497,55.22511 -12.49714,6.68826 -49.25621,9.33426 -64.62294,4.6517 z"
+     id="path44"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 992.84854,350.31749 c -18.28856,-7.68984 -25.52854,-17.20772 -30.7136,-40.37698 -6.19241,-27.6706 0.14512,-55.44183 16.00671,-70.14186 21.66878,-20.08194 70.46615,-18.83064 94.24605,2.41674 13.1817,11.77786 13.6598,13.42923 13.6598,47.18931 0,33.61718 -0.546,35.53034 -13.9712,48.95554 -12.3469,12.34689 -17.1392,14.11707 -41.2204,15.22599 -14.987,0.69014 -32.09033,-0.78079 -38.00736,-3.26874 z"
+     id="path46"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 1415.9763,400.72211 c -21.3755,-7.89802 -31.5611,-20.86452 -35.2317,-44.85059 -7.5667,-49.44536 16.4897,-79.05498 64.2143,-79.03766 38.8651,0.0141 64.1186,25.26754 64.1327,64.13262 0.01,25.73118 -9.8041,46.79338 -25.6106,54.96725 -19.5773,10.12381 -47.6713,12.11663 -67.5047,4.78838 z"
+     id="path48"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 1779.5275,509.14004 c -18.0881,-7.86794 -27.1831,-22.49559 -30.1198,-48.44208 -2.9839,-26.36363 5.3492,-52.19862 20.45,-63.40086 16.5539,-12.28014 58.1601,-14.7834 77.6813,-4.67374 41.8722,21.68487 40.4667,98.80445 -2.1252,116.60045 -18.6839,7.80664 -47.8317,7.76958 -65.8863,-0.0838 z"
+     id="path50"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 1098.4594,1054.3539 c -2.5809,-1.6601 -7.9887,-9.4504 -12.0172,-17.3119 -13.8954,-27.1165 -51.5691,-40.77071 -84.9209,-30.7783 -12.608,3.7775 -23.9727,12.0888 -37.18963,27.1977 -10.46831,11.9668 -19.7286,20.8841 -20.57845,19.8161 -1.14345,-1.4371 69.77088,-410.58807 79.99878,-461.56477 0.8523,-4.24823 19.8557,97.99754 42.2298,227.21282 22.374,129.21529 39.8904,235.72655 38.9252,236.69175 -0.9652,0.9652 -3.8666,0.3966 -6.4476,-1.2634 z"
+     id="path52"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 663.40964,853.91186 c 0.0963,-153.9586 1.45991,-215.8929 4.58555,-208.27118 19.61035,47.81868 153.68522,420.88132 151.26041,420.88132 -1.71119,0 -9.74577,-4.8499 -17.85462,-10.7776 -42.61589,-31.1529 -57.4587,-36.0492 -85.9908,-28.3663 -15.8716,4.2738 -29.67944,15.4489 -45.68498,36.9744 -5.73959,7.7191 -6.43746,-15.5345 -6.31556,-210.44064 z"
+     id="path54"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 483.43968,1127.0563 c -19.84874,-4.9847 -67.92911,-29.8593 -70.42812,-36.4363 -2.58632,-6.8069 -53.49038,-320.84852 -52.21425,-322.12466 0.60259,-0.60259 47.54132,79.04851 104.3083,177.00244 56.76697,97.95392 102.25022,179.06052 101.07389,180.23682 -4.39952,4.3995 -66.53206,5.3921 -82.73982,1.3217 z"
+     id="path56"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 1371.9082,1064.0668 c -24.7771,-32.4844 -72.951,-42.6391 -101.897,-21.479 -26.6104,19.4526 -40.347,27.9803 -42.1566,26.1708 -1.8138,-1.8138 149.0322,-419.91061 155.7885,-431.79589 2.0778,-3.65522 3.7576,91.92866 3.8317,218.0339 0.073,123.49831 -0.7449,224.54239 -1.8167,224.54239 -1.0718,0 -7.2592,-6.9625 -13.7499,-15.4722 z"
+     id="path58"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 1485.0589,1132.259 c -8.0184,-2.5557 1.3301,-20.207 99.1598,-187.22849 59.407,-101.42373 107.0002,-179.52543 105.7626,-173.55932 -1.2375,5.9661 -13.5287,82.49682 -27.3137,170.06826 l -25.0636,159.22075 -21.2977,11.5917 c -11.7138,6.3755 -31.353,14.269 -43.6427,17.5413 -22.8848,6.0933 -71.7681,7.4134 -87.6047,2.3658 z"
+     id="path60"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 459.45728,1246.3799 c -17.48574,-29.9459 -30.98236,-55.2571 -29.99249,-56.247 0.98988,-0.9898 12.44796,1.0892 25.46241,4.6201 13.30228,3.609 42.66025,6.4671 67.05246,6.5279 80.7446,0.2009 140.14372,-24.3503 195.6475,-80.8665 l 22.08817,-22.491 23.47115,14.818 c 49.7452,31.4055 111.25515,40.0009 165.76636,23.1641 27.72237,-8.5625 71.95266,-34.659 87.08746,-51.3829 7.549,-8.3415 7.9881,-8.1565 25.3566,10.6862 10.5738,11.4712 30.4518,25.4895 49.4783,34.8929 27.9062,13.792 36.8124,15.9802 72.6754,17.8561 48.8255,2.5538 88.418,-7.4178 123.6857,-31.1513 l 22.0339,-14.8277 31.5751,31.4652 c 36.9581,36.8295 78.8482,59.6044 129.2022,70.245 37.2549,7.8726 89.1743,5.9961 123.4585,-4.4621 11.8208,-3.6059 22.2148,-5.8338 23.0976,-4.9509 1.216,1.2159 -51.6055,97.4908 -58.1616,106.0081 -0.6886,0.8946 -22.3235,-3.4756 -48.0775,-9.7115 -250.2901,-60.6036 -741.3591,-59.833 -981.73581,1.5407 -18.77083,4.7926 -34.86012,8.7138 -35.75397,8.7138 -0.89386,0 -15.9317,-24.5012 -33.41744,-54.4472 z"
+     id="path62"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 531.08587,1445.0983 c -3.57034,-17.5263 -11.20493,-67.5018 -11.24292,-73.5955 -0.0811,-13.0011 135.92246,-35.992 277.66213,-46.9377 93.79147,-7.243 340.07572,-8.3141 436.06782,-1.8965 122.8302,8.2118 291.281,33.8087 295.3839,44.885 0.9916,2.6767 -1.6922,23.4159 -5.9639,46.0871 -6.7322,35.7296 -8.8974,41.1584 -16.2544,40.7552 -4.6682,-0.2558 -38.7521,-5.6218 -75.7419,-11.9244 -231.8009,-39.4958 -605.74635,-37.7049 -831.86715,3.984 -31.54727,5.8163 -59.21586,10.575 -61.48575,10.575 -2.26989,0 -5.22091,-5.3695 -6.55783,-11.9322 z"
+     id="path64"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 529.3171,1586.1153 c 7.21792,-26.8475 14.77604,-51.935 16.79583,-55.7499 6.53363,-12.3408 153.59869,-33.5508 296.87743,-42.8163 88.54143,-5.7258 274.30484,-5.7328 366.71814,-0.014 80.3066,4.9697 195.0415,18.2706 253.7061,29.4114 l 38.9265,7.3924 11.9297,43.27 c 18.7141,67.8774 18.9017,69.1805 9.417,65.4108 -16.0543,-6.381 -130.7321,-28.2661 -181.6403,-34.6643 -93.1187,-11.7031 -175.3734,-15.8084 -316.7458,-15.8084 -208.74325,0 -354.80697,13.4881 -472.76608,43.6569 -18.76248,4.7987 -34.61499,8.7248 -35.2278,8.7248 -0.61281,0 4.79136,-21.9661 12.00928,-48.8135 z"
+     id="path66"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 878.273,1795.4808 c -105.9941,-5.2713 -206.41387,-17.2105 -276.02215,-32.817 -46.31474,-10.384 -104.01105,-28.9686 -101.67388,-32.7502 3.58805,-5.8056 91.9873,-32.7754 138.55523,-42.2719 112.15777,-22.8722 214.58287,-31.1389 385.7297,-31.1321 174.6265,0.01 277.2556,8.1383 388.4645,30.7783 55.6286,11.3249 141.2747,38.3953 136.4713,43.1348 -11.3722,11.2207 -132.7348,39.035 -216.4282,49.6017 -124.5297,15.7224 -317.7774,22.2857 -455.0965,15.4564 z"
+     id="path68"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/wu.svg b/client/public/images/pieces/Ball/wu.svg
new file mode 100644 (file)
index 0000000..b2bfd22
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="wu.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <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="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.23046875"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <path
+     style="color:black;"
+     d="m1161 1706h170v137h274v-375l-222-171v-478l170-170v-205h153v-239h-1365v239h153v205l171 170v478l-222 171v375h273v-137h171v137h274v-137zm478-1330h-1230v-103h1230v103zm-155 204h-920v-136h920v136zm-170 717h-580v-478h580v478zm222 239v239h-137v-137h-308v137h-135v-137h-307v137h-137v-239h1024zm-77-887l-103 102h-663l-105-102h871zm-110 716l127 103h-904l128-103h649z"
+     fill-rule="nonzero"
+     transform="translate(0,2048) scale(1,-1)"
+     display="block"
+     fill="#000"
+     id="path2" />
+  <g
+     fill-rule="nonzero"
+     fill="#fff"
+     id="g12">
+    <path
+       style="color:black;"
+       d="m1639 1672h-1230v103h1230v-103z"
+       display="block"
+       id="path4" />
+    <path
+       style="color:black;"
+       d="m1484 1468h-920v136h920v-136z"
+       display="block"
+       id="path6" />
+    <path
+       style="color:black;"
+       d="m1314 751h-580v478h580v-478z"
+       display="block"
+       id="path8" />
+    <path
+       style="color:black;"
+       d="m1536 512v-239h-137v137h-308v-137h-135v137h-307v-137h-137v239h1024z"
+       display="block"
+       id="path10" />
+  </g>
+  <path
+     style="color:black;"
+     d="m1459 1399-103-102h-663l-105 102h871z"
+     fill-rule="nonzero"
+     display="block"
+     fill="#fff"
+     id="path14" />
+  <path
+     style="color:black;"
+     d="m1349 683 127-103h-904l128 103h649z"
+     fill-rule="nonzero"
+     display="block"
+     fill="#fff"
+     id="path16" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="M 515.47119,391.81017 V 272.48814 h 64.97456 64.97457 l 1.19492,68.33898 1.19493,68.33898 155.11864,1.13955 155.11865,1.13956 v -69.47854 -69.47853 h 65.08474 65.0847 v 69.42372 69.42373 h 156.2034 156.2034 v -69.42373 -69.42372 h 67.2543 67.2542 V 391.81017 511.1322 H 1025.3017 515.47119 Z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 637.90297,631.53898 -60.68466,-48.81356 222.95695,-1.12379 c 122.62632,-0.61809 323.83034,-0.61809 447.12004,0 l 224.1632,1.12379 -60.3665,48.74728 -60.3666,48.74727 -326.0689,0.0663 -326.06887,0.0663 z"
+     id="path28"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="M 736.75932,990.58983 V 754.11525 h 288.54238 288.5424 V 990.58983 1227.0644 H 1025.3017 736.75932 Z"
+     id="path30"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 643.47119,1346.6036 52.06779,-49.6746 329.83352,-0.2205 329.8334,-0.2204 49.7568,49.8983 49.7568,49.8983 H 1023.0614 591.40339 Z"
+     id="path32"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="M 566.09266,1601.6633 C 564.50169,1600.0723 563.2,1569.8079 563.2,1534.409 v -64.3615 h 459.9322 459.9322 v 67.2542 67.2542 h -457.0395 c -251.37179,0 -458.34128,-1.3017 -459.93224,-2.8926 z"
+     id="path34"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:4.33898306"
+     d="m 411.33559,1723.878 v -49.8983 h 613.96611 613.9661 v 49.8983 49.8983 H 1025.3017 411.33559 Z"
+     id="path36"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/ww.svg b/client/public/images/pieces/Ball/ww.svg
new file mode 100644 (file)
index 0000000..561449c
--- /dev/null
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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 64 64"
+   xml:space="preserve"
+   sodipodi:docname="ww.svg"
+   inkscape:version="0.92.2 2405546, 2018-03-11"><defs
+     id="defs18" /><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="1200"
+     id="namedview16"
+     showgrid="false"
+     inkscape:zoom="3.6875"
+     inkscape:cx="33.084746"
+     inkscape:cy="32"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Layer_1" /><g
+     id="wildebeest__x5F_line"
+     transform="matrix(0.86016949,0,0,0.89830508,4.0677966,3.2542373)"><path
+       d="m 63.2,42 c -0.5,-0.1 -0.9,0.2 -1.1,0.6 -0.4,1.2 -1.2,2.3 -1.6,2.3 -0.8,0 -1.5,-0.7 -1.5,-1.5 V 28.1 c 1,-0.4 1.9,-1 2.7,-1.8 C 63.1,24.9 63.9,22.9 64,21 64,20.7 63.9,20.5 63.7,20.3 63.5,20.1 63.3,20 63,20 H 59 V 13.5 C 59,6.1 52.9,0 45.5,0 37.9,0 34.2,3.7 32.4,7 H 31.6 C 29.8,3.7 26.1,0 18.5,0 11.1,0 5,6.1 5,13.5 V 20 H 1 C 0.7,20 0.5,20.1 0.3,20.3 0.1,20.5 0,20.8 0,21.1 0.1,23 1,24.9 2.3,26.4 3.1,27.2 4,27.8 5,28.1 V 43.4 C 5,44.3 4.3,45 3.5,45 3.2,45 2.4,43.9 1.9,42.7 1.7,42.2 1.3,42 0.8,42.1 0.3,42.1 0,42.5 0,43 v 2.5 c 0,2 0.8,3.9 2.3,5.2 C 3.4,51.8 5.5,53 9,53 h 1.1 C 18,52.4 18,47.6 18,45.5 v -0.6 c 0.1,0 0.2,0.1 0.3,0.1 L 24,59.2 c 0.1,2.9 2.4,4.8 6,4.8 h 4 c 3.6,0 5.9,-1.9 6,-4.8 l 5.7,-14.3 c 0.1,0 0.2,-0.1 0.3,-0.1 v 0.6 c 0,2.1 0,6.9 7.9,7.5 H 55 c 3.4,0 5.5,-1.2 6.7,-2.3 1.5,-1.4 2.3,-3.2 2.3,-5.2 V 43 c 0,-0.5 -0.3,-0.9 -0.8,-1 z m -9.1,9 C 48,50.5 48,47.5 48,45.5 V 44 43.8 c 1.9,-1.6 3,-4.6 3,-6.8 V 25.7 c 0.1,0.2 0.2,0.3 0.4,0.5 1.3,1.4 3.1,2.3 5,2.4 H 57 v 14.9 c 0,1.9 1.6,3.5 3.5,3.5 0.5,0 1,-0.2 1.4,-0.5 -0.2,1.1 -0.7,2 -1.5,2.8 -1.5,1.3 -3.6,1.9 -6.3,1.7 z M 35.2,61.9 C 34.8,62 34.5,62 34.3,62 H 29.7 C 29.4,62 29.1,62 28.8,61.9 28,61.8 27.1,61.4 26.5,60.7 26.2,60.3 26,59.7 26,59 h 12 c 0,0.7 -0.2,1.3 -0.5,1.7 -0.6,0.7 -1.5,1.1 -2.3,1.2 z M 16,44 v 1.5 c 0,2 0,5.1 -6.1,5.5 C 7.2,51.2 5,50.6 3.6,49.3 2.8,48.5 2.3,47.6 2.1,46.5 2.5,46.8 3,47 3.5,47 5.4,47 7,45.4 7,43.5 V 28.6 h 0.6 c 1.9,-0.1 3.7,-1 5,-2.4 0.1,-0.2 0.3,-0.3 0.4,-0.5 V 37 c 0,2.2 1.2,5.1 3,6.8 z M 5,22 h 7.4 c -0.1,1 -0.6,2 -1.3,2.8 -0.9,1 -2.2,1.7 -3.6,1.7 H 7 C 6.7,26.5 6.3,26.4 6,26.3 5.7,26.2 5.3,26 5,25.8 4.6,25.5 4.2,25.2 3.8,24.8 3,24 2.4,22.9 2.2,21.8 H 5 Z M 7,13.5 C 7,7.2 12.2,2 18.5,2 23.4,2 27,3.7 29.3,7 H 19 c -3.3,0 -6,2.7 -6,6 v 7 H 7 Z M 45.5,2 C 51.8,2 57,7.2 57,13.5 V 20 H 51 V 13 C 51,9.7 48.3,7 45,7 H 34.7 C 37,3.7 40.6,2 45.5,2 Z M 59,25.9 c -0.3,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.2 -1,0.2 H 56.5 C 55.1,26.5 53.8,25.9 52.9,24.9 52.2,24 51.7,23 51.6,22 h 10.2 c -0.3,1.1 -0.8,2.1 -1.6,3 -0.4,0.3 -0.8,0.7 -1.2,0.9 z M 33.4,9 H 45 c 2.2,0 4,1.8 4,4 v 7 h -5 c -2.2,0 -4.1,1.2 -5.2,3 -0.5,0.9 -0.8,1.9 -0.8,3 v 20 h -1 c -2.1,0 -3.9,1.1 -5,2.7 C 30.9,47.1 29.1,46 27,46 H 26 V 26 c 0,-1.1 -0.3,-2.1 -0.8,-3 -1,-1.8 -3,-3 -5.2,-3 h -5 v -7 c 0,-2.2 1.8,-4 4,-4 z M 29,50 H 26.1 C 26,49.7 26,49.3 26,49 v -1 h 1 c 2.2,0 4,1.8 4,4 v 1 h -1 c -1,0 -1.9,-0.4 -2.6,-1 H 29 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z m 4,2 c 0,-2.2 1.8,-4 4,-4 h 1 v 1 c 0,0.3 -0.1,0.7 -0.1,1 H 35 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 1.6 C 35.9,52.6 35,53 34,53 H 33 Z M 17.6,42.4 C 16.2,41.4 15,38.9 15,37 V 22 h 5 c 2.2,0 4,1.8 4,4 v 23 c 0,1.2 0.4,2.4 1,3.3 1.1,1.6 2.9,2.7 5,2.7 h 1 v 2 H 25.3 L 25,56.3 19.9,43.6 C 19.8,43.2 19.4,43 19,43 18.5,43 18.1,42.8 17.6,42.4 Z M 44.1,43.6 39,56.3 38.7,57 H 33 v -2 h 1 c 2.1,0 3.9,-1.1 5,-2.7 0.6,-1 1,-2.1 1,-3.3 V 26 c 0,-2.2 1.8,-4 4,-4 h 5 v 15 c 0,1.9 -1.2,4.4 -2.6,5.4 -0.5,0.4 -0.9,0.6 -1.4,0.6 -0.4,0 -0.8,0.2 -0.9,0.6 z"
+       id="path2"
+       inkscape:connector-curvature="0" /><circle
+       cx="19"
+       cy="28"
+       r="2"
+       id="circle4" /><circle
+       cx="45"
+       cy="28"
+       r="2"
+       id="circle6" /><path
+       d="m 28,13 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 9 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path8"
+       inkscape:connector-curvature="0" /><path
+       d="m 37,17 h -9 c -0.2,0 -0.4,0.1 -0.6,0.2 C 27.2,17.4 27,17.7 27,18 v 0.2 c 0.1,0.5 0.5,0.8 1,0.8 h 9 c 0.1,0 0.2,0 0.3,-0.1 0.4,-0.1 0.7,-0.5 0.7,-0.9 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path10"
+       inkscape:connector-curvature="0" /></g><metadata
+     id="metadata13"><rdf:RDF><rdf:Description
+         about="https://iconscout.com/legal#licenses"
+         dc:title="wildebeest"
+         dc:description="wildebeest"
+         dc:publisher="Iconscout"
+         dc:date="2017-09-06"
+         dc:format="image/svg+xml"
+         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><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><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 10.093588,18.454237 c 0.0077,-3.714673 0.376945,-5.860183 1.348243,-7.833169 1.424016,-2.8925858 4.235339,-4.8812246 7.606113,-5.3803177 1.656005,-0.245196 4.701309,0.2872518 6.351287,1.1104732 C 26.686798,6.9936277 28.8,8.766749 28.8,9.2047016 c 0,0.1098421 -2.288136,0.2376181 -5.084746,0.2839463 -5.681624,0.094121 -5.960615,0.1792924 -7.593841,2.3182781 -0.726819,0.951891 -0.747278,1.078129 -0.832028,5.133633 l -0.08689,4.157746 h -2.557182 -2.557181 z"
+     id="path20"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 9.4355826,26.775344 C 8.4616968,26.492285 6.9801261,25.089083 6.5443628,24.037057 6.3651498,23.604399 6.2654554,23.2044 6.3228198,23.148171 c 0.057364,-0.05623 1.9042988,-0.03439 4.1042992,0.04853 2.856587,0.107666 4,0.244191 4,0.477606 0,0.591465 -1.206694,2.131732 -2.03482,2.597316 -1.104972,0.621232 -2.017524,0.776699 -2.9567164,0.503724 z"
+     id="path22"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 23.803073,48.827119 c -2.588428,-6.785887 -2.746436,-7.118644 -3.380245,-7.118644 -0.80888,0 -1.830981,-0.987584 -2.582115,-2.494915 l -0.70173,-1.408188 v -7.268787 -7.268788 h 2.74764 2.74764 l 0.913377,0.968461 0.913377,0.968462 v 10.791134 c 0,6.094542 0.118597,11.416495 0.272495,12.227996 0.472313,2.490496 2.221382,4.174016 4.676657,4.501389 1.197747,0.159702 1.288136,0.226389 1.288136,0.950376 v 0.778622 H 28.323901 25.949497 Z M 21.72947,29.604106 c 0.30913,-0.392996 0.562055,-0.925691 0.562055,-1.183767 0,-0.837595 -1.060709,-1.898305 -1.898305,-1.898305 -0.837595,0 -1.898305,1.06071 -1.898305,1.898305 0,0.258076 0.252925,0.790771 0.562056,1.183767 0.755229,0.960119 1.917269,0.960119 2.672499,0 z"
+     id="path24"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 30.606223,45.782668 c -0.765195,-0.743937 -2.301372,-1.362329 -3.384233,-1.362329 -0.561728,0 -0.56653,-0.072 -0.646503,-9.694915 l -0.08057,-9.694916 -0.743363,-1.264534 C 24.562004,21.742431 23.5116,21.258072 20.054239,21.138841 l -2.915254,-0.100535 v -3.508891 c 0,-3.849925 0.222059,-4.646423 1.545461,-5.543381 0.718027,-0.486655 1.423074,-0.514848 12.875229,-0.514848 11.826939,0 12.133851,0.01338 12.881358,0.561651 1.406088,1.031315 1.714012,2.062852 1.714481,5.743434 l 4.2e-4,3.322034 h -2.654403 c -3.221159,0 -4.612633,0.566538 -5.884343,2.395808 L 36.8,24.669581 l -0.07745,9.875379 -0.07745,9.875379 -0.600513,0.0016 c -1.161882,0.0029 -2.658754,0.578804 -3.558981,1.369212 -0.500359,0.439322 -0.95465,0.785603 -1.009536,0.769514 -0.05489,-0.01608 -0.446315,-0.366148 -0.869841,-0.77791 z m 5.90322,-25.652886 c 0.509563,-0.509563 0.542694,-0.97595 0.100726,-1.417918 -0.455568,-0.455568 -8.656296,-0.455568 -9.111864,0 -0.472022,0.472022 -0.398954,1.231917 0.149153,1.55116 0.261846,0.152511 2.258902,0.280112 4.455205,0.284662 3.264903,0.0068 4.057253,-0.06838 4.40678,-0.417904 z m 0.294687,-3.925847 c 0.378539,-1.19267 -0.171196,-1.342918 -4.913525,-1.342918 h -4.436204 l -0.16629,0.662553 c -0.09146,0.364404 -0.08658,0.791523 0.01084,0.949153 0.113111,0.18302 1.830892,0.286599 4.753017,0.286599 4.373459,0 4.583689,-0.02457 4.752163,-0.555387 z"
+     id="path26"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 48.011313,17.05317 C 47.919797,13.05838 47.908472,12.993571 47.101331,11.845839 45.629876,9.7534731 45.103972,9.5916979 39.271528,9.4372881 L 34.149835,9.3016949 35.339324,8.1069361 c 1.507181,-1.5138575 3.361928,-2.3691566 5.982963,-2.7589871 4.601839,-0.6844383 8.618738,1.4739868 10.638513,5.716458 0.805713,1.692372 0.842876,1.927739 0.931335,5.898305 l 0.09214,4.135593 H 50.54413 48.103986 Z"
+     id="path28"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 51.028069,26.454237 c -1.062276,-0.536169 -2.409652,-2.192245 -2.426998,-2.983051 -0.0025,-0.111864 1.887065,-0.203389 4.198929,-0.203389 2.311864,0 4.20339,0.06904 4.20339,0.153421 0,0.724978 -1.661574,2.683539 -2.766194,3.26062 -1.023364,0.53463 -1.809424,0.47888 -3.209127,-0.227601 z"
+     id="path30"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 49.681356,48.858546 c -1.611294,-0.307665 -2.465437,-0.733788 -3.240682,-1.616743 -0.747978,-0.8519 -0.826643,-1.116269 -0.82218,-2.763104 0.0043,-1.570257 0.116704,-1.986024 0.816451,-3.018728 1.399229,-2.065018 1.619292,-3.334736 1.619292,-9.342979 V 26.691747 L 48.8,27.406064 c 0.871301,0.834562 2.471159,1.556648 3.448917,1.556648 h 0.686676 v 6.942067 c 0,5.863432 0.06889,7.087232 0.443348,7.876352 0.502746,1.059459 1.581008,1.723954 2.797422,1.723954 0.978677,0 0.994576,0.07166 0.274428,1.236885 -0.971252,1.571518 -4.251927,2.597275 -6.769435,2.116576 z"
+     id="path32"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 28.257627,58.601701 c -0.716904,-0.262068 -1.627119,-1.243293 -1.627119,-1.754057 0,-0.461606 0.341385,-0.495102 5.045964,-0.495102 4.489843,0 5.027821,0.04728 4.881356,0.42896 -0.09053,0.235927 -0.164608,0.542806 -0.164608,0.681952 0,0.139146 -0.39661,0.494811 -0.881356,0.790366 -0.744456,0.453904 -1.344708,0.534205 -3.864406,0.516977 -1.640678,-0.01122 -3.166102,-0.08731 -3.389831,-0.169096 z"
+     id="path34"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 28.549335,50.404863 c -0.288636,-0.182676 -0.185827,-0.2673 0.40678,-0.334831 0.646935,-0.07372 0.809528,-0.234833 0.88255,-0.874505 0.112283,-0.983609 -0.283444,-1.240336 -1.920021,-1.245612 -1.192113,-0.0038 -1.288136,-0.05469 -1.288136,-0.682118 0,-0.591134 0.118902,-0.677966 0.928346,-0.677966 1.587164,0 3.129479,1.832733 3.137939,3.728813 0.0018,0.394373 -1.561395,0.457133 -2.147458,0.08622 z"
+     id="path36"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 32.679763,49.505248 c 0.205834,-1.534611 1.641624,-2.915417 3.031509,-2.915417 0.835886,0 0.953135,0.0834 0.953135,0.677966 0,0.62417 -0.09825,0.677966 -1.238167,0.677966 -1.460703,0 -2.287257,0.375846 -2.287257,1.04005 0,0.676849 0.535125,1.128746 1.342373,1.133594 0.546053,0.0033 0.605953,0.05945 0.284746,0.267034 -0.223729,0.144584 -0.819458,0.26475 -1.323843,0.267033 l -0.917063,0.0042 z"
+     id="path38"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 9.9525425,48.793515 C 8.6071711,48.438561 7.4519295,47.728962 6.8552783,46.891042 6.0647597,45.780861 6.1468422,45.505085 7.2677967,45.505085 c 0.7486873,0 1.1912116,-0.214941 1.8983051,-0.922034 l 0.9220342,-0.922034 v -7.349153 -7.349152 h 0.822269 c 1.069545,0 2.348849,-0.546949 3.448917,-1.474537 l 0.881356,-0.743168 v 5.684927 c 0,6.222343 0.132493,6.970583 1.61614,9.12699 0.665318,0.967007 0.824457,1.477007 0.824117,2.64109 -5.97e-4,2.008069 -0.658172,3.196688 -2.189083,3.95688 -1.350714,0.670712 -4.180936,0.997006 -5.5393095,0.638621 z"
+     id="path23"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 32.59661,53.686172 c 0,-0.739533 0.08316,-0.800211 1.321907,-0.964537 1.645288,-0.218253 3.284148,-1.359924 3.988171,-2.778255 0.48172,-0.970477 0.530516,-1.915837 0.656024,-12.709482 0.14434,-12.413236 0.132124,-12.305973 1.526383,-13.402697 0.615878,-0.48445 1.093395,-0.563404 3.407485,-0.563404 h 2.691232 l -0.08374,7.38983 c -0.08,7.059811 -0.110979,7.440805 -0.693741,8.531245 -0.725945,1.358359 -1.911046,2.519603 -2.571368,2.519603 -0.67206,0 -0.80848,0.279561 -3.308333,6.779661 l -2.242337,5.830508 -2.345843,0.07835 -2.345844,0.07836 z M 43.986441,29.776271 c 1.119952,-1.119952 0.319595,-3.254237 -1.220339,-3.254237 -0.372882,0 -0.922034,0.244068 -1.220339,0.542373 -1.119952,1.119952 -0.319596,3.254237 1.220339,3.254237 0.372881,0 0.922034,-0.244068 1.220339,-0.542373 z"
+     id="path25"
+     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/wy.svg b/client/public/images/pieces/Ball/wy.svg
new file mode 100644 (file)
index 0000000..e86bfe4
--- /dev/null
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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 64 64"
+   xml:space="preserve"
+   sodipodi:docname="wy.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
+     id="defs18" /><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="namedview16"
+     showgrid="false"
+     inkscape:zoom="10.429825"
+     inkscape:cx="33.627119"
+     inkscape:cy="32"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="Layer_1" /><g
+     id="wildebeest__x5F_line"
+     transform="matrix(0.86016949,0,0,0.89830508,4.0677966,3.2542373)"><path
+       d="m 63.2,42 c -0.5,-0.1 -0.9,0.2 -1.1,0.6 -0.4,1.2 -1.2,2.3 -1.6,2.3 -0.8,0 -1.5,-0.7 -1.5,-1.5 V 28.1 c 1,-0.4 1.9,-1 2.7,-1.8 C 63.1,24.9 63.9,22.9 64,21 64,20.7 63.9,20.5 63.7,20.3 63.5,20.1 63.3,20 63,20 H 59 V 13.5 C 59,6.1 52.9,0 45.5,0 37.9,0 34.2,3.7 32.4,7 H 31.6 C 29.8,3.7 26.1,0 18.5,0 11.1,0 5,6.1 5,13.5 V 20 H 1 C 0.7,20 0.5,20.1 0.3,20.3 0.1,20.5 0,20.8 0,21.1 0.1,23 1,24.9 2.3,26.4 3.1,27.2 4,27.8 5,28.1 V 43.4 C 5,44.3 4.3,45 3.5,45 3.2,45 2.4,43.9 1.9,42.7 1.7,42.2 1.3,42 0.8,42.1 0.3,42.1 0,42.5 0,43 v 2.5 c 0,2 0.8,3.9 2.3,5.2 C 3.4,51.8 5.5,53 9,53 h 1.1 C 18,52.4 18,47.6 18,45.5 v -0.6 c 0.1,0 0.2,0.1 0.3,0.1 L 24,59.2 c 0.1,2.9 2.4,4.8 6,4.8 h 4 c 3.6,0 5.9,-1.9 6,-4.8 l 5.7,-14.3 c 0.1,0 0.2,-0.1 0.3,-0.1 v 0.6 c 0,2.1 0,6.9 7.9,7.5 H 55 c 3.4,0 5.5,-1.2 6.7,-2.3 1.5,-1.4 2.3,-3.2 2.3,-5.2 V 43 c 0,-0.5 -0.3,-0.9 -0.8,-1 z m -9.1,9 C 48,50.5 48,47.5 48,45.5 V 44 43.8 c 1.9,-1.6 3,-4.6 3,-6.8 V 25.7 c 0.1,0.2 0.2,0.3 0.4,0.5 1.3,1.4 3.1,2.3 5,2.4 H 57 v 14.9 c 0,1.9 1.6,3.5 3.5,3.5 0.5,0 1,-0.2 1.4,-0.5 -0.2,1.1 -0.7,2 -1.5,2.8 -1.5,1.3 -3.6,1.9 -6.3,1.7 z M 35.2,61.9 C 34.8,62 34.5,62 34.3,62 H 29.7 C 29.4,62 29.1,62 28.8,61.9 28,61.8 27.1,61.4 26.5,60.7 26.2,60.3 26,59.7 26,59 h 12 c 0,0.7 -0.2,1.3 -0.5,1.7 -0.6,0.7 -1.5,1.1 -2.3,1.2 z M 16,44 v 1.5 c 0,2 0,5.1 -6.1,5.5 C 7.2,51.2 5,50.6 3.6,49.3 2.8,48.5 2.3,47.6 2.1,46.5 2.5,46.8 3,47 3.5,47 5.4,47 7,45.4 7,43.5 V 28.6 h 0.6 c 1.9,-0.1 3.7,-1 5,-2.4 0.1,-0.2 0.3,-0.3 0.4,-0.5 V 37 c 0,2.2 1.2,5.1 3,6.8 z M 5,22 h 7.4 c -0.1,1 -0.6,2 -1.3,2.8 -0.9,1 -2.2,1.7 -3.6,1.7 H 7 C 6.7,26.5 6.3,26.4 6,26.3 5.7,26.2 5.3,26 5,25.8 4.6,25.5 4.2,25.2 3.8,24.8 3,24 2.4,22.9 2.2,21.8 H 5 Z M 7,13.5 C 7,7.2 12.2,2 18.5,2 23.4,2 27,3.7 29.3,7 H 19 c -3.3,0 -6,2.7 -6,6 v 7 H 7 Z M 45.5,2 C 51.8,2 57,7.2 57,13.5 V 20 H 51 V 13 C 51,9.7 48.3,7 45,7 H 34.7 C 37,3.7 40.6,2 45.5,2 Z M 59,25.9 c -0.3,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.2 -1,0.2 H 56.5 C 55.1,26.5 53.8,25.9 52.9,24.9 52.2,24 51.7,23 51.6,22 h 10.2 c -0.3,1.1 -0.8,2.1 -1.6,3 -0.4,0.3 -0.8,0.7 -1.2,0.9 z M 33.4,9 H 45 c 2.2,0 4,1.8 4,4 v 7 h -5 c -2.2,0 -4.1,1.2 -5.2,3 -0.5,0.9 -0.8,1.9 -0.8,3 v 20 h -1 c -2.1,0 -3.9,1.1 -5,2.7 C 30.9,47.1 29.1,46 27,46 H 26 V 26 c 0,-1.1 -0.3,-2.1 -0.8,-3 -1,-1.8 -3,-3 -5.2,-3 h -5 v -7 c 0,-2.2 1.8,-4 4,-4 z M 29,50 H 26.1 C 26,49.7 26,49.3 26,49 v -1 h 1 c 2.2,0 4,1.8 4,4 v 1 h -1 c -1,0 -1.9,-0.4 -2.6,-1 H 29 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z m 4,2 c 0,-2.2 1.8,-4 4,-4 h 1 v 1 c 0,0.3 -0.1,0.7 -0.1,1 H 35 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 1.6 C 35.9,52.6 35,53 34,53 H 33 Z M 17.6,42.4 C 16.2,41.4 15,38.9 15,37 V 22 h 5 c 2.2,0 4,1.8 4,4 v 23 c 0,1.2 0.4,2.4 1,3.3 1.1,1.6 2.9,2.7 5,2.7 h 1 v 2 H 25.3 L 25,56.3 19.9,43.6 C 19.8,43.2 19.4,43 19,43 18.5,43 18.1,42.8 17.6,42.4 Z M 44.1,43.6 39,56.3 38.7,57 H 33 v -2 h 1 c 2.1,0 3.9,-1.1 5,-2.7 0.6,-1 1,-2.1 1,-3.3 V 26 c 0,-2.2 1.8,-4 4,-4 h 5 v 15 c 0,1.9 -1.2,4.4 -2.6,5.4 -0.5,0.4 -0.9,0.6 -1.4,0.6 -0.4,0 -0.8,0.2 -0.9,0.6 z"
+       id="path2"
+       inkscape:connector-curvature="0" /><circle
+       cx="19"
+       cy="28"
+       r="2"
+       id="circle4" /><circle
+       cx="45"
+       cy="28"
+       r="2"
+       id="circle6" /><path
+       d="m 28,13 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 9 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path8"
+       inkscape:connector-curvature="0" /><path
+       d="m 37,17 h -9 c -0.2,0 -0.4,0.1 -0.6,0.2 C 27.2,17.4 27,17.7 27,18 v 0.2 c 0.1,0.5 0.5,0.8 1,0.8 h 9 c 0.1,0 0.2,0 0.3,-0.1 0.4,-0.1 0.7,-0.5 0.7,-0.9 0,-0.6 -0.4,-1 -1,-1 z"
+       id="path10"
+       inkscape:connector-curvature="0" /></g><metadata
+     id="metadata13"><rdf:RDF><rdf:Description
+         about="https://iconscout.com/legal#licenses"
+         dc:title="wildebeest"
+         dc:description="wildebeest"
+         dc:publisher="Iconscout"
+         dc:date="2017-09-06"
+         dc:format="image/svg+xml"
+         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 10.093588,18.454237 c 0.0077,-3.714673 0.376945,-5.860183 1.348243,-7.833169 1.424016,-2.8925858 4.235339,-4.8812246 7.606113,-5.3803177 1.656005,-0.245196 4.701309,0.2872518 6.351287,1.1104732 C 26.686798,6.9936277 28.8,8.766749 28.8,9.2047016 c 0,0.1098421 -2.288136,0.2376181 -5.084746,0.2839463 -5.681624,0.094121 -5.960615,0.1792924 -7.593841,2.3182781 -0.726819,0.951891 -0.747278,1.078129 -0.832028,5.133633 l -0.08689,4.157746 h -2.557182 -2.557181 z"
+     id="path20"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 9.4355826,26.775344 C 8.4616968,26.492285 6.9801261,25.089083 6.5443628,24.037057 6.3651498,23.604399 6.2654554,23.2044 6.3228198,23.148171 c 0.057364,-0.05623 1.9042988,-0.03439 4.1042992,0.04853 2.856587,0.107666 4,0.244191 4,0.477606 0,0.591465 -1.206694,2.131732 -2.03482,2.597316 -1.104972,0.621232 -2.017524,0.776699 -2.9567164,0.503724 z"
+     id="path22"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 23.803073,48.827119 c -2.588428,-6.785887 -2.746436,-7.118644 -3.380245,-7.118644 -0.80888,0 -1.830981,-0.987584 -2.582115,-2.494915 l -0.70173,-1.408188 v -7.268787 -7.268788 h 2.74764 2.74764 l 0.913377,0.968461 0.913377,0.968462 v 10.791134 c 0,6.094542 0.118597,11.416495 0.272495,12.227996 0.472313,2.490496 2.221382,4.174016 4.676657,4.501389 1.197747,0.159702 1.288136,0.226389 1.288136,0.950376 v 0.778622 H 28.323901 25.949497 Z M 21.72947,29.604106 c 0.30913,-0.392996 0.562055,-0.925691 0.562055,-1.183767 0,-0.837595 -1.060709,-1.898305 -1.898305,-1.898305 -0.837595,0 -1.898305,1.06071 -1.898305,1.898305 0,0.258076 0.252925,0.790771 0.562056,1.183767 0.755229,0.960119 1.917269,0.960119 2.672499,0 z"
+     id="path24"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 30.606223,45.782668 c -0.765195,-0.743937 -2.301372,-1.362329 -3.384233,-1.362329 -0.561728,0 -0.56653,-0.072 -0.646503,-9.694915 l -0.08057,-9.694916 -0.743363,-1.264534 C 24.562004,21.742431 23.5116,21.258072 20.054239,21.138841 l -2.915254,-0.100535 v -3.508891 c 0,-3.849925 0.222059,-4.646423 1.545461,-5.543381 0.718027,-0.486655 1.423074,-0.514848 12.875229,-0.514848 11.826939,0 12.133851,0.01338 12.881358,0.561651 1.406088,1.031315 1.714012,2.062852 1.714481,5.743434 l 4.2e-4,3.322034 h -2.654403 c -3.221159,0 -4.612633,0.566538 -5.884343,2.395808 L 36.8,24.669581 l -0.07745,9.875379 -0.07745,9.875379 -0.600513,0.0016 c -1.161882,0.0029 -2.658754,0.578804 -3.558981,1.369212 -0.500359,0.439322 -0.95465,0.785603 -1.009536,0.769514 -0.05489,-0.01608 -0.446315,-0.366148 -0.869841,-0.77791 z m 5.90322,-25.652886 c 0.509563,-0.509563 0.542694,-0.97595 0.100726,-1.417918 -0.455568,-0.455568 -8.656296,-0.455568 -9.111864,0 -0.472022,0.472022 -0.398954,1.231917 0.149153,1.55116 0.261846,0.152511 2.258902,0.280112 4.455205,0.284662 3.264903,0.0068 4.057253,-0.06838 4.40678,-0.417904 z m 0.294687,-3.925847 c 0.378539,-1.19267 -0.171196,-1.342918 -4.913525,-1.342918 h -4.436204 l -0.16629,0.662553 c -0.09146,0.364404 -0.08658,0.791523 0.01084,0.949153 0.113111,0.18302 1.830892,0.286599 4.753017,0.286599 4.373459,0 4.583689,-0.02457 4.752163,-0.555387 z"
+     id="path26"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 48.011313,17.05317 C 47.919797,13.05838 47.908472,12.993571 47.101331,11.845839 45.629876,9.7534731 45.103972,9.5916979 39.271528,9.4372881 L 34.149835,9.3016949 35.339324,8.1069361 c 1.507181,-1.5138575 3.361928,-2.3691566 5.982963,-2.7589871 4.601839,-0.6844383 8.618738,1.4739868 10.638513,5.716458 0.805713,1.692372 0.842876,1.927739 0.931335,5.898305 l 0.09214,4.135593 H 50.54413 48.103986 Z"
+     id="path28"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 51.028069,26.454237 c -1.062276,-0.536169 -2.409652,-2.192245 -2.426998,-2.983051 -0.0025,-0.111864 1.887065,-0.203389 4.198929,-0.203389 2.311864,0 4.20339,0.06904 4.20339,0.153421 0,0.724978 -1.661574,2.683539 -2.766194,3.26062 -1.023364,0.53463 -1.809424,0.47888 -3.209127,-0.227601 z"
+     id="path30"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 49.681356,48.858546 c -1.611294,-0.307665 -2.465437,-0.733788 -3.240682,-1.616743 -0.747978,-0.8519 -0.826643,-1.116269 -0.82218,-2.763104 0.0043,-1.570257 0.116704,-1.986024 0.816451,-3.018728 1.399229,-2.065018 1.619292,-3.334736 1.619292,-9.342979 V 26.691747 L 48.8,27.406064 c 0.871301,0.834562 2.471159,1.556648 3.448917,1.556648 h 0.686676 v 6.942067 c 0,5.863432 0.06889,7.087232 0.443348,7.876352 0.502746,1.059459 1.581008,1.723954 2.797422,1.723954 0.978677,0 0.994576,0.07166 0.274428,1.236885 -0.971252,1.571518 -4.251927,2.597275 -6.769435,2.116576 z"
+     id="path32"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 28.257627,58.601701 c -0.716904,-0.262068 -1.627119,-1.243293 -1.627119,-1.754057 0,-0.461606 0.341385,-0.495102 5.045964,-0.495102 4.489843,0 5.027821,0.04728 4.881356,0.42896 -0.09053,0.235927 -0.164608,0.542806 -0.164608,0.681952 0,0.139146 -0.39661,0.494811 -0.881356,0.790366 -0.744456,0.453904 -1.344708,0.534205 -3.864406,0.516977 -1.640678,-0.01122 -3.166102,-0.08731 -3.389831,-0.169096 z"
+     id="path34"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 28.549335,50.404863 c -0.288636,-0.182676 -0.185827,-0.2673 0.40678,-0.334831 0.646935,-0.07372 0.809528,-0.234833 0.88255,-0.874505 0.112283,-0.983609 -0.283444,-1.240336 -1.920021,-1.245612 -1.192113,-0.0038 -1.288136,-0.05469 -1.288136,-0.682118 0,-0.591134 0.118902,-0.677966 0.928346,-0.677966 1.587164,0 3.129479,1.832733 3.137939,3.728813 0.0018,0.394373 -1.561395,0.457133 -2.147458,0.08622 z"
+     id="path36"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 32.679763,49.505248 c 0.205834,-1.534611 1.641624,-2.915417 3.031509,-2.915417 0.835886,0 0.953135,0.0834 0.953135,0.677966 0,0.62417 -0.09825,0.677966 -1.238167,0.677966 -1.460703,0 -2.287257,0.375846 -2.287257,1.04005 0,0.676849 0.535125,1.128746 1.342373,1.133594 0.546053,0.0033 0.605953,0.05945 0.284746,0.267034 -0.223729,0.144584 -0.819458,0.26475 -1.323843,0.267033 l -0.917063,0.0042 z"
+     id="path38"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="M 9.9525425,48.793515 C 8.6071711,48.438561 7.4519295,47.728962 6.8552783,46.891042 6.0647597,45.780861 6.1468422,45.505085 7.2677967,45.505085 c 0.7486873,0 1.1912116,-0.214941 1.8983051,-0.922034 l 0.9220342,-0.922034 v -7.349153 -7.349152 h 0.822269 c 1.069545,0 2.348849,-0.546949 3.448917,-1.474537 l 0.881356,-0.743168 v 5.684927 c 0,6.222343 0.132493,6.970583 1.61614,9.12699 0.665318,0.967007 0.824457,1.477007 0.824117,2.64109 -5.97e-4,2.008069 -0.658172,3.196688 -2.189083,3.95688 -1.350714,0.670712 -4.180936,0.997006 -5.5393095,0.638621 z"
+     id="path23"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffffff;stroke-width:0.27118644"
+     d="m 32.59661,53.686172 c 0,-0.739533 0.08316,-0.800211 1.321907,-0.964537 1.645288,-0.218253 3.284148,-1.359924 3.988171,-2.778255 0.48172,-0.970477 0.530516,-1.915837 0.656024,-12.709482 0.14434,-12.413236 0.132124,-12.305973 1.526383,-13.402697 0.615878,-0.48445 1.093395,-0.563404 3.407485,-0.563404 h 2.691232 l -0.08374,7.38983 c -0.08,7.059811 -0.110979,7.440805 -0.693741,8.531245 -0.725945,1.358359 -1.911046,2.519603 -2.571368,2.519603 -0.67206,0 -0.80848,0.279561 -3.308333,6.779661 l -2.242337,5.830508 -2.345843,0.07835 -2.345844,0.07836 z M 43.986441,29.776271 c 1.119952,-1.119952 0.319595,-3.254237 -1.220339,-3.254237 -0.372882,0 -0.922034,0.244068 -1.220339,0.542373 -1.119952,1.119952 -0.319596,3.254237 1.220339,3.254237 0.372881,0 0.922034,-0.244068 1.220339,-0.542373 z"
+     id="path25"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 30.874717,46.123997 c -1.03374,-1.067627 -2.226309,-1.583039 -3.662864,-1.583039 h -0.698947 l -0.0033,-9.084524 c -0.0038,-10.198247 0.0048,-10.050539 -0.658097,-11.388282 -0.643108,-1.297846 -1.75778,-2.240984 -3.173713,-2.68532 -0.424738,-0.133288 -1.027353,-0.17455 -3.097391,-0.212085 l -2.570057,-0.0466 0.02927,-3.560306 0.02927,-3.560306 0.250471,-0.527334 c 0.371809,-0.782795 0.952146,-1.380999 1.694108,-1.746266 l 0.640119,-0.31513 H 31.59247 43.531408 l 0.531709,0.249392 c 0.66235,0.310668 1.141054,0.725571 1.51293,1.311289 0.557568,0.878192 0.59203,1.158964 0.59203,4.823471 v 3.329163 l -2.56476,0.04074 c -2.301214,0.03655 -2.62951,0.06198 -3.194889,0.247478 -1.654155,0.542708 -3.041626,2.018701 -3.494033,3.716956 -0.130707,0.490651 -0.159122,1.842601 -0.209915,9.987565 l -0.05875,9.4201 h -0.68378 c -1.414165,0 -2.602016,0.514514 -3.68317,1.595353 -0.388271,0.388157 -0.711863,0.700296 -0.719092,0.693641 -0.0072,-0.0067 -0.315468,-0.324335 -0.684975,-0.705955 z m 5.352229,-25.851618 c 0.572639,-0.292851 0.724479,-1.015775 0.313693,-1.493525 l -0.231306,-0.269013 -3.867516,-0.0297 c -2.127133,-0.01634 -4.056122,-0.0021 -4.286641,0.03159 -0.567647,0.08301 -0.875239,0.418352 -0.875239,0.95419 0,0.399932 0.213275,0.713519 0.575273,0.84585 0.295596,0.108056 8.155735,0.07108 8.371736,-0.03939 z m 0.361779,-3.810586 c 0.22682,-0.280211 0.24817,-0.98937 0.03617,-1.201372 -0.306003,-0.306003 -0.854892,-0.344968 -4.866976,-0.345504 l -4.007302,-5.34e-4 -0.235339,0.235339 c -0.177281,0.17728 -0.235339,0.337592 -0.235339,0.649818 0,0.524923 0.202131,0.817348 0.60049,0.868733 0.170697,0.02202 2.15867,0.0355 4.417718,0.02995 l 4.107358,-0.01008 z"
+     id="path27"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 25.548757,53.625483 c -0.168814,-0.435051 -1.228183,-3.185576 -2.354154,-6.112279 -1.366829,-3.552759 -2.115095,-5.377043 -2.251447,-5.489067 -0.112325,-0.09228 -0.318098,-0.168735 -0.457272,-0.169893 -0.966158,-0.008 -2.228745,-1.285847 -2.939799,-2.975236 -0.517484,-1.229488 -0.521725,-1.301144 -0.523524,-8.845536 l -0.0017,-6.980993 2.516821,0.03581 c 1.584223,0.02254 2.641167,0.07771 2.852396,0.148875 0.785418,0.264627 1.778765,1.30454 2.120152,2.219538 0.101443,0.271894 0.137043,2.604464 0.177855,11.653643 l 0.05103,11.313708 0.249126,0.680936 c 0.803333,2.195753 2.740104,3.585675 4.996418,3.585675 h 0.746887 v 0.862909 0.86291 H 28.293634 25.855691 Z M 21.113803,30.068477 c 1.110697,-0.504266 1.387664,-1.949768 0.551025,-2.875828 -0.430831,-0.476878 -0.781455,-0.615004 -1.425557,-0.561591 -1.550745,0.1286 -2.125867,2.063118 -0.943339,3.173078 0.497095,0.46659 1.160058,0.562993 1.817871,0.264341 z"
+     id="path29"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="M 10.453192,48.978756 C 9.4055713,48.833876 8.1413031,48.303327 7.4128628,47.702885 6.9600178,47.329612 6.3418112,46.399068 6.1369846,45.782393 6.0480509,45.514638 5.994631,45.276223 6.0182737,45.25258 c 0.023643,-0.02364 0.1992347,0.0223 0.3902046,0.10209 0.4501725,0.188094 1.0669967,0.184306 1.6374185,-0.01006 0.6209049,-0.211563 1.5028134,-1.041278 1.7958139,-1.689533 l 0.2279663,-0.504367 0.02634,-7.051991 0.02634,-7.051992 0.840692,-0.106114 c 1.412841,-0.178334 2.774032,-0.867431 3.748275,-1.897549 l 0.48788,-0.515862 0.0016,4.668357 c 0.0021,6.410897 0.07673,7.143077 0.907116,8.904114 0.445307,0.944386 0.851255,1.590057 1.360828,2.164434 l 0.319226,0.359822 v 1.22854 c 0,1.979651 -0.232265,2.822847 -1.005188,3.649165 -0.934671,0.999238 -2.795499,1.559107 -5.083121,1.529363 -0.527334,-0.0069 -1.088226,-0.03037 -1.246426,-0.05225 z"
+     id="path31"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 10.117886,18.054416 c 1.49e-4,-1.700652 0.04786,-3.480403 0.106017,-3.955004 0.512906,-4.1853877 3.499503,-7.6568744 7.516085,-8.7363594 0.954164,-0.2564385 3.949677,-0.2564407 5.12952,-3.7e-6 2.100303,0.4564979 3.716478,1.3083121 5.056048,2.6648179 0.381458,0.3862802 0.827432,0.885696 0.991053,1.1098129 l 0.297494,0.4074853 -4.586511,7.287e-4 c -2.745578,4.314e-4 -4.835909,0.041187 -5.207864,0.1015333 -1.644274,0.2667646 -3.190652,1.597688 -3.83589,3.301438 -0.189667,0.500816 -0.227813,0.842082 -0.294717,2.63667 -0.04227,1.133768 -0.07979,2.848801 -0.08339,3.811185 l -0.0065,1.74979 h -2.54079 -2.540791 z"
+     id="path33"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="M 9.4464639,26.910823 C 8.6578182,26.652423 7.6407032,25.870717 7.0162931,25.043112 6.5609519,24.439593 6.3471959,24.026068 6.1543867,23.375694 L 6.0051598,22.87233 h 1.1453787 c 0.6996666,0 1.1453788,0.03731 1.1453788,0.09588 0,0.062 1.1311696,0.09588 3.2017507,0.09588 h 3.201751 l -0.08824,0.407485 c -0.272793,1.259692 -1.355771,2.605387 -2.544794,3.16213 -0.561154,0.262752 -0.777359,0.309922 -1.517311,0.331036 -0.4746,0.01354 -0.9707736,-0.01072 -1.1026071,-0.05392 z"
+     id="path35"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 47.988111,17.814719 c -0.0019,-3.736295 -0.05328,-4.181005 -0.62177,-5.378082 C 46.921491,11.49991 45.905916,10.467423 45.01753,10.048711 44.046963,9.5912669 43.450017,9.545165 38.497413,9.545165 h -4.517869 l 0.315477,-0.4392939 c 1.364129,-1.8995169 3.624924,-3.2674577 6.264141,-3.7902496 1.05758,-0.2094917 4.04021,-0.180432 4.889823,0.047641 3.673351,0.9860881 6.43584,3.8887035 7.356276,7.7294215 0.173444,0.72373 0.200254,1.220182 0.239475,4.434398 l 0.04417,3.619428 H 50.539342 47.98978 l -0.0017,-3.331791 z"
+     id="path37"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 51.824931,26.960603 c -1.228558,-0.334454 -2.23299,-1.178996 -2.809713,-2.362453 -0.192736,-0.3955 -0.389857,-0.90246 -0.438047,-1.126577 l -0.08762,-0.407485 h 4.351474 4.351473 l -0.242733,0.647182 c -0.546417,1.456871 -1.363807,2.377035 -2.674853,3.011178 -0.65506,0.316846 -0.850106,0.367645 -1.390244,0.362082 -0.345557,-0.0036 -0.822439,-0.05933 -1.05974,-0.123927 z"
+     id="path39"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 32.457396,53.553573 v -0.862909 h 0.746888 c 1.449484,0 2.649797,-0.500482 3.686387,-1.537071 0.736256,-0.736256 1.269197,-1.72265 1.432117,-2.65063 0.06026,-0.343216 0.123028,-4.824589 0.162938,-11.632316 0.06264,-10.684273 0.07151,-11.09016 0.252192,-11.53287 0.265127,-0.649622 0.790928,-1.311244 1.329998,-1.673552 0.805419,-0.541322 1.174748,-0.600137 3.76853,-0.600137 h 2.331631 l -0.0014,6.975189 c -0.0015,7.541531 0.002,7.483337 -0.529444,8.825529 -0.652396,1.647793 -1.961273,2.981342 -2.934127,2.989438 -0.139174,0.0012 -0.342167,0.07761 -0.451094,0.169893 -0.224971,0.190596 -0.122739,-0.06098 -2.815032,6.92725 -1.107229,2.87397 -2.034995,5.279331 -2.061701,5.345248 -0.03705,0.09146 -0.625306,0.119848 -2.483212,0.119848 H 32.457396 Z M 43.30624,30.156691 c 0.421703,-0.117131 0.970487,-0.69449 1.13557,-1.194698 0.226103,-0.685096 -0.06147,-1.593193 -0.645633,-2.038752 -0.462276,-0.352596 -1.274888,-0.411629 -1.822258,-0.132382 -1.31678,0.671771 -1.246766,2.665207 0.115339,3.283925 0.442978,0.201217 0.720248,0.219878 1.216982,0.08191 z"
+     id="path41"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 49.874704,48.947941 c -1.62438,-0.254414 -2.847813,-0.78581 -3.528712,-1.532692 -0.714994,-0.784279 -0.944946,-1.641793 -0.944946,-3.523791 v -1.189555 l 0.419697,-0.494686 c 0.900468,-1.061359 1.50766,-2.258013 1.905099,-3.754568 0.194192,-0.73123 0.20537,-1.025763 0.239494,-6.310295 l 0.03579,-5.543264 0.648216,0.605501 c 1.120372,1.046545 2.359393,1.633234 3.71809,1.760554 l 0.69917,0.06552 0.02634,7.060026 0.02634,7.060025 0.25421,0.542232 c 0.628507,1.340615 2.252246,2.144207 3.380252,1.672896 0.205675,-0.08594 0.393299,-0.136905 0.416941,-0.113262 0.09571,0.09571 -0.304478,1.052683 -0.66763,1.596507 -0.612681,0.917499 -1.641424,1.59072 -3.000257,1.963406 -0.67861,0.186121 -2.799119,0.265286 -3.628108,0.135448 z"
+     id="path45"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 32.458121,50.41354 c 0.0012,-0.619314 0.189433,-1.556535 0.405963,-2.021822 0.114426,-0.245882 0.447574,-0.688129 0.740327,-0.98277 0.680059,-0.684444 1.33942,-0.950412 2.356162,-0.950412 h 0.715494 v 0.806177 0.806177 l -1.436162,0.03276 c -1.396149,0.03185 -1.443059,0.03966 -1.68367,0.280429 -0.180954,0.18107 -0.248935,0.351207 -0.252821,0.632739 -0.01071,0.776092 0.284708,0.989234 1.371097,0.989234 0.800802,0 0.791899,0.09178 -0.04742,0.488853 -0.500532,0.236793 -0.705004,0.278038 -1.378693,0.278102 l -0.791001,7.6e-5 7.24e-4,-0.359546 z"
+     id="path47"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 28.561883,50.494908 c -0.323231,-0.152915 -0.614278,-0.321043 -0.646771,-0.373619 -0.03692,-0.05974 0.245157,-0.108264 0.752095,-0.129382 0.964144,-0.04016 1.112043,-0.143674 1.177417,-0.824037 0.03845,-0.40014 0.0096,-0.510273 -0.196712,-0.750221 l -0.241776,-0.281233 -1.446615,-0.03276 -1.446615,-0.03276 v -0.806177 -0.806177 h 0.715495 c 0.914379,0 1.613046,0.254434 2.235556,0.814123 0.793654,0.713563 1.264356,1.880527 1.266895,3.140881 l 7.25e-4,0.359546 -0.791001,-7.6e-5 c -0.673689,-6.4e-5 -0.878161,-0.04131 -1.378693,-0.278102 z"
+     id="path49"
+     inkscape:connector-curvature="0" /><path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
+     d="m 28.646275,58.778603 c -1.290571,-0.357671 -2.133369,-1.208551 -2.133369,-2.153826 v -0.290716 h 5.081581 5.08158 l -0.0021,0.311607 c -0.0053,0.779664 -0.705879,1.609265 -1.687197,1.997823 -0.53528,0.211947 -0.697434,0.224559 -3.200517,0.248928 -2.07511,0.0202 -2.743862,-0.004 -3.139969,-0.113816 z"
+     id="path51"
+     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
index b83c032..15e2f10 100644 (file)
@@ -312,6 +312,10 @@ div.board8
   width: 12.5%
   padding-bottom: 12.5%
 
   width: 12.5%
   padding-bottom: 12.5%
 
+div.board9
+  width: 11.1%
+  padding-bottom: 11.1%
+
 div.board10
   width: 10%
   padding-bottom: 10%
 div.board10
   width: 10%
   padding-bottom: 10%
index b83a409..f957400 100644 (file)
@@ -128,11 +128,11 @@ export const ChessRules = class ChessRules {
     if (position.length == 0) return false;
     const rows = position.split("/");
     if (rows.length != V.size.x) return false;
     if (position.length == 0) return false;
     const rows = position.split("/");
     if (rows.length != V.size.x) return false;
-    let kings = {};
+    let kings = { "k": 0, "K": 0 };
     for (let row of rows) {
       let sumElts = 0;
       for (let i = 0; i < row.length; i++) {
     for (let row of rows) {
       let sumElts = 0;
       for (let i = 0; i < row.length; i++) {
-        if (['K','k'].includes(row[i])) kings[row[i]] = true;
+        if (['K','k'].includes(row[i])) kings[row[i]]++;
         if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
         else {
           const num = parseInt(row[i]);
         if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
         else {
           const num = parseInt(row[i]);
@@ -142,8 +142,8 @@ export const ChessRules = class ChessRules {
       }
       if (sumElts != V.size.y) return false;
     }
       }
       if (sumElts != V.size.y) return false;
     }
-    // Both kings should be on board:
-    if (Object.keys(kings).length != 2) return false;
+    // Both kings should be on board. Exactly one per color.
+    if (Object.values(kings).some(v => v != 1)) return false;
     return true;
   }
 
     return true;
   }
 
@@ -367,6 +367,13 @@ export const ChessRules = class ChessRules {
 
   // Position part of the FEN string
   getBaseFen() {
 
   // Position part of the FEN string
   getBaseFen() {
+    const format = (count) => {
+      // if more than 9 consecutive free spaces, break the integer,
+      // otherwise FEN parsing will fail.
+      if (count <= 9) return count;
+      // Currently only boards of size up to 11 or 12:
+      return "9" + (count - 9);
+    };
     let position = "";
     for (let i = 0; i < V.size.x; i++) {
       let emptyCount = 0;
     let position = "";
     for (let i = 0; i < V.size.x; i++) {
       let emptyCount = 0;
@@ -375,7 +382,7 @@ export const ChessRules = class ChessRules {
         else {
           if (emptyCount > 0) {
             // Add empty squares in-between
         else {
           if (emptyCount > 0) {
             // Add empty squares in-between
-            position += emptyCount;
+            position += format(emptyCount);
             emptyCount = 0;
           }
           position += V.board2fen(this.board[i][j]);
             emptyCount = 0;
           }
           position += V.board2fen(this.board[i][j]);
@@ -383,7 +390,7 @@ export const ChessRules = class ChessRules {
       }
       if (emptyCount > 0) {
         // "Flush remainder"
       }
       if (emptyCount > 0) {
         // "Flush remainder"
-        position += emptyCount;
+        position += format(emptyCount);
       }
       if (i < V.size.x - 1) position += "/"; //separate rows
     }
       }
       if (i < V.size.x - 1) position += "/"; //separate rows
     }
@@ -672,7 +679,7 @@ export const ChessRules = class ChessRules {
       enpassantMove.vanish.push({
         x: x,
         y: epSquare.y,
       enpassantMove.vanish.push({
         x: x,
         y: epSquare.y,
-        p: "p",
+        p: this.getPiece(x, epSquare.y),
         c: this.getColor(x, epSquare.y)
       });
     }
         c: this.getColor(x, epSquare.y)
       });
     }
@@ -1187,7 +1194,7 @@ export const ChessRules = class ChessRules {
     return V.INFINITY;
   }
 
     return V.INFINITY;
   }
 
-  // Search depth: 2 for high branching factor, 4 for small (Loser chess, eg.)
+  // Search depth: 1,2 for high branching factor, 4 for small (Loser chess, eg.)
   static get SEARCH_DEPTH() {
     return 3;
   }
   static get SEARCH_DEPTH() {
     return 3;
   }
index af674cc..90d7daf 100644 (file)
@@ -192,6 +192,7 @@ export const translations = {
   "Reuse pieces": "Reuse pieces",
   "Reverse captures": "Reverse captures",
   "Run forward": "Run forward",
   "Reuse pieces": "Reuse pieces",
   "Reverse captures": "Reverse captures",
   "Run forward": "Run forward",
+  "Score a goal": "Score a goal",
   "Shared pieces": "Shared pieces",
   "Shoot pieces": "Shoot pieces",
   "Squares disappear": "Squares disappear",
   "Shared pieces": "Shared pieces",
   "Shoot pieces": "Shoot pieces",
   "Squares disappear": "Squares disappear",
index 183bd6f..6894fca 100644 (file)
@@ -192,6 +192,7 @@ export const translations = {
   "Reuse pieces": "Reutilizar piezas",
   "Reverse captures": "Capturas invertidas",
   "Run forward": "Correr hacia adelante",
   "Reuse pieces": "Reutilizar piezas",
   "Reverse captures": "Capturas invertidas",
   "Run forward": "Correr hacia adelante",
+  "Score a goal": "Marcar una meta",
   "Shared pieces": "Piezas compartidas",
   "Shoot pieces": "Tirar de las piezas",
   "Squares disappear": "Las casillas desaparecen",
   "Shared pieces": "Piezas compartidas",
   "Shoot pieces": "Tirar de las piezas",
   "Squares disappear": "Las casillas desaparecen",
index b317bb4..02b168d 100644 (file)
@@ -192,6 +192,7 @@ export const translations = {
   "Reuse pieces": "Réutiliser les pièces",
   "Reverse captures": "Captures inversées",
   "Run forward": "Courir vers l'avant",
   "Reuse pieces": "Réutiliser les pièces",
   "Reverse captures": "Captures inversées",
   "Run forward": "Courir vers l'avant",
+  "Score a goal": "Marquer un but",
   "Shared pieces": "Pièces partagées",
   "Shoot pieces": "Tirez sur les pièces",
   "Squares disappear": "Les cases disparaissent",
   "Shared pieces": "Pièces partagées",
   "Shoot pieces": "Tirez sur les pièces",
   "Squares disappear": "Les cases disparaissent",
diff --git a/client/src/translations/rules/Ball/en.pug b/client/src/translations/rules/Ball/en.pug
new file mode 100644 (file)
index 0000000..475a160
--- /dev/null
@@ -0,0 +1,52 @@
+p.boxed
+  | Capture the ball, pass it among your pieces and bring it to the
+  | center of the last rank.
+
+p.
+  At the beginning, there is a ball in the center of the 9x9 board.
+  It doesn't move. The first piece to capture it will then hold the ball.
+
+ul
+  li.
+    Capturing an enemy unit holding the ball both make the piece
+    disappear and grab the ball.
+  li "Capturing" a friendly unit pass the ball to it.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rnbqkwbnr/ppppp1ppp/9/5p3/4a4/9/2N3N2/PPPPPPPPP/R1BQKWB1R:
+  .diagram.diag22
+    | fen:rnbqkwbnr/ppppp1ppp/9/9/4s4/9/2N3N2/PPPPPPPPP/R1BQKWB1R:
+  figcaption Left: before ...fxe5 (taking ball). Right: after ...fxe5.
+
+p.
+  The piece sitting to the right of the king is a wildebeest (W).
+  It moves by jumping in L like a knight, or a little bit further:
+  three squares in one direction then one aside.
+
+h3 End of the game
+
+p.
+  The goal is to bring a piece holding the ball in one of the three
+  central squares of the opposite side (files d, e or f).
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  .diagram.diag22
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  figcaption.
+    Left: before e5Pf6 (passing the ball).
+    Right: after the move. Then Wxe9# cannot be prevented.
+
+p.
+  White pass the ball from the pawn at e5 to the wildebeest at f6.
+  Then, since the black bishop on e8 cannot move white will win by taking it: Wxe9#.
+
+h3 Source
+
+p.
+  A friend and I talked some day (in 2019) about a variant where pieces
+  would hit a ball to bring it to the opposite side.
+  This version is inspired by these preliminary trials,
+  because hitting the ball led to somewhat blocked situations.
diff --git a/client/src/translations/rules/Ball/es.pug b/client/src/translations/rules/Ball/es.pug
new file mode 100644 (file)
index 0000000..68940c7
--- /dev/null
@@ -0,0 +1,54 @@
+p.boxed
+  | Captura la pelota, pásala entre tus piezas y tráela
+  | en el centro de la Ãºltima fila.
+
+p.
+  Al principio, hay una pelota en el medio del tablero 9x9.
+  No se mueve. La primera pieza que capturarla sostendrá la pelota.
+
+ul
+  li.
+    Capturar una pieza enemiga con el globo lo roba
+    mientras lo hace desaparecer.
+  li "Capturar" una pieza amiga le pasa la pelota.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rnbqkwbnr/ppppp1ppp/9/5p3/4a4/9/2N3N2/PPPPPPPPPP/R1BQKWB1R:
+  .diagram.diag22
+    | fen:rnbqkwbnr/ppppp1ppp/9/9/4s4/9/2N3N2/PPPPPPPPPP/R1BQKWB1R:
+  figcaption.
+    Izquierda: antes de ...fxe5 (tomando la pelota).
+    Derecha: después de ...fxe5.
+
+p.
+  La pieza a la derecha del rey es un Ã±u (W).
+  Se mueve realizando saltos en forma de L como el caballo,
+  o un poco más alargado: tres casillas y luego una en el lateral.
+
+h3 Fin de la partida
+
+p.
+  El objetivo es traer una pieza en posesión de la pelota en uno de los
+  tres casillas centrales en la Ãºltima fila (columnas d, e o f).
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  .diagram.diag22
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  figcaption.
+    Izquierda: antes de e5Pf6 (pasando el globo).
+    Derecha: después del movimiento. Entonces Wxe9# no se puede prevenir.
+
+p.
+  Las blancas pasan la pelota del peón e5 al Ã±u en f6.
+  Entonces, como el alfil negro no puede moverse,
+  la victoria está asegurada capturándolo con Wxe9#.
+
+h3 Fuente
+
+p.
+  Esta variante está inspirada por una idea que tuvimos con una amiga en 2019,
+  lo que implicaba golpear la pelota para enviarla desde el otro lado del tablero.
+  La versión actual evita ciertos bloqueos observados entonces.
diff --git a/client/src/translations/rules/Ball/fr.pug b/client/src/translations/rules/Ball/fr.pug
new file mode 100644 (file)
index 0000000..97a1a78
--- /dev/null
@@ -0,0 +1,52 @@
+p.boxed
+  | Capturez la balle, faites la passer entre vos pièces et amenez la
+  | au centre de la dernière rangée.
+
+p.
+  Au début, il y a un ballon au milieu de l'échiquier 9x9.
+  Il ne bouge pas. La première pièce Ã  le capturer détiendra alors le ballon.
+
+ul
+  li.
+    Capturer une pièce ennemie possédant le ballon lui vole
+    tout en la faisant disparaître.
+  li "Capturer" une pièce amie lui passe le ballon.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rnbqkwbnr/ppppp1ppp/9/5p3/4a4/9/2N3N2/PPPPPPPPP/R1BQKWB1R:
+  .diagram.diag22
+    | fen:rnbqkwbnr/ppppp1ppp/9/9/4s4/9/2N3N2/PPPPPPPPP/R1BQKWB1R:
+  figcaption Gauche : avant ...fxe5 (prenant le ballon). Droite : après ...fxe5.
+
+p.
+  La pièce située Ã  droite du roi est un gnou (W).
+  Il se déplace en effectuant des sauts en L comme le cavalier,
+  ou bien un peu plus allongés : trois cases puis une sur le côté.
+
+h3 Fin de la partie
+
+p.
+  L'objectif est d'amener une pièce en possession du ballon sur une des
+  trois cases centrales de la dernière rangée (colonnes d, e ou f).
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  .diagram.diag22
+    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+  figcaption.
+    Gauche : avant e5Pf6 (passant le ballon).
+    Droite : après le coup. Ensuite Wxe9# ne peut Ãªtre empêché.
+
+p.
+  Les blancs passent la balle du pion e5 vers le gnou en f6.
+  Ensuite, puisque le fou noir ne peut pas bouger la victoire est assurée
+  en le capturant par Wxe9€.
+
+h3 Source
+
+p.
+  Cette variante s'inspire d'une idée qu'on a eue avec une amie en 2019, qui
+  consistait Ã  frapper la balle pour l'envoyer de l'autre côté de l'échiquier.
+  La version actuelle Ã©vite certains bloquages observés alors.
index 3aa02d3..ac28c31 100644 (file)
@@ -28,6 +28,19 @@ export class Antiking1Rules extends BerolinaRules {
     return b[1] == "a" ? "Antiking/" + b : b;
   }
 
     return b[1] == "a" ? "Antiking/" + b : b;
   }
 
+  static IsGoodPosition(position) {
+    if (!ChessRules.IsGoodPosition(position)) return false;
+    const rows = position.split("/");
+    // Check that exactly one antiking of each color is there:
+    let antikings = { 'a': 0, 'A': 0 };
+    for (let row of rows) {
+      for (let i = 0; i < row.length; i++)
+        if (['A','a'].includes(row[i])) antikings[row[i]]++;
+    }
+    if (Object.values(antikings).some(v => v != 1)) return false;
+    return true;
+  }
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     this.antikingPos = { w: [-1, -1], b: [-1, -1] };
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     this.antikingPos = { w: [-1, -1], b: [-1, -1] };
index 087dce3..2dad5e4 100644 (file)
@@ -15,6 +15,19 @@ export class Antiking2Rules extends ChessRules {
     return b[1] == "a" ? "Antiking/" + b : b;
   }
 
     return b[1] == "a" ? "Antiking/" + b : b;
   }
 
+  static IsGoodPosition(position) {
+    if (!ChessRules.IsGoodPosition(position)) return false;
+    const rows = position.split("/");
+    // Check that exactly one antiking of each color is there:
+    let antikings = { 'a': 0, 'A': 0 };
+    for (let row of rows) {
+      for (let i = 0; i < row.length; i++)
+        if (['A','a'].includes(row[i])) antikings[row[i]]++;
+    }
+    if (Object.values(antikings).some(v => v != 1)) return false;
+    return true;
+  }
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     this.antikingPos = { w: [-1, -1], b: [-1, -1] };
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     this.antikingPos = { w: [-1, -1], b: [-1, -1] };
index b2b18ee..33940b8 100644 (file)
@@ -13,6 +13,37 @@ export class ArenaRules extends ChessRules {
     );
   }
 
     );
   }
 
+  static IsGoodPosition(position) {
+    if (position.length == 0) return false;
+    const rows = position.split("/");
+    if (rows.length != V.size.x) return false;
+    // At most and at least one king or queen per color
+    let royals = { "k": 0, "K": 0, "q": 0, "Q": 0 };
+    for (let row of rows) {
+      let sumElts = 0;
+      for (let i = 0; i < row.length; i++) {
+        if (['K','k','Q','q'].includes(row[i])) royals[row[i]]++;
+        if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
+        else {
+          const num = parseInt(row[i]);
+          if (isNaN(num)) return false;
+          sumElts += num;
+        }
+      }
+      if (sumElts != V.size.y) return false;
+    }
+    if (
+      Object.values(royals).some(v => v >= 2) ||
+      royals['K'] + royals['Q'] == 0 ||
+      royals['k'] + royals['q'] == 0
+    ) {
+      return false;
+    }
+    return true;
+  }
+
+  scanKings() {}
+
   static GenRandInitFen(randomness) {
     return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-";
   }
   static GenRandInitFen(randomness) {
     return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-";
   }
diff --git a/client/src/variants/Ball.js b/client/src/variants/Ball.js
new file mode 100644 (file)
index 0000000..cf50a80
--- /dev/null
@@ -0,0 +1,351 @@
+import { ChessRules, Move, PiPo } from "@/base_rules";
+import { WildebeestRules } from "@/variants/Wildebeest";
+import { ArrayFun } from "@/utils/array";
+import { shuffle } from "@/utils/alea";
+
+export class BallRules extends ChessRules {
+  static get PawnSpecs() {
+    return Object.assign(
+      {},
+      ChessRules.PawnSpecs,
+      { promotions: ChessRules.PawnSpecs.promotions.concat([V.WILDEBEEST]) }
+    );
+  }
+
+  static get HasFlags() {
+    return false;
+  }
+  static get HasCastle() {
+    return false;
+  }
+
+  static get WILDEBEEST() {
+    return 'w';
+  }
+
+  static get BALL() {
+    // 'b' is already taken:
+    return "aa";
+  }
+
+  // Special code for "something to fill space" (around goals)
+  // --> If goal is outside the board (current prototype: it's inside)
+//  static get FILL() {
+//    return "ff";
+//  }
+
+  static get HAS_BALL_CODE() {
+    return {
+      'p': 's',
+      'r': 'u',
+      'n': 'o',
+      'b': 'c',
+      'q': 't',
+      'k': 'l',
+      'w': 'y'
+    };
+  }
+
+  static get HAS_BALL_DECODE() {
+    return {
+      's': 'p',
+      'u': 'r',
+      'o': 'n',
+      'c': 'b',
+      't': 'q',
+      'l': 'k',
+      'y': 'w'
+    };
+  }
+
+  static get PIECES() {
+    return ChessRules.PIECES
+      .concat([V.WILDEBEEST])
+      .concat(Object.keys(V.HAS_BALL_DECODE))
+      .concat(['a']);
+  }
+
+  static board2fen(b) {
+    if (b == V.BALL) return 'a';
+    return ChessRules.board2fen(b);
+  }
+
+  static fen2board(f) {
+    if (f == 'a') return V.BALL;
+    return ChessRules.fen2board(f);
+  }
+
+  // Check that exactly one ball is on the board
+  // + at least one piece per color.
+  static IsGoodPosition(position) {
+    if (position.length == 0) return false;
+    const rows = position.split("/");
+    if (rows.length != V.size.x) return false;
+    let pieces = { "w": 0, "b": 0 };
+    const withBall = Object.keys(V.HAS_BALL_DECODE).concat([V.BALL]);
+    let ballCount = 0;
+    for (let row of rows) {
+      let sumElts = 0;
+      for (let i = 0; i < row.length; i++) {
+        const lowerRi = row[i].toLowerCase();
+        if (V.PIECES.includes(lowerRi)) {
+          if (lowerRi != V.BALL) pieces[row[i] == lowerRi ? "b" : "w"]++;
+          if (withBall.includes(lowerRi)) ballCount++;
+          sumElts++;
+        } else {
+          const num = parseInt(row[i]);
+          if (isNaN(num)) return false;
+          sumElts += num;
+        }
+      }
+      if (sumElts != V.size.y) return false;
+    }
+    if (ballCount != 1 || Object.values(pieces).some(v => v == 0))
+      return false;
+    return true;
+  }
+
+  getPpath(b) {
+    let prefix = "";
+    const withPrefix =
+      Object.keys(V.HAS_BALL_DECODE)
+      .concat([V.WILDEBEEST])
+      .concat(['a']);
+    if (withPrefix.includes(b[1])) prefix = "Ball/";
+    return prefix + b;
+  }
+
+  canTake([x1, y1], [x2, y2]) {
+    // Capture enemy or pass ball to friendly pieces
+    return (
+      this.getColor(x1, y1) !== this.getColor(x2, y2) ||
+      Object.keys(V.HAS_BALL_DECODE).includes(this.board[x1][y1].charAt(1))
+    );
+  }
+
+  getCheckSquares(color) {
+    return [];
+  }
+
+  static GenRandInitFen(randomness) {
+    if (randomness == 0)
+      return "rnbqkwbnr/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/RNBQKWBNR w 0 -";
+
+    let pieces = { w: new Array(9), b: new Array(9) };
+    for (let c of ["w", "b"]) {
+      if (c == 'b' && randomness == 1) {
+        pieces['b'] = pieces['w'];
+        break;
+      }
+
+      // Get random squares for every piece, totally freely
+      let positions = shuffle(ArrayFun.range(9));
+      const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'k', 'q', 'w'];
+      const rem2 = positions[0] % 2;
+      if (rem2 == positions[1] % 2) {
+        // Fix bishops (on different colors)
+        for (let i=2; i<9; i++) {
+          if (positions[i] % 2 != rem2)
+            [positions[1], positions[i]] = [positions[i], positions[1]];
+        }
+      }
+      for (let i = 0; i < 9; i++) pieces[c][positions[i]] = composition[i];
+    }
+    return (
+      pieces["b"].join("") +
+      "/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/" +
+      pieces["w"].join("").toUpperCase() +
+      // En-passant allowed, but no flags
+      " w 0 -"
+    );
+  }
+
+  scanKings(fen) {}
+
+  static get size() {
+    return { x: 9, y: 9 };
+  }
+
+  getPiece(i, j) {
+    const p = this.board[i][j].charAt(1);
+    if (Object.keys(V.HAS_BALL_DECODE).includes(p))
+      return V.HAS_BALL_DECODE[p];
+    return p;
+  }
+
+  static get steps() {
+    return WildebeestRules.steps;
+  }
+
+  // Because of the ball, getPiece() could be wrong:
+  // use board[x][y][1] instead (always valid).
+  getBasicMove([sx, sy], [ex, ey], tr) {
+    const initColor = this.getColor(sx, sy);
+    const initPiece = this.board[sx][sy].charAt(1);
+    let mv = new Move({
+      appear: [
+        new PiPo({
+          x: ex,
+          y: ey,
+          c: tr ? tr.c : initColor,
+          p: tr ? tr.p : initPiece
+        })
+      ],
+      vanish: [
+        new PiPo({
+          x: sx,
+          y: sy,
+          c: initColor,
+          p: initPiece
+        })
+      ]
+    });
+
+    // Fix "ball holding" indication in case of promotions:
+    if (!!tr && Object.keys(V.HAS_BALL_DECODE).includes(initPiece))
+      mv.appear[0].p = V.HAS_BALL_CODE[tr.p];
+
+    // The opponent piece disappears if we take it
+    if (this.board[ex][ey] != V.EMPTY) {
+      mv.vanish.push(
+        new PiPo({
+          x: ex,
+          y: ey,
+          c: this.getColor(ex, ey),
+          p: this.board[ex][ey].charAt(1)
+        })
+      );
+    }
+
+    // Post-processing: maybe the ball was taken, or a piece + ball
+    if (mv.vanish.length == 2) {
+      if (
+        // Take the ball?
+        mv.vanish[1].c == 'a' ||
+        // Capture a ball-holding piece?
+        Object.keys(V.HAS_BALL_DECODE).includes(mv.vanish[1].p)
+      ) {
+        mv.appear[0].p = V.HAS_BALL_CODE[mv.appear[0].p];
+      } else if (mv.vanish[1].c == mv.vanish[0].c) {
+        // Pass the ball: the passing unit does not disappear
+        mv.appear.push(JSON.parse(JSON.stringify(mv.vanish[0])));
+        mv.appear[0].p = V.HAS_BALL_CODE[mv.vanish[1].p];
+        mv.appear[1].p = V.HAS_BALL_DECODE[mv.appear[1].p];
+      }
+      // Else: standard capture
+    }
+
+    return mv;
+  }
+
+  // NOTE: if a pawn is captured en-passant, he doesn't hold the ball
+  // So base implementation is fine.
+
+  getPotentialMovesFrom([x, y]) {
+    if (this.getPiece(x, y) == V.WILDEBEEST)
+      return this.getPotentialWildebeestMoves([x, y]);
+    return super.getPotentialMovesFrom([x, y]);
+  }
+
+  getPotentialWildebeestMoves(sq) {
+    return this.getSlideNJumpMoves(
+      sq,
+      V.steps[V.KNIGHT].concat(V.steps[WildebeestRules.CAMEL]),
+      "oneStep"
+    );
+  }
+
+  filterValid(moves) {
+    return moves;
+  }
+
+  // isAttacked: unused here (no checks)
+
+  postPlay() {}
+  postUndo() {}
+
+  getCurrentScore() {
+    // Turn has changed:
+    const color = V.GetOppCol(this.turn);
+    const lastRank = (color == "w" ? 0 : 8);
+    if ([3,4,5].some(
+      i => {
+        return (
+          Object.keys(V.HAS_BALL_DECODE).includes(
+            this.board[lastRank][i].charAt(1)) &&
+          this.getColor(lastRank, i) == color
+        );
+      }
+    )) {
+      // Goal scored!
+      return color == "w" ? "1-0" : "0-1";
+    }
+    if (this.atLeastOneMove()) return "*";
+    // Stalemate (quite unlikely?)
+    return "1/2";
+  }
+
+  static get VALUES() {
+    return {
+      p: 1,
+      r: 5,
+      n: 3,
+      b: 3,
+      q: 9,
+      w: 7,
+      k: 5,
+      a: 0 //ball: neutral
+    };
+  }
+
+  static get SEARCH_DEPTH() {
+    return 2;
+  }
+
+  evalPosition() {
+    // Count material:
+    let evaluation = super.evalPosition();
+    if (this.board[4][4] == V.BALL)
+      // Ball not captured yet
+      return evaluation;
+    // Ponder depending on ball position
+    for (let i=0; i<9; i++) {
+      for (let j=0; j<9; j++) {
+        if (Object.keys(V.HAS_BALL_DECODE).includes(this.board[i][j][1]))
+          return evaluation/2 + (this.getColor(i, j) == "w" ? 8 - i : -i);
+      }
+    }
+    return 0; //never reached
+  }
+
+  getNotation(move) {
+    const finalSquare = V.CoordsToSquare(move.end);
+    if (move.appear.length == 2)
+      // A pass: special notation
+      return V.CoordsToSquare(move.start) + "P" + finalSquare;
+    const piece = this.getPiece(move.start.x, move.start.y);
+    if (piece == V.PAWN) {
+      // Pawn move
+      let notation = "";
+      if (move.vanish.length > move.appear.length) {
+        // Capture
+        const startColumn = V.CoordToColumn(move.start.y);
+        notation = startColumn + "x" + finalSquare;
+      }
+      else notation = finalSquare;
+      if (![V.PAWN, V.HAS_BALL_CODE[V.PAWN]].includes(move.appear[0].p)) {
+        // Promotion
+        const promotePiece =
+          V.HAS_BALL_DECODE[move.appear[0].p] || move.appear[0].p;
+        notation += "=" + promotePiece.toUpperCase();
+      }
+      return notation;
+    }
+    // Piece movement
+    return (
+      piece.toUpperCase() +
+      (move.vanish.length > move.appear.length ? "x" : "") +
+      finalSquare
+    );
+  }
+};
index 7860ab0..a08f197 100644 (file)
@@ -33,6 +33,34 @@ export class CannibalRules extends ChessRules {
     return (Object.keys(V.KING_DECODE).includes(b[1]) ? "Cannibal/" : "") + b;
   }
 
     return (Object.keys(V.KING_DECODE).includes(b[1]) ? "Cannibal/" : "") + b;
   }
 
+  static IsGoodPosition(position) {
+    if (position.length == 0) return false;
+    const rows = position.split("/");
+    if (rows.length != V.size.x) return false;
+    let kings = { "w": 0, "b": 0 };
+    const allPiecesCodes = V.PIECES.concat(Object.keys(V.KING_DECODE));
+    const kingBlackCodes = Object.keys(V.KING_DECODE).concat(['k']);
+    const kingWhiteCodes =
+      Object.keys(V.KING_DECODE).map(k => k.toUpperCase()).concat(['K']);
+    for (let row of rows) {
+      let sumElts = 0;
+      for (let i = 0; i < row.length; i++) {
+        if (kingBlackCodes.includes(row[i])) kings['b']++;
+        else if (kingWhiteCodes.includes(row[i])) kings['w']++;
+        if (allPiecesCodes.includes(row[i].toLowerCase())) sumElts++;
+        else {
+          const num = parseInt(row[i]);
+          if (isNaN(num)) return false;
+          sumElts += num;
+        }
+      }
+      if (sumElts != V.size.y) return false;
+    }
+    // Both kings should be on board, only one of each color:
+    if (Object.values(kings).some(v => v != 1)) return false;
+    return true;
+  }
+
   // Kings may be disguised:
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
   // Kings may be disguised:
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
index d48d632..882a32a 100644 (file)
@@ -394,9 +394,10 @@ export class CheckeredRules extends ChessRules {
   }
 
   static ParseFen(fen) {
   }
 
   static ParseFen(fen) {
-    return Object.assign({}, ChessRules.ParseFen(fen), {
-      cmove: fen.split(" ")[5]
-    });
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      { cmove: fen.split(" ")[5] }
+    );
   }
 
   getFen() {
   }
 
   getFen() {
index f0fc380..2e49407 100644 (file)
@@ -4,7 +4,7 @@ import { randInt, sample } from "@/utils/alea";
 
 export class CoregalRules extends ChessRules {
   static IsGoodPosition(position) {
 
 export class CoregalRules extends ChessRules {
   static IsGoodPosition(position) {
-    if (!super.IsGoodPosition(position)) return false;
+    if (!ChessRules.IsGoodPosition(position)) return false;
     const rows = position.split("/");
     // Check that at least one queen of each color is there:
     let queens = {};
     const rows = position.split("/");
     // Check that at least one queen of each color is there:
     let queens = {};
index 321bf4c..2307eaf 100644 (file)
@@ -22,10 +22,13 @@ export class CrazyhouseRules extends ChessRules {
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
-    return Object.assign(ChessRules.ParseFen(fen), {
-      reserve: fenParts[5],
-      promoted: fenParts[6]
-    });
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      {
+        reserve: fenParts[5],
+        promoted: fenParts[6]
+      }
+    );
   }
 
   getEpSquare(moveOrSquare) {
   }
 
   getEpSquare(moveOrSquare) {
index 746809f..59620f9 100644 (file)
@@ -10,8 +10,7 @@ export class ExtinctionRules extends ChessRules {
   }
 
   static IsGoodPosition(position) {
   }
 
   static IsGoodPosition(position) {
-    if (!ChessRules.IsGoodPosition(position))
-      return false;
+    if (!ChessRules.IsGoodPosition(position)) return false;
     // Also check that each piece type is present
     const rows = position.split("/");
     let pieces = {};
     // Also check that each piece type is present
     const rows = position.split("/");
     let pieces = {};
@@ -21,11 +20,12 @@ export class ExtinctionRules extends ChessRules {
           pieces[row[i]] = true;
       }
     }
           pieces[row[i]] = true;
       }
     }
-    if (Object.keys(pieces).length != 12)
-      return false;
+    if (Object.keys(pieces).length != 12) return false;
     return true;
   }
 
     return true;
   }
 
+  scanKings() {}
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     const pos = V.ParseFen(fen).position;
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     const pos = V.ParseFen(fen).position;
index f4a96ce..0809a65 100644 (file)
@@ -28,7 +28,10 @@ export class GrandRules extends ChessRules {
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
-    return Object.assign(ChessRules.ParseFen(fen), { captured: fenParts[5] });
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      { captured: fenParts[5] }
+    );
   }
 
   getPpath(b) {
   }
 
   getPpath(b) {
@@ -326,15 +329,17 @@ export class GrandRules extends ChessRules {
   static GenRandInitFen(randomness) {
     if (randomness == 0) {
       // No castling in the official initial setup
   static GenRandInitFen(randomness) {
     if (randomness == 0) {
       // No castling in the official initial setup
-      return "r8r/1nbqkmcbn1/pppppppppp/10/10/10/10/PPPPPPPPPP/1NBQKMCBN1/R8R " +
+      return "r8r/1nbqkmcbn1/pppppppppp/91/91/91/91/PPPPPPPPPP/1NBQKMCBN1/R8R " +
         "w 0 zzzz - 00000000000000";
     }
 
     let pieces = { w: new Array(10), b: new Array(10) };
         "w 0 zzzz - 00000000000000";
     }
 
     let pieces = { w: new Array(10), b: new Array(10) };
+    let flags = "";
     // Shuffle pieces on first and last rank
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
         pieces['b'] = pieces['w'];
     // Shuffle pieces on first and last rank
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
         pieces['b'] = pieces['w'];
+        flags += flags;
         break;
       }
 
         break;
       }
 
@@ -389,12 +394,13 @@ export class GrandRules extends ChessRules {
       pieces[c][bishop2Pos] = "b";
       pieces[c][knight2Pos] = "n";
       pieces[c][rook2Pos] = "r";
       pieces[c][bishop2Pos] = "b";
       pieces[c][knight2Pos] = "n";
       pieces[c][rook2Pos] = "r";
+      flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos);
     }
     return (
       pieces["b"].join("") +
     }
     return (
       pieces["b"].join("") +
-      "/pppppppppp/10/10/10/10/10/10/PPPPPPPPPP/" +
+      "/pppppppppp/91/91/91/91/91/91/PPPPPPPPPP/" +
       pieces["w"].join("").toUpperCase() +
       pieces["w"].join("").toUpperCase() +
-      " w 0 1111 - 00000000000000"
+      " w 0 " + flags + " - 00000000000000"
     );
   }
 };
     );
   }
 };
index c060310..ef5b0bb 100644 (file)
@@ -54,7 +54,7 @@ export class HiddenRules extends ChessRules {
   }
 
   static get PIECES() {
   }
 
   static get PIECES() {
-    return ChessRules.PIECES.concat(Object.values(V.HIDDEN_CODE));
+    return ChessRules.PIECES.concat(Object.keys(V.HIDDEN_DECODE));
   }
 
   // Pieces can be hidden :)
   }
 
   // Pieces can be hidden :)
index 8db5a50..f3b5e3c 100644 (file)
@@ -13,7 +13,7 @@ export class HiddenqueenRules extends ChessRules {
   }
 
   static get PIECES() {
   }
 
   static get PIECES() {
-    return ChessRules.PIECES.concat(Object.values(V.HIDDEN_CODE));
+    return ChessRules.PIECES.concat([V.HIDDEN_QUEEN]);
   }
 
   getPiece(i, j) {
   }
 
   getPiece(i, j) {
index f032e21..4f9f7e3 100644 (file)
@@ -5,6 +5,8 @@ export class Knightrelay1Rules extends ChessRules {
     return false;
   }
 
     return false;
   }
 
+  // TODO: IsGoodPosition to check that 2 knights are on the board...
+
   getPotentialMovesFrom([x, y]) {
     let moves = super.getPotentialMovesFrom([x, y]);
 
   getPotentialMovesFrom([x, y]) {
     let moves = super.getPotentialMovesFrom([x, y]);
 
index 8980c72..8b070fa 100644 (file)
@@ -21,9 +21,10 @@ export class RecycleRules extends ChessRules {
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
 
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
-    return Object.assign(ChessRules.ParseFen(fen), {
-      reserve: fenParts[5]
-    });
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      { reserve: fenParts[5] }
+    );
   }
 
   getEpSquare(moveOrSquare) {
   }
 
   getEpSquare(moveOrSquare) {
index 9b6575a..39ee02a 100644 (file)
@@ -25,7 +25,7 @@ export class RoyalraceRules extends ChessRules {
 
   static GenRandInitFen(randomness) {
     if (randomness == 0)
 
   static GenRandInitFen(randomness) {
     if (randomness == 0)
-      return "11/11/11/11/11/11/11/11/11/qrbnp1PNBRQ/krbnp1PNBRK w 0";
+      return "92/92/92/92/92/92/92/92/92/qrbnp1PNBRQ/krbnp1PNBRK w 0";
 
     let pieces = { w: new Array(10), b: new Array(10) };
     // Shuffle pieces on first and second rank
 
     let pieces = { w: new Array(10), b: new Array(10) };
     // Shuffle pieces on first and second rank
@@ -96,7 +96,7 @@ export class RoyalraceRules extends ChessRules {
     const whiteFen = pieces["w"].join("").toUpperCase();
     const blackFen = pieces["b"].join("");
     return (
     const whiteFen = pieces["w"].join("").toUpperCase();
     const blackFen = pieces["b"].join("");
     return (
-      "11/11/11/11/11/11/11/11/11/" +
+      "92/92/92/92/92/92/92/92/92/" +
       blackFen.substr(5).split("").reverse().join("") +
       "1" +
       whiteFen.substr(5).split("").join("") +
       blackFen.substr(5).split("").reverse().join("") +
       "1" +
       whiteFen.substr(5).split("").join("") +
index 04306c2..209def8 100644 (file)
@@ -14,6 +14,8 @@ export class RugbyRules extends ChessRules {
     );
   }
 
     );
   }
 
+  scanKings() {}
+
   getPotentialMovesFrom(sq) {
     // There are only pawns:
     return this.getPotentialPawnMoves(sq);
   getPotentialMovesFrom(sq) {
     // There are only pawns:
     return this.getPotentialPawnMoves(sq);
@@ -44,6 +46,10 @@ export class RugbyRules extends ChessRules {
   preUndo() {}
   postUndo() {}
 
   preUndo() {}
   postUndo() {}
 
+  getCheckSquares() {
+    return [];
+  }
+
   getCurrentScore() {
     // Turn has changed:
     const color = V.GetOppCol(this.turn);
   getCurrentScore() {
     // Turn has changed:
     const color = V.GetOppCol(this.turn);
index ac3aeb0..2038e4f 100644 (file)
@@ -20,9 +20,10 @@ export class SuctionRules extends ChessRules {
   }
 
   static ParseFen(fen) {
   }
 
   static ParseFen(fen) {
-    return Object.assign({}, ChessRules.ParseFen(fen), {
-      cmove: fen.split(" ")[4]
-    });
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      { cmove: fen.split(" ")[4] }
+    );
   }
 
   static IsGoodFen(fen) {
   }
 
   static IsGoodFen(fen) {
index 1304ba9..c81d355 100644 (file)
@@ -19,6 +19,33 @@ export class SuicideRules extends ChessRules {
     );
   }
 
     );
   }
 
+  static IsGoodPosition(position) {
+    if (position.length == 0) return false;
+    const rows = position.split("/");
+    if (rows.length != V.size.x) return false;
+    // Just check that at least one piece of each color is there:
+    let pieces = { "w": 0, "b": 0 };
+    for (let row of rows) {
+      let sumElts = 0;
+      for (let i = 0; i < row.length; i++) {
+        const lowerRi = row[i].toLowerCase();
+        if (V.PIECES.includes(lowerRi)) {
+          pieces[row[i] == lowerRi ? "b" : "w"]++;
+          sumElts++;
+        } else {
+          const num = parseInt(row[i]);
+          if (isNaN(num)) return false;
+          sumElts += num;
+        }
+      }
+      if (sumElts != V.size.y) return false;
+    }
+    if (Object.values(pieces).some(v => v == 0)) return false;
+    return true;
+  }
+
+  scanKings() {}
+
   // Trim all non-capturing moves (not the most efficient, but easy)
   static KeepCaptures(moves) {
     return moves.filter(m => m.vanish.length == 2);
   // Trim all non-capturing moves (not the most efficient, but easy)
   static KeepCaptures(moves) {
     return moves.filter(m => m.vanish.length == 2);
@@ -116,7 +143,6 @@ export class SuicideRules extends ChessRules {
       return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 -";
 
     let pieces = { w: new Array(8), b: new Array(8) };
       return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 -";
 
     let pieces = { w: new Array(8), b: new Array(8) };
-    // Shuffle pieces on first and last rank
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
         pieces['b'] = pieces['w'];
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
         pieces['b'] = pieces['w'];
index 5bb50e8..fe2a0c0 100644 (file)
@@ -20,7 +20,9 @@ export class WildebeestRules extends ChessRules {
 
   static get steps() {
     return Object.assign(
 
   static get steps() {
     return Object.assign(
-      ChessRules.steps, //add camel moves:
+      {},
+      ChessRules.steps,
+      // Add camel moves:
       {
         c: [
           [-3, -1],
       {
         c: [
           [-3, -1],
@@ -244,9 +246,9 @@ export class WildebeestRules extends ChessRules {
   static GenRandInitFen(randomness) {
     if (!randomness) randomness = 2;
     if (randomness == 0)
   static GenRandInitFen(randomness) {
     if (!randomness) randomness = 2;
     if (randomness == 0)
-      return "rnccwkqbbnr/ppppppppppp/11/11/11/11/11/11/PPPPPPPPPPP/RNBBQKWCCNR w 0 akak -";
+      return "rnccwkqbbnr/ppppppppppp/92/92/92/92/92/92/PPPPPPPPPPP/RNBBQKWCCNR w 0 akak -";
 
 
-    let pieces = { w: new Array(10), b: new Array(10) };
+    let pieces = { w: new Array(11), b: new Array(11) };
     let flags = "";
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
     let flags = "";
     for (let c of ["w", "b"]) {
       if (c == 'b' && randomness == 1) {
@@ -311,7 +313,7 @@ export class WildebeestRules extends ChessRules {
     }
     return (
       pieces["b"].join("") +
     }
     return (
       pieces["b"].join("") +
-      "/ppppppppppp/11/11/11/11/11/11/PPPPPPPPPPP/" +
+      "/ppppppppppp/92/92/92/92/92/92/PPPPPPPPPPP/" +
       pieces["w"].join("").toUpperCase() +
       " w 0 " + flags + " -"
     );
       pieces["w"].join("").toUpperCase() +
       " w 0 " + flags + " -"
     );
index d0cabb4..9bb913c 100644 (file)
@@ -73,7 +73,10 @@ main
           )
         fieldset(v-if="st.user.id > 0")
           label(for="selectPlayers") {{ st.tr["Play with"] }}
           )
         fieldset(v-if="st.user.id > 0")
           label(for="selectPlayers") {{ st.tr["Play with"] }}
-          select#selectPlayersInList(v-model="newchallenge.to")
+          select#selectPlayersInList(
+            v-model="newchallenge.to"
+            @change="changeChallTarget()"
+          )
             option(value="")
             option(
               v-for="p in Object.values(people)"
             option(value="")
             option(
               v-for="p in Object.values(people)"
@@ -453,6 +456,13 @@ export default {
       if (!!this.curChallToAccept.fen) return { "margin-top": "10px" };
       return {};
     },
       if (!!this.curChallToAccept.fen) return { "margin-top": "10px" };
       return {};
     },
+    changeChallTarget: function() {
+      if (!this.newchallenge.to) {
+        // Reset potential FEN + diagram
+        this.newchallenge.fen = "";
+        this.newchallenge.diag = "";
+      }
+    },
     cadenceFocusIfOpened: function() {
       if (event.target.checked)
         document.getElementById("cadence").focus();
     cadenceFocusIfOpened: function() {
       if (event.target.checked)
         document.getElementById("cadence").focus();
@@ -903,7 +913,7 @@ export default {
           position: parsedFen.position,
           orientation: parsedFen.turn
         });
           position: parsedFen.position,
           orientation: parsedFen.turn
         });
-      }
+      } else this.newchallenge.diag = "";
     },
     newChallFromPreset(pchall) {
       this.partialResetNewchallenge();
     },
     newChallFromPreset(pchall) {
       this.partialResetNewchallenge();
index 9ce2b3f..f1c2d08 100644 (file)
@@ -273,6 +273,7 @@ export default {
       this.loadVariant(prob.vid, () => {
         // Set FEN if possible (might not be correct yet)
         if (V.IsGoodFen(prob.fen)) this.setDiagram(prob);
       this.loadVariant(prob.vid, () => {
         // Set FEN if possible (might not be correct yet)
         if (V.IsGoodFen(prob.fen)) this.setDiagram(prob);
+        else prob.diag = "";
       });
     },
     loadVariant: async function(vid, cb) {
       });
     },
     loadVariant: async function(vid, cb) {
@@ -291,6 +292,7 @@ export default {
       // variant could not be ready, or not defined
       if (prob.vid > 0 && this.loadedVar == prob.vid && V.IsGoodFen(prob.fen))
         this.setDiagram(prob);
       // variant could not be ready, or not defined
       if (prob.vid > 0 && this.loadedVar == prob.vid && V.IsGoodFen(prob.fen))
         this.setDiagram(prob);
+      else prob.diag = "";
     },
     setDiagram: function(prob) {
       // Condition: prob.fen is correct and global V is ready
     },
     setDiagram: function(prob) {
       // Condition: prob.fen is correct and global V is ready
index a842d3e..a0d4c84 100644 (file)
@@ -9,6 +9,7 @@ insert or ignore into Variants (name,description) values
   ('Antimatter', 'Dangerous collisions'),
   ('Arena', 'Middle battle'),
   ('Atomic', 'Explosive captures'),
   ('Antimatter', 'Dangerous collisions'),
   ('Arena', 'Middle battle'),
   ('Atomic', 'Explosive captures'),
+  ('Ball', 'Score a goal'),
   ('Baroque', 'Exotic captures'),
   ('Benedict', 'Change colors'),
   ('Berolina', 'Pawns move diagonally'),
   ('Baroque', 'Exotic captures'),
   ('Benedict', 'Change colors'),
   ('Berolina', 'Pawns move diagonally'),
index 5f332b7..8511972 100644 (file)
@@ -454,7 +454,7 @@ const GameModel =
           "SELECT gid, count(*) AS nbMoves, MAX(played) AS lastMaj " +
           "FROM Moves " +
           "GROUP BY gid";
           "SELECT gid, count(*) AS nbMoves, MAX(played) AS lastMaj " +
           "FROM Moves " +
           "GROUP BY gid";
-        db.get(query, (err2, mstats) => {
+        db.all(query, (err2, mstats) => {
           // Reorganize moves data to avoid too many array lookups:
           let movesGroups = {};
           mstats.forEach(ms => {
           // Reorganize moves data to avoid too many array lookups:
           let movesGroups = {};
           mstats.forEach(ms => {
@@ -464,18 +464,18 @@ const GameModel =
             };
           });
           // Remove games still not really started,
             };
           });
           // Remove games still not really started,
-          // with no action in the last 3 months:
+          // with no action in the last 2 weeks:
           let toRemove = [];
           games.forEach(g => {
             if (
               (
                 !movesGroups[g.id] &&
           let toRemove = [];
           games.forEach(g => {
             if (
               (
                 !movesGroups[g.id] &&
-                tsNow - g.created > 91*day
+                tsNow - g.created > 14*day
               )
               ||
               (
                 movesGroups[g.id].nbMoves == 1 &&
               )
               ||
               (
                 movesGroups[g.id].nbMoves == 1 &&
-                tsNow - movesGroups[g.id].lastMaj > 91*day
+                tsNow - movesGroups[g.id].lastMaj > 14*day
               )
             ) {
               toRemove.push(g.id);
               )
             ) {
               toRemove.push(g.id);