From e90bafa8fb5fb7641728231bf2398590d96c672a Mon Sep 17 00:00:00 2001 From: Benjamin Auder <benjamin.auder@somewhere> Date: Wed, 1 Apr 2020 01:00:26 +0200 Subject: [PATCH] Fix Omega castling and pieces randomization, fix a bug when undoing partial multi-move. Draft Rococo and Maxima rules --- client/public/images/pieces/Maxima/bd.svg | 105 +++ client/public/images/pieces/Maxima/bg.svg | 79 ++ client/public/images/pieces/Maxima/bm.svg | 92 ++ .../public/images/pieces/Maxima/nothing.svg | 56 ++ client/public/images/pieces/Maxima/wd.svg | 94 ++ client/public/images/pieces/Maxima/wg.svg | 145 +++ client/public/images/pieces/Maxima/wm.svg | 97 ++ client/public/images/pieces/Omega/bc.svg | 221 +++-- client/public/images/pieces/Omega/bw.svg | 172 ++-- client/public/images/pieces/Omega/wc.svg | 192 +++- client/public/images/pieces/Omega/ww.svg | 178 ++-- client/public/images/pieces/Tencubed/bc.svg | 221 +++-- client/public/images/pieces/Tencubed/bw.svg | 172 ++-- client/public/images/pieces/Tencubed/wc.svg | 192 +++- client/public/images/pieces/Tencubed/ww.svg | 178 ++-- client/src/components/BaseGame.vue | 2 + client/src/components/Board.vue | 7 + client/src/translations/en.js | 2 + client/src/translations/es.js | 2 + client/src/translations/fr.js | 2 + client/src/translations/rules/Baroque/en.pug | 5 +- client/src/translations/rules/Baroque/es.pug | 6 +- client/src/translations/rules/Baroque/fr.pug | 4 +- client/src/translations/rules/Maxima/en.pug | 20 + client/src/translations/rules/Maxima/es.pug | 1 + client/src/translations/rules/Maxima/fr.pug | 1 + client/src/translations/rules/Rococo/en.pug | 5 +- client/src/translations/rules/Rococo/es.pug | 5 +- client/src/translations/rules/Rococo/fr.pug | 5 +- client/src/variants/Baroque.js | 6 +- client/src/variants/Maxima.js | 832 ++++++++++++++++++ client/src/variants/Omega.js | 26 +- client/src/variants/Rococo.js | 7 +- server/db/populate.sql | 2 + 34 files changed, 2663 insertions(+), 471 deletions(-) create mode 100644 client/public/images/pieces/Maxima/bd.svg create mode 100644 client/public/images/pieces/Maxima/bg.svg create mode 100644 client/public/images/pieces/Maxima/bm.svg create mode 100644 client/public/images/pieces/Maxima/nothing.svg create mode 100644 client/public/images/pieces/Maxima/wd.svg create mode 100644 client/public/images/pieces/Maxima/wg.svg create mode 100644 client/public/images/pieces/Maxima/wm.svg create mode 100644 client/src/translations/rules/Maxima/en.pug create mode 100644 client/src/translations/rules/Maxima/es.pug create mode 100644 client/src/translations/rules/Maxima/fr.pug create mode 100644 client/src/variants/Maxima.js diff --git a/client/public/images/pieces/Maxima/bd.svg b/client/public/images/pieces/Maxima/bd.svg new file mode 100644 index 00000000..09954492 --- /dev/null +++ b/client/public/images/pieces/Maxima/bd.svg @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="45" + height="45" + viewBox="0 0 11.90625 11.90625" + version="1.1" + id="svg4393" + sodipodi:docname="CommonerB_Transparent.svg" + inkscape:version="0.92.1 r15371"> + <defs + id="defs4387" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3" + inkscape:cx="30.240069" + inkscape:cy="21.353804" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:window-width="1600" + inkscape:window-height="837" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata4390"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-285.09373)"> + <g + id="g4572" + transform="matrix(0.28921369,0,0,0.28921369,-0.54713251,283.72613)"> + <circle + id="circle4537" + r="2.5" + cy="13.5" + cx="22.5" + style="fill:#000000;stroke:#000000;stroke-width:1.5;stroke-linejoin:round" /> + <circle + id="circle4539" + r="1.5" + cy="13.5" + cx="22.5" + style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linejoin:round" /> + <g + id="g4543" + style="fill:#000000;stroke:#000000;stroke-width:1.5;stroke-linejoin:round"> + <!-- test --> + <path + id="path4541" + d="m 11.5,37 c 5.5,3.5 15.5,3.5 21,0 v -7 c 0,0 9,-4.5 6,-11 -5.5,-7 -26.5,-7 -32,0 -3,6.5 5,10.5 5,10.5 z" + inkscape:connector-curvature="0" /> + </g> + <g + id="g4553" + style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"> + <!-- test --> + <path + id="path4545" + d="m 32,29.5 c 0,0 8.5,-4 6,-9.65 C 32.65,13 12.35,13 7,19.85 c -2.5,5.65 4.85,9 4.85,9" + inkscape:connector-curvature="0" /> + <!-- talp --> + <path + id="path4547" + d="M 11.5,30 C 17,27 27,27 32.5,30" + inkscape:connector-curvature="0" /> + <path + id="path4549" + d="m 11.5,33.5 c 5.5,-3 15.5,-3 21,0" + inkscape:connector-curvature="0" /> + <path + id="path4551" + d="M 11.5,37 C 17,34 27,34 32.5,37" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> +</svg> diff --git a/client/public/images/pieces/Maxima/bg.svg b/client/public/images/pieces/Maxima/bg.svg new file mode 100644 index 00000000..6afc7b5e --- /dev/null +++ b/client/public/images/pieces/Maxima/bg.svg @@ -0,0 +1,79 @@ +<?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="bg.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" /> + </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="960" + 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:#000000;display:block;fill:#000000;fill-rule:nonzero" + d="m 1588,765 q -83,30 -233,49 -150,19 -333,20 -178,0 -326,-18 -148,-18 -233,-49 l 50,-91 q 84,25 218,36 134,11 293,11 159,0 294,-11 135,-11 219,-37 z m 226,668 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z m -1578,0 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 1208,110 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z m -840,0 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z M 1640,255 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -96,32 -30,118 q -195,45 -490,45 -292,0 -488,-45 L 504,286 q 190,58 521,58 159,0 295,-16 136,-16 224,-41 z m -26,299 q -184,51 -490,51 -308,0 -496,-52 l 15,-101 q 189,49 481,49 291,0 474,-48 z m -494,1007 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z" + display="block" + id="path2" + inkscape:connector-curvature="0" /> + <g + id="g10" + transform="matrix(1,0,0,-1,0,2020)" + style="fill:#ffffff;fill-rule:nonzero"> + <path + style="color:#000000;display:block" + d="m 1588,1255 q -83,-30 -233,-49 -150,-19 -333,-20 -178,0 -326,18 -148,18 -233,49 l 50,91 q 84,-25 218,-36 134,-11 293,-11 159,0 294,11 135,11 219,37 z" + display="block" + id="path4" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1544,1733 -30,-118 q -195,-45 -490,-45 -292,0 -488,45 l -32,119 q 190,-58 521,-58 159,0 295,16 136,16 224,41 z" + display="block" + id="path6" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1518,1434 q -184,-51 -490,-51 -308,0 -496,52 l 15,101 q 189,-49 481,-49 291,0 474,48 z" + display="block" + id="path8" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/client/public/images/pieces/Maxima/bm.svg b/client/public/images/pieces/Maxima/bm.svg new file mode 100644 index 00000000..fdc0ee59 --- /dev/null +++ b/client/public/images/pieces/Maxima/bm.svg @@ -0,0 +1,92 @@ +<?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="svg44" + sodipodi:docname="bu.svg" + inkscape:version="0.92.2 2405546, 2018-03-11"> + <metadata + id="metadata50"> + <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="defs48" /> + <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="namedview46" + 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="svg44" /> + <path + style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" + d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 564,460 V 358 h 920 v 102 z m 460,1092 H 512 v -46 l 73,-55 h 879 l 71,55 v 46 z m 0,-169 H 674 l 60,-47 v -57 h 580 v 57 l 60,47 z m 0,-546 H 734 v -46 l -60,-58 h 700 l -60,58 v 46 z m 0,-172 H 610 l -46,-43 v -58 h 920 v 58 l -46,43 z" + display="block" + id="path30" + inkscape:connector-curvature="0" /> + <g + id="g42" + transform="matrix(1,0,0,-1,0,2048)" + style="fill:#ffffff;fill-rule:nonzero"> + <path + style="color:#000000;display:block" + d="m 564,1588 v 102 h 920 v -102 z" + display="block" + id="path32" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1024,496 H 512 v 46 l 73,55 h 879 l 71,-55 v -46 z" + display="block" + id="path34" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1024,665 H 674 l 60,47 v 57 h 580 v -57 l 60,-47 z" + display="block" + id="path36" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1024,1211 H 734 v 46 l -60,58 h 700 l -60,-58 v -46 z" + display="block" + id="path38" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1024,1383 H 610 l -46,43 v 58 h 920 v -58 l -46,-43 z" + display="block" + id="path40" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/client/public/images/pieces/Maxima/nothing.svg b/client/public/images/pieces/Maxima/nothing.svg new file mode 100644 index 00000000..affd020e --- /dev/null +++ b/client/public/images/pieces/Maxima/nothing.svg @@ -0,0 +1,56 @@ +<?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" + width="100" + height="100" + version="1.1" + id="svg4" + sodipodi:docname="nothing.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" /> + </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="960" + inkscape:window-height="1060" + id="namedview6" + showgrid="false" + inkscape:zoom="6.675088" + inkscape:cx="50.847458" + inkscape:cy="50" + inkscape:window-x="0" + inkscape:window-y="20" + inkscape:window-maximized="0" + inkscape:current-layer="svg4" /> + <rect + style="fill:#666666;fill-opacity:1" + id="rect21" + width="100.52302" + height="100.67283" + x="-0.14981076" + y="-0.22339767" /> +</svg> diff --git a/client/public/images/pieces/Maxima/wd.svg b/client/public/images/pieces/Maxima/wd.svg new file mode 100644 index 00000000..12f2b27a --- /dev/null +++ b/client/public/images/pieces/Maxima/wd.svg @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="45" + height="45" + viewBox="0 0 11.90625 11.90625" + version="1.1" + id="svg4393" + inkscape:version="0.92.1 r15371" + sodipodi:docname="Commoner_Transparent.svg"> + <defs + id="defs4387" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1" + inkscape:cx="5.1998528" + inkscape:cy="24.301903" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:window-width="1600" + inkscape:window-height="837" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata4390"> + <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> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-285.09373)"> + <g + id="g4499" + transform="matrix(0.28598519,0,0,0.28598519,-0.47456997,283.80785)"> + <g + id="g4399" + style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-linejoin:round"> + <!-- bojt --> + <circle + id="circle4395" + r="2.5" + cy="13.5" + cx="22.5" /> + <!-- test --> + <path + id="path4397" + d="m 11.5,37 c 5.5,3.5 15.5,3.5 21,0 v -7 c 0,0 9,-4.5 6,-11 -5.5,-7 -26.5,-7 -32,0 -3,6.5 5,10.5 5,10.5 z" + inkscape:connector-curvature="0" /> + </g> + <g + id="g4407" + style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round"> + <!-- talp --> + <path + id="path4401" + d="M 11.5,30 C 17,27 27,27 32.5,30" + inkscape:connector-curvature="0" /> + <path + id="path4403" + d="m 11.5,33.5 c 5.5,-3 15.5,-3 21,0" + inkscape:connector-curvature="0" /> + <path + id="path4405" + d="M 11.5,37 C 17,34 27,34 32.5,37" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> +</svg> diff --git a/client/public/images/pieces/Maxima/wg.svg b/client/public/images/pieces/Maxima/wg.svg new file mode 100644 index 00000000..5ab016a6 --- /dev/null +++ b/client/public/images/pieces/Maxima/wg.svg @@ -0,0 +1,145 @@ +<?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="wg.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" /> + </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="960" + inkscape:window-height="1060" + id="namedview36" + 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="svg34" /> + <path + style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" + d="m 1024,1593 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z m 0,70 q 67,0 67,67 0,66 -67,66 -66,0 -66,-66 0,-67 66,-67 z M 1533,656 q -193,49 -505,49 -320,0 -511,-50 l 15,-96 q 195,46 496,46 299,0 488,-45 z m 25,60 65,115 q -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,19 l 70,-120 q 194,56 533,56 345,0 534,-57 z m -448,239 -85,489 -85,-483 q 3,2 14,10 23,45 70,45 51,0 66,-45 6,-6 20,-16 z m 277,-19 v 463 L 1222,945 q 19,7 32,18 20,25 54,25 40,0 64,-35 3,-4 7,-8 4,-4 8,-9 z M 825,950 661,1399 V 942 q 3,4 9,10 20,42 66,42 38,0 62,-32 27,-12 27,-12 z M 571,894 356,1265 411,927 q 57,-40 111,-40 21,0 49,7 z m 903,-5 q 23,-7 51,-7 61,0 114,38 l 55,346 z m 60,-506 -30,113 q -196,43 -480,43 -281,0 -479,-43 L 514,382 q 186,56 511,56 317,0 509,-55 z m 106,-128 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -81,36 q -183,76 -531,76 -355,0 -537,-78 175,-69 534,-69 172,0 314,19 142,19 220,52 z M 604,1543 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z m 0,70 q 66,0 66,66 0,66 -66,66 -67,0 -67,-66 0,-66 67,-66 z m 840,0 q 67,0 67,66 0,66 -67,66 -66,0 -66,-66 0,-66 66,-66 z m 0,-70 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z M 236,1433 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 0,70 q 67,0 67,66 0,67 -67,67 -66,0 -66,-67 0,-66 66,-66 z m 1578,0 q 66,0 66,66 0,67 -66,67 -67,0 -67,-67 0,-66 67,-66 z m 0,-70 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z" + display="block" + id="path2" + inkscape:connector-curvature="0" /> + <g + id="g32" + transform="matrix(1,0,0,-1,0,2020)" + style="fill:#ffffff;fill-rule:nonzero"> + <path + style="color:#000000;display:block" + d="m 1024,357 q 67,0 67,-67 0,-66 -67,-66 -66,0 -66,66 0,67 66,67 z" + display="block" + id="path4" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1533,1364 q -193,-49 -505,-49 -320,0 -511,50 l 15,96 q 195,-46 496,-46 299,0 488,45 z" + display="block" + id="path6" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1558,1304 65,-115 q -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,-19 l 70,120 q 194,-56 533,-56 345,0 534,57 z" + display="block" + id="path8" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1110,1065 -85,-489 -85,483 q 3,-2 14,-10 23,-45 70,-45 51,0 66,45 6,6 20,16 z" + display="block" + id="path10" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1387,1084 V 621 l -165,454 q 19,-7 32,-18 20,-25 54,-25 40,0 64,35 3,4 7,8 4,4 8,9 z" + display="block" + id="path12" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 825,1070 661,621 v 457 q 3,-4 9,-10 20,-42 66,-42 38,0 62,32 27,12 27,12 z" + display="block" + id="path14" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 571,1126 -215,-371 55,338 q 57,40 111,40 21,0 49,-7 z" + display="block" + id="path16" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1474,1131 q 23,7 51,7 61,0 114,-38 l 55,-346 z" + display="block" + id="path18" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1534,1637 -30,-113 q -196,-43 -480,-43 -281,0 -479,43 l -31,114 q 186,-56 511,-56 317,0 509,55 z" + display="block" + id="path20" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1559,1729 q -183,-76 -531,-76 -355,0 -537,78 175,69 534,69 172,0 314,-19 142,-19 220,-52 z" + display="block" + id="path22" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 604,407 q 66,0 66,-66 0,-66 -66,-66 -67,0 -67,66 0,66 67,66 z" + display="block" + id="path24" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1444,407 q 67,0 67,-66 0,-66 -67,-66 -66,0 -66,66 0,66 66,66 z" + display="block" + id="path26" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 236,517 q 67,0 67,-66 0,-67 -67,-67 -66,0 -66,67 0,66 66,66 z" + display="block" + id="path28" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="m 1814,517 q 66,0 66,-66 0,-67 -66,-67 -67,0 -67,67 0,66 67,66 z" + display="block" + id="path30" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/client/public/images/pieces/Maxima/wm.svg b/client/public/images/pieces/Maxima/wm.svg new file mode 100644 index 00000000..bf9f16ad --- /dev/null +++ b/client/public/images/pieces/Maxima/wm.svg @@ -0,0 +1,97 @@ +<?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="svg70" + sodipodi:docname="wu.svg" + inkscape:version="0.92.2 2405546, 2018-03-11"> + <metadata + id="metadata76"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs74" /> + <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="namedview72" + 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="svg70" /> + <path + style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" + d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 1639,376 H 409 V 273 H 1639 Z M 1484,580 H 564 V 444 h 920 z m -170,717 H 734 V 819 h 580 z m 222,239 v 239 h -137 v -137 h -308 v 137 H 956 V 1638 H 649 v 137 H 512 V 1536 Z M 1459,649 1356,751 H 693 L 588,649 Z m -110,716 127,103 H 572 l 128,-103 z" + display="block" + id="path54" + inkscape:connector-curvature="0" /> + <g + id="g64" + transform="matrix(1,0,0,-1,0,2048)" + style="fill:#ffffff;fill-rule:nonzero"> + <path + style="color:#000000;display:block" + d="M 1639,1672 H 409 v 103 h 1230 z" + display="block" + id="path56" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1484,1468 H 564 v 136 h 920 z" + display="block" + id="path58" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1314,751 H 734 v 478 h 580 z" + display="block" + id="path60" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block" + d="M 1536,512 V 273 H 1399 V 410 H 1091 V 273 H 956 V 410 H 649 V 273 H 512 v 239 z" + display="block" + id="path62" + inkscape:connector-curvature="0" /> + </g> + <path + style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" + d="M 1459,649 1356,751 H 693 L 588,649 Z" + display="block" + id="path66" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" + d="m 1349,1365 127,103 H 572 l 128,-103 z" + display="block" + id="path68" + inkscape:connector-curvature="0" /> +</svg> diff --git a/client/public/images/pieces/Omega/bc.svg b/client/public/images/pieces/Omega/bc.svg index e3d2eb68..1040316f 100644 --- a/client/public/images/pieces/Omega/bc.svg +++ b/client/public/images/pieces/Omega/bc.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg18" - sodipodi:docname="bc.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="bChampion.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata24"> + id="metadata27603"> <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" @@ -36,62 +39,154 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview20" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg18" /> - <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 490,643 q 4,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,13 z m 590,371 q 70,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,16 z m -261,488 q -5,36 2,78 -60,-12 -113,-56 -32,-17 -15,-47 17,-31 47,-10 21,11 38,20 17,9 41,15 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 4,-23 3,-47 -1,-24 0,-46 97,-33 183,-82 86,-49 126,-106 48,-66 89,-156 41,-90 75,-219 34,-133 35,-266 1,-133 1,-259 0,-63 -3,-117 -3,-54 0,-55 z m -677,1423 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -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,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 404,821 q 29,20 6,48 -24,23 -53,4 -61,-40 -65,-105 1,-33 39,-31 36,3 35,37 8,32 38,47 z m 252,498 q 22,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,42 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="2.664108" + inkscape:cx="105.33637" + inkscape:cy="39.05641" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + <linearGradient + gradientTransform="translate(-52.647805,23.120975)" + id="0-9" + x1="21.375999" + x2="77.639999" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop1127" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop1129" /> + </linearGradient> + </defs> <g - id="g16" - transform="matrix(1,0,0,-1,0,2008)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 490,1365 q 4,-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,-13 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1080,994 q 70,-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,-16 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 819,506 q -5,-36 2,-78 -60,12 -113,56 -32,17 -15,47 17,31 47,10 21,-11 38,-20 17,-9 41,-15 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> + transform="matrix(1.2044555,0,0,1.2044555,-1.9681825,-0.2899927)" + id="g2329" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;fill:#1f1a17;fill-opacity:1"> + <g + id="g2325" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;fill:#1f1a17;fill-opacity:1"> + <path + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + d="m 22.527,4.833 c 0,3.024 -5.041,5.545 -7.562,7.057 -2.521,1.512 -3.529,3.276 -3.529,5.545 0,2.269 0,14.114 0,16.383 0,2.269 -5.041,4.285 -5.041,4.285 h 16.131" + id="path2323" /> + </g> <path - style="color:#000000;display:block" - d="m 1756,1774 q -1,0 2,-54 3,-54 3,-118 1,-125 0,-258 -1,-133 -36,-267 -34,-128 -75,-218 -41,-90 -89,-157 -72,-108 -196,-183 -124,-75 -259,-98 4,23 3,47 -1,24 0,46 97,33 183,82 86,49 126,106 48,66 89,156 41,90 75,219 34,133 35,266 1,133 1,259 0,63 -3,117 -3,54 0,55 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 404,1187 q 29,-20 6,-48 -24,-23 -53,-4 -61,40 -65,105 1,33 39,31 36,-3 35,-37 8,-32 38,-47 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 656,689 q 22,-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,-42 z" - display="block" - id="path14" - inkscape:connector-curvature="0" /> + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + d="m 22.447,4.833 c 0,3.024 4.98,5.545 7.47,7.057 2.49,1.512 3.485,3.276 3.485,5.545 0,2.269 0,14.114 0,16.383 0,2.269 4.981,4.285 4.981,4.285 H 22.447" + id="path2327" /> + </g> + <g + transform="matrix(1.476261,0,0,1.476261,-8.0527455,-6.06052)" + id="g2335"> + <line + style="fill:none;stroke:#ffffff;stroke-width:2;stroke-opacity:1" + x1="19.056" + y1="18.333" + x2="25.723" + y2="18.333" + id="line2331" /> + <line + style="fill:none;stroke:#ffffff;stroke-width:2;stroke-opacity:1" + x1="22.306" + y1="18.333" + x2="22.306" + y2="30.584" + id="line2333" /> </g> </svg> diff --git a/client/public/images/pieces/Omega/bw.svg b/client/public/images/pieces/Omega/bw.svg index 5c6b2bb8..70e9b793 100644 --- a/client/public/images/pieces/Omega/bw.svg +++ b/client/public/images/pieces/Omega/bw.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg16" - sodipodi:docname="bw.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="bWizard.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata22"> + id="metadata27603"> <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" @@ -36,56 +39,107 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview18" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg16" /> + showguides="false" + inkscape:zoom="1.332054" + inkscape:cx="196.56329" + inkscape:cy="93.06112" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + </defs> <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 1290,564.11538 -42,102 q -102,22 -224,22 -121,0 -222,-22 l -42,-101 q 124,31 264,31 138,0 266,-32 z m -84,206 -29,70 v 27 q -76,11 -153,11 -75,0 -152,-11 l -1,-27 -27,-70 q 85,15 180,15 96,0 182,-15 z m -35,-378 q -40,30 -80,95 h -32 q 0,-49 23,-95 z m -206,0 q 23,49 23,95 h -32 q -39,-64 -81,-95 z m 59,-18 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m -37,744.00002 v -85 q 0,-37.00002 37,-37.00002 37,0 37,37.00002 v 86 h 90 q 35,0 35,36 0,36 -35,36 h -90 v 90 q 0,37 -37,37 -37,0 -37,-37 v -90 h -88 q -35,0 -35,-36 0,-36 35,-36 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> - <g - id="g14" - transform="matrix(1,0,0,-1,0,2030.1154)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 1290,1466 -42,-102 q -102,-22 -224,-22 -121,0 -222,22 l -42,101 q 124,-31 264,-31 138,0 266,32 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1206,1260 -29,-70 v -27 q -76,-11 -153,-11 -75,0 -152,11 l -1,27 -27,70 q 85,-15 180,-15 96,0 182,15 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1171,1638 q -40,-30 -80,-95 h -32 q 0,49 23,95 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 965,1638 q 23,-49 23,-95 h -32 q -39,64 -81,95 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 987,912 v 85 q 0,37 37,37 37,0 37,-37 v -86 h 90 q 35,0 35,-36 0,-36 -35,-36 h -90 v -90 q 0,-37 -37,-37 -37,0 -37,37 v 90 h -88 q -35,0 -35,36 0,36 35,36 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - </g> + inkscape:connector-curvature="0" + d="m 24.761156,5.6531208 c -0.612827,0 -1.217631,0.037456 -1.817078,0.090985 7.716554,1.4343965 13.561168,8.1902242 13.561168,16.3202392 0,9.175029 -7.439574,16.613266 -16.614604,16.613266 -6.322302,0 -11.8176845,-3.5338 -14.6249215,-8.728119 1.97764,8.951575 9.9470875,15.653883 19.4940985,15.653883 11.032247,0 19.974459,-8.943548 19.974459,-19.975795 0.004,-11.032253 -8.940875,-19.9744589 -19.973122,-19.9744592 z" + id="path1700" + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.69328892;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" /> </svg> diff --git a/client/public/images/pieces/Omega/wc.svg b/client/public/images/pieces/Omega/wc.svg index 2dfaffa5..708a5ceb 100644 --- a/client/public/images/pieces/Omega/wc.svg +++ b/client/public/images/pieces/Omega/wc.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg6" - sodipodi:docname="wc.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="wChampion.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata12"> + id="metadata27603"> <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" @@ -36,27 +39,154 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview8" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" - d="m 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-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,10 -18,30 16,47 43,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,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,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,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,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,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 697,1319 q 13,-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,-5 -5,-2 -11,-6 z M 400,842 q -29,-18 -35,-48 1,-33 -31,-36 -35,-4 -36,30 4,66 59,105 26,21 48,-4 22,-27 -5,-47 z m 679,815 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -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,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-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,10 -18,30 16,47 43,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,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,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,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,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,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="0.9419044" + inkscape:cx="417.55145" + inkscape:cy="19.437519" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + <linearGradient + gradientTransform="translate(-52.647805,23.120975)" + id="0-9" + x1="21.375999" + x2="77.639999" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop1127" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop1129" /> + </linearGradient> + </defs> + <g + transform="matrix(1.2044555,0,0,1.2044555,-1.9681825,-0.2899927)" + id="g2329" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g2325" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none"> + <path + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + d="m 22.527,4.833 c 0,3.024 -5.041,5.545 -7.562,7.057 -2.521,1.512 -3.529,3.276 -3.529,5.545 0,2.269 0,14.114 0,16.383 0,2.269 -5.041,4.285 -5.041,4.285 h 16.131" + id="path2323" /> + </g> + <path + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + d="m 22.447,4.833 c 0,3.024 4.98,5.545 7.47,7.057 2.49,1.512 3.485,3.276 3.485,5.545 0,2.269 0,14.114 0,16.383 0,2.269 4.981,4.285 4.981,4.285 H 22.447" + id="path2327" /> + </g> + <g + transform="matrix(1.476261,0,0,1.476261,-8.0527455,-6.06052)" + id="g2335"> + <line + style="fill:none;stroke:#1f1a17;stroke-width:2;stroke-opacity:1" + x1="19.056" + y1="18.333" + x2="25.723" + y2="18.333" + id="line2331" /> + <line + style="fill:none;stroke:#1f1a17;stroke-width:2;stroke-opacity:1" + x1="22.306" + y1="18.333" + x2="22.306" + y2="30.584" + id="line2333" /> + </g> </svg> diff --git a/client/public/images/pieces/Omega/ww.svg b/client/public/images/pieces/Omega/ww.svg index f40e874a..c77e29a2 100644 --- a/client/public/images/pieces/Omega/ww.svg +++ b/client/public/images/pieces/Omega/ww.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg18" - sodipodi:docname="ww.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="wWizard.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata24"> + id="metadata27603"> <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" @@ -36,62 +39,107 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview20" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg18" /> - <path - style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" - d="m 1024,864.11538 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="1.332054" + inkscape:cx="196.56329" + inkscape:cy="93.06112" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + </defs> <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 988,1120.1154 -83,1 q -34,0 -34,34 0,34 34,34 h 83 v 86 q 0,35 36,35 35,0 35,-35 v -86 h 86 q 33,0 33,-34 0,-34 -33,-34 h -86 v -82 q 0,-36 -35,-36 -36,0 -36,36 z m 36,-578.00002 q 68,0 132,11 64,11 125,28 -117,31 -257,31 -142,0 -257,-31 58,-16 123,-27 65,-11 134,-12 z m 0,1089.00002 q 68,0 68,68 0,68 -68,68 -68,0 -68,-68 0,-68 68,-68 z m 0,-949.00002 q 117,0 225,-23 l -48,123 q -88,14 -177,14 -91,0 -178,-14 l -48,-123 q 107,23 226,23 z m 0,182 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z m -36,-377 h -32 q -56,-90 -107,-113 -24,-12 -53,-22 -29,-10 -67,-10 -7,0 -107,16 -48,7 -76,15 -28,8 -44,10 -57,7 -133,-6 -46,-8 -86,-29 l 48,-78 q 12,12 31,15 19,3 36,8 42,7 80,2 13,-3 51,-7 38,-4 101,-15 75,-11 102,-11 105,0 161,40 34,26 64,72 30,46 31,113 z m 36,-113 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m 35,113 q 0,-66 30,-112 30,-46 66,-73 55,-40 161,-40 26,0 102,11 62,10 100,14 38,4 51,8 38,5 80,-2 16,-4 35,-7 19,-3 33,-16 l 48,78 q -41,21 -87,29 -76,13 -133,6 -17,-2 -44,-10 -27,-8 -75,-15 -101,-16 -107,-16 -39,0 -68,10 -29,10 -52,22 -53,24 -108,113 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <g - id="g16" - transform="matrix(1,0,0,-1,0,2030.1154)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 1024,1488 q 68,0 132,-11 64,-11 125,-28 -117,-31 -257,-31 -142,0 -257,31 58,16 123,27 65,11 134,12 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1024,399 q 68,0 68,-68 0,-68 -68,-68 -68,0 -68,68 0,68 68,68 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1024,1348 q 117,0 225,23 l -48,-123 q -88,-14 -177,-14 -91,0 -178,14 l -48,123 q 107,-23 226,-23 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 988,1543 h -32 q -56,90 -107,113 -24,12 -53,22 -29,10 -67,10 -7,0 -107,-16 -48,-7 -76,-15 -28,-8 -44,-10 -57,-7 -133,6 -46,8 -86,29 l 48,78 q 12,-12 31,-15 19,-3 36,-8 42,-7 80,-2 13,3 51,7 38,4 101,15 75,11 102,11 105,0 161,-40 34,-26 64,-72 30,-46 31,-113 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1059,1543 q 0,66 30,112 30,46 66,73 55,40 161,40 26,0 102,-11 62,-10 100,-14 38,-4 51,-8 38,-5 80,2 16,4 35,7 19,3 33,16 l 48,-78 q -41,-21 -87,-29 -76,-13 -133,-6 -17,2 -44,10 -27,8 -75,15 -101,16 -107,16 -39,0 -68,-10 -29,-10 -52,-22 -53,-24 -108,-113 z" - display="block" - id="path14" - inkscape:connector-curvature="0" /> - </g> + inkscape:connector-curvature="0" + d="m 24.761156,5.6531208 c -0.612827,0 -1.217631,0.037456 -1.817078,0.090985 7.716554,1.4343965 13.561168,8.1902242 13.561168,16.3202392 0,9.175029 -7.439574,16.613266 -16.614604,16.613266 -6.322302,0 -11.8176845,-3.5338 -14.6249215,-8.728119 1.97764,8.951575 9.9470875,15.653883 19.4940985,15.653883 11.032247,0 19.974459,-8.943548 19.974459,-19.975795 0.004,-11.032253 -8.940875,-19.9744589 -19.973122,-19.9744592 z" + id="path1700" + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.69328892;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> </svg> diff --git a/client/public/images/pieces/Tencubed/bc.svg b/client/public/images/pieces/Tencubed/bc.svg index e3d2eb68..1040316f 100644 --- a/client/public/images/pieces/Tencubed/bc.svg +++ b/client/public/images/pieces/Tencubed/bc.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg18" - sodipodi:docname="bc.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="bChampion.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata24"> + id="metadata27603"> <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" @@ -36,62 +39,154 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview20" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg18" /> - <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 490,643 q 4,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,13 z m 590,371 q 70,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,16 z m -261,488 q -5,36 2,78 -60,-12 -113,-56 -32,-17 -15,-47 17,-31 47,-10 21,11 38,20 17,9 41,15 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 4,-23 3,-47 -1,-24 0,-46 97,-33 183,-82 86,-49 126,-106 48,-66 89,-156 41,-90 75,-219 34,-133 35,-266 1,-133 1,-259 0,-63 -3,-117 -3,-54 0,-55 z m -677,1423 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -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,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 404,821 q 29,20 6,48 -24,23 -53,4 -61,-40 -65,-105 1,-33 39,-31 36,3 35,37 8,32 38,47 z m 252,498 q 22,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,42 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="2.664108" + inkscape:cx="105.33637" + inkscape:cy="39.05641" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + <linearGradient + gradientTransform="translate(-52.647805,23.120975)" + id="0-9" + x1="21.375999" + x2="77.639999" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop1127" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop1129" /> + </linearGradient> + </defs> <g - id="g16" - transform="matrix(1,0,0,-1,0,2008)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 490,1365 q 4,-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,-13 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1080,994 q 70,-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,-16 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 819,506 q -5,-36 2,-78 -60,12 -113,56 -32,17 -15,47 17,31 47,10 21,-11 38,-20 17,-9 41,-15 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> + transform="matrix(1.2044555,0,0,1.2044555,-1.9681825,-0.2899927)" + id="g2329" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;fill:#1f1a17;fill-opacity:1"> + <g + id="g2325" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;fill:#1f1a17;fill-opacity:1"> + <path + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + d="m 22.527,4.833 c 0,3.024 -5.041,5.545 -7.562,7.057 -2.521,1.512 -3.529,3.276 -3.529,5.545 0,2.269 0,14.114 0,16.383 0,2.269 -5.041,4.285 -5.041,4.285 h 16.131" + id="path2323" /> + </g> <path - style="color:#000000;display:block" - d="m 1756,1774 q -1,0 2,-54 3,-54 3,-118 1,-125 0,-258 -1,-133 -36,-267 -34,-128 -75,-218 -41,-90 -89,-157 -72,-108 -196,-183 -124,-75 -259,-98 4,23 3,47 -1,24 0,46 97,33 183,82 86,49 126,106 48,66 89,156 41,90 75,219 34,133 35,266 1,133 1,259 0,63 -3,117 -3,54 0,55 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 404,1187 q 29,-20 6,-48 -24,-23 -53,-4 -61,40 -65,105 1,33 39,31 36,-3 35,-37 8,-32 38,-47 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 656,689 q 22,-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,-42 z" - display="block" - id="path14" - inkscape:connector-curvature="0" /> + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + d="m 22.447,4.833 c 0,3.024 4.98,5.545 7.47,7.057 2.49,1.512 3.485,3.276 3.485,5.545 0,2.269 0,14.114 0,16.383 0,2.269 4.981,4.285 4.981,4.285 H 22.447" + id="path2327" /> + </g> + <g + transform="matrix(1.476261,0,0,1.476261,-8.0527455,-6.06052)" + id="g2335"> + <line + style="fill:none;stroke:#ffffff;stroke-width:2;stroke-opacity:1" + x1="19.056" + y1="18.333" + x2="25.723" + y2="18.333" + id="line2331" /> + <line + style="fill:none;stroke:#ffffff;stroke-width:2;stroke-opacity:1" + x1="22.306" + y1="18.333" + x2="22.306" + y2="30.584" + id="line2333" /> </g> </svg> diff --git a/client/public/images/pieces/Tencubed/bw.svg b/client/public/images/pieces/Tencubed/bw.svg index 5c6b2bb8..70e9b793 100644 --- a/client/public/images/pieces/Tencubed/bw.svg +++ b/client/public/images/pieces/Tencubed/bw.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg16" - sodipodi:docname="bw.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="bWizard.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata22"> + id="metadata27603"> <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" @@ -36,56 +39,107 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview18" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg16" /> + showguides="false" + inkscape:zoom="1.332054" + inkscape:cx="196.56329" + inkscape:cy="93.06112" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + </defs> <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 1290,564.11538 -42,102 q -102,22 -224,22 -121,0 -222,-22 l -42,-101 q 124,31 264,31 138,0 266,-32 z m -84,206 -29,70 v 27 q -76,11 -153,11 -75,0 -152,-11 l -1,-27 -27,-70 q 85,15 180,15 96,0 182,-15 z m -35,-378 q -40,30 -80,95 h -32 q 0,-49 23,-95 z m -206,0 q 23,49 23,95 h -32 q -39,-64 -81,-95 z m 59,-18 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m -37,744.00002 v -85 q 0,-37.00002 37,-37.00002 37,0 37,37.00002 v 86 h 90 q 35,0 35,36 0,36 -35,36 h -90 v 90 q 0,37 -37,37 -37,0 -37,-37 v -90 h -88 q -35,0 -35,-36 0,-36 35,-36 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> - <g - id="g14" - transform="matrix(1,0,0,-1,0,2030.1154)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 1290,1466 -42,-102 q -102,-22 -224,-22 -121,0 -222,22 l -42,101 q 124,-31 264,-31 138,0 266,32 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1206,1260 -29,-70 v -27 q -76,-11 -153,-11 -75,0 -152,11 l -1,27 -27,70 q 85,-15 180,-15 96,0 182,15 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1171,1638 q -40,-30 -80,-95 h -32 q 0,49 23,95 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 965,1638 q 23,-49 23,-95 h -32 q -39,64 -81,95 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 987,912 v 85 q 0,37 37,37 37,0 37,-37 v -86 h 90 q 35,0 35,-36 0,-36 -35,-36 h -90 v -90 q 0,-37 -37,-37 -37,0 -37,37 v 90 h -88 q -35,0 -35,36 0,36 35,36 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - </g> + inkscape:connector-curvature="0" + d="m 24.761156,5.6531208 c -0.612827,0 -1.217631,0.037456 -1.817078,0.090985 7.716554,1.4343965 13.561168,8.1902242 13.561168,16.3202392 0,9.175029 -7.439574,16.613266 -16.614604,16.613266 -6.322302,0 -11.8176845,-3.5338 -14.6249215,-8.728119 1.97764,8.951575 9.9470875,15.653883 19.4940985,15.653883 11.032247,0 19.974459,-8.943548 19.974459,-19.975795 0.004,-11.032253 -8.940875,-19.9744589 -19.973122,-19.9744592 z" + id="path1700" + style="fill:#1f1a17;stroke:#1f1a17;stroke-width:1.69328892;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" /> </svg> diff --git a/client/public/images/pieces/Tencubed/wc.svg b/client/public/images/pieces/Tencubed/wc.svg index 2dfaffa5..708a5ceb 100644 --- a/client/public/images/pieces/Tencubed/wc.svg +++ b/client/public/images/pieces/Tencubed/wc.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg6" - sodipodi:docname="wc.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="wChampion.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata12"> + id="metadata27603"> <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" @@ -36,27 +39,154 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview8" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" - d="m 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-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,10 -18,30 16,47 43,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,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,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,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,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,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 697,1319 q 13,-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,-5 -5,-2 -11,-6 z M 400,842 q -29,-18 -35,-48 1,-33 -31,-36 -35,-4 -36,30 4,66 59,105 26,21 48,-4 22,-27 -5,-47 z m 679,815 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -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,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-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,10 -18,30 16,47 43,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,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,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,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,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,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="0.9419044" + inkscape:cx="417.55145" + inkscape:cy="19.437519" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + <linearGradient + gradientTransform="translate(-52.647805,23.120975)" + id="0-9" + x1="21.375999" + x2="77.639999" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop1127" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop1129" /> + </linearGradient> + </defs> + <g + transform="matrix(1.2044555,0,0,1.2044555,-1.9681825,-0.2899927)" + id="g2329" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none"> + <g + id="g2325" + style="stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none"> + <path + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + d="m 22.527,4.833 c 0,3.024 -5.041,5.545 -7.562,7.057 -2.521,1.512 -3.529,3.276 -3.529,5.545 0,2.269 0,14.114 0,16.383 0,2.269 -5.041,4.285 -5.041,4.285 h 16.131" + id="path2323" /> + </g> + <path + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.40585434;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + d="m 22.447,4.833 c 0,3.024 4.98,5.545 7.47,7.057 2.49,1.512 3.485,3.276 3.485,5.545 0,2.269 0,14.114 0,16.383 0,2.269 4.981,4.285 4.981,4.285 H 22.447" + id="path2327" /> + </g> + <g + transform="matrix(1.476261,0,0,1.476261,-8.0527455,-6.06052)" + id="g2335"> + <line + style="fill:none;stroke:#1f1a17;stroke-width:2;stroke-opacity:1" + x1="19.056" + y1="18.333" + x2="25.723" + y2="18.333" + id="line2331" /> + <line + style="fill:none;stroke:#1f1a17;stroke-width:2;stroke-opacity:1" + x1="22.306" + y1="18.333" + x2="22.306" + y2="30.584" + id="line2333" /> + </g> </svg> diff --git a/client/public/images/pieces/Tencubed/ww.svg b/client/public/images/pieces/Tencubed/ww.svg index f40e874a..c77e29a2 100644 --- a/client/public/images/pieces/Tencubed/ww.svg +++ b/client/public/images/pieces/Tencubed/ww.svg @@ -7,26 +7,29 @@ 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%" + width="177.17" + height="177.17" + shape-rendering="geometricPrecision" + image-rendering="optimizeQuality" + fill-rule="evenodd" + clip-rule="evenodd" + viewBox="0 0 50 50" version="1.1" - viewBox="0 0 2048 2048" - id="svg18" - sodipodi:docname="ww.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> + id="svg27599" + sodipodi:docname="wWizard.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> <metadata - id="metadata24"> + id="metadata27603"> <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" @@ -36,62 +39,107 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="960" - inkscape:window-height="1080" - id="namedview20" + inkscape:window-width="1920" + inkscape:window-height="1017" + id="namedview27601" showgrid="false" - inkscape:zoom="0.11523438" - inkscape:cx="1041.3559" - inkscape:cy="1024" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg18" /> - <path - style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero" - d="m 1024,864.11538 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z" - display="block" - id="path2" - inkscape:connector-curvature="0" /> + showguides="false" + inkscape:zoom="1.332054" + inkscape:cx="196.56329" + inkscape:cy="93.06112" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="svg27599" /> + <defs + id="defs27593"> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + x1="21.13" + y1="37.35" + x2="77.76" + y2="37.469" + gradientTransform="matrix(1,0,0,0.97324,47.040578,-3.1764001)"> + <stop + stop-color="#fff" + id="stop27588" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590" /> + </linearGradient> + <linearGradient + id="0-4" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279" /> + </linearGradient> + <linearGradient + id="0-4-7" + x1="21.253" + y1="37.220001" + x2="77.639999" + y2="37.349998" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop15277-5" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop15279-3" /> + </linearGradient> + <linearGradient + id="0-1" + gradientUnits="userSpaceOnUse" + x1="21.129999" + y1="37.349998" + x2="77.760002" + y2="37.469002" + gradientTransform="matrix(0.99999999,0,0,0.97323999,41.755788,2.6332667)"> + <stop + stop-color="#fff" + id="stop27588-8" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop27590-9" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(0.56086365,0,0,0.56086365,82.381854,11.602577)" + id="0-1-1" + x1="21.253" + y1="37.220001" + x2="77.760002" + y2="37.360001" + gradientUnits="userSpaceOnUse"> + <stop + stop-color="#fff" + id="stop16502" /> + <stop + offset="1" + stop-color="#fff" + stop-opacity="0" + id="stop16504" /> + </linearGradient> + </defs> <path - style="color:#000000;display:block;fill:#000000;fill-rule:nonzero" - d="m 988,1120.1154 -83,1 q -34,0 -34,34 0,34 34,34 h 83 v 86 q 0,35 36,35 35,0 35,-35 v -86 h 86 q 33,0 33,-34 0,-34 -33,-34 h -86 v -82 q 0,-36 -35,-36 -36,0 -36,36 z m 36,-578.00002 q 68,0 132,11 64,11 125,28 -117,31 -257,31 -142,0 -257,-31 58,-16 123,-27 65,-11 134,-12 z m 0,1089.00002 q 68,0 68,68 0,68 -68,68 -68,0 -68,-68 0,-68 68,-68 z m 0,-949.00002 q 117,0 225,-23 l -48,123 q -88,14 -177,14 -91,0 -178,-14 l -48,-123 q 107,23 226,23 z m 0,182 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z m -36,-377 h -32 q -56,-90 -107,-113 -24,-12 -53,-22 -29,-10 -67,-10 -7,0 -107,16 -48,7 -76,15 -28,8 -44,10 -57,7 -133,-6 -46,-8 -86,-29 l 48,-78 q 12,12 31,15 19,3 36,8 42,7 80,2 13,-3 51,-7 38,-4 101,-15 75,-11 102,-11 105,0 161,40 34,26 64,72 30,46 31,113 z m 36,-113 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m 35,113 q 0,-66 30,-112 30,-46 66,-73 55,-40 161,-40 26,0 102,11 62,10 100,14 38,4 51,8 38,5 80,-2 16,-4 35,-7 19,-3 33,-16 l 48,78 q -41,21 -87,29 -76,13 -133,6 -17,-2 -44,-10 -27,-8 -75,-15 -101,-16 -107,-16 -39,0 -68,10 -29,10 -52,22 -53,24 -108,113 z" - display="block" - id="path4" - inkscape:connector-curvature="0" /> - <g - id="g16" - transform="matrix(1,0,0,-1,0,2030.1154)" - style="fill:#ffffff;fill-rule:nonzero"> - <path - style="color:#000000;display:block" - d="m 1024,1488 q 68,0 132,-11 64,-11 125,-28 -117,-31 -257,-31 -142,0 -257,31 58,16 123,27 65,11 134,12 z" - display="block" - id="path6" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1024,399 q 68,0 68,-68 0,-68 -68,-68 -68,0 -68,68 0,68 68,68 z" - display="block" - id="path8" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1024,1348 q 117,0 225,23 l -48,-123 q -88,-14 -177,-14 -91,0 -178,14 l -48,123 q 107,-23 226,-23 z" - display="block" - id="path10" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 988,1543 h -32 q -56,90 -107,113 -24,12 -53,22 -29,10 -67,10 -7,0 -107,-16 -48,-7 -76,-15 -28,-8 -44,-10 -57,-7 -133,6 -46,8 -86,29 l 48,78 q 12,-12 31,-15 19,-3 36,-8 42,-7 80,-2 13,3 51,7 38,4 101,15 75,11 102,11 105,0 161,-40 34,-26 64,-72 30,-46 31,-113 z" - display="block" - id="path12" - inkscape:connector-curvature="0" /> - <path - style="color:#000000;display:block" - d="m 1059,1543 q 0,66 30,112 30,46 66,73 55,40 161,40 26,0 102,-11 62,-10 100,-14 38,-4 51,-8 38,-5 80,2 16,4 35,7 19,3 33,16 l 48,-78 q -41,-21 -87,-29 -76,-13 -133,-6 -17,2 -44,10 -27,8 -75,15 -101,16 -107,16 -39,0 -68,-10 -29,-10 -52,-22 -53,-24 -108,-113 z" - display="block" - id="path14" - inkscape:connector-curvature="0" /> - </g> + inkscape:connector-curvature="0" + d="m 24.761156,5.6531208 c -0.612827,0 -1.217631,0.037456 -1.817078,0.090985 7.716554,1.4343965 13.561168,8.1902242 13.561168,16.3202392 0,9.175029 -7.439574,16.613266 -16.614604,16.613266 -6.322302,0 -11.8176845,-3.5338 -14.6249215,-8.728119 1.97764,8.951575 9.9470875,15.653883 19.4940985,15.653883 11.032247,0 19.974459,-8.943548 19.974459,-19.975795 0.004,-11.032253 -8.940875,-19.9744589 -19.973122,-19.9744592 z" + id="path1700" + style="fill:#ffffff;stroke:#1f1a17;stroke-width:1.69328892;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> </svg> diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index fd26d872..5ab02fad 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -533,6 +533,8 @@ export default { for (let i=move.length -1; i >= 0; i--) this.vr.undo(move[i]); this.moves.pop(); this.cursor--; + // The board may still show the possible moves: (TODO: bad solution) + this.$refs["board"].resetCurrentAttempt(); this.inMultimove = false; }, cancelLastMove: function() { diff --git a/client/src/components/Board.vue b/client/src/components/Board.vue index 56f34880..6c26722a 100644 --- a/client/src/components/Board.vue +++ b/client/src/components/Board.vue @@ -625,6 +625,13 @@ export default { this.processArrowAttempt(e); } }, + // Called by BaseGame after partially undoing multi-moves: + resetCurrentAttempt: function() { + this.possibleMoves = []; + this.start = null; + this.click = ""; + this.selectedPiece = null; + }, processMoveAttempt: function(e) { // Obtain the move from start and end squares const [offsetX, offsetY] = diff --git a/client/src/translations/en.js b/client/src/translations/en.js index c2636745..d2ed2803 100644 --- a/client/src/translations/en.js +++ b/client/src/translations/en.js @@ -170,6 +170,7 @@ export const translations = { "Both sides of the mirror": "Both sides of the mirror", "Capture all of a kind": "Capture all of a kind", "Capture en passant": "Capture en passant", + "Capture on the edge": "Capture on the edge", "Capture powers": "Capture powers", "Captures reborn": "Captures reborn", "Change colors": "Change colors", @@ -200,6 +201,7 @@ export const translations = { "Move like a knight (v2)": "Move like a knight (v2)", "Neverending rows": "Neverending rows", "No-check mode": "No-check mode", + "Occupy the enemy palace": "Occupy the enemy palace", "Pawns move diagonally": "Pawns move diagonally", "Play at the same time": "Play at the same time", "Powerful pieces": "Powerful pieces", diff --git a/client/src/translations/es.js b/client/src/translations/es.js index cb9b15de..9af8c4b8 100644 --- a/client/src/translations/es.js +++ b/client/src/translations/es.js @@ -170,6 +170,7 @@ export const translations = { "Both sides of the mirror": "Ambos lados del espejo", "Capture all of a kind": "Capturar todo del mismo tipo", "Capture en passant": "Capturar en passant", + "Capture on the edge": "Capturar en el borde", "Capture powers": "Capturar los poderes", "Captures reborn": "Las capturas renacen", "Change colors": "Cambiar colores", @@ -200,6 +201,7 @@ export const translations = { "Move like a knight (v2)": "Moverse como un caballo (v2)", "Neverending rows": "Filas interminables", "No-check mode": "Modo sin jaque", + "Occupy the enemy palace": "Ocupar el palacio enemigo", "Pawns move diagonally": "Peones se mueven en diagonal", "Play at the same time": "Jugar al mismo tiempo", "Powerful pieces": "Piezas poderosas", diff --git a/client/src/translations/fr.js b/client/src/translations/fr.js index 5b2fb42b..95d115c6 100644 --- a/client/src/translations/fr.js +++ b/client/src/translations/fr.js @@ -170,6 +170,7 @@ export const translations = { "Both sides of the mirror": "Les deux côté du miroir", "Capture all of a kind": "Capturez tout d'un même type", "Capture en passant": "Capturer en passant", + "Capture on the edge": "Capturer sur le bord", "Capture powers": "Capturer les pouvoirs", "Captures reborn": "Les captures renaissent", "Change colors": "Changer les couleurs", @@ -200,6 +201,7 @@ export const translations = { "Move like a knight (v2)": "Bouger comme un cavalier (v2)", "Neverending rows": "Rangées sans fin", "No-check mode": "Mode sans échec", + "Occupy the enemy palace": "Occuper le palais ennemi", "Pawns move diagonally": "Les pions vont en diagonale", "Play at the same time": "Jouer en même temps", "Powerful pieces": "Pièces puissantes", diff --git a/client/src/translations/rules/Baroque/en.pug b/client/src/translations/rules/Baroque/en.pug index 5e5a752c..e368afa5 100644 --- a/client/src/translations/rules/Baroque/en.pug +++ b/client/src/translations/rules/Baroque/en.pug @@ -1,7 +1,6 @@ p.boxed - | Most pieces look the same but behave very differently. - | They generally move like an orthodox queen, - | but capturing rules are more complex. + | Pieces generally move like an orthodox queen, + | but capturing rules are quite complex. p | Note: 'Baroque' is the initial name thought by the author, diff --git a/client/src/translations/rules/Baroque/es.pug b/client/src/translations/rules/Baroque/es.pug index bde85c4e..c37396f4 100644 --- a/client/src/translations/rules/Baroque/es.pug +++ b/client/src/translations/rules/Baroque/es.pug @@ -1,6 +1,6 @@ -p.boxed - | La mayorÃa de las piezas son conocidas pero se mueven de manera diferente ; - | generalmente como una dama ortodoxa, pero las capturas son complejas. +p.boxed. + Las piezas generalmente se mueven como una dama ortodoxa, y las capturas + son bastante complejas p | Nota: el nombre elegido inicialmente por el autor es 'Baroque', diff --git a/client/src/translations/rules/Baroque/fr.pug b/client/src/translations/rules/Baroque/fr.pug index b2554faf..9cc500db 100644 --- a/client/src/translations/rules/Baroque/fr.pug +++ b/client/src/translations/rules/Baroque/fr.pug @@ -1,6 +1,6 @@ p.boxed - | La plupart des pièces sont connues mais se déplacent différemment ; - | en général comme une dame orthodoxe, mais les captures sont complexes. + | Les pièces se déplacent en général comme une dame orthodoxe, + | et les captures sont assez complexes. p | Note : le nom initialement choisit par l'auteur est 'Baroque', diff --git a/client/src/translations/rules/Maxima/en.pug b/client/src/translations/rules/Maxima/en.pug new file mode 100644 index 00000000..c1a22b1d --- /dev/null +++ b/client/src/translations/rules/Maxima/en.pug @@ -0,0 +1,20 @@ +p.boxed. + Pieces movements and captures are complex. + You can win by occupying the two squares of the last rank. + +figure.diagram-container + .diagram + | fen:xxx2xxx/1g1qk1g1/1bnmrnb1/dppppppd/8/8/8/DPPPPPPD/1BNMRNB1/1G1QK1G1/xxx2xxx: + figcaption Standard deterministic position + +p. + The pawns, queen, rook, inverted rook and knights are respectively called + Pincers, Withdrawer, Coordinator, Immobilizer and Long Leapers, and behave + exactly as in Baroque chess - so I won't describe them here, please read the + Baroque rules. + +p. + + guard mage king + + diff --git a/client/src/translations/rules/Maxima/es.pug b/client/src/translations/rules/Maxima/es.pug new file mode 100644 index 00000000..1333ed77 --- /dev/null +++ b/client/src/translations/rules/Maxima/es.pug @@ -0,0 +1 @@ +TODO diff --git a/client/src/translations/rules/Maxima/fr.pug b/client/src/translations/rules/Maxima/fr.pug new file mode 100644 index 00000000..1333ed77 --- /dev/null +++ b/client/src/translations/rules/Maxima/fr.pug @@ -0,0 +1 @@ +TODO diff --git a/client/src/translations/rules/Rococo/en.pug b/client/src/translations/rules/Rococo/en.pug index 7000378b..317024f5 100644 --- a/client/src/translations/rules/Rococo/en.pug +++ b/client/src/translations/rules/Rococo/en.pug @@ -1,7 +1,6 @@ p.boxed. - Most pieces look as usual but behave differently. - They generally move like an orthodox queen, - but capturing rules are more complex. + Pieces generally move like an orthodox queen, + but capture according to complexe rules. p. This variant comes from an attempt to fix some issues with Baroque variant, diff --git a/client/src/translations/rules/Rococo/es.pug b/client/src/translations/rules/Rococo/es.pug index c60d8709..e340b2d9 100644 --- a/client/src/translations/rules/Rococo/es.pug +++ b/client/src/translations/rules/Rococo/es.pug @@ -1,7 +1,6 @@ p.boxed. - La mayorÃa de las piezas parecen familiares pero se comportan de manera - diferente. Suelen moverse como una dama ortodoxa, - pero captura de acuerdo con reglas bastante complejas. + Las piezas se mueven generalmente como una dama ortodoxa, + pero capturan de acuerdo con reglas complejas. p. Esta variante proviene de un intento de resolver problemas con la diff --git a/client/src/translations/rules/Rococo/fr.pug b/client/src/translations/rules/Rococo/fr.pug index 4446030b..5c9d8f84 100644 --- a/client/src/translations/rules/Rococo/fr.pug +++ b/client/src/translations/rules/Rococo/fr.pug @@ -1,7 +1,6 @@ p.boxed. - La plupart des pièces semblent familières mais se comportent différemment. - Elles se déplacent en général comme une dame orthodoxe, - mais capturent selon des règles assez complexes. + Les pièces se déplacent en général comme une dame orthodoxe, + mais capturent selon des règles complexes. p. Cette variante provient d'une tentative de résoudre des problèmes avec la diff --git a/client/src/variants/Baroque.js b/client/src/variants/Baroque.js index 74617cfb..1e02cdf7 100644 --- a/client/src/variants/Baroque.js +++ b/client/src/variants/Baroque.js @@ -425,8 +425,9 @@ export class BaroqueRules extends ChessRules { if ( (sameRow && move.end.y == y) || (sameColumn && move.end.x == x) - ) + ) { return true; + } } } } @@ -454,8 +455,9 @@ export class BaroqueRules extends ChessRules { if ( this.getPiece(i, j) == V.KNIGHT && !this.isImmobilized([i, j]) - ) + ) { return true; + } continue outerLoop; } // [else] Our color, diff --git a/client/src/variants/Maxima.js b/client/src/variants/Maxima.js new file mode 100644 index 00000000..ab97a217 --- /dev/null +++ b/client/src/variants/Maxima.js @@ -0,0 +1,832 @@ +import { ChessRules, PiPo, Move } from "@/base_rules"; +import { ArrayFun } from "@/utils/array"; +import { shuffle } from "@/utils/alea"; + +export class MaximaRules extends ChessRules { + static get HasFlags() { + return false; + } + + static get HasEnpassant() { + return false; + } + + static get PIECES() { + return ChessRules.PIECES.concat([V.IMMOBILIZER, V.MAGE, V.GUARD]); + } + + getPpath(b) { + if (b[0] == 'x') return "Maxima/nothing"; + if (['m','d','g'].includes(b[1])) + return "Maxima/" + b; + return b; + } + + // For space next to the palaces: + static get NOTHING() { + return "xx"; + } + + static board2fen(b) { + if (b[0] == 'x') return 'x'; + return ChessRules.board2fen(b); + } + + static fen2board(f) { + if (f == 'x') return V.NOTHING; + return ChessRules.fen2board(f); + } + + // TODO: the wall position should be checked too + static IsGoodPosition(position) { + if (position.length == 0) return false; + const rows = position.split("/"); + if (rows.length != V.size.x) return false; + let kings = { "k": 0, "K": 0 }; + 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]]++; + if (['x'].concat(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(kings).some(v => v != 1)) return false; + return true; + } + + // No castling, but checks, so keep track of kings + setOtherVariables(fen) { + this.kingPos = { w: [-1, -1], b: [-1, -1] }; + const fenParts = fen.split(" "); + const position = fenParts[0].split("/"); + for (let i = 0; i < position.length; i++) { + let k = 0; + for (let j = 0; j < position[i].length; j++) { + switch (position[i].charAt(j)) { + case "k": + this.kingPos["b"] = [i, k]; + break; + case "K": + this.kingPos["w"] = [i, k]; + break; + default: { + const num = parseInt(position[i].charAt(j)); + if (!isNaN(num)) k += num - 1; + } + } + k++; + } + } + } + + static get size() { + return { x: 11, y: 8 }; + } + + static OnBoard(x, y) { + return ( + (x >= 1 && x <= 9 && y >= 0 && y <= 7) || + ([3, 4].includes(y) && [0, 10].includes(x)) + ); + } + + static get IMMOBILIZER() { + return "m"; + } + static get MAGE() { + return 'g'; + } + static get GUARD() { + return 'd'; + } + // Although other pieces keep their names here for coding simplicity, + // keep in mind that: + // - a "rook" is a coordinator, capturing by coordinating with the king + // - a "knight" is a long-leaper, capturing as in draughts + // - a "bishop" is a chameleon, capturing as its prey + // - a "queen" is a withdrawer, capturing by moving away from pieces + + // Is piece on square (x,y) immobilized? + isImmobilized([x, y]) { + const piece = this.getPiece(x, y); + if (piece == V.MAGE) + // Mages are not immobilized: + return false; + const oppCol = V.GetOppCol(this.getColor(x, y)); + const adjacentSteps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + for (let step of adjacentSteps) { + const [i, j] = [x + step[0], y + step[1]]; + if ( + V.OnBoard(i, j) && + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == oppCol + ) { + const oppPiece = this.getPiece(i, j); + if (oppPiece == V.IMMOBILIZER) return [i, j]; + // Only immobilizers are immobilized by chameleons: + if (oppPiece == V.BISHOP && piece == V.IMMOBILIZER) return [i, j]; + } + } + return null; + } + + getPotentialMovesFrom([x, y]) { + // Pre-check: is thing on this square immobilized? + const imSq = this.isImmobilized([x, y]); + const piece = this.getPiece(x, y); + if (!!imSq && piece != V.KING) { + // Only option is suicide, if I'm not a king: + return [ + new Move({ + start: { x: x, y: y }, + end: { x: imSq[0], y: imSq[1] }, + appear: [], + vanish: [ + new PiPo({ + x: x, + y: y, + c: this.getColor(x, y), + p: this.getPiece(x, y) + }) + ] + }) + ]; + } + let moves = undefined; + switch (piece) { + case V.IMMOBILIZER: + moves = this.getPotentialImmobilizerMoves([x, y]); + break; + case V.GUARD: + moves = this.getPotentialGuardMoves([x, y]); + break; + case V.MAGE: + moves = this.getPotentialMageMoves([x, y]); + break; + default: + moves = super.getPotentialMovesFrom([x, y]); + } + const pX = (this.turn == 'w' ? 10 : 0); + if (this.board[pX][3] == V.EMPTY && this.board[pX][4] == V.EMPTY) + return moves; + // Filter out moves resulting in self palace occupation: + // NOTE: cannot invade own palace but still check the king there. + const pY = (this.board[pX][3] == V.EMPTY ? 4 : 3); + return moves.filter(m => m.end.x != pX || m.end.y != pY); + } + + getSlideNJumpMoves([x, y], steps, oneStep, mageInitSquare, onlyTake) { + const piece = !mageInitSquare ? this.getPiece(x, y) : V.MAGE; + const initSquare = mageInitSquare || [x, y]; + let moves = []; + outerLoop: for (let step of steps) { + let i = x + step[0]; + let j = y + step[1]; + if (piece == V.KING) j = j % V.size.y; + while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { + if (!onlyTake) moves.push(this.getBasicMove(initSquare, [i, j])); + if (!!oneStep) continue outerLoop; + i += step[0]; + j += step[1]; + } + // Only king, guard and mage + chameleon can take on occupied square: + if ( + V.OnBoard(i, j) + && + this.canTake(initSquare, [i, j]) + && + ( + [V.KING, V.GUARD, V.MAGE].includes(piece) || + (piece == V.BISHOP && this.getPiece(i, j) === onlyTake) + ) + ) { + moves.push(this.getBasicMove(initSquare, [i, j])); + } + } + return moves; + } + + // Modify capturing moves among listed pawn moves + addPawnCaptures(moves, byChameleon) { + const steps = V.steps[V.ROOK]; + const color = this.turn; + const oppCol = V.GetOppCol(color); + moves.forEach(m => { + if (!!byChameleon && m.start.x != m.end.x && m.start.y != m.end.y) + // Chameleon not moving as pawn + return; + // Try capturing in every direction + for (let step of steps) { + const sq2 = [m.end.x + 2 * step[0], m.end.y + 2 * step[1]]; + if ( + V.OnBoard(sq2[0], sq2[1]) && + this.board[sq2[0]][sq2[1]] != V.EMPTY && + this.getColor(sq2[0], sq2[1]) == color + ) { + // Potential capture + const sq1 = [m.end.x + step[0], m.end.y + step[1]]; + if ( + this.board[sq1[0]][sq1[1]] != V.EMPTY && + this.getColor(sq1[0], sq1[1]) == oppCol + ) { + const piece1 = this.getPiece(sq1[0], sq1[1]); + if (!byChameleon || piece1 == V.PAWN) { + m.vanish.push( + new PiPo({ + x: sq1[0], + y: sq1[1], + c: oppCol, + p: piece1 + }) + ); + } + } + } + } + }); + } + + // "Pincer" + getPotentialPawnMoves([x, y]) { + let moves = super.getPotentialRookMoves([x, y]); + this.addPawnCaptures(moves); + return moves; + } + + addRookCaptures(moves, byChameleon) { + const color = this.turn; + const oppCol = V.GetOppCol(color); + const kp = this.kingPos[color]; + moves.forEach(m => { + // Check piece-king rectangle (if any) corners for enemy pieces + if (m.end.x == kp[0] || m.end.y == kp[1]) return; //"flat rectangle" + const corner1 = [m.end.x, kp[1]]; + const corner2 = [kp[0], m.end.y]; + for (let [i, j] of [corner1, corner2]) { + if (this.board[i][j] != V.EMPTY && this.getColor(i, j) == oppCol) { + const piece = this.getPiece(i, j); + if (!byChameleon || piece == V.ROOK) { + m.vanish.push( + new PiPo({ + x: i, + y: j, + p: piece, + c: oppCol + }) + ); + } + } + } + }); + } + + // Coordinator + getPotentialRookMoves(sq) { + let moves = super.getPotentialQueenMoves(sq); + this.addRookCaptures(moves); + return moves; + } + + getKnightCaptures(startSquare, byChameleon) { + // Look in every direction for captures + const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + const color = this.turn; + const oppCol = V.GetOppCol(color); + let moves = []; + const [x, y] = [startSquare[0], startSquare[1]]; + const piece = this.getPiece(x, y); //might be a chameleon! + outerLoop: for (let step of steps) { + let [i, j] = [x + step[0], y + step[1]]; + while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { + i += step[0]; + j += step[1]; + } + if ( + !V.OnBoard(i, j) || + this.getColor(i, j) == color || + (!!byChameleon && this.getPiece(i, j) != V.KNIGHT) + ) { + continue; + } + // last(thing), cur(thing) : stop if "cur" is our color, + // or beyond board limits, or if "last" isn't empty and cur neither. + // Otherwise, if cur is empty then add move until cur square; + // if cur is occupied then stop if !!byChameleon and the square not + // occupied by a leaper. + let last = [i, j]; + let cur = [i + step[0], j + step[1]]; + let vanished = [new PiPo({ x: x, y: y, c: color, p: piece })]; + while (V.OnBoard(cur[0], cur[1])) { + if (this.board[last[0]][last[1]] != V.EMPTY) { + const oppPiece = this.getPiece(last[0], last[1]); + if (!!byChameleon && oppPiece != V.KNIGHT) continue outerLoop; + // Something to eat: + vanished.push( + new PiPo({ x: last[0], y: last[1], c: oppCol, p: oppPiece }) + ); + } + if (this.board[cur[0]][cur[1]] != V.EMPTY) { + if ( + this.getColor(cur[0], cur[1]) == color || + this.board[last[0]][last[1]] != V.EMPTY + ) { + //TODO: redundant test + continue outerLoop; + } + } else { + moves.push( + new Move({ + appear: [new PiPo({ x: cur[0], y: cur[1], c: color, p: piece })], + vanish: JSON.parse(JSON.stringify(vanished)), //TODO: required? + start: { x: x, y: y }, + end: { x: cur[0], y: cur[1] } + }) + ); + } + last = [last[0] + step[0], last[1] + step[1]]; + cur = [cur[0] + step[0], cur[1] + step[1]]; + } + } + return moves; + } + + // Long-leaper + getPotentialKnightMoves(sq) { + return super.getPotentialQueenMoves(sq).concat(this.getKnightCaptures(sq)); + } + + // Chameleon + getPotentialBishopMoves([x, y]) { + let moves = super + .getPotentialQueenMoves([x, y]) + .concat(this.getKnightCaptures([x, y], "asChameleon")) + .concat(this.getPotentialGuardMoves([x, y], "asChameleon")) + .concat(this.getPotentialMageMoves([x, y], "asChameleon")); + // No "king capture" because king cannot remain under check + this.addPawnCaptures(moves, "asChameleon"); + this.addRookCaptures(moves, "asChameleon"); + this.addQueenCaptures(moves, "asChameleon"); + // Post-processing: merge similar moves, concatenating vanish arrays + let mergedMoves = {}; + moves.forEach(m => { + const key = m.end.x + V.size.x * m.end.y; + if (!mergedMoves[key]) mergedMoves[key] = m; + else { + for (let i = 1; i < m.vanish.length; i++) + mergedMoves[key].vanish.push(m.vanish[i]); + } + }); + return Object.values(mergedMoves); + } + + addQueenCaptures(moves, byChameleon) { + if (moves.length == 0) return; + const [x, y] = [moves[0].start.x, moves[0].start.y]; + const adjacentSteps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + let capturingDirections = []; + const color = this.turn; + const oppCol = V.GetOppCol(color); + adjacentSteps.forEach(step => { + const [i, j] = [x + step[0], y + step[1]]; + if ( + V.OnBoard(i, j) && + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == oppCol && + (!byChameleon || this.getPiece(i, j) == V.QUEEN) + ) { + capturingDirections.push(step); + } + }); + moves.forEach(m => { + const step = [ + m.end.x != x ? (m.end.x - x) / Math.abs(m.end.x - x) : 0, + m.end.y != y ? (m.end.y - y) / Math.abs(m.end.y - y) : 0 + ]; + // TODO: this test should be done only once per direction + if ( + capturingDirections.some(dir => { + return dir[0] == -step[0] && dir[1] == -step[1]; + }) + ) { + const [i, j] = [x - step[0], y - step[1]]; + m.vanish.push( + new PiPo({ + x: i, + y: j, + p: this.getPiece(i, j), + c: oppCol + }) + ); + } + }); + } + + // Withdrawer + getPotentialQueenMoves(sq) { + let moves = super.getPotentialQueenMoves(sq); + this.addQueenCaptures(moves); + return moves; + } + + getPotentialImmobilizerMoves(sq) { + // Immobilizer doesn't capture + return super.getPotentialQueenMoves(sq); + } + + getPotentialKingMoves(sq) { + return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep"); + } + + getPotentialGuardMoves(sq, byChameleon) { + const onlyTake = !byChameleon ? null : V.GUARD; + return ( + this.getSlideNJumpMoves( + sq, + V.steps[V.ROOK].concat(V.steps[V.BISHOP]), + "oneStep", + null, + onlyTake + ) + ); + } + + getNextMageSteps(step) { + if (step[0] == -1) { + if (step[1] == -1) return [[-1, 0], [0, -1]]; + return [[-1, 0], [0, 1]]; + } + if (step[1] == -1) return [[1, 0], [0, -1]]; + return [[1, 0], [0, 1]]; + } + + getPotentialMageMoves([x, y], byChameleon) { + const oppCol = V.GetOppCol(this.turn); + const onlyTake = !byChameleon ? null : V.MAGE; + let moves = []; + for (let step of V.steps[V.BISHOP]) { + let [i, j] = [x + step[0], y + step[1]]; + if (!V.OnBoard(i, j)) continue; + if (this.board[i][j] != V.EMPTY) { + if ( + this.getColor(i, j) == oppCol && + (!onlyTake || this.getPiece(i, j) == V.MAGE) + ) { + // Capture + moves.push(this.getBasicMove([x, y], [i, j])); + } + } + else { + if (!onlyTake) moves.push(this.getBasicMove([x, y], [i, j])); + // Continue orthogonally: + const stepO = this.getNextMageSteps(step); + Array.prototype.push.apply( + moves, + this.getSlideNJumpMoves([i, j], stepO, null, [x, y], onlyTake) + ); + } + } + return moves; + } + + isAttacked(sq, color) { + return ( + super.isAttacked(sq, color) || + this.isAttackedByGuard(sq, color) || + this.isAttackedByMage(sq, color) + ); + } + + isAttackedByPawn([x, y], color) { + // Square (x,y) must be surroundable by two enemy pieces, + // and one of them at least should be a pawn (moving). + const dirs = [ + [1, 0], + [0, 1] + ]; + const steps = V.steps[V.ROOK]; + for (let dir of dirs) { + const [i1, j1] = [x - dir[0], y - dir[1]]; //"before" + const [i2, j2] = [x + dir[0], y + dir[1]]; //"after" + if (V.OnBoard(i1, j1) && V.OnBoard(i2, j2)) { + if ( + ( + this.board[i1][j1] != V.EMPTY && + this.getColor(i1, j1) == color && + this.board[i2][j2] == V.EMPTY + ) + || + ( + this.board[i2][j2] != V.EMPTY && + this.getColor(i2, j2) == color && + this.board[i1][j1] == V.EMPTY + ) + ) { + // Search a movable enemy pawn landing on the empty square + for (let step of steps) { + let [ii, jj] = this.board[i1][j1] == V.EMPTY ? [i1, j1] : [i2, j2]; + let [i3, j3] = [ii + step[0], jj + step[1]]; + while (V.OnBoard(i3, j3) && this.board[i3][j3] == V.EMPTY) { + i3 += step[0]; + j3 += step[1]; + } + if ( + V.OnBoard(i3, j3) && + this.getColor(i3, j3) == color && + this.getPiece(i3, j3) == V.PAWN && + !this.isImmobilized([i3, j3]) + ) { + return true; + } + } + } + } + } + return false; + } + + isAttackedByRook([x, y], color) { + // King must be on same column or row, + // and a rook should be able to reach a capturing square + const sameRow = x == this.kingPos[color][0]; + const sameColumn = y == this.kingPos[color][1]; + if (sameRow || sameColumn) { + // Look for the enemy rook (maximum 1) + for (let i = 0; i < V.size.x; i++) { + for (let j = 0; j < V.size.y; j++) { + if ( + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == color && + this.getPiece(i, j) == V.ROOK + ) { + if (this.isImmobilized([i, j])) + // Because only one rook: + return false; + // Can it reach a capturing square? Easy but quite suboptimal way + // (TODO: generate all moves (turn is OK)) + const moves = this.getPotentialMovesFrom([i, j]); + for (let move of moves) { + if ( + (sameRow && move.end.y == y) || + (sameColumn && move.end.x == x) + ) { + return true; + } + } + } + } + } + } + return false; + } + + isAttackedByKnight([x, y], color) { + // Square (x,y) must be on same line as a knight, + // and there must be empty square(s) behind. + const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + outerLoop: for (let step of steps) { + const [i0, j0] = [x + step[0], y + step[1]]; + if (V.OnBoard(i0, j0) && this.board[i0][j0] == V.EMPTY) { + // Try in opposite direction: + let [i, j] = [x - step[0], y - step[1]]; + while (V.OnBoard(i, j)) { + while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { + i -= step[0]; + j -= step[1]; + } + if (V.OnBoard(i, j)) { + if (this.getColor(i, j) == color) { + if ( + this.getPiece(i, j) == V.KNIGHT && + !this.isImmobilized([i, j]) + ) { + return true; + } + continue outerLoop; + } + // [else] Our color, + // could be captured *if there was an empty space* + if (this.board[i + step[0]][j + step[1]] != V.EMPTY) + continue outerLoop; + i -= step[0]; + j -= step[1]; + } + } + } + } + return false; + } + + isAttackedByBishop([x, y], color) { + // We cheat a little here: since this function is used exclusively for + // the king, it's enough to check the immediate surrounding of the square. + const adjacentSteps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + for (let step of adjacentSteps) { + const [i, j] = [x + step[0], y + step[1]]; + if ( + V.OnBoard(i, j) && + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == color && + this.getPiece(i, j) == V.BISHOP && + !this.isImmobilized([i, j]) + ) { + return true; + } + } + return false; + } + + isAttackedByQueen([x, y], color) { + // Square (x,y) must be adjacent to a queen, and the queen must have + // some free space in the opposite direction from (x,y) + const adjacentSteps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]); + for (let step of adjacentSteps) { + const sq2 = [x + 2 * step[0], y + 2 * step[1]]; + if (V.OnBoard(sq2[0], sq2[1]) && this.board[sq2[0]][sq2[1]] == V.EMPTY) { + const sq1 = [x + step[0], y + step[1]]; + if ( + this.board[sq1[0]][sq1[1]] != V.EMPTY && + this.getColor(sq1[0], sq1[1]) == color && + this.getPiece(sq1[0], sq1[1]) == V.QUEEN && + !this.isImmobilized(sq1) + ) { + return true; + } + } + } + return false; + } + + isAttackedByKing([x, y], color) { + for (let step of V.steps[V.KNIGHT]) { + let rx = x + step[0], + // Circular board for king-knight: + ry = (y + step[1]) % V.size.y; + if ( + V.OnBoard(rx, ry) && + this.getPiece(rx, ry) === V.KING && + this.getColor(rx, ry) == color && + !this.isImmobilized([rx, ry]) + ) { + return true; + } + } + return false; + } + + isAttackedByGuard(sq, color) { + return ( + super.isAttackedBySlideNJump( + sq, + color, + V.GUARD, + V.steps[V.ROOK].concat(V.steps[V.BISHOP]), + "oneStep" + ) + ); + } + + getNextMageCheck(step) { + if (step[0] == 0) { + if (step[1] == 1) return [[1, 1], [-1, 1]]; + return [[-1, -1], [1, -1]]; + } + if (step[0] == -1) return [[-1, -1], [-1, 1]]; + return [[1, 1], [1, -1]]; + } + + isAttackedByMage([x, y], color) { + for (let step of V.steps[V.BISHOP]) { + const [i, j] = [x + step[0], y + step[1]]; + if ( + V.OnBoard(i, j) && + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == color && + this.getPiece(i, j) == V.MAGE + ) { + return true; + } + } + for (let step of V.steps[V.ROOK]) { + let [i, j] = [x + step[0], y + step[1]]; + const stepM = this.getNextMageCheck(step); + while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { + for (let s of stepM) { + const [ii, jj] = [i + s[0], j + s[1]]; + if ( + V.OnBoard(ii, jj) && + this.board[ii][jj] != V.EMPTY && + this.getColor(ii, jj) == color && + this.getPiece(ii, jj) == V.MAGE + ) { + return true; + } + } + i += step[0]; + j += step[1]; + } + } + return false; + } + + getCurrentScore() { + const color = this.turn; + const getScoreLost = () => { + // Result if I lose: + return color == "w" ? "0-1" : "1-0"; + }; + if (!this.atLeastOneMove()) { + // No valid move: I lose or draw + if (this.underCheck(color)) return getScoreLost(); + return "1/2"; + } + // I lose also if no pieces left (except king) + let piecesLeft = 0; + outerLoop: for (let i=0; i<V.size.x; i++) { + for (let j=0; j<V.size.y; j++) { + if ( + this.board[i][j] != V.EMPTY && + this.getColor(i, j) == color && + this.getPiece(i,j) != V.KING + ) { + piecesLeft++; + } + } + } + if (piecesLeft == 0) return getScoreLost(); + // Check if my palace is invaded: + const pX = (color == 'w' ? 10 : 0); + const oppCol = V.GetOppCol(color); + if ( + this.board[pX][3] != V.EMPTY && + this.getColor(pX, 3) == oppCol && + this.board[pX][4] != V.EMPTY && + this.getColor(pX, 4) == oppCol + ) { + return getScoreLost(); + } + return "*"; + } + + static GenRandInitFen() { + // Always deterministic: + return ( + "xxx2xxx/1g1qk1g1/1bnmrnb1/dppppppd/8/8/8/" + + "DPPPPPPD/1BNMRNB1/1G1QK1G1/xxx2xxx w 0" + ); + } + + static get VALUES() { + return { + p: 1, + r: 2, + n: 5, + b: 4, + q: 2, + m: 5, + g: 7, + d: 4, + k: 1000 + }; + } + + static get SEARCH_DEPTH() { + return 2; + } + + evalPosition() { + let evaluation = 0; + for (let i = 0; i < V.size.x; i++) { + for (let j = 0; j < V.size.y; j++) { + if (![V.EMPTY,V.NOTHING].includes(this.board[i][j])) { + const sign = this.getColor(i, j) == "w" ? 1 : -1; + evaluation += sign * V.VALUES[this.getPiece(i, j)]; + } + } + } + return evaluation; + } + + getNotation(move) { + const initialSquare = V.CoordsToSquare(move.start); + const finalSquare = V.CoordsToSquare(move.end); + if (move.appear.length == 0) + // Suicide 'S' + return initialSquare + "S"; + let notation = undefined; + if (move.appear[0].p == V.PAWN) { + // Pawn: generally ambiguous short notation, so we use full description + notation = "P" + initialSquare + finalSquare; + } else if (move.appear[0].p == V.KING) + notation = "K" + (move.vanish.length > 1 ? "x" : "") + finalSquare; + else notation = move.appear[0].p.toUpperCase() + finalSquare; + // Add a capture mark (not describing what is captured...): + if (move.vanish.length > 1 && move.appear[0].p != V.KING) notation += "X"; + return notation; + } +}; diff --git a/client/src/variants/Omega.js b/client/src/variants/Omega.js index 5431198b..258bc807 100644 --- a/client/src/variants/Omega.js +++ b/client/src/variants/Omega.js @@ -36,6 +36,7 @@ export class OmegaRules extends ChessRules { return ([V.CHAMPION, V.WIZARD].includes(b[1]) ? "Omega/" : "") + b; } + // TODO: the wall position should be checked too static IsGoodPosition(position) { if (position.length == 0) return false; const rows = position.split("/"); @@ -161,21 +162,19 @@ export class OmegaRules extends ChessRules { // The second bishop must be on a square of different color let randIndex_tmp = 2 * randInt(5) + 1; const bishop2Pos = positions[randIndex_tmp]; - positions.splice(Math.max(randIndex, randIndex_tmp), 1); - positions.splice(Math.min(randIndex, randIndex_tmp), 1); // Get random squares for champions - randIndex = 2 * randInt(4); - let bishopSameColorPos = (bishop1Pos % 2 == 0 ? bishop1Pos : bishop2Pos); - if (randIndex >= bishopSameColorPos) randIndex += 2; - const champion1Pos = positions[randIndex]; + let randIndexC = 2 * randInt(4); + if (randIndexC >= bishop1Pos) randIndexC += 2; + const champion1Pos = positions[randIndexC]; // The second champion must be on a square of different color - randIndex_tmp = 2 * randInt(4) + 1; - bishopSameColorPos = (bishop1Pos % 2 == 0 ? bishop1Pos : bishop2Pos); - if (randIndex_tmp >= bishopSameColorPos) randIndex_tmp += 2; - const champion2Pos = positions[randIndex_tmp]; - positions.splice(Math.max(randIndex, randIndex_tmp), 1); - positions.splice(Math.min(randIndex, randIndex_tmp), 1); + let randIndex_tmpC = 2 * randInt(4) + 1; + if (randIndex_tmpC >= bishop2Pos) randIndex_tmpC += 2; + const champion2Pos = positions[randIndex_tmpC]; + + let usedIndices = [randIndex, randIndex_tmp, randIndexC, randIndex_tmpC]; + usedIndices.sort(); + for (let i = 3; i >= 0; i--) positions.splice(usedIndices[i], 1); // Get random squares for other pieces randIndex = randInt(6); @@ -204,7 +203,7 @@ export class OmegaRules extends ChessRules { pieces[c][knight2Pos] = "n"; pieces[c][rook2Pos] = "r"; pieces[c][champion2Pos] = "c"; - flags += V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos); + flags += V.CoordToColumn(rook1Pos+1) + V.CoordToColumn(rook2Pos+1); } // Add turn + flags + enpassant return ( @@ -231,6 +230,7 @@ export class OmegaRules extends ChessRules { canTake([x1, y1], [x2, y2]) { return ( // Cannot take wall :) + // NOTE: this check is useful only for pawns where OnBoard() isn't used this.board[x2][y2] != V.NOTHING && this.getColor(x1, y1) !== this.getColor(x2, y2) ); diff --git a/client/src/variants/Rococo.js b/client/src/variants/Rococo.js index 8489ae90..0cfb5dc7 100644 --- a/client/src/variants/Rococo.js +++ b/client/src/variants/Rococo.js @@ -131,8 +131,9 @@ export class RococoRules extends ChessRules { getPotentialMovesFrom([x, y]) { // Pre-check: is thing on this square immobilized? const imSq = this.isImmobilized([x, y]); - if (!!imSq) { - // Only option is suicide: + const piece = this.getPiece(x, y); + if (!!imSq && piece != V.KING) { + // Only option is suicide, if I'm not a king: return [ new Move({ start: { x: x, y: y }, @@ -150,7 +151,7 @@ export class RococoRules extends ChessRules { ]; } let moves = []; - switch (this.getPiece(x, y)) { + switch (piece) { case V.IMMOBILIZER: moves = this.getPotentialImmobilizerMoves([x, y]); break; diff --git a/server/db/populate.sql b/server/db/populate.sql index 74612223..6a81e1ca 100644 --- a/server/db/populate.sql +++ b/server/db/populate.sql @@ -44,6 +44,7 @@ insert or ignore into Variants (name, description) values ('Losers', 'Get strong at self-mate'), ('Magnetic', 'Laws of attraction'), ('Marseille', 'Double moves'), + ('Maxima', 'Occupy the enemy palace'), ('Monster', 'White move twice'), ('Omega', 'A wizard in the corner'), ('Orda', 'Mongolian Horde'), @@ -52,6 +53,7 @@ insert or ignore into Variants (name, description) values ('Racingkings', 'Kings cross the 8x8 board'), ('Rifle', 'Shoot pieces'), ('Recycle', 'Reuse pieces'), + ('Rococo', 'Capture on the edge'), ('Royalrace', 'Kings cross the 11x11 board'), ('Rugby', 'Transform an essay'), ('Schess', 'Seirawan-Harper Chess'), -- 2.44.0