From 8f87962339f2bcaeb4c2716d0588a63449a68bde Mon Sep 17 00:00:00 2001 From: Benjamin Auder <benjamin.auder@somewhere> Date: Tue, 19 Dec 2023 20:06:19 +0100 Subject: [PATCH] Fix Coregal --- base_rules.js | 6 +---- pieces/CREDITS | 3 +++ pieces/black_castle.svg | 40 +++++++++++++++++++++++++++++++++ pieces/white_castle.svg | 46 ++++++++++++++++++++++++++++++++++++++ variants/Coregal/class.js | 9 +++++--- variants/Coregal/style.css | 7 ++++++ 6 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 pieces/CREDITS create mode 100644 pieces/black_castle.svg create mode 100644 pieces/white_castle.svg diff --git a/base_rules.js b/base_rules.js index 0f950a2..699b1d8 100644 --- a/base_rules.js +++ b/base_rules.js @@ -1686,10 +1686,6 @@ export default class ChessRules { getPotentialMovesOf(piece, [x, y]) { const color = this.getColor(x, y); const stepSpec = this.getStepSpec(color, x, y, piece); - - // TODO: pawns, coregal -console.log(stepSpec); - let squares = []; if (stepSpec.attack) { squares = this.findDestSquares( @@ -2254,7 +2250,7 @@ console.log(stepSpec); } // Update castling flags if start or arrive from/at rook/king locations move.appear.concat(move.vanish).forEach(psq => { - if ((!!king && psq.p == king) || this.isKing(0, 0, psq.p)) + if ((king && psq.p == king) || (!king && this.isKing(0, 0, psq.p))) castleFlags[psq.c] = [this.size.y, this.size.y]; // NOTE: not "else if" because king can capture enemy rook... let c = ""; diff --git a/pieces/CREDITS b/pieces/CREDITS new file mode 100644 index 0000000..6950ef0 --- /dev/null +++ b/pieces/CREDITS @@ -0,0 +1,3 @@ +white_castle, black_castle : +https://www.iconpacks.net/free-icon/castle-1802.html +https://uxwing.com/castle-icon/ diff --git a/pieces/black_castle.svg b/pieces/black_castle.svg new file mode 100644 index 0000000..ced0f90 --- /dev/null +++ b/pieces/black_castle.svg @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 122.88 121.71" + style="enable-background:new 0 0 122.88 121.71" + xml:space="preserve" + sodipodi:docname="black_castle.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><defs + id="defs1" /><sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:zoom="1.920573" + inkscape:cx="61.439999" + inkscape:cy="60.658982" + inkscape:window-width="637" + inkscape:window-height="1049" + inkscape:window-x="1280" + inkscape:window-y="1" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style1">.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><g + id="g1" + transform="matrix(0.8,0,0,0.8,12.289,12.172)"><path + class="st0" + d="m 74.63,71.74 0.13,-24.69 5.21,-7.65 -0.12,-8.21 c 0,-0.23 -0.19,-0.42 -0.42,-0.42 H 63.31 v -9.44 l 22,-8.91 -22,-8.83 V 1.74 c 0,-2.32 -3.52,-2.32 -3.52,0 V 30.78 H 44.61 c -0.23,0 -0.42,0.19 -0.42,0.42 l -0.12,8.21 5.53,7.49 v 24.85 h -6.49 v -7.4 H 30.64 l 0.04,-8.39 5.21,-7.65 -0.12,-8.21 c 0,-0.23 -0.19,-0.42 -0.42,-0.42 H 0.54 c -0.23,0 -0.42,0.19 -0.42,0.42 L 0,48.3 5.53,55.79 v 65.92 h 24.69 0.12 20.12 V 96.5 c 0,-6.28 5.14,-11.43 11.43,-11.43 v 0 c 6.28,0 11.43,5.14 11.43,11.43 v 25.22 h 19.2 0.12 24.69 l 0.35,-65.76 5.21,-7.65 -0.12,-8.21 c 0,-0.23 -0.19,-0.42 -0.42,-0.42 H 87.52 c -0.23,0 -0.42,0.19 -0.42,0.42 l -0.12,8.21 5.53,7.49 v 8.55 h -12.3 v 7.4 H 74.63 Z M 62.02,38.75 c 2.59,0 4.69,2.1 4.69,4.69 0,2.59 -2.1,4.69 -4.69,4.69 -2.59,0 -4.69,-2.1 -4.69,-4.69 -0.01,-2.58 2.09,-4.69 4.69,-4.69 z m 42.91,7.33 c 2.59,0 4.69,2.1 4.69,4.69 0,2.59 -2.1,4.69 -4.69,4.69 -2.59,0 -4.69,-2.1 -4.69,-4.69 0,-2.59 2.1,-4.69 4.69,-4.69 z M 56.67,61.65 h 10.69 c 0.15,0 0.27,0.12 0.27,0.27 v 9.55 c 0,0.15 -0.12,0.27 -0.27,0.27 H 56.67 c -0.15,0 -0.27,-0.12 -0.27,-0.27 v -9.55 c 0,-0.14 0.12,-0.27 0.27,-0.27 z M 17.95,46.08 c 2.59,0 4.69,2.1 4.69,4.69 0,2.59 -2.1,4.69 -4.69,4.69 -2.59,0 -4.69,-2.1 -4.69,-4.69 -0.01,-2.59 2.1,-4.69 4.69,-4.69 z" + id="path1" /></g></svg> diff --git a/pieces/white_castle.svg b/pieces/white_castle.svg new file mode 100644 index 0000000..78e0814 --- /dev/null +++ b/pieces/white_castle.svg @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + version="1.1" + width="256" + height="256" + viewBox="0 0 256 256" + xml:space="preserve" + id="svg1" + sodipodi:docname="white_castle.svg" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:zoom="0.921875" + inkscape:cx="128" + inkscape:cy="127.45763" + inkscape:window-width="637" + inkscape:window-height="1049" + inkscape:window-x="1280" + inkscape:window-y="1" + inkscape:window-maximized="1" + inkscape:current-layer="svg1" /> + +<defs + id="defs1"> +</defs> +<g + style="opacity:1;fill:none;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none" + transform="matrix(2.248,0,0,2.248,26.696593,26.696803)" + id="g1"> + <path + d="M 89,33.853 H 77.802 v -4.172 l 9.227,-3.702 c 0.37,-0.148 0.616,-0.501 0.628,-0.899 0.011,-0.398 -0.215,-0.765 -0.575,-0.934 l -9.854,-4.627 c -0.31,-0.146 -0.673,-0.123 -0.961,0.061 -0.289,0.184 -0.464,0.502 -0.464,0.844 v 8.558 c 0,0.015 0,0.03 0,0.045 v 4.825 H 64.604 c -0.553,0 -1,0.448 -1,1 v 7.463 c 0,0.552 0.447,1 1,1 h 2.178 v 9.912 H 55.021 V 31.404 h 2.758 c 0.404,0 0.77,-0.244 0.924,-0.617 0.155,-0.374 0.069,-0.804 -0.217,-1.09 L 46,17.211 V 12.453 L 55.227,8.751 C 55.597,8.603 55.843,8.25 55.855,7.852 55.866,7.454 55.64,7.087 55.28,6.918 L 45.426,2.292 C 45.116,2.146 44.754,2.169 44.465,2.353 44.175,2.536 44,2.854 44,3.197 v 8.557 c 0,0.016 0,0.031 0,0.046 v 5.411 L 31.514,29.697 c -0.286,0.286 -0.372,0.716 -0.217,1.09 0.155,0.374 0.52,0.617 0.924,0.617 h 2.758 V 53.228 H 23.218 v -9.912 h 2.177 c 0.552,0 1,-0.448 1,-1 v -7.463 c 0,-0.552 -0.448,-1 -1,-1 H 14.198 v -4.172 l 9.227,-3.702 c 0.369,-0.148 0.616,-0.501 0.627,-0.899 0.012,-0.398 -0.214,-0.765 -0.575,-0.934 l -9.854,-4.627 c -0.309,-0.146 -0.672,-0.123 -0.961,0.061 -0.289,0.184 -0.464,0.502 -0.464,0.844 v 8.558 c 0,0.015 0,0.03 0,0.045 v 4.825 H 1 c -0.552,0 -1,0.448 -1,1 v 7.463 c 0,0.552 0.448,1 1,1 h 2.178 v 43.488 c 0,0.553 0.448,1 1,1 h 31.847 c 0.552,0 1,-0.447 1,-1 V 74.308 c 0,-4.397 3.578,-7.976 7.976,-7.976 4.397,0 7.976,3.578 7.976,7.976 v 12.496 c 0,0.553 0.447,1 1,1 h 31.847 c 0.553,0 1,-0.447 1,-1 V 43.316 H 89 c 0.553,0 1,-0.448 1,-1 v -7.463 c 0,-0.553 -0.447,-1 -1,-1 z m -11.198,-11.855 6.349,2.981 -6.349,2.547 z M 46,4.771 52.349,7.751 46,10.298 Z m -31.802,17.227 6.348,2.981 -6.348,2.547 z M 45,19.04 55.364,29.404 H 54.02 35.979 34.635 Z M 2,35.853 h 22.396 v 5.463 H 22.219 4.178 2 Z M 84.822,85.804 H 54.976 V 74.308 c 0,-5.501 -4.475,-9.976 -9.976,-9.976 -5.5,0 -9.976,4.475 -9.976,9.976 V 85.804 H 5.178 V 43.316 h 16.041 v 10.912 c 0,0.553 0.448,1 1,1 H 35.98 c 0.552,0 1,-0.447 1,-1 V 31.404 h 16.041 v 22.824 c 0,0.553 0.447,1 1,1 h 13.762 c 0.553,0 1,-0.447 1,-1 V 43.316 h 16.04 V 85.804 Z M 88,41.316 H 85.822 67.782 65.604 V 35.853 H 88 Z" + style="opacity:1;fill:#000000;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none" + stroke-linecap="round" + id="path1" /> +</g> +</svg> diff --git a/variants/Coregal/class.js b/variants/Coregal/class.js index 1d746d6..23f67c7 100644 --- a/variants/Coregal/class.js +++ b/variants/Coregal/class.js @@ -75,11 +75,12 @@ export default class CoregalRules extends ChessRules { }; } - pieces() { - let res = super.pieces(); + pieces(color, x, y) { + let res = super.pieces(color, x, y); res['l'] = JSON.parse(JSON.stringify(res['q'])); // TODO: CSS royal queen symbol (with cross?) res['l']["class"] = "royal_queen"; + res['='] = {"class": "castle"}; //for castle display return res; } @@ -120,8 +121,10 @@ export default class CoregalRules extends ChessRules { this.relPos[c][p] == '0' ? [1, 2] : [2, 3], //0 == left this.relPos[c][p] == '1' ? [6, 5] : [5, 4] //1 == right ]; - const moves = + let moves = super.getCastleMoves([x, y], finalSquares, null, this.castleFlags[p][c]); + if (p == 'l') + moves.forEach(m => m.choice = '='); //required (for display) return moves; } diff --git a/variants/Coregal/style.css b/variants/Coregal/style.css index b0046d0..668e543 100644 --- a/variants/Coregal/style.css +++ b/variants/Coregal/style.css @@ -6,3 +6,10 @@ piece.black.royal_queen { piece.white.royal_queen { background-image: url('/pieces/Coregal/white_royal_queen.svg'); } + +piece.black.castle { + background-image: url('/pieces/black_castle.svg'); +} +piece.white.castle { + background-image: url('/pieces/white_castle.svg'); +} -- 2.44.0