Fix legality of promotion to King
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 10 Jan 2011 16:56:04 +0000 (17:56 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 10 Jan 2011 16:56:04 +0000 (17:56 +0100)
The count for a piece type was not increased on promotion, with a result
that in variants with an extinction win condition phantom mates and
illegal moves (when in check) were called. The count is now increased at
game level when under-promotion to an extinction piece takes place.
This is done even befor the move is performed by the legality search,
because that search would only search promotion to 'Queen', so that
a promotion would not be considered legal if it leaves the last-remaining
'King'  in check. While such a promotion is a valid way to resolve the
extinction threat.
This leaves a minor problem in Spartan Chess: the King from the
promotion could also be in check, leading to a forbidden duple check,
and this is not detected. So an illegal move could be accepted here.
(Promotion to 'King'  in other variants is accepted as well, btw.)

fairymax.c

index 70eac81..30396a2 100644 (file)
@@ -866,6 +866,7 @@ int main(int argc, char **argv)
                 else { int i=-1;\r
                     if(b[L] && (b[L]&16) == Side && w[b[L]&15] < 0) // capture own King: castling\r
                     { i=K; K = L; L = i>L ? i-1 : i+2; }\r
+                   if(w[GT&15] < -1) pl[GT&31]++, J+=89729; // promotion to royal piece\r
                     if(b[K]&32) GT = 0; // non-virgin mover => true promotion rather than gating\r
                     if(D(Side,-I,I,Q,O,LL|S,3)!=I) {\r
                         /* did have move syntax, but illegal move */\r