[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]
Comments/Ratings for a Single Item
I started this thread to discuss the possibility to conver standard
software for Internet Chess Servers (such as used by FICS and ICC) to
support a broader variety of Chess variants.
On the Source-Forge website I found a piece of software called 'chessd'.
This is an open-source ICS program. According to Wikipedia it is the one
that FICS uses. It is coded in plain C.
I inspected the code. Most of the server tasks are completely game
independent, and involve managing the list of players, their logging in,
the updating of their ratings, the mechanism by which they seek opponents
for games, etc. The game-dependent code seems to be concentrated in 3
program files (plus the corresponding header files), for so far I could
locate it:
board.c
algcheck.c
movecheck.c
The code in these files occupies itself with parsing input moves,
initializing and updating the game state (board, holdings, 50-move
counter, castling rights), and printing the game state (as boards in
varous formats, or move lists). Everything is hard-coded in these files:
the size of the board, the piece types. For every piece type there is a
dedicated routine to generate its moves.
I would like to add fields 'files' and 'ranks' to the game state, and
have the code use these in every place here it no uses '8' as the board
end. And then add a table that initializes these variables when etting up
the board for the chosen variant. (Chessd does already support variants,
but they are all on 8x8, and all with only orthodox pieces. Bughouse is
supported, which means there already is code to update holdings, and link
games together to a team match. So the variant is already kept track of,
making it relatively easy to choose pieces and board format and array in a
variant-dependent way.)
I would like to replace all code to generate piece moves by a single,
table-driven move generator, that should at least be able to handle
arbitrary leapers, sliders/riders and their compounds. Basically
everything that Fairy-Max supports, and perhaps much more.
The system to represent one piece by a single letter is deeply engrained
in the protocol, so it might be necessary to implement a variant-dependent
translation of letters <-> piece types.
It al looks doable, although a bit tedious, as I have to go through the
entire code using visual inspection to recognize loops over rank or files,
and decide how to generaize them.
What I would like to know from people of this site, is which variants (and
by inference, which pieces) should best be included. Preferably variants
without any un-chesslike rules. I don't want to start too ambitiously,
and limit the initially supported variants to those that fall into a
general pattern. So preferably no pieces with weird side effects, such as
immobilizers, or pieces whose allowed moves depend on their positon on the
board, or on proximity of other piece types, or on the history of the game.
Divergent pieces are OK, hoppers like Cannon and Grasshopper are OK, Falcon
would be OK.
What variants would be suitable, within those boundary conditions? My
personal favorites would be Knightmate, Shatranj, Courier, Shogi,
Capablanca, Unspeakable, some subsets of Superchess&Monarch (because
WinBoard, which is an ICS cient, already supports all those).
There was MEWIS , it generally supported all the chess variants in FICS , plus Shatranj , Makruk, and .. emm .. I dunno . There are also the ICC variants : Kriegspiel , TwoKings .. etc If I developed a server , I would start with the variants supported at SchemingMind.com ...
I have problem compiling cheesd. Let's see, I will inform any progress.
OK, great that you are contributing to the effort! I have not tried to compile yet. I am just trying to find my way around through the code, learning which tasks are done in which source files. And I am already converting the game-specific code where I am sure it has to be converted, making board width and height variables.
OK, I claered up a lot of the confusion I was subject to. It seems that I had been downloading the chesd C sources from a location that described an entiely different, PHP-based server also called chessd... I have found a chessd version now which is called Lasker-2.2.3, which does include a correct description to install it. Indeed I had problems compiling it: apprently the Ubunt compiler is more strict than the one Lasker was developed with. So you get compiler errors. All errors are basically the same: some global vaiable is delared as 'satic ...', while it is in the included header file as 'extern ...'. Apparently, this is no longer allowed. I cold solve it by simply deleting all the offending 'static' keywords (in 5 different source files occurs one, IIRC). After that it compiled. You have to be superuser to do the 'make install', something the README fails to mention. But then there were no more poblem, and I could run the server according to the instructions, and login on it from another computer on my intrnal network. Looks just like FICS, except the place is deserted, so you have no opponents! ;-) So I guess I will start hacking this one, to expand the board size, and add some more piece types.
Thanks. I have downloaded lasker-2.2.3. Have not compiled it yet, as it is showing problems with static etc. But that should be fixed following your previous post. Non-root installation can probably be done using configure --prefix=DIR name.
I made a lot of progess with the Lasker server. I now have a version that
supports (next to normal Chess) the unspeakable variant and Knightmate. I
will leave it running on my laptop overnight (which will amount to
approximately 6:00 pm to 2:00 am EST), so that people interested in it can
try it out (by logging in as 'guest'). You might have to login twice, and
play yourself, though; there will probably not be many visitors.
The server works just like FICS. To start a knightmate game of 5 min +
3sec/move you would have to type:
match unrated 5 3 knightmate 1
where is the name ('handle') of someone else logged in at
that time. (You can see who is logged in by the 'who' command.) Don't
bother to challenge 'admin', as that is me, and I will be sleeping! :-)
You can substitute 'knightmate' with the 6-letter name of the variant
whose mentioning is not allowed on this website, to play that.
You can play through an ASCII client like 'telnet', but the ASCII board
styles (selectable by 'style N', N=1-8) are not yet fully adapted to
10x8 boards. (You will see all pieces, but any auxiliary board lines will
be too short, and the files will be labelled incorrectly.) The IP address
of the server is 80.100.28.169 and the port is 5000. So to connect by
telnet from the command lne you would have to type:
telnet 80.100.28.169 5000
To play graphically, you should download the WinBoard client I adapted for
understanding the ICS protocol extension to non-8x8 boards. You can
download this from
http://home.hccnet.nl/h.g.muller/ICSclient.zip
unpack and save the 'ICSclient' folder in it into your C:/Program Files/
folder. There are shortcuts in there to connect to the server. Just click
them, and you will see WinBoard appear with an window were you can
communicate in text with the server. You have to login, and issue and
accept challenges through that window. Once you start a game, WinBoard
will kick in, and you will see the moves of your opponent in its board
display, and can enter moves there by dragging and dropping the pieces,
until the game ends. With 'observe ' you can view ongoing
games between others in the WinBoard display.
On a more general note: the current Lasker server is configured w.r.t. the
variants you can play on it through files in subdirectories of its
installation, called data/boards//, where and
are the names you have to type in the 'match' command to start
the game. This because the server author's idea of a variant was a normal
Chess game (i.e. orthodox rules and pieces) starting from a non-standard
opening position. The above mentioned files then contain a description of
the opening setup, as a list of piece types and square names for each
color.
I think this general idea (of having a file describing each variant name
you could type) is not bad. But it must of course be able to describe more
than just the initial position. It basically must be able to describe the
entire game.
I would like to invite a discussion on how best to do that. If left on my
own (without any knowledge of other existing formats) I would at the very
least put in a mechanism to (re-)define pieces using Betza(-like)
notation, e.g. A=(BN) S=(WfF) would define the Archbishop as A and Silver
General as S, while P=(mfFcfW) would re-define P as Berolina Pawn. In
addition some keywords to set parameters must be recognized, such as ranks
on which Pawns are allowed to make double moves, which castling type is
used, etc.
Ok, let me jump in with my old open standards discussion. Why don't we work to get as many types of abstract strategy games as possible covered by this expansion project, instead of just 'some more chess variants'? We are back to standardized communication protocols here again by discussing this. Do this right and people can write different components that would work together.
H.G Muller, It is very encouraging that you are making progress. Like to try out your server sometimes.
Instead of Gothic Chess why not put Embassy Chess ? or Grand Chess ? They're already being played in BrainKing.com ? (And , certainly , have more players than Gothic Chess.)
The idea is to support them all. But I have to develop a way to configure the server for which variants to support. Perhaps the logical way to do it would be to group them all under the category 'capablanca', and then have sub-categories ('boards') for 'capablanca', 'embassy', 'carrera', etc. The server currently triggers on the category name for deciding what board size to use, becaue that ws the easiest way to do it for a quick pilot experiment. I want to change that by something in the files that describes the position, e.g. board=10x8. The server code could then be completely oblivious of which variant uses which board. The same for other rules.
Last night I did another trial run with the server. This time I found out how to suppress the auto-logout feature (which logs out users after a certain idle time), so that the Fairy-Max bot could stay on-line for the entire night. It played one game of Gothic Chess against a Human, two games of Capablanca Chess against a computer opponent, and a lightning and standard game of normal Chess against another computer opponent. On my internal network I was able to play some Carrera, Embassy and Bird Chess games against it, as well as Knightmate. So indeed, Embassy, Carrera, Bird, Capablanca are now all supported, as different setups of the variant Capablanca. As for the variants to offer in the future, I do think that this is an area where a greater framework similar to IAGO Chess could actually be useful. To get orthodox Chess players to play the variants, I think it would be useful to educate them in small steps. So I actually would like to offer a number of modest variants, introducing only a single unorthodox piece. For instance: 8x8 Janus ( (BN) replaces Q ) 8x8 Chancellor ( (RN) replaces Q ) 8x8 Amazon ( (QN) replaces Q ) 8x8 Centaur ( (KN) replaces Q ) Synode ( 10x8 board with 4 Bishops per side ) Cannon Chess ( Pao replaces Pawns on b2/7 and g2/7 of 8x8, no castling ) Janus Chess Chancellor Chess (with 2 (RN) on 10x8 ) Capablanca Chess (with many sub-variants differing in opening array) Xiangqi Shatranj 8x8 Heian Shogi (Silver replaces Bishop, Gold replaces Queen, no drops) 9x8 Heian Shogi (same, but with 2 Gold Generals in symmetric setup) Crazyhouse Shogi Superchess (with pieces from the set (KN),(BN),(RN),(QN) randomly replacing some of the pieces of a normal FIDE array) Superchess II (similar, but with a larger variety of unorthodox pieces) Of course there could be training bots as well: 'wild' games where you have to checkmate a bare King with a (BN) or a Commoner.
Muller, if you're interested in implementing modest variants, have a look
at my creations, because I have specialized in them. Standard board and
pieces with only one external non-standard piece are used in
Accessory Chess and in my Alternative Chess. In these two zrf:s you
can try ten or more alternative piece types.
In Winther's Chess, Basilisk Chess, Culverin Chess, and Perier Chess
I use different types of cannons. The method of introduction
is very important. It always involves a pawn relocation. This method
of introducing an external piece is ideal while there exists an
incitement to introduce the piece early, and it's possible to calculate
where the opponent will drop his piece. Dropping weakens the pawn
chain so it's not cost-free. The many criteria for dropping makes the
opening play more natural. Note that in some variants the pawn is
relocated one step and in some two. The external piece is introduced
on the first or second rank, depending on piece type. These are
importantant factors to get a natural opening play. It's often better
to introduce cannons on the first rank, otherwise they will dominate
the opening play. There are several other modest variants, too, on
my chess variants page.
/Mats
at my creations, because I have specialized in them. Standard board and
pieces with only one external non-standard piece are used in
Accessory Chess and in my Alternative Chess. In these two zrf:s you
can try ten or more alternative piece types.
In Winther's Chess, Basilisk Chess, Culverin Chess, and Perier Chess
I use different types of cannons. The method of introduction
is very important. It always involves a pawn relocation. This method
of introducing an external piece is ideal while there exists an
incitement to introduce the piece early, and it's possible to calculate
where the opponent will drop his piece. Dropping weakens the pawn
chain so it's not cost-free. The many criteria for dropping makes the
opening play more natural. Note that in some variants the pawn is
relocated one step and in some two. The external piece is introduced
on the first or second rank, depending on piece type. These are
importantant factors to get a natural opening play. It's often better
to introduce cannons on the first rank, otherwise they will dominate
the opening play. There are several other modest variants, too, on
my chess variants page.
/Mats
I had visited your website before, but the sheer quantity of variants presented there discouraged me from examining them in detail. One thing that in my view makes the variants less modest is the way the gating in of the pieces in hand. I also dislike this in Seirawan Chess, it is a new element that is definitely not standard in any major variant, where all participating pieces are normally on the board from the start. IMO this is a much more alien step than playing on a wider board. The Superchess solution for this, which simply substitutes an orthodox piece for an unorthodox one before actual play starts, seems much more natural to me. This is partly driven by laziness: implementing gating requires all kind of additional code to be added to the server and graphical client, (to allow pieces to appear in vacuated squares), while the other thing can be simply implemented by adding a file in the directory of initial positions.
H.G. Muller, Is it possible to download the source code of your server?
I put the source of the lasker-2.2.3 server as I hacked it so far at: http://home.hccnet.nl/h.g.muller/capablanca.tar.gz You might have to remove the autoconfig.h before you configure for your system as described in the README file in the lasker-2.2.3 directory.
Muller, standard chess also introduces pieces from outside, namely by
promotion. In Japanese Chess, dropping pieces is an essential aspect. In
Burmese Chess (Sittuyin) pieces are introduced by a similar way of
pawn relocation as I employ. The idea to introduce pieces from
outside is not alien to chess. One of the most popular chess variants
among club players is Bughouse, which
uses wild piece drops.
/Mats
promotion. In Japanese Chess, dropping pieces is an essential aspect. In
Burmese Chess (Sittuyin) pieces are introduced by a similar way of
pawn relocation as I employ. The idea to introduce pieces from
outside is not alien to chess. One of the most popular chess variants
among club players is Bughouse, which
uses wild piece drops.
/Mats
I added crazyhouse to the server, and made it such that the initial position is printed together with a move list, in games that were not starting from the default opening position. This latter feature now allows correct implementation of shuffle variants, and I am working on implementing Chess960. (For this, I have to add more liberal castling styles to the move generator and checker.) My current plan is to make the server configurable for a wide range of variants by supplying game-definition files. The original design was already using this system, but the files could only describe an (8x8) board setup, while the rules were immutable. I want to make it possible to write some extra lines in those files, defining other game parameters. So far I already did this for the board format, and some flags I implemented in the server to tell it if captured pieces should go into the holdings (and if their color should be flipped before doing so), and if drops from the holdings are allowed. I also want to add options for setting the castling style (none, normal, wild, Fischer, free). Currently I also have a flag which indicates if the Capablanca pieces are allowed as promotion choice, represented by the hard-coded letters A and C. But in the future I would like to handle piece types in a different way. Each variant must be able to define its own piece set, and the letters by which they will be indicated in the board and move representation. In particular, I am looking for ideas how to describe a nonstandard piece, in a way that is easy to understand and apply by the move generator. Betza notation could be one way to do it, although I am not sure how to describe lame leapers in it. Pieces whose move depends on their position on the board (the Xiangqi palace and river contsrains being a simple example of that) are also problematic. Pieces with side effects, such as catapult pieces, pose an even larger challenge. Are there any suggestions on how this could be done?
19 comments displayed
Permalink to the exact comments currently displayed.