Provided by: mah-jong_1.17-1_amd64 bug

NAME

       xmj, mj-server, mj-player - programs for playing Mah-Jong

SYNOPSIS

       xmj [--id idnumber]
                [--server address]
                [--name playername]
                [--connect]
                [--show-wall | --no-show-wall]
                [--size N]
                [--animate | --no-animate]
                [--tileset directory]
                [--tileset-path directory-path]
                [--dialogs-popup | --dialogs-below | --dialogs-central]
                [--use-system-gtkrc | --no-use-system-gtkrc]
                [--gtk2-rcfile file]
                [--echo-server]
                [--pass-stdin]
                [--monitor]

       mj-server [--server address]  [--timeout seconds]
                [--pause deciseconds]
                [--random-seats | --id-order-seats]
                [--disconnect-penalties N1,N2,N3]
                [--end-on-disconnect]
                [--exit-on-disconnect]
                [--save-on-exit]
                [--option-file file]
                [--load-game file]
                [--no-id-required]
                [--no-manager]
                [--auth-basic id:password]*4
                [--debug]
                [--logfile file]
                [--no-special-scores]
                [--seed N]
                [--wallfile file]
                [--hand-history]
                [--nohist]

       mj-player [--id idnumber] [--name playername]
                [--server address] [--password password]
                [strategy options]

DESCRIPTION

       A set of three programs to play Mah-Jong on Unix systems, against people or programs, over the Internet.

       mj-server
              is  the  program  that  handles  communications and control of the game; the rules and scoring are
              enforced there. Players, human or computer, connect to a server via the network.

       mj-player
              is a computer player. At present, it is fairly simplistic, having only offensive tactics  with  no
              knowledge of defensive play.

       xmj    is the X client for human players.

QUICK START

       If  you don't want to read this long document: to start a game against three computer players, start xmj,
       select "New local game..." from the "Game" menu, and click "Start Game".  (Wait  about  ten  seconds  for
       everything to start up.)

OPTIONS

   All Programs
       --server address
              specifies  the  network  address  to listen on (for mj-server) or to connect to (for mj-player and
              xmj).  If address contains a colon, it specifies an Internet socket,  and  should  have  the  form
              host:port  . If address does not contain a colon, it is interpreted as a Unix file name and a Unix
              socket is used.  The default value for address is  localhost:5000 .  address can also be set in  a
              dialog box in xmj.

   xmj and mj-player
       --id idnumber
              The  server assigns a unique integer ID (which is currently just 1 to 4 in order of connection) to
              each player. This ID should be quoted when reconnecting to a game in progress (after, for example,
              losing a network connection or accidentally killing xmj). The default ID is 0,  which  denotes  no
              pre-assigned ID.

       --name name
              Players can give themselves names which will be used by client programs. This option specifies the
              name.  For  xmj, the default is the value of the environment variable LOGNAME, or failing that the
              username of the logged in user. For mj-player, the  default  is  "Robot(PID)"  where  PID  is  the
              process id.

   xmj
       --connect
              By  default, xmj does not automatically connect to a server, but waits for the user to connect via
              a menu. If this option is specified, xmj immediately connects.

       --show-wall
       --no-show-wall
              Tells xmj (not) to display the wall. By default, the wall is shown only if running on a big enough
              screen. This option is also controllable via the Display Options preference panel.

       --size number
              This option adjusts the size of the main window. It should be thought of as the length of  a  tile
              rack,  measured  in  tiles.  The  default,  and  the largest value accepted, is 19, or 18 if on an
              800x600 display. The smallest usable value is 14. This option is also controllable via the Display
              Options preference panel.
              If the --show-wall option is given, a --size smaller than 19 will have no effect.

       --animate
       --no-animate
              This option switches on (off) some animation. Not all tile movements are animated: only those that
              involve moving tiles to or from a hand from outside. This option  is  also  controllable  via  the
              Display Options preference panel.

       --tileset directory
              xmj  needs pixmaps to display the tiles and the tong box.  This option tells it which directory to
              find them in.  The default is set  at  compilation  time;  the  default  default  is  to  use  the
              compiled-in tiles.

       --tileset-path directory-path
              This  gives a colon-separated (or semicolon-separated under Microsoft Windows) list of directories
              in which to look for the directory named by the --tileset option.

       --dialogs-popup
              By default, most of the dialog boxes for player actions are part  of  the  main  window.  If  this
              option is used, they will instead appear as separate transient windows.

       --dialogs-below
              By  default,  dialog  boxes  appear  in the centre of the table.  If this option is given, dialogs
              (apart from some popups) are positioned below the table area. Please let me know which  style  you
              prefer!

       --dialogs-central
              The  default: dialog boxes appear in the middle of the table.  These options are also controllable
              via the Display Options preference panel.

       --gtk2-rcfile file
              If xmj is compiled with GTK+2, this option specifies a GTK rc file  to  be  used  instead  of  the
              program's  compiled-in  style  file. This may be used to change the appearance of the program. See
              description under the Display Options... panel for more details. The file should  be  an  absolute
              filename;  if  it  is  relative,  it will be sought in the current directory (Unix) or the program
              directory (Windows). This option is also controllable via the Display Options preference panel.

       --use-system-gtkrc
       --no-use-system-gtkrc
              When xmj is compiled with GTK+2, by default it ignores the system provided settings, to  ensure  a
              consistent behaviour across systems.  If you wish it to use your system settings, set this option.
              This option is also controllable via the Display Options preference panel.

       --echo-server
              If  this  option  is  given, xmj will echo to  stdout  all the protocol messages received from the
              server. This option is for use in debugging.

       --pass-stdin
              If this option is given, xmj will send any text given on stdin to the server. This option  is  for
              use in debugging.

       --monitor
              If  this  option  is  given,  xmj will send requests to the server only in direct response to user
              actions; it will take no  action  itself  (and  hence  all  auto-declaring  and  playing  is  also
              disabled). This option is for use in debugging.

   mj-server
       --timeout seconds
              When  a  discard  is made, there is a limit on the time players have to claim it. This option sets
              the timeout; a value of zero disables it. The default is 15 seconds.
              This value can also be set via a GameOption request from a player.

       --pause deciseconds
              This will make the server enforce a delay of deciseconds/10 seconds between  each  action  in  the
              game;  the purpose is to slow programmed players down to human speed (or, in a teaching situation,
              to slow the game even more). The current server considers that 50 (i.e. 5 seconds) is the  maximum
              reasonable value for this option.
              The option can also be requested by players, via a PlayerOption protocol request.

       --random-seats
              By  default,  players  are  seated  in  order  of connection to the server. This option seats them
              randomly. It will become the default later.

       --id-order-seats
              This option causes the players to be seated in numerical order of their ids. It is used by the xmj
              program to make the New local game..  work as expected.

       --disconnect-penalties N1,N2,N3
              This specifies the penalties applied by the following option for players who disconnect before the
              end of a game. N1 is the penalty for disconnecting in the middle of a hand; N2 at  the  end  of  a
              hand  but  in  the  middle of a round; N3 at the end of a round (other than end of game). They all
              default to 0 if not specified.

       --end-on-disconnect
              If this option is given, a disconnection by one player will gracefully terminate  the  game.  Mid-
              hand,  the  hand is declared a wash-out; after Mah-Jong has been declared, then if a losing player
              disconnects, their tiles are shown, the hand is scored, and then  the  game  ends;  if  a  winning
              player  disconnects,  the  hand is a wash-out. The disconnecting player may be assigned a penalty,
              according to the --disconnect-penalties option, which will be included in the scores  printed  out
              by the server. (The penalties will not be visible to the other players.)

       --exit-on-disconnect
              If  this  option  is  given,  the  server will quit if any player disconnects, rather than waiting
              indefinitely for reconnection.

       --save-on-exit
              If this option is given, the server will save the state of the game if it quits as a result  of  a
              player disconnecting. (It will not save the state if it quits as the result of an internal error.)

       --option-file file
              This  names  a  file  of protocol commands which will be applied to every game when it starts. Its
              main purpose is to set non-default game options, via the GameOption protocol  message  (note  that
              this  is a CMsg, not a PMsg). However, users will normally set options and preferences via the xmj
              control panel, not by this means.

       --load-game file
              This names a file containing a saved game (as a  suitable  sequence  of  protocol  commands).  The
              server  will  load  the  game;  clients connecting will be treated as if they had disconnected and
              rejoined the game.

       --no-id-required
              In the most common case of resuming a saved game, namely one human playing against  three  robots,
              the  robots  will  not  have the same names or ids as the robots in the original game. This option
              tells the server that if it cannot match a reconnecting player by id or  name,  it  should  anyway
              match it to one of the previously disconnected players. (In this case, the human normally connects
              first with the same name, so is correctly matched.)

       --no-manager
              Usually,  the  first  player  to  connect  becomes  the  game manager, and can change all the game
              settings. If this option is given, no player will be allowed to change the game settings.

       --auth-basic id:password
              This provides basic (insecure, since the password is transmitted in plaintext) authorization:  the
              player  with  id  id  must  give  the specified password to connect. Note that if this argument is
              given, it must be given four times, once for each authorized player - any player id not  mentioned
              will  not  be  allowed to connect. A player may be allowed to connect without a password by making
              password empty.

       --debug
              This enables various debugging features. In particular, it enables protocol  commands  that  allow
              one to change the tiles in a hand...

       --logfile file
              The server will write a complete record of the game to file; this will be quite large, and is only
              useful for automatic comparison of different computer players.

       --no-special-scores
              This  option suppresses the scoring of points and doubles for flowers and seasons. It is primarily
              intended for running tests of different players; for human use, a game option will be provided  to
              eliminate the specials altogether.

       --seed n
              This option specifies the seed for the random number functions.  Used for repeatable tests.

       --wallfile file
              This  names  a  file  containing  space  separated tile codes giving the wall; used for repeatable
              tests. (This is a testing option; it is not robust.)

       --hand-history
              This is an option to facilitate certain automatic analyses; if set, a  history  of  each  hand  is
              dumped to the file hand-NN.mjs .

       --nohist
              Another  option only used in automatic comparison: this saves some CPU time by disabling the book-
              keeping required to allow players to disconnect and reconnect.

   mj-player
       --password password
              sets the password if basic authorization is in use.

       strategy options
              The player has some options which can be used to change its "personality". The meanings are rather
              approximate, since they actually change parameters which are used in a rather complex way, but the
              idea is right. These options, each of which takes a floating point value in the given range, are:

       --randomness 0.0 .. 1.0
              The most generally useful option: adds random noise to  the  player's  choice  calculations,  thus
              reducing its skill level. Values above 1.0 are possible, but don't seem to make matters worse. The
              dumbed-down players are still not stupid.

       --chowness -1.0 .. 1.0
              This  affects how much the player likes chows: at 1.0, it will go all out for the chicken hand, at
              -1.0 it will never chow. The default is 0.0.

       --hiddenness 0.0 .. 1.0
              Increasing this makes the player reluctant to make exposed sets.  At  1.0,  it  will  never  claim
              (except possibly to go mah-jong). The default is 0.0.

       --majorness 0.0 .. 1.0
              Increasing  this  biases  the  player  towards collecting major tiles. At 1.0, it will discard all
              minor tiles, if possible. The default is 0.0.

       --suitness 0.0 .. 1.0
              Increasing this makes the player try to go for one-suit hands. The default is 0.0

       In practice, the --majorness option seems not to be  very  useful,  but  the  other  options  change  the
       personality without completely destroying the playing ability.

       In  fact,  all  these options take a comma-separated list of values, which allows the specifications of a
       set of strategies, which the player will switch between.  In  this  case,  the  --hysteresis  hhh  option
       specifies how much better a strategy should be to switch to it. However, use of this option, and multiple
       strategies, is probably only useful if you first read the code to see how it works.

USING THE XMJ PROGRAM

       The main window contains a menu-bar and a table area; the table is in a tasteful shade of dark green. The
       table  displays  a  stylized  version  of  the  game:  stylized  in  that  there  is no jazzy graphics or
       perspective, and the tiles are not intended to be pictures of real objects, and  so  on.  Otherwise,  the
       layout is as one would expect of a real game. However, the wall may or may not be displayed, depending on
       option settings and screen size. (See above.)

       Specifically,  the four players are arranged around the four edges of the table, with "us" at the bottom.
       For each player, the concealed tiles are displayed nearest the edge of  the  table;  our  own  tiles  are
       visible,  the  other  players'  tiles  are  face-down.  The  rightmost concealed tile of other players is
       highlighted in red when it is their turn to discard.

       In front of the concealed tiles are (to the player's left) any declared sets, and (to the player's right)
       flowers and seasons, and the tong box if the player is East. The tong box displays the wind of the  round
       in a white circle. If necessary, the flowers and seasons will overflow into the concealed row.

       The  discards  are  displayed  face-up  in  the  middle of the board: they are laid down in order by each
       player, in the natural orientation. TODO: add options to display discards  randomly,  or  face-down.   If
       animation  (see  --animate option) is not being used, then the most recent discard will be highlighted in
       red.

       The name of a face-up tile can be displayed by right-clicking in the tile.  Alternatively,  the  Tiletips
       display option can be set, in which case the name of a tile is displayed whenever the mouse enters it.

       Our  tiles  are  displayed  in sorted order, which happens to be Bamboos (1-9), Characters (1-9), Circles
       (1-9), Winds (ESWN), Dragons (RWG), Flowers, Seasons. We can also arrange the tiles ourselves -  see  the
       "Sort tiles in hand" display preference described below.

       Actions  are generally carried out by clicking a button in a dialog box that appears in the middle of the
       board. For many actions, a tile must be selected. A tile is selected or unselected by single-clicking it;
       when selected, it appears as a depressed button.  The program will generally pre-select a sensible  tile:
       specifically:
       during the initial declaration of special tiles, the rightmost special is selected;
       after we draw a tile from the wall, the drawn tile is selected;
       when declaring concealed sets after going Mah Jong, the first undeclared tile is selected.

       To describe the possible actions, let us run through the course of a game.

       First  select  "New  local game..." from the "Game" menu. A panel will appear. The default options are to
       play a game against the computer, so click "Start Game".  After a second  or  two,  a  game  will  start.
       (NOTE: this assumes correct installation. If this fails, start a server and players manually, and use the
       "Join server..." menu item.)

       The  first  thing  that  happens  is  a dialog box "Ready to start next hand".  The server will not start
       playing a hand until all players have indicated their willingness to continue play.

       Next, the tiles are dealt. Then each player in turn is expected to declare flowers and seasons.  When  it
       is our turn, a dialog will appear with the following buttons:

       Declare
              declare  the  selected  flower  or  season.  (Note: the program auto-selects the rightmost special
              tile.)  If no tile is selected, this finishes declarations.  This button will not  appear  if  the
              game is being played without flowers and seasons.

       Kong   If we have a concealed kong, we can declare it now with this button.

       Finish Finish declaring specials and kongs.

       When  all  players  have  finished  declaring specials and kongs, a dialog box appears, asking (on East's
       behalf) permission to continue.

       During play, when we draw a tile from the wall, it will be auto-selected. We may also of course select  a
       different tile.  A dialog will appear giving us the following possibilities:

       Discard
              discard  the  selected  tile. This button also serves to declare a flower or season, and the label
              changes to "Declare" when one is selected.

       &Calling
              discard the selected tile and declare a calling hand.  This button is only shown when  calling  is
              allowed (by default, only Original Call is allowed).

       Kong   declare  a  concealed  kong  of the selected tile, or add the selected tile to an exposed pung, as
              appropriate.  Note: In most rules, a concealed kong can only be declared (or a tile  added  to  an
              existing  pung)  immediately  after  drawing from the wall, but not after claiming somebody else's
              discard. Up to and including version 1.10, the server enforced this rule strictly. As from version
              1.11, it allows a tile to be added to a pung that you  have  just  claimed:  in  real  life,  this
              corresponds  to  correcting  your  Pung!  claim  to  a Kong! claim, which is allowed by all rules.
              (Obscure note: if you are playing the KongHas3Types option, the resulting kong will be counted  as
              annexed, instead of the exposed kong that would have resulted from a genuine change of claim. This
              is a bug, but not worth the trouble of fixing.)

       Mah Jong!
              declare Mah Jong! (no selection needed)

       If the wall is not being shown, the dialog will note the number of tiles left in the live wall.

       A tile can also be discarded simply by double-clicking it.

       When  another player discards, a dialog appears to allow us to claim it. If the dialogs are in the middle
       of the table, the dialog displays the tile in a position and  orientation  to  indicate  the  player  who
       discarded;  if  the  dialogs  are at the bottom, this is not done, to save space.  In any case the dialog
       displays the name of the tile, and buttons for the possible claims.  If the wall is not being shown,  the
       dialog  will  note the number of tiles left in the live wall.  There is also a `progress bar' which shows
       how time is running out.  The buttons use one variant of traditional English terminology, viz:

       No claim
              we don't claim this tile. If there is no timeout in operation, it is necessary to  click  this  to
              indicate a "pass", and in any case it is desirable to speed up play.

       Chow   claim  for a sequence.  If our claim is successful and there is more than one possible sequence to
              be made, a dialog will appear asking us to specify which one.

       Pung   claim for a triplet.

       Kong   claim for quadruplet.

       Mah Jong!
              claim for Mah Jong.  If the claim succeeds, a dialog box will appear asking whether  we  want  the
              tile for "Eyes", "Chow", "Pung", or a "Special Hand" (such as Thirteen Unique Wonders).  (The term
              "Eyes"  is  used  instead of "Pair" so that in the keyboard accelerators, E can be used, leaving P
              for "Pung".)

       When a player (including us) claims, the word "Chow!" etc. will  appear  (in  big  letters  on  a  yellow
       background, by default) for a couple of seconds above the player's tiles.

       When  all  players  have  claimed,  or  timed  out,  the  successful  claim is implemented; no additional
       announcement is made of this.

       If a player adds a tile to an exposed pung, and that tile would give us Mah Jong, then a dialog box  pops
       up to ask whether we wish to rob the kong.

       After  somebody  goes Mah Jong, we are asked to declare our concealed sets. A dialog appears with buttons
       for "Eyes", "Chow", "Pung". To declare a set, select a tile, which must be the first tile in the set  for
       a  chow,  and click the appropriate button. (If we are going Mah Jong, the first undeclared tile is auto-
       selected.) When finished, click "Finished" to reveal the remaining tiles to the other players.  If we are
       the winner, there will be a button for "Special Hand": this is used  to  declare  hands  of  non-standard
       shape,  such  as  Thirteen  Unique Wonders. (Note: the Seven Pairs hand, if in use, should be declared by
       means of the "Eyes" button, not the "Special Hand" button.)

       At this point, a new top-level window appears to display the scoring information.  The  scoring  is  done
       entirely by the server, not by the players; the server sends a text description of the score calculation,
       and  this  is  displayed  for  each  player in the Scoring window.  The information in the Scoring window
       remains there until the next hand is scored; the window can be brought up at  any  time  via  the  "Show"
       menu.

       Finally, the "continue with next hand" dialog appears. The hand just completed will remain visible on the
       table until the next hand starts.

       Keyboard Accelerators
       There  are keyboard accelerators for all the actions in the course of play. For selecting tiles, the Left
       and Right arrow keys can be used to move the selection left or right along  the  row  of  tiles.  In  all
       dialogs,  Space  or Return will activate the shadowed button, which is usually the commonest choice. Each
       button can also be activated by typing the underlined letter. (In the Windows GTK1 build, use l (ell) and
       r instead of Left and Right. The button accelerators do not work, for reasons unknown to me.)
       The menus are also accessible via accelerators. To open a menu, press Meta-X (Alt-X on Windows), where  X
       is  the underlined letter in the menu name. (Meta-X is often (confusingly) Alt-X on Linux systems.)  Then
       each entry has an underlined letter which if pressed will activate it.

       An additional top-level window showing the state of the game can be obtained  by  selecting  "Game  info"
       from the "Show" menu.

       A  record  of  the  scores so far in the game can be found by selecting "Scoring history" from the "Show"
       menu. The players are listed in board order, with the original east  marked  by  @.  In  each  hand,  the
       player's  hand  score  appears in parentheses, and then their gain or loss for the hand, beneath which is
       the running total

       There is also a facility for sending text messages to the  other  players.  Select  "Messages"  from  the
       "Show"  menu,  and  a  window  will  appear: in the top is a display of all messages sent, and below is a
       single line in which you can enter your message. It will be sent when you hit Return. The message  window
       pops  up  automatically  whenever a message is received, unless prevented by a display preference. If the
       "Display status and messages in main window" display option is set, then this window will instead  appear
       in  the  main  window,  above the table. In that case, there is a checkbox "Keep cursor here" next to the
       message entry line. Checking this box will ensure that the keyboard focus  stays  in  the  message  entry
       field,  even  when  you  click  on buttons in the game. (Consequently, you will be unable to use keyboard
       accelerators while this option is checked.)

   Starting games and re-connecting
       The "Game" menu has the "New local game..." item to start a new game on  your  local  computer,  and  the
       "Join  server..."  item  to  connect  to  an existing game. The dialogs for both these have the following
       entries:

       Checkboxes for Internet/Unix server
              These specify whether the server is listening on an Internet  socket  or  a  Unix  socket.  If  an
              Internet  (TCP)  socket,  the host name ("Join Game..." only) and port number should be entered in
              the appropriate boxes; if a Unix socket, the file name of the socket may be entered, or if  it  is
              left blank, a temporary file will be used.  These fields are remembered from game to game.

       "Player ID" and "Name" fields
              The  "Player  ID"  should  be left at 0, unless reconnecting to an existing game, in which case it
              should be the ID assigned by the server on first connecting to that game. The "Name" field can  be
              anything.  When  reconnecting to an existing game, if the ID is given as 0, the server will try to
              use the "Name" to identify the player. (This may not be true  in  future.)  The  "Name"  field  is
              remembered from game to game.

       The  "Join  server..."  dialog  then  simply has a "Connect" button to establish the connection. The "New
       local game..." has the following fields:

       For each of three further players,
              A checkbox to say whether to start a computer player. (Some of) these should be unchecked  if  you
              wish other humans to join the games.  If checked, there is a text entry to set the players' names,
              and  a  text  entry  field in which options can be given to the players; the latter should only be
              used if you understand the options! The options are remembered from game to game.

       An "allow disconnection" checkbox
              If this is checked, the server that is started will continue to run even if players disconnect. If
              it is not checked, the server will quit if any player disconnects. If you are playing one  against
              the  computer,  this  should  generally  be  left  unchecked,  in  order to avoid server processes
              accidentally being left lying around. If playing against people, it should be  checked,  to  allow
              players to go away, or to guard against network outages.

       As "save game state on exit" checkbox
              If  this  is  checked,  the  server  will save the game state (see below on on saving and resuming
              games) when a player disconnects and causes it to quit.

       A "seat players randomly" checkbox
              If this is left unchecked, players will be initially seated as East, South, West, North  in  order
              of connection. (We always connect first.)  If it is checked, the seating will be random.

       A "robot difficulty" numeric entry field
              values  from  0  to 10 making the robots more skilful. Actually, lower values effectively make the
              robots a bit tired, so they make mistakes. Beginners probably want 0 to stand a chance of  winning
              sometimes.

       A numeric entry field
              to specify the time limit for claiming discards.  If set to 0, there will be no time limit.

       A button to start the game
              Note  that  it takes a few seconds to start a game, during which time the dialog stays up with the
              button pressed. (TODO: fix this!)

   Saving and resuming games
       At any time during the play of a game, you can choose the "Save" entry from the "Game" menu. This  causes
       the  server  to  save  the  current  state of the game in a file. The file will be named game-date.mjs by
       default; if a name has previously been specified, or if the game was resumed from a file, that name  will
       be  used.  To  specify  a  name,  use  the "Save as..." entry in the "Game" menu. Note that for security,
       directories cannot be specified (except by resuming a game), so the file will be created in  the  working
       directory of the server.

       To  resume  a saved game, use the "Resume game..." entry from the "Game" menu. This is just like the "New
       local game..." panel, but it has a box to specify the file containing the saved game. You can either type
       the file name into the box, or click the "Browse..." button to get a file chooser dialog.  (File  chooser
       not available on Windows GTK1 build.)

   Setting display and game options
       The  "Options" menu of xmj brings up panels to set various options related to the display and to the game
       rules.  Most of these options can be stored in the  preferences  file,  which  is  .xmjrc  in  your  home
       directory on Unix, and xmj.ini in your home (whatever that means) directory on Microsoft Windows.

   Display Options
       This  panel  controls  options  related  to  the local display.  At the bottom are three buttons: "Save &
       Apply" applies changes and saves them in the preferences file for  future  sessions;  "Apply  (no  save)"
       applies  any  changes,  but does not save them; "Cancel" ignores changes.  Note that many display options
       can also be controlled by command-line arguments; if an option is specified both in the preferences  file
       and on the command line, the command line takes priority.

       Position of action dialogs.
              This  determines where the dialogs for user actions in the game are popped up; see the description
              of the --dialogs-central etc.  options above. This option is stored in the preferences file as
              Display DialogPosition posn
              where posn is one of "central", "below" or "popup".

       Animation
              determines whether tile movements are animated (see the --animate option above).  This  option  is
              stored in the preferences file as
              Display Animate bool
              where bool is "0" or "1".

       Display status and messages in main window
              puts  the  game  status and message (chat) windows in the main window, above the table, instead of
              having separate popup windows. This option is stored in the preferences file as
              Display InfoInMain bool
              where bool is "0" or "1".

       Don't popup scoring/message windows
              will prevent the automatic popup of the scoring window at the end of a hand, the message window on
              the arrival of a message, and the game status window at the end of the game. This option is stored
              in the preferences file as
              Display NoPopups bool
              where bool is "0" or "1".

       Tiletips always shown
              means that the name of a tile is displayed whenever the mouse enters  it,  and  the  name  of  the
              selected tile is always shown. (Otherwise, right-click to display the name.) This option is stored
              in the preferences file as
              Display Tiletips bool
              where bool is "0" or "1".

       Rotate player info text
              determines  whether the player information labels on the main board are rotated vertically for the
              left and right players, or kept horizontal.  The default is to rotate them.  This option is stored
              in the preferences file as
              Display RotateLabels bool
              where bool is "0" or "1".

       Show when players are thinking
              When this is on, "..." will be displayed in other player's claim alerts while they are "thinking",
              that is, have not yet claimed or passed. This option requires a recent  server.   The  default  is
              off. This option is stored in the preferences file as
              Display ThinkingClaim bool
              where bool is "0" or "1".

       Alert on possible mah-jong
              determines whether to pop up an alert when a discard or drawn tile makes mah-jong possible. Beware
              that  only  the server knows the full rules, so this is not infallible.  The default is off.  This
              option is stored in the preferences file as
              Display AlertMahjong bool
              where bool is "0" or "1".

       Display size
              This drop-down list specifies the size of the display. The size should be thought of as the length
              of a tile rack. This is only relevant if the wall is not being displayed. Values range from 14  to
              19;  if  "(auto)" (the default) is specified, the client tries to choose a size as big as will fit
              in the display. This option can also be specified by the command line --size argument. This option
              is stored in the preferences file as
              Display Size n

       Show the wall
              "always" is equivalent to the --show-wall option; "never"  is  equivalent  to  the  --no-show-wall
              option; and "when room" is the default. This option is stored in the preferences file as
              Display ShowWall when
              where when is one of "always", "when-room" or "never".

       Sort tiles in hand
              By  default,  the  program  maintains your own tiles in sorted order.  If you prefer to leave them
              unsorted (which is often recommended in real life, to avoid giving information to your opponents),
              or to arrange them yourself, you can set this option to "never", or to "on deal" if you want  them
              to  be  sorted  at  the beginning, but then left alone. To rearrange tiles, use the Shift-Left and
              Shift-Right (i.e. the left and right arrow keys while holding Shift) -  these  move  the  selected
              tile  left  or  right  in  your  hand. (In the Windows GTK1 build, use L (Shift-l) and R (Shift-r)
              instead.) On GTK2 builds, you can also drag a tile to its  new  position  with  the  mouse.   This
              option is stored in the preferences file as
              Display SortTiles when
              where when is one of "always", "deal" or "never".

       Iconify all windows with main
              If  this  option  is  set  (the default), then when the main xmj window is iconified, (almost) all
              other open windows such as dialogs will also be iconified; when the main  window  is  uniconified,
              the  other  windows will also be uniconified. If it is not set, all windows are independent of one
              another. This option is stored in the preferences file as
              Display IconifyDialogs bool
              This option is not currently supported under Microsoft Windows.

       Tileset
              this is the tile pixmap directory, also given by the --tileset option. This option  is  stored  in
              the preferences file as
              Display Tileset dirname

       Tileset Path
              this  is  the  search  path for tileset directories, also given by the --tileset-path option. This
              option is stored in the preferences file as
              Display TilesetPath search-path

       Main font selection...
              This button brings up a font selection dialog to choose the font used in buttons, menus,  etc.  in
              the client. This option is stored in the preferences file as
              Display MainFont font-name
              where  font-name  is a font name, which may be an X LFD in the Unix GTK+1 version, or a Pango font
              name in the Windows and Unix GTK+2 versions.

       Text font selection...
              This button brings up a font selection dialog to choose the font used in  text  display  (such  as
              scoring info and chat) in the client. This option is stored in the preferences file as
              Display TextFont font-name

       Table colour selection...
              Unaccountably,  not  everybody likes my choice of dark green for the table background. This button
              brings up a colour selection box to allow the table colour to be changed.This option is stored  in
              the preferences file as
              Display TableColour col
              where  col  is a GTK colour specification. The format depends on whether xmj is built with GTK+1 -
              in which case it is an X color of the form rgb:RRRR/GGGG/BBBB - or GTK+2 - in which case it  is  a
              GTK2 color of the form #RRRRGGGGBBBB. GTK+2 programs will convert an old GTK1 specification.

       Gtk2 Rcfile:
              In  the  GTK+2  build, xmj by default ignores completely the system and user settings for look and
              feel, and uses its own built in settings.  These settings use  the  Clearlooks  theme,  if  it  is
              available,  to  provide  a  simple  but clean look with slightly rounded tiles; and fall back to a
              plain theme, as compact as possible with the standard engine. If you wish, you can use this option
              to specify the name of a GTK rcfile which will be read  instead  of  the  built  in  settings.   A
              minimal  set  of  settings  will  be  read before your file is read.  Such a file can specify many
              details of the appearance, provided that you know how to write a GTK rcfile. You will need to know
              that xmj uses the following styles and bindings:
              gtk-font-name = fontname
              can be used to change the overall font used by widgets. This will overridden by the font specified
              by the Main Font option, if set.
              style "table"
              is used to give the green (or whatever you set) colour to the table. All widgets that should  have
              this style are named "table", so the appropriate binding (already set in the minimal set) is
                   widget "*.table" style "table"
              style "playerlabel"
              is  used to give the white text colour to the player status labels in the corners of the board (if
              shown). All widgets that should have this  style  are  named  "playerlabel",  so  the  appropriate
              binding (already set in the minimal set) is
                   widget "*.playerlabel" style "playerlabel"
              style "tile"
              is used in the default settings for all widgets named "tile", which are all tiles except the tiles
              in  your  own concealed hand. This style is not used in the minimal settings, but if set it should
              be bound with
                   widget "*.tile" style "tile"
              style "mytile"
              is used in the default settings for the concealed tiles in your hand, which  are  active  buttons.
              These  tiles are all named "mytile". This style is not used in the minimal settings, but if set it
              should be bound with
                   widget "*.mytile" style "mytile"
              style "claim"
              is used to set the yellow background and large font of the claim announcement popups. These popups
              are named "claim", so the appropriate binding (already set in the minimal set) is
                   widget "*.claim" style "claim"
              style "text"
              is used to change the font for the text widgets such as message boxes and  input  fields.  In  the
              minimal  settings,  it  is  empty,  but  is defined and bound to the relevant widgets. The binding
              should not be changed, but the style itself can be redefined. If the Text Font option is set, this
              style will be redefined in order to implement it.
              binding "topwindow"
              is defined and bound to the top-level window to implement the use of the left and right arrow keys
              to change the selected tile. It is probably not helpful to change this.
              The distribution contains three example gtkrc files, called gtkrc-minimal, gtkrc-plain, and gtkrc-
              clearlooks, which contain the program's compiled in settings.
              This option is stored in the preferences files as
              Display Gtk2Rcfile file-name
              Note that if the file-name is relative, it will be interpreted relative to the  current  directory
              in Unix, or the program directory in Windows.

       Use system gtkrc
              As  noted above, xmj does not normally load the system settings in the GTK+2 build. If this option
              is checked, it will (after  the  minimal  settings,  but  before  the  default  or  user-specified
              settings).  This option is stored in the preferences files as
              Display UseSystemGtkrc bool
              where bool is 0 or 1.

       Note for GTK+1 builds
              Under  a  GTK+1  build,  xmj  does what any other application does. This should allow the use of a
              .gtkrc file to change colours, using the styles and bindings given above. However, this is  not  a
              supported activity.

   Playing Preferences
       This  panel  controls  what  actions  the client may take on your behalf.  The first (and currently only)
       section specifies when the client should declare tiles and sets for you. It has the following checkboxes:

       flowers and seasons
              if checked, will be automatically declared as soon as drawn.

       losing hands
              if this is checked, then when somebody else goes out, the client will declare your closed sets. It
              declares in the order pungs, pairs, chows.

       winning hands
              this is the same for when you go out.

       The panel has "Save & Apply", "Apply (no save)" and "Cancel" buttons, as in the display options panel.

   Game Option Preferences
       This panel controls preferred game options which  will  be  sent  to  the  server  when  a  game  starts.
       Preferences  will  only be applied if we are the game manager, or the game has no manager. (Normally, the
       first human player to connect to the server becomes the game manager.)
       For details of options and their meanings, see the Game Options section in the rules.
       The panel has two action buttons, "Save Changes" and "Cancel", with the obvious meanings. Note if a  game
       is in progress, changed preferences are NOT applied to it; however, there is a button in the Current Game
       Options panel to apply preferences.
       The  main  body  of  the  panel is a scrollable window listing all the known options. If no preference is
       stored for the FooBar option, then there is an "Add pref" button next to  a  description  of  the  FooBar
       option.  If  this  button  is  clicked, an entry for setting the option appears. The format of this entry
       depends on the type of the option (see the Game Options section of the rules for details of types):

       Boolean (on/off) options
              have a checkbox.

       Integer options
              have a spinbutton for numerical entry: the value can be typed in, or the up and down arrows can be
              used to change it

       Score options
              have radio buttons for selecting Limit, Half-Limit, or other; for other,  the  number  of  doubles
              and/or  points  is  entered  with  spinbuttons.  (Note: the underlying protocol allows percentages
              (possibly more than 100%) of limits to be specified for scores;  however,  the  current  graphical
              interfaces allow only limits or half-limits. Even half-limits are pretty strange, but some bizarre
              sets  of  rules,  such  as  those  of  the  British  Mah-Jong  Association  (which  plays  a weird
              American/Western/Chinese mix), allow other fractions of limits.)

       String options
              have a simple text entry field.

       All option entries have a "Reset" button which returns the entry to its previous state.
       A preference is removed by clicking the "Remove pref" button.

   Current Game Options
       When there is a connected game, this panel allows its game options to be modified (if we have  permission
       to  do  so).  The  three  action  buttons  are "Apply changes", which applies the panel's settings to the
       current game; "Apply prefs", which applies our preferences (as described above) to the current game;  and
       "Cancel".
       The body of the panel contains entries for all the options of the current game, in the same format as the
       preferences panel (see above).

UPDATES

       The latest release of the Unix Mah-Jong programs should be available at
       http://mahjong.julianbradfield.org/

RULES

       The  game  currently  implemented  is  a  version  of the classical Chinese game. The most convenient and
       comprehensive set of rules is that provided by A.  D.  Millington,  "The  Complete  Book  of  Mah-Jongg",
       Weidenfield & Nicolson (1993), ISBN 0 297 81340 4.  In the following, M 103 denotes item 103 of the rules
       laid  out in Chapter 3 of that book. I here describe only the differences from these rules, some of which
       differences are consequences of using computers, and some of which are points where my house rules differ
       from Millington's version. In due course, all variations (of Chinese classical) will be accommodated,  if
       there is sufficient desire.

       Classification  of  tiles  (M  1-8):  the tiles are a standard Chinese set.  The tiles do not have Arabic
       numerals, except for the flowers and seasons, where the identifying Chinese characters are too  small  to
       be  legible.  A  numbered  set  is  included  in the distribution and can be used via the Tileset display
       preference.
       The flowers and seasons may be removed from the tile set by unsetting the Flowers game option.

       Preliminary (M 9-10): nothing to say.

       Duration of the game (M 11-14): standard rules. In particular, the title of East does not  pass  after  a
       wash-out.

       Selection  of  seats (M 15): the players are seated in the order they connect to the server, or randomly,
       according to the option given to the server.

       The deal etc. (M 16-27): There is no attempt to simulate the usual dealing ritual (M 16-20,  23-26);  the
       wall is built randomly by the server. The dead wall is also maintained by the server.
       The existence of a dead wall is controlled by the DeadWall game option; normally there is a dead wall.
       The  deal  wall is either 14 tiles and kept at 13 or 14 during play (as in most authors), or is 16 tiles,
       not extended during play (per Millington (M 22)), according to the DeadWall16 game option.
       Replacement tiles for kongs are always taken from the loose tiles, but replacements for bonus  tiles  may
       be drawn from the live wall (M 31), or from the loose tiles, according to the FlowersLoose game option.

       Object of game (M 28-31): all winning hands must comprise four sets and a pair, with the exception of the
       Thirteen  Unique  Wonders.   If the SevenPairs game option is set, then a hand of any seven pairs is also
       allowed as a winning hand.

       Bonus tiles (M 31): M requires that bonus tiles must be declared in the turn in  which  they  are  drawn;
       otherwise  the  player  may not exchange or score them (and thus they cannot go out). We do not make this
       restriction, as it is (a) pointless (b) unenforceable in real life. Bonus tiles may be  declared  at  any
       time after drawing from the wall. (Obviously, there is no reason not to declare them immediately.)

       Commencement of the Game (M 32-33): standard.

       Playing procedure (M 34-38): standard.  In particular, the other players have to give permission for east
       to  start  playing  (M  34).   The  display of discards cannot be controlled by the server; the current X
       client displays them in an organized fashion, rather than the random layout required by M 35.

       Chow (M 39-42): standard.

       Pung (M 43-45): standard.

       Kongs (M 46-52): M distinguishes three types of kong: concealed, claimed (by Kong), and  annexed  (formed
       by  adding  a  discard  to  an exposed pung), and allows claimed kongs to be counted as concealed for the
       purposes of doubling combinations. I have not seen this  anywhere  else;  normally,  a  claimed  kong  is
       treated  as  exposed  for  all  purposes.   We  follow  the  normal  convention; however, the game option
       KongHas3Types can be set to implement M's rules. In this case, the xmj program will  distinguish  claimed
       kongs by displaying them with the last tile face down, whereas annexed kongs are all face up.
       Players  may  declare  a concealed kong, or add to a pung, only when they have just drawn a tile from the
       wall (live or dead); not just after a claiming a discard. (A silly restriction in my view, but  one  that
       all rule sets seem to have (M 51).) As from program version 1.11 (protocol version 1110), we also allow a
       player to add to a pung they have just claimed (see note above in the description of play).

       Calling and Mah Jong (M 53-54): standard. (I.e. there is no "Calling" declaration.)

       NOTE:  M  permits players to change their mind about making a claim (M 69); we do not, and all claims are
       irrevocable. As a special concession, we allow adding to a just claimed pung, so simulating the effect of
       correcting a pung claim to a kong.

       Original Call (M 55): the Original Call declaration must be made simultaneously with the  first  discard,
       rather  than  afterwards.  NOTE: the server does *not* check that the declarer does indeed have a calling
       hand, as a mistaken original call does not damage the other players or the  progress  of  the  game.  The
       server  does,  however,  thereafter  prevent  the declarer from changing their hand; therefore a mistaken
       original call will make it impossible to go out. (Note: in M, an Original Caller may change  their  hand,
       but  will thereby lose the ability to go out (M 55(b)); is this a better way to treat it?)  Note also: as
       per M, an original call can be made even if another player has  claimed  a  discard  before,  unlike  the
       Japanese version.

       Robbing a Kong (M 57-60): Robbing a kong is implemented. However, as with discards, we require that kongs
       are  robbed  before  anything else happens, and in particular before the konger draws a replacement tile.
       Therefore, after a kong, all other players must either claim Mah Jong or  pass.  (The  provided  programs
       will pass automatically if robbing is not possible.) As for discards, there is a time limit.

       Precedence  of  claims  for discard (M 61-65): Many rules allow a discard to be claimed up until the time
       the next discard is made. M does this, with elaborate rules for the precise specification.  For  ease  of
       implementation, we do not allow this: instead, all players are required to make a claim or pass, and once
       all  players  have  claimed,  the successful claim is implemented irrevocably.  The server imposes a time
       limit; players that do not claim within the limit are deemed to have passed. This defaults to 15 seconds,
       but can be changed or disabled by the Timeout game option.

       Irregularities in Play (M 66-81): the server does not permit unlawful moves, and so no irregularities can
       arise.

       False Declaration of Mah Jong (M 82-83): such declarations are not permitted by the server.

       False Naming of Discards (M 84-88): this also cannot happen.

       Incorrect Hands (M 89): cannot happen.

       Letting Off a Cannon (M 90-96): as in M. However, if a player makes  a  dangerous  discard,  but  has  no
       choice,  the server will determine this; it is not necessary to plead "no choice" explicitly, and neither
       is the player's hand revealed to the other players.

       Wash-Out (M 97-99): standard.

       Points of Etiquette (M 100-102): not applicable.

       Displaying the Hand (M 103-106): The format of display is a matter for the client program, and cannot  be
       controlled by the server.
       After  Mah  Jong, the players are responsible for declaring concealed sets in whatever way they wish. The
       winner, of course, is required to declare a complete hand; but the losers may declare as they wish.  Once
       a set is declared, it cannot be revoked. Note that the losers may declare multiple scoring pairs.

       Procedure in Settlement (M 107-111): The settlement is classical: that is, the winner gets the  value  of
       their  hand from all players; the losers pay one another the differences between their scores; except all
       payments to or from East are doubled; and if players let off a cannon, they pay everybody's debt.  Unlike
       normal play (M 110), all hands are scored by the server, rather than by the players. Settlement  is  also
       computed  by  the server.  Some variations in settlement are provided: if the LosersSettle game option is
       set to false, there are no payments between losers; if the EastDoubles  game  option  is  set  to  false,
       payments  to  or  from  East  are  not  doubled;  if the DiscDoubles game option is set to true, then the
       discarder of the tile that gave Mah-Jong will pay double to the winner, and a self-draw is paid double by
       everybody.

       Method of Scoring (M 112-122): The method is standard (M 112), viz calculate points  obtained  from  sets
       and bonuses, and then apply doubles.

       The following points are given for tiles:

       Bonus tiles:
              4 each (M 114(a))

       Pungs: 2  for  exposed  minor  tiles;  4  for exposed major or concealed minor; 8 for concealed major. (M
              114(b))

       Kongs: 8 for exposed minor; 16 for exposed major or concealed minor; 32 for concealed major. (M 114(c))

       Chows: no score. (M 114(d))

       Pair:  2 for a pair of Dragons, Own Wind, or Prevailing Wind.  A pair that is  both  Own  and  Prevailing
              Wind scores 4. (M 114(e)) Non-winning hands may score more than one pair.

       Basic points:
              the winner gets 20 points for going Mah Jong.  This can be changed by the MahJongScore game option
              (M 115(a) has 10 points).

       Seven Pairs hand:
              If  Seven  Pairs  hands are allowed, they receive an additional score of 20 points, changed by the
              SevenPairsVal game option.

       Winning from wall:
              if the final tile is drawn from the wall, 2 points are added (M 115(b)).

       Filling the only place:
              if the final tile is the only denomination that could have completed the hand, 2 points are  added
              (M  115(c)).   NOTE:  As  in M, if all four copies of a tile are exposed on the table, it does not
              count as available for completing the hand.

       Fishing the eyes:
              a player who completes by obtaining a pair gets 2 points if the pair is minor, or 4  if  major  (M
              115(d)).   Note:  to obtain these points for a discard, the player must actually claim the discard
              for a pair: e.g. if waiting on 5677, and 7 is discarded, the player must claim for the  pair,  not
              the chow.

       The following doubles apply to all hands.  All possible clauses apply unless stated otherwise.

       Having own flower or own season.
              No extra score. Changed by the FlowersOwnEach game option.

       Having own flower AND own season,
              1 double. (M 116(a)). Changed by the FlowersOwnBoth game option.

       Having all four flowers,
              1 double. (M 116(b)). Changed by the FlowersBouquet game option.

       Having all four seasons,
              1 double. (M 116(b)). Changed by the FlowersBouquet game option.

       Each set of dragons,
              1 double. (M 116(d))

       A set of the player's own wind,
              1 double. (M 116(e))

       A set of the prevailing wind,
              1 double. (M 116(f))

       "Little Three Dragons": two sets and a pair of dragons.
              1 double. (M 116(g))

       "Big Three Dragons": three sets of dragons.
              2 doubles. (M 116(h))

       "Little Four Winds": three sets and a pair of winds.
              1 double. (M 116(i))

       "Big Four Winds": four sets of winds.
              2 doubles. (M 116(j))

              (Note: the definitions of these last four doubles when applied to non-winning hands are subject to
              wide variations. Possibly there should be options to allow other possibilities.)

       Three concealed pungs:
              1  double.  (M  116(k))  (Note:  if the KongHas3Types game option is set, a claimed kong counts as
              concealed for this hand; see the note above under "Kongs".)

       The following doubles apply to the winning hand only:

       No score hand: four chows and a non-scoring pair.
              1 double. (M 117(a)) (Note: like M, we allow any of the extra points (Fishing the Eyes, etc) to go
              with this double. Some rules say that the extra points invalidate this hand. Possibly there should
              be an option for this.)

       No chows:
              1 double. (M 117(b))

       Concealed hand:
              1 double (M 117(c)), changeable with the ConcealedFully game option. (Note: this means a hand that
              is fully concealed after going out. Another common value for this is 3 doubles, in  which  case  1
              double  is usually given for a semi-concealed hand (see below).)  (Note: if the KongHas3Types game
              option is set, a claimed kong counts as  concealed  for  this  hand;  see  the  note  above  under
              "Kongs".)

       The  following doubles normally apply to the winning hand only; however, the LosersPurity game option can
       be set to allow losing hands to score them (this is a highly deprecated American feature,  but  has  been
       requested by a user).

       Semi-concealed hand:
              no  doubles,  changeable  with  the  ConcealedAlmost  game  option. (Not in M) (Note: this means a
              winning hand that is concealed up to the point of going out, or, if enabled,  a  concealed  losing
              hand. According to a discussion on rec.games.mahjong, a winning semi-concealed hand is classically
              awarded  one  double  (with  three given for fully concealed).  One book in my possession (U.S.A.,
              early 1920s) awards this double only to a hand that is concealed except for the pair.)  (Note:  if
              the  KongHas3Types  game  option is set, a claimed kong counts as concealed for this hand; see the
              note above under "Kongs".)

       One suit with honours:
              1 double. (M 117(d))

       One suit only:
              3 doubles. (M 117(e))

       All majors:
              1 double. (M 117(f))

       All honours (in an unlimited game):
              2 doubles. (M 117(g)) (Note: such a hand will also score the double for all majors.)

       All terminals (in an unlimited game):
              2 doubles. (Not in M) (Note: such a hand will also score the double for all majors.)

       The following doubles apply only to the winning hand:

       Winning with loose tile:
              1 double. (M 117(h)) (Note: with the default settings, replacements for bonus tiles come from  the
              live wall. Hence this double applies only to winning after Kong.)

       Winning from the bottom of the sea (winning with last tile),
              1 double. (M 117(i))

       Catching a fish from the bottom of the sea (winning with last discard),
              1 double. (M 117(j))

       Robbing a kong,
              1 double. (M 117(k))

       Completing Original Call,
              1 double. (M 117(l))

       Limit  (M  118-120):  the limit is 1000 by default, and can be changed by the ScoreLimit game option. The
       NoLimit game option can be used to play a game "with the roof off".

       The following hands are limit hands:

       Heaven's Blessing: East wins with dealt hand. (M 122(a))

       Earth's Blessing: player wins with East's first discard. (M 122(b))

       Gathering Plum Blossom from the Roof: winning with 5 Circles from the
              loose wall. (M 122(c))

       Catching the Moon from the Bottom of the Sea: winning with 1 Circle as
              the last tile. (M 122(d)) (Note: M says that the tile must be drawn. It seems more reasonable also
              to allow it to be the last discard, which is what we do. Objections?)

       Scratching a Carrying Pole: robbing a kong of 2 Bamboos. (M 122(e))

       (Note: these last three limits are rather arbitrary, but of the
              arbitrary limits they are apparently the most common. There should be options to disable them.)

       Kong upon Kong: making a Kong, making another Kong with the loose
              tile, and with the second loose tile obtaining Mah Jong. (Also, of  course,  with  three  or  four
              successive kongs.) (M 122(f))

       Four Kongs. (M 122(g))

       Buried Treasure: all concealed and no chows. (M 122(h))

       The Three Great Scholars: three sets of dragons and no chows. (M 122(i))
              (Note:  in  most rules I have seen, there is no restriction to a no chow hand. Since in M's rules,
              three sets and a chow scores at least (10 (M has 10 for Mah Jong) + 12 (at least 3 pungs)) times 8
              (2 for each set of dragons) times 4 (for Big Three Dragons) = 704, this is  significant  with  the
              default limit. For us, with 20 for going out, Big Three Dragons is over the default limit anyway.)

       Four Blessings o'er the Door: four sets of winds and a pair. (M 122(j))

       All Honours. (M 122(k))

       Heads and Tails: all terminals. (M 122(l))

       Imperial Jade: contains only Green Dragon and 2,3,4,6,8 Bamboo. (M 122(m))
              (Note: another rather arbitrary hand, but widely adopted.)

       Nine Gates: calling on 1-1-1-2-3-4-5-6-7-8-9-9-9 of one suit. (M 122(n)).

       Wriggling Snake: 1-1-1-2-3-4-5-6-7-8-9-9-9 plus 2, 5 or 8 of
              one suit (M 122(o)).  (Note: another rather arbitrary hand.)

       Concealed Clear Suit: one suit only and all concealed. (M 122(p))

       Thirteen Unique Wonders: one of each major tile, and a match to any of
              them. (M 122(q))

       East's 13th consecutive Mah-Jong. (M 122(r))

       General  note: there are many other doubles and limits kicking around. I welcome opinions on which should
       be possible options; and also on which of the above I should eject  from  the  default  set.   I  dislike
       Imperial  Jade,  Wriggling  Snake,  and  the  ones  depending on a specific tile (Gathering Plum Blossom,
       Catching the Moon, Scratching a Carrying Pole): which of these are so commonly adopted that  they  should
       be in even a fairly minimalist default set?

GAME OPTIONS

       This section describes the options that can be set in the game. Whether an option can be used, depends on
       the  version  of  the  programs.  This  is described by a "protocol version number"; this is not strictly
       speaking a version just of the communication protocol, but a version number reflecting the combination of
       protocol and programs. When playing by oneself, this does not matter, but in  the  case  of  a  networked
       game,  players  might have different versions of the software, in which case the game is played according
       to the lowest version of any player.

       Game options can be controlled in two ways: the --option-file argument to  the  mj-server  program  gives
       options to be applied to the game, or options can be set by the players, using the interface described in
       the manual section for xmj.

       In  the user interface, the options are referred to by a one line description, but each option also has a
       short name, given here.

       Options are of several types:

       bool   boolean, or on/off, options.

       int    integer options

       nat    non-negative integer options

       string is a miscellaneous type, whose values are strings of at most 127 characters which must not contain
              white space

       score  is the type used for options that give the score of some combination or feature in a hand. A score
              is either a limit (or a half-limit; the underlying protocol supports percentages  of  limits,  but
              the  current  user  programs  only  support  limits and half limits); or a number of doubles to be
              awarded; or a number of points to be added. It is possible (though  never  needed)  to  have  both
              points and doubles. If points/doubles are specified as well as a limit, they will be used in a no-
              limit  game.  (The  server  implements a hard limit of 100000000 on all scores to avoid arithmetic
              overflow, but that's unlikely to worry anybody.)

   Currently supported options
       The following options are implemented in the  versions  of  the  program  with  which  this  document  is
       distributed.  If  playing  against  people  with  older versions of the software, some options may not be
       available. The list gives for each option the short name, type, and  short  description,  followed  by  a
       detailed explanation.

       Timeout (nat) time limit for claims
              This is the time in seconds allowed to claim a discard, or to rob a kong. If set to zero, there is
              no timeout. The default is 15 seconds.

       TimeoutGrace (nat) grace period when clients handle timeouts
              This  period  (in  seconds)  is  added  to  the  Timeout above before the server actually forces a
              timeout. This is for when clients handle timeouts locally, and allows for network  lags.  If  this
              option is zero, clients are not permitted to handle timeouts locally. The current server also only
              allows players to handle timeouts locally if all of them wish to do so.

       ScoreLimit (nat) limit on hand score
              This  is  the  limit  for  the  score of a hand. In a no-limit game, it is the notional value of a
              "limit" hand. The default is 1000.

       NoLimit (bool) no-limit game
              If this option is set, the game has no limit on hand scores. The default is unset.

       MahJongScore (score) base score for going out
              This is the number of points for obtaining Mah-Jong.  The default is 20.

       SevenPairs (bool) seven pairs hand allowed
              If this option is set, then Mah-Jong hands of seven pairs  (any  seven  pairs)  are  allowed.  The
              default is unset.

       SevenPairsVal (score) score for a seven pair hand
              This  gives the score (in addition to the base Mah-Jong score) for a seven pairs hand. The default
              is 20.

       Flowers (bool) play using flowers and seasons
              If this option is set, the deal includes four flowers and four seasons in  the  Chinese  Classical
              style. If unset, only the 136 standard tiles are used. The default is set.

       FlowersLoose (bool) flowers replaced by loose tiles
              If  playing with flowers, this option determines whether flowers and seasons are replaced from the
              live wall (unset), or by loose tiles (set). The default is unset.

       FlowersOwnEach (score) score for each own flower or season
              This option gives the score for having one's own flower or season.  If one has  both,  this  score
              will be given twice. The default is no score.

       FlowersOwnBoth (score) score for own flower and own season
              This is the score for having both one's own flower and one's own season. Note that this is awarded
              in addition to twice the previous score. The default is 1 double.

       FlowersBouquet (score) score for all four flowers or all four seasons
              This is the score for having all four flowers or all four seasons.  The default is 1 double.

       DeadWall (bool) there is a dead wall
              This  determines  whether  there  is  a  dead wall, so that play ends when it is reached (set), or
              whether all tiles may be drawn (unset).  The default is set.

       DeadWall16 (bool) dead wall is 16 tiles, unreplenished
              If this option is set, then the dead wall initially has 16 tiles, and does not have any more tiles
              added to it (this is the set-up described by Millington). If the option is unset,  then  the  dead
              wall  initially  has 14 tiles, and after two loose tiles have been taken, two tiles are moved from
              the live wall to the dead wall (this is the set-up described by almost everyone else). The default
              is unset in versions 1.1 onwards, and set previously. (To be precise, the protocol  level  default
              is set, but all servers from 1.1 onwards will change this to unset.)

       ConcealedFully (score) score for fully concealed hand
              This is the score for a winning hand with no open sets.  The default is 1 double.

       ConcealedAlmost (score) score for almost concealed hand
              This  is  the  score for a hand that is concealed up to the point of going out.  The default is no
              additional score.

       LosersPurity (bool) losing hands score doubles for pure, concealed etc.
              If this option is set, losing hands will score various doubles for  one  suit,  almost  concealed,
              etc.  See  the rules for details. This option is an (Anglo-)Americanism alien to Chinese Classical
              (see Foster for a spirited but faulty argument in its favour, and Millington for  the  rejoinder).
              The default is unset.

       KongHas3Types (bool) claimed kongs count as concealed for doubling
              If  this  option  is  set,  claimed  kongs  count  as concealed for various doubling combinations,
              although they score as exposed for basic points. See the note above under "Kongs".  The default is
              unset.

       LosersSettle (bool) losers pay each other
              If this option is set, the losers pay each other the difference between their scores. If it unset,
              they pay only the winner.  The default is set.

       EastDoubles (bool) east pays and receives double
              If this option is set, payments to and from East Wind are doubled, as  in  the  Chinese  Classical
              game.  The default is set.

       DiscDoubles (bool) the discarder pays double
              If  this  option  is set, the settlement procedure is changed to a style common in Singapore. That
              is, if the winning player wins off a discard, the discarder pays double the hand  value,  and  the
              other  players  pay  the  hand value. If the winner wins from the wall, then all other players pay
              double the hand value.  The default is unset.   Note:  EastDoubles  and  DiscDoubles  can  be  set
              together, but nobody plays such a rule.

       ShowOnWashout (bool) reveal tiles on washout
              If this option is set, the players' hands will be revealed in the event of a washout.

       NumRounds (nat) number of rounds to play
              This  option  says how many rounds to play in the game. For aesthetic reasons, the possible values
              are 1, 2, or a multiple of 4. In the 2 round case, the East and South rounds will  be  played.  It
              defaults to the usual 4 rounds.

   Option file format
       Both  in  the  option  file and in the .xmjrc file, options are recorded in the format used by the server
       protocol. This is a line of the form

       GameOption 0 name type minprot enabled value desc

       The meanings of the elements are:

       GameOption 0
              identifies this as a game option line (the 0 is an irrelevant field from the protocol).

       name   is the name of the option.

       type   is the type of the option.

       minprot
              is the minimum protocol version with which the option can be used (which is  not  necessarily  the
              version at which it was introduced).

       enabled
              will always be 1.

       value  is  the value: a decimal (signed) integer for nat and int; 0 or 1 for bool; the string for string;
              and for score, if the score is c centi-limits, d doubles and p points, the value  is  c*1000000  +
              d*10000 + p.

       desc   is  a  short  description  of  the option, which is not required but is usually copied in from the
              server.

J.C.Bradfield                                       Mah-Jong                                              XMJ(6)