Change castle flags. Eightpieces still not OK, but almost
[vchess.git] / client / src / variants / Extinction.js
index 75db0e1..3fa5327 100644 (file)
@@ -1,6 +1,23 @@
 import { ChessRules } from "@/base_rules";
 
 export const VariantRules = class ExtinctionRules extends ChessRules {
+  static IsGoodPosition(position) {
+    if (!ChessRules.IsGoodPosition(position))
+      return false;
+    // Also check that each piece type is present
+    const rows = position.split("/");
+    let pieces = {};
+    for (let row of rows) {
+      for (let i = 0; i < row.length; i++) {
+        if (isNaN(parseInt(row[i])) && !pieces[row[i]])
+          pieces[row[i]] = true;
+      }
+    }
+    if (Object.keys(pieces).length != 12)
+      return false;
+    return true;
+  }
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
     const pos = V.ParseFen(fen).position;
@@ -68,16 +85,16 @@ export const VariantRules = class ExtinctionRules extends ChessRules {
     return true; //always at least one possible move
   }
 
-  underCheck() {
-    return false; //there is no check
+  filterValid(moves) {
+    return moves; //there is no check
   }
 
   getCheckSquares() {
     return [];
   }
 
-  updateVariables(move) {
-    super.updateVariables(move);
+  postPlay(move) {
+    super.postPlay(move);
     // Treat the promotion case: (not the capture part)
     if (move.appear[0].p != move.vanish[0].p) {
       this.material[move.appear[0].c][move.appear[0].p]++;
@@ -88,8 +105,8 @@ export const VariantRules = class ExtinctionRules extends ChessRules {
       this.material[move.vanish[1].c][move.vanish[1].p]--;
   }
 
-  unupdateVariables(move) {
-    super.unupdateVariables(move);
+  postUndo(move) {
+    super.postUndo(move);
     if (move.appear[0].p != move.vanish[0].p) {
       this.material[move.appear[0].c][move.appear[0].p]--;
       this.material[move.appear[0].c][V.PAWN]++;
@@ -100,7 +117,7 @@ export const VariantRules = class ExtinctionRules extends ChessRules {
 
   getCurrentScore() {
     if (this.atLeastOneMove()) {
-      // game not over?
+      // Game not over?
       const color = this.turn;
       if (
         Object.keys(this.material[color]).some(p => {