Fix multi-leg promotions
[xboard.git] / engine-intf.html
index 4f4af46..bc4815f 100644 (file)
@@ -1139,6 +1139,9 @@ The "lift" command is sent by the GUI when the user 'picks up' (or selects) a pi
 so that the engine can reply with a "highlight" command to mark the squares where that piece can move to.\r
 The "put" command similarly indicates where the user releases that piece;\r
 as the GUI clears the highlights on that event by itself, usually no engine response would be required.\r
+For promotion moves you can get a double "put" command, the first one sent when the piece lands on the square,\r
+without being decided yet what it promotes to, so the engine can send a "choice" command to\r
+specify the promotion choice the GUI should offer when promotion wasn't already implied by the "lift" location.\r
 The "hover" command is sent whenever the mouse pointer enters a square that is currently marked in red,\r
 (reserved for captures)\r
 so that the engine can (optionally) reply with a "highlight" command to mark victims of non-standard capture\r
@@ -1591,11 +1594,23 @@ The PIECETOCHAR element would ensure a Bishop would not be accepted as promotion
 </dd>\r
 \r
 <dt><span class="version48">piece ID PIECEDESC</span></dt>\r
-<dd><span class="version48">This command is already reserved for future protocol extension.\r
-The engine can send it in response to a variant command in order to specify that the piece\r
-indicated by its pieceToChar letter ID moves in a non-standard way in this variant.\r
-(This to enable the GUI to reliably perform made detection, and produce good SAN.)\r
-The format of PIECEDESC is subject to future specification.\r
+<dd><span class="version48">The engine can send one or more piece commands\r
+in response to a variant command, in order to specify that the piece\r
+indicated by ID moves in a non-standard way in this variant.\r
+(This to enable the GUI to reliably perform mate detection, and produce good SAN.)\r
+Like in FEN the ID is a case-sensitive letter, specifying the color.\r
+When it is a capital suffixed by &, the description is valid for both colors.\r
+PIECEDESC describes the moves in 'Betza notation',\r
+basically a concatenation of one-letter (upper-case) codes for all of its moves.\r
+These codes can be prefixed with lower-case 'modifiers' to indicate directional sub-sets\r
+(combinations of fblrvs, if the piece is not totally symmetric),\r
+move modality (non-capture, capture, e.p. capture; mce),\r
+and whether the move can jump directly to its destination,\r
+or can be blocked (n).\r
+Moves only valid for a virgin piece are prefixed by 'i'.\r
+An optional numeric suffix on the move indicates the maximum number of times\r
+the move can be repeated in the same direction,\r
+to indicate sliders / riders (with the convention 0 = infinite).\r
 </span>\r
 </dd>\r
 </p>\r
@@ -1853,6 +1868,16 @@ the corresponding lower-case character can be used for the color.
 For indicating a legal destination square without visibly marking it, T (transparent) can be used.\r
 </dd>\r
 \r
+<dt class="version48">choice PIECESTRING</dt>\r
+<dd class="version48">\r
+This command can be sent to the GUI in response to a 'lift' or 'put' command that implies a promotion move,\r
+to alter the choice offered to the user for the promotion piece from what the GUI would naturally assume,\r
+to the piece IDs mentioned in the PIECESTRING.\r
+The IDs in that string should be given as capitals irrespective of color.\r
+The first piece mentioned will be the default choice.\r
+</dd>\r
+</dl>\r
+\r
 <dt class="version48">click SQUARE</dt>\r
 <dd class="version48">\r
 The GUI will treat this command as if the user had clicked the mentioned SQUARE.\r