Add Orda variant. Some advances in Dynamo draft. Display error message when loading...
[vchess.git] / client / src / base_rules.js
index e142839..177fc9b 100644 (file)
@@ -197,8 +197,8 @@ export const ChessRules = class ChessRules {
   }
 
   // Path to promotion pieces (usually the same)
-  getPPpath(b) {
-    return this.getPpath(b);
+  getPPpath(m) {
+    return this.getPpath(m.appear[0].c + m.appear[0].p);
   }
 
   // Aggregates flags into one object
@@ -224,9 +224,11 @@ export const ChessRules = class ChessRules {
     const s = move.start,
           e = move.end;
     if (
-      Math.abs(s.x - e.x) == 2 &&
       s.y == e.y &&
-      (move.appear.length > 0 && move.appear[0].p == V.PAWN)
+      Math.abs(s.x - e.x) == 2 &&
+      // Next conditions for variants like Atomic or Rifle, Recycle...
+      (move.appear.length > 0 && move.appear[0].p == V.PAWN) &&
+      (move.vanish.length > 0 && move.vanish[0].p == V.PAWN)
     ) {
       return {
         x: (s.x + e.x) / 2,
@@ -941,6 +943,7 @@ export const ChessRules = class ChessRules {
   }
 
   // Stop at the first move found
+  // TODO: not really, it explores all moves from a square but one would suffice.
   atLeastOneMove() {
     const color = this.turn;
     for (let i = 0; i < V.size.x; i++) {
@@ -1091,7 +1094,7 @@ export const ChessRules = class ChessRules {
     const c = V.GetOppCol(this.turn);
     const firstRank = (c == "w" ? V.size.x - 1 : 0);
     // Update castling flags if rooks are moved
-    const oppCol = V.GetOppCol(c);
+    const oppCol = this.turn;
     const oppFirstRank = V.size.x - 1 - firstRank;
     if (piece == V.KING && move.appear.length > 0)
       this.castleFlags[c] = [V.size.y, V.size.y];