1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422
|
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\"
Note the extra backslashes: these are essential, because the
shell will strip them from the command before passing it to
XBoard, and XBoard needs to see the quotes (which would
otherwise be stripped by the shell as well), because only within
quotes it will recognize the \n as a linefeed.
-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
|