Fix rep-draw detection The FENs describing te game positions do not contain a side-to-move field. So we sould take care to only compare te current position(s) with those in the game history that have the same side to move.
Implement test for perpetual checking
Implement Spartan Chess This required new pieces, their parsing in algebraic moves and promotions, a lot of promotion code because Hoplites can promote, implementation of the duple-check rule by letting in_check recursively call itself after abdicating the first king, making the test for nr of kings less critical, and choosing a promotion piece in the mate test (because promotion to K could solve the mate).
Seirawan gatings on castling Castlings can now have promo suffix in any move format. RxK is understood as castling, and in combination with promosuffix will cause gating at the Rook square. For now it is printed as h1e1=h in SAN.
Debug Seirawan Chess
Implement S-Chess The value drops=2 in the gameState controls whether gating in pieces from the holdings is possible, and implies holdings even if holdings=0. New incarations of Cardinal and Marshall are added to the piece types, under the names H and E. Gating has to be entered as promotion ('/' in stead of '=' is allowed). King does no longer have to be the last piece type; a macro PIECES has been added to indicate the number of piece types.
Fix use of promoChar G,D,H in long-algebraic Shogi moves D and H were not recognized at all, and G was MASTODON. Now D&H are added, and MASTODON is redefined in parse_move as GOLD when promoType==3. SAN moves do their own interpretation of the promo suffix, which was already OK.
Fix rep-draw detection The comparison with previous positions started one half-move too late, so that a third repetition was not recognized if the first occurrence was created by an irreversible move.
Fix Shogi Knight-demotion bug
Finish implementation of Shogi Shogi promotions were implemented by introducing a new promoType value (3), which can be set y 'S' in the board status line. Demotion of pieces takes place on capture, by tracing them back with was_promoted() to their original, which now is not automatically Pawn, but derived from the piece mentioned in the move string. Like in Bughouse a promoted Queen is not distinguished from a primordial one on the board, Golds which are promoted Pawns / Lances / Knights / Silvers all look the same as a primordial Gold. The Dragon Horse and Draon King look different from Bishop and Rook, though, and are indicated by the letters I and J on the board. The promotion is indicated in the SAN move by suffix =G, =I or =J. Deferral is not indicated. On input == is understood as deferral, =+ or =^ (or in fact =<ANY PIECE> as promotion).
Check-in modifications made by HGM so far This is the version of the variant ICS that first started running permanently on my ADSL connection.
Check-in Lasker-2.2.3 tar ball from samba.org