Fix Dobutsu
[xogo.git] / variants / Dobutsu / class.js
CommitLineData
3232aba3
BA
1import ChessRules from "/base_rules.js";
2
3export default class DobutsuRules extends ChessRules {
4
5 static get Options() {
6 return {};
7 }
8
9 get hasFlags() {
10 return false;
11 }
12
13 get hasEnpassant() {
14 return false;
15 }
16
17 pieces(color, x, y) {
18 const pawnShift = this.getPawnShift(color || 'w');
19 // NOTE: classs change according to playerColor (orientation)
20 const mySide = (this.playerColor == color);
21 return {
c4d2eb5b 22 'p': {
3232aba3
BA
23 "class": (mySide ? "" : "rev-") + "chick",
24 both: [{steps: [[pawnShift, 0]], range: 1}]
25 },
26 'h': {
27 "class": (mySide ? "" : "rev-") + "hen",
28 both: [
29 {
30 steps: [
31 [pawnShift, 1], [pawnShift, -1],
32 [0, 1], [0, -1], [1, 0], [-1, 0]
33 ],
34 range: 1
35 }
36 ]
37 },
38 'e': {
39 "class": (mySide ? "" : "rev-") + "elephant",
40 both: [{steps: [[-1, 1], [-1, -1], [1, 1], [1, -1]], range: 1}]
41 },
42 'g': {
43 "class": (mySide ? "" : "rev-") + "giraffe",
44 both: [{steps: [[0, 1], [0, -1], [1, 0], [-1, 0]], range: 1}]
45 },
c4d2eb5b 46 'k': {
3232aba3
BA
47 "class": (mySide ? "" : "rev-") + "lion",
48 both: [{
49 steps: [[-1, 1], [-1, -1], [1, 1], [1, -1],
50 [0, 1], [0, -1], [1, 0], [-1, 0]],
51 range: 1
52 }]
53 }
54 };
55 }
56
3232aba3
BA
57 static get ReserveArray() {
58 return ['p', 'h', 'e', 'g'];
59 }
60
c4d2eb5b
BA
61 updateReserve(color, piece, count) {
62 if (piece != 'k')
63 super.updateReserve(color, piece, count);
64 }
65
3232aba3
BA
66 constructor(o) {
67 o.options = {crazyhouse: true, taking: true};
68 super(o);
69 }
70
71 get pawnPromotions() {
72 return ['h'];
73 }
74
75 genRandInitBaseFen() {
76 return {
c4d2eb5b 77 fen: "gke/1p1/1P1/EKG",
3232aba3
BA
78 o: {}
79 };
80 }
81
82 get size() {
c4d2eb5b 83 return {x: 4, y: 3};
3232aba3
BA
84 }
85
86 getCurrentScore(move_s) {
87 const res = super.getCurrentScore(move_s);
88 if (res != '*')
89 return res;
90 const oppCol = C.GetOppTurn(this.turn);
91 const oppLastRank = (oppCol == 'b' ? 3 : 0);
92 for (let j=0; j < this.size.y; j++) {
c4d2eb5b 93 if (this.board[oppLastRank][j] == oppCol + 'k')
3232aba3
BA
94 return (oppCol == 'w' ? "1-0" : "0-1");
95 }
96 return "*";
97 }
98
99};