01d718934a23c073c6ef40a277224992323989c8
1 import ChessRules
from "/base_rules.js";
3 export default class ClorangeRules
extends ChessRules
{
7 select: C
.Options
.select
,
9 C
.Options
.styles
.filter(s
=> !["crazyhouse","recycle"].includes(s
))
19 return "00000000000000000000";
21 ["w","b"].map(c
=> Object
.values(this.reserve
[c
]).join("")).join("")
26 let res
= super.pieces(color
, x
, y
);
27 res
['s'] = {"class": "nv-pawn", moveas: "p"};
28 res
['u'] = {"class": "nv-rook", moveas: "r"};
29 res
['o'] = {"class": "nv-knight", moveas: "n"};
30 res
['c'] = {"class": "nv-bishop", moveas: "b"};
31 res
['t'] = {"class": "nv-queen", moveas: "q"};
35 static get V_PIECES() {
36 return ['p', 'r', 'n', 'b', 'q'];
38 static get NV_PIECES() {
39 return ['s', 'u', 'o', 'c', 't'];
42 setOtherVariables(fen
) {
43 super.setOtherVariables(fen
, V
.V_PIECES
.concat(V
.NV_PIECES
));
46 // Forbid non-violent pieces to capture
47 canTake([x1
, y1
], [x2
, y2
]) {
49 this.getColor(x1
, y1
) !== this.getColor(x2
, y2
) &&
50 (['k'].concat(V
.V_PIECES
)).includes(this.getPiece(x1
, y1
))
56 // No crazyhouse or recycle, so the last call didn't update reserve:
58 (move.vanish
.length
== 2 && move.appear
.length
== 1) ||
59 move.vanish
.length
== 0 //drop
62 (move.vanish
.length
> 0 ? move.vanish
[1].p : move.appear
[0].p
);
63 const normal
= V
.V_PIECES
.includes(trPiece
);
64 const pIdx
= (normal
? V
.V_PIECES : V
.NV_PIECES
).indexOf(trPiece
);
65 const resPiece
= (normal
? V
.NV_PIECES : V
.V_PIECES
)[pIdx
];
66 if (move.vanish
.length
> 0) {
67 super.updateReserve(C
.GetOppTurn(this.turn
), resPiece
,
68 this.reserve
[C
.GetOppTurn(this.turn
)][resPiece
] + 1);
71 super.updateReserve(this.turn
, resPiece
,
72 this.reserve
[this.turn
][resPiece
] - 1);