Zippy README file For version xboard/WinBoard 4.2.4 and later only ----------------------------------------------------- Zippy is a program that lets GNU Chess act as a computer player on an Internet Chess Server. It also works with Crafty. Zippy is unsupported, experimental code. Zippy is based on XBoard, a graphical interface to GNU Chess and to the ICS for the X Window system on Unix. Zippy consists of exactly the same code as XBoard, plus one extra module that ties together the otherwise-separate functions of talking to GNU Chess and talking to the ICS. Zippy is included in the XBoard distribution. There is also a version of Zippy that is based on WinBoard, a port of XBoard to Win32 (Microsoft Windows NT and Windows 95). WinBoard does *not* run on Windows 3.1 or 3.11, not even with Win32s. In versions 3.5 and later, the Zippy code is included in WinBoard.exe. If you use Zippy, I ask you to do the following: - Don't expect fast response if you send me mail about problems. It might take weeks for me to get back to you, or I might answer right away. Try to solve problems yourself before you mail me about them. Try asking someone who is actively running a Zippy-based player on ICC or FICS for help getting started. Mail me only if you get stuck. - Be honest. Tell the admins of whatever ICS you use that your player is a computer, so that it gets put onto the computer list, and follow the ICS computer policies. On ICC these are in "help computer"; read this file and abide by what it says. - If you want to interface some other chess program to ICS, feel free to start with this code. Some documentation is in the file engine-intf.html in the distribution. - Please do not use the -zt flag to have your program shout Zippy the Pinhead sayings (or other things that my Zippy shouts). One pinhead per server is plenty, and I'd like to keep the franchise. Feel free to use -zt to have your program shout some other kind of sayings if you like. Some of the jokes that Zippy shouts on ICC came from ftp://ftp.cco.caltech.edu/pub/humor. The poetry came from Project Gutenberg; try http://www.cs.cmu.edu/Web/booktitles.html as a starting point. You might find other suitable material at these sites. Prose tends to work poorly because it is dull when shouted in isolated 250-character chunks. --Tim Mann http://www.tim-mann.org/chess.html * * * Unix: To build the Zippy version of xboard, on most systems just do: configure --enable-zippy make Windows: WinBoard.exe (versions 3.5 and later) includes the Zippy code. There is no longer a distinct WinZippy.exe. In both xboard and WinBoard, the Zippy features are off by default. You can activate them with two new resources/command line options, and you can fine-tune them with some new environment variables, all described below. You will probably want to make a shell script or Windows .BAT file that sets the environment variables you want to use and invokes Zippy with the right command line options for your situation. Some examples are at the bottom of this file. If you have problems building or running Zippy, see the rest of the xboard documentation: INSTALL documents the configure program, while READ_ME and xboard.man (or xboard.txt) document xboard itself, and WinBoard.hlp documents WinBoard. FAQ answers some frequently asked questions. The file engine-intf.html contains some information about the interface between xboard/WinBoard and GNU Chess (or other chess engines). =========== NEW OPTIONS =========== -zippyPlay True/False or -zp/-xzp If zippyPlay is set to True, when xboard is in -ics mode, it will interface a chess engine to the ICS instead of letting you play. You must also set -ics when you use this mode. In zippyPlay mode, xboard blindly issues an accept command for every (well, almost every, see below) challenge it gets, without remembering anything about the challenge afterwards. This means that often it will get several challenges very close together and try to accept them all! ICS gives an error message for every accept command after the one that actually starts a match, but xboard just happily ignores the message. xboard doesn't actually start the chess engine playing until the first board image comes in from ICS. The getMoveList option controls how adjourned games are continued. If it is True (the default), xboard fetches the move list from ICS and feeds it into the chess program before having the program start play. If False, xboard feeds the current position into the chess program and has it start from there. The latter option gets the program going sooner, but can cause problems with detection of en passant legality, castling legality (if a king or rook has moved and then returned to its home square), draw by repetition, and draw by the 50 move rule. In zippyPlay mode, colorization in the ICS interaction window, and the sounds corresponding to colors in that window, do not work. zippyPassword and related features (see below) capture the tells, etc., before they can be matched by the color/sound code. -zippyTalk True/False or -zt/-xzt If zippyTalk is set to True and xboard is in -ics mode: (1) It will reply to anything said to it with a saying (if there is a file of sayings in its working directory). This includes channel tells and shouts where its name is mentioned. Some things it says to opponents in specific situations will also be made Zippy-ish; you might want to change that. See zippyLines below for the file format. (2) If a player XXX in your notify list logs on, xboard sends the command "greet XXX" to ICS and tells XXX something from its sayings file. You can alias this to whatever you like. If XXX is censoring you, he is automatically removed from your notify list. (3) If a player XXX in your notify list logs off, xboard sends the command "farewell XXX" to ICS. You can alias this to whatever you like. Note that the player is already gone, so telling him something is futile. If zippyTalk is on, colorization in the ICS interaction window, and the sounds corresponding to colors in that window, do not work. The reply feature captures the tells, etc., before they can be matched by the color/sound code. In both -zp and -zt modes, if admin X spoofs Zippy, Zippy sends the command "spoofedby X" to ICS. You can alias this to something if you want; otherwise it will produce a harmless error message. -zippyPinhead string In zippyTalk mode, if user XXX shouts anything containing this string, xboard sends the command "insult XXX" to ICS. You can alias "insult" to whatever you like. This feature is disabled if the option is not set. -zippyPassword string If someone does an ICS "tell" to xboard that begins with this password, it will type the same string back as a command with the password stripped off. For example, if the password is !%%! and xboard sees the string "Darooha tells you: !%%!shout Hi there", it will type the command "shout Hi there" to the ICS. This feature is disabled if the option is not set. -zippyPassword2 string If someone does an ICS "tell" to xboard that begins with this password, it will send the same string directly to the chess engine with the password stripped off. This feature is disabled if the option is not set. Use with caution. -zippyWrongPassword string This is a joke feature. If player XXX does an ICS "tell" to xboard that begins with this password, it will send the command "wrong XXX" to ICS. ICS does not define a "wrong" command, but you can alias it to whatever you like. The feature is supposed to be used after you've changed the zippyPassword, so that people who knew the old password get a funny message. Disabled if not set. -zippyUseI True/False or -zui/-xzui If this option is true, Zippy's shouts use the "i" command with funny verbs; otherwise they use the "shout" command. Default is true. The variable is automatically set to false if the "i" command is disabled on ICS by the admins. -zippyLines filename Name of the file Zippy looks in for sayings when -zt is set. Default: yow.lines. File format: There must be a single ^ character or null character (control-@, ASCII code \000) after each saying. Sayings can have newlines in them; Zippy will remove them. Sayings can be at most about 250 characters; longer ones will be ignored. The first saying in the file is never used; you should put a comment there. If you have only one or two sayings in your file, Zippy may get into a loop trying to choose one. Zippy chooses a saying by seeking to a random character position in the file, skipping ahead to the *next* null character, and printing the saying that starts there. If it hits end of file without finding a new saying, it tries again. Yes, this is a dumb algorithm. -zippyAcceptOnly string Normally, Zippy automatically accepts challenges from all opponents. If this option is set to an ICS login name, Zippy will auto-accept challenges only from that opponent. Set the option to an invalid name like "0" if you don't want Zippy to auto-accept any challenges. You can still accept challenges manually. Setting this option also suppresses the zippyGameEnd feature described below. Default: not set. -zippyNoplayCrafty True/False or -znc/-xznc If this option is set to True, if Zippy's opponent kibitzes "Hello from Crafty" within the first couple of moves, Zippy will abort the game and add the opponent to his noplay list. Default: False. -zippyGameStart string At the start of each game Zippy plays (including resuming from adjournment), it sends this string to ICS, followed by a newline. If the option is not set, nothing is sent. -zippyGameEnd string At the end of each game, Zippy sends this string to ICS, followed by a newline. If you do not set this option, the string "gameend" is sent. This is not a legal ICS command, but you can alias it to whatever you like, or you can leave it undefined, which will cause ICS to print a harmless error message after each game. If you want to send more than one command at the end of the game, on ICC you can alias gameend to a "multi" command (see the ICC help files), but on FICS that does not work. Instead, use the -zippyGameEnd option to have a string of several commands sent, with newlines in between. For example, you could give WinBoard the command line option -zippyGameEnd='say thanks\nseek 5 0\nseek 2 12\n' You could give xboard the command line option -xrm '*zippyGameEnd: say thanks\nseek 5 0\nseek 2 12\n' -zippyAdjourn True/False or -zadj/-xzadj Zippy will allow its opponent to adjourn if this option is set to true. Default: False. -zippyAbort True/False or -zab/-xzab Zippy will allow its opponent to abort if this option is set to true. Default: False. -zippyVariants string Zippy will decline to play chess variants unless their names (as given in engine-intf.html) are listed in this option. Default: "normal". Example: "suicide,losers,bughouse,normal". Obviously, zippyVariants other than "normal" will work only if your chess engine can play those variants. GNU Chess certainly cannot, but there are some suicide and bughouse engines available. While playing bughouse, Zippy passes certain extra information on to the engine; see engine-intf.html. -zippyBughouse int This option controls how Zippy handles bughouse partner requests. If zippyBughouse is set to 0, Zippy will decline any offers of partnership and tell the offerer that it cannot play bughouse. If zippyBughouse is set to 1, Zippy will decline offers, but you can make Zippy your partner by having *it* offer *you* partnership (by using zippyPassword or typing directly into its window). If zippyBughouse is set to 2, Zippy will accept all offers of partnership, even if it already has a partner. zippyBughouse must be at least 1 for partner tells to be relayed to the engine with the ptell command. -zippyMaxGames int -zippyReplayTimeout If zippyMaxGames > 0, Zippy will play at most the given number of consecutive games against the same opponent. Thereafter, Zippy will decline all challenges from that opponent (with an explanatory tell) until either someone else has played or zippyReplayTimeout seconds have elapsed. Defaults: zippyMaxGames=0, zippyReplayTimeout=120. Note: If you use these options and you have Zippy doing seeks, be sure to include the "m" flag in the ICS seek command. If you use "seek m", when a player responds to the seek, the ICS gives Zippy a challenge that it can either accept or decline. If you use a seek without the "m" flag, the ICS immediately starts a game between Zippy and the first opponent to respond, giving Zippy no choice about whether to accept or decline. -zippyShortGame int If zippyShortGame > 0, Zippy will decline all challenges from an opponent that terminated a game before the given number of ply (with an explanatory tell) until either someone else has played or zippyReplayTimeout seconds have elapsed. Do not set the number of moves to large; the number of ply during which opponents can abort a game without rating change would be a good setting. Default: zippyShortGame=0. ===================== ENVIRONMENT VARIABLES ===================== For backward compatibility with version 4.0.2 and earlier only, most of the command line options listed above can also be set as environment variables. For boolean options, use 0 for false, 1 for true in the corresponding environment variable. The following environment variables are supported.: ZIPPYPINHEAD, ZIPPYPASSWORD, ZIPPYPASSWORD2, ZIPPYWRONGPASSWORD, ZIPPYUSEI, ZIPPYLINES, ZIPPYACCEPTONLY, ZIPPYNOPLAYCRAFTY, ZIPPYGAMESTART, ZIPPYGAMEEND, ZIPPYADJOURN, ZIPPYABORT, ZIPPYVARIANTS, ZIPPYBUGHOUSE Warnings: (1) If both the command line option and the corresponding environment variable are set, the environment variable takes precedence! (2) Some of the environment variables have names that are too long for Solaris 2.5's /bin/csh. Use the command line options instead. (3) Newer options DO NOT have environment variables. If you don't see it in the list above, it doesn't exist. (4) In the future the environment variables may go away entirely. It would be a good idea to stop using them now and switch to the command line options. You may also want to customize other things by editing zippy.c and recompiling the program. ===================== ICS VARIABLE SETTINGS ===================== You need to do the following settings on ICS: set highlight 0 <-- I'm not sure this is still needed set oldmatch 0 set examine 0 If you want to use the zippyPassword remote-control feature, it's a good idea to do the following, so that commands you give Zippy won't be truncated because the ICS wrapped a "tell" to a new line: set wrap 0 <-- on ICC, or set width 255 <-- on FICS You will probably want to turn on server-side autoflagging too: set autoflag 1 ====== SIMULS ====== It has been discovered that Zippy can play simuls on ICC (but not on FICS). If you arrange for Zippy to send the ICC command "simulize" in the -zippyGameStart string, it will accept additional games while playing. Zippy will use the same engine for every game, so whenever it switches opponents, the engine's state will be reset with the "new" command. This will of course weaken its play, so don't enable simuls if you want your engine to have the highest possible rating. Zippy was never designed to work with simuls; it just works by accident, and it hasn't been tested much. So please report any bugs you notice, but don't expect them to be fixed rapidly. Be sure to use xboard/WinBoard 4.2.4 or later for simuls, because some obscure bugs are fixed in that version that affect starting a game in the middle (as with resuming from adjournments or switching opponents in a simul). As noted under -zippyPlay above, you should have -getMoveList on to ensure that the engine knows the game history after switching boards and thus handles draw by repetition and by the 50-move rule correctly. It should, however, also work to turn off this option to speed things up and reduce network bandwidth, if you don't mind the engine occasionally failing to see draw possibilities. Unfortunately, though, with Crafty 18.3 (and probably other versions too) as the engine, users trying this have experienced Crafty crashes. This looks to me like a Crafty bug, but I wasn't able to reproduce it, so it remains a mystery. ======== EXAMPLES ======== Here are some small example command lines. You may want to use more options; see the man page, info file, or help file, and perhaps the FAQ file too. You may want to put the command line into a Unix shell script or Windows .BAT file, which is simply a text file of commands. On Unix, turn on execute permission for the file (chmod a+x file); on Windows, give it the extension .BAT. You can then run it just like an ordinary program. Please do not ask me questions about how to make a shell script or .BAT file; these are not functions of xboard/WinBoard, but basic operating system features that you can learn about from introductory books, friends, teachers, or the online help for your system. The examples below should be more than enough to get you started. Unix command lines: # xboard + GNU Chess on chessclub.com xboard -zp -ics -icshost chessclub.com -icshelper timestamp \ -zippyPassword beer # xboard + GNU Chess on freechess.org xboard -zp -ics -icshost freechess.org -icshelper timeseal \ # xboard + Crafty on chessclub.com xboard -zp -ics -icshost chessclub.com \ -fd /home/crafty -fcp crafty -icshelper timestamp \ -zippyPassword beer # xboard + Crafty on freechess.org xboard -zp -ics -icshost freechess.org -autoflag \ -fd /home/crafty -fcp crafty -icshelper timeseal \ -zippyPassword beer Windows command lines: REM WinBoard + GNU Chess on chessclub.com WinBoard -zp -ics -icshost chessclub.com -fcp GNUChess -icshelper timestamp -zippyPassword beer REM WinBoard + GNU Chess on freechess.org WinBoard -zp -ics -icshost freechess.org -fcp GNUChess -icshelper timeseal -zippyPassword beer REM WinBoard + Crafty on chessclub.com WinBoard -zp -ics -icshost chessclub.com -fd C:\Crafty -fcp WCrafty -icshelper timestamp -zippyPassword beer REM WinBoard + Crafty on freechess.org WinBoard -zp -ics -icshost freechess.org -fd C:\Crafty -fcp WCrafty -icshelper timestamp -zippyPassword beer