From 9aebe2aac02158a4f1c92ad0ac529f8ed245602e Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Tue, 26 Jul 2022 18:34:11 +0200
Subject: [PATCH] After refactoring. Seems more or less ok

---
 base_rules.js                               |   4 +-
 variants/Alice/class.js                     |   2 +-
 variants/Ambiguous/class.js                 |  12 +-
 variants/Antiking1/style.css                |   8 +-
 variants/Apocalypse/class.js                |   2 +-
 variants/Balaklava/class.js                 |   2 +-
 variants/Balaklava/pieces/CREDITS           |   1 +
 variants/Balaklava/pieces/black_mammoth.svg | 188 ++++++++++++++++++++
 variants/Balaklava/pieces/white_mammoth.svg | 172 ++++++++++++++++++
 variants/Balaklava/style.css                |   7 +
 variants/Baroque/class.js                   |   3 -
 variants/Benedict/class.js                  |   1 -
 variants/Berolina/style.css                 |   1 +
 variants/Bicolour/class.js                  |  12 +-
 variants/Giveaway/class.js                  |   4 +-
 variants/Hex/class.js                       |   2 +-
 variants/_Antiking/class.js                 |   2 -
 variants/_Berolina/pawnSpec.js              |   5 +-
 variants/_Berolina/style.css                |   6 +
 19 files changed, 398 insertions(+), 36 deletions(-)
 create mode 100644 variants/Balaklava/pieces/CREDITS
 create mode 100644 variants/Balaklava/pieces/black_mammoth.svg
 create mode 100644 variants/Balaklava/pieces/white_mammoth.svg
 create mode 100644 variants/_Berolina/style.css

diff --git a/base_rules.js b/base_rules.js
index 5b1a013..b315fd5 100644
--- a/base_rules.js
+++ b/base_rules.js
@@ -2080,7 +2080,7 @@ export default class ChessRules {
           // will be executed in filterValid() later.
           (
             i != finalSquares[castleSide][0] &&
-            this.underCheck([x, i], oppCol)
+            this.underCheck([[x, i]], oppCol)
           )
           ||
           (
@@ -2187,8 +2187,6 @@ export default class ChessRules {
   underCheck(square_s, oppCol) {
     if (this.options["taking"] || this.options["dark"])
       return false;
-    if (!Array.isArray(square_s[0]))
-      square_s = [square_s];
     return square_s.some(sq => this.underAttack(sq, oppCol));
   }
 
diff --git a/variants/Alice/class.js b/variants/Alice/class.js
index e6d37b2..d1e389d 100644
--- a/variants/Alice/class.js
+++ b/variants/Alice/class.js
@@ -119,7 +119,7 @@ export default class AliceRules extends ChessRules {
       this.playOnBoard(m);
       m.appear.forEach(a => this.toggleWorld(a.x, a.y));
       const kingAppear = m.appear.find(a => this.isKing(0, 0, a.p));
-      const target = kingAppear ? [kingAppear.x, kingAppear.y] : kingPos;
+      const target = [kingAppear ? [kingAppear.x, kingAppear.y] : kingPos];
       const res = this.underCheck(target, oppCol);
       m.appear.forEach(a => this.toggleWorld(a.x, a.y));
       this.undoOnBoard(m);
diff --git a/variants/Ambiguous/class.js b/variants/Ambiguous/class.js
index 6d9ac7e..5e7029c 100644
--- a/variants/Ambiguous/class.js
+++ b/variants/Ambiguous/class.js
@@ -124,12 +124,12 @@ export default class AmbiguousRules extends ChessRules {
 
   pieces(color, x, y) {
     const targets = {
-      's': {"class": "target-pawn", moves: []},
-      'u': {"class": "target-rook", moves: []},
-      'o': {"class": "target-knight", moves: []},
-      'c': {"class": "target-bishop", moves: []},
-      't': {"class": "target-queen", moves: []},
-      'l': {"class": "target-king", moves: []}
+      's': {"class": "target-pawn"},
+      'u': {"class": "target-rook"},
+      'o': {"class": "target-knight"},
+      'c': {"class": "target-bishop"},
+      't': {"class": "target-queen"},
+      'l': {"class": "target-king"}
     };
     return Object.assign({ 'g': {"class": "target"} },
       targets, super.pieces(color, x, y));
diff --git a/variants/Antiking1/style.css b/variants/Antiking1/style.css
index faf34b7..456922f 100644
--- a/variants/Antiking1/style.css
+++ b/variants/Antiking1/style.css
@@ -1,8 +1,2 @@
 @import url("/variants/_Antiking/style.css");
-
-piece.black.pawn {
-  background-image: url('/variants/Berolina/pieces/black_pawn.svg');
-}
-piece.white.pawn {
-  background-image: url('/variants/Berolina/pieces/white_pawn.svg');
-}
+@import url("/variants/_Berolina/style.css");
diff --git a/variants/Apocalypse/class.js b/variants/Apocalypse/class.js
index 1f7cc7a..ace9c4d 100644
--- a/variants/Apocalypse/class.js
+++ b/variants/Apocalypse/class.js
@@ -68,7 +68,7 @@ export default class ApocalypseRules extends ChessRules {
     return {
       'p': {
         "class": "pawn",
-        moves: [
+        both: [
           {
             steps: [[pawnShift, 0], [pawnShift, -1], [pawnShift, 1]],
             range: 1
diff --git a/variants/Balaklava/class.js b/variants/Balaklava/class.js
index dd3cf62..e16322f 100644
--- a/variants/Balaklava/class.js
+++ b/variants/Balaklava/class.js
@@ -34,7 +34,7 @@ export default class BalaklavaRules extends ChessRules {
   genRandInitBaseFen() {
     const baseFen = super.genRandInitBaseFen();
     return {
-      fen: baseFen.replace(/n/g, 'm').replace(/N/g, 'M'),
+      fen: baseFen.fen.replace(/n/g, 'm').replace(/N/g, 'M'),
       o: baseFen.o
     };
   }
diff --git a/variants/Balaklava/pieces/CREDITS b/variants/Balaklava/pieces/CREDITS
new file mode 100644
index 0000000..b4b12de
--- /dev/null
+++ b/variants/Balaklava/pieces/CREDITS
@@ -0,0 +1 @@
+https://www.flaticon.com/free-icon/mammoth_925138
diff --git a/variants/Balaklava/pieces/black_mammoth.svg b/variants/Balaklava/pieces/black_mammoth.svg
new file mode 100644
index 0000000..8ed01bc
--- /dev/null
+++ b/variants/Balaklava/pieces/black_mammoth.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Capa_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 512 512"
+   style="enable-background:new 0 0 512 512;"
+   xml:space="preserve"
+   sodipodi:docname="bm.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+   id="metadata61"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs59" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="960"
+   inkscape:window-height="1060"
+   id="namedview57"
+   showgrid="false"
+   inkscape:zoom="1.3037281"
+   inkscape:cx="267.74608"
+   inkscape:cy="256"
+   inkscape:window-x="0"
+   inkscape:window-y="20"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="Capa_1" />
+<g
+   id="g6"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g4">
+		<path
+   d="m 438.343,344.359 c -4.851,-2.408 -10.847,-0.341 -13.234,4.487 -2.371,4.796 -0.269,10.891 4.496,13.235 4.829,2.376 10.873,0.295 13.236,-4.487 2.411,-4.892 0.395,-10.823 -4.498,-13.235 z"
+   id="path2"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g12"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g10">
+		<path
+   d="m 467.46,150.829 c -1.733,-15.248 -6.124,-34.746 -21.759,-41.571 -10.77,-4.702 -23.892,-1.747 -34.523,4.547 -6.781,4.099 -18.321,12.042 -10.307,20.913 7.08,7.837 14.602,-0.5 20.913,-4.219 5.652,-3.33 13.154,-5.117 18.55,-0.339 5.8,5.136 6.684,15.673 7.477,22.854 1.948,17.465 2.975,36.611 2.975,55.371 0.011,27.339 -2.164,67.774 -12.552,105.195 -3.379,12.174 15.648,17.618 19.046,5.28 9.859,-35.804 13.274,-73.435 13.274,-110.475 0,-19.482 -1.076,-39.378 -3.094,-57.556 z"
+   id="path8"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g18"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g16">
+		<path
+   d="m 502.474,107.08 c -9.946,-41.4 -28.689,-62.392 -55.709,-62.392 -15.26,0 -32.325,7.019 -49.631,20.134 C 388.072,56.662 369.273,43.347 331.948,27.839 271.84,2.862 171.24,37.325 166.964,38.812 c -5.866,2.04 -8.42,9.519 -5.043,14.719 l 17.097,26.328 c -7.076,11.717 -11.364,24.558 -15.458,36.868 -5.591,16.812 -10.873,32.691 -22.564,44.941 -9.831,10.301 -23.446,18.055 -37.86,26.263 -16.712,9.517 -35.247,20.076 -51.564,36.617 -8.26,-21.929 -10.022,-46.135 -5.211,-72.169 4.42,-23.919 13.024,-40.47 13.137,-40.687 5.08,-9.714 -7.812,-19.452 -15.683,-11.661 -22.547,22.318 -37.545,53.825 -42.229,88.72 -4.325,32.219 0.268,65.239 12.925,93.5 -5.695,14.793 -8.577,29.553 -8.577,44.179 0,91.966 71.609,166.785 159.628,166.785 5.459,0 9.884,-4.425 9.884,-9.884 v -43.497 c 0,-5.459 -4.425,-9.884 -9.884,-9.884 -43.608,0 -79.775,-34.561 -85.645,-79.318 20.138,11.026 45.616,19.431 68.858,17.529 23.725,-1.941 44.963,-13.751 61.902,-30.056 23.258,13.904 50.269,21.512 76.954,21.512 12.708,0 24.846,-1.591 36.235,-4.74 11.691,81.18 29.847,128.893 30.649,130.975 1.587,4.118 5.712,6.678 10.107,6.29 1.558,-0.14 38.568,-3.845 75.271,-40.31 21.141,-21.004 37.932,-48.664 49.91,-82.212 C 504.532,328.363 512,277.943 512,219.758 512,188.408 511.013,142.62 502.474,107.08 Z M 324.363,46.093 c 34.536,14.35 51.257,26.204 58.631,32.601 l -30.826,35.442 -54.093,3.685 -20.647,-36.056 c -1.781,-3.11 -5.075,-4.973 -8.575,-4.973 -12.223,0 -60.617,11.765 -61.483,10.432 -0.004,-0.006 -21.767,-33.521 -21.767,-33.521 27.8,-8.1 96.849,-25.024 138.76,-7.61 z M 155.678,449.238 v 23.846 C 83.154,467.735 25.702,404.003 25.702,326.43 c 0,-6.727 0.755,-13.525 2.236,-20.376 8.775,12.577 19.387,23.343 31.371,31.787 0.008,58.182 42.403,106.13 96.369,111.397 z M 142.045,348.579 C 103.786,348.577 76.358,325.485 74.822,324.431 57.553,312.582 43.221,296.453 34.113,277.546 18.954,246.079 16.052,209.127 24.058,176.025 c -0.608,25.515 4.803,49.727 16.037,71.165 12.432,23.724 32.193,43.798 54.137,58.904 29.228,20.108 56.812,21.28 82.13,3.536 5.245,6.042 11.202,11.753 17.69,16.962 0.803,0.645 -23.052,21.987 -52.007,21.987 z M 99.329,285.408 c 8.397,-5.763 49.588,-4.266 55.651,-4.294 2.49,4.328 5.523,8.758 8.862,13.135 -31.392,23.532 -62.522,-7.351 -64.513,-8.841 z m 327.7,151.327 c -22.589,22.895 -45.422,31.281 -56.787,34.222 -3.314,0.857 -21.904,-88.65 -22.872,-94.198 -6.058,-34.715 -11.745,-70.446 -11.721,-105.759 -0.049,-14.489 1.354,-26.912 3.844,-34.089 4.13,-11.904 -14.601,-18.463 -18.719,-6.347 -3.331,9.993 -4.844,22.457 -4.893,40.436 0.015,24.252 3.18,50.343 5.128,64.121 -10.353,3.138 -21.544,4.728 -33.376,4.728 -25.495,0 -51.376,-8.004 -72.885,-22.545 -10.735,-7.238 -36.569,-32.481 -44.887,-50.357 -1.679,-3.608 -5.363,-5.848 -9.332,-5.707 -7.558,0.283 -61.608,-2.142 -76.625,11.172 -9.287,-8.866 -17.031,-18.475 -23.114,-28.703 15.374,-17.626 34.027,-28.288 52.13,-38.597 15.709,-8.946 30.547,-17.396 42.378,-29.793 14.75,-15.455 20.989,-34.212 27.022,-52.351 2.706,-8.136 5.444,-16.254 9.041,-24.046 2.539,4.966 6.758,9.921 12.945,8.889 l 59.407,-10.22 20.286,35.424 c 1.768,3.089 5.05,4.972 8.575,4.972 0.224,0 0.448,-0.008 0.674,-0.023 l 64.361,-4.385 c 2.621,-0.179 5.063,-1.393 6.786,-3.375 l 39.423,-45.326 c 0.057,-0.066 0.108,-0.136 0.163,-0.203 15.512,-12.885 30.76,-20.219 42.788,-20.219 45.467,0 45.467,116.891 45.467,155.302 -0.004,124.712 -35.463,186.829 -65.207,216.977 z"
+   id="path14"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g24"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g22">
+		<path
+   d="m 273.825,195.683 c -10.331,-3.287 -19.651,-5.079 -28.022,-5.78 1.723,0.119 1.801,-19.811 -0.622,-19.811 10e-4,0 5.858,0 5.878,0 12.693,0 12.791,-19.768 0,-19.768 0,0 -33.58,0 -33.606,0 -25.652,0 -38.388,32.855 -21.733,51.383 -13.006,8.991 -18.263,19.694 -18.857,20.971 -5.316,11.42 12.52,19.957 17.924,8.338 12.344,-26.537 50.285,-23.726 73.043,-16.495 11.822,3.756 18.189,-14.957 5.995,-18.838 z m -56.371,-3.934 c -5.45,0 -9.884,-4.858 -9.884,-10.829 -0.001,-5.97 4.433,-10.828 9.884,-10.828 5.45,0 9.884,4.857 9.884,10.828 0,5.29 -4.249,10.829 -9.884,10.829 z"
+   id="path20"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g26"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g28"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g30"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g32"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g34"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g36"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g38"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g40"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g42"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g44"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g46"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g48"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g50"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g52"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g54"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<path
+   style="fill:#312c28;fill-opacity:1;stroke-width:0.76703107"
+   d="m 357.70724,446.54438 c -4.04767,-9.68742 -18.36193,-75.08012 -22.93829,-104.7903 -5.22617,-33.92891 -6.98462,-55.3622 -6.35584,-77.47014 0.33094,-11.63575 0.78831,-16.40488 2.05967,-21.47687 1.92752,-7.68974 1.59125,-10.68941 -1.48887,-13.28116 -5.11614,-4.30495 -12.05781,-3.01526 -14.57878,2.70858 -3.38208,7.67897 -4.24373,15.71447 -4.21799,39.33624 0.0228,20.93974 0.76172,32.28367 3.33293,51.16802 l 0.59624,4.37911 -5.41384,1.23135 c -24.29564,5.52592 -50.96752,2.27242 -75.04742,-9.15448 -11.08287,-5.25928 -19.50522,-11.52913 -30.88539,-22.992 -11.46485,-11.54817 -17.67548,-19.25061 -22.28732,-27.64083 -4.32936,-7.87631 -4.92966,-8.10681 -21.12141,-8.11025 -25.12325,-0.005 -43.935,2.46716 -53.50267,7.03205 l -4.87657,2.32668 -3.452887,-3.3385 c -3.892511,-3.76355 -13.560356,-15.94193 -15.251123,-19.21152 -1.487842,-2.87717 -0.489996,-4.34016 8.031337,-11.7751 8.312629,-7.25287 19.532563,-14.79263 37.684003,-25.32354 19.44678,-11.28243 26.77183,-16.34935 34.73935,-24.03005 11.35166,-10.94304 17.57729,-21.73686 25.13324,-43.57537 4.20383,-12.15006 9.18072,-25.75133 9.58653,-26.19887 0.13615,-0.15016 1.57075,1.11795 3.18799,2.81802 1.61723,1.70006 3.87651,3.32597 5.02062,3.61312 1.28964,0.32368 12.46638,-1.27255 29.40942,-4.20018 15.03108,-2.59726 27.49227,-4.55925 27.69152,-4.35999 0.19926,0.19925 4.58306,7.71833 9.74176,16.70905 7.36048,12.828 9.92906,16.66774 11.93262,17.83788 2.53962,1.48322 2.71748,1.47999 33.5778,-0.61 17.06356,-1.15561 31.84368,-2.47428 32.8447,-2.93037 1.00102,-0.4561 10.25722,-10.53034 20.56933,-22.3872 20.18834,-23.212533 23.31082,-26.051042 35.94116,-32.672428 16.75646,-8.784482 28.47664,-7.982024 37.90398,2.59521 11.61906,13.036298 19.16325,42.173838 21.66829,83.688338 4.16784,69.07117 -1.3273,126.75059 -16.31214,171.21928 -15.24883,45.25215 -40.19364,77.51268 -72.53701,93.81044 -6.46349,3.25693 -11.99859,5.53416 -16.40468,6.74913 -2.8733,0.7923 -2.95648,0.75691 -3.98026,-1.69335 z m 63.35268,-95.36047 c 9.67579,-5.71564 1.32885,-20.7435 -8.8411,-15.91754 -3.35536,1.59222 -5.02648,4.52701 -5.02648,8.82741 0,2.59708 0.48,3.66292 2.6079,5.79082 2.13711,2.13711 3.1889,2.60791 5.82615,2.60791 1.77003,0 4.21512,-0.58887 5.43353,-1.3086 z m 13.90952,-34.62279 c 4.10593,-4.01733 10.00785,-33.4328 13.0282,-64.9332 2.06202,-21.50556 1.10514,-72.29817 -1.75568,-93.19427 -3.20582,-23.41608 -12.49997,-35.60159 -27.943,-36.63594 -12.14978,-0.81378 -28.86964,6.93797 -33.40513,15.48745 -2.13923,4.03249 -1.63365,6.5741 2.03811,10.24587 2.41653,2.41652 2.96998,2.62519 6.04394,2.27871 2.29438,-0.25861 4.92108,-1.43073 8.15857,-3.64062 6.27254,-4.2816 9.05262,-5.37719 13.64472,-5.37719 2.98382,0 4.3155,0.43298 6.19451,2.01406 4.57847,3.85253 6.17237,8.92859 7.67695,24.44851 4.56795,47.11908 2.09421,94.32302 -6.92818,132.20363 -2.76319,11.60135 -2.78996,13.16543 -0.27644,16.15259 3.59574,4.27329 9.68954,4.70155 13.52343,0.9504 z M 198.64249,236.97957 c 0.78452,-0.70998 2.42197,-3.05492 3.63878,-5.21099 7.6249,-13.51057 25.59035,-19.5998 48.05321,-16.28719 4.64054,0.68434 10.76105,1.909 13.60113,2.72145 8.04753,2.30214 12.83562,0.0798 14.07625,-6.5333 1.41786,-7.55784 -3.19544,-10.6923 -20.32647,-13.81063 -3.62113,-0.65916 -7.27421,-1.32843 -8.11794,-1.48729 -1.42192,-0.26772 -1.53506,-0.90207 -1.54772,-8.67801 l -0.0137,-8.38917 3.80327,-0.36545 c 3.02613,-0.29077 4.23517,-0.84884 5.91704,-2.73116 2.90304,-3.24907 3.4972,-6.96807 1.69984,-10.63974 -0.78178,-1.59702 -2.28432,-3.33275 -3.33899,-3.8572 -2.97039,-1.47706 -37.60927,-1.34169 -42.689,0.16683 -16.23954,4.82263 -24.12376,27.87331 -14.42309,42.16806 l 1.95667,2.88331 -4.77954,4.32419 c -8.61535,7.79455 -13.29532,15.50603 -12.36472,20.37412 0.47333,2.47609 4.15948,6.33368 6.53327,6.83714 2.82909,0.60003 6.80097,-0.10874 8.32169,-1.48497 z"
+   id="path33"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#333333;fill-opacity:1;stroke-width:0.76703107"
+   d="m 292.67733,128.72172 c -0.9867,-1.58779 -5.01556,-8.5821 -8.95306,-15.54291 -8.83186,-15.613225 -10.13169,-17.395465 -13.33119,-18.278892 -3.44355,-0.950808 -13.26055,0.408756 -37.6123,5.208952 -10.92014,2.15257 -20.04053,3.72802 -20.26754,3.50101 -0.84024,-0.84024 -19.10444,-29.173916 -18.93874,-29.38011 0.44282,-0.551046 15.02692,-4.264829 26.07874,-6.640847 39.66617,-8.527785 73.09933,-9.045241 94.15803,-1.457316 17.61543,6.347238 50.1379,23.894978 54.88308,29.612563 1.17917,1.420803 -24.92918,31.38515 -27.9784,32.1106 -1.19509,0.28432 -11.31974,1.08064 -22.49922,1.7696 -11.17948,0.68895 -21.09562,1.41725 -22.03587,1.61845 -1.3375,0.28619 -2.09997,-0.26247 -3.50353,-2.5211 z"
+   id="path35"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#333333;fill-opacity:1;stroke-width:0.76703107"
+   d="M 137.65538,337.45362 C 117.83296,333.87397 96.566089,322.1954 78.903273,305.19028 69.742902,296.371 63.750656,288.4859 58.208299,277.95808 45.77659,254.34378 40.850357,222.43695 45.438819,195.25114 l 0.970955,-5.75274 0.565282,6.13625 c 3.422449,37.15136 15.423111,62.46371 41.638294,87.82544 15.1213,14.62901 30.03718,24.55928 43.76947,29.1396 16.13154,5.38057 33.10222,3.58968 47.36388,-4.99824 l 4.48885,-2.70304 7.35392,7.11413 c 4.04466,3.91276 7.46169,7.3511 7.59339,7.64074 0.53599,1.17876 -9.20585,7.88039 -17.11414,11.7732 -10.96085,5.39539 -18.76177,7.26914 -29.91422,7.18527 -4.64054,-0.0349 -11.16514,-0.55606 -14.49912,-1.15813 z"
+   id="path37"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#333333;fill-opacity:1;stroke-width:0.76703107"
+   d="m 142.79915,297.2778 c -4.48916,-0.95476 -11.79787,-3.99788 -16.61819,-6.9193 -5.41025,-3.27895 -10.21642,-7.38156 -9.49894,-8.10841 1.66029,-1.68197 11.49096,-2.74991 28.95272,-3.14523 l 18.79226,-0.42545 4.02657,5.83113 4.02657,5.83114 -2.92638,1.93659 c -6.70248,4.43549 -18.78803,6.69387 -26.75461,4.99953 z"
+   id="path39"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#333333;fill-opacity:1;stroke-width:0.76703107"
+   d="M 151.80508,449.0928 C 99.279147,438.58879 59.197215,395.08861 50.42739,339.06947 49.323211,332.01629 49.183573,309.96732 50.212347,305.11392 l 0.694053,-3.27431 4.051062,5.31603 c 4.366387,5.72983 16.487077,17.67431 21.098598,20.79188 2.710927,1.83269 2.836724,2.11036 2.841733,6.2725 0.02255,18.73682 8.555044,42.62385 21.004496,58.80285 14.675141,19.07144 37.159961,32.79159 59.500271,36.30682 l 6.17499,0.97163 v 10.18559 10.18558 l -3.25989,-0.0647 c -1.79293,-0.0356 -6.52359,-0.71732 -10.51258,-1.51503 z"
+   id="path41"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#312c28;fill-opacity:1;stroke-width:0.76703107"
+   d="m 134.8963,336.43182 c -13.4511,-2.8454 -29.23603,-10.41034 -42.722848,-20.47495 -7.199357,-5.37256 -21.068095,-18.98606 -25.292306,-24.82685 -10.993563,-15.2007 -18.33886,-34.23866 -21.33001,-55.28434 -1.383208,-9.73223 -1.496103,-27.65826 -0.233592,-37.09096 l 0.930917,-6.95522 0.548835,5.36921 c 0.94373,9.23245 2.351986,17.2582 3.028246,17.2582 0.357053,0 0.461667,0.48868 0.232474,1.08594 -1.117888,2.91317 6.12892,23.96756 11.770595,34.19749 13.206357,23.94682 38.436629,48.25211 61.720379,59.45761 18.35983,8.83581 36.51761,8.84064 53.79699,0.0143 l 6.78273,-3.46464 6.52357,5.9375 c 7.9641,7.24861 8.38484,7.92807 6.15212,9.93526 -5.68412,5.10997 -21.33035,13.05512 -29.7418,15.10287 -6.98512,1.70052 -23.52715,1.56608 -32.1663,-0.26141 z"
+   id="path4546"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#312c28;fill-opacity:1;stroke-width:0.76703107"
+   d="m 158.75011,449.81518 c -11.16786,-1.29504 -25.70009,-5.8615 -37.66037,-11.83402 -35.106236,-17.53075 -60.36568,-51.29031 -69.129132,-92.39193 -1.463849,-6.86562 -1.724867,-10.50557 -1.769219,-24.67215 -0.02862,-9.14008 0.234977,-16.90564 0.585761,-17.2568 0.350784,-0.35116 1.365415,0.39639 2.254736,1.66122 2.353173,3.34679 18.493357,19.68018 22.03975,22.30359 2.090882,1.54671 3.037345,2.83351 3.057975,4.15758 0.02193,1.4073 0.20967,1.63366 0.705518,0.85063 0.409244,-0.64626 0.521906,0.8659 0.285734,3.83516 -0.445639,5.60278 1.177119,15.37752 4.076759,24.5565 1.049618,3.32263 2.258913,6.04114 2.687324,6.04114 0.42841,0 0.567748,0.3417 0.309639,0.75933 -0.702965,1.13742 5.177384,13.16931 9.919111,20.29569 10.838204,16.28882 29.041514,30.71335 46.925924,37.18468 7.02041,2.54029 21.40901,5.73808 22.57533,5.01725 0.44777,-0.27674 0.72962,3.56661 0.72962,9.94925 0,7.86187 -0.234,10.37591 -0.95879,10.30068 -0.52733,-0.0547 -3.51339,-0.39574 -6.63567,-0.7578 z"
+   id="path4548"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#312c28;fill-opacity:1;stroke-width:0.76703107"
+   d="m 136.95982,294.96549 c -7.91626,-2.94195 -19.70524,-10.28489 -19.70524,-12.2737 0,-1.6651 16.80961,-3.06318 45.81013,-3.81008 1.19267,-0.0307 8.76228,10.67758 8.19582,11.59414 -0.23229,0.37584 -2.11793,1.54257 -4.19032,2.59273 -9.50673,4.81743 -20.40444,5.50396 -30.11039,1.89691 z"
+   id="path4550"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#312c28;fill-opacity:1;stroke-width:0.76703107"
+   d="m 293.87997,129.86174 c -0.41065,-0.52734 -4.49809,-7.50492 -9.08318,-15.50574 -9.1303,-15.932008 -12.06276,-19.90585 -14.26449,-19.330087 -0.77306,0.202159 -1.40556,0.05471 -1.40556,-0.32766 0,-0.905437 -3.61459,-0.90561 -4.17417,-1.99e-4 -0.23625,0.382262 -1.09844,0.520101 -1.91598,0.306309 -1.75069,-0.457814 -6.56574,0.30229 -30.60134,4.830729 -9.84458,1.854768 -18.35824,3.372308 -18.91925,3.372308 -0.91129,0 -19.81301,-28.381124 -19.26602,-28.928114 0.59953,-0.599529 25.8932,-6.512896 35.20277,-8.229998 18.93877,-3.493161 29.14746,-4.49657 46.19375,-4.540369 25.3274,-0.06508 34.12918,2.116255 59.82843,14.827183 19.03263,9.413603 32.59882,17.768369 32.59882,20.076062 0,1.915716 -23.67685,28.877086 -26.851,30.575836 -0.74297,0.39762 -11.13486,1.42261 -23.09307,2.27774 -25.72253,1.83942 -23.32727,1.78055 -24.24971,0.596 z"
+   id="path4552"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="m 215.74137,194.94432 c -3.80509,-3.80509 -3.80509,-9.38783 0,-13.19293 3.61095,-3.61095 7.26566,-3.62618 10.84663,-0.0452 1.40948,1.40948 2.79304,3.48046 3.07458,4.60218 0.76562,3.05048 -0.21627,5.82286 -3.07458,8.68118 -3.58097,3.58097 -7.23568,3.56573 -10.84663,-0.0452 z"
+   id="path42"
+   inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/variants/Balaklava/pieces/white_mammoth.svg b/variants/Balaklava/pieces/white_mammoth.svg
new file mode 100644
index 0000000..5535a15
--- /dev/null
+++ b/variants/Balaklava/pieces/white_mammoth.svg
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Capa_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 512 512"
+   style="enable-background:new 0 0 512 512;"
+   xml:space="preserve"
+   sodipodi:docname="wm.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+   id="metadata61"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs59" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="960"
+   inkscape:window-height="1060"
+   id="namedview57"
+   showgrid="false"
+   inkscape:zoom="1.3037281"
+   inkscape:cx="264.67796"
+   inkscape:cy="256"
+   inkscape:window-x="0"
+   inkscape:window-y="20"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="Capa_1" />
+<g
+   id="g6"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g4">
+		<path
+   d="m 438.343,344.359 c -4.851,-2.408 -10.847,-0.341 -13.234,4.487 -2.371,4.796 -0.269,10.891 4.496,13.235 4.829,2.376 10.873,0.295 13.236,-4.487 2.411,-4.892 0.395,-10.823 -4.498,-13.235 z"
+   id="path2"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g12"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g10">
+		<path
+   d="m 467.46,150.829 c -1.733,-15.248 -6.124,-34.746 -21.759,-41.571 -10.77,-4.702 -23.892,-1.747 -34.523,4.547 -6.781,4.099 -18.321,12.042 -10.307,20.913 7.08,7.837 14.602,-0.5 20.913,-4.219 5.652,-3.33 13.154,-5.117 18.55,-0.339 5.8,5.136 6.684,15.673 7.477,22.854 1.948,17.465 2.975,36.611 2.975,55.371 0.011,27.339 -2.164,67.774 -12.552,105.195 -3.379,12.174 15.648,17.618 19.046,5.28 9.859,-35.804 13.274,-73.435 13.274,-110.475 0,-19.482 -1.076,-39.378 -3.094,-57.556 z"
+   id="path8"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g18"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g16">
+		<path
+   d="m 502.474,107.08 c -9.946,-41.4 -28.689,-62.392 -55.709,-62.392 -15.26,0 -32.325,7.019 -49.631,20.134 C 388.072,56.662 369.273,43.347 331.948,27.839 271.84,2.862 171.24,37.325 166.964,38.812 c -5.866,2.04 -8.42,9.519 -5.043,14.719 l 17.097,26.328 c -7.076,11.717 -11.364,24.558 -15.458,36.868 -5.591,16.812 -10.873,32.691 -22.564,44.941 -9.831,10.301 -23.446,18.055 -37.86,26.263 -16.712,9.517 -35.247,20.076 -51.564,36.617 -8.26,-21.929 -10.022,-46.135 -5.211,-72.169 4.42,-23.919 13.024,-40.47 13.137,-40.687 5.08,-9.714 -7.812,-19.452 -15.683,-11.661 -22.547,22.318 -37.545,53.825 -42.229,88.72 -4.325,32.219 0.268,65.239 12.925,93.5 -5.695,14.793 -8.577,29.553 -8.577,44.179 0,91.966 71.609,166.785 159.628,166.785 5.459,0 9.884,-4.425 9.884,-9.884 v -43.497 c 0,-5.459 -4.425,-9.884 -9.884,-9.884 -43.608,0 -79.775,-34.561 -85.645,-79.318 20.138,11.026 45.616,19.431 68.858,17.529 23.725,-1.941 44.963,-13.751 61.902,-30.056 23.258,13.904 50.269,21.512 76.954,21.512 12.708,0 24.846,-1.591 36.235,-4.74 11.691,81.18 29.847,128.893 30.649,130.975 1.587,4.118 5.712,6.678 10.107,6.29 1.558,-0.14 38.568,-3.845 75.271,-40.31 21.141,-21.004 37.932,-48.664 49.91,-82.212 C 504.532,328.363 512,277.943 512,219.758 512,188.408 511.013,142.62 502.474,107.08 Z M 324.363,46.093 c 34.536,14.35 51.257,26.204 58.631,32.601 l -30.826,35.442 -54.093,3.685 -20.647,-36.056 c -1.781,-3.11 -5.075,-4.973 -8.575,-4.973 -12.223,0 -60.617,11.765 -61.483,10.432 -0.004,-0.006 -21.767,-33.521 -21.767,-33.521 27.8,-8.1 96.849,-25.024 138.76,-7.61 z M 155.678,449.238 v 23.846 C 83.154,467.735 25.702,404.003 25.702,326.43 c 0,-6.727 0.755,-13.525 2.236,-20.376 8.775,12.577 19.387,23.343 31.371,31.787 0.008,58.182 42.403,106.13 96.369,111.397 z M 142.045,348.579 C 103.786,348.577 76.358,325.485 74.822,324.431 57.553,312.582 43.221,296.453 34.113,277.546 18.954,246.079 16.052,209.127 24.058,176.025 c -0.608,25.515 4.803,49.727 16.037,71.165 12.432,23.724 32.193,43.798 54.137,58.904 29.228,20.108 56.812,21.28 82.13,3.536 5.245,6.042 11.202,11.753 17.69,16.962 0.803,0.645 -23.052,21.987 -52.007,21.987 z M 99.329,285.408 c 8.397,-5.763 49.588,-4.266 55.651,-4.294 2.49,4.328 5.523,8.758 8.862,13.135 -31.392,23.532 -62.522,-7.351 -64.513,-8.841 z m 327.7,151.327 c -22.589,22.895 -45.422,31.281 -56.787,34.222 -3.314,0.857 -21.904,-88.65 -22.872,-94.198 -6.058,-34.715 -11.745,-70.446 -11.721,-105.759 -0.049,-14.489 1.354,-26.912 3.844,-34.089 4.13,-11.904 -14.601,-18.463 -18.719,-6.347 -3.331,9.993 -4.844,22.457 -4.893,40.436 0.015,24.252 3.18,50.343 5.128,64.121 -10.353,3.138 -21.544,4.728 -33.376,4.728 -25.495,0 -51.376,-8.004 -72.885,-22.545 -10.735,-7.238 -36.569,-32.481 -44.887,-50.357 -1.679,-3.608 -5.363,-5.848 -9.332,-5.707 -7.558,0.283 -61.608,-2.142 -76.625,11.172 -9.287,-8.866 -17.031,-18.475 -23.114,-28.703 15.374,-17.626 34.027,-28.288 52.13,-38.597 15.709,-8.946 30.547,-17.396 42.378,-29.793 14.75,-15.455 20.989,-34.212 27.022,-52.351 2.706,-8.136 5.444,-16.254 9.041,-24.046 2.539,4.966 6.758,9.921 12.945,8.889 l 59.407,-10.22 20.286,35.424 c 1.768,3.089 5.05,4.972 8.575,4.972 0.224,0 0.448,-0.008 0.674,-0.023 l 64.361,-4.385 c 2.621,-0.179 5.063,-1.393 6.786,-3.375 l 39.423,-45.326 c 0.057,-0.066 0.108,-0.136 0.163,-0.203 15.512,-12.885 30.76,-20.219 42.788,-20.219 45.467,0 45.467,116.891 45.467,155.302 -0.004,124.712 -35.463,186.829 -65.207,216.977 z"
+   id="path14"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g24"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+	<g
+   id="g22">
+		<path
+   d="m 273.825,195.683 c -10.331,-3.287 -19.651,-5.079 -28.022,-5.78 1.723,0.119 1.801,-19.811 -0.622,-19.811 10e-4,0 5.858,0 5.878,0 12.693,0 12.791,-19.768 0,-19.768 0,0 -33.58,0 -33.606,0 -25.652,0 -38.388,32.855 -21.733,51.383 -13.006,8.991 -18.263,19.694 -18.857,20.971 -5.316,11.42 12.52,19.957 17.924,8.338 12.344,-26.537 50.285,-23.726 73.043,-16.495 11.822,3.756 18.189,-14.957 5.995,-18.838 z m -56.371,-3.934 c -5.45,0 -9.884,-4.858 -9.884,-10.829 -0.001,-5.97 4.433,-10.828 9.884,-10.828 5.45,0 9.884,4.857 9.884,10.828 0,5.29 -4.249,10.829 -9.884,10.829 z"
+   id="path20"
+   inkscape:connector-curvature="0" />
+	</g>
+</g>
+<g
+   id="g26"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g28"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g30"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g32"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g34"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g36"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g38"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g40"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g42"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g44"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g46"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g48"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g50"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g52"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<g
+   id="g54"
+   transform="matrix(0.9,0,0,0.9,25.600024,25.599998)">
+</g>
+<path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="M 151.80508,449.0928 C 99.279147,438.58879 59.197215,395.08861 50.42739,339.06947 49.323211,332.01629 49.183573,309.96732 50.212347,305.11392 l 0.694053,-3.27431 4.051062,5.31603 c 4.366387,5.72983 16.487077,17.67431 21.098598,20.79188 2.710927,1.83269 2.836724,2.11036 2.841733,6.2725 0.02255,18.73682 8.555044,42.62385 21.004496,58.80285 14.675141,19.07144 37.159961,32.79159 59.500271,36.30682 l 6.17499,0.97163 v 10.18559 10.18558 l -3.25989,-0.0647 c -1.79293,-0.0356 -6.52359,-0.71732 -10.51258,-1.51503 z"
+   id="path33"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="M 137.65538,337.45362 C 117.83296,333.87397 96.566089,322.1954 78.903273,305.19028 69.742902,296.371 63.750656,288.4859 58.208299,277.95808 45.77659,254.34378 40.850357,222.43695 45.438819,195.25114 l 0.970955,-5.75274 0.565282,6.13625 c 3.422449,37.15136 15.423111,62.46371 41.638294,87.82544 15.1213,14.62901 30.03718,24.55928 43.76947,29.1396 16.13154,5.38057 33.10222,3.58968 47.36388,-4.99824 l 4.48885,-2.70304 7.35392,7.11413 c 4.04466,3.91276 7.46169,7.3511 7.59339,7.64074 0.53599,1.17876 -9.20585,7.88039 -17.11414,11.7732 -10.96085,5.39539 -18.76177,7.26914 -29.91422,7.18527 -4.64054,-0.0349 -11.16514,-0.55606 -14.49912,-1.15813 z"
+   id="path35"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="m 142.79915,297.2778 c -4.48916,-0.95476 -11.79787,-3.99788 -16.61819,-6.9193 -5.41025,-3.27895 -10.21642,-7.38156 -9.49894,-8.10841 1.66029,-1.68197 11.49096,-2.74991 28.95272,-3.14523 l 18.79226,-0.42545 4.02657,5.83113 4.02657,5.83114 -2.92638,1.93659 c -6.70248,4.43549 -18.78803,6.69387 -26.75461,4.99953 z"
+   id="path37"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="m 357.70724,446.54438 c -4.04767,-9.68742 -18.36193,-75.08012 -22.93829,-104.7903 -5.22617,-33.92891 -6.98462,-55.3622 -6.35584,-77.47014 0.33094,-11.63575 0.78831,-16.40488 2.05967,-21.47687 1.92752,-7.68974 1.59125,-10.68941 -1.48887,-13.28116 -5.11614,-4.30495 -12.05781,-3.01526 -14.57878,2.70858 -3.38208,7.67897 -4.24373,15.71447 -4.21799,39.33624 0.0228,20.93974 0.76172,32.28367 3.33293,51.16802 l 0.59624,4.37911 -5.41384,1.23135 c -24.29564,5.52592 -50.96752,2.27242 -75.04742,-9.15448 -11.08287,-5.25928 -19.50522,-11.52913 -30.88539,-22.992 -11.46485,-11.54817 -17.67548,-19.25061 -22.28732,-27.64083 -4.32936,-7.87631 -4.92966,-8.10681 -21.12141,-8.11025 -25.12325,-0.005 -43.935,2.46716 -53.50267,7.03205 l -4.87657,2.32668 -3.452887,-3.3385 c -3.892511,-3.76355 -13.560356,-15.94193 -15.251123,-19.21152 -1.487842,-2.87717 -0.489996,-4.34016 8.031337,-11.7751 8.312629,-7.25287 19.532563,-14.79263 37.684003,-25.32354 19.44678,-11.28243 26.77183,-16.34935 34.73935,-24.03005 11.35166,-10.94304 17.57729,-21.73686 25.13324,-43.57537 4.20383,-12.15006 9.18072,-25.75133 9.58653,-26.19887 0.13615,-0.15016 1.57075,1.11795 3.18799,2.81802 1.61723,1.70006 3.87651,3.32597 5.02062,3.61312 1.28964,0.32368 12.46638,-1.27255 29.40942,-4.20018 15.03108,-2.59726 27.49227,-4.55925 27.69152,-4.35999 0.19926,0.19925 4.58306,7.71833 9.74176,16.70905 7.36048,12.828 9.92906,16.66774 11.93262,17.83788 2.53962,1.48322 2.71748,1.47999 33.5778,-0.61 17.06356,-1.15561 31.84368,-2.47428 32.8447,-2.93037 1.00102,-0.4561 10.25722,-10.53034 20.56933,-22.3872 20.18834,-23.212533 23.31082,-26.051042 35.94116,-32.672428 16.75646,-8.784482 28.47664,-7.982024 37.90398,2.59521 11.61906,13.036298 19.16325,42.173838 21.66829,83.688338 4.16784,69.07117 -1.3273,126.75059 -16.31214,171.21928 -15.24883,45.25215 -40.19364,77.51268 -72.53701,93.81044 -6.46349,3.25693 -11.99859,5.53416 -16.40468,6.74913 -2.8733,0.7923 -2.95648,0.75691 -3.98026,-1.69335 z m 63.35268,-95.36047 c 9.67579,-5.71564 1.32885,-20.7435 -8.8411,-15.91754 -3.35536,1.59222 -5.02648,4.52701 -5.02648,8.82741 0,2.59708 0.48,3.66292 2.6079,5.79082 2.13711,2.13711 3.1889,2.60791 5.82615,2.60791 1.77003,0 4.21512,-0.58887 5.43353,-1.3086 z m 13.90952,-34.62279 c 4.10593,-4.01733 10.00785,-33.4328 13.0282,-64.9332 2.06202,-21.50556 1.10514,-72.29817 -1.75568,-93.19427 -3.20582,-23.41608 -12.49997,-35.60159 -27.943,-36.63594 -12.14978,-0.81378 -28.86964,6.93797 -33.40513,15.48745 -2.13923,4.03249 -1.63365,6.5741 2.03811,10.24587 2.41653,2.41652 2.96998,2.62519 6.04394,2.27871 2.29438,-0.25861 4.92108,-1.43073 8.15857,-3.64062 6.27254,-4.2816 9.05262,-5.37719 13.64472,-5.37719 2.98382,0 4.3155,0.43298 6.19451,2.01406 4.57847,3.85253 6.17237,8.92859 7.67695,24.44851 4.56795,47.11908 2.09421,94.32302 -6.92818,132.20363 -2.76319,11.60135 -2.78996,13.16543 -0.27644,16.15259 3.59574,4.27329 9.68954,4.70155 13.52343,0.9504 z M 198.64249,236.97957 c 0.78452,-0.70998 2.42197,-3.05492 3.63878,-5.21099 7.6249,-13.51057 25.59035,-19.5998 48.05321,-16.28719 4.64054,0.68434 10.76105,1.909 13.60113,2.72145 8.04753,2.30214 12.83562,0.0798 14.07625,-6.5333 1.41786,-7.55784 -3.19544,-10.6923 -20.32647,-13.81063 -3.62113,-0.65916 -7.27421,-1.32843 -8.11794,-1.48729 -1.42192,-0.26772 -1.53506,-0.90207 -1.54772,-8.67801 l -0.0137,-8.38917 3.80327,-0.36545 c 3.02613,-0.29077 4.23517,-0.84884 5.91704,-2.73116 2.90304,-3.24907 3.4972,-6.96807 1.69984,-10.63974 -0.78178,-1.59702 -2.28432,-3.33275 -3.33899,-3.8572 -2.97039,-1.47706 -37.60927,-1.34169 -42.689,0.16683 -16.23954,4.82263 -24.12376,27.87331 -14.42309,42.16806 l 1.95667,2.88331 -4.77954,4.32419 c -8.61535,7.79455 -13.29532,15.50603 -12.36472,20.37412 0.47333,2.47609 4.15948,6.33368 6.53327,6.83714 2.82909,0.60003 6.80097,-0.10874 8.32169,-1.48497 z"
+   id="path39"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="m 215.74138,194.94433 c -3.8051,-3.8051 -3.8051,-9.38784 0,-13.19294 3.61095,-3.61095 7.26566,-3.62618 10.84663,-0.0452 1.40948,1.40948 2.79304,3.48046 3.07457,4.60218 0.76562,3.05048 -0.21626,5.82287 -3.07457,8.68118 -3.58097,3.58097 -7.23568,3.56573 -10.84663,-0.0452 z"
+   id="path41"
+   inkscape:connector-curvature="0" /><path
+   style="fill:#ffffff;fill-opacity:1;stroke-width:0.76703107"
+   d="m 292.67733,128.72172 c -0.9867,-1.58779 -5.01556,-8.5821 -8.95306,-15.54291 -8.83186,-15.613225 -10.13169,-17.395465 -13.33119,-18.278892 -3.44355,-0.950808 -13.26055,0.408756 -37.6123,5.208952 -10.92014,2.15257 -20.04053,3.72802 -20.26754,3.50101 -0.84024,-0.84024 -19.10444,-29.173916 -18.93874,-29.38011 0.44282,-0.551046 15.02692,-4.264829 26.07874,-6.640847 39.66617,-8.527785 73.09933,-9.045241 94.15803,-1.457316 17.61543,6.347238 50.1379,23.894978 54.88308,29.612563 1.17917,1.420803 -24.92918,31.38515 -27.9784,32.1106 -1.19509,0.28432 -11.31974,1.08064 -22.49922,1.7696 -11.17948,0.68895 -21.09562,1.41725 -22.03587,1.61845 -1.3375,0.28619 -2.09997,-0.26247 -3.50353,-2.5211 z"
+   id="path43"
+   inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/variants/Balaklava/style.css b/variants/Balaklava/style.css
index a3550bc..c876806 100644
--- a/variants/Balaklava/style.css
+++ b/variants/Balaklava/style.css
@@ -1 +1,8 @@
 @import url("/base_pieces.css");
+
+piece.white.mammoth {
+  background-image: url('/variants/Balaklava/pieces/white_mammoth.svg');
+}
+piece.black.mammoth {
+  background-image: url('/variants/Balaklava/pieces/black_mammoth.svg');
+}
diff --git a/variants/Baroque/class.js b/variants/Baroque/class.js
index edf1dd5..240f130 100644
--- a/variants/Baroque/class.js
+++ b/variants/Baroque/class.js
@@ -1,9 +1,6 @@
-import ChessRules from "/base_rules.js";
 import GiveawayRules from "/variants/Giveaway/class.js";
 import AbstractSpecialCaptureRules from "/variants/_SpecialCaptures.js";
 import {Random} from "/utils/alea.js";
-import PiPo from "/utils/PiPo.js";
-import Move from "/utils/Move.js";
 
 export default class BaroqueRules extends AbstractSpecialCaptureRules {
 
diff --git a/variants/Benedict/class.js b/variants/Benedict/class.js
index e6542c4..5503f2f 100644
--- a/variants/Benedict/class.js
+++ b/variants/Benedict/class.js
@@ -1,5 +1,4 @@
 import AbstractFlipRules from "/variants/_Flip/class.js";
-import PiPo from "/utils/PiPo.js";
 
 export default class BenedictRules extends AbstractFlipRules {
 
diff --git a/variants/Berolina/style.css b/variants/Berolina/style.css
index a3550bc..9250552 100644
--- a/variants/Berolina/style.css
+++ b/variants/Berolina/style.css
@@ -1 +1,2 @@
 @import url("/base_pieces.css");
+@import url("/variants/_Berolina/style.css");
diff --git a/variants/Bicolour/class.js b/variants/Bicolour/class.js
index fd2cdb0..3812d4c 100644
--- a/variants/Bicolour/class.js
+++ b/variants/Bicolour/class.js
@@ -2,9 +2,7 @@ import ChessRules from "/base_rules.js";
 import {Random} from "/utils/alea.js";
 import {ArrayFun} from "/utils/array.js";
 
-export class BicolourRules extends ChessRules {
-
-  // TODO: Options
+export default class BicolourRules extends ChessRules {
 
   get hasFlags() {
     return false;
@@ -103,9 +101,11 @@ export class BicolourRules extends ChessRules {
     };
   }
 
-  underCheck(color) {
-    const kingPos = this.searchKingPos(color)[0],
-    return (this.underAttack(kingPos, 'w') || this.underAttack(kingPos, 'b'));
+  underCheck(square_s) {
+    return (
+      this.underAttack(square_s[0], 'w') ||
+      this.underAttack(square_s[0], 'b')
+    );
   }
 
 };
diff --git a/variants/Giveaway/class.js b/variants/Giveaway/class.js
index 39f586c..3f27e5f 100644
--- a/variants/Giveaway/class.js
+++ b/variants/Giveaway/class.js
@@ -80,10 +80,10 @@ export default class GiveawayRules extends ChessRules {
     super(o);
   }
 
-  underCheck(square, oppCol) {
+  underCheck(square_s, oppCol) {
     if (this.options["mode"] == "suicide")
       return false;
-    return super.underCheck(square, oppCol);
+    return super.underCheck(square_s, oppCol);
   }
 
   getCurrentScore() {
diff --git a/variants/Hex/class.js b/variants/Hex/class.js
index 774de17..f58800f 100644
--- a/variants/Hex/class.js
+++ b/variants/Hex/class.js
@@ -187,7 +187,7 @@ export default class HexRules extends AbstractClickFillRules {
         max = z;
       explored[index] = true;
       component[index] = true;
-      for (let [dx, dy] of super.pieces()['k'].moves[0].steps) {
+      for (let [dx, dy] of super.pieces()['k'].both[0].steps) {
         const [nx, ny] = [x + dx, y + dy];
         const nidx = getIndex(nx, ny);
         if (
diff --git a/variants/_Antiking/class.js b/variants/_Antiking/class.js
index 941bd82..ac9aedc 100644
--- a/variants/_Antiking/class.js
+++ b/variants/_Antiking/class.js
@@ -57,8 +57,6 @@ export default class AbstractAntikingRules extends ChessRules {
 
   underCheck(square_s, color) {
     let res = false;
-    if (!Array.isArray(square_s[0]))
-      square_s = [square_s];
     square_s.forEach(sq => {
       switch (this.getPiece(sq[0], sq[1])) {
         case 'k':
diff --git a/variants/_Berolina/pawnSpec.js b/variants/_Berolina/pawnSpec.js
index 088e7df..7cfc7be 100644
--- a/variants/_Berolina/pawnSpec.js
+++ b/variants/_Berolina/pawnSpec.js
@@ -1,7 +1,8 @@
-export default BerolinaPawnSpec = (color) => {
+export default function (color) {
 
   const pawnShift = (color == "w" ? -1 : 1);
   return {
+    "class": "pawn",
     moves: [
       {
         steps: [[pawnShift, 1], [pawnShift, -1]],
@@ -16,4 +17,4 @@ export default BerolinaPawnSpec = (color) => {
     ]
   };
 
-};
+}
diff --git a/variants/_Berolina/style.css b/variants/_Berolina/style.css
new file mode 100644
index 0000000..4daa2c8
--- /dev/null
+++ b/variants/_Berolina/style.css
@@ -0,0 +1,6 @@
+piece.black.pawn {
+  background-image: url('/variants/_Berolina/pieces/black_pawn.svg');
+}
+piece.white.pawn {
+  background-image: url('/variants/_Berolina/pieces/white_pawn.svg');
+}
-- 
2.44.0