Page 14 of 17

Re: Engines playing Musketeer Chess, good price

Posted: Mon Mar 30, 2020 5:55 pm
by musketeerchess
Hi
Thanks for your nice message.
one of the ideas behind Musketeer Chess is to help get rid of openings adding new elements (flexible as the combination can change and it's possible to add different pieces also apart from those cited in the website).
It's also played on an 8x8 board, so it's a classic chess board we are used to. We are then confortable with the relative value of the classic pieces and our efforts will be toward using the new pieces and try to outsmart our opponent.

In bigger or modified boards, the relative value of all the pieces is modified. If you add fairy pieces, it's really a burden on the board.
I play regularly chess variants on bigger boards and i like them (especially Grand Chess and Shako). But i more like variants like Musketeer Chess or Seirawan Chess for the reasons i cited above.

Please Don't hesitate to mail me to musketeerchess (a) gmail .com
Zied

Re: Engines playing Musketeer Chess, good price

Posted: Mon Mar 30, 2020 7:16 pm
by mvanthoor
Years ago I was looking into other games besides chess. I also tried Arimaa for a time, but ended up not liking it. Too positional, not enough tactics. I love tactical positions with sacrifices that make the position explode and end the game with a bang. Arimaa doesn't give you a lot of tools to make those positions happen; Musketeer Chess does, with pieces such as the unicorn and the Hawk.

Re: Engines playing Musketeer Chess, good price

Posted: Mon Mar 30, 2020 11:57 pm
by musketeerchess
mvanthoor wrote: Mon Mar 30, 2020 7:16 pm Years ago I was looking into other games besides chess. I also tried Arimaa for a time, but ended up not liking it. Too positional, not enough tactics. I love tactical positions with sacrifices that make the position explode and end the game with a bang. Arimaa doesn't give you a lot of tools to make those positions happen; Musketeer Chess does, with pieces such as the unicorn and the Hawk.
Hawk and Unicorn are among my best 3 pieces (the other one is the Archbishop, i like sacrificing my queen for an archbishop even there is no clear compensation, but ot creates so much tactical opprtunities, and the Queen without the Knight compound is many positions isn't able to defend well (or attack as efficiently as the Archbishop does).

Re: Engines playing Musketeer Chess, good price

Posted: Thu Apr 02, 2020 12:14 am
by gbtami
You can see some nice tactics in my latest losing S-Chess game https://www.pychess.org/VrQEOa23 :wink:

Re: Engines playing Musketeer Chess, good price

Posted: Thu Apr 02, 2020 9:32 pm
by JohnWoe
My Musketeer chess engine: https://github.com/SamuraiDangyo/Capitaine
Binaries for Windows: https://github.com/SamuraiDangyo/Capita ... /tag/v0.42

Works fine for me.
The whole Musketeer chess engine in 1 simple file. :D

Re: Engines playing Musketeer Chess, good price

Posted: Fri Apr 03, 2020 11:05 am
by hgm
A short update on WinBoard / CECP support for Musketeer Chess:

Bug Fixes

The WinBoard-AA package now contains a WinBoard version (4.9.2020.402) that fixes some problems with loading games or FENs in engine-defined variants. It should now be possible to save and re-load PGN files with Musketeer Chess games without any problems. Castling in saved PGN should now be written as the normal SAN O-O or O-O-O, rather than as a King move like Kg1. It should also be possible to run matches and tournaments from FENs supplied in a position file, even if the different start positions use different Musketeer pieces.

Recording the prelude in PGN

A new feature is that I introduced a Prelude tag in PGN. This tag can be added on engine's request: when an engine at the start of a game (i.e. before the first move on the board) sends

tellothers prelude <any text>

the PGN for that game will include the tag

[Prelude "<any text>"]

WinBoard already had an option -autoComment true|false that would make it store texts sent by the engine through tellothers commands as comments on the current move, but the presence of the word 'prelude' in such a command at the start of the game will overrule this, and promote the text to a PGN tag even when the -autoComment option is switched off.

The purpose of this feature is that engines who have conducted a dialog with the user to negociate a start position, by selecting piece types and gating squares, can have the history of this prelude be recorded in the PGN. For Musketeer Chess only the order of the piece-type choices has to be recorded; together with the FEN of the position after the prelude (which is always included in engine-defined variants) the order in which the various gating squares were chosen follows from this.

KingSlayer-Aramis (also included in the WinBoard-AA package) now uses this to add a Prelude tag with value

white: <ID1>, black: <ID2>

whith the single-letter IDs of the Musketeer pieces that are also used to describe them in the FEN tag. WinBoard doesn't ever interpret such a tag, so the format of the text is not critical. But in the future other GUIs might want to interpret it, so I think it would be a good thing to agree on some standard for the description of a Musketeer prelude, which all engines that are able to conduct a prelude dialog then should use. When the engine did not conduct a prelude dialog (e.g. because it was started from a FEN of a position after the prelude), the Prelude tag should be omitted (i.e. the engine would not have to send a 'tellothers' command).

Conducting a prelude from the engine

The code KingSlayer-Aramis currently uses for conducting the prelude (and which I hereby place in the public domain) is:

Code: Select all

void MusketeerInit (int color, int type1, int type2, int file1, int file2);

char *whitePieces = "ACDEF00/0HLMSU";
char *blackPieces = "acdef00/0hlmsu";
char *ptc = "PNBRQ.E....C.AF.MH.SU........D............LKpnbrq.e....c.af.mh.su........d............lk";
int prelude[6], preptr, lastPrinted = -1, computer;

int
Prelude ()
{
  char buf1[80], buf2[80], buf3[12050], w, b; int i;
  static didPrelude;

  if(preptr < 6 && engineSide == (preptr & 1 ? BLACK : WHITE)) { // engine's turn to pick something
    do {
      prelude[preptr] = (preptr < 2 ? 10 : 8) * (rand() & 0xFFF) >> 12; // pick it
    } while(preptr == 1 ? prelude[0] == prelude[1]                      // retry if same piece
                        : prelude[preptr] == 4 ||                       // or gating under King
                          preptr == 5 && prelude[5] == prelude[3]);     // or on same square
    preptr++;
  } else if(preptr == lastPrinted) return (preptr < 6);
  // now it is always the user's turn to pick something (or move)
  w = whitePieces[prelude[0] + 4*(prelude[0] > 4)];
  b = blackPieces[prelude[1] + 4*(prelude[1] > 4)];
  switch(preptr) {
    case 0: // present all white pieces
      strcpy(buf1, whitePieces);
      printf("setup (%s) 8x10+0_!seirawan 8/8/8/8/0%s00/8/8/8/8 w - - 0 1\n", ptc, buf1);
      printf("piece K& KisO2\n");
      didPrelude = 0;
      break;
    case 1: // present all black pieces except the white choice
      strcpy(buf1, blackPieces);
      buf1[prelude[0] + 4*(prelude[0] > 4)] = w;
      printf("setup (%s) 8x10+0_!seirawan 8/8/8/8/0%s00/8/8/8/8 w - - 0 1\n", ptc, buf1);
      didPrelude = 1;
      break;
    case 2: // white choice fills 1st rank, black choice fills 8th
      for(i=0; i<8; i++) buf1[i] = w, buf2[i] = b; buf1[8] = buf2[8] = 0;
      printf("setup (%s) 8x10+0_!seirawan %s/rnbqkbnr/pppppppp/8/8/8/8/pppppppp/rnbqkbnr/%s w - - 0 1\n", ptc, buf2, buf1);
      didPrelude = 1;
      break;
    case 3: // white choice on its gating square, black choice fills 8th rank
      for(i=0; i<8; i++) buf1[i] = '0', buf2[i] = w + 32; buf1[8] = buf2[8] = 0;
      buf1[prelude[2]] = w;
      printf("setup (%s) 8x10+0_!seirawan %s/RNBQKBNR/PPPPPPPP/8/8/8/8/PPPPPPPP/RNBQKBNR/%s w - - 0 1\n", ptc, buf2, buf1);
      break;
    case 4: // whitened black choice on remaining 5-7 1st-rank squares, blackened white choice on its gating square
      for(i=0; i<8; i++) buf1[i] = b - 32, buf2[i] = '0'; buf1[8] = buf2[8] = 0;
      buf2[prelude[3]] = w + 32; buf1[prelude[2]] = w + 32;
      if(prelude[2] == 4) buf1[0] = buf1[7] = '0'; if(prelude[2] == 0 || prelude[2] == 7) buf1[4] = '0'; // no K & R
      printf("setup (%s) 8x10+0_!seirawan %s/rnbqkbnr/pppppppp/8/8/8/8/pppppppp/rnbqkbnr/%s w - - 0 1\n", ptc, buf2, buf1);
      break;
    case 5: // both whitened pieces on their gating squares, blackened white choice on 7, 6 or 5 remaining 8th-rank squares
      for(i=0; i<8; i++) buf1[i] = '0', buf2[i] = b; buf1[8] = buf2[8] = 0;
      buf2[prelude[3]] = w; buf1[prelude[2]] = w; buf1[prelude[4]] = b - 32;
      if(prelude[3] == 4) buf2[0] = buf2[7] = '0'; if(prelude[3] == 0 || prelude[3] == 7) buf2[4] = '0'; // no K & R
      printf("setup (%s) 8x10+0_!seirawan %s/RNBQKBNR/PPPPPPPP/8/8/8/8/PPPPPPPP/RNBQKBNR/%s w - - 0 1\n", ptc, buf2, buf1);
      break;
    case 6:
      strcpy(buf3, ptc);
      for(i=5; i<43; i++) if(ptc[i] != w && ptc[i] != b - 32) buf3[i] = buf3[i+44] = '.';
      for(i=0; i<8; i++) buf1[i] = '*', buf2[i] = '*'; buf1[8] = buf2[8] = 0;
      buf2[prelude[3]] = w + 32; buf2[prelude[5]] = b; buf1[prelude[2]] = w; buf1[prelude[4]] = b - 32;
      printf("setup (%s) 8x10+0_seirawan %s/rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR/%s w KQBCDFGkqbcdfg - 0 1\n", buf3, buf2, buf1);
      printf("piece K& KisO2\n"); // to make castling work despite extra ranks
      stepPtr = 31; nBound = 0; discoMask[WHITE] = discoMask[BLACK] = 0;
      MusketeerInit(WHITE, prelude[0], prelude[1], prelude[2], prelude[4]); // This sends CECP 'piece' command for 1st piece
      MusketeerInit(BLACK, prelude[1], prelude[0], prelude[5], prelude[3]); // KLUDGE: swap piece order
      if(didPrelude) printf("tellothers prelude white: %c, black: %c\n", typeID[4+prelude[0]], typeID[4+prelude[1]]); // for in the PGN
  }
  lastPrinted = preptr;
  return (preptr < 6);
}
(Warning to GUI developers: this code can generates FENs that can contain '0' (zero), which WinBoard interprets as 'a single empty square', but unlike '1', which also means that, will not coalesce with any following digits. So "00" means two empty squares, while "11" would have meant eleven empty squares. This convention was adopted to make it easier for engines to clear squares in a FEN.) The Prelude() code is used by prefixing the test that would normally decide whether the engine should start thinking by

Code: Select all

    if(!musketeer || !Prelude())
(where 'musketeer' indicates we are playing Musketeer Chess). This suppresses any thinking about board moves until the prelude has been completed. Note the presented code makes the engine's own choices at random; other engines could of course have special routines to determine the best choices, or take those from an internal 'book'.

The dialog is conducted by presenting the user with boards (through non-final 'setup' commands) on which he can indicate his choices by clicking on a piece of his color. To become aware of these clicks the engine should have sent feature highlight=1 at startup, and interpret the 'lift' commands that WinBoard will then use to relay the clicks, through the code

Code: Select all

    if(!strcmp(command, "lift"))    { // interpret "lift <SQUARE>"
      int f = inBuf[5] - 'a', r = inBuf[6] - '1'; // file and rank of clciked square
      if(r == 3) f += 4; else if(r == 4) f--; // piece-type selection, translate square to type
      if(variant && preptr < 6) prelude[preptr++] = f; // record prelude history
      return 1;
    }
Set-up positions

On receiving a 'setboard' command for setting up a position the prelude (which always will have commenced automatically at the start of a new game by presenting the first 'menu board' for the white player, which also informs the GUI about how to represent the complete set of Musketeer pieces) must be aborted. But the last step of it, which includes the initialization of the engine for the participating pieces, and the sending of the final 'setup' command to the GUI, will always have to be done. This is achieved by setting preptr to 6, after the FEN reader deduced from the FEN what the prelude history could have been (filling the array prelude[] with the codes for the piece types and file number of the gating squares as it encounters them on rank 0 and 9):

Code: Select all

    if(!strcmp(command, "setboard")){ engineSide = NONE;  stm = Setup(inBuf+9); preptr = 6; return 1; }
On receiving a 'new' command preptr should be reset to 0, and lastPrinted to -1, so that the new game will again start with a prelude.

Re: Engines playing Musketeer Chess, good price

Posted: Sun Apr 05, 2020 9:53 pm
by JohnWoe
^ The UCI prelude was a bit clumsy.

My Capitaine 0.44
Here is a sample game in UCI format:
Doesn't crash anymore.
Is there a GUI that reads Musketeer Chess UCI games ?

Code: Select all

   abcdefgh
 9 ........ 9
 8 ...k.... 8 turn:   w
 7 ........ 7 rule50: 0
 6 ........ 6 ep:     -
 5 ........ 5 castle: -
 4 ........ 4 move:   c7d8 
 3 ..K..... 3 gated1: D
 2 ........ 2 gated2: S
 1 ........ 1
 0 ........ 0
   abcdefgh
D S D@g0 D@g9 S@d0 S@b9 g1f3 b8a6 c2c4 g8f6 d2d4 b8b6 d1b3 e7e6 c4c5 b6b8 e2e3 c7c6 b1c3 d8a5 f1d3 f8c5 d3a6 c5b4 a6d3 f6d5 c1d2 b4c3 b2c3 d5f6 g1h3 g8h6 e1g1 f6h5 g2g4 h5f6 h3h6 g7h6 h2h3 h8g8 d1e2 f6g4 f1b1 g4e5 g1f1 e5d3 e2e4 a5f5 e4f5 e6f5 b3c2 d3f2 f1f2 d7d5 b1g1 g8g6 f3e5 g6g1 a1g1 b8c7 g1g7 c8e6 g7h7 e8e7 e5f7 e6f7 h7h6 a8f8 c2b1 c7a8 b1b4 e7e8 b4d6 a8b6 d6e5 e8d7 e5f5 d7d8 f5f6 d8d7 f6f5 d7d8 f5f4 a7a6 h6d6 d8c8 f4f5 c8b8 d6h6 b6c4 f2e1 c4e4 f5f1 b8a7 h6h7 e4c4 f1f5 c4e4 f5f1 e4c4 f1c4 d5c4 d2c1 f7g6 c1a3 f8g8 h7h6 g6b1 h6f6 b1a2 a3c5 a7a8 e1e2 a2b1 e2f3 g8h8 h3h4 b1c2 f6f7 h8g8 e3e4 g8e8 c5e7 b7b5 e4e5 c2d1 f3e3 d1h5 f7g7 h5d1 e7c5 e8h8 g7a7 a8b8 a7a6 h8h4 a6c6 d1a4 c6b6 b8c7 b6f6 h4h3 f6f3 h3f3 e3f3 a4d1 f3g3 c7c6 c5d6 c6d5 g3f4 d5e6 f4e4 d1c2 e4f4 c2d3 d6c5 d3g6 c5a3 g6c2 a3d6 c2g6 f4f3 e6f5 d4d5 g6h5 f3e3 f5g4 e5e6 h5e8 d6h2 g4f5 e3d4 e8g6 d4c5 g6e8 h2b8 f5f6 b8d6 f6g6 d6e5 g6f5 e5d4 e8h5 c5b5 h5e2 e6e7 e2h5 e7e8d h5e8 b5c4 e8b5 c4b5 f5e4 c3c4 e4d4 b5b6 d4c4 b6c7 c4c5 c7d7 c5d4 d7e7 d4c5 e7f6 c5b4 f6g5 b4c3 g5g4 c3d3 g4g5 d3e3 g5f6 e3f4 f6e7 f4g5 e7d6 g5f6 d6c5 f6e7 d5d6 e7e6 c5b4 e6f6 b4b5 f6e6 b5b4 e6d7 b4c3 d7c8 d6d7 c8c7 d7d8d c7d8 { Drawn 1/2-1/2 }

Re: Engines playing Musketeer Chess, good price

Posted: Sun Apr 05, 2020 10:35 pm
by hgm
Not that I know. But you could write a FEN tag instead of the prelude, to make it into PGN, and then WinBoard might eat it.

Code: Select all

[Event "?"]
[Site "?"]
[Date "?"]
[Round "-"]
[White "?"]
[Black "?"]
[Result "*"]
[Variant "musketeer"]
[VariantMen "S:B2ND;D:QN;K:KisO2"]
[FEN "*s****d*/rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR/***S**D* w KQkq - 0 1"]
[SetUp "1"]

{--------------
. s . . . . d .
r n b q k b n r
p p p p p p p p
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
P P P P P P P P
R N B Q K B N R
. . . S . . D .
white to play
--------------}
1. Nf3/D Na6/S 2. c4 Nf6/D 3. d4 Sb6 4. Qb3/S e6 5. c5 Sb8 6. e3 c6 7. Nc3
Qa5 8. Bd3 Bxc5 9. Bxa6 Bb4 10. Bd3 Nd5 11. Bd2 Bxc3 12. bxc3 Nf6 13. Dh3
Dh6 14. O-O Nh5 15. g4 Nf6 16. Dxh6 gxh6 17. h3 Rg8 18. Se2 Nxg4 19. Rfb1
Ne5+ 20. Kf1 Nxd3 21. Se4 Qf5 22. Sxf5 exf5 23. Qc2 Nxf2 24. Kxf2 d5 25.
Rg1 Rg6 26. Ne5 Rxg1 27. Rxg1 Sc7 28. Rg7 Be6 29. Rxh7 Ke7 30. Nxf7 Bxf7
31. Rxh6 Rf8 32. Qb1 Sa8 33. Qb4+ Ke8 34. Qd6 Sb6 35. Qe5+ Kd7 36. Qxf5+
Kd8 37. Qf6+ Kd7 38. Qf5+ Kd8 39. Qf4 a6 40. Rd6+ Kc8 41. Qf5+ Kb8 42. Rh6
Sc4 43. Ke1 Se4 44. Qf1 Ka7 45. Rh7 Sc4 46. Qf5 Se4 47. Qf1 Sc4 48. Qxc4
dxc4 49. Bc1 Bg6 50. Ba3 Rg8 51. Rh6 Bb1 52. Rf6 Bxa2 53. Bc5+ Ka8 54. Ke2
Bb1 55. Kf3 Rh8 56. h4 Bc2 57. Rf7 Rg8 58. e4 Re8 59. Be7 b5 60. e5 Bd1+
61. Ke3 Bh5 62. Rg7 Bd1 63. Bc5 Rh8 64. Ra7+ Kb8 65. Rxa6 Rxh4 66. Rxc6 Ba4
67. Rb6+ Kc7 68. Rf6 Rh3+ 69. Rf3 Rxf3+ 70. Kxf3 Bd1+ 71. Kg3 Kc6 72. Bd6
Kd5 73. Kf4 Ke6 74. Ke4 Bc2+ 75. Kf4 Bd3 76. Bc5 Bg6 77. Ba3 Bc2 78. Bd6
Bg6 79. Kf3 Kf5 80. d5 Bh5+ 81. Ke3 Kg4 82. e6 Be8 83. Bh2 Kf5 84. Kd4 Bg6
85. Kc5 Be8 86. Bb8 Kf6 87. Bd6 Kg6 88. Be5 Kf5 89. Bd4 Bh5 90. Kxb5 Be2
91. e7 Bh5 92. e8=D Bxe8+ 93. Kxc4 Bb5+ 94. Kxb5 Ke4 95. c4 Kxd4 96. Kb6
Kxc4 97. Kc7 Kc5 98. Kd7 Kd4 99. Ke7 Kc5 100. Kf6 Kb4 101. Kg5 Kc3 102. Kg4
Kd3 103. Kg5 Ke3 104. Kf6 Kf4 105. Ke7 Kg5 106. Kd6 Kf6 107. Kc5 Ke7 108.
d6+ Ke6 109. Kb4 Kf6 110. Kb5 Ke6 111. Kb4 Kd7 112. Kc3 Kc8 113. d7+ Kc7
114. d8=D Kxd8
{ Drawn} 1/2-1/2
KingSlayer at some point complains about an illegal move, though. Could be a KingSlayer bug.

Re: Engines playing Musketeer Chess, good price

Posted: Mon Apr 06, 2020 12:13 pm
by JohnWoe
^ Thanks !

I propose some changes to Musketeer FEN :
https://github.com/SamuraiDangyo/Capitaine#fen-changes
I put it here as it changes anyway at some point :
Does this make any sense ? I found parsing that Musketeer-SF fen-format really cumbersome in C.

Code: Select all

## FEN changes
Fen-format on [Musketeer-Stockfish](https://github.com/ianfab/Musketeer-Stockfish/wiki/Interface#fen-format) was clumsy and cumbersome.
So I invented a much simpler method :

Gated pieces are set like this :
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[DHabac] w
Stage 1 : White selects a Dragon
Stage 2 : White selects a Hawk
Stage 3 : White places Dragon on a-file
Stage 4 : Black places Dragon on b-file
Stage 5 : White places Hawk on a-file
Stage 6 : Black places Hawk on c-file
```

If all pieces are in the play use this form :
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[-] w
```
Searching is really simple w/ this format :

Code: Select all

./capitaine -fen "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[DH] w KQkq" -search 1000
info depth 0 nodes 32 time 2 nps 16000 score cp -26 pv D@a0
info depth 1 nodes 194 time 4 nps 48500 score cp -16 pv D@a0
info depth 2 nodes 449 time 4 nps 112250 score cp -26 pv D@a0
info depth 3 nodes 1773 time 4 nps 443250 score cp -16 pv D@a0
info depth 4 nodes 8627 time 6 nps 1437833 score cp 1004 pv D@g0
info depth 5 nodes 21107 time 10 nps 2110700 score cp 558 pv D@g0
info depth 6 nodes 120462 time 67 nps 1797940 score cp 566 pv D@g0
info depth 7 nodes 1796256 time 587 nps 3060061 score cp 27 pv D@d0
info depth 8 nodes 3205742 time 1000 nps 3205742 score cp 27 pv D@d0
I fixed my Capitaine engine :
How about this game ? :

Code: Select all

[ Variant: Musketeer Chess ]
[ Time: 10000 ]
[ Date: 06.04.2020 13:03:37 ]
[ White: Capitaine 0.45 ]
[ Black: Capitaine 0.45 ]
D H D@b0 H@a0 D@a9 H@b9 b1c3 b8c6 d2d3 e7e5 c1e3 f8b4 a2a3 b4c3 b1c3
d7d6 a1b1 e8f8 c3e4 h7h6 f2f3 e8e7 a1c3 c8f5 e4g3 g8f6 g3h4 f6d5 h4e7
d8e7 c3c1 d5e3 c1e3 e7h4 g2g3 h4a4 d1d2 c6d4 b1c1 f7f6 f1h3 a7a5 h3f5
d4f5 e3h3 f5e7 d2c3 c7c5 h3h5 f8g8 e2e4 b8b6 c3d2 g7g6 h5h8 g8h8 d2h6
h8g8 g3g4 a4d4 h6d2 d4b2 g1e2 b2a3 e1g1 b6b4 d2e3 a3b2 e3h6 a5a4 c2c3
b2d2 h6d2 b4d2 c1b1 a8b8 b1b5 a4a3 f1a1 a3a2 e2g3 b8a8 b5b7 g8f7 g3e2
f7e6 b7b6 e7c8 b6b7 c8e7 g1f1 e7c6 f3f4 f6f5 b7b6 f5e4 f1e1 d2d5 d3e4
d5g2 f4f5 e6d7 e2g3 d7c7 b6b2 g2g4 h2h3 g4d7 b2a2 a8h8 a2h2 g6f5 g3f5
d6d5 a1d1 d5e4 d1d7 c7d7 e1e2 c6e7 f5e7 d7e7 h3h4 e7e6 h4h5 h8b8 e2e3
b8b3 h2c2 b3b1 e3e4 b1h1 c2a2 h1h4 e4e3 h4h5 e3d3 h5h4 a2e2 c5c4 d3c2
h4g4 e2h2 e6d5 h2d2 d5e6 d2d8 g4g6 c2b2 g6g3 d8d2 g3g8 d2d1 g8b8 b2c2
b8a8 d1g1 e6f5 g1h1 f5e4 h1e1 e4d5 e1d1 d5e4 d1e1 e4f5 e1f1 f5e6 f1g1
a8a2 c2b1 a2f2 g1g4 e6d5 b1c1 f2f8 c1c2 f8f1 g4g2 f1a1 c2b2 a1a7 g2e2
a7b7 b2c1 b7h7 c1b2 h7a7 e2d2 d5e4 d2d1 a7a6 d1d2 a6b6 b2c2 b6h6 d2g2
e4f4 g2g8 h6h2 c2c1 f4e3 g8g3 e3f4 g3g7 f4e3 g7g4 e5e4 g4g3 e3e2 c1c2
e2f2 g3g5 f2e3 c2d1 e3d3 g5d5 d3c3 d1e1 h2g2 e1f1 g2d2 d5f5 c3d4 f5h5
c4c3 f1e1 d2b2 e1d1 b2f2 h5g5 d4e3 g5g3 e3d4 g3g7 d4d3 g7d7 d3e3 d1c1
f2h2 d7d1 h2b2 d1h1 b2f2 h1h3 e3d4 h3h8 f2b2 h8d8 d4e3 d8h8 b2g2 h8c8
e3d4 c8d8 d4c4 d8c8 c4b3 c8b8 b3c4 b8c8 c4d3 c8d8 d3e3 d8c8 e3d3 c8d8
d3e2 c1c2 g2g3 d8d4 e2e3 c2c3 g3g6 d4d5 g6c6 c3b4 c6a6 b4b5 a6g6 d5d8
g6g5 b5c6 g5g6 c6b7 e3f4 d8a8 g6g1 a8d8 e4e3 d8e8 f4f3 e8f8 f3e4 f8e8
e4d4 b7c6 d4d3 e8d8 d3c4 d8e8 g1g6 c6c7 c4d4 c7d7 g6a6 d7c7 a6f6 c7d7
f6f2 e8e7 e3e2 e7e6 e2e1d e6e1 f2e2 e1e2 d4c5 e2e5 c5b6 e5b5 b6a7 d7e6
a7a6 b5a5 a6b7 a5b5 b7c7 b5c5 c7b7 c5c7 b7a6 e6f5 a6b5 c7c5 b5a6 c5c6
a6b7 c6c7 b7a8 c7a7 a8b8 a7b7 b8a8 b7a7 a8b8 a7b7 b8a8 b7b8 a8a7 b8b7
a7a6 b7b6 a6a5 b6b5 a5a4 b5b4 a4a5 b4b5 a5a6 b5b6 a6a5 b6b4 a5a6 b4a4
a6b6 a4b4 b6c7 b4c4 c7d7 c4d4 d7e7 d4e4 e7d7 e4d4 d7e7 d4e4 e7d6 f5g5
d6d7 e4d4 d7e6 d4e4 e6f7 e4e7 f7g8 g5f4 g8f8 e7e8 f8g7 e8e7 g7g6 e7e6
g6g7 e6g6 g7h7 g6g7 h7h6 f4e5 h6h5 e5d5 h5h4 g7g4 h4h5 g4h4 h5g6 h4g4
g6f6 g4f4 f6e7 f4e4 e7f6 d5c5 f6f7 e4e7 f7g8 e7b7
{ Drawn 1/2-1/2 }

Re: Engines playing Musketeer Chess, good price

Posted: Mon Apr 06, 2020 5:20 pm
by hgm
I don't like the holdings field of a FEN to contain board coordinates; that would give it a different meaning from what it has in any other variant, where lower-case letters would indicate black pieces.

The currently used FEN is simply the 'what-you-see-is-what-you-get' FEN, telling the GUI what to display. There is one alternative format that I would consider acceptable (and even would prefer): this introduces a novel general notation in FENs for 'stacking' multiple pieces on the same square. Such a stack would then be indicated by enclosing the stacked pieces in parentheses. The way this should then be interpreted in Musketeer Chess is that the first-mentioned piece is the movable square occupant, and the second-mentioned piece is 'uncovered' (i.e. gated) when the first-mentioned piece moves away.

It would require an enhancement of XBoard's FEN parser to recognize this notation as a way to put pieces on the gating ranks of 'holdingless Seirawan'.