Check out Janggi (Korean Chess), our featured variant for December, 2024.


[ Help | Earliest Comments | Latest Comments ]
[ List All Subjects of Discussion | Create New Subject of Discussion ]
[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]

Comments/Ratings for a Single Item

Earlier Reverse Order Later
[Subject Thread] [Add Response]
H. G. Muller wrote on Tue, Nov 4, 2008 07:43 PM UTC:
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).

Abdul-Rahman Sibahi wrote on Tue, Nov 4, 2008 08:02 PM UTC:
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 ...

pallab basu wrote on Wed, Nov 5, 2008 03:06 PM UTC:
I have problem compiling cheesd. Let's see, I will inform any progress.

H. G. Muller wrote on Wed, Nov 5, 2008 03:23 PM UTC:
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.

H. G. Muller wrote on Fri, Nov 7, 2008 01:42 PM UTC:
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.

pallab basu wrote on Sat, Nov 8, 2008 06:34 AM UTC:
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.

H. G. Muller wrote on Tue, Nov 11, 2008 07:24 PM UTC:
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.

H. G. Muller wrote on Tue, Nov 11, 2008 07:48 PM UTC:
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.

Rich Hutnik wrote on Tue, Nov 11, 2008 11:04 PM UTC:
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.

pallab basu wrote on Tue, Nov 11, 2008 11:15 PM UTC:
H.G Muller,
It is very encouraging that you are making progress. Like to try out your
server sometimes.

Abdul-Rahman Sibahi wrote on Wed, Nov 12, 2008 02:45 PM UTC:
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.)

H. G. Muller wrote on Wed, Nov 12, 2008 04:32 PM UTC:
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.

H. G. Muller wrote on Tue, Nov 18, 2008 09:15 AM UTC:
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.

M Winther wrote on Tue, Nov 18, 2008 01:57 PM UTC:
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

H. G. Muller wrote on Tue, Nov 18, 2008 04:44 PM UTC:
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.

pallab basu wrote on Tue, Nov 18, 2008 08:57 PM UTC:
H.G. Muller, 
Is it possible to download the source code of your server?

H. G. Muller wrote on Tue, Nov 18, 2008 10:09 PM UTC:
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.

M Winther wrote on Wed, Nov 19, 2008 05:08 AM UTC:
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

H. G. Muller wrote on Sun, Nov 23, 2008 11:28 AM UTC:
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

Earlier Reverse Order Later

Permalink to the exact comments currently displayed.