Fix Checkered and Ultima rules. Write Chess960 rules and complete others
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 14 Dec 2018 15:52:36 +0000 (16:52 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 14 Dec 2018 15:52:36 +0000 (16:52 +0100)
public/javascripts/variants/Checkered.js
public/javascripts/variants/Ultima.js
views/rules/Alice.pug
views/rules/Checkered.pug
views/rules/Chess960.pug
views/rules/Extinction.pug
views/rules/Grand.pug
views/rules/Loser.pug
views/rules/Magnetic.pug
views/rules/Switching.pug
views/rules/Ultima.pug

index 019e1e2..814d91b 100644 (file)
@@ -76,10 +76,15 @@ class CheckeredRules extends ChessRules
                        return standardMoves; //king has to be treated differently (for castles)
                let moves = [];
                standardMoves.forEach(m => {
-                       if (m.vanish[0].p == VariantRules.PAWN && Math.abs(m.end.x-m.start.x)==2
-                               && !this.pawnFlags[this.turn][m.start.y])
+                       if (m.vanish[0].p == VariantRules.PAWN)
                        {
-                               return; //skip forbidden 2-squares jumps
+                               if (Math.abs(m.end.x-m.start.x)==2 && !this.pawnFlags[this.turn][m.start.y])
+                                       return; //skip forbidden 2-squares jumps
+                               if (this.board[m.end.x][m.end.y] == VariantRules.EMPTY
+                                       && m.vanish.length==2 && this.getColor(m.start.x,m.start.y) == 'c')
+                               {
+                                       return; //checkered pawns cannot take en-passant
+                               }
                        }
                        if (m.vanish.length == 1)
                                moves.push(m); //no capture
index ac0cf95..ab12c71 100644 (file)
@@ -67,14 +67,14 @@ class UltimaRules extends ChessRules
                                && this.getColor(i,j) == oppCol)
                        {
                                const oppPiece = this.getPiece(i,j);
-                               if (oppPiece == V.BISHOP && piece == V.IMMOBILIZER)
-                                       return true;
-                               if (oppPiece == V.IMMOBILIZER && ![V.BISHOP,V.IMMOBILIZER].includes(piece))
+                               if (oppPiece == V.IMMOBILIZER)
                                {
                                        // Moving is impossible only if this immobilizer is not neutralized
                                        for (let step2 of adjacentSteps)
                                        {
                                                const [i2,j2] = [i+step2[0],j+step2[1]];
+                                               if (i2 == x && j2 == y)
+                                                       continue; //skip initial piece!
                                                if (i2>=0 && i2<sizeX && j2>=0 && j2<sizeY
                                                        && this.board[i2][j2] != V.EMPTY && this.getColor(i2,j2) == color)
                                                {
@@ -84,6 +84,9 @@ class UltimaRules extends ChessRules
                                        }
                                        return true; //immobilizer isn't neutralized
                                }
+                               // Chameleons can't be immobilized twice, because there is only one immobilizer
+                               if (oppPiece == V.BISHOP && piece == V.IMMOBILIZER)
+                                       return true;
                        }
                }
                return false;
index 7c5fca4..dca1d47 100644 (file)
@@ -41,7 +41,14 @@ p
        | As in the orthodox game, win by checkmating the king. It shouldn't be able to
        | escape the check, not even by moving to the other board.
 
-p Note: en-passant and castle occur as they do in the standard game.
+p.
+       Note: en-passant and castle occur as they do in the standard game.
+       More specifically, en-passant is possible regardless of the worlds pawns are in.
+       This is justified because pawns "go through the mirror" while moving, and can
+       thus be captured either right after or just before they pass the mirror.
+       Castling should be legal according to orthodox rules on the board 1 (it cannot
+       occur on board 2, because it would mean king and rook moved). Moreover, the
+       king cannot be in check on board 2 after castling.
 
 h3 Credits
 
index 96e4475..ea9b941 100644 (file)
@@ -41,7 +41,7 @@ ol
 span Remarks:
 ul
        li A checkered move cannot be "undone" right after if this repeat the position.
-       li Checkered chess pieces cannot be captured.
+       li Checkered pieces cannot be captured.
 
 figure.diagram-container
        .diagram
@@ -53,8 +53,15 @@ figure.diagram-container
 h3 Pawn moves
 
 ul
-       li A pawn captured on its starting square keeps the right to advance two squares.
-       li Checkered pawns cannot capture en passant.
+       li.
+               Pawns can jump two squares only from their initial rank, and only once in the game:
+               a checkered pawn returning on the pawns' start rank cannot jump. However:
+       li.
+               A pawn captured on its starting square (thus becoming "checkered") keeps the
+               right to advance two squares.
+       li.
+               Checkered pawns cannot capture en passant, because while the pawn was "passing"
+               they were of the same color.
 
 h2.stageDelimiter Stage 2
 
index 8f70e45..a5c6e65 100644 (file)
@@ -1,3 +1,178 @@
 p.boxed
-       | Orthodox rules (still with shuffled starting position). See for example the 
-       a(href="https://en.wikipedia.org/wiki/Rules_of_chess") Wikipedia page.
+       | Orthodox rules (with shuffled starting position).
+
+h3 Basics
+
+p.
+       Chess is played between two players, one moving the white pieces and the other
+       the black pieces. A "move" consists of a piece's movement on the board.
+       White and black moves alternate until a specific situation occurs (checkmate,
+       stalemate, or draw criteria met; this is detailed later).
+       White pieces always make the first move.
+
+p.
+       Each piece has a particular way to move, but almost always captures by moving to an
+       occupied square (with only one exception, detailed later).
+
+figure.diagram-container
+       .diagram
+               | fen:rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR:
+       figcaption Standard initial position.
+
+p.
+       Board coordinates: squares are always identified by a couple (letter, number).
+       The letter starts from 'a' and indicates the column, while the number starts
+       at '1' and indicates the row.
+       Since the chessboard is 64 squares, 8x8, this results in a coordinates system
+       from a1 to h8. 'a1' is the bottom left corner square from the white pieces
+       player perspective, while 'h8' is in the upper right corner.
+
+h3 Regular moves
+
+h4 Pawns
+
+p.
+       They are the weakest pieces on board, but the most complex to move.
+       From their initial rank they can either jump two squares forward (vertically),
+       or advance only one square in this same direction. After that first move they
+       only advance one square at a time, vertically, moving up.
+
+p.
+       Pawns capture by moving forward (upper on the board) one square diagonally,
+       when an enemy piece sits on that square.
+
+p.
+       When reaching the last rank, pawns must promote into any (friendly)
+       other non-royal piece: queen, rook, knight or bishop.
+
+p.
+       Moves notations: "pawn" is implicit, so for a simple move we only write the
+       destination square (because only one pawn at most can move forward to a specific
+       square). Thus, 1.e4 means "pawn from e2 to e4". However, in case of captures
+       the situation could be ambiguous (two pawns on the same rank), so the column
+       is specified too: "fxe6" (for example).
+       As you can see capture is marked by a cross symbol: "x".
+
+figure.diagram-container
+       .diagram
+               | fen:k7/8/8/1prp4/1P1P4/8/6P1/7K:
+       figcaption Possible pawn moves: g3, g4, dxc5, bxc5
+
+p
+       | For a piece movement, we just prepend the upper-case piece initial before the
+       | previously described notation. A rook taking something on f3 square writes:
+       | Rxf3. There are rules for ambiguous situation, but discussing them now would
+       | be too far off-topic. Please visit for example the 
+       a(href="https://en.wikipedia.org/wiki/Algebraic_notation_(chess)")
+               | Wikipedia page 
+       | for full information on this subject.
+
+h4 Rooks
+
+p.
+       They move either horizontally or vertically, as far as they want while the path
+       is free of pieces. If this path ends with an enemy piece, it can a priori be captured
+       (a priori because if the move ends up with the king in check, then it's illegal).
+
+h4 Knights
+
+p.
+       They are the only units able to jump over other pieces (without capturing them).
+       They do "L" moves: two squares in one direction (horizontally or vertically),
+       and then one square in an orthogonal direction.
+
+figure.diagram-container
+       .diagram
+               | fen:k7/2p5/5q2/2b5/4N3/2R3r1/3P4/7K w f6,d6,c5,f2,g3,g5:
+       figcaption Possible knight moves from e4.
+
+h4 Bishops
+
+p.
+       They move diagonally, as far as they want while the path is free of pieces.
+       If this path ends with an enemy piece, it can a priori be captured.
+
+h4 Queen
+
+p This piece combines the movement of a rook and a bishop, with the same conditions.
+
+h4 King
+
+p.
+       This piece moves like a queen, but only by one square at a time. The final square
+       must be either vacant or occupied by an enemy piece (therefore captured).
+
+p.
+       The king cannot be captured, but a move may ends up attacking enemy's king.
+       It is said to be "under check" (or "in check") and the opponent must either:
+ul
+       li move the king to a safe square, or
+       li capture the attacker, or
+       li intercept the attacking line.
+p Depending on the situation one or more of these counter-measures could be impossible.
+
+p Leaving our king in check after a move is forbidden.
+
+TODO: diagram let king in check capturing queen, bishop pinned
+figure.diagram-container
+       .diagram
+               | fen:r6k/4q3/8/8/8/B7/8/K7:
+       figcaption Bxe7 is illegal (it allows Rxa1).
+
+h3 Special moves
+
+p Apart from pawn promotion which has already been introduced, two special moves exist:
+ul
+       li.
+               castle: if both the king and the right-most (from white player perspective) rook
+               haven't moved yet, and if nothing stand in the path from king to rook, and if the
+               squares f1 and g1 are either free or occupied by the king or rook implied, then
+               the king can go to g1 while the rook moves to f1. Note that since positions are
+               shuffled one of these two pieces may apparently not move.
+               The same can be done on the other side (left-most rook), and end squares are c1
+               for king and d1 for rook. The former is small castle, and the latter large castle.
+               Notation: small castle writes "0-0" while large castle is "0-0-0".
+       li.
+               en-passant: after a pawn has jumped two squares, if an enemy pawn stands just next
+               to it then it can capture the jumping pawn "en passant", exactly as if it had
+               advanced only one square. The move is noted as usual, but with "e.p." in the end
+               to indicate the special move.
+               The capture is possible only right after the pawn jump: not later in the game.
+
+figure.diagram-container
+       .diagram
+               | fen:nr1kb1r1/ppp3pp/8/2Pp4/8/7P/PP3PP1/1R3KBR:
+       figcaption Black just played d5 (jump from d7).
+
+figure.diagram-container
+       .diagram
+               | fen:nr1kb1r1/ppp3pp/3P4/8/8/7P/PP3PP1/2KR2BR:
+       figcaption After cxd6 e.p. and 0-0-0.
+
+h3 End of the game
+
+p.
+       The best-known way to end a game is by "checkmating" the enemy king.
+       This means that you end a move in a situation where the king can be captured,
+       and your opponent has no way to avoid the capture.
+       The checkmating player has one point and the other zero, so the score writes 1-0
+       or 0-1 depending if white pieces or black pieces mated.
+
+figure.diagram-container
+       .diagram
+               | fen:rnbqkbnr/ppp2Qpp/2np4/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR:
+       figcaption Famous mating pattern: 1-0
+
+p All other ways to end the game lead to a draw (1/2-1/2): nobody wins:
+ul
+       li when a player has no legal move but is not under check,
+       li.
+               when a position is repeated three times with the same castling right and
+               same player in turn,
+       li when 50 moves are played without pawn movement or capture.
+p.
+       Note: this last way to end a game is not implemented, because it quite seldom occurs,
+       does not generalize so well to variants (it depends), and more important because
+       games played on this website are not official tournament games. If you feel like
+       manoeuvring for 200 moves and your opponent isn't bored, then why would I stop you?
+       &#9786;
index 5672586..3133cc9 100644 (file)
@@ -27,6 +27,11 @@ p.
        Win by eliminating all enemy pawns, or rooks, or knights, or bishops, or queen(s),
        or king(s) (there may be several if promotions happened).
 
+figure.diagram-container
+       .diagram
+               | fen:n3brk1/5ppp/3q4/8/8/8/1Q3PPP/K1R1B1N1:
+       figcaption White can win in 2 moves: 1.Qb7, 2.QxN
+
 h3 Credits
 
 p
index acafca8..4d61431 100644 (file)
@@ -35,7 +35,9 @@ p.
        promote into a friendly piece captured (which is back on the board). If none is
        available, the promotion on last rank is impossible and the pawn cannot move.
 
-p Pawn promotion is possible (but not forced) on the two ranks before last.
+p.
+       Pawn promotion is possible (but not forced) on the two ranks before last,
+       only in an already captured (friendly) piece.
 
 h3 End of the game
 
index 3b6b1b6..584af48 100644 (file)
@@ -18,6 +18,8 @@ p.
        The king has no royal status: it can be taken as any other piece.
        Thus, there is no castle rule, no checks.
 
+p Captures are mandatory, but when several capturing moves are possible you can choose.
+
 figure.diagram-container
        .diagram
                | fen:6nB/6P1/8/4p3/2p1P3/2P5/8/8:
@@ -31,7 +33,9 @@ p.
 
 h3 End of the game
 
-p You can win by losing all material or be stalemated.
+p.
+       Win by losing all material or be stalemated (for example with only blocked pawns
+       remaining on board).
 
 h3 Credits
 
index 7a0ac2e..baad36f 100644 (file)
@@ -29,6 +29,11 @@ figure.diagram-container
                | fen:3b4/8/3K4/qR1Qr1P1/3b4/8/8/8:
        figcaption After white move Qd5
 
+p.
+       Remember that since kings have a neutral charge, any of their movement does not
+       change anything on the board. They also block magnetic actions which go in
+       their direction.
+
 h3 End of the game
 
 p Win by capturing opponent's king. There is no notion of check or stalemate here.
index 4d1dcd5..ce2fdbc 100644 (file)
@@ -21,6 +21,11 @@ p
        | Switching must involves two different units.
        | Switching while the king is under check is not allowed.
 
+figure.diagram-container
+       .diagram
+               | fen:1RB3k1/5ppp/8/8/8/8/8/K7:
+       figcaption White can mate in 1 by switching b8-c8
+
 p.
        Note: if the king and rook are on two adjacent squares, castling and switching
        from the king are triggered in the same way. Castling takes priority:
index a2f55f3..b385627 100644 (file)
@@ -39,19 +39,17 @@ p
        | one square in any direction.
        | All other pieces move like an orthodox queen.
 
-p When a piece is adjacent to an enemy immobilizer, it cannot move unless
-ul
-       li it is an immobilizer or a chameleon; or
-       li.
-               the enemy immobilizer is adjacent to a friendly immobilizer or chameleon
-               (cancelling the powers of the opponent's immobilizer)
+p.
+       When a piece is adjacent to an enemy immobilizer, it cannot move unless
+       the enemy immobilizer is adjacent to a friendly immobilizer or chameleon
+       (cancelling the powers of the opponent's immobilizer).
 p
        | Note : this corresponds to the "pure rules" described on 
        a(href="http://www.inference.org.uk/mackay/ultima/ultima.html") this page
        | , which slightly differ from the initial rules.
-       | The aim is to get rid of the weird suicide rule, weakening the immobilizers lock
-       | (in particular, in the original rules two adjacent immobilizer are stuck forever
-       | until one is captured).
+       | The aim is to get rid of the weird suicide rule by weakening the immobilizers lock.
+       | In particular, in the original rules two adjacent immobilizer are stuck forever
+       | until one is captured. Note that it's still the case if all chameleons disappeared.
 
 h3 Capturing moves