+# Enhancements:
+Desktop notifications
+Do not remove other challenges when one is accepted?
+
# New variants
+Finish first https://www.chessvariants.com/mvopponent.dir/dynamo.html
+https://echekk.fr/spip.php?page=article&id_article=599
+
+Monster, Horde, Colorbound
+https://www.chessvariants.com/d.betza/chessvar/dan/colclob.html
+https://lichess.org/analysis/horde#0
+https://greenchess.net/rules.php?v=monster
+https://en.wikipedia.org/wiki/Monster_chess
+https://en.wikipedia.org/wiki/Grotesque_(chess) (fun)
+
Maxima, Interweave, Roccoco
+https://www.chessvariants.com/other.dir/rococo.html
+https://www.chessvariants.com/dpieces.dir/maxima/maxima.html
+https://www.chessvariants.com/other.dir/interweave.html
Take(a)n(d)make : if capture a piece, take its power for the last of the turn and make a move like it.
If a pawn taken: direction of the capturer, can capture enemy.
+http://www.strategems.net/sections/fairy_defs.html
+Having captured, a unit must immediately, as part of its move, play a non-capturing move, using ONLY the powers of movement of the captured unit from the capture-square. If no such move is available, the capture is illegal. Promotion by capture occurs only when a pawn arrives on the promotion rank as the result of a Take & Make move. Checks are as in normal chess: after the notional capture of the checked King, the checking unit does not move away from the King’s square.
+
+Chakart :)
-Dynamo chess --> dur...
+https://en.wikipedia.org/wiki/Fairy_chess_piece
# Restore binary files (temporary fix - should use git-fat instead)
for color in "w" "b"; do
for piece in "b" "c" "d" "e" "f" "g" "h" "j" "k" "m" "n" "o" "p" "q" "r" "s"; do
- rm public/images/pieces/Eightpieces/tmp_png/"$color$piece".png
+ rm -f public/images/pieces/Eightpieces/tmp_png/"$color$piece".png
wget -q -O public/images/pieces/Eightpieces/tmp_png/"$color$piece".png https://vchess.club/images/pieces/Eightpieces/tmp_png/"$color$piece".png
done
done
-rm public/sounds/newgame.flac
+for image in "Orda" "Archer" "Lancer" "Kheshig" "Yurt"; do
+ rm -f /public/images/variants/Orda/"$image".png
+ wget -q -O public/images/variants/Orda/"$image".png https://vchess.club/images/variants/Orda/"$image".png
+done
+rm -f public/sounds/newgame.flac
wget -q -O public/sounds/newgame.flac https://vchess.club/sounds/newgame.flac
-rm public/favicon.ico
+rm -f public/favicon.ico
wget -q -O public/favicon.ico https://vchess.club/favicon.ico
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"/>
\ No newline at end of file
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="Archer.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="0.43153989"
+ inkscape:cx="-488.60694"
+ inkscape:cy="152.93221"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163"
+ showguides="false" />
+ <defs
+ id="defs1157">
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="-80.438505,2.5870606"
+ end_point="-37.112887,28.418936"
+ center_point="-58.775696,15.502998"
+ id="path-effect7013"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="true" />
+ <linearGradient
+ id="linearGradient6441"
+ inkscape:collect="always">
+ <stop
+ id="stop6437"
+ offset="0"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ <stop
+ id="stop6439"
+ offset="1"
+ style="stop-color:#806600;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6441"
+ id="linearGradient7051"
+ x1="-24.988083"
+ y1="37.56702"
+ x2="-77.532143"
+ y2="4.3375702"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ id="g7037">
+ <g
+ id="g7043"
+ transform="matrix(-0.60837538,-0.14918007,0.14918007,-0.60837538,-12.414484,26.315252)"
+ style="stroke-width:2.70321298;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ style="fill:url(#linearGradient7051);fill-opacity:1;stroke:#1f1a17;stroke-width:2.70321298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -43.123605,24.607785 6.969175,-4.632689 c 4.132406,-8.680508 0.279219,-12.4367641 -2.433189,-16.2987855 -2.040264,-2.90499868 -3.444397,-4.33752222 -4.411012,-3.54164417 -0.103485,-3.72116613 -2.314112,-3.51386873 -2.973508,-6.01304743 -1.433446,-5.4329069 1.273826,-11.7459989 6.979084,-14.2191979 0,0 -1.512311,3.882956 -0.572227,5.190899 -0.610593,0.370364 -2.184878,1.657205 -2.329773,3.024618 0.130947,4.2573156 12.03911,14.993948 13.774277,26.077117 -1.458322,2.514982 -2.007543,1.98287 -2.784837,6.17596 -1.643076,3.646914 -2.068558,5.33563 -3.300614,6.832798 -0.488806,0.593988 -1.647773,0.683554 -2.451786,1.48633 -0.323924,1.089018 0.148354,2.151176 -0.14177,2.863622 -0.731269,1.795751 -2.014562,2.973018 -4.441578,6.152526 -3.319168,2.677558 -2.58991,2.907709 -4.108987,5.386467 -10.575171,3.743421 -25.682599,-1.627355 -29.490123,0.281741 -1.13405,0.777652 -1.517564,2.774462 -1.553054,3.487718 -1.597625,-0.205106 -4.29447,2.9716 -4.29447,2.9716 -0.537037,-6.19502 3.253074,-11.989514 8.714113,-13.311748 2.512119,-0.608237 3.857271,1.846129 7.180074,0.167806 -0.240541,1.228782 1.210934,1.371828 4.736646,1.785411 4.687222,0.549833 10.500269,2.229056 16.171816,-5.533776 z"
+ id="path7011"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccscscccccccscccccscscc" />
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:2.70321298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -45.996129,-10.153971 -41.387752,8.0912848 12.128797,39.9457572"
+ id="path7026"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:2.70321298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -87.383881,-2.0626862 -33.757224,30.115606"
+ id="path7028"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#1f1a17;fill-opacity:1;stroke:#1f1a17;stroke-width:2.70321298;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -33.757224,30.115606 -0.152441,3.622242 9.95057,2.6798 -6.489361,-7.775959 -3.308768,1.473917"
+ id="path7030"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="Kheshig.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="0.86307976"
+ inkscape:cx="-485.97102"
+ inkscape:cy="175.29981"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163"
+ showguides="false" />
+ <defs
+ id="defs1157">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9464">
+ <stop
+ id="stop9462"
+ offset="0"
+ style="stop-color:#806600;stop-opacity:1" />
+ <stop
+ id="stop9460"
+ offset="1"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9456">
+ <stop
+ id="stop9454"
+ offset="0"
+ style="stop-color:#806600;stop-opacity:1" />
+ <stop
+ id="stop9452"
+ offset="1"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="37.469002"
+ x2="77.760002"
+ y1="37.220001"
+ x1="21.129999"
+ id="linearGradient9444"
+ gradientTransform="translate(-91.535601,53.38202)">
+ <stop
+ style="stop-color:#a8a6a5;stop-opacity:1"
+ offset="0"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop9442" />
+ <stop
+ stop-color="#fff"
+ id="stop9440"
+ offset="1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="-80.438505,2.5870606"
+ end_point="-37.112887,28.418936"
+ center_point="-58.775696,15.502998"
+ id="path-effect7013"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="true" />
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9464"
+ id="linearGradient8253"
+ x1="-26.933693"
+ y1="21.96928"
+ x2="-2.0408218"
+ y2="21.96928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.227182,0,0,1,6.2396816,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9456"
+ id="linearGradient8255"
+ x1="-28.773029"
+ y1="38.406345"
+ x2="-8.9171944"
+ y2="38.406345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.227182,0,0,1,6.2396816,0)" />
+ <linearGradient
+ gradientTransform="translate(-91.535601,53.38202)"
+ id="0-4"
+ x1="21.129999"
+ y1="37.220001"
+ x2="77.760002"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop8835" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop8837" />
+ </linearGradient>
+ </defs>
+ <g
+ id="g7037"
+ transform="translate(2.6788462)">
+ <g
+ id="g9450"
+ transform="matrix(-0.96182046,0,0,0.96182046,5.57492,0.66751941)">
+ <path
+ sodipodi:nodetypes="csscsccccsc"
+ inkscape:connector-curvature="0"
+ id="path8237"
+ d="m -31.592124,6.3457679 c -1.458538,0.1022853 -5.016639,0.5371741 -5.761496,5.9565311 -1.199278,8.725573 4.610808,17.002034 4.781394,19.877106 0.139634,2.353402 -1.928348,3.32362 -3.085272,4.592079 1.560799,0.348934 3.647075,-0.262081 4.682444,-1.732724 3.351425,-4.760378 -2.196524,-17.962753 2.93099,-22.368193 3.181729,-2.142439 5.851793,1.826897 8.039693,3.517832 1.19366,-0.906392 1.937638,-1.364382 4.181322,-2.476553 0.111803,-1.388371 -0.367275,-4.2808097 -0.805516,-5.6691807 -1.090544,-2.4425791 -1.643949,-5.736564 -6.951213,-6.4245228 -3.332662,-0.4319993 -6.254338,1.1989283 -8.012346,4.7276254 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccccsc"
+ inkscape:connector-curvature="0"
+ id="path8239"
+ d="m -15.823049,13.711846 c -8.997651,4.748722 -10.294025,10.611865 -9.891404,15.850565 3.314919,-1.802247 7.136138,-3.309793 12.210443,-4.087981 3.849297,-0.421056 7.6985789,0.138342 11.5478747,1.774029 1.4513528,0.08704 2.66609372,-0.02612 4.1174608,-0.347092 0.5935041,-0.385658 0.5320641,-0.462791 0.5206033,-0.848449 L 0.50488539,24.934509 C 0.02873203,24.586776 -0.92900336,24.231338 -1.4994567,23.259303 -3.789054,19.358041 -8.3796513,13.434099 -15.823049,13.711846 Z"
+ style="fill:url(#linearGradient8253);fill-opacity:1;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8241"
+ d="m -5.862521,28.66832 c -6.453398,-1.095624 -11.717056,-1.134415 -19.142026,3.323739 -0.607376,5.658152 0.503341,12.783015 -2.46102,16.429054 8.149139,2.316799 10.952144,-5.291775 13.177184,-9.468747 -0.366601,1.801082 0.03781,6.276083 -0.888673,7.894674 4.88054,-2.125081 6.5576477,-3.338155 9.434731,-5.714874 z"
+ style="fill:url(#linearGradient8255);fill-opacity:1;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8243"
+ d="m -23.280969,20.567084 c 1.960068,-0.03261 2.474093,-0.223384 4.338377,1.196086 1.120815,-1.850733 2.040864,-3.279017 5.087595,-3.8089 2.413606,0.143974 4.5851943,0.659885 6.2322653,2.25651 0.4650694,-0.372054 0.5230481,-0.621188 1.7555839,-1.785889 0.4002731,0.347093 1.1222808,1.061443 1.3356333,1.408535 -1.2872137,1.279277 -1.4176759,1.630791 -2.4933347,2.902828 -2.1180703,-1.10937 -2.8238985,-2.32558 -6.5631338,-3.046883 -2.515982,0.882429 -3.36337,2.798476 -4.731566,4.550953 -2.430959,-1.320888 -4.274488,-2.621436 -6.080721,-1.5812 0.239846,-0.730923 0.753728,-1.497291 1.119301,-2.09204 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.94487047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="Khan.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="0.86307977"
+ inkscape:cx="-290.36924"
+ inkscape:cy="164.27838"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163"
+ showguides="false" />
+ <defs
+ id="defs1157">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient15731">
+ <stop
+ style="stop-color:#ffd42a;stop-opacity:1"
+ offset="0"
+ id="stop15729" />
+ <stop
+ style="stop-color:#806600;stop-opacity:1"
+ offset="1"
+ id="stop15727" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="37.469002"
+ x2="77.760002"
+ y1="37.220001"
+ x1="21.129999"
+ id="linearGradient9444"
+ gradientTransform="translate(-91.535601,53.38202)">
+ <stop
+ style="stop-color:#a8a6a5;stop-opacity:1"
+ offset="0"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop9442" />
+ <stop
+ stop-color="#fff"
+ id="stop9440"
+ offset="1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="-80.438505,2.5870606"
+ end_point="-37.112887,28.418936"
+ center_point="-58.775696,15.502998"
+ id="path-effect7013"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="true" />
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-91.535601,53.38202)"
+ id="0-4"
+ x1="21.129999"
+ y1="37.220001"
+ x2="77.760002"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop8835" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop8837" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="274.21267,350.55066"
+ end_point="273.50284,477.30227"
+ center_point="273.85776,413.92646"
+ id="path-effect4557-0-4"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="false" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient17505"
+ x1="-49.645481"
+ y1="29.826591"
+ x2="-24.59959"
+ y2="29.826591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1955304,0,0,1.1955304,69.381107,-16.275137)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient17513"
+ x1="293.16513"
+ y1="92.385574"
+ x2="338.07141"
+ y2="92.385574"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient17515"
+ gradientUnits="userSpaceOnUse"
+ x1="293.16513"
+ y1="92.385574"
+ x2="338.07141"
+ y2="92.385574" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient17517"
+ gradientUnits="userSpaceOnUse"
+ x1="293.16513"
+ y1="92.385574"
+ x2="338.07141"
+ y2="92.385574" />
+ </defs>
+ <g
+ style="fill:url(#linearGradient17513);fill-opacity:1;stroke:#1f1a17;stroke-width:1.5631523;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="matrix(1.0832527,0,0,1.0832527,-316.89434,-75.076923)"
+ id="g4698-2">
+ <path
+ style="fill:#1f1a17;fill-opacity:1;stroke:#1f1a17;stroke-width:1.5631523;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 303.60166,106.86928 c 7.66719,2.10131 16.51137,1.72857 23.51399,-0.35626 l -4.92817,-18.880256 c -4.60008,0.196956 -9.92512,0.484373 -13.3113,0.03659 z"
+ id="path4559-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ transform="matrix(0.06852995,0,0,0.08094496,296.89962,61.263195)"
+ style="fill:url(#linearGradient17515);fill-opacity:1;stroke:#1f1a17;stroke-width:20.98776438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 275.1413,184.72989 c -31.24732,1.17794 -103.11613,38.83736 -112.63042,62.19185 -42.3113,103.86038 -85.58046,199.79956 -199.829859,294.42238 11.908253,16.00162 83.420666,6.52866 141.407899,62.88268 17.88418,-18.602 69.1607,-234.69942 84.21766,-286.09297 0.25562,-0.8725 75.1013,17.56897 85.99866,15.88871 10.87785,1.8022 85.92538,-15.79984 86.17121,-14.92453 14.48041,51.55896 63.33343,268.21713 81.00814,287.01826 C 500.09935,550.41524 571.50118,560.68855 583.58791,544.8213 470.40545,448.92483 428.21352,352.50705 387.06811,248.1793 377.81598,224.71971 306.37346,186.25772 275.1413,184.72989 Z"
+ id="path4555-2"
+ inkscape:connector-curvature="0"
+ inkscape:path-effect="#path-effect4557-0-4"
+ inkscape:original-d="m 275.61681,184.7147 c -30.98719,0.80813 -103.54305,38.73329 -113.10593,62.20704 -42.3113,103.86038 -85.58046,199.79956 -199.829859,294.42238 11.908253,16.00162 83.420666,6.52866 141.407899,62.88268 17.88418,-18.602 69.1607,-234.69942 84.21766,-286.09297 0.27569,-0.94101 87.31577,20.5843 87.31577,15.10156"
+ sodipodi:nodetypes="csccsc" />
+ <path
+ sodipodi:nodetypes="csccc"
+ inkscape:connector-curvature="0"
+ id="path4543-7-7"
+ d="m 313.70114,76.659247 c 0.72602,-1.679766 1.16307,-2.973341 2.14455,-2.989719 1.017,-0.01697 1.58408,1.476492 2.11082,3.021922 -0.83846,0.823049 -3.69262,0.786403 -4.25537,-0.0322 z"
+ style="fill:url(#linearGradient17517);fill-opacity:1;stroke:#1f1a17;stroke-width:1.56315231;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <rect
+ style="opacity:1;fill:url(#linearGradient17505);fill-opacity:1;stroke:#1f1a17;stroke-width:1.69328895;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect17497"
+ width="27.918745"
+ height="14.235797"
+ x="11.040617"
+ y="12.265562"
+ ry="5.8048873" />
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="Lancer.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="1.7261595"
+ inkscape:cx="-100.07003"
+ inkscape:cy="172.96195"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163" />
+ <defs
+ id="defs1157">
+ <linearGradient
+ id="linearGradient6441"
+ inkscape:collect="always">
+ <stop
+ id="stop6437"
+ offset="0"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ <stop
+ id="stop6439"
+ offset="1"
+ style="stop-color:#806600;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6441"
+ id="linearGradient6427"
+ x1="54.37993"
+ y1="27.899749"
+ x2="92.036465"
+ y2="27.899749"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6441"
+ id="linearGradient6435"
+ x1="5.4108348"
+ y1="18.40962"
+ x2="45.079731"
+ y2="18.40962"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ id="g6417"
+ transform="matrix(0.87446347,0,0,1.0645027,-38.025884,-8.5072976)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3973"
+ d="m 75.119024,43.874689 13.822887,0.589734 C 81.427711,39.083746 72.886976,23.620424 73.246263,10.293252 72.951274,23.647412 65.324765,39.18622 57.621403,44.429572 l 13.769501,-0.600428"
+ style="fill:url(#linearGradient6427);fill-opacity:1;stroke:#1f1a17;stroke-width:1.86823937;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path10325"
+ d="m 71.390926,43.829113 -0.01045,8.207759 c 0.915096,-0.03656 2.830209,-0.01266 3.671608,0.0038 l 0.06694,-8.165983 c -1.206008,-0.09054 -2.434451,-0.135014 -3.728098,-0.04558 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:#1f1a17;stroke-width:1.82060385;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <path
+ style="fill:url(#linearGradient6435);fill-opacity:1;stroke:#1f1a17;stroke-width:1.20167375;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 26.025297,3.3747524 C 22.079635,9.011651 15.019756,13.407269 16.093167,20.95623 19.579066,32.277372 34.070023,30.953274 42.78623,33.207337 l -3.433417,-2.439104 3.956282,-0.139806 C 37.958313,26.760195 25.468994,30.180937 20.535525,19.649065 18.399613,13.309671 24.076279,8.737338 26.025297,3.3747524 Z"
+ id="path6419"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg17620"
+ sodipodi:docname="hP.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata17624">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview17622"
+ showgrid="false"
+ inkscape:zoom="1.332054"
+ inkscape:cx="88.584999"
+ inkscape:cy="-31.530254"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg17620" />
+ <defs
+ id="defs17614">
+ <linearGradient
+ id="0"
+ gradientUnits="userSpaceOnUse"
+ x1="21.129999"
+ y1="37.349998"
+ x2="77.760002"
+ y2="37.469002"
+ gradientTransform="matrix(1,0,0,0.97324,0,1.243)"
+ xlink:href="#linearGradient15731">
+ <stop
+ stop-color="#fff"
+ id="stop17609" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop17611" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient15731">
+ <stop
+ style="stop-color:#ffd42a;stop-opacity:1"
+ offset="0"
+ id="stop15729" />
+ <stop
+ style="stop-color:#806600;stop-opacity:1"
+ offset="1"
+ id="stop15727" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="274.21267,350.55066"
+ end_point="273.50284,477.30227"
+ center_point="273.85776,413.92646"
+ id="path-effect4557-0-4"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="false" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient18255"
+ x1="12.299"
+ y1="26.6915"
+ x2="37.700001"
+ y2="26.6915"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <path
+ d="m25 46.45h-13.394c-.66-1.607-.991-3.288-.991-5.04 0-2.975.864-5.644 2.599-8.02 1.736-2.365 3.971-4.054 6.697-5.068-1.168-.527-2.125-1.327-2.862-2.398-.737-1.071-1.101-2.283-1.101-3.634 0-1.689.576-3.156 1.736-4.392 1.152-1.244 2.574-1.961 4.267-2.151-1.346-.981-2.02-2.282-2.02-3.889 0-1.351.491-2.513 1.482-3.477.982-.964 2.176-1.442 3.581-1.442 1.389 0 2.582.478 3.573 1.442.991.964 1.49 2.126 1.49 3.477 0 1.607-.669 2.909-2.02 3.889 1.693.19 3.116.906 4.267 2.151 1.16 1.236 1.736 2.703 1.736 4.392 0 1.351-.373 2.563-1.126 3.634-.753 1.071-1.71 1.87-2.862 2.398 2.726 1.014 4.961 2.703 6.697 5.068 1.736 2.373 2.599 5.04 2.599 8.02 0 1.739-.322 3.42-.965 5.04h-13.394"
+ fill="#1f1a17"
+ id="path17616" />
+ <path
+ d="m25 44.808h12.175c.347-1.154.525-2.291.525-3.403 0-2.513-.711-4.787-2.142-6.831-1.431-2.044-3.277-3.552-5.52-4.516-1.584-.62-1.643-.659-1.643-1.739 0-.849.559-1.475 1.668-1.879 1.532-1.047 2.303-2.431 2.303-4.153 0-1.244-.432-2.324-1.287-3.263-.864-.931-1.905-1.467-3.124-1.615-.999-.082-1.49-.626-1.49-1.64 0-.453.178-.873.542-1.261.898-.676 1.346-1.557 1.346-2.653 0-.898-.339-1.673-.999-2.316-.66-.643-1.448-.964-2.354-.964-.94 0-1.744.321-2.396.964-.652.643-.974 1.417-.974 2.316 0 1.079.44 1.961 1.338 2.653.364.354.542.775.542 1.261 0 1.014-.483 1.557-1.465 1.64-1.236.148-2.286.684-3.133 1.615-.855.939-1.279 2.02-1.279 3.263 0 1.722.77 3.106 2.303 4.153 1.109.412 1.668 1.046 1.668 1.879 0 1.079-.067 1.118-1.668 1.739-2.244.964-4.081 2.472-5.503 4.516-1.422 2.044-2.134 4.318-2.134 6.831 0 1.195.178 2.324.525 3.403h12.175"
+ fill="url(#0)"
+ id="path17618"
+ style="fill-opacity:1.0;fill:url(#linearGradient18255)" />
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg7747"
+ sodipodi:docname="hQ.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata7751">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview7749"
+ showgrid="false"
+ inkscape:zoom="1.8838088"
+ inkscape:cx="123.18947"
+ inkscape:cy="44.319176"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg7747" />
+ <defs
+ id="defs7739">
+ <linearGradient
+ id="0"
+ x1="21.253"
+ y1="37.220001"
+ x2="77.639999"
+ y2="37.349998"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient9464">
+ <stop
+ stop-color="#fff"
+ id="stop7734"
+ style="stop-color:#f3c926;stop-opacity:1" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop7736" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9464">
+ <stop
+ id="stop9462"
+ offset="0"
+ style="stop-color:#806600;stop-opacity:1" />
+ <stop
+ id="stop9460"
+ offset="1"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <g
+ stroke="#1f1a17"
+ stroke-width=".076"
+ id="g7745">
+ <path
+ fill="#1f1a17"
+ d="m44.541 14.723c-.94 0-1.744-.33-2.405-.982-.66-.652-.991-1.448-.991-2.396 0-.923.33-1.719.991-2.388.66-.677 1.465-1.01 2.405-1.01.931 0 1.727.33 2.388 1.01.66.669.991 1.465.991 2.388 0 .948-.33 1.744-.991 2.396-.66.652-1.456.982-2.388.982zm-4.31 29.22c-.813.711-2.633 1.304-5.461 1.786-2.828.474-6.087.72-9.77.72-3.751 0-7.05-.254-9.898-.745-2.845-.499-4.64-1.118-5.385-1.863l1.566-5.952-.694-3.895-2.184-3.793-2.108-15.426 1.211-.474 6.799 11.455.152-13.64 1.685-.296 5.182 13.716 2.777-14.757h1.719l2.777 14.707 5.131-13.665 1.71.296.152 13.64 6.824-11.481 1.16.542-2.057 15.359-2.21 3.793-.694 3.946 1.617 6.03zm-25.696-31.953c-.948 0-1.753-.322-2.413-.974-.66-.652-.991-1.456-.991-2.396 0-.923.33-1.719.991-2.379.66-.66 1.465-.991 2.413-.991.923 0 1.719.33 2.379.991.66.66.991 1.456.991 2.379 0 .94-.33 1.744-.991 2.396-.66.652-1.456.974-2.379.974zm-9.136 2.735c-.94 0-1.736-.33-2.388-.982-.652-.652-.982-1.448-.982-2.396 0-.923.33-1.719.982-2.388.652-.677 1.448-1.01 2.388-1.01.948 0 1.744.33 2.413 1.01.66.669.991 1.465.991 2.388 0 .948-.33 1.744-.991 2.396-.669.652-1.465.982-2.413.982zm19.55-3.971c-.94 0-1.744-.33-2.396-.991-.652-.66-.974-1.465-.974-2.405 0-.931.322-1.727.974-2.388.652-.66 1.456-.991 2.396-.991.923 0 1.727.33 2.396.991.669.66.999 1.456.999 2.388 0 .94-.33 1.744-.999 2.405-.669.66-1.473.991-2.396.991zm10.414 1.236c-.94 0-1.736-.322-2.388-.974-.652-.652-.982-1.456-.982-2.396 0-.923.33-1.719.982-2.379.652-.66 1.448-.991 2.388-.991.948 0 1.753.33 2.413.991.66.66.991 1.456.991 2.379 0 .94-.33 1.744-.991 2.396-.66.652-1.465.974-2.413.974z"
+ id="path7741" />
+ <path
+ fill="url(#0)"
+ d="m38.22 43.04c-3.02-1.253-7.417-1.88-13.166-1.88-5.876 0-10.312.643-13.327 1.93 2.896 1.143 7.315 1.71 13.25 1.71 2.845 0 5.444-.152 7.798-.466 2.362-.313 4.174-.745 5.444-1.295zm-13.267-34.03c1.109 0 1.66-.559 1.66-1.659 0-1.092-.55-1.643-1.66-1.643-1.092 0-1.634.55-1.634 1.643 0 1.101.542 1.659 1.634 1.659zm12.624 24.977c-3.192-.813-7.366-1.211-12.522-1.211-5.292 0-9.517.406-12.675 1.236l.373 2.379c3.217-.762 7.324-1.143 12.302-1.143 4.944 0 8.975.373 12.1 1.118l.423-2.379zm.618-1.49l1.617-2.853c-.796.322-1.609.474-2.43.474-2.218 0-3.988-.897-5.309-2.701-.991.821-2.1 1.236-3.327 1.236-1.583 0-2.853-.618-3.793-1.863-1.058 1.16-2.32 1.744-3.793 1.744-1.194 0-2.286-.406-3.277-1.219-1.389 1.77-3.183 2.65-5.385 2.65-.838 0-1.676-.152-2.506-.466l1.736 2.972c3.209-.923 7.62-1.389 13.225-1.389 5.706 0 10.118.474 13.242 1.414zm-11.11-5.927l-2.108-12.133-2.108 11.989c.051-.034.161-.119.347-.254.381-.745.957-1.118 1.736-1.118.847 0 1.389.372 1.634 1.118.102.102.271.237.5.398zm6.867.474v-11.489l-4.089 11.261c.313-.11.576-.262.796-.44.33-.415.779-.627 1.338-.627.66 0 1.194.296 1.592.872.042.068.102.136.169.212.068.076.136.144.195.212zm-13.936-.347l-4.064-11.142v11.337c.042-.068.119-.144.22-.245.33-.694.872-1.041 1.634-1.041.627 0 1.143.262 1.541.796.449.195.669.296.669.296zm-6.299 1.389l-5.334-9.203 1.363 8.382c.94.66 1.863.991 2.752.991.347 0 .754-.059 1.219-.169zm22.394.119c.381.119.804.178 1.27.178 1.01 0 1.947-.313 2.828-.94l1.363-8.585-5.461 9.347zm1.49 12.556l-.745-2.802c-3.243-.711-7.205-1.067-11.904-1.067-4.648 0-8.611.356-11.879 1.067l-.771 2.828c3.073-.931 7.298-1.389 12.675-1.389 5.241 0 9.449.449 12.624 1.363zm-23.06-30.514c1.084 0 1.634-.542 1.634-1.634 0-1.092-.55-1.634-1.634-1.634-1.109 0-1.668.542-1.668 1.634 0 1.092.559 1.634 1.668 1.634zm20.828 0c1.109 0 1.668-.542 1.668-1.634 0-1.092-.559-1.634-1.668-1.634-1.084 0-1.634.542-1.634 1.634 0 1.092.55 1.634 1.634 1.634zm-29.964 2.735c1.109 0 1.668-.55 1.668-1.643 0-1.109-.559-1.659-1.668-1.659-1.084 0-1.634.55-1.634 1.659 0 1.092.55 1.643 1.634 1.643zm39.14 0c1.092 0 1.642-.55 1.642-1.643 0-1.109-.55-1.659-1.642-1.659-1.101 0-1.66.55-1.66 1.659 0 1.092.559 1.643 1.66 1.643z"
+ id="path7743"
+ style="fill-opacity:1.0" />
+ </g>
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="Yurt.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="1.2205791"
+ inkscape:cx="-338.20187"
+ inkscape:cy="102.28191"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163"
+ showguides="false" />
+ <defs
+ id="defs1157">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient15731">
+ <stop
+ style="stop-color:#ffd42a;stop-opacity:1"
+ offset="0"
+ id="stop15729" />
+ <stop
+ style="stop-color:#806600;stop-opacity:1"
+ offset="1"
+ id="stop15727" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="37.469002"
+ x2="77.760002"
+ y1="37.220001"
+ x1="21.129999"
+ id="linearGradient9444"
+ gradientTransform="translate(-91.535601,53.38202)">
+ <stop
+ style="stop-color:#a8a6a5;stop-opacity:1"
+ offset="0"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop9442" />
+ <stop
+ stop-color="#fff"
+ id="stop9440"
+ offset="1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="-80.438505,2.5870606"
+ end_point="-37.112887,28.418936"
+ center_point="-58.775696,15.502998"
+ id="path-effect7013"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="true" />
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-91.535601,53.38202)"
+ id="0-4"
+ x1="21.129999"
+ y1="37.220001"
+ x2="77.760002"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop8835" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop8837" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15731"
+ id="linearGradient15725"
+ x1="55.863873"
+ y1="27.1091"
+ x2="105.88728"
+ y2="27.1091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-55.875578,-2.1090998)" />
+ </defs>
+ <g
+ id="g15751"
+ transform="matrix(0.87253523,0,0,0.87253523,3.1866192,8.0275132)">
+ <path
+ style="fill:url(#linearGradient15725);fill-opacity:1;stroke:#1f1a17;stroke-width:1.94065392;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0.887186,42.611739 H 49.165062 V 26.82446 c 0,-8.076737 -16.73686,-18.5353648 -18.075555,-18.9937143 C 27.94641,7.3249167 23.197216,7.2322127 19.477184,7.6758487 17.367375,7.9225282 0.834938,18.745988 0.834938,26.781028 c 0,8.398128 0.05225,5.248532 0.05225,15.830711 z"
+ id="path15599"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#1f1a17;stroke-width:1.94065392;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1.176444,26.503616 47.687858,-0.17341"
+ id="path15601"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(-55.875578,-2.1090998)"
+ style="stroke:#1f1a17;stroke-opacity:1"
+ id="g15703">
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 56.763004,36.242774 8.583815,8.641619"
+ id="path15628"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 58.554911,28.901733 74.450866,44.739884"
+ id="path15632"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path15636"
+ d="m 66.878611,28.265895 16.6474,16.416186"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path15640"
+ d="M 76.936414,28.728322 93.005779,44.739884"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 85.838148,28.554912 102.08092,44.682081"
+ id="path15644"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 94.789569,28.084367 105.39475,38.886904"
+ id="path15648"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ style="stroke:#1f1a17;stroke-opacity:1"
+ transform="matrix(-1,0,0,1,106.28392,-2.1090998)"
+ id="g15717">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path15705"
+ d="m 56.763004,36.242774 8.583815,8.641619"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path15707"
+ d="M 58.554911,28.901733 74.450866,44.739884"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 66.878611,28.265895 16.6474,16.416186"
+ id="path15709"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 76.936414,28.728322 93.005779,44.739884"
+ id="path15711"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path15713"
+ d="M 85.838148,28.554912 102.08092,44.682081"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path15715"
+ d="M 94.789569,28.084367 105.39475,38.886904"
+ style="fill:none;stroke:#1f1a17;stroke-width:0.84664446;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ 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"
+ id="svg1163"
+ sodipodi:docname="wH.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1167">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="namedview1165"
+ showgrid="false"
+ inkscape:zoom="1.7261595"
+ inkscape:cx="-29.651529"
+ inkscape:cy="88.302288"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1163"
+ showguides="false" />
+ <defs
+ id="defs1157">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9464">
+ <stop
+ id="stop9462"
+ offset="0"
+ style="stop-color:#806600;stop-opacity:1" />
+ <stop
+ id="stop9460"
+ offset="1"
+ style="stop-color:#ffd42a;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="37.469002"
+ x2="77.760002"
+ y1="37.220001"
+ x1="21.129999"
+ id="linearGradient9444"
+ gradientTransform="translate(-91.535601,53.38202)">
+ <stop
+ style="stop-color:#a8a6a5;stop-opacity:1"
+ offset="0"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop9442" />
+ <stop
+ stop-color="#fff"
+ id="stop9440"
+ offset="1" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="mirror_symmetry"
+ start_point="-80.438505,2.5870606"
+ end_point="-37.112887,28.418936"
+ center_point="-58.775696,15.502998"
+ id="path-effect7013"
+ is_visible="true"
+ mode="free"
+ discard_orig_path="false"
+ fuse_paths="true"
+ oposite_fuse="true" />
+ <linearGradient
+ id="0"
+ x1="21.19"
+ y1="37.552"
+ x2="77.74"
+ y2="37.429"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop1152" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop1154" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9444"
+ id="linearGradient8253"
+ x1="-26.933693"
+ y1="21.96928"
+ x2="-2.0408218"
+ y2="21.96928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.227182,0,0,1,6.2396816,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9444"
+ id="linearGradient8255"
+ x1="-28.773029"
+ y1="38.406345"
+ x2="-8.9171944"
+ y2="38.406345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.227182,0,0,1,6.2396816,0)" />
+ <linearGradient
+ gradientTransform="translate(-91.535601,53.38202)"
+ id="0-4"
+ x1="21.129999"
+ y1="37.220001"
+ x2="77.760002"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop8835" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop8837" />
+ </linearGradient>
+ <linearGradient
+ id="0-5"
+ x1="21.253"
+ y1="37.220001"
+ x2="77.639999"
+ y2="37.349998"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient9464">
+ <stop
+ stop-color="#fff"
+ id="stop7734" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop7736" />
+ </linearGradient>
+ </defs>
+ <g
+ id="g7037"
+ transform="translate(2.6788462)">
+ <g
+ id="g9450"
+ transform="matrix(-0.96182046,0,0,0.96182046,5.57492,0.66751941)">
+ <path
+ sodipodi:nodetypes="csscsccccsc"
+ inkscape:connector-curvature="0"
+ id="path8237"
+ d="m -31.592124,6.3457679 c -1.458538,0.1022853 -5.016639,0.5371741 -5.761496,5.9565311 -1.199278,8.725573 4.610808,17.002034 4.781394,19.877106 0.139634,2.353402 -1.928348,3.32362 -3.085272,4.592079 1.560799,0.348934 3.647075,-0.262081 4.682444,-1.732724 3.351425,-4.760378 -2.196524,-17.962753 2.93099,-22.368193 3.181729,-2.142439 5.851793,1.826897 8.039693,3.517832 1.19366,-0.906392 1.937638,-1.364382 4.181322,-2.476553 0.111803,-1.388371 -0.367275,-4.2808097 -0.805516,-5.6691807 -1.090544,-2.4425791 -1.643949,-5.736564 -6.951213,-6.4245228 -3.332662,-0.4319993 -6.254338,1.1989283 -8.012346,4.7276254 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccccsc"
+ inkscape:connector-curvature="0"
+ id="path8239"
+ d="m -15.823049,13.711846 c -8.997651,4.748722 -10.294025,10.611865 -9.891404,15.850565 3.314919,-1.802247 7.136138,-3.309793 12.210443,-4.087981 3.849297,-0.421056 7.6985789,0.138342 11.5478747,1.774029 1.4513528,0.08704 2.66609372,-0.02612 4.1174608,-0.347092 0.5935041,-0.385658 0.5320641,-0.462791 0.5206033,-0.848449 L 0.50488539,24.934509 C 0.02873203,24.586776 -0.92900336,24.231338 -1.4994567,23.259303 -3.789054,19.358041 -8.3796513,13.434099 -15.823049,13.711846 Z"
+ style="fill:url(#linearGradient8253);fill-opacity:1.0;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8241"
+ d="m -5.862521,28.66832 c -6.453398,-1.095624 -11.717056,-1.134415 -19.142026,3.323739 -0.607376,5.658152 0.503341,12.783015 -2.46102,16.429054 8.149139,2.316799 10.952144,-5.291775 13.177184,-9.468747 -0.366601,1.801082 0.03781,6.276083 -0.888673,7.894674 4.88054,-2.125081 6.5576477,-3.338155 9.434731,-5.714874 z"
+ style="fill:url(#linearGradient8255);fill-opacity:1.0;stroke:#1f1a17;stroke-width:1.76050425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8243"
+ d="m -23.280969,20.567084 c 1.960068,-0.03261 2.474093,-0.223384 4.338377,1.196086 1.120815,-1.850733 2.040864,-3.279017 5.087595,-3.8089 2.413606,0.143974 4.5851943,0.659885 6.2322653,2.25651 0.4650694,-0.372054 0.5230481,-0.621188 1.7555839,-1.785889 0.4002731,0.347093 1.1222808,1.061443 1.3356333,1.408535 -1.2872137,1.279277 -1.4176759,1.630791 -2.4933347,2.902828 -2.1180703,-1.10937 -2.8238985,-2.32558 -6.5631338,-3.046883 -2.515982,0.882429 -3.36337,2.798476 -4.731566,4.550953 -2.430959,-1.320888 -4.274488,-2.621436 -6.080721,-1.5812 0.239846,-0.730923 0.753728,-1.497291 1.119301,-2.09204 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.94487047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+#$# git-fat 95df899f13b1adefad85a23ce0f0acd17396b4b4 14751
--- /dev/null
+#$# git-fat b608821fb2bf1200c83124776a0d027e6cbc3172 8879
--- /dev/null
+#$# git-fat 0aae5c4c8931f94b873015655f24cb9e4c9a0b04 13796
--- /dev/null
+#$# git-fat 9f7c4f64cccdb2c7556cdff2c79a1ad81530e48c 390147
--- /dev/null
+#$# git-fat cc8411397ba9c18c7615b626c1789ec98083259f 6547
--- /dev/null
+Here are some binary images used for some variants.
+Currently only Orda.
}
// Path to promotion pieces (usually the same)
- getPPpath(b) {
- return this.getPpath(b);
+ getPPpath(m) {
+ return this.getPpath(m.appear[0].c + m.appear[0].p);
}
// Aggregates flags into one object
const c = V.GetOppCol(this.turn);
const firstRank = (c == "w" ? V.size.x - 1 : 0);
// Update castling flags if rooks are moved
- const oppCol = V.GetOppCol(c);
+ const oppCol = this.turn;
const oppFirstRank = V.size.x - 1 - firstRank;
if (piece == V.KING && move.appear.length > 0)
this.castleFlags[c] = [V.size.y, V.size.y];
attrs: {
src:
"/images/pieces/" +
- this.vr.getPPpath(
- m.appear[0].c + m.appear[0].p,
- // Extra arg useful for some variants:
- this.orientation) +
+ // orientation: extra arg useful for some variants:
+ this.vr.getPPpath(m, this.orientation) +
V.IMAGE_EXTENSION
},
class: { "choice-piece": true },
Subject: "Subject",
"Symmetric random": "Symmetric random",
"Terminate game?": "Terminate game?",
+ "The game should be in another tab": "The game should be in another tab",
"Three repetitions": "Three repetitions",
Time: "Time",
"Undetermined result": "Undetermined result",
"Mate any piece (v2)": "Mate any piece (v2)",
"Mate the knight": "Mate the knight",
"Middle battle": "Middle battle",
+ "Mongolian Horde": "Mongolian Horde",
"Move like a knight (v1)": "Move like a knight (v1)",
"Move like a knight (v2)": "Move like a knight (v2)",
"Move twice": "Move twice",
"Pawns move diagonally": "Pawns move diagonally",
"Play at the same time": "Play at the same time",
"Powerful pieces": "Powerful pieces",
+ "Push and pull": "Push and pull",
"Queen disguised as a pawn": "Queen disguised as a pawn",
"Reuse pieces": "Reuse pieces",
"Reverse captures": "Reverse captures",
Subject: "Asunto",
"Symmetric random": "Aleatorio simétrico",
"Terminate game?": "ÂżTerminar la partida?",
+ "The game should be in another tab": "la partida deberĂa estar en otra pestaña",
"Three repetitions": "Tres repeticiones",
Time: "Tiempo",
"Undetermined result": "Resultado indeterminado",
"Mate any piece (v2)": "Matar cualquier pieza (v2)",
"Mate the knight": "Matar el caballo",
"Middle battle": "Batalla media",
+ "Mongolian Horde": "Horda mongol",
"Move like a knight (v1)": "Moverse como un caballo (v1)",
"Move like a knight (v2)": "Moverse como un caballo (v2)",
"Move twice": "Mover dos veces",
"Pawns move diagonally": "Peones se mueven en diagonal",
"Play at the same time": "Jugar al mismo tiempo",
"Powerful pieces": "Piezas poderosas",
+ "Push and pull": "Empujar y tirar",
"Queen disguised as a pawn": "Reina disfrazada de peĂłn",
"Reuse pieces": "Reutilizar piezas",
"Reverse captures": "Capturas invertidas",
Subject: "Sujet",
"Symmetric random": "Aléatoire symétrique",
"Terminate game?": "Stopper la partie ?",
+ "The game should be in another tab": "La partie devrait ĂŞtre dans un autre onglet",
"Three repetitions": "Triple répétition",
Time: "Temps",
"Undetermined result": "Résultat indéterminé",
"Mate any piece (v2)": "Matez n'importe quelle pièce (v2)",
"Mate the knight": "Matez le cavalier",
"Middle battle": "Bataille du milieu",
+ "Mongolian Horde": "Horde mongole",
"Move like a knight (v1)": "Bouger comme un cavalier (v1)",
"Move like a knight (v2)": "Bouger comme un cavalier (v2)",
"Move twice": "Jouer deux coups",
"Pawns move diagonally": "Les pions vont en diagonale",
"Play at the same time": "Jouer en mĂŞme temps",
"Powerful pieces": "Pièces puissantes",
+ "Push and pull": "Pousser et tirer",
"Queen disguised as a pawn": "Reine déguisée en pion",
"Reuse pieces": "Réutiliser les pièces",
"Reverse captures": "Captures inversées",
--- /dev/null
+p.boxed
+ | TODO: not playable yet!
--- /dev/null
+p.boxed
+ | TODO: no jugable en este momento!
--- /dev/null
+p.boxed
+ | TODO: pas jouable pour le moment !
--- /dev/null
+p.boxed
+ | The player in second has a different set of pieces,
+ | moving roughly like "augmented knights".
+
+img.img-center(src="/images/variants/Orda/Orda.png")
+
+p
+ | Orda Chess is a chess variant designed in 2020 by Couch Tomato.
+ span.italic
+ | Note: he'd rather remain anonymous :)
+ | Anyway this text and all the images are from him.
+ | The idea of the game was to create a true asymmetric chess with
+ | two different armies. Ralph Betza's
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | Chess with Different Armies
+ | was an inspiration, but the goal was to be a little more streamlined
+ | with the theme here.
+ | In this case, the theme of the new army is knight-based movement,
+ | where most pieces have an element of knight movement.
+ | Given the knight (or horse) theme, this was modeled after the
+ | Mongol army and named the Horde. An "orda" was a military structure
+ | for the people of the Steppes, which also gave rise to the English word
+ | "horde." The original chess army is named the Kingdom for contrast.
+ | The game itself is incredibly balanced by engine evaluation (even more
+ | than standard chess), with a near 50-50 win ratio for
+ | the Kingdom and Horde.
+
+h3 General Rules
+
+ol
+ li.
+ Setup is as above. Despite new pieces, the placement of the Horde pieces
+ mirror their chess counterparts.
+ li The Kingdom always moves first.
+ li The Horde cannot castle.
+ li.
+ As Horde pawns start on the third rank, they do not have the option to
+ move two spaces or be captured by en passant. Kingdom pawns retain the
+ ability to move two spaces initially and to be captured via en passant.
+ li Pawns can only promote to a queen or kheshig.
+ li.
+ An additional method of victory is available: called campmate. Campmate is
+ achieved by moving one's king into the final rank without being check.
+ li Other rules, including stalemate and repetition are as in chess.
+
+h3 Horde Pieces
+
+p.
+ There are four new units unique* to the Horde: 2 Lancers, 2 Horse Archers,
+ 2 Kheshigs, and 1 Yurt (* exception being that the Kingdom can still obtain
+ a Kheshig by promotion). The Kheshigs are the strongest piece
+ (knight + king movement) and lead each flank, while the Yurt is a fairly
+ weak piece unlike the Queen. The Horde's king is called the Khan and looks
+ different, but is essentially the same as the Kingdom's King, also using
+ the same abbreviation (K) — the change is purely aesthetic and
+ thematic.
+
+p.
+ The Horde Lancer and Horse Archer are unique in that they capture
+ differently than movement. Remember that the Horde is horse-based, so the
+ Lancer and Horse Archer both move like knights. They capture like rooks
+ and bishops, respectively. The Kheshig is more traditional in that it
+ captures where it moves; it combines the movements of the knight and king.
+ Similarly, the Yurt also captures the same way it moves; it moves as the
+ silver general in Shogi.
+
+table
+ tr
+ th Horde piece
+ th Kingdom "counterpart"
+ th Movement
+ th Capture
+ tr
+ td Yurt
+ td Queen
+ td "Silver"
+ td "Silver"
+ tr
+ td Horse Archer
+ td Bishop
+ td Knight
+ td Bishop
+ tr
+ td Kheshig
+ td Knight
+ td Knight+King
+ td Knight+King
+ tr
+ td Lancer
+ td Rook
+ td Knight
+ td Rook
+
+p.
+ Details and diagrams of each piece are below. Green dots represent movement,
+ red dots represent capture, and yellow represents both.
+
+h4 Yurt (Y)
+
+img.img-center(src="/images/variants/Orda/Yurt.png")
+
+p.
+ The Yurt moves and captures one space diagonally or one space forward.
+ This is the same as a silver general from Shogi or the bishop/khon
+ from Makruk. There is only one yurt, starting in the queen's spot,
+ but unlike the queen, it is very much a minor piece, the weakest piece
+ in the game aside from a pawn. It should not be underestimated though,
+ because it is one of the few Horde pieces that can move and capture
+ the same way. The other two are the Khan and Kheshig, which are the two
+ most valuable pieces. Therefore the yurt has the unique role of reliably
+ supporting pawns and other pieces without fear of retaliation.
+
+p.
+ A yurt is a mobile home for Mongol and Turkic people in the steppes of
+ Asia. Their limited mobility but importance for supporting the army is
+ reflected in this piece.
+
+h4 Kheshig (H)
+
+img.img-center(src="/images/variants/Orda/Kheshig.png")
+
+p.
+ The Kheshig is a hybrid piece that moves and captures as a knight and
+ king combined. This piece type is also generically called the centaur.
+ The kheshig starts in the knight's spot, but unlike the knight,
+ is the strongest Horde piece. It can be thought of the general that leads
+ its own troop on each flank. It is generally preferred to keep the kheshigs
+ safely behind during early to mid game because of their extreme importance
+ to the Horde in the endgame.
+
+p.
+ The kheshigs were the elite imperial guard for the Mongol royalty.
+ Appropriately, it is incredibly difficult for the Kingdom to checkmate
+ the khan without at least eliminating one of his kheshigs first.
+
+h4 Horse Archer (A)
+
+img.img-center(src="/images/variants/Orda/Archer.png")
+
+p.
+ The Horse Archer, or simply abbreviated Archer, is a unique "pseudohybrid"
+ piece that moves and attacks differently. The archer moves as a knight but
+ captures as a bishop. Because the archer is not colorbound,
+ its value is greater than its bishop counterpart.
+
+p.
+ Horse Archers were one of the two core components of the Mongol cavalry,
+ functioning as the light cavalry. Their speed and prowess as mounted
+ archers made them a unique threat. Their ability to quickly position
+ themselves for a deadly skewer or fork make them a dangerous threat
+ for the Kingdom.
+
+h4 Lancer (L)
+
+img.img-center(src="/images/variants/Orda/Lancer.png")
+
+p.
+ The Lancer is a unique "pseudohybrid" piece that moves and attacks
+ differently. The lancer moves as a knight but captures as a rook.
+ Because the lancer is not as mobile as the rook, it is generally
+ weaker than the rook, and this becomes more pronounced in the endgame,
+ as it cannot move across the board as quickly as a rook can.
+ Its value is still comparable to the horse archer.
+
+p.
+ Lancers were one of the two core components of the Mongol cavalry,
+ functioning as the heavy cavalry. Despite being weaker than the rook,
+ their ability to come into play much earlier in the game is an advantage
+ that the Horde player should utilize.
+
+h4 Piece valuation
+
+p.
+ Accurate piece values are unknown. However, these are the values used by
+ Fairy Stockfish, noting that they are generic values,
+ not necessarily specific to Orda chess.
+
+table
+ tr
+ th Kingdom piece
+ th Value (Early / Late)
+ th Horde piece
+ th Value (Early / Late)
+ tr
+ td Pawn
+ td 120 / 213
+ td Pawn
+ td 120 / 213
+ tr
+ td Queen
+ td 2538 / 2682
+ td Yurt
+ td 630 / 630
+ tr
+ td Bishop
+ td 825 / 915
+ td Horse Archer
+ td 1100 / 1200
+ tr
+ td Knight
+ td 781 / 854
+ td Kheshig
+ td 1600 / 1700
+ tr
+ td Rook
+ td 1276 / 1380
+ td Lancer
+ td 1050 / 1250
+
+p
+ | For those who want a more simplified approach, this table may be
+ | an approximation.
+ span.italic Note: this simplification is used by the weak bot here.
+
+table
+ tr
+ th Kingdom piece
+ th Value
+ th Horde piece
+ th Value
+ tr
+ td Pawn
+ td 1
+ td Pawn
+ td 1
+ tr
+ td Queen
+ td 9
+ td Yurt
+ td 2
+ tr
+ td Bishop
+ td 3
+ td Horse Archer
+ td 4
+ tr
+ td Knight
+ td 3
+ td Kheshig
+ td 7
+ tr
+ td Rook
+ td 5
+ td Lancer
+ td 4
+
+p.
+ As a whole, the Horde army is weaker than the Kingdom in value
+ (based on Stockfish valuation).
+ However, the Horde also starts with pawns in the third rank,
+ which balances the game.
+
+h3 Strategy
+
+p.
+ The game is still young, so strategy is still being developed!
+ Much of the data is currently based on Engine play.
+ The Horde cannot castle. However, a very fundamental component of a
+ majority Horde openings is to move the Khan to f7.
+ Reaching this spot in within the first four moves is ideal
+ — in fact, Fairy Stockfish opened up with Kf7 in 56% of its games.
+ The rest is variable.
+ For the Kingdom, d4, g3 and b3 are the most common openings in that order.
--- /dev/null
+p.boxed
+ | El segundo jugador tiene un conjunto diferente de piezas,
+ | moviéndose aproximadamente como "caballos aumentados".
+
+img.img-center(src="/images/variantes/Orda/Orda.png")
+
+p
+ | Orda Chess es una variante inventada en 2020 por Couch Tomato
+ span.italic
+ | Nota: Ă©l prefiere permanecer en el anonimato :) En cualquier caso,
+ | la versión Inglés de este texto y todas las imágenes son de él.
+ | La idea de este juego era conseguir una pelea asimétrica real con
+ | diferentes ejércitos Las variaciones de Ralph Betza
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | con diferentes ejércitos
+ | fueron una inspiraciĂłn pero el objetivo era estar en
+ | adecuaciĂłn con el tema actual. En nuestro caso, el tema de
+ | nuevo ejĂ©rcito es como se mueve el caballo: la mayorĂa de las piezas
+ | tener un elemento que evoca el movimiento del caballo.
+ | Dado este "tema del caballo", esta variante fue construida
+ | después del ejército mongol y llamó a la Horda. Una "orda" era un
+ | estructura militar para el pueblo de las estepas, y la palabra española
+ | "horda" viene de ahi. El ejército original se llama "el Reino", para el
+ | contraste El juego en sĂ está increĂblemente equilibrado segĂşn
+ | evaluación del módulo (en realidad más que para ajedrez estándar),
+ | con una proporciĂłn de ganancias cercana a 50-50 para el Reino y la Horda.
+
+h3 Reglas generales
+
+ol
+ li.
+ El diseño de las habitaciones se da arriba. Las piezas de la Horda son
+ partes estándar espejadas, aunque desplazamiento son diferentes
+ li El Reino siempre hace el primer movimiento.
+ li La Horda no puede enroquar.
+ li.
+ Los peones de la Horda que comienzan en la tercera fila, tampoco pueden
+ avanzar dos espacios o ser capturado en passant. Peones del Reino
+ en cuanto a ellos, mantenga estas dos opciones.
+ li Las Ăşnicas promociones posibles son en dama o kheshig.
+ li.
+ Es posible una nueva forma de ganar: la "mate de campamento".
+ Esta "mate" obtenido jugando el rey (sin ser en jaque) en la Ăşltima fila.
+ li Las otras reglas se aplican, como el empate o las tablas por repeticiĂłn.
+
+h3 Piezas de la Horda
+
+p.
+ Hay cuatro nuevas unidades Ăşnicas* en la Horda: 2 Lanceros, 2 Arqueros
+ a caballo, 2 Kheshigs y 1 Yurt (* excepto el kheshig que el
+ Reino puede obtener por promoción). Los kheshigs son los más
+ poderoso (desplazamiento de caballo + rey) y lidera cada flanco, mientras
+ que la yurta es una habitación bastante débil a diferencia de la dama.
+ El Rey de la Horda se llama Khan y tiene una apariencia diferente, pero es
+ muévete y captura como el Rey del Reino; se nota por el mismo
+ abreviatura (K) — el cambio es puramente estĂ©tico y temática
+
+p.
+ Los Lanceros y el Arquero a caballo de la Horda son Ăşnicos en el sentido
+ de que no capturar mientras se mueven. Recuerda que la Horda es
+ inspirado en una caballerĂa (militar), y por lo tanto los Lanceros y
+ Arqueros en ambos caballos se mueven como jinetes. Capturan como
+ la torre y el alfil, respectivamente. El Kheshig es más tradicional porque
+ captura mientras se mueve; combina los movimientos del rey y el
+ caballo. La yurta también captura a medida que se mueve: como un
+ general de plata en el Shogi.
+
+table
+ tr
+ th Pieza de la Horda
+ th "Contraparte" del Reino
+ th Desplazamiento
+ th Captura
+ tr
+ td Yurta
+ td Dama
+ td "Plata"
+ td "Plata"
+ tr
+ td Arquero
+ td Alfil
+ td Caballo
+ td Alfil
+ tr
+ td Kheshig
+ td Caballo
+ td Caballo+Rey
+ td Caballo+Rey
+ tr
+ td Lancero
+ td Torre
+ td Caballo
+ td Torre
+
+p.
+ Los detalles y diagramas de cada parte se pueden encontrar a continuaciĂłn.
+ Los puntos verdes representan los movimientos, el rojo las capturas,
+ y los amarillos representan ambos.
+
+h4 Yurta (Y)
+
+img.img-center(src="/images/variantes/Orda/Yurt.png")
+
+p.
+ La yurta se mueve y captura una casilla diagonal o un cuadrado hacia
+ el frente. Esto corresponde a un general de plata en el Shogi o un
+ alfil/khon en Makruk. Solo hay una yurta, comenzando en el sitio de la dama,
+ pero a diferencia de este Ăşltimo corresponde a una pieza (muy) menor:
+ el más dĂ©bil en el juego despuĂ©s del peĂłn. Dicho esto, no deberĂa
+ para ser subestimado, porque es una de las piezas raras de la Horda que
+ captura a medida que se mueve Los otros dos son el khan y el kheshig: los
+ dos piezas más preciosas. Entonces la yurta tiene el papel único de
+ apoyar peones y otras partes sin temor a la rebeliĂłn.
+
+p.
+ Una yurta es un hábitat móvil para las poblaciones de las estepas
+ asiáticos. Su movilidad limitada contrasta con su importancia para
+ apoyar a los militares se refleja en esta pieza.
+
+h4 Kheshig (H)
+
+img.img-center(src="/images/variantes/Orda/Kheshig.png")
+
+p.
+ El kheshig es una pieza hĂbrida que se mueve y captura como un rey y un
+ caballo combinado. Este tipo de pieza también se llama centauro,
+ genéricamente. El kheshig comienza en la ubicación del jinete, pero a
+ diferencia de esto la última es la pieza más poderosa de la Horda.
+ Puedes imaginar como un general que liderarĂa sus propias tropas en cada
+ flanco. En general, es preferible mantener a los kheshigs en el refugio
+ detrás de la apertura hasta la mitad del juego, debido a su extrema
+ importancia para la Horda en la final.
+
+p.
+ Los kheshigs eran la guardia imperial de Ă©lite en el reino mongol.
+ Entonces es apropiado que sea increĂblemente difĂcil para el Reino
+ matar un khan sin eliminar al menos uno de los kheshigs.
+
+h4 Arquero a caballo (A)
+
+img.img-center(src="/images/variantes/Orda/Archer.png")
+
+p.
+ El arquero (a caballo) es una pieza Ăşnica "pseudo-hĂbrida" que se mueve
+ y capturar de manera diferente. El arquero tiene los movimientos del
+ caballo pero captura como alfil. El arquero jugando tanto en casillas
+ negras como en blancas, es más fuerte que el alfil del Reino.
+
+p.
+ Uno de los dos componentes principales de la caballerĂa mongol,
+ que funciona como una caballerĂa ligera. Su velocidad
+ y su habilidad los convirtiĂł en una amenaza Ăşnica. Su capacidad para
+ posicionarse rápidamente para un hilo o tenedor mortal
+ los convierte en una amenaza peligrosa para el Reino.
+
+h4 Lancero (L)
+
+img.img-center(src="/images/variantes/Orda/Lancer.png")
+
+p.
+ El lancero es una pieza Ăşnica "pseudo-hĂbrida" que se mueve y ataca
+ diferente. Se mueve como un caballo pero captura como una torre.
+ El lancero no es tan móvil como la torre, generalmente es más débil
+ que este Ăşltimo, especialmente en la final porque no puede cruzar
+ el tablero muy rápido. Su valor es comparable al del arquero.
+
+p.
+ Los lanceros eran uno de los dos componentes principales de la caballerĂa
+ mongol, que opera como una caballerĂa pesada. Aunque siendo más dĂ©bil
+ que una torre, tienen la ventaja de poder ingresar al juego más rápido.
+
+h4 EvaluaciĂłn de las piezas
+
+p.
+ Los valores precisos de las piezas son desconocidos. Sin embargo, aquĂ
+ están los valores utilizados por Fairy Stockfish. Estos son valores
+ genĂ©rico, no necesariamente especĂfico del ajedrez Orda.
+
+table
+ tr
+ th Pieza del Reino
+ th Valor (inicio / fin)
+ th Pieza de la Horda
+ th Valor (inicio / fin)
+ tr
+ td PeĂłn
+ td 120 / 213
+ td PeĂłn
+ td 120 / 213
+ tr
+ td Dama
+ td 2538 / 2682
+ td Yurta
+ td 630 / 630
+ tr
+ td Alfil
+ td 825 / 915
+ td Arquero
+ td 1100 / 1200
+ tr
+ td Caballo
+ td 781 / 854
+ td Kheshig
+ td 1600 / 1700
+ tr
+ td Torre
+ td 1276 / 1380
+ td Lancero
+ td 1050 / 1250
+
+p
+ | Para aquellos que desean un enfoque simplificado, esta tabla puede ser
+ | usado como una aproximaciĂłn.
+ span.italic Nota: esta simplificaciĂłn es utilizada por el bot equivocada aquĂ.
+
+table
+ tr
+ th Pieza del Reino
+ th Valor
+ th Pieza de la Horda
+ th Valor
+ tr
+ td PeĂłn
+ td 1
+ td PeĂłn
+ td 1
+ tr
+ td Dama
+ td 9
+ td Yurta
+ td 2
+ tr
+ td Alfil
+ td 3
+ td Arcquero
+ td 4
+ tr
+ td Caballo
+ td 3
+ td Kheshig
+ td 7
+ tr
+ td Torre
+ td 5
+ td Lancero
+ td 4
+
+p.
+ En general, el ejército de la Horda es más débil que el Reino (en
+ basado solo en la evaluaciĂłn de las piezas por Stockfish).
+ Sin embargo, la Horda comienza con peones en la tercera fila, que
+ debe equilibrar el juego.
+
+h3 Estrategia
+
+p.
+ La variante aĂşn es joven, por lo que la estrategia aĂşn no se ha escrito.
+ Gran parte de los datos actuales provienen de partes de la computadora.
+ La Horda no puede enrocarse, pero observamos que colocar el khan en f7
+ en los primeros cuatro movimientos asegura igualmente al rey.
+ De hecho, Fairy Stockfish comienza con esta jugada en el 56% de los casos.
+ El resto es variable.
+ En cuanto al Reino, d4, g3 y b3 son las aperturas más frecuentes
+ en ese orden.
--- /dev/null
+p.boxed
+ | Le joueur en second dispose d'un jeu de pièces différent,
+ | se déplaçant en gros comme des "cavaliers augmentés".
+
+img.img-center(src="/images/variants/Orda/Orda.png")
+
+p
+ | Orda Chess est une variante inventée en 2020 par Couch Tomato
+ span.italic
+ | Note : il préfère rester anonyme :) En tout cas la version
+ | anglaise de ce texte et toutes les images sont de lui.
+ | L'idée pour ce jeu était d'obtenir un vrai combat asymétrique avec
+ | des armées différentes. Les variantes de Ralph Betza
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | avec des armées différentes
+ | ont été une source d'inspiration, mais l'objectif était d'être en
+ | adéquation avec le thème présent. Dans notre cas, le thème de la
+ | nouvelle armée est le déplacement de cavalier : la plupart des pièces
+ | ont un élément évoquant le mouvement du cavalier.
+ | Étant donné ce "thème cavalier", cette variante a été construite
+ | d'après l'armée mongole et appelé la Horde. Une "orda" était une
+ | structure militaire pour les gens des steppes, et le mot français "horde"
+ | vient de là . L'armée originelle est appelée "le Royaume", pour le
+ | contraste. Le jeu en lui-même est incroyablement équilibré selon
+ | l'Ă©valuation du module (en fait plus que pour les Ă©checs standards),
+ | avec un ratio de gains proche de 50-50 pour le Royaume et la Horde.
+
+h3 Règles générales
+
+ol
+ li.
+ L'agencement des pièces est donné ci-dessus. Les pièces de la Horde sont
+ affichées en miroir des pièces standards, bien que les déplacements
+ soient différents.
+ li Le Royaume joue toujours le premier coup.
+ li La Horde ne peut pas roquer.
+ li.
+ Les pions de la Horde démarrant sur la troisième rangée, ils ne peuvent ni
+ avancer de deux cases ni être capturés en passant. Les pions du Royaume
+ quant Ă eux conservent ces deux options.
+ li Les seules promotions possibles sont en dame ou kheshig.
+ li.
+ Une nouvelle façon de gagner est possible : le "mat de camp". Ce "mat"
+ s'obtient en jouant le roi (sans être échec) sur la dernière rangée.
+ li Les autres règles s'appliquent, comme le pat ou la nulle par répétition.
+
+h3 Pièces de la Horde
+
+p.
+ Il y a quatre nouvelles unités uniques* à la Horde : 2 Lanciers, 2 Archers
+ Ă cheval, 2 Kheshigs et 1 Yourte (* Ă l'exception du kheshig que le
+ Royaume peut obtenir par promotion). Les kheshigs sont la pièce la plus
+ puissante (déplacement de cavalier + roi) et mènent chaque flanc, tandis
+ que la yourte est une pièce plutôt faible contrairement à la dame.
+ Le roi de la Horde est appelée Khan et a une allure différente, mais se
+ déplace et capture comme le roi du Royaume ; il est noté par la même
+ abbrĂ©viation (K) — le changement est purement esthĂ©tique et
+ thématique.
+
+p.
+ Le Lancier et l'Archer Ă cheval de la Horde sont uniques en le sens qu'ils
+ ne capturent pas comme ils se déplacent. Rappelez-vous que la Horde est
+ inspirĂ©e d'une cavalerie (militaire), et donc les Lanciers et Archers Ă
+ cheval se déplacent tous deux comme des cavaliers. Ils capturent comme
+ la tour et le fou, respectivement. Le Kheshig est plus traditionnel car il
+ capture comme il se déplace ; il combine les mouvements du roi et du
+ cavalier. La yourte capture également comme elle se déplace : comme un
+ général d'argent au Shogi.
+
+table
+ tr
+ th Pièce de la Horde
+ th "Contrepartie" du Royaume
+ th DĂ©placement
+ th Capture
+ tr
+ td Yourte
+ td Dame
+ td "Silver"
+ td "Silver"
+ tr
+ td Archer
+ td Fou
+ td Cavalier
+ td Fou
+ tr
+ td Kheshig
+ td Cavalier
+ td Cavalier+Roi
+ td Cavalier+Roi
+ tr
+ td Lancier
+ td Tour
+ td Cavalier
+ td Tour
+
+p.
+ Les détails et diagrammes de chaque pièce se trouvent ci-dessous.
+ Les points verts représentent les déplacements, les rouges les captures,
+ et les jaunes représentent les deux.
+
+h4 Yourte (Y)
+
+img.img-center(src="/images/variants/Orda/Yurt.png")
+
+p.
+ La yourte se déplace et capture d'une case en diagonale ou une case vers
+ l'avant. Cela correspond à un général d'argent au Shogi ou à un fou/khon
+ au Makruk. Il n'y a qu'une yourte, démarrant à l'emplacement de la dame,
+ mais contrairement à cette dernière elle correspond à une pièce (très)
+ mineure : la plus faible du jeu après le pion. Ceci dit, elle ne doit pas
+ être sous-estimée, car c'est une des rares pièces de la Horde qui capture
+ comme elle se déplace. Les deux autres sont le khan et le kheshig : les
+ deux pièces les plus précieuses. Ainsi la yourte a le rôle unique de
+ soutenir les pions et les autres pièces sans crainte de rebellion.
+
+p.
+ Une yourte est un habitat mobile pour les populations des steppes
+ asiatiques. Leur mobilité limitée contrastant avec leur importance pour
+ soutenir l'armée se reflète dans cette pièce.
+
+h4 Kheshig (H)
+
+img.img-center(src="/images/variants/Orda/Kheshig.png")
+
+p.
+ Le kheshig est une pièce hybride qui bouge et capture comme roi et cavalier
+ combinés. Ce type de pièce est aussi appelée centaure, de façon générique.
+ Le kheshig démarre à l'emplacmeent du cavalier, mais contrairement à ce
+ dernier c'est la pièce la plus puissante de la Horde. On peut l'imaginer
+ comme un général qui mènerait ses propres troupes sur chaque flanc.
+ On préfère généralement garder les kheshigs à l'abri en retrait pendant
+ l'ouverture jusqu'au milieu de jeu, Ă cause de leur extrĂŞme importance
+ pour la Horde en finale.
+
+p.
+ Les kheshigs étaient la garde impérial d'élite dans le royaume mongol.
+ Il est donc approprié qu'il soit incroyablement difficile pour le Royaume
+ de mater un khan sans Ă©liminer au moins un des kheshigs.
+
+h4 Archer Ă cheval (A)
+
+img.img-center(src="/images/variants/Orda/Archer.png")
+
+p.
+ L'archer (à cheval) est une pièce unique "pseudo-hybride" qui se déplace
+ et capture différemment. L'archer dispose des mouvements du cavalier mais
+ capture comme un fou. L'archer Ă©voluant Ă la fois sur cases noires et
+ blanches, il est plus fort que le fou du Royaume.
+
+p.
+ Les archers Ă cheval Ă©taient l'une des deux composantes principales de la
+ cavalerie mongole, fonctionnant comme une cavalerie légère. Leur vitesse
+ et leur habiletĂ© faisaient d'eux une menace unique. Leur capacitĂ© Ă
+ se positionner rapidement pour une enfilade mortelle ou une fourchette
+ fait d'eux une dangeureuse menace pour le Royaume.
+
+h4 Lancier (L)
+
+img.img-center(src="/images/variants/Orda/Lancer.png")
+
+p.
+ Le lancier est une pièce unique "pseudo-hybride" qui se déplace et attaque
+ différemment. Il bouge comme un cavalier mais capture comme une tour.
+ Le lancier n'étant pas aussi mobile que la tour, il est généralement plus
+ faible que cette dernière, surtout en finale car il ne peut pas traverser
+ l'échiquier très vite. Sa valeur est comparable à celle de l'archer.
+
+p.
+ Les lanciers Ă©taient l'une des deux composantes principales de la cavalerie
+ mongole, fonctionnant comme une cavalerie lourde. Bien qu'Ă©tant plus faibles
+ qu'une tour, ils ont l'avantage de pouvoir entrer dans le jeu plus vite.
+
+h4 Évaluation des pièces
+
+p.
+ Les valeurs précises des pièces sont inconnues. Cependant, voici les
+ valeurs utilisées par Fairy Stockfish. Celles-ci sont des valeurs
+ génériques, pas nécessairement spécifiques aux échecs Orda.
+
+table
+ tr
+ th Pièce du royaume
+ th Valeur (DĂ©but / Fin)
+ th Pièce de la Horde
+ th Value (DĂ©but / Fin)
+ tr
+ td Pion
+ td 120 / 213
+ td Pion
+ td 120 / 213
+ tr
+ td Dame
+ td 2538 / 2682
+ td Yourte
+ td 630 / 630
+ tr
+ td Fou
+ td 825 / 915
+ td Archer
+ td 1100 / 1200
+ tr
+ td Cavalier
+ td 781 / 854
+ td Kheshig
+ td 1600 / 1700
+ tr
+ td Tour
+ td 1276 / 1380
+ td Lancier
+ td 1050 / 1250
+
+p
+ | Pour ceux souhaitant une approche simplifiée, cette table peut être
+ | utilisée comme approximation.
+ span.note Note : cette simplification est utilisée par le mauvais bot ici.
+
+table
+ tr
+ th Pièce du Royaume
+ th Valeur
+ th Pièce de la Horde
+ th Valeur
+ tr
+ td Pion
+ td 1
+ td Pion
+ td 1
+ tr
+ td Dame
+ td 9
+ td Yourte
+ td 2
+ tr
+ td Fou
+ td 3
+ td Archer
+ td 4
+ tr
+ td Cavalier
+ td 3
+ td Kheshig
+ td 7
+ tr
+ td Tour
+ td 5
+ td Lancier
+ td 4
+
+p.
+ Globalement, l'armée de la Horde est plus faible que le Royaume (en se
+ basant sur la seule évaluation des pièces par Stockfish).
+ La Horde démarre cependant avec des pions sur la troisème rangée, ce qui
+ devrait Ă©quilibrer le jeu.
+
+h3 Stratégie
+
+p.
+ La variante est encore jeune, donc la stratégie reste à écrire !
+ Beaucoup des données actuelles proviennent de parties de l'ordinateur.
+ La Horde ne peut pas roquer, mais on observe que placer le khan en f7
+ dans les quatre premiers coups met le roi en sécurité de manière similaire.
+ En fait, Fairy Stockfish commence par ce coup dans 56% des cas.
+ Le reste est variable.
+ Concernant le Royaume, d4, g3 et b3 sont les ouvertures les plus fréquentes
+ dans cet ordre.
import { ChessRules } from "@/base_rules";
export class DynamoRules extends ChessRules {
- // TODO
+ canIplay(side, [x, y]) {
+ // Sometimes opponent's pieces can be moved directly
+ return true;
+ }
+
+ // NOTE: to push a piece out of the board, make it slide until our piece
+ // (doing the action, moving or not)
+ getPotentialMovesFrom([x, y]) {
+ const color = this.turn;
+ let moves = [];
+ if (this.getColor(x, y) != color) {
+ // Push or pull something: freely only if subTurn == 1
+ if (this.subTurn == 2) {
+ // I know that someone is pushing/pulling: find out who,
+ // and deduce my possible squares (or exit).
+ // TODO
+ } else {
+ // Look in every direction for a friendly pusher/puller.
+ // This means that the action is done without moving.
+ // TODO
+ }
+ } else {
+ // My piece: fill first with normal moves (if any),
+ // and add pushes/pulls (if any).
+ // TODO
+ }
+ }
+
+ getPPpath(m) {
+ let imgName = "";
+ if (m.vanish.length == 1) imgName = "empty";
+ else {
+ // Something is pushed or pull: count by how many squares
+ if (m.appear.length == 1)
+ // It just exit the board
+ imgName = "raus";
+ else {
+ const deltaX = Math.abs(m.appear[1].x - m.vanish[1].x);
+ const deltaY = Math.abs(m.appear[1].y - m.vanish[1].y);
+ if (deltaX == 0) imgName = "shift" + deltaY;
+ else if (deltaY == 0) imgName = "shift" + deltaX;
+ else
+ // Special knight push/pull: just print "P"
+ imgName = "pstep";
+ }
+ }
+ return "Dynamo/" + imgName;
+ }
+
+ isAttackedBySlideNJump([x, y], color, piece, steps, oneStep) {
+ for (let step of steps) {
+ let rx = x + step[0],
+ ry = y + step[1];
+ while (V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY && !oneStep) {
+ rx += step[0];
+ ry += step[1];
+ }
+ if (
+ V.OnBoard(rx, ry) &&
+ this.getPiece(rx, ry) == piece &&
+ this.getColor(rx, ry) == color
+ ) {
+ // Now step in the other direction: if end of the world, then attacked
+ rx = x - step[0];
+ ry = y - step[1];
+ while (V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY && !oneStep) {
+ rx -= step[0];
+ ry -= step[1];
+ }
+ if (!V.OnBoard(rx, ry)) return true;
+ }
+ }
+ return false;
+ }
+
+ isAttackedByPawn([x, y], color) {
+ const lastRank = (color == 'w' ? 0 : 7);
+ if (y != lastRank)
+ // The king can be pushed out by a pawn only on last rank
+ return false;
+ const pawnShift = (color == "w" ? 1 : -1);
+ for (let i of [-1, 1]) {
+ if (
+ y + i >= 0 &&
+ y + i < V.size.y &&
+ this.getPiece(x + pawnShift, y + i) == V.PAWN &&
+ this.getColor(x + pawnShift, y + i) == color
+ ) {
+ return true;
+ }
+ }
+ return false;
+ }
};
return "Eightpieces/tmp_png/" + b;
}
- getPPpath(b, orientation) {
- return this.getPpath(b, null, null, orientation);
+ getPPpath(m, orientation) {
+ return (
+ this.getPpath(
+ m.appear[0].c + m.appear[0].p,
+ null,
+ null,
+ orientation
+ )
+ );
}
static ParseFen(fen) {
--- /dev/null
+import { ChessRules } from "@/base_rules";
+import { ArrayFun } from "@/utils/array";
+import { randInt } from "@/utils/alea";
+
+export class OrdaRules extends ChessRules {
+ static get PawnSpecs() {
+ return Object.assign(
+ {},
+ ChessRules.PawnSpecs,
+ { promotions: [V.QUEEN, V.KHESHIG] }
+ );
+ }
+
+ static IsGoodFlags(flags) {
+ // Only white can castle
+ return !!flags.match(/^[a-z]{2,2}$/);
+ }
+
+ getPpath(b) {
+ if (b[0] == 'b' || b[1] == 'h')
+ // Horde piece or white promoted pawn in kheshig
+ return "Orda/" + b;
+ return b;
+ }
+
+ static GenRandInitFen(randomness) {
+ if (randomness == 0)
+ return "lhaykahl/8/pppppppp/8/8/8/PPPPPPPP/RNBQKBNR w 0 ah -";
+
+ // Mapping kingdom --> horde:
+ const piecesMap = {
+ 'r': 'l',
+ 'n': 'h',
+ 'b': 'a',
+ 'q': 'y',
+ 'k': 'k'
+ };
+
+ let pieces = { w: new Array(8), b: new Array(8) };
+ let flags = "";
+ // Shuffle pieces on first (and last rank if randomness == 2)
+ for (let c of ["w", "b"]) {
+ if (c == 'b' && randomness == 1) {
+ pieces['b'] = pieces['w'].map(p => piecesMap[p]);
+ break;
+ }
+
+ // TODO: same code as in base_rules. Should extract and factorize?
+
+ let positions = ArrayFun.range(8);
+
+ let randIndex = 2 * randInt(4);
+ const bishop1Pos = positions[randIndex];
+ let randIndex_tmp = 2 * randInt(4) + 1;
+ const bishop2Pos = positions[randIndex_tmp];
+ positions.splice(Math.max(randIndex, randIndex_tmp), 1);
+ positions.splice(Math.min(randIndex, randIndex_tmp), 1);
+
+ randIndex = randInt(6);
+ const knight1Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+ randIndex = randInt(5);
+ const knight2Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ randIndex = randInt(4);
+ const queenPos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ const rook1Pos = positions[0];
+ const kingPos = positions[1];
+ const rook2Pos = positions[2];
+
+ pieces[c][rook1Pos] = "r";
+ pieces[c][knight1Pos] = "n";
+ pieces[c][bishop1Pos] = "b";
+ pieces[c][queenPos] = "q";
+ pieces[c][kingPos] = "k";
+ pieces[c][bishop2Pos] = "b";
+ pieces[c][knight2Pos] = "n";
+ pieces[c][rook2Pos] = "r";
+ if (c == 'b') pieces[c] = pieces[c].map(p => piecesMap[p]);
+ else flags = V.CoordToColumn(rook1Pos) + V.CoordToColumn(rook2Pos);
+ }
+ // Add turn + flags + enpassant
+ return (
+ pieces["b"].join("") +
+ "/8/pppppppp/8/8/8/PPPPPPPP/" +
+ pieces["w"].join("").toUpperCase() +
+ " w 0 " + flags + " -"
+ );
+ }
+
+ getFlagsFen() {
+ return this.castleFlags['w'].map(V.CoordToColumn).join("");
+ }
+
+ setFlags(fenflags) {
+ this.castleFlags = { 'w': [-1, -1] };
+ for (let i = 0; i < 2; i++)
+ this.castleFlags['w'][i] = V.ColumnToCoord(fenflags.charAt(i));
+ }
+
+ static get LANCER() {
+ return 'l';
+ }
+ static get ARCHER() {
+ return 'a';
+ }
+ static get KHESHIG() {
+ return 'h';
+ }
+ static get YURT() {
+ return 'y';
+ }
+ // Khan is technically a King, so let's keep things simple.
+
+ static get PIECES() {
+ return ChessRules.PIECES.concat([V.LANCER, V.ARCHER, V.KHESHIG, V.YURT]);
+ }
+
+ getPotentialMovesFrom([x, y]) {
+ switch (this.getPiece(x, y)) {
+ case V.LANCER:
+ return this.getPotentialLancerMoves([x, y]);
+ case V.ARCHER:
+ return this.getPotentialArcherMoves([x, y]);
+ case V.KHESHIG:
+ return this.getPotentialKheshigMoves([x, y]);
+ case V.YURT:
+ return this.getPotentialYurtMoves([x, y]);
+ default:
+ return super.getPotentialMovesFrom([x, y]);
+ }
+ return [];
+ }
+
+ getSlideNJumpMoves([x, y], steps, oneStep, options) {
+ options = options || {};
+ let moves = [];
+ outerLoop: for (let step of steps) {
+ let i = x + step[0];
+ let j = y + step[1];
+ while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
+ if (!options.onlyTake) moves.push(this.getBasicMove([x, y], [i, j]));
+ if (oneStep) continue outerLoop;
+ i += step[0];
+ j += step[1];
+ }
+ if (V.OnBoard(i, j) && this.canTake([x, y], [i, j]) && !options.onlyMove)
+ moves.push(this.getBasicMove([x, y], [i, j]));
+ }
+ return moves;
+ }
+
+ getPotentialLancerMoves(sq) {
+ const onlyMoves = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.KNIGHT],
+ "oneStep",
+ { onlyMove: true }
+ );
+ const onlyTakes = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.ROOK],
+ null,
+ { onlyTake: true }
+ );
+ return onlyMoves.concat(onlyTakes);
+ }
+
+ getPotentialArcherMoves(sq) {
+ const onlyMoves = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.KNIGHT],
+ "oneStep",
+ { onlyMove: true }
+ );
+ const onlyTakes = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.BISHOP],
+ null,
+ { onlyTake: true }
+ );
+ return onlyMoves.concat(onlyTakes);
+ }
+
+ getPotentialLancerMoves(sq) {
+ const onlyMoves = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.KNIGHT],
+ "oneStep",
+ { onlyMove: true }
+ );
+ const onlyTakes = this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.ROOK],
+ null,
+ { onlyTake: true }
+ );
+ return onlyMoves.concat(onlyTakes);
+ }
+
+ getPotentialKheshigMoves(sq) {
+ return this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]),
+ "oneStep"
+ );
+ }
+
+ getPotentialYurtMoves(sq) {
+ return this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.BISHOP].concat([1, 0]),
+ "oneSTep"
+ );
+ }
+
+ getPotentialKingMoves([x, y]) {
+ if (this.getColor(x, y) == 'w') return super.getPotentialKingMoves([x, y]);
+ // Horde doesn't castle:
+ return this.getSlideNJumpMoves(
+ [x, y],
+ V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
+ "oneStep"
+ );
+ }
+
+ isAttacked(sq, color) {
+ if (color == 'w') {
+ return (
+ super.isAttacked(sq, color) ||
+ this.isAttackedByKheshig(sq, color)
+ );
+ }
+ // Horde: only pawn and queen (if promotions) in common:
+ return (
+ super.isAttackedByPawn(sq, color) ||
+ this.isAttackedByLancer(sq, color) ||
+ this.isAttackedByKheshig(sq, color) ||
+ this.isAttackedByArcher(sq, color) ||
+ this.isAttackedByYurt(sq, color) ||
+ super.isAttackedByQueen(sq, color)
+ );
+ }
+
+ isAttackedByLancer(sq, color) {
+ return this.isAttackedBySlideNJump(sq, color, V.LANCER, V.steps[V.ROOK]);
+ }
+
+ isAttackedByArcher(sq, color) {
+ return this.isAttackedBySlideNJump(sq, color, V.ARCHER, V.steps[V.BISHOP]);
+ }
+
+ isAttackedByKheshig(sq, color) {
+ return super.isAttackedBySlideNJump(
+ sq,
+ color,
+ V.KHESHIG,
+ V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]),
+ "oneStep"
+ );
+ }
+
+ isAttackedByYurt(sq, color) {
+ return super.isAttackedBySlideNJump(
+ sq,
+ color,
+ V.YURT,
+ V.steps[V.BISHOP].concat([1, 0]),
+ "oneStep"
+ );
+ }
+
+ updateCastleFlags(move, piece) {
+ // Only white can castle:
+ const firstRank = 7;
+ if (piece == V.KING && move.appear[0].c == 'w')
+ this.castleFlags['w'] = [8, 8];
+ else if (
+ move.start.x == firstRank &&
+ this.castleFlags['w'].includes(move.start.y)
+ ) {
+ const flagIdx = (move.start.y == this.castleFlags['w'][0] ? 0 : 1);
+ this.castleFlags['w'][flagIdx] = 8;
+ }
+ else if (
+ move.end.x == firstRank &&
+ this.castleFlags['w'].includes(move.end.y)
+ ) {
+ const flagIdx = (move.end.y == this.castleFlags['w'][0] ? 0 : 1);
+ this.castleFlags['w'][flagIdx] = 8;
+ }
+ }
+
+ getCurrentScore() {
+ // Turn has changed:
+ const color = V.GetOppCol(this.turn);
+ const lastRank = (color == 'w' ? 0 : 7);
+ if (this.kingPos[color][0] == lastRank)
+ // The opposing edge is reached!
+ return color == "w" ? "1-0" : "0-1";
+ if (this.atLeastOneMove()) return "*";
+ // Game over
+ const oppCol = this.turn;
+ if (!this.underCheck(oppCol)) return "1/2";
+ return (oppCol == "w" ? "0-1" : "1-0");
+ }
+
+ static get VALUES() {
+ return Object.assign(
+ {},
+ ChessRules.VALUES,
+ {
+ y: 2,
+ a: 4,
+ h: 7,
+ l: 4
+ }
+ );
+ }
+};
this.send("fullgame", { data: gameToSend, target: data.from });
break;
case "fullgame":
- // Callback "roomInit" to poll clients only after game is loaded
- this.loadVariantThenGame(data.data, this.roomInit);
+ if (!!data.data.empty) {
+ alert(this.st.tr["The game should be in another tab"]);
+ this.$router.go(-1);
+ }
+ else
+ // Callback "roomInit" to poll clients only after game is loaded
+ this.loadVariantThenGame(data.data, this.roomInit);
break;
case "asklastate":
// Sending informative last state if I played a move or score != "*"
| {{ st.tr["Analysis mode"] }}
.row
.col-sm-12.col-md-8.col-md-offset-2.col-lg-6.col-lg-offset-3
+ h4#variantName {{ gameInfo.vname }}
div(
v-show="display=='rules'"
v-html="content"
background-color: lightgrey
font-weight: bold
+h4#variantName
+ text-align: center
+ font-weight: bold
+
figure.diagram-container
margin: 15px 0 15px 0
text-align: center
ul:not(.browser-default) > li
list-style-type: disc
+
+table
+ margin: 15px auto
+
+.italic
+ font-style: italic
+
+img.img-center
+ display: block
+ margin: 0 auto 15px auto
</style>
('Cylinder', 'Neverending rows'),
('Dark', 'In the shadow'),
('Doublearmy', '64 pieces on the board'),
+ ('Dynamo', 'Push and pull'),
('Eightpieces', 'Each piece is unique'),
('Enpassant', 'Capture en passant'),
('Extinction', 'Capture all of a kind'),
('Losers', 'Get strong at self-mate'),
('Magnetic', 'Laws of attraction'),
('Marseille', 'Move twice'),
+ ('Orda', 'Mongolian Horde'),
('Parachute', 'Landing on the board'),
('Perfect', 'Powerful pieces'),
('Racingkings', 'Kings cross the 8x8 board'),
clients[page][rid][rtmpId].socket,
{ code: "askfullgame", from: [sid,tmpId] }
);
+ } else {
+ // I'm the only person who have the game for the moment:
+ send(socket, { code: "fullgame", data: { empty: true } });
}
}
break;