Fix setting up of positions without King
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 2 Jun 2014 17:49:41 +0000 (19:49 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 2 Jun 2014 17:49:41 +0000 (19:49 +0200)
Without King, royal[] would not be set, and retain the value it had
in the standard setup (as it was not cleared either). This would usually
point outside the piece list, but occasionally it designated an on-board
piece as royal, which then could make HaChu think it was checkmated in
the initial position of a tsume problem. It also caused problems
in positions with only CP.

hachu.c

diff --git a/hachu.c b/hachu.c
index a8828c5..9b98aa7 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -820,6 +820,7 @@ SetUp(char *array, int var)
   char c, *q, name[3], prince = 0;\r
   PieceDesc *p1, *p2;\r
   last[WHITE] = 1; last[BLACK] = 0;\r
+  royal[WHITE] = royal[BLACK] = 0;\r
   for(i=0; ; i++) {\r
 //printf("next rank: %s\n", array);\r
     for(j = BW*i; ; j++) {\r
@@ -860,6 +861,9 @@ SetUp(char *array, int var)
     }\r
   }\r
  eos:\r
+  // add dummy Kings if not yet added (needed to set royal[] to valid value!)\r
+  if(!royal[WHITE]) p[AddPiece(WHITE, LookUp("K", V_CHU))].pos = ABSENT;\r
+  if(!royal[BLACK]) p[AddPiece(BLACK, LookUp("K", V_CHU))].pos = ABSENT;\r
   // add dummy Crown Princes if not yet added\r
   if(!(prince & WHITE+1)) p[AddPiece(WHITE, LookUp("CP", V_CHU))].pos = ABSENT;\r
   if(!(prince & BLACK+1)) p[AddPiece(BLACK, LookUp("CP", V_CHU))].pos = ABSENT;\r