Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seirawan chess #426

Closed
ianfab opened this issue Oct 19, 2017 · 88 comments
Closed

Seirawan chess #426

ianfab opened this issue Oct 19, 2017 · 88 comments
Assignees

Comments

@ianfab
Copy link
Collaborator

@ianfab ianfab commented Oct 19, 2017

If anyone is interested, I have uploaded a first version for an implemenation of Seirawan chess in Stockfish: https://github.com/ianfab/Seirawan-Stockfish. Only the rules are implemented without any evaluation or search changes compared to standard chess (apart from introducing piece values for hawk and elephant), so it might not be that strong, and there might still be bugs. Nevertheless, in a first test with XBoard/Winboard it seemed to work fine (and of course it defeated me :-D ).

I have not implemented it in multi-variant Stockfish for a couple of reasons:

  • move encoding would perhaps have to be even uglier as it is in my implementation if you also want to make it fit into 16 bits while preserving crazyhouse and antichess functionality
  • code might become more fragile when tinkering with additional piece types while preserving functionality for other variants and standard chess
  • maintenance would become more difficult
  • adding new piece types blows up array sizes
  • it is very likely that it would cause a slowdown for standard chess (although that is a minor issue since it could simply be disabled via the makefile if not needed)

I still think it should be possible to somehow make it work in multi-variant Stockfish, but for the reasons mentioned above I think it is better to keep it separate from the variants without fairy pieces.

@ddugovic

This comment has been minimized.

Copy link
Owner

@ddugovic ddugovic commented Oct 19, 2017

Very nice!

I'll continue trying to port Stockfish to Rust (or D, or other high-level abstract language) to help with scalability of new variants.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 22, 2017

FYI: In June I tried to implement seirawan (Seirawan Chess, SHarper Chess, S-Chess) for cutechess. Sadly, this variant made more difficulties than anticipated, and more than any other variant. So it is not ready yet.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 23, 2017

@alwey Thanks for the info. Cutechess for Seirawan chess would be great as it would then be possible to run tests for Seirawan-Stockfish on fishtest. Since cutechess already supports capablanca chess, I guess the difficulties had to do with gating moves. In Stockfish, implementing castling with gating on the rook square was a bit tricky.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 23, 2017

By the way, does anyone have a list of engines supporting Seirawan chess or maybe even a rating list? The only engine of which I know it supports S-chess is Sjaak.

A first match against Sjaak II 1.4.1 revealed two bugs in Stockfish, and after fixing them in a second match Stockfish won 97.5 - 2.5 at very short time control (10''+0'') with no time losses or crashes on either side. I think this is not really surprising since S-chess is a superset of standard chess with not that many additions, so Seirawan-Stockfish can inherit large parts of the playing strength of standard Stockfish.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

@ianfab : You are right, the gating moves made problems, and FEN notation needed some effort. My seirawan branch of cutechess implements a FEN-notation defined by @HGMuller. Internally the gating moves are coded as optional promotions, not as drops. Castling in combination with gating is left out yet, so this software is not usable. It is not even stable.

Being unsure whether there is demand for the variant I gave the seirawan branch a rest.


Playing two instances of Fairy-Max 5.0b Xboard's PGN notation looks like:
1. Nc3/E {+0,14/6} Nc6/E {+0,17/6 0,5} 2. d4 {+0,07/6 0,5} f6 {+0,04/6 0,7} 3. Be3/H {+0,11/6 1,0} Nh6/H {+0,24/6 0,7}.

Now a new game with cutechess GUI, of course it did not go through:

[Event "?"]
[Site "?"]
[Date "2017.10.23"]
[Round "?"]
[White "fairymax"]
[Black "sjaakii-1.4.1"]
[Result "0-1"]
[PlyCount "26"]
[Termination "stalled connection"]
[TimeControl "30+0.3"]
[Variant "seirawan"]

1. Nc3 {+0.26/7 1.4s} d5 {-0.06/12 1.1s} 2. d3 {+0.16/7 1.3s}
Nf6 {+0.05/10 1.1s} 3. a3 {+0.02/6 0.46s} d4 {+0.12/11 1.2s}
4. Ne4 {-0.08/7 0.41s} Nc6 {+0.15/10 1.1s} 5. Nf3 {+0.04/7 0.56s}
Qd5/E {+0.10/9 0.89s} 6. c4 {+0.03/7 0.67s} Qf5 {-0.23/10 1.2s}
7. Ng3 {-0.02/7 0.69s} Qc5 {-0.35/11 1.1s} 8. Qc2 {+0.03/6 0.47s}
a5 {+0.41/8 0.57s} 9. Bd2 {+0.11/6 0.43s} h5 {+1.45/8 0.59s}
10. O-O-O {+0.17/6 0.40s} h4 {+6.19/10 0.57s} 11. Ne4 {-0.14/8 0.57s}
Nxe4 {+6.52/11 0.80s} 12. dxe4 {-0.12/7 0.49s} h3 {+6.49/10 1.3s}
13. gxh3 {-0.03/8 0.93s} Ed6 {+5.77/9 1.3s, White's connection stalls} 0-1

White did not like d8d6, it reported an illegal move.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

Stockfish played its first Seirawan game on cutechess - and won with Black:


[Event "?"]
[Site "?"]
[Date "2017.10.23"]
[Round "?"]
[White "sjaakii-1.4.1"]
[Black "stockfish-s-47ed2a7"]
[Result "0-1"]
[PlyCount "88"]
[TimeControl "30+0.3"]
[Variant "seirawan"]

1. d3 {+0.05/10 1.9s} Nc6/H {+0.50/14 2.9s} 2. Nf3 {+0.37/9 0.92s}
d5 {+0.07/14 1.3s} 3. c3 {+0.28/9 1.4s} e5 {+0.79/14 2.1s} 4. h3 {+0.18/8 1.0s}
Nf6/E {+1.17/13 1.6s} 5. g4 {+0.27/8 1.2s} Qe7 {+0.92/12 1.9s}
6. g5 {+0.59/8 1.2s} Nh5 {+0.50/17 2.2s} 7. a4 {+0.56/8 0.54s}
e4 {+1.17/14 3.5s} 8. dxe4 {+0.66/8 0.63s} dxe4 {+1.26/15 0s}
9. Nd4 {+0.59/8 0.84s} Ne5 {+1.21/15 1.4s} 10. b3 {+0.71/6 0.76s}
c5 {+1.70/13 1.1s} 11. Nb5 {+0.34/9 1.3s} a6 {+2.25/12 0.61s}
12. N5a3 {+0.19/9 1.5s} Hc6 {+2.27/16 2.1s} 13. Nc4 {-0.08/8 1.1s}
Nxc4 {+1.91/13 0.98s} 14. bxc4 {-0.53/10 1.2s} e3 {+2.29/15 1.2s}
15. Bg2/H {+0.23/9 1.2s} exf2+ {+0.94/16 1.6s} 16. Kxf2 {+0.37/8 1.1s}
Ha5 {+1.04/17 0.001s} 17. Bd5 {+0.60/7 0.53s} h6 {+1.82/14 1.4s}
18. Hd2 {+0.47/6 0.68s} hxg5 {+2.45/15 0.61s} 19. Hxg5 {+0.18/8 0.77s}
Nf6 {+2.77/16 0.22s} 20. Qd3 {+0.72/5 0.51s} Rh5 {+4.02/15 0.40s}
21. Hd2 {-1.23/7 0.78s} Nxd5 {+7.54/14 0.47s} 22. cxd5 {-3.56/7 0.51s}
Ef6+ {+7.24/15 0.82s} 23. Hf3 {-3.84/8 0.70s} Rf5 {+7.18/17 0.61s}
24. Re1/E {-3.24/8 0.92s} Hc7 {+7.27/17 1.5s} 25. c4 {-4.16/7 0.94s}
Eg6 {+7.31/18 0.092s} 26. Qe3 {-2.91/7 0.51s} He5 {+8.24/15 0.69s}
27. Rg1 {-5.05/7 0.49s} Qh4+ {+10.38/17 0s} 28. Eg3 {-7.27/7 0.89s}
Be7 {+13.38/19 0.56s} 29. Qxe5 {-8.34/8 0.66s} Exe5 {+13.64/21 0.001s}
30. Nd2 {-8.97/8 0.54s} Rxf3+ {+14.57/19 0.52s} 31. exf3 {-10.03/9 0.77s}
Ed3+ {+18.41/18 0.50s} 32. Ke2 {-9.91/8 0.43s} Ec3+ {+20.04/18 0s}
33. Kf2 {-13.90/8 0.71s} Bd6 {+21.79/19 0s} 34. Ne4 {-14.90/8 0.50s}
Bxg3+ {+22.92/16 0.26s} 35. Rxg3 {-14.94/9 0.40s} Ec2+ {+25.45/15 0.18s}
36. Bd2 {-15.26/9 0.34s} Exa1 {+26.48/16 0.17s} 37. a5 {-15.89/9 0.75s}
Bxh3 {+64.24/17 0.40s} 38. Ke3 {-17.25/7 0.49s} Bf1 {+M13/24 0.53s}
39. Nd6+ {-M14/6 0.33s} Kf8 {+M11/26 0.001s} 40. Rg4 {-M10/7 0.50s}
Ec2+ {+M9/30 0.11s} 41. Kf4 {-M8/4 0.027s} Ed4+ {+M7/31 0.089s}
42. Ke3 {-M6/3 0.004s} Ed3+ {+M5/67 0.57s} 43. Ke4 {-M4/2 0s}
Qe7+ {+M3/73 0.18s} 44. Kf5 {-M4/2 0.023s} Qe5# {Black mates} 0-1
@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 23, 2017

@alwey If you would like to have an engine that does not take into account gating by castling in order to be able to test an incomplete implementation, then I could easily create a branch of Seirawan-Stockfish for this purpose. Let me know if this would be helpful.

My implementation should be relatively stable now as it shows the same perft results as Sjaak up to depth 6 (did not test more as perft is slow in Sjaak), and I did not get any more illegal moves in the last 100 test games against Sjaak.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

@ianfab : Thank you, but Stockfish is really fine as is. I am just testing with the CLI against Sjaak II 1.4.1. Sadly, my software currently is instable and crashes now and then. Normally, I do not have any crashes while developing other variants.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

@ianfab : I guess Stockfish exceeds Sjaak II 1.4.1 by about 600 Elo at 30s+.3s (result 135:3)
When Stockfish played with 10s+.1s against Sjaak II 1.4.1 at 60s+.6s the result was 89.5:10.5.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 23, 2017

@alwey Thanks for testing. I guess that longer TC helps Stockfish to avoid blunders (possibly due to things still on my todo list, such as that hash does not depend on the possible gating squares).

Edit: I overlooked that the second test included a time handicap. Interesting result.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

@ianfab: I think the result at 10s+0.1 is also consistent with 600 Elo difference in playing strength, because Sjaak II was given a time handicap of about 2.5 doublings. In standard chess and for Stockfish-7, one doubling is worth about 100 Elo in the 10s range, but more for shorter time controls and less for longer time controls.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Oct 23, 2017

Seirawan engines:

Sjaak II (E. Glebbeek), Fairy-Max (H. G. Muller), Sigla (F. Mosca, only Windows binary), Leonidas (also E. Glebbeek).

http://computer-chess.org/doku.php?id=computer_chess:wiki:lists:variants_engine_list

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Oct 27, 2017

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 27, 2017

@HGMuller
Thanks a lot for the info, that's very interesting. Since you can not share the Komodo version, could you maybe run a short S-Chess match of Stockfish vs. Komodo offline and post the results? Something like 50-100 games at a time control comparable to fishtest STC would be totally sufficient, I would just like to get a rough idea of the sign and order of magnitude of the Elo difference.

[Just in case you missed it, there is another thread where your feedback would be very much appreciated.]

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Oct 27, 2017

Yes, I should be able to do that, in principle. I never succeeded in compiling Stockfish, however, and I don't have a 64-bit compiler anyway. So it would be helpful if you could give me a link to a Windows executable. (I have an i7-2600 (Sandy Bridge).)
I also hope there are no incompatibilities between the way Komodo handled FENs and moves, and Stockfish does; the current version of UCI2WB should work with Komodo; the reason I have this Komodo was actually to make that happen.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Oct 27, 2017

I also have never compiled Stockfish under Windows. Maybe someone else could help out with that?

I followed your FEN format definition when developing Seirawan-Stockfish, and I tried it with UCI2WB in Xboard (although not up to date), so I hope it should in principle work fine.

@ddugovic

This comment has been minimized.

Copy link
Owner

@ddugovic ddugovic commented Oct 27, 2017

So far I've registered with Appveyor #351 but have not figured out how to configure those Windows builds to enable variants.

@Vinvin20

This comment has been minimized.

Copy link

@Vinvin20 Vinvin20 commented Oct 29, 2017

@MichaelB7

This comment has been minimized.

Copy link

@MichaelB7 MichaelB7 commented Oct 30, 2017

@HGMuller - his name is Frank Cammarata, a very nice man and a smart businessman.

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Nov 2, 2017

Martin Sedlak made a Windows compile for me, and I was able to play it against Seirawan-Komodo (game below). After a somewhat embarrassing end-game, Komodo won that one. Apparently due to an advantage acquired very early in the opening.

About the test match: does Seirawan-Stockfish randomize in any way, or is it practically deterministic? In other words, does it make sense to play a match without opening book? If not, do you have a book?

[Event "Computer Chess Game"]
[Site "MAKRO-PC"]
[Date "2017.11.02"]
[Round "-"]
[White "Schess64 12.0002 (UCI2WB)"]
[Black "Stockfish 011117 64 (UCI2WB)"]
[Result "1-0"]
[TimeControl "40/300"]
[Variant "seirawan"]
[Annotator "1. +0.27 1... -0.43"]

  1. e4 {+0.27/14} e5 {-0.43/18 16} 2. Nf3 {+0.20/12 7} f5 {-0.03/17 17} 3.
    exf5 {+0.85/11 9} Nc6/H {-0.05/18 11} 4. d4 {+1.09/11 6} Bb4/E+
    {-0.67/20 25} 5. c3 {+2.65/13 4} Be7 {-2.30/20 10} 6. Bd3 {+2.23/13 8} e4
    {-2.47/23 17} 7. Bxe4 {+2.33/12 0.9} d5 {-2.75/23 9} 8. Bd3 {+2.40/14 8}
    Bxf5 {-2.56/18 2.1} 9. O-O/H {+2.04/14 21} Hd7 {-2.25/19 5} 10. Hc2
    {+2.15/13 4} Bd6 {-1.64/22 10} 11. Re1+ {+2.16/11 4} Nge7 {-1.69/22 5} 12.
    b4 {+2.14/12 6} a6 {-1.86/21 9} 13. a4 {+2.34/13 5} Hc8 {-1.67/21 6} 14. b5
    {+2.42/12 5} axb5 {-1.42/23 27} 15. axb5 {+2.35/15 7} Rxa1 {-1.83/22 7} 16.
    Hxa1 {+2.43/15 6} Bg4 {-1.81/23 5} 17. bxc6 {+2.93/11 0.4} Bxf3
    {-0.11/18 2.4} 18. Qxf3/E {+2.62/16 7} Exf3+ {-0.88/22 7} 19. gxf3
    {+2.90/14 0.5} bxc6 {-1.11/19 0.6} 20. Hc2 {+2.70/16 6} Rf8 {-0.86/21 6}
  2. Nd2 {+2.90/14 5} Rf6 {-0.71/21 4} 22. Ba3 {+3.45/14 8} Kf7
    {-1.00/23 15} 23. Kh1 {+3.04/13 5} Qf8 {-1.13/24 9} 24. Bxd6 {+3.47/14 5}
    cxd6 {-1.66/24 6} 25. Re3 {+3.13/14 6} Hh3 {-0.88/20 3} 26. Bf1
    {+2.74/16 20} Hf4 {-1.54/24 10} 27. Hd3 {+2.81/16 5} Hg5 {-2.01/26 15} 28.
    Bg2 {+2.61/14 5} Ng6 {-1.17/20 4} 29. Hb4 {+2.26/15 6} Hh4 {+0.00/19 1.6}
  3. Hxc6 {+2.37/14 4} Nf4 {+0.00/25 2.0} 31. Bf1 {+2.44/12 0.9} Rg6
    {+0.00/27 0.7} 32. Ne4 {+0.40/15 7} dxe4 {+0.30/17 1.2} 33. Hxe4
    {+0.59/16 4} d5 {+0.00/23 5} 34. Hg3 {+0.51/18 5} Hg5 {+0.00/25 2.1} 35. c4
    {+1.23/16 11} Hh6 {+0.03/21 4} 36. Hh4 {+1.39/14 0.5} Rg5 {+0.00/22 5} 37.
    Re5 {+1.51/16 5} Rxe5 {-0.68/21 0.5} 38. dxe5 {+1.58/15 1.0} Ng6
    {-0.51/22 1.9} 39. Hg2 {+1.80/16 6} Kg8 {-0.58/23 3} 40. cxd5 {+1.39/16 7}
    Nxe5 {-0.63/23 0.7} 41. Be2 {+1.55/17 6} Hf7 {-0.08/25 5} 42. Hf4
    {+1.54/18 9} Ng6 {-0.35/28 14} 43. He6 {+1.19/16 5} Hxe6 {-0.38/32 20} 44.
    dxe6 {+1.14/15 0.6} h6 {-0.41/29 4} 45. Ee3 {+1.83/17 6} Qf6 {-0.41/31 11}
  4. Bc4 {+1.85/18 10} Kh8 {-0.52/33 28} 47. h3 {+1.86/19 6} Ne7
    {-0.50/27 6} 48. Kg2 {+1.92/17 5} Ng6 {-0.46/31 10} 49. Ee4 {+1.93/19 11}
    Qf5 {-0.50/31 7} 50. Kg3 {+1.98/17 6} Ne7 {-1.32/31 18} 51. h4 {+1.99/19 7}
    g6 {-1.42/33 8} 52. Kg2 {+2.14/19 9} Qf8 {-1.51/36 9} 53. Bd3 {+2.37/19 8}
    Kg7 {-1.44/37 4} 54. Ed6 {+2.51/19 6} h5 {-1.51/38 1.4} 55. Ed7
    {+2.50/23 6} Qf6 {-2.05/38 11} 56. Ed8 {+2.40/21 8} Kh6 {-2.14/36 1.5} 57.
    Be4 {+2.51/22 6} Kh7 {-3.00/37 13} 58. Bc2 {+2.49/21 10} Qg7 {-1.90/35 4}
  5. Ee8 {+2.51/22 6} Nd5 {-2.16/39 14} 60. Ed6 {+2.50/22 9} Ne7
    {-2.28/34 1.1} 61. Ed8 {+2.50/21 6} Qg8 {-2.37/39 8} 62. Ed7 {+2.58/23 7}
    Qg7 {-2.37/40 1.7} 63. Be4 {+2.46/21 7} Kh6 {-2.37/41 5} 64. Kh3
    {+2.44/20 6} Qh7 {-2.37/43 7} 65. f4 {+2.47/22 7} Qg7 {-2.37/45 9} 66. Kh2
    {+2.48/21 9} Qb2 {-2.37/42 5} 67. Kg2 {+2.46/21 8} Qg7 {-2.90/40 8} 68. Bc2
    {+2.50/21 8} Kh7 {-2.65/35 3} 69. Bd3 {+2.51/20 7} Kh6 {-2.45/36 4} 70. Kg3
    {+2.45/20 7} Kh7 {-2.45/35 5} 71. Kf3 {+2.43/19 6} Kh6 {-2.98/43 17} 72.
    Kg2 {+2.48/21 9} Kh7 {-2.96/39 6} 73. Kg3 {+2.44/19 7} Kh6 {-2.96/42 9} 74.
    Kf3 {+2.45/20 6} Kh7 {-2.85/38 2.2} 75. Be4 {+2.45/21 15} Kh6 {-2.93/37 5}
  6. Kg2 {+2.42/19 6} Kh7 {-2.84/42 10} 77. Kh2 {+2.35/20 20} Kg8
    {-2.78/34 2.3} 78. Kg1 {+2.36/19 13} Kh8 {-2.77/36 2.4} 79. Kh1
    {+2.37/19 5} Kh7 {-3.07/37 4} 80. Bd3 {+2.37/20 14} Kh6 {-1.91/8 0.1} 81.
    Bc2 {+2.49/19 8} Kh7 {-2.19/38 13} 82. Kg2 {+2.38/19 5} Kh6 {-2.19/36 1.3}
  7. Kh2 {+2.41/19 6} Qh7 {-2.13/40 10} 84. Bd3 {+2.39/20 5} Qg7
    {-1.96/39 11} 85. Kh3 {+2.37/21 6} Kh7 {-2.38/42 13} 86. Be4 {+2.44/20 5}
    Kg8 {-2.46/41 11} 87. Ec7 {+2.41/19 5} Kh8 {-2.55/42 15} 88. Kh2
    {+2.43/19 7} Kh7 {-2.55/42 6} 89. Ec5 {+2.42/21 7} Kg8 {-2.57/40 9} 90. Ed7
    {+2.45/20 7} Kh7 {-2.60/41 7} 91. Kg2 {+2.44/20 6} Kh6 {-2.71/40 9} 92. Bc2
    {+2.42/19 6} Qh7 {-2.61/37 4} 93. Bd3 {+2.45/20 7} Qg7 {-2.72/38 1.3} 94.
    Kg3 {+2.44/20 6} Qh7 {-2.79/39 11} 95. Kf3 {+2.41/19 7} Qg7 {-3.25/45 13}
  8. Kg2 {+2.43/20 6} Kh7 {-3.25/41 8} 97. Bb1 {+2.41/19 6} Kg8 {-3.25/38 6}
  9. Be4 {+2.43/20 7} Kh8 {-3.25/41 6} 99. Ec7 {+2.44/18 14} Qf8
    {-3.17/38 5} 100. Kg3 {+2.40/19 8} Kg7 {-3.17/39 1.8} 101. Bd3 {+2.44/20 5}
    Kh6 {-2.80/39 9} 102. Ed7 {+2.41/21 7} Qg7 {-2.95/40 2.9} 103. Kf3
    {+2.57/21 23} Kh7 {-2.65/38 4} 104. Ke4 {+2.66/20 6} Kh6 {-6.63/36 13} 105.
    Bc4 {+2.39/21 6} Kh7 {-12.47/43 1:02} 106. Bb5 {+2.34/21 18} Kh6
    {-12.47/29 4} 107. Ba6 {+2.35/20 6} Qc3 {-2.14/24 2.2} 108. Ee5
    {+2.50/18 5} Qb4+ {-2.36/24 1.1} 109. Kf3 {+3.10/20 6} Qb3+ {-3.89/34 11}
  10. Kg2 {+3.35/22 5} Qd5+ {-3.99/41 3} 111. Kg3 {+3.49/26 6} Nf5+
    {-3.54/34 1.6} 112. Kh2 {+3.52/22 0.5} Qxe5 {-4.04/35 0.5} 113. fxe5
    {+3.92/22 2.1} Kg7 {-5.87/37 8} 114. Bd3 {+4.28/24 8} Ne7 {-6.00/31 0.7}
  11. Be4 {+4.82/26 6} Kh6 {-6.55/39 7} 116. Kg3 {+4.87/23 34} Kh7
    {-6.62/35 3} 117. Kf4 {+3.65/19 6} Kh6 {-6.55/32 1.2} 118. Ke3 {+5.92/24 4}
    Kg7 {-6.77/31 0.5} 119. Kd4 {+6.87/25 5} Kf8 {-6.45/28 1.2} 120. Kd3
    {+6.05/23 4} Kg7 {-8.06/35 3} 121. Kc4 {+7.02/24 5} Kf8 {-18.86/34 20} 122.
    Kd4 {+7.14/24 5} Kg8 {-5.95/31 5} 123. Kc5 {+8.67/26 7} Kf8 {-63.34/33 20}
  12. Kd6 {+7.52/25 17} Ke8 {-63.21/32 8} 125. Kc7 {+8.84/26 7} Ng8
    {-66.70/31 18} 126. Bxg6+ {+8.84/28 5} Ke7 {-67.14/30 1.6} 127. Bf5
    {+8.92/27 29} Ke8 {-1000.18/44 14} 128. Bh7 {+16.54/22 27} Ne7
    {-1000.19/49 6} 129. Be4 {+1000.15/15 0.2} Ng8 {-1000.18/48 1.2} 130. Kd6
    {+1000.14/13 0.2} Ne7 {-1000.19/51 6} 131. f4 {+1000.13/12 0.2} Kd8
    {-1000.11/57 8} 132. f5 {+1000.12/13 0.1} Nc8+ {-1000.10/65 6} 133. Kc5
    {+1000.12/14 0.2} Ke7 {-1000.09/64 1.3} 134. Bb7 {+1000.10/13 0.1} Na7
    {-1000.08/67 6} 135. Kb6 {+1000.08/9 0.2} Kf8 {-1000.07/70 1.3} 136. f6
    {+1000.07/8 0.1} Kg8 {-1000.05/93 6} 137. Kxa7 {+1000.06/6 0.1} Kh7
    {-1000.05/127 1.9} 138. e7 {+1000.05/6 0.1} Kg6 {-1000.04/127 0.2} 139.
    Be4+ {+1000.04/3 0.1} Kf7 {-1000.03/127 0.2} 140. Kb6 {+1000.03/2 0.1} Ke8
    {-1000.02/127 0.2} 141. Bg6+ {+1000.02/1 0.1} Kd7 {-1000.01/1 0.1} 142.
    e8=Q# {+1000.01/1 0.1}
    {Xboard adjudication: Checkmate} 1-0
@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Nov 2, 2017

@HGMuller Nice. In principle it is deterministic in the same way as standard Stockfish is, so apart from variations due to timing and multi-threading its results will not change. I can try to merge Seirawan-Stockfish with my variant opening book generator to generate an EPD unless someone finds an existing opening book. I hope I can do that tonight, otherwise it will not be possible for me before next week.

@MichaelB7

This comment has been minimized.

Copy link

@MichaelB7 MichaelB7 commented Nov 2, 2017

I can try to merge Seirawan into the book generator and if successful will post opening book.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Nov 2, 2017

@MichaelB7 That would be nice. Please note that it perhaps requires a series of cherry-picks instead of a simple merge or rebase, since the book generator is based on the multi-variant fork whereas seirawan-stockfish is based on official stockfish.

(I only accidentally closed the issue.)

@ianfab ianfab closed this Nov 2, 2017
@ianfab ianfab reopened this Nov 2, 2017
@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Nov 2, 2017

Well, I played 100 games, and on quick inspection they all started the same. So I guess they are not very independent. Stockfish lost 20 games on time. (This was at 40 moves / 1 min.)

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Nov 2, 2017

@HGMuller I have uploaded an S-Chess version of the book generator and a generated EPD book. (I have also updated bookgen master with the additions of extinction chess and twokings support.)

I do not know what causes the time losses. Have you observed similar problems for standard Stockfish or multi-variant Stockfish, or is it exclusively for Seirawan-Stockfish?

@MichaelB7

This comment has been minimized.

Copy link

@MichaelB7 MichaelB7 commented Nov 3, 2017

@HGMuller I can get engine vs engine game going in xboard (macOS) - but what is the trick for a human to play a move like 1. .... Nc6/H. If I play Nc6, white immediately starts thinking? How can I play Nc6 and drop the hawk at the same time and xboard recognize it.? nevermind 😀 , I figured it out ( click gated piece and then simply make move) . See below for 6 ply S-openings.

This is the engine line in xboard.conf:

"/Users/michaelbyrne/cluster.mfb/SF-Seirawan" -fd "/Users/michaelbyrne/cluster.mfb" -fUCCI

eng vs eng

[Event "Mac Pro x5690 3.46 Ghz 18 CPU"]
[Site "Mac-Pro.local"]
[Date "2017.11.03"]
[Round "-"]
[White "Stockfish 031117 64 POPCNT (UCI2WB)"]
[Black "Stockfish 031117 64 POPCNT (UCI2WB)"]
[Result "1/2-1/2"]
[TimeControl "10+1"]
[Variant "seirawan"]
[Annotator "1. +0.70   1... -0.38"]
1. e4 {+0.70/14 +9} Nc6/H {-0.38/15 +7} 2. Nf3/E {+0.45/17 +7} e5
{-0.12/16 +5} 3. Bc4/H {+0.13/17 +3} Nf6 {+0.09/16 +6} 4. d4 {-0.23/17 +2}
Nxe4 {+0.67/16 +6} 5. Nxe5 {-0.93/18 +1} Qf6/E {+6.07/17 +6} 6. Ef3
{+2.15/17 +1} d5 {-2.30/19 +4} 7. Exf6+ {+2.27/15 +2} Nxf6 {-2.26/20 +4} 8.
Be2 {+2.24/19 +1} Bd6 {-2.26/18 +4} 9. Nxc6 {+2.22/19 +1} bxc6
{-2.09/18 +4} 10. Nc3 {+2.20/16 +2} O-O {-1.96/19 +3} 11. Hd2 {+1.92/20 +1}
c5 {-1.96/19 +2} 12. dxc5 {+2.06/18 +1} Bxc5 {-1.90/18 +3} 13. O-O
{+2.16/17 +1} Hd7 {-2.05/20 +2} 14. Bd3 {+2.04/18 +1} Re8 {-2.10/18 +1} 15.
Hf3 {+2.25/15 +1} Bb7 {-2.05/17 +1} 16. Nb5 {+1.91/18 +1} Rc8 {-2.26/18 +1}
17. Bd2 {+1.99/17 +1} d4 {-1.87/17 +1} 18. Hh4 {+1.75/19 +1} Be4
{-1.64/17 +2} 19. a4 {+1.80/20 +1} Ec6 {-1.62/19 +1} 20. h3 {+1.68/18 +1}
Rb8 {-1.52/19 +1} 21. Hg3 {+1.80/19 +1} Bxd3 {-1.23/19 +1} 22. cxd3
{+1.16/18 +1} Nd5 {-1.07/18 +1} 23. Qb3 {+1.49/17 +1} Ef6 {-0.67/17 +1} 24.
Qd1 {+0.67/17 +1} Eg6 {-0.14/18 +1} 25. Hh5 {+0.24/18 +1} Hxh3+
{-0.05/19 +1} 26. Kh2 {-0.03/19 +1} Hf5 {+0.00/19 +1} 27. Hxg6
{+0.08/17 +1} Hxg6 {+0.15/18 +1} 28. Rc1 {+0.00/20 +1} Bb6 {-0.20/16 +2}
29. Qb3 {+0.00/19 +1} Re2 {-0.01/19 +2} 30. Qxd5 {+0.00/20 +1} Rxd2
{+0.00/18 +3} 31. Kg1 {+0.00/21 +1} Hf4 {+0.00/21 +3} 32. Qd7 {+0.00/22 +1}
He2+ {+0.00/19 +3} 33. Kh1 {+0.00/21 +1} Hxd3 {+0.00/24 +3} 34. Nxa7
{-0.15/24 +1} Bxa7 {+0.00/23 +3} 35. Qxc7 {+0.00/24 +1} Rf8 {+0.00/28 +3}
36. Qxa7 {+0.00/25 +2} Rxf2 {+0.00/31 +4} 37. Rxf2 {+0.00/29 +1} Hxf2+
{+0.00/32 +4} 38. Kh2 {+0.00/1 +2} Hg4+ {+0.00/34 +4} 39. Kh1 {+0.00/32 +2}
Hf2+ {+0.00/37 +2} 40. Kh2 {+0.00/1 +3} Hg4+ {+0.00/38 +1} 41. Kh1
{+0.00/32 +2} Hf2+ {+0.00/39 +2} 42. Kh2 {+0.00/1 +3} Hg4+ {+0.00/42 +1}
43. Kh1 {+0.00/45 +3} Hf2+ {+0.00/34 +1} 44. Kh2 {+0.00/1 +4} Hg4+
{+0.00/42 +1} 45. Kh1 {+0.00/48 +4} Hf2+ {+0.00/37 +1} 46. Kh2 {+0.00/1 +5}
Hg4+ {+0.00/44 +1} 47. Kh1 {+0.00/49 +4} Hf2+ {+0.00/38 +1}
{XBoard adjudication: repetition draw} 1/2-1/2

3,597 6-ply openings

uci
setoption name MoveScoreRange value 80
setoption name DepthFactor value 90
setoption name MultiPV value 5
ucinewgame
position startpos
setoption name threads value 12
generate 6 movetime 1000

https://www.dropbox.com/s/5uhybtnx7nyuw7w/Seirawan-6-ply%20openings-3597.epd?dl=1

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Nov 3, 2017

The time losses seem to be my fault; I had not switched off move animation. With most engines that is not yet a problem at 40 moves/min, but Stockfish sometimes only leaves less than 1 sec for 5 moves, and then the accumulated animation time of the moves would push it through the clock.

It turns out there is a problem with S-Komodo, regarding to reading startposition FENs. It always assumes it has an E & H in hand. As some of the positions have the E & H already on the board, it will make illegal moves in games starting from those positions, by dropping pieces it does not have. And if the opponent started with E or H on the board it will make unsound sacrifices for pieces on the baseline to destroy the gating possibilities for the pieces it thinks the opponent still has in hand. Isn't it possible to have the opening lines in PGN form, rather than EPD form?

One final point: the presence of the UCI_Chess960 option confuses UCI2WB, which thinks that it also plays Chess960, (also implying orthodox Chess), which in fact is not the case.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Nov 3, 2017

@HGMuller Yes, Stockfish's aggressive time management often causes issues like that in different setups.

Rewriting the book generator to output PGNs should be feasible, but it is not trivial as it currently only keeps the FENs in memory and not the moves, so I will probably not have the time to do that soon. But it anyway is a good feature suggestion, not only for this specific case. For now, a simple solution might be to just filter out the positions where a piece has already been gated, e.g., by doing a grep for [HEhe] on the EPD.

I have tried to not break 960 for the Seirawan chess implementation, but regarding the castling rights and gating squares in the FEN it probably currently does not work. Does Xboard support 960 for variants? And is it just misleading that chess and chess960 are shown as options or does it cause immediate issues? As Seirawan chess is a superset of orthodox chess, it should in principle also not be that difficult to reintroduce the possibility of playing standard chess (only changing the FEN format and the promotion options), but I currently do not plan to do that for simplicity.

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Dec 27, 2017

A good way to present Alice Chess is to super-impose the boards, displaying pieces in the 'non-current layer' with a high degree of transparency. And as soon as the user clicks a piece, make the layer that contains it current.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Dec 27, 2017

@ianfab ; Thank you. I have been aware this (Multi Variant Stockfish) project for about 16 months now. I admit that together with lichess.org it has had a major influence and inspired my participation in the cutechess project. Other major influences are from Xboard, Fairymax, and Sjaak II, and the literature about variants and the history of chess. HGM.

@HGMuller:

A good way to present Alice Chess is to super-impose the boards, displaying pieces in the 'non-current layer' with a high degree of transparency.

Thank you. I think this is indeed a good way for presentation in the GUI. This will be
a thing to work on at a second stage. Currently, I am only using a plain board representation of 16 files and 8 ranks without any indentations, markings or eye guides (the A board is the left part, the B board the right part).

In the first phase I am trying to get the machine interface right, the legality of moves and positions, game adjudication, input/output of positions and game notation and a basic GUI representation. I am glad to have Looking Glass to help me.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Dec 28, 2017

@ianfab : First light with Cutechess and Makruk:

Rank Name                          Elo     +/-   Games   Score   Draws
   1 stockfish-mak-f364111         512     179      60   95.0%   10.0%
   2 sjaakii-1.4.1                 -53      78      60   42.5%   25.0%
   3 sjaakii (1.3.1 xboard)       -120      77      60   33.3%   30.0%
   4 shamax-5.0b                  -154      86      60   29.2%   21.7%

120 of 120 games finished.

All games (30 s + 0.3 spm, 1 Thread on a core-i5 laptop) from starting position and with Shatranj adjudication rules. There were no duplicate games.

I had detected some issues within cutechess /wrt pieces with lower move symmetry, here Khon (Silver General) and found a provisional solution. This is not quite ready for the big stage.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Dec 28, 2017

@alwey Thanks. Looks like the evaluation improvements since the first version has given SF quite an edge over Sjaak. I can imagine that the asymmetric piece movements cause some issues. For SF that was luckily not that problematic as I could mostly simply copy&paste the logic from the pawns and only change the list of possible relative square differences. Would this be the first variant with asymmetric piece moves (apart from pawns) in cutechess?

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Dec 28, 2017

@ianfab :

Would this be the first variant with asymmetric piece moves (apart from pawns) in cutechess?

Exactly. I must talk to Ilari and Arto about how we should generalise the move generation in the base classes.

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Dec 28, 2017

Note that Ferdinand Mosca also made a Makruk engine (Bilis), and that his engines tend to be pretty strong compared to Fairy-Max and Sjaak II.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Dec 29, 2017

@HGMuller : Thank you for the hint. I got Bilis and indeed it turned out to be significantly stronger than Sjaak II and Fairy-Max:

Rank Name                          Elo     +/-   Games   Score   Draws
   1 stockfish-mak-f364111         359     103      80   88.8%   15.0%
   2 Bilis_v1.0                    127      65      80   67.5%   32.5%
   3 sjaakii-1.4.1                 -61      60      80   41.2%   40.0%
   4 fairymax-5.0b                -174      62      80   26.9%   38.8%
   5 NebiyuAlien                  -185      55      80   25.6%   46.2%

200 of 200 games finished.

Again, Tc = 30 s + 0.3 spm, 1 Thread. This time Standard Chess adjudication was used.

@ianfab : I implemented a solution for Khon move offsets without changes to the base classes, so I can move on to the next topic: adjudication rules.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 1, 2018

I have implemented a first version of support for counting rules, but it can still be turned off via a UCI option. I have not made any evaluation adjustments yet, so it can only find the draw by resolving it in the search. In an example with two rooks (8/8/5k2/7p/8/6RR/3K4/8 w 0 1), it took about 0.1s for it to find that capturing the last pawn leads to a draw. For material configurations with higher move counts, that might not work that well.

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Jan 1, 2018

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 1, 2018

@HGMuller Only reducing the evaluation for endgames against the bare king would not work well in Stockfish without applying further changes since it only follows the strategy of driving the king to the corner if the weaker side has no material left and for a few specific material configurations. So it would fail to make progress in situations like 2 khon vs. pawn (e.g., 8/8/5k2/7p/6SS/8/3K4/8 w 0 1) if it does not capture the pawn.

I have written an experimental change where the evaluations of positions against the bare king are scaled by "number of remaining half-moves in counting" / 128, and where the general "KXK" endgame evaluation function is also applied to cases where the weaker side still has a pawn or a met. This seems to work well even in cases where it can not resolve mate from the initial position, e.g., the aforementioned 2 khon vs. pawn. It first drives the king towards the corner and only takes the pawn as soon as it finds mate within the required number of moves. So the first results look good, but I have not done much testing yet.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 4, 2018

I searched for an even stronger opponent than Bilis, so I tried Alisa which claims to be the strongest Makruk AI. I set up different levels in the browser (sharp and disciple) and mirrored the moves in XBoard to let it play against Stockfish (including ianfab/Makruk-Stockfish@d782b1f). I tried to use similar thinking times for Stockfish as it took for Alisa to make a move. The actual move times and https://trello.com/c/Ab465qHu/57-alisa-level suggest that the levels do not use any handicap except from the thinking time, but I do not know for sure. To take account of the speed handicap due to Alisa running with javascript in the browser, I gave Stockfish a time handicap in the last game, only using 10s for 40 moves, whereas the opponent used about 1s per move. To my surprise, Stockfish performed incredibly well and won all three games (all three playing white, since I did not find an option to play with black against Alisa in the browser).

Here is the PGN of the games:
stockfish-alisa.pgn.txt

In the opening, Stockfish's play looked a bit strange to me and it also was bad at predicting Alisa's opening moves. Starting from the middlegame Stockfish always seemed to outplay the opponent and usually correctly predicted the opponent's moves (apart from blunders).

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Jan 4, 2018

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 4, 2018

I also could not find any engine match results, that is why I wanted to test it. Due to their claim I simply considered it as a interesting candidate to be tested, and I thought that a dedicated Makruk engine that seems to be actively developed might indeed be stronger than Stockfish, since I expect that for a strategic variant like Makruk evaluation is very important, and apart from choosing reasonable piece values (from my almost non-existent experience with Makruk) I did not change much of Stockfish's (not endgame-specific) evaluation code.

I of course can not be sure that the browser version is at full strength, but as I mentioned above the move times and the information I found kind of suggest that this might be the case and that the only limitation of the browser version is that the window of possible move times is restricted from above and below (out of 15 levels/move-times only 5 from the middle seem to be available). A lot of speculation of course, but at least I have the feeling that I have a rough idea of its playing strength, since I played one more game with more significant time handicap where Stockfish lost. Now I can move on to improving Stockfish (if I find the time).

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Jan 5, 2018

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Jan 5, 2018

I am quite confident that Stockfish already is about 200 elos stronger than Bilis 1.0 .

Score of Stockfish 030118 64 BMI2 vs Bilis_v1.0: 134 - 7 - 59  [0.818] 200
Elo difference: 260.49 +/- 44.80

There is a native Windows version of Alisa. The developer calls himself peacedeveloper and older versions of Alisa can be found under different package names., e.g. Peace Thai Chess Master. This is a version from 2007:

ThaiChess/blackbox$ wine Alisa.exe

Alisa Black Box
 - Alice Project -
by
Akkaradech Sujanil
peacedeveloper@yahoo.com
http://www.peacedeveloper.cjb.net
------------------------------
Welcome to Alisa
------------------------------
uci
id name Alisa 1.02
id author Akkaradech Sujanil
uciok
ucinewgame
go movetime 1000
Need Registeration
@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 14, 2018

Thanks to @alwey's great work cutechess now supports Seirawan chess and Shatranj. @ppigazzini It would be very nice if you could create updated cutechess compiles, because I could then add these variants in fishtest to be able to test the respective Stockfish forks (Seirawan, Shatranj).

@ppigazzini

This comment has been minimized.

Copy link

@ppigazzini ppigazzini commented Jan 14, 2018

@ianfab build & test processes started.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 14, 2018

@ppigazzini Thanks.

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 15, 2018

The first tests for Seirawan chess and Shatranj after the worker update are looking good, so feel free to submit tests also for these variants. @ceebo Now that testing is more convenient and reliable, I will perhaps add a few regression tests for our previous development to check again that we did not introduce a regression anywhere.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Jan 15, 2018

@ianfab: Please note that cutechess-cli's ShatranjBoard is adjudicating draws after 70, not after 50 reversible moves

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 15, 2018

@alwey Thanks for the info. I saw it in your PR, but have not really kept it in mind. I do not have a preference for a certain number here since I guess no such rule (neither 50 nor 70) is historically known for Shatranj, so I will just adapt Stockfish to be consistent with the 70-move rule in cutechess.

@alwey

This comment has been minimized.

Copy link

@alwey alwey commented Jan 15, 2018

@ianfab :The draw rate might drop a bit, because there are many slow-moving pieces.
The fifty-move rule of chess is derived from shatranj, which had a seventy-move rule. https://en.wikipedia.org/wiki/Fifty-move_rule#History

@ianfab

This comment has been minimized.

Copy link
Collaborator Author

@ianfab ianfab commented Jan 15, 2018

@alwey Oh, I didn't know that. In that case I will certainly change it to 70 moves.

@Vinvin20

This comment has been minimized.

Copy link

@Vinvin20 Vinvin20 commented Apr 18, 2018

May be it's time to challenge Yasser Seirawan to a 10 games in his variation :-)
Is there a site where one can play Seirawan chess vs Stockfish ?
If that doesn't exist, I will be glad to manually operate Stockfish in Winboard and send move on site.
Which site does support SChess ? I know some sites where one can play Crazyhouse960 and another one RelayChess ...

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Apr 18, 2018

@Vinvin20

This comment has been minimized.

Copy link

@Vinvin20 Vinvin20 commented Apr 18, 2018

One point would be to promote Seirawan Chess with the help of Lichess broadcast.

But is it possible to do that ?

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Apr 18, 2018

I don't think LiChess supports S-Chess (or any variant with unorthodox pieces).

@ddugovic

This comment has been minimized.

Copy link
Owner

@ddugovic ddugovic commented Apr 18, 2018

winboard.nl works great (I've played on it before) especially using WinBoard/XBoard.

Pity that Tom's Live Chess Viewer (probably) doesn't support variants, so broadcast options (to reach the widest possible audience) would probably be to livestream the games.

@HGMuller

This comment has been minimized.

Copy link

@HGMuller HGMuller commented Apr 18, 2018

TLCV is also a dedicated client that has to be downloaded first, just like WinBoard. So in principle there is not much difference between running the game on an ICS and using WinBoard as client to view the games, or using TLSC to relay games played through a GUI and using TLCV to view them. Except that, indeed, TLCV does not support variants. And is almost impossible to set up due to firewalls and such.

I guess that to really reach a large audience you would need to use a browser-based solution; many people dislike having to download dedicated clients. In fact I have been working on the development of such a client, using my turn-based server and its JavaScript/HTML client as a viewing agent. The broadcaster then simply uploads the game move by move to that server (using a special password that allows it to submit moves for both players).

@ddugovic ddugovic closed this Aug 27, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
8 participants
You can’t perform that action at this time.