From a09becbf0c11675f76cd21b9d4b3ef477443f076 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Sun, 17 Aug 2025 18:59:35 +0200 Subject: [PATCH] Validate drops of pseudo-royals (#903) Closes #867. --- src/position.cpp | 3 +++ test.py | 9 +++++++++ 2 files changed, 12 insertions(+), 0 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index 2488a71..3615275 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -1146,6 +1146,9 @@ bool Position::legal(Move m) const { if (capture(m) && (var->petrifyOnCaptureTypes & type_of(moved_piece(m))) && (st->pseudoRoyals & from)) return false; Bitboard pseudoRoyals = st->pseudoRoyals & pieces(sideToMove); + // Add dropped pseudo-royal + if (type_of(m) == DROP && (extinction_piece_types() & type_of(moved_piece(m)))) + pseudoRoyals |= square_bb(to); Bitboard pseudoRoyalsTheirs = st->pseudoRoyals & pieces(~sideToMove); if (is_ok(from) && (pseudoRoyals & from)) pseudoRoyals ^= square_bb(from) ^ kto; diff --git a/test.py b/test.py index 72d61b9..0ef43f1 100644 --- a/test.py +++ b/test.py @@ -120,6 +120,10 @@ commoner = k castlingKingPiece = k extinctionValue = loss extinctionPieceTypes = k + +[coregaldrop:coregal] +pieceDrops = true +startFen = rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[Qq] w KQkq - 0 1 """ sf.load_variant_config(ini_text) @@ -346,6 +350,11 @@ class TestPyffish(unittest.TestCase): result = sf.legal_moves("seirawan", fen, []) self.assertIn("c8g4h", result) + # Drop pseudo-royals into check + result = sf.legal_moves("coregaldrop", sf.start_fen("coregaldrop"), []) + self.assertIn("Q@a3", result) + self.assertNotIn("Q@a6", result) + # In Cannon Shogi the FGC and FSC can also move one square diagonally and, besides, # move or capture two squares diagonally, by leaping an adjacent piece. fen = "lnsg1gsnl/1rc1kuab1/p1+A1p1p1p/3P5/6i2/6P2/P1P1P3P/1B1U1ICR1/LNSGKGSNL[] w - - 1 3" -- 1.7.0.4