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;
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)
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"