Fix promotion on entry
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 11 Jun 2014 20:52:18 +0000 (22:52 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 11 Jun 2014 20:52:18 +0000 (22:52 +0200)
The promote on entry option would also allow promotion when pieces
in their own promotion zone entered the zone of the opponent!

hachu.c

diff --git a/hachu.c b/hachu.c
index 11e1222..4416567 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -1057,8 +1057,8 @@ NewNonCapture (int x, int y, int promoFlags)
 {\r
   if(board[y] != EMPTY) return 1; // edge, capture or own piece\r
 //if(flag) printf("# add %c%d%c%d, pf=%d\n", x%BW+'a',x/BW,y%BW+'a',y/BW, promoFlags);\r
-  if( (promoBoard[x] | promoBoard[y]) & promoFlags &&\r
-      (!entryProm || promoBoard[y] & ~promoBoard[x] & CAN_PROMOTE )){ // piece can promote with this move\r
+  if( (entryProm ? promoBoard[y] & ~promoBoard[x] & CAN_PROMOTE\r
+                 : promoBoard[y] |  promoBoard[x]       ) & promoFlags ){ // piece can promote with this move\r
     moveStack[msp++] = moveStack[nonCapts];           // create space for promotion\r
     moveStack[nonCapts++] = x<<SQLEN | y | PROMOTE;   // push promotion\r
     if((promoFlags & promoBoard[y] & (CANT_DEFER | DONT_DEFER | LAST_RANK)) == 0) { // deferral could be a better alternative\r