tMessage-handling code tidied up for new clients/servers - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b8e6c1180be932834cd0e7e59f211c5aa31a83ca
 (DIR) parent f6eb1f80293e4987d855294318867a02ca6a9541
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Wed, 13 Sep 2000 16:28:59 +0000
       
       Message-handling code tidied up for new clients/servers
       
       
       Diffstat:
         M TODO                                |       2 --
         M po/dopewars.pot                     |     590 +++++++++++++++---------------
         M src/AIPlayer.c                      |      35 +++++++++++++++----------------
         M src/curses_client.c                 |      57 ++++++++++++++++---------------
         M src/gtk_client.c                    |      47 ++++++++++++-------------------
         M src/message.c                       |     179 +++++++++++++++++++++----------
         M src/message.h                       |      10 +++++++---
         M src/serverside.c                    |       3 +--
         M src/win32_client.c                  |      41 +++++++++++++------------------
       
       9 files changed, 505 insertions(+), 459 deletions(-)
       ---
 (DIR) diff --git a/TODO b/TODO
       t@@ -1,5 +1,3 @@
       -- Ignore "To" message field in client, and "From" field in server; use
       -  A_PLAYERID ability to replace player names in protocol with player IDs
        - Fix GTK+ modal dialog behaviour (mouse grabbing during fighting) - _seems_
          to be OK...
        - Revamp player-player fighting
 (DIR) diff --git a/po/dopewars.pot b/po/dopewars.pot
       t@@ -6,7 +6,7 @@
        msgid ""
        msgstr ""
        "Project-Id-Version: PACKAGE VERSION\n"
       -"POT-Creation-Date: 2000-09-13 05:02+0100\n"
       +"POT-Creation-Date: 2000-09-13 16:56+0100\n"
        "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
        "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
        "Language-Team: LANGUAGE <LL@li.org>\n"
       t@@ -998,7 +998,7 @@ msgstr ""
        msgid "CLQP"
        msgstr ""
        
       -#: src/curses_client.c:371 src/gtk_client.c:807
       +#: src/curses_client.c:371 src/gtk_client.c:804
        msgid "Where to, dude ? "
        msgstr ""
        
       t@@ -1015,11 +1015,11 @@ msgstr ""
        msgid "How many do you drop? "
        msgstr ""
        
       -#: src/curses_client.c:454 src/curses_client.c:826
       +#: src/curses_client.c:454 src/curses_client.c:829
        msgid "What do you wish to buy? "
        msgstr ""
        
       -#: src/curses_client.c:456 src/curses_client.c:828
       +#: src/curses_client.c:456 src/curses_client.c:831
        msgid "What do you wish to sell? "
        msgstr ""
        
       t@@ -1084,7 +1084,7 @@ msgstr ""
        msgid " Are you sure? "
        msgstr ""
        
       -#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1688
       +#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1691
        msgid "YN"
        msgstr ""
        
       t@@ -1096,257 +1096,257 @@ msgstr ""
        msgid "New name: "
        msgstr ""
        
       -#: src/curses_client.c:621
       +#: src/curses_client.c:624
        msgid "You have been pushed from the server. Reverting to single player mode."
        msgstr ""
        
       -#: src/curses_client.c:631
       +#: src/curses_client.c:634
        msgid "The server has terminated. Reverting to single player mode."
        msgstr ""
        
       -#: src/curses_client.c:646 src/gtk_client.c:337 src/serverside.c:259
       +#: src/curses_client.c:649 src/gtk_client.c:335 src/serverside.c:258
        #, c-format
        msgid "%s joins the game!"
        msgstr ""
        
       -#: src/curses_client.c:651 src/gtk_client.c:343
       +#: src/curses_client.c:654 src/gtk_client.c:341
        #, c-format
        msgid "%s has left the game."
        msgstr ""
        
       -#: src/curses_client.c:656
       +#: src/curses_client.c:659
        #, c-format
        msgid "%s will now be known as %s."
        msgstr ""
        
       -#: src/curses_client.c:680
       +#: src/curses_client.c:683
        msgid "S U B W A Y"
        msgstr ""
        
       -#: src/curses_client.c:723
       +#: src/curses_client.c:726
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it."
        msgstr ""
        
       -#: src/curses_client.c:744
       +#: src/curses_client.c:747
        msgid "H I G H   S C O R E S"
        msgstr ""
        
       -#: src/curses_client.c:800
       +#: src/curses_client.c:803
        msgid "Will you B>uy, S>ell, or L>eave? "
        msgstr ""
        
       -#: src/curses_client.c:805
       +#: src/curses_client.c:808
        msgid "BSL"
        msgstr ""
        
       -#: src/curses_client.c:810
       +#: src/curses_client.c:813
        #, c-format
        msgid "You don't have any %s to sell!"
        msgstr ""
        
       -#: src/curses_client.c:817 src/gtk_client.c:1083
       +#: src/curses_client.c:820 src/gtk_client.c:1079
        #, c-format
        msgid "You'll need more %s to carry any more %s!"
        msgstr ""
        
       -#: src/curses_client.c:839 src/gtk_client.c:1087
       +#: src/curses_client.c:842 src/gtk_client.c:1083
        #, c-format
        msgid "You don't have enough space to carry that %s!"
        msgstr ""
        
       -#: src/curses_client.c:847 src/gtk_client.c:1091
       +#: src/curses_client.c:850 src/gtk_client.c:1087
        #, c-format
        msgid "You don't have enough cash to buy that %s!"
        msgstr ""
        
       -#: src/curses_client.c:860 src/gtk_client.c:1095
       +#: src/curses_client.c:863 src/gtk_client.c:1091
        msgid "You don't have any to sell!"
        msgstr ""
        
       -#: src/curses_client.c:884
       +#: src/curses_client.c:887
        msgid "How much money do you pay back? "
        msgstr ""
        
       -#: src/curses_client.c:890 src/curses_client.c:920 src/gtk_client.c:1930
       +#: src/curses_client.c:893 src/curses_client.c:923 src/gtk_client.c:1924
        msgid "You don't have that much money!"
        msgstr ""
        
       -#: src/curses_client.c:910
       +#: src/curses_client.c:913
        msgid "Do you want to D>eposit money, W>ithdraw money, or L>eave ? "
        msgstr ""
        
       -#: src/curses_client.c:913
       +#: src/curses_client.c:916
        msgid "DWL"
        msgstr ""
        
       -#: src/curses_client.c:915
       +#: src/curses_client.c:918
        msgid "How much money? "
        msgstr ""
        
       -#: src/curses_client.c:923 src/gtk_client.c:1923
       +#: src/curses_client.c:926 src/gtk_client.c:1917
        msgid "There isn't that much money in the bank..."
        msgstr ""
        
       -#: src/curses_client.c:1002
       +#: src/curses_client.c:1005
        msgid "Press any key..."
        msgstr ""
        
       -#: src/curses_client.c:1133
       +#: src/curses_client.c:1136
        msgid "Messages"
        msgstr ""
        
       -#: src/curses_client.c:1140 src/gtk_client.c:1381
       +#: src/curses_client.c:1143 src/gtk_client.c:1376
        msgid "Stats"
        msgstr ""
        
       -#: src/curses_client.c:1143
       +#: src/curses_client.c:1146
        #, c-format
        msgid "Cash %17s"
        msgstr ""
        
       -#: src/curses_client.c:1150
       +#: src/curses_client.c:1153
        #, c-format
        msgid "Health             %3d"
        msgstr ""
        
       -#: src/curses_client.c:1152
       +#: src/curses_client.c:1155
        #, c-format
        msgid "Bank %17s"
        msgstr ""
        
       -#: src/curses_client.c:1156
       +#: src/curses_client.c:1159
        #, c-format
        msgid "Debt %17s"
        msgstr ""
        
       -#: src/curses_client.c:1160
       +#: src/curses_client.c:1163
        #, c-format
        msgid "Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1162
       +#: src/curses_client.c:1165
        #, c-format
        msgid "%s %3d  Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1173
       +#: src/curses_client.c:1176
        msgid "Trenchcoat"
        msgstr ""
        
       -#: src/curses_client.c:1213
       +#: src/curses_client.c:1216
        #, c-format
        msgid "Spy reports for %s"
        msgstr ""
        
       -#: src/curses_client.c:1217 src/curses_client.c:1222
       +#: src/curses_client.c:1220 src/curses_client.c:1225
        #, c-format
        msgid "%s..."
        msgstr ""
        
       -#: src/curses_client.c:1243
       +#: src/curses_client.c:1246
        msgid "No other players are currently logged on!"
        msgstr ""
        
       -#: src/curses_client.c:1248
       +#: src/curses_client.c:1251
        msgid "Players currently logged on:-"
        msgstr ""
        
       -#: src/curses_client.c:1396
       +#: src/curses_client.c:1399
        msgid "Hey dude, what's your name? "
        msgstr ""
        
       -#: src/curses_client.c:1430
       +#: src/curses_client.c:1433
        #, c-format
        msgid "Hey dude, the prices of %s here are:"
        msgstr ""
        
       -#: src/curses_client.c:1442
       +#: src/curses_client.c:1445
        msgid "Will you B>uy"
        msgstr ""
        
       -#: src/curses_client.c:1443
       +#: src/curses_client.c:1446
        msgid ", S>ell"
        msgstr ""
        
       -#: src/curses_client.c:1444
       +#: src/curses_client.c:1447
        msgid ", D>rop"
        msgstr ""
        
       -#: src/curses_client.c:1445
       +#: src/curses_client.c:1448
        msgid ", T>alk, P>age, L>ist"
        msgstr ""
        
       -#: src/curses_client.c:1448
       +#: src/curses_client.c:1451
        msgid ", G>ive"
        msgstr ""
        
       -#: src/curses_client.c:1451
       +#: src/curses_client.c:1454
        msgid ", F>ight"
        msgstr ""
        
       -#: src/curses_client.c:1455
       +#: src/curses_client.c:1458
        msgid ", J>et"
        msgstr ""
        
       -#: src/curses_client.c:1457 src/curses_client.c:1472
       +#: src/curses_client.c:1460 src/curses_client.c:1475
        msgid ", or Q>uit? "
        msgstr ""
        
       -#: src/curses_client.c:1465
       +#: src/curses_client.c:1468
        msgid "Do you "
        msgstr ""
        
       -#: src/curses_client.c:1467
       +#: src/curses_client.c:1470
        msgid "F>ight, "
        msgstr ""
        
       -#: src/curses_client.c:1468
       +#: src/curses_client.c:1471
        msgid "S>tand, "
        msgstr ""
        
       -#: src/curses_client.c:1470
       +#: src/curses_client.c:1473
        msgid "R>un, "
        msgstr ""
        
       -#: src/curses_client.c:1471
       +#: src/curses_client.c:1474
        msgid "D>eal "
        msgstr ""
        
       -#: src/curses_client.c:1514
       +#: src/curses_client.c:1517
        msgid "Connection to server lost! Reverting to single player mode"
        msgstr ""
        
       -#: src/curses_client.c:1543
       +#: src/curses_client.c:1546
        msgid "BSDTPLGFJQ"
        msgstr ""
        
       -#: src/curses_client.c:1545
       +#: src/curses_client.c:1548
        msgid "DRFSQ"
        msgstr ""
        
       -#: src/curses_client.c:1573
       +#: src/curses_client.c:1576
        msgid "List what? P>layers or S>cores? "
        msgstr ""
        
       -#: src/curses_client.c:1574
       +#: src/curses_client.c:1577
        msgid "PS"
        msgstr ""
        
       -#: src/curses_client.c:1583
       +#: src/curses_client.c:1586
        msgid "Whom do you want to page (talk privately to) ? "
        msgstr ""
        
       -#: src/curses_client.c:1598
       +#: src/curses_client.c:1601
        msgid "Talk: "
        msgstr ""
        
       -#: src/curses_client.c:1687
       +#: src/curses_client.c:1690
        msgid "Play again? "
        msgstr ""
        
       -#: src/curses_client.c:1699
       +#: src/curses_client.c:1702
        msgid ""
        "No curses client available - rebuild the binary passing the\n"
        "--enable-curses-client option to configure, or use a windowed\n"
       t@@ -1441,216 +1441,216 @@ msgstr ""
        msgid "Start new game"
        msgstr ""
        
       -#: src/gtk_client.c:208
       +#: src/gtk_client.c:207
        msgid "Inventory"
        msgstr ""
        
       -#: src/gtk_client.c:236 src/gtk_client.c:2166 src/gtk_client.c:2534
       +#: src/gtk_client.c:235 src/gtk_client.c:2159 src/gtk_client.c:2523
        msgid "Close"
        msgstr ""
        
       -#: src/gtk_client.c:266
       +#: src/gtk_client.c:265
        msgid "Connection to server lost - switching to single player mode"
        msgstr ""
        
       -#: src/gtk_client.c:311
       +#: src/gtk_client.c:309
        msgid "You have been pushed from the server."
        msgstr ""
        
       -#: src/gtk_client.c:316
       +#: src/gtk_client.c:314
        msgid "The server has terminated."
        msgstr ""
        
       -#: src/gtk_client.c:356
       +#: src/gtk_client.c:354
        #, c-format
        msgid "Jetting to %s"
        msgstr ""
        
       -#: src/gtk_client.c:362
       +#: src/gtk_client.c:360
        msgid "<main>/Errands/Spy"
        msgstr ""
        
       -#: src/gtk_client.c:364
       +#: src/gtk_client.c:362
        #, c-format
        msgid "_Spy\t(%s)"
        msgstr ""
        
       -#: src/gtk_client.c:368
       +#: src/gtk_client.c:366
        #, c-format
        msgid "_Tipoff\t(%s)"
        msgstr ""
        
       -#: src/gtk_client.c:370
       +#: src/gtk_client.c:368
        msgid "<main>/Errands/Tipoff"
        msgstr ""
        
       -#: src/gtk_client.c:402
       +#: src/gtk_client.c:400
        msgid "High Scores"
        msgstr ""
        
       -#: src/gtk_client.c:436 src/gtk_client.c:1034 src/gtk_client.c:1494
       -#: src/gtk_client.c:1839 src/gtk_client.c:2004 src/gtk_client.c:2283
       -#: src/gtk_client.c:2441
       +#: src/gtk_client.c:434 src/gtk_client.c:1030 src/gtk_client.c:1489
       +#: src/gtk_client.c:1834 src/gtk_client.c:1998 src/gtk_client.c:2274
       +#: src/gtk_client.c:2431
        msgid "OK"
        msgstr ""
        
       -#: src/gtk_client.c:518
       +#: src/gtk_client.c:516
        msgid "Fight"
        msgstr ""
        
       -#: src/gtk_client.c:545
       +#: src/gtk_client.c:543
        #, c-format
        msgid "_Deal %s"
        msgstr ""
        
       -#: src/gtk_client.c:549 src/gtk_client.c:1127 src/gtk_client.c:1324
       +#: src/gtk_client.c:547 src/gtk_client.c:1122 src/gtk_client.c:1319
        msgid "_Fight"
        msgstr ""
        
       -#: src/gtk_client.c:552
       +#: src/gtk_client.c:550
        msgid "_Stand"
        msgstr ""
        
       -#: src/gtk_client.c:555 src/gtk_client.c:1126
       +#: src/gtk_client.c:553 src/gtk_client.c:1121
        msgid "_Run"
        msgstr ""
        
       -#: src/gtk_client.c:798
       +#: src/gtk_client.c:795
        msgid "Jet to location"
        msgstr ""
        
       -#: src/gtk_client.c:867
       +#: src/gtk_client.c:864
        #, c-format
        msgid "at %s"
        msgstr ""
        
       -#: src/gtk_client.c:872
       +#: src/gtk_client.c:869
        #, c-format
        msgid "You are currently carrying %d %s"
        msgstr ""
        
       -#: src/gtk_client.c:877
       +#: src/gtk_client.c:874
        #, c-format
        msgid "Available space: %d"
        msgstr ""
        
       -#: src/gtk_client.c:882
       +#: src/gtk_client.c:879
        #, c-format
        msgid "You can afford %d"
        msgstr ""
        
       -#: src/gtk_client.c:932 src/gtk_client.c:1063
       +#: src/gtk_client.c:928 src/gtk_client.c:1059
        msgid "Buy"
        msgstr ""
        
       -#: src/gtk_client.c:933 src/gtk_client.c:1064
       +#: src/gtk_client.c:929 src/gtk_client.c:1060
        msgid "Sell"
        msgstr ""
        
       -#: src/gtk_client.c:934 src/gtk_client.c:1065
       +#: src/gtk_client.c:930 src/gtk_client.c:1061
        msgid "Drop"
        msgstr ""
        
       -#: src/gtk_client.c:1022
       +#: src/gtk_client.c:1018
        #, c-format
        msgid "%s how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1040 src/gtk_client.c:1839 src/gtk_client.c:2015
       -#: src/gtk_client.c:2291
       +#: src/gtk_client.c:1036 src/gtk_client.c:1834 src/gtk_client.c:2009
       +#: src/gtk_client.c:2282
        msgid "Cancel"
        msgstr ""
        
       -#: src/gtk_client.c:1079
       +#: src/gtk_client.c:1075
        #, c-format
        msgid "You don't have any %s!"
        msgstr ""
        
       -#: src/gtk_client.c:1126 src/gtk_client.c:1840
       +#: src/gtk_client.c:1121 src/gtk_client.c:1835
        msgid "_Yes"
        msgstr ""
        
       -#: src/gtk_client.c:1126 src/gtk_client.c:1840
       +#: src/gtk_client.c:1121 src/gtk_client.c:1835
        msgid "_No"
        msgstr ""
        
       -#: src/gtk_client.c:1127
       +#: src/gtk_client.c:1122
        msgid "_Attack"
        msgstr ""
        
       -#: src/gtk_client.c:1127
       +#: src/gtk_client.c:1122
        msgid "_Evade"
        msgstr ""
        
       -#: src/gtk_client.c:1145
       +#: src/gtk_client.c:1140
        msgid "Question"
        msgstr ""
        
       -#: src/gtk_client.c:1254
       +#: src/gtk_client.c:1249
        msgid "<main>/Talk"
        msgstr ""
        
       -#: src/gtk_client.c:1256
       +#: src/gtk_client.c:1251
        msgid "<main>/List"
        msgstr ""
        
       -#: src/gtk_client.c:1258
       +#: src/gtk_client.c:1253
        msgid "<main>/Errands"
        msgstr ""
        
       -#: src/gtk_client.c:1274
       +#: src/gtk_client.c:1269
        msgid "Space"
        msgstr ""
        
       -#: src/gtk_client.c:1279
       +#: src/gtk_client.c:1274
        msgid "Cash"
        msgstr ""
        
       -#: src/gtk_client.c:1284
       +#: src/gtk_client.c:1279
        msgid "Debt"
        msgstr ""
        
       -#: src/gtk_client.c:1289
       +#: src/gtk_client.c:1284
        msgid "Bank"
        msgstr ""
        
       -#: src/gtk_client.c:1304
       +#: src/gtk_client.c:1299
        msgid "Health"
        msgstr ""
        
       -#: src/gtk_client.c:1324
       +#: src/gtk_client.c:1319
        msgid "_Jet!"
        msgstr ""
        
       -#: src/gtk_client.c:1355
       +#: src/gtk_client.c:1350
        msgid "dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1441
       +#: src/gtk_client.c:1436
        msgid "Drug Dealing and Research"
        msgstr ""
        
       -#: src/gtk_client.c:1442
       +#: src/gtk_client.c:1437
        msgid "Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1443
       +#: src/gtk_client.c:1438
        msgid "Extensive Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1445
       +#: src/gtk_client.c:1440
        msgid "Constructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1447
       +#: src/gtk_client.c:1442
        msgid "Unconstructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1451
       +#: src/gtk_client.c:1446
        msgid "About dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1460
       +#: src/gtk_client.c:1455
        msgid ""
        "Based on John E. Dell's old Drug Wars game, dopewars is a simulation of an\n"
        "imaginary drug market.  dopewars is an All-American game which features\n"
       t@@ -1662,151 +1662,151 @@ msgid ""
        "have one month of game time to make your fortune.\n"
        msgstr ""
        
       -#: src/gtk_client.c:1468
       +#: src/gtk_client.c:1463
        #, c-format
        msgid ""
        "Version %s     Copyright (C) 1998-2000  Ben Webb ben@bellatrix.pcl.ox.ac.uk\n"
        "dopewars is released under the GNU General Public Licence\n"
        msgstr ""
        
       -#: src/gtk_client.c:1486
       +#: src/gtk_client.c:1481
        msgid ""
        "\n"
        "For information on the command line options, type dopewars -h at your\n"
        "Unix prompt. This will display a help screen, listing the availableoptions."
        msgstr ""
        
       -#: src/gtk_client.c:1524 src/gtk_client.c:1547
       +#: src/gtk_client.c:1519 src/gtk_client.c:1542
        #, c-format
        msgid "Status: Could not connect (%s)"
        msgstr ""
        
       -#: src/gtk_client.c:1535
       +#: src/gtk_client.c:1530
        #, c-format
        msgid "Status: Attempting to contact %s..."
        msgstr ""
        
       -#: src/gtk_client.c:1595
       +#: src/gtk_client.c:1590
        #, c-format
        msgid "%d of %d"
        msgstr ""
        
       -#: src/gtk_client.c:1659 src/gtk_client.c:1700 src/gtk_client.c:1741
       +#: src/gtk_client.c:1654 src/gtk_client.c:1695 src/gtk_client.c:1736
        msgid "Server"
        msgstr ""
        
       -#: src/gtk_client.c:1660 src/gtk_client.c:1715
       +#: src/gtk_client.c:1655 src/gtk_client.c:1710
        msgid "Port"
        msgstr ""
        
       -#: src/gtk_client.c:1661
       +#: src/gtk_client.c:1656
        msgid "Version"
        msgstr ""
        
       -#: src/gtk_client.c:1662
       +#: src/gtk_client.c:1657
        msgid "Players"
        msgstr ""
        
       -#: src/gtk_client.c:1663
       +#: src/gtk_client.c:1658
        msgid "Comment"
        msgstr ""
        
       -#: src/gtk_client.c:1676
       +#: src/gtk_client.c:1671
        msgid "New Game"
        msgstr ""
        
       -#: src/gtk_client.c:1685
       +#: src/gtk_client.c:1680
        msgid "Hey dude, what's your _name?"
        msgstr ""
        
       -#: src/gtk_client.c:1707
       +#: src/gtk_client.c:1702
        msgid "Host name"
        msgstr ""
        
       -#: src/gtk_client.c:1730 src/gtk_client.c:1793
       +#: src/gtk_client.c:1725 src/gtk_client.c:1788
        msgid "_Connect"
        msgstr ""
        
       -#: src/gtk_client.c:1743 src/gtk_client.c:1764
       +#: src/gtk_client.c:1738 src/gtk_client.c:1759
        msgid "Single player"
        msgstr ""
        
       -#: src/gtk_client.c:1749
       +#: src/gtk_client.c:1744
        msgid "_Antique mode"
        msgstr ""
        
       -#: src/gtk_client.c:1756
       +#: src/gtk_client.c:1751
        msgid "_Start single-player game"
        msgstr ""
        
       -#: src/gtk_client.c:1766 src/gtk_client.c:1804
       +#: src/gtk_client.c:1761 src/gtk_client.c:1799
        msgid "Metaserver"
        msgstr ""
        
       -#: src/gtk_client.c:1783
       +#: src/gtk_client.c:1778
        msgid "_Update"
        msgstr ""
        
       -#: src/gtk_client.c:1808
       +#: src/gtk_client.c:1803
        msgid "Status: Waiting for user input"
        msgstr ""
        
       -#: src/gtk_client.c:1961
       +#: src/gtk_client.c:1955
        #, c-format
        msgid "Cash: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1968
       +#: src/gtk_client.c:1962
        #, c-format
        msgid "Debt: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1971
       +#: src/gtk_client.c:1965
        #, c-format
        msgid "Bank: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1979
       +#: src/gtk_client.c:1973
        msgid "Pay back:"
        msgstr ""
        
       -#: src/gtk_client.c:1982
       +#: src/gtk_client.c:1976
        msgid "Deposit"
        msgstr ""
        
       -#: src/gtk_client.c:1986
       +#: src/gtk_client.c:1980
        msgid "Withdraw"
        msgstr ""
        
       -#: src/gtk_client.c:2010
       +#: src/gtk_client.c:2004
        msgid "Pay all"
        msgstr ""
        
       -#: src/gtk_client.c:2032
       +#: src/gtk_client.c:2026
        msgid "Player List"
        msgstr ""
        
       -#: src/gtk_client.c:2121
       +#: src/gtk_client.c:2114
        msgid "Talk to player(s)"
        msgstr ""
        
       -#: src/gtk_client.c:2143
       +#: src/gtk_client.c:2136
        msgid "Talk to all players"
        msgstr ""
        
       -#: src/gtk_client.c:2147
       +#: src/gtk_client.c:2140
        msgid "Message:-"
        msgstr ""
        
       -#: src/gtk_client.c:2160
       +#: src/gtk_client.c:2153
        msgid "Send"
        msgstr ""
        
       -#: src/gtk_client.c:2253
       +#: src/gtk_client.c:2244
        msgid "Spy On Player"
        msgstr ""
        
       -#: src/gtk_client.c:2255
       +#: src/gtk_client.c:2246
        #, c-format
        msgid ""
        "Please choose the player to spy on. Your %s will\n"
       t@@ -1816,11 +1816,11 @@ msgid ""
        "you, so any %s or %s that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2263
       +#: src/gtk_client.c:2254
        msgid "Tip Off The Cops"
        msgstr ""
        
       -#: src/gtk_client.c:2265
       +#: src/gtk_client.c:2256
        #, c-format
        msgid ""
        "Please choose the player to tip off the cops to. Your %s will\n"
       t@@ -1829,71 +1829,71 @@ msgid ""
        "so any %s or %s that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2305
       +#: src/gtk_client.c:2296
        #, c-format
        msgid "Sack %s"
        msgstr ""
        
       -#: src/gtk_client.c:2306
       +#: src/gtk_client.c:2297
        #, c-format
        msgid ""
        "Are you sure? (Any %s or %s carried\n"
        "by this %s may be lost!)"
        msgstr ""
        
       -#: src/gtk_client.c:2327
       +#: src/gtk_client.c:2317
        msgid "Name"
        msgstr ""
        
       -#: src/gtk_client.c:2328
       +#: src/gtk_client.c:2318
        msgid "Price"
        msgstr ""
        
       -#: src/gtk_client.c:2329
       +#: src/gtk_client.c:2319
        msgid "Number"
        msgstr ""
        
       -#: src/gtk_client.c:2331
       +#: src/gtk_client.c:2321
        msgid "_Buy ->"
        msgstr ""
        
       -#: src/gtk_client.c:2332
       +#: src/gtk_client.c:2322
        msgid "<- _Sell"
        msgstr ""
        
       -#: src/gtk_client.c:2333
       +#: src/gtk_client.c:2323
        msgid "_Drop <-"
        msgstr ""
        
       -#: src/gtk_client.c:2338
       +#: src/gtk_client.c:2328
        #, c-format
        msgid "%s here"
        msgstr ""
        
       -#: src/gtk_client.c:2341
       +#: src/gtk_client.c:2331
        #, c-format
        msgid "%s carried"
        msgstr ""
        
       -#: src/gtk_client.c:2417
       +#: src/gtk_client.c:2407
        msgid "Change Name"
        msgstr ""
        
       -#: src/gtk_client.c:2427
       +#: src/gtk_client.c:2417
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it:-"
        msgstr ""
        
       -#: src/gtk_client.c:2486
       +#: src/gtk_client.c:2476
        msgid "Done"
        msgstr ""
        
       -#: src/gtk_client.c:2520
       +#: src/gtk_client.c:2509
        msgid "Spy reports"
        msgstr ""
        
       -#: src/gtk_client.c:2591
       +#: src/gtk_client.c:2580
        msgid ""
        "No GTK+ client available - rebuild the binary passing the\n"
        "--enable-gtk-client option to configure, or use the curses\n"
       t@@ -1948,77 +1948,77 @@ msgstr ""
        msgid "cannot read high score file\n"
        msgstr ""
        
       -#: src/serverside.c:269
       +#: src/serverside.c:268
        #, c-format
        msgid "MaxClients (%d) exceeded - dropping connection"
        msgstr ""
        
       -#: src/serverside.c:273
       +#: src/serverside.c:272
        msgid ""
        "Sorry, but this server has a limit of 1 player, which has been "
        "reached.^Please try connecting again later."
        msgstr ""
        
       -#: src/serverside.c:278
       +#: src/serverside.c:277
        #, c-format
        msgid ""
        "Sorry, but this server has a limit of %d players, which has been "
        "reached.^Please try connecting again later."
        msgstr ""
        
       -#: src/serverside.c:291
       +#: src/serverside.c:290
        #, c-format
        msgid "%s will now be known as %s"
        msgstr ""
        
       -#: src/serverside.c:306
       +#: src/serverside.c:305
        msgid "Your dealing time is up..."
        msgstr ""
        
       -#: src/serverside.c:317
       +#: src/serverside.c:316
        #, c-format
        msgid "%s: DENIED jet to %s"
        msgstr ""
        
       -#: src/serverside.c:374
       +#: src/serverside.c:373
        #, c-format
        msgid "%s now spying on %s"
        msgstr ""
        
       -#: src/serverside.c:382
       +#: src/serverside.c:381
        #, c-format
        msgid "%s spy on %s: DENIED"
        msgstr ""
        
       -#: src/serverside.c:388
       +#: src/serverside.c:387
        #, c-format
        msgid "%s tipped off the cops to %s"
        msgstr ""
        
       -#: src/serverside.c:396
       +#: src/serverside.c:395
        #, c-format
        msgid "%s tipoff about %s: DENIED"
        msgstr ""
        
       -#: src/serverside.c:503
       +#: src/serverside.c:502
        msgid "--More--"
        msgstr ""
        
       -#: src/serverside.c:514
       +#: src/serverside.c:513
        msgid "Pager exited abnormally - using stdout instead..."
        msgstr ""
        
       -#: src/serverside.c:529
       +#: src/serverside.c:528
        #, c-format
        msgid "Maintaining pid file %s"
        msgstr ""
        
       -#: src/serverside.c:533
       +#: src/serverside.c:532
        #, c-format
        msgid "Cannot create pid file %s"
        msgstr ""
        
       -#: src/serverside.c:582
       +#: src/serverside.c:581
        #, c-format
        msgid ""
        "Cannot open high score file %s.\n"
       t@@ -2026,144 +2026,144 @@ msgid ""
        "specify an alternate high score file with the -f command line option."
        msgstr ""
        
       -#: src/serverside.c:619
       +#: src/serverside.c:618
        #, c-format
        msgid ""
        "dopewars server version %s ready and waiting for connections\n"
        "on port %d. For assistance with server commands, enter the command \"help\"\n"
        msgstr ""
        
       -#: src/serverside.c:636
       +#: src/serverside.c:635
        msgid "Cannot install SIGUSR1 interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:642
       +#: src/serverside.c:641
        msgid "Cannot install SIGINT interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:645
       +#: src/serverside.c:644
        msgid "Cannot install SIGTERM interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:648
       +#: src/serverside.c:647
        msgid "Cannot install SIGHUP interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:653
       +#: src/serverside.c:652
        msgid "Cannot install pipe handler!"
        msgstr ""
        
       -#: src/serverside.c:676
       +#: src/serverside.c:675
        msgid "Users currently logged on:-\n"
        msgstr ""
        
       -#: src/serverside.c:681
       +#: src/serverside.c:680
        msgid "No users currently logged on!"
        msgstr ""
        
       -#: src/serverside.c:685
       +#: src/serverside.c:684
        #, c-format
        msgid "Pushing %s"
        msgstr ""
        
       -#: src/serverside.c:687 src/serverside.c:695
       +#: src/serverside.c:686 src/serverside.c:694
        msgid "No such user!"
        msgstr ""
        
       -#: src/serverside.c:691
       +#: src/serverside.c:690
        #, c-format
        msgid "%s killed"
        msgstr ""
        
       -#: src/serverside.c:697
       +#: src/serverside.c:696
        msgid "Unknown command - try \"help\" for help..."
        msgstr ""
        
       -#: src/serverside.c:714
       +#: src/serverside.c:713
        #, c-format
        msgid "got connection from %s"
        msgstr ""
        
       -#: src/serverside.c:730
       +#: src/serverside.c:729
        #, c-format
        msgid "%s leaves the server!"
        msgstr ""
        
       -#: src/serverside.c:798
       +#: src/serverside.c:797
        msgid "Standard input closed."
        msgstr ""
        
       -#: src/serverside.c:941
       +#: src/serverside.c:940
        #, c-format
        msgid "Unable to read high score file %s"
        msgstr ""
        
       -#: src/serverside.c:961
       +#: src/serverside.c:960
        msgid "Congratulations! You made the high scores!"
        msgstr ""
        
       -#: src/serverside.c:974
       +#: src/serverside.c:973
        msgid "You didn't even make the high score table..."
        msgstr ""
        
       -#: src/serverside.c:988
       +#: src/serverside.c:987
        #, c-format
        msgid "Unable to write high score file %s"
        msgstr ""
        
       -#: src/serverside.c:1007
       +#: src/serverside.c:1006
        msgid "(R.I.P.)"
        msgstr ""
        
       -#: src/serverside.c:1042
       +#: src/serverside.c:1041
        #, c-format
        msgid "%s: Tipoff from %s"
        msgstr ""
        
       -#: src/serverside.c:1059
       +#: src/serverside.c:1058
        #, c-format
        msgid "One of your %s was spying for %s.^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1067
       +#: src/serverside.c:1066
        #, c-format
        msgid "Your spy working with %s has been discovered!^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1090
       +#: src/serverside.c:1089
        #, c-format
        msgid " The lady next to you on the subway said,^ \"%s\"%s"
        msgstr ""
        
       -#: src/serverside.c:1093
       +#: src/serverside.c:1092
        msgid "^    (at least, you -think- that's what she said)"
        msgstr ""
        
       -#: src/serverside.c:1095
       +#: src/serverside.c:1094
        #, c-format
        msgid " You hear someone playing %s"
        msgstr ""
        
       -#: src/serverside.c:1104 src/serverside.c:1113 src/serverside.c:1122
       -#: src/serverside.c:1131
       +#: src/serverside.c:1103 src/serverside.c:1112 src/serverside.c:1121
       +#: src/serverside.c:1130
        #, c-format
        msgid "YN^Would you like to visit %s?"
        msgstr ""
        
       -#: src/serverside.c:1142
       +#: src/serverside.c:1141
        #, c-format
        msgid "YN^^Would you like to hire %s %s for %s?"
        msgstr ""
        
       -#: src/serverside.c:1143
       +#: src/serverside.c:1142
        msgid "an"
        msgstr ""
        
       -#: src/serverside.c:1143
       +#: src/serverside.c:1142
        msgid "a"
        msgstr ""
        
       -#: src/serverside.c:1155
       +#: src/serverside.c:1154
        #, c-format
        msgid "AE^%s is already here!^Do you Attack, or Evade?"
        msgstr ""
       t@@ -2172,336 +2172,336 @@ msgstr ""
        #. The format string used for this purpose can be altered by
        #. passing non-NULL "LoneMessage" (for unaccompanied Officer
        #. Hardass) and/or "DeputyMessage" (for him with x deputies)
       -#: src/serverside.c:1224
       +#: src/serverside.c:1223
        #, c-format
        msgid "YN^Officer %s is chasing you!"
        msgstr ""
        
       -#: src/serverside.c:1226
       +#: src/serverside.c:1225
        #, c-format
        msgid "YN^Officer %s and %d of his deputies are chasing you!"
        msgstr ""
        
       -#: src/serverside.c:1247
       +#: src/serverside.c:1246
        msgid "^Do you run?"
        msgstr ""
        
       -#: src/serverside.c:1250
       +#: src/serverside.c:1249
        msgid "^Do you Run, or Fight?"
        msgstr ""
        
       -#: src/serverside.c:1265
       +#: src/serverside.c:1264
        #, c-format
        msgid "%s: tipoff by %s finished OK."
        msgstr ""
        
       -#: src/serverside.c:1271
       +#: src/serverside.c:1270
        #, c-format
        msgid "Following your tipoff, the cops ambushed %s, who was shot dead"
        msgstr ""
        
       -#: src/serverside.c:1275
       +#: src/serverside.c:1274
        #, c-format
        msgid "Following your tipoff, the cops ambushed %s, who escaped with %d %s. "
        msgstr ""
        
       -#: src/serverside.c:1312
       +#: src/serverside.c:1311
        msgid "^You stand there like an idiot."
        msgstr ""
        
       -#: src/serverside.c:1316
       +#: src/serverside.c:1315
        msgid "^You lose him in the alleys."
        msgstr ""
        
       -#: src/serverside.c:1318
       +#: src/serverside.c:1317
        msgid "^You lose them in the alleys."
        msgstr ""
        
       -#: src/serverside.c:1326
       +#: src/serverside.c:1325
        msgid "^You can't shake him, man!"
        msgstr ""
        
       -#: src/serverside.c:1328
       +#: src/serverside.c:1327
        msgid "^You can't shake them, man!"
        msgstr ""
        
       -#: src/serverside.c:1339
       +#: src/serverside.c:1338
        #, c-format
        msgid "^You killed Officer %s! You find %s on his corpse!"
        msgstr ""
        
       -#: src/serverside.c:1353
       +#: src/serverside.c:1352
        #, c-format
        msgid "YN^^^^Do you pay a doctor %s to sew your %s up?"
        msgstr ""
        
       -#: src/serverside.c:1357
       +#: src/serverside.c:1356
        #, c-format
        msgid "YN^^^^Do you pay a doctor %s to sew you up?"
        msgstr ""
        
       -#: src/serverside.c:1369
       +#: src/serverside.c:1368
        msgid "^You got one, man!"
        msgstr ""
        
       -#: src/serverside.c:1372
       +#: src/serverside.c:1371
        msgid "^You missed!"
        msgstr ""
        
       -#: src/serverside.c:1376
       +#: src/serverside.c:1375
        msgid "^He's firing on you, man! "
        msgstr ""
        
       -#: src/serverside.c:1378
       +#: src/serverside.c:1377
        msgid "^They're firing on you, man! "
        msgstr ""
        
       -#: src/serverside.c:1381
       +#: src/serverside.c:1380
        msgid "You've been hit! "
        msgstr ""
        
       -#: src/serverside.c:1388
       +#: src/serverside.c:1387
        msgid "He wasted you, man! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1390
       +#: src/serverside.c:1389
        msgid "They wasted you, man! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1398
       +#: src/serverside.c:1397
        #, c-format
        msgid "You lost one of your %s!"
        msgstr ""
        
       -#: src/serverside.c:1407
       +#: src/serverside.c:1406
        msgid "He missed!"
        msgstr ""
        
       -#: src/serverside.c:1409
       +#: src/serverside.c:1408
        msgid "They missed!"
        msgstr ""
        
       -#: src/serverside.c:1429
       +#: src/serverside.c:1428
        msgid "You were mugged in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1440
       +#: src/serverside.c:1439
        #, c-format
        msgid "You meet a friend! He gives you %d %s."
        msgstr ""
        
       -#: src/serverside.c:1445
       +#: src/serverside.c:1444
        #, c-format
        msgid "You meet a friend! You give him %d %s."
        msgstr ""
        
       -#: src/serverside.c:1452
       +#: src/serverside.c:1451
        msgid "Sanitized away a RandomOffer"
        msgstr ""
        
       -#: src/serverside.c:1457
       +#: src/serverside.c:1456
        #, c-format
        msgid ""
        "Police dogs chase you for %d blocks! You dropped some %s! That's a drag, man!"
        msgstr ""
        
       -#: src/serverside.c:1471
       +#: src/serverside.c:1470
        #, c-format
        msgid "You find %d %s on a dead dude in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1483
       +#: src/serverside.c:1482
        #, c-format
        msgid "Your mama made brownies with some of your %s! They were great!"
        msgstr ""
        
       -#: src/serverside.c:1491
       +#: src/serverside.c:1490
        msgid ""
        "YN^There is some weed that smells like paraquat here!^It looks good! Will "
        "you smoke it? "
        msgstr ""
        
       -#: src/serverside.c:1498
       +#: src/serverside.c:1497
        #, c-format
        msgid "You stopped to %s."
        msgstr ""
        
       -#: src/serverside.c:1519
       +#: src/serverside.c:1518
        #, c-format
        msgid "Would you like to buy a bigger trenchcoat for %s?"
        msgstr ""
        
       -#: src/serverside.c:1524
       +#: src/serverside.c:1523
        #, c-format
        msgid "YN^Hey dude! I'll help carry your %s for a mere %s. Yes or no?"
        msgstr ""
        
       -#: src/serverside.c:1536
       +#: src/serverside.c:1535
        #, c-format
        msgid "YN^Would you like to buy a %s for %s?"
        msgstr ""
        
       -#: src/serverside.c:1637 src/serverside.c:1748
       +#: src/serverside.c:1636 src/serverside.c:1747
        #, c-format
        msgid "%s: offer was on behalf of %s"
        msgstr ""
        
       -#: src/serverside.c:1640
       +#: src/serverside.c:1639
        #, c-format
        msgid "%s has accepted your %s!^Use the G key to contact your spy."
        msgstr ""
        
       -#: src/serverside.c:1686
       +#: src/serverside.c:1685
        msgid ""
        "You hallucinated for three days on the wildest trip you ever imagined!^Then "
        "you died because your brain disintegrated!"
        msgstr ""
        
       -#: src/serverside.c:1725
       +#: src/serverside.c:1724
        #, c-format
        msgid "Too late - %s has just left!"
        msgstr ""
        
       -#: src/serverside.c:1751
       +#: src/serverside.c:1750
        #, c-format
        msgid "%s has rejected your %s!"
        msgstr ""
        
       -#: src/serverside.c:1786
       +#: src/serverside.c:1785
        #, c-format
        msgid "%s has got away!"
        msgstr ""
        
       -#: src/serverside.c:1827
       +#: src/serverside.c:1826
        #, c-format
        msgid "%s has run off!"
        msgstr ""
        
       -#: src/serverside.c:1839
       +#: src/serverside.c:1838
        msgid "Coward! You successfully escaped from the fight."
        msgstr ""
        
       -#: src/serverside.c:1895
       +#: src/serverside.c:1894
        msgid "pitifully armed"
        msgstr ""
        
       -#: src/serverside.c:1896
       +#: src/serverside.c:1895
        msgid "lightly armed"
        msgstr ""
        
       -#: src/serverside.c:1897
       +#: src/serverside.c:1896
        msgid "moderately well armed"
        msgstr ""
        
       -#: src/serverside.c:1898
       +#: src/serverside.c:1897
        msgid "heavily armed"
        msgstr ""
        
       -#: src/serverside.c:1899
       +#: src/serverside.c:1898
        msgid "armed to the teeth"
        msgstr ""
        
       -#: src/serverside.c:1900
       +#: src/serverside.c:1899
        msgid " fires and "
        msgstr ""
        
       -#: src/serverside.c:1901
       +#: src/serverside.c:1900
        msgid " stands and takes it."
        msgstr ""
        
       -#: src/serverside.c:1904
       +#: src/serverside.c:1903
        #, c-format
        msgid "%s arrives, with %d %s, %s,^%s"
        msgstr ""
        
       -#: src/serverside.c:1908
       +#: src/serverside.c:1907
        #, c-format
        msgid "%s arrives, %s,^%s"
        msgstr ""
        
       -#: src/serverside.c:1913
       +#: src/serverside.c:1912
        #, c-format
        msgid "%s fires and "
        msgstr ""
        
       -#: src/serverside.c:1915
       +#: src/serverside.c:1914
        #, c-format
        msgid "%s stands and takes it."
        msgstr ""
        
       -#: src/serverside.c:1927
       +#: src/serverside.c:1926
        msgid "misses you!"
        msgstr ""
        
       -#: src/serverside.c:1928
       +#: src/serverside.c:1927
        #, c-format
        msgid "You failed to hit %s."
        msgstr ""
        
       -#: src/serverside.c:1931
       +#: src/serverside.c:1930
        msgid "You stand and take it."
        msgstr ""
        
       -#: src/serverside.c:1935
       +#: src/serverside.c:1934
        msgid "hits you, man!"
        msgstr ""
        
       -#: src/serverside.c:1938
       +#: src/serverside.c:1937
        msgid " You've been wasted! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1939
       +#: src/serverside.c:1938
        #, c-format
        msgid "You hit and killed %s"
        msgstr ""
        
       -#: src/serverside.c:1954 src/serverside.c:1987
       +#: src/serverside.c:1953 src/serverside.c:1986
        msgid ", and loot the body!"
        msgstr ""
        
       -#: src/serverside.c:1963
       +#: src/serverside.c:1962
        #, c-format
        msgid "^You lost a %s, man!"
        msgstr ""
        
       -#: src/serverside.c:1968
       +#: src/serverside.c:1967
        #, c-format
        msgid "You are paid a bounty of %s in reward for killing^one of %s's %s"
        msgstr ""
        
       -#: src/serverside.c:1976
       +#: src/serverside.c:1975
        #, c-format
        msgid "You killed one of %s's %s (%d left)"
        msgstr ""
        
       -#: src/serverside.c:1994
       +#: src/serverside.c:1993
        #, c-format
        msgid "You fire, and hit %s!"
        msgstr ""
        
       -#: src/serverside.c:2034
       +#: src/serverside.c:2033
        msgid "YN^Officer %%s spots you dropping %s, and chases you!"
        msgstr ""
        
       -#: src/serverside.c:2036
       +#: src/serverside.c:2035
        msgid ""
        "YN^Officer %%s and %%d of his deputies spot you dropping %s, and chase you!"
        msgstr ""
        
       -#: src/serverside.c:2191
       +#: src/serverside.c:2190
        msgid "Player removed due to idle timeout"
        msgstr ""
        
       -#: src/serverside.c:2201
       +#: src/serverside.c:2200
        msgid "Player removed due to connect timeout"
        msgstr ""
        
       -#: src/serverside.c:2207 src/serverside.c:2213
       +#: src/serverside.c:2206 src/serverside.c:2212
        #, c-format
        msgid "%s fails to return fire..."
        msgstr ""
        
       -#: src/message.c:449
       +#: src/message.c:467
        #, c-format
        msgid ""
        "This server is version %s, while your client is version %s.\n"
       t@@ -2510,27 +2510,27 @@ msgid ""
        "for the latest version."
        msgstr ""
        
       -#: src/message.c:588
       +#: src/message.c:606
        msgid "Could not find host"
        msgstr ""
        
       -#: src/message.c:589
       +#: src/message.c:607
        msgid "Could not create network socket"
        msgstr ""
        
       -#: src/message.c:590 src/message.c:623
       +#: src/message.c:608 src/message.c:641
        msgid "Connection refused or no server present"
        msgstr ""
        
       -#: src/message.c:789
       +#: src/message.c:800
        msgid "Cannot locate metaserver"
        msgstr ""
        
       -#: src/message.c:790
       +#: src/message.c:801
        msgid "Cannot create socket"
        msgstr ""
        
       -#: src/message.c:792
       +#: src/message.c:803
        msgid "Metaserver not running HTTP or connection denied"
        msgstr ""
        
       t@@ -2659,7 +2659,7 @@ msgstr ""
        msgid "Reckon I'll just have to shoot you for your own good."
        msgstr ""
        
       -#: src/AIPlayer.c:448
       +#: src/AIPlayer.c:447
        msgid ""
        "This binary has been compiled without networking support, and thus cannot "
        "act as an AI player.\n"
 (DIR) diff --git a/src/AIPlayer.c b/src/AIPlayer.c
       t@@ -107,7 +107,7 @@ void AISetName(Player *AIPlay) {
           text=g_strdup_printf("AI) %s",AINames[brandom(0,NUMNAMES)]);
           SetPlayerName(AIPlay,text);
           g_free(text);
       -   SendClientMessage(NULL,C_NONE,C_NAME,NULL,GetPlayerName(AIPlay),AIPlay);
       +   SendNullClientMessage(AIPlay,C_NONE,C_NAME,NULL,GetPlayerName(AIPlay));
           g_print(_("Using name %s\n"),GetPlayerName(AIPlay));
        }
        
       t@@ -116,16 +116,16 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
        /* "Message" for AI player "AIPlay". Returns 1 if the game should */
        /* be ended as a result, 0 otherwise.                             */
           char *Data,Code,AICode,WasFighting;
       -   Player *From,*To,*tmp;
       +   Player *From,*tmp;
           GSList *list;
           gchar *prstr,*prstr2;
           struct timeval tv;
           gboolean Handled;
       -   if (ProcessMessage(Message,AIPlay,&From,&AICode,&Code,&To,
       +   if (ProcessMessage(Message,AIPlay,&From,&AICode,&Code,
                              &Data,FirstClient)==-1) {
              g_warning("Bad network message. Oops."); return 0;
           }
       -   Handled=HandleGenericClientMessage(From,AICode,Code,To,Data,NULL);
       +   Handled=HandleGenericClientMessage(From,AICode,Code,AIPlay,Data,NULL);
           switch(Code) {
              case C_ENDLIST:
                 g_print(_("Players in this game:-\n"));
       t@@ -143,7 +143,7 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                    AIPlay->Flags |= FIGHTING+CANSHOOT;
                 }
                 if (TotalGunsCarried(AIPlay)>0 && AIPlay->Health>MINSAFEHEALTH) {
       -            SendClientMessage(AIPlay,C_NONE,C_FIGHTACT,NULL,"F",AIPlay);
       +            SendClientMessage(AIPlay,C_NONE,C_FIGHTACT,NULL,"F");
                 } else {
                    AIJet(AIPlay);
                 }
       t@@ -155,7 +155,7 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 g_print("%s: %s\n",GetPlayerName(From),Data);
                 break;
              case C_MSGTO:
       -         g_print("%s->%s: %s\n",GetPlayerName(From),GetPlayerName(To),Data);
       +         g_print("%s->%s: %s\n",GetPlayerName(From),GetPlayerName(AIPlay),Data);
                 break;
              case C_JOIN:
                 g_print(_("%s joins the game.\n"),Data); break;
       t@@ -180,7 +180,7 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 WasFighting=FALSE;
                 if (From==&Noone) {
                    if (AIPlay->Flags & FIGHTING) WasFighting=TRUE;
       -            ReceivePlayerData(Data,To);
       +            ReceivePlayerData(Data,AIPlay);
                 } else {
                    ReceivePlayerData(Data,From); /* spy reports */
                 }
       t@@ -219,7 +219,7 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 return 1;
              default:
                 if (!Handled) g_message("%s^%c^%s%s\n",GetPlayerName(From),Code,
       -                                                GetPlayerName(To),Data);
       +                                                GetPlayerName(AIPlay),Data);
                 break;
           }
           return 0;
       t@@ -275,7 +275,7 @@ void AIDealDrugs(Player *AIPlay) {
                 AIPlay->CoatSize+=Num;
                 AIPlay->Cash+=Num*AIPlay->Drugs[Highest].Price;
                 text=g_strdup_printf("drug^%d^%d",Highest,-Num);
       -         SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text,AIPlay);
       +         SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text);
                 g_free(text);
              }
              if (AIPlay->Drugs[Highest].Price != 0 &&
       t@@ -291,7 +291,7 @@ void AIDealDrugs(Player *AIPlay) {
                    text=g_strdup_printf("drug^%d^%d",Highest,Num);
                    AIPlay->CoatSize-=Num;
                    AIPlay->Cash-=Num*AIPlay->Drugs[Highest].Price;
       -            SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text,AIPlay);
       +            SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                 }
              }
       t@@ -318,12 +318,12 @@ void AIGunShop(Player *AIPlay) {
                           (prstr=FormatPrice(Gun[i].Price)));
                    g_free(prstr);
                    text=g_strdup_printf("gun^%d^1",i);
       -            SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text,AIPlay);
       +            SendClientMessage(AIPlay,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                 }
              }
           } while (Bought);
       -   SendClientMessage(AIPlay,C_NONE,C_DONE,NULL,NULL,AIPlay);
       +   SendClientMessage(AIPlay,C_NONE,C_DONE,NULL,NULL);
        }
        
        void AIJet(Player *AIPlay) {
       t@@ -343,7 +343,7 @@ void AIJet(Player *AIPlay) {
           }
           while (NewLocation==AIPlay->IsAt) NewLocation=brandom(0,NumLocation);
           sprintf(text,"%d",NewLocation);
       -   SendClientMessage(AIPlay,C_NONE,C_REQUESTJET,NULL,text,AIPlay);
       +   SendClientMessage(AIPlay,C_NONE,C_REQUESTJET,NULL,text);
        }
        
        void AIPayLoan(Player *AIPlay) {
       t@@ -352,19 +352,19 @@ void AIPayLoan(Player *AIPlay) {
           gchar *prstr;
           if (AIPlay->Cash-AIPlay->Debt >= MINSAFECASH) {
              prstr=pricetostr(AIPlay->Debt);
       -      SendClientMessage(AIPlay,C_NONE,C_PAYLOAN,NULL,prstr,AIPlay);
       +      SendClientMessage(AIPlay,C_NONE,C_PAYLOAN,NULL,prstr);
              g_free(prstr);
              g_print(_("Debt of %s paid off to loan shark\n"),
                     (prstr=FormatPrice(AIPlay->Debt)));
              g_free(prstr);
           }
       -   SendClientMessage(AIPlay,C_NONE,C_DONE,NULL,NULL,AIPlay);
       +   SendClientMessage(AIPlay,C_NONE,C_DONE,NULL,NULL);
        }
        
        void AISendAnswer(Player *From,Player *To,char *answer) {
        /* Sends the answer "answer" from AI player "From" to the server,        */
        /* claiming to be for player "To". Also prints the answer on the screen. */
       -   SendClientMessage(From,C_NONE,C_ANSWER,To,answer,From); puts(answer);
       +   SendClientMessage(From,C_NONE,C_ANSWER,To,answer); puts(answer);
        }
        
        void AIHandleQuestion(char *Data,char AICode,Player *AIPlay,Player *From) {
       t@@ -438,8 +438,7 @@ void AISendRandomMessage(Player *AIPlay) {
              N_("Zzzzz... are you dealing in candy or what?"),
              N_("Reckon I'll just have to shoot you for your own good.")
           };
       -   SendClientMessage(AIPlay,C_NONE,C_MSG,NULL,
       -                     _(RandomInsult[brandom(0,5)]),AIPlay);
       +   SendClientMessage(AIPlay,C_NONE,C_MSG,NULL,_(RandomInsult[brandom(0,5)]));
        }
        
        #else /* NETWORKING */
 (DIR) diff --git a/src/curses_client.c b/src/curses_client.c
       t@@ -379,7 +379,7 @@ static int jet(Player *Play,char AllowReturn) {
                    curs_set(0);
                    sprintf(text,"%d",c-'1');
                    DisplayMode=DM_NONE;
       -            SendClientMessage(Play,C_NONE,C_REQUESTJET,NULL,text,Play);
       +            SendClientMessage(Play,C_NONE,C_REQUESTJET,NULL,text);
                    return 1;
                 }
              }
       t@@ -426,7 +426,7 @@ static void DropDrugs(Player *Play) {
                    c=atoi(buf); g_free(buf);
                    if (c>0) {
                       g_string_sprintf(text,"drug^%d^%d",i,-c);
       -               SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text->str,Play);
       +               SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text->str);
                    }
                    break;
                 }
       t@@ -477,7 +477,7 @@ static void DealDrugs(Player *Play,char Buy) {
                 c=atoi(input); g_free(input); g_free(text);
                 if (c>=0) {
                    text=g_strdup_printf("drug^%d^%d",DrugNum,c);
       -            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text,Play);
       +            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                 }
              } else {
       t@@ -487,7 +487,7 @@ static void DealDrugs(Player *Play,char Buy) {
                 c=atoi(input); g_free(input); g_free(text);
                 if (c>=0) {
                    text=g_strdup_printf("drug^%d^%d",DrugNum,-c);
       -            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text,Play);
       +            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                 }
              }
       t@@ -531,22 +531,22 @@ static void GiveErrand(Player *Play) {
           if (Play->Bitches.Carried>0 || c=='C') switch (c) {
              case 'S':
                 To=ListPlayers(Play,TRUE,_("Whom do you want to spy on? "));
       -         if (To) SendClientMessage(Play,C_NONE,C_SPYON,To,NULL,Play);
       +         if (To) SendClientMessage(Play,C_NONE,C_SPYON,To,NULL);
                 break;
              case 'T':
                 To=ListPlayers(Play,TRUE,
                                _("Whom do you want to tip the cops off to? "));
       -         if (To) SendClientMessage(Play,C_NONE,C_TIPOFF,To,NULL,Play);
       +         if (To) SendClientMessage(Play,C_NONE,C_TIPOFF,To,NULL);
                 break;
              case 'G':
                 attrset(PromptAttr);
                 addstr(_(" Are you sure? "));
                 c=GetKey(_("YN"),"YN",FALSE,TRUE);
       -         if (c=='Y') SendClientMessage(Play,C_NONE,C_SACKBITCH,NULL,NULL,Play);
       +         if (c=='Y') SendClientMessage(Play,C_NONE,C_SACKBITCH,NULL,NULL);
                 break;
              case 'C':
                 if (Play->Flags & SPYINGON) {
       -            SendClientMessage(Play,C_NONE,C_CONTACTSPY,NULL,NULL,Play);
       +            SendClientMessage(Play,C_NONE,C_CONTACTSPY,NULL,NULL);
                 }
                 break;
           }
       t@@ -567,7 +567,11 @@ static void change_name(Player *Play,char nullname) {
           gchar *NewName;
           NewName=nice_input(_("New name: "),23,0,0,NULL);
           if (NewName[0]) {
       -      SendClientMessage(nullname ? NULL : Play,C_NONE,C_NAME,NULL,NewName,Play);
       +      if (nullname) {
       +         SendNullClientMessage(Play,C_NONE,C_NAME,NULL,NewName);
       +      } else {
       +         SendClientMessage(Play,C_NONE,C_NAME,NULL,NewName);
       +      }
              SetPlayerName(Play,NewName);
           }
           g_free(NewName);
       t@@ -588,8 +592,7 @@ void HandleClientMessage(char *Message,Player *Play) {
           gboolean Handled;
        
        /* Ignore To: field - all messages will be for Player "Play" */
       -   if (ProcessMessage(Message,Play,&From,&AICode,&Code,NULL,
       -                      &Data,FirstClient)==-1) {
       +   if (ProcessMessage(Message,Play,&From,&AICode,&Code,&Data,FirstClient)==-1) {
              return;
           }
        
       t@@ -694,20 +697,20 @@ void HandleClientMessage(char *Message,Player *Play) {
                 i=GetKey(wrd,wrd,FALSE,TRUE);
                 wrd=g_strdup_printf("%c",i);
                 SendClientMessage(Play,C_NONE,C_ANSWER,
       -                           From==&Noone ? NULL : From,wrd,Play);
       +                           From==&Noone ? NULL : From,wrd);
                 g_free(wrd);
                 break;
              case C_LOANSHARK:
                 LoanShark(Play);
       -         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL,Play);
       +         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL);
                 break;
              case C_BANK:
                 Bank(Play);
       -         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL,Play);
       +         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL);
                 break;
              case C_GUNSHOP:
                 GunShop(Play);
       -         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL,Play);
       +         SendClientMessage(Play,C_NONE,C_DONE,NULL,NULL);
                 break;
              case C_UPDATE:
                 if (From==&Noone) {
       t@@ -865,7 +868,7 @@ void GunShop(Player *Play) {
                       Play->Guns[c2].Carried--;
                    }
                    text=g_strdup_printf("gun^%d^%d",c2,c=='B' ? 1 : -1);
       -            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text,Play);
       +            SendClientMessage(Play,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                    print_status(Play,0);
                 }
       t@@ -891,7 +894,7 @@ void LoanShark(Player *Play) {
                 nice_wait();
              } else {
                 SendClientMessage(Play,C_NONE,C_PAYLOAN,NULL,
       -                           (prstr=pricetostr(money)),Play);
       +                           (prstr=pricetostr(money)));
                 g_free(prstr);
                 break;
              }
       t@@ -926,7 +929,7 @@ void Bank(Player *Play) {
                 break;
              } else {
                 SendClientMessage(Play,C_NONE,C_DEPOSIT,NULL,
       -                           (prstr=pricetostr(money)),Play);
       +                           (prstr=pricetostr(money)));
                 g_free(prstr);
                 break;
              }
       t@@ -1406,7 +1409,7 @@ static void Curses_DoGame(Player *Play) {
        
           SendAbilities(Play);
           SetPlayerName(Play,buf);
       -   SendClientMessage(NULL,C_NONE,C_NAME,NULL,buf,Play);
       +   SendNullClientMessage(Play,C_NONE,C_NAME,NULL,buf);
           g_free(buf); g_free(OldName);
        
           text=g_string_new("");
       t@@ -1566,7 +1569,7 @@ static void Curses_DoGame(Player *Play) {
                       if (want_to_quit()==1) {
                          DisplayMode=DM_NONE;
                          clear_bottom();
       -                  SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL,Play);
       +                  SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL);
                       }
                    } else if (c=='L' && Network) {
                       attrset(PromptAttr);
       t@@ -1576,7 +1579,7 @@ static void Curses_DoGame(Player *Play) {
                          ListPlayers(Play,FALSE,NULL);
                       } else if (i=='S') {
                          DisplayMode=DM_NONE;
       -                  SendClientMessage(Play,C_NONE,C_REQUESTSCORE,NULL,NULL,Play);
       +                  SendClientMessage(Play,C_NONE,C_REQUESTSCORE,NULL,NULL);
                       }
                    } else if (c=='P' && Network) {
                       tmp=ListPlayers(Play,TRUE,
       t@@ -1585,7 +1588,7 @@ static void Curses_DoGame(Player *Play) {
                          attrset(TextAttr); clear_line(22);
                          TalkMsg=nice_input("Talk: ",22,0,0,NULL);
                          if (TalkMsg[0]) {
       -                     SendClientMessage(Play,C_NONE,C_MSGTO,tmp,TalkMsg,Play);
       +                     SendClientMessage(Play,C_NONE,C_MSGTO,tmp,TalkMsg);
                             buf=g_strdup_printf("%s->%s: %s",GetPlayerName(Play),
                                     GetPlayerName(tmp),TalkMsg);
                             display_message(buf);
       t@@ -1597,7 +1600,7 @@ static void Curses_DoGame(Player *Play) {
                       attrset(TextAttr); clear_line(22);
                       TalkMsg=nice_input(_("Talk: "),22,0,0,NULL);
                       if (TalkMsg[0]) {
       -                  SendClientMessage(Play,C_NONE,C_MSG,NULL,TalkMsg,Play);
       +                  SendClientMessage(Play,C_NONE,C_MSG,NULL,TalkMsg);
                          buf=g_strdup_printf("%s: %s",GetPlayerName(Play),TalkMsg);
                          display_message(buf);
                          g_free(buf);
       t@@ -1616,7 +1619,7 @@ static void Curses_DoGame(Player *Play) {
                          if (TotalGunsCarried(Play)>0 && Play->Flags&CANSHOOT) {
                             buf=g_strdup_printf("%c",c);
                             Play->Flags &= ~CANSHOOT;
       -                     SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,buf,Play);
       +                     SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,buf);
                             g_free(buf);
                          }
                          break;
       t@@ -1624,14 +1627,14 @@ static void Curses_DoGame(Player *Play) {
                          if (TotalGunsCarried(Play)==0 && Play->Flags&CANSHOOT) {
                             buf=g_strdup_printf("%c",c);
                             Play->Flags &= ~CANSHOOT;
       -                     SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,buf,Play);
       +                     SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,buf);
                             g_free(buf);
                          }
                          break;
                       case 'Q':
                          if (want_to_quit()==1) {
                             DisplayMode=DM_NONE; clear_bottom();
       -                     SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL,Play);
       +                     SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL);
                          }
                          break;
                    }
       t@@ -1643,7 +1646,7 @@ static void Curses_DoGame(Player *Play) {
                       case 'Q':
                          if (want_to_quit()==1) {
                             DisplayMode=DM_NONE; clear_bottom();
       -                     SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL,Play);
       +                     SendClientMessage(Play,C_NONE,C_WANTQUIT,NULL,NULL);
                          }
                          break;
                    }
 (DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
       t@@ -191,8 +191,7 @@ void NewGame(GtkWidget *widget,gpointer data) {
        }
        
        void ListScores(GtkWidget *widget,gpointer data) {
       -   SendClientMessage(ClientData.Play,C_NONE,C_REQUESTSCORE,NULL,NULL,
       -                     ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_REQUESTSCORE,NULL,NULL);
        }
        
        void ListInventory(GtkWidget *widget,gpointer data) {
       t@@ -287,8 +286,7 @@ void HandleClientMessage(char *pt,Player *Play) {
           GtkWidget *MenuItem;
           GSList *list;
        
       -/* Ignore To: field as all messages should be for "Play" */
       -   if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1) {
       +   if (ProcessMessage(pt,Play,&From,&AICode,&Code,&Data,FirstClient)==-1) {
              return;
           }
        
       t@@ -481,7 +479,7 @@ static void FightCallback(GtkWidget *widget,gpointer data) {
                      (Answer=='S' && TotalGunsCarried(Play)==0))) {
                    Play->Flags &= ~CANSHOOT;
                    text=g_strdup_printf("%c",Answer);
       -            SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,text,Play);
       +            SendClientMessage(Play,C_NONE,C_FIGHTACT,NULL,text);
                    g_free(text);
                 }
                 break;
       t@@ -772,8 +770,7 @@ static void JetCallback(GtkWidget *widget,gpointer data) {
           NewLocation = GPOINTER_TO_INT(data);
           gtk_widget_destroy(JetDialog);
           text=g_strdup_printf("%d",NewLocation);
       -   SendClientMessage(ClientData.Play,C_NONE,C_REQUESTJET,NULL,
       -                     text,ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_REQUESTJET,NULL,text);
           g_free(text);
        }
        
       t@@ -908,8 +905,7 @@ static void DealOKCallback(GtkWidget *widget,gpointer data) {
        
           text=g_strdup_printf("drug^%d^%d",DealDialog.DrugInd,
                                data==BT_BUY ? amount : -amount);
       -   SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,
       -                     text,ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,text);
           g_free(text);
        
           gtk_widget_destroy(DealDialog.dialog);
       t@@ -1095,8 +1091,7 @@ void DealGuns(GtkWidget *widget,gpointer data) {
              MessageBox(dialog,Title,_("You don't have any to sell!"),MB_OK);
           } else {
              g_string_sprintf(text,"gun^%d^%d",GunInd,data==BT_BUY ? 1 : -1);
       -      SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,text->str,
       -                        ClientData.Play);
       +      SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,text->str);
           }
           g_free(Title);
           g_string_free(text,TRUE);
       t@@ -1113,7 +1108,7 @@ static void QuestionCallback(GtkWidget *widget,gpointer data) {
           Answer = GPOINTER_TO_INT(data);
        
           text[0]=(gchar)Answer; text[1]='\0';
       -   SendClientMessage(ClientData.Play,C_NONE,C_ANSWER,To,text,ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_ANSWER,To,text);
        
           gtk_widget_destroy(dialog);
        }
       t@@ -1189,7 +1184,7 @@ void StartGame() {
           Play->fd=ClientSock;
           SendAbilities(Play);
           SetPlayerName(Play,ClientData.PlayerName);
       -   SendClientMessage(NULL,C_NONE,C_NAME,NULL,ClientData.PlayerName,Play);
       +   SendNullClientMessage(Play,C_NONE,C_NAME,NULL,ClientData.PlayerName);
           InGame=TRUE;
           UpdateMenus();
           if (Network) {
       t@@ -1886,14 +1881,13 @@ gint MessageBox(GtkWidget *parent,const gchar *Title,
        }
        
        static void SendDoneMessage(GtkWidget *widget,gpointer data) {
       -   SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL,ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL);
        }
        
        static void TransferPayAll(GtkWidget *widget,GtkWidget *dialog) {
           gchar *text;
           text=pricetostr(ClientData.Play->Debt);
       -   SendClientMessage(ClientData.Play,C_NONE,C_PAYLOAN,NULL,
       -                     text,ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_PAYLOAN,NULL,text);
           g_free(text);
           gtk_widget_destroy(dialog);
        }
       t@@ -1932,7 +1926,7 @@ static void TransferOK(GtkWidget *widget,GtkWidget *dialog) {
           }
           text=pricetostr(money);
           SendClientMessage(ClientData.Play,C_NONE,
       -                     Debt ? C_PAYLOAN : C_DEPOSIT,NULL,text,ClientData.Play);
       +                     Debt ? C_PAYLOAN : C_DEPOSIT,NULL,text);
           g_free(text);
           gtk_widget_destroy(dialog);
        }
       t@@ -2082,7 +2076,7 @@ static void TalkSend(GtkWidget *widget,struct TalkStruct *TalkData) {
           msg=g_string_new("");
        
           if (AllPlayers) {
       -      SendClientMessage(ClientData.Play,C_NONE,C_MSG,NULL,text,ClientData.Play);
       +      SendClientMessage(ClientData.Play,C_NONE,C_MSG,NULL,text);
              g_string_sprintf(msg,"%s: %s",GetPlayerName(ClientData.Play),text);
              PrintMessage(msg->str);
           } else {
       t@@ -2091,8 +2085,7 @@ static void TalkSend(GtkWidget *widget,struct TalkStruct *TalkData) {
                 row=GPOINTER_TO_INT(selection->data);
                 Play=(Player *)gtk_clist_get_row_data(GTK_CLIST(TalkData->clist),row);
                 if (Play) {
       -            SendClientMessage(ClientData.Play,C_NONE,C_MSGTO,Play,
       -                              text,ClientData.Play);
       +            SendClientMessage(ClientData.Play,C_NONE,C_MSGTO,Play,text);
                    g_string_sprintf(msg,"%s->%s: %s",GetPlayerName(ClientData.Play),
                                     GetPlayerName(Play),text);
                    PrintMessage(msg->str);
       t@@ -2218,11 +2211,9 @@ static void ErrandOK(GtkWidget *widget,GtkWidget *clist) {
              row=GPOINTER_TO_INT(selection->data);
              Play=(Player *)gtk_clist_get_row_data(GTK_CLIST(clist),row);
              if (ErrandType==ET_SPY) {
       -         SendClientMessage(ClientData.Play,C_NONE,C_SPYON,Play,
       -                           NULL,ClientData.Play);
       +         SendClientMessage(ClientData.Play,C_NONE,C_SPYON,Play,NULL);
              } else {
       -         SendClientMessage(ClientData.Play,C_NONE,C_TIPOFF,Play,
       -                           NULL,ClientData.Play);
       +         SendClientMessage(ClientData.Play,C_NONE,C_TIPOFF,Play,NULL);
              }
              gtk_widget_destroy(dialog);
           }
       t@@ -2307,8 +2298,7 @@ void SackBitch(GtkWidget *widget,gpointer data) {
                                "by this %s may be lost!)"),Names.Guns,
                                Names.Drugs,Names.Bitch);
           if (MessageBox(ClientData.window,title,text,MB_YES|MB_NO)==MB_YES) {
       -      SendClientMessage(ClientData.Play,C_NONE,C_SACKBITCH,NULL,NULL,
       -                        ClientData.Play);
       +      SendClientMessage(ClientData.Play,C_NONE,C_SACKBITCH,NULL,NULL);
           }
           g_free(caps); g_free(text); g_free(title);
        }
       t@@ -2404,7 +2394,7 @@ static void NewNameOK(GtkWidget *widget,GtkWidget *window) {
           text=gtk_editable_get_chars(GTK_EDITABLE(entry),0,-1);
           if (text[0]) {
              SetPlayerName(ClientData.Play,text);
       -      SendClientMessage(NULL,C_NONE,C_NAME,NULL,text,ClientData.Play);
       +      SendNullClientMessage(ClientData.Play,C_NONE,C_NAME,NULL,text);
              gtk_widget_destroy(window);
           }
           g_free(text);
       t@@ -2501,8 +2491,7 @@ void UpdatePlayerLists() {
        }
        
        void GetSpyReports(GtkWidget *Widget,gpointer data) {
       -   SendClientMessage(ClientData.Play,C_NONE,C_CONTACTSPY,NULL,NULL,
       -                     ClientData.Play);
       +   SendClientMessage(ClientData.Play,C_NONE,C_CONTACTSPY,NULL,NULL);
        }
        
        static void DestroySpyReports(GtkWidget *widget,gpointer data) {
 (DIR) diff --git a/src/message.c b/src/message.c
       t@@ -50,33 +50,46 @@
           handled by the server. All communication is conducted via. TCP by means
           of plain text newline-delimited messages.
        
       -   Message structure:-
       -       From^To^ACData
       +   New message structure:-
       +       Other^ACData
        
       -   From,To: Player names identifying the sender and intended recipient of
       -            the message. Either field may be blank, although the server will
       -            usually reject incoming messages if they are not properly
       -            identified with a correct "From" field.
       +   Other:   The ID of the player at the "other end" of the connection;
       +            for messages received by the client, this is the player from
       +            which the message originates, while for messages received by
       +            the server, it's the player to which to deliver the message.
           A:       One-letter code; used by AI players to identify the message subtype
                                               (check AIPlayer.h)
           C:       One-letter code to identify the message type (check message.h)
           Data:    Message-dependent information
        
       +
       +   For compatibility with old clients and servers, the old message structure
       +   is still supported:-
       +       From^To^ACData
       +
       +   From,To:  Player names identifying the sender and intended recipient of
       +             the message. Either field may be blank, although the server will
       +             usually reject incoming messages if they are not properly
       +             identified with a correct "From" field.
       +   A,C,Data: As above, for the new message structure
       +
           For example, a common message is the "printmessage" message (message code 
           C is C_PRINTMESSAGE), which simply instructs the client to display "Data". 
           Any ^ characters within Data are replaced by newlines on output. So in order 
       -   for the server to instruct player "Fred" to display "Hello world" it would 
       -   send the message:-
       -       ^Fred^AAHello world
       -   Note that the server has left the From field blank, and has specified the
       -   AI code 'A' - defined in AIPlayer.h as C_NONE (i.e. an "unimportant" 
       -   message) as well as the main code 'A', defined as C_PRINTMESSAGE in
       -   message.h
       -
       -   When the network is down, a server is simulated locally. Client to server
       -   messages are simply passed directly to the server message handling routine
       -   in serverside.c, while server to client messages are queued in MessageList
       -   and read by the do_game loop within dopewars.c                        */
       +   for the server to instruct player "Fred" (ID 1) to display "Hello world" it
       +   would send the message:-
       +       ^AAHello world                   (new format)
       +       ^Fred^AAHello world              (old format)
       +   Note that the server has left the Other (or From) field blank, and has
       +   specified the AI code 'A' - defined in AIPlayer.h as C_NONE (i.e. an
       +   "unimportant" message) as well as the main code 'A', defined as
       +   C_PRINTMESSAGE in message.h. Note also that the destination player (Fred)
       +   is not specified in the new format; the player is identified by the socket
       +   through which the message is transmitted.
       +
       +   When the network is down, a server is simulated locally. Messages from
       +   the client are passed directly to the server message handling routine,
       +   and vice versa.  */
        
        GSList *FirstClient;
        
       t@@ -84,17 +97,34 @@ void (*ClientMessageHandlerPt) (char *,Player *) = NULL;
        void (*SocketWriteTestPt) (Player *,gboolean) = NULL;
        
        void SendClientMessage(Player *From,char AICode,char Code,
       -                       Player *To,char *Data,Player *BufOwn) {
       +                       Player *To,char *Data) {
       +/* Sends a message from player "From" to player "To" via. the server.     */
       +/* AICode, Code and Data define the message.                              */
       +   DoSendClientMessage(From,AICode,Code,To,Data,From);
       +}
       +
       +void SendNullClientMessage(Player *From,char AICode,char Code,
       +                           Player *To,char *Data) {
       +/* Sends a message from player "From" to player "To" via. the server,     */
       +/* sending a blank name for "From" (this is required with the old message */
       +/* format, up to and including the first successful C_NAME message, but   */
       +/* has no effect with the new format. AICode, Code and Data define the    */
       +/* message.                                                               */
       +   DoSendClientMessage(NULL,AICode,Code,To,Data,From);
       +}
       +
       +void DoSendClientMessage(Player *From,char AICode,char Code,
       +                         Player *To,char *Data,Player *BufOwn) {
        /* Send a message from client player "From" with computer code "AICode",  */
        /* human-readable code "Code" and data "Data". The message is sent to the */
       -/* server, identifying itself as for "To". From, To, or Data may be NULL. */
       +/* server, identifying itself as for "To". "BufOwn" identifies the player */
       +/* which owns the buffers used for the actual wire connection. With the   */
       +/* new message format, "From" is ignored. From, To, or Data may be NULL.  */
           GString *text;
           Player *ServerFrom;
           g_assert(BufOwn!=NULL);
           text=g_string_new(NULL);
           if (HaveAbility(BufOwn,A_PLAYERID)) {
       -      if (From) g_string_sprintf(text,"%d",From->ID);
       -      g_string_append_c(text,'^');
              if (To) g_string_sprintfa(text,"%d",To->ID);
              g_string_sprintfa(text,"^%c%c%s",AICode,Code,Data ? Data : "");
           } else {
       t@@ -102,7 +132,6 @@ void SendClientMessage(Player *From,char AICode,char Code,
                               To ? GetPlayerName(To) : "",AICode,Code,
                               Data ? Data : "");
           }
       -
        #if NETWORKING
           if (!Network) {
        #endif
       t@@ -140,23 +169,37 @@ void SendQuestion(Player *From,char AICode,
        void SendServerMessage(Player *From,char AICode,char Code,
                               Player *To,char *Data) {
        /* Sends a message from the server to client player "To" with computer    */
       -/* code "AICode", human-readable code "Code" and data "Data". The message */
       -/* will claim to be from or on behalf of player "From"                    */
       +/* code "AICode", human-readable code "Code" and data "Data", claiming    */
       +/* to be from player "From"                                               */
           GString *text;
       -   if (!Network) {
       -      text=g_string_new("");
       -      if (From) g_string_sprintf(text,"%d",From->ID);
       -      g_string_append_c(text,'^');
       -      if (To) g_string_sprintfa(text,"%d",To->ID);
       +   text=g_string_new(NULL);
       +   if (HaveAbility(To,A_PLAYERID)) {
       +      if (From) g_string_sprintfa(text,"%d",From->ID);
              g_string_sprintfa(text,"^%c%c%s",AICode,Code,Data ? Data : "");
       +   } else {
       +      g_string_sprintf(text,"%s^%s^%c%c%s",From ? GetPlayerName(From) : "",
       +                       To ? GetPlayerName(To) : "",AICode,Code,
       +                       Data ? Data : "");
       +   }
       +#if NETWORKING
       +   if (!Network) {
       +#endif
              if (ClientMessageHandlerPt) {
                 (*ClientMessageHandlerPt)(text->str,(Player *)(FirstClient->data));
              }
       -      g_string_free(text,TRUE);
       -   } else SendClientMessage(From,AICode,Code,To,Data,To);
       +#if NETWORKING
       +   } else {
       +      WriteToConnectionBuffer(To,text->str);
       +      if (SocketWriteTestPt) (*SocketWriteTestPt)(To,TRUE);
       +   }
       +#endif
       +   g_string_free(text,TRUE);
        }
        
        void InitAbilities(Player *Play) {
       +/* Sets up the "abilities" of player "Play". Abilities are used to extend */
       +/* the protocol; if both the client and server share an ability, then the */
       +/* protocol extension can be used.                                        */
           int i;
        /* Clear all abilities */
           for (i=0;i<A_NUM;i++) {
       t@@ -172,16 +215,21 @@ void InitAbilities(Player *Play) {
        }
        
        void SendAbilities(Player *Play) {
       +/* Sends abilities of player "Play" to the other end of the client-server */
       +/* connection.                                                            */
           int i;
           gchar Data[A_NUM+1];
           if (!Network) return;
           for (i=0;i<A_NUM;i++) Data[i]= (Play->Abil.Local[i] ? '1' : '0');
           Data[A_NUM]='\0';
           if (Server) SendServerMessage(NULL,C_NONE,C_ABILITIES,Play,Data);
       -   else SendClientMessage(Play,C_NONE,C_ABILITIES,NULL,Data,Play);
       +   else SendClientMessage(Play,C_NONE,C_ABILITIES,NULL,Data);
        }
        
        void ReceiveAbilities(Player *Play,gchar *Data) {
       +/* Fills in the "remote" abilities of player "Play" using the message data */
       +/* in "Data". These are the abilities of the server/client at the other    */
       +/* end of the connection.                                                  */
           int i,Length;
           InitAbilities(Play);
           if (!Network) return;
       t@@ -192,6 +240,9 @@ void ReceiveAbilities(Player *Play,gchar *Data) {
        }
        
        void CombineAbilities(Player *Play) {
       +/* Combines the local and remote abilities of player "Play". The resulting */
       +/* shared abilities are used to determine when protocol extensions can be  */
       +/* used.                                                                   */
           int i;
           for (i=0;i<A_NUM;i++) {
              Play->Abil.Shared[i]= (Play->Abil.Remote[i] && Play->Abil.Local[i]);
       t@@ -199,12 +250,18 @@ void CombineAbilities(Player *Play) {
        }
        
        gboolean HaveAbility(Player *Play,gint Type) {
       +/* Returns TRUE if ability "Type" is one of player "Play"'s shared abilities */
           if (Type<0 || Type>=A_NUM) return FALSE;
           else return (Play->Abil.Shared[Type]);
        }
        
        #if NETWORKING
        gchar *ReadFromConnectionBuffer(Player *Play) {
       +/* Reads a newline-terminated message from "Play"'s read buffer. The message */
       +/* is removed from the buffer, and returned as a null-terminated string (the */
       +/* terminating newline is removed). If no complete message is waiting, NULL  */
       +/* is returned. The string is dynamically allocated, and must be g_free'd by */
       +/* the caller.                                                               */
           ConnBuf *conn;
           int MessageLen;
           char *SepPt;
       t@@ -226,6 +283,9 @@ gchar *ReadFromConnectionBuffer(Player *Play) {
        }
        
        gboolean ReadConnectionBufferFromWire(Player *Play) {
       +/* Reads any waiting data on the TCP/IP connection for player "Play" into */
       +/* the player's read buffer. Returns FALSE if the connection was closed,  */
       +/* or if the read buffer's maximum size was reached.                      */
           ConnBuf *conn;
           int CurrentPosition,BytesRead;
           conn=&Play->ReadBuf;
       t@@ -254,6 +314,11 @@ gboolean ReadConnectionBufferFromWire(Player *Play) {
        }
        
        void WriteToConnectionBuffer(Player *Play,gchar *data) {
       +/* Writes the null-terminated string "data" to "Play"'s connection buffer. */
       +/* The message is automatically newline-terminated. Fails to write the     */
       +/* message without error if the buffer reaches its maximum size (although  */
       +/* this error will be detected when the buffer is attempted to be written  */
       +/* to the wire, below)                                                     */
           int AddLength,NewLength;
           ConnBuf *conn;
           conn=&Play->WriteBuf;
       t@@ -272,6 +337,9 @@ void WriteToConnectionBuffer(Player *Play,gchar *data) {
        }
        
        gboolean WriteConnectionBufferToWire(Player *Play) {
       +/* Writes any waiting data in "Play"'s connection buffer to the wire.  */
       +/* Returns TRUE on success, or FALSE if the buffer's maximum length is */
       +/* reached, or the remote end has closed the connection.               */
           ConnBuf *conn;
           int CurrentPosition,BytesSent;
           conn=&Play->WriteBuf;
       t@@ -675,43 +743,36 @@ void ShutdownNetwork() {
           Client=Network=Server=FALSE;
        }
        
       -int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Code,
       -                   Player **To,char **Data,GSList *First) {
       +int ProcessMessage(char *Msg,Player *Play,Player **Other,char *AICode,
       +                   char *Code,char **Data,GSList *First) {
        /* Given a "raw" message in "Msg" and a pointer to the start of the linked   */
        /* list of known players in "First", sets the other arguments to the message */
        /* fields. Data is returned as a pointer into the message "Msg", and should  */
        /* therefore NOT be g_free'd. "Play" is a pointer to the player which is     */
       -/* receiving the message. Returns 0 on success, -1 on failure.               */
       +/* receiving the message. "Other" is the player that is identified by the    */
       +/* message; for messages to clients, this will be the player "From" which    */
       +/* the message claims to be, while for messages to servers, this will be     */
       +/* the player "To" which to send messages. Returns 0 on success, -1 on       */
       +/* failure.                                                                  */
           gchar *pt,*buf;
           guint ID;
        
           *AICode=*Code=C_NONE;
       +   *Other=&Noone;
           pt=Msg;
       -   buf=GetNextWord(&pt,NULL);
       -   if (From) {
       -      if (HaveAbility(Play,A_PLAYERID)) {
       -         if (buf[0]) {
       -            ID=atoi(buf);
       -            *From=GetPlayerByID(ID,First);
       -         } else *From=&Noone;
       -      } else {
       -         *From=GetPlayerByName(buf,First);
       -      }
       -      if (!(*From)) return -1;
       -   }
       -
       -   buf=GetNextWord(&pt,NULL);
       -   if (To) {
       -      if (HaveAbility(Play,A_PLAYERID)) {
       -         if (buf[0]) {
       -            ID=atoi(buf);
       -            *To=GetPlayerByID(ID,First);
       -         } else *To=&Noone;
       -      } else {
       -         *To=GetPlayerByName(buf,First);
       +   if (HaveAbility(Play,A_PLAYERID)) {
       +      buf=GetNextWord(&pt,NULL);
       +      if (buf[0]) {
       +         ID=atoi(buf);
       +         *Other=GetPlayerByID(ID,First);
              }
       -      if (!(*To)) return -1;
       +   } else {
       +      buf=GetNextWord(&pt,NULL);
       +      if (Client) *Other=GetPlayerByName(buf,First);
       +      buf=GetNextWord(&pt,NULL);
       +      if (Server) *Other=GetPlayerByName(buf,First);
           }
       +   if (!(*Other)) return -1;
        
           if (strlen(pt)>=2) {
              *AICode=pt[0];
 (DIR) diff --git a/src/message.h b/src/message.h
       t@@ -93,7 +93,11 @@
        #define DT_PRICES      'D'
        
        void SendClientMessage(Player *From,char AICode,char Code,
       -                       Player *To,char *Data,Player *BufOwn);
       +                       Player *To,char *Data);
       +void SendNullClientMessage(Player *From,char AICode,char Code,
       +                           Player *To,char *Data);
       +void DoSendClientMessage(Player *From,char AICode,char Code,
       +                         Player *To,char *Data,Player *BufOwn);
        void SendServerMessage(Player *From,char AICode,char Code,
                               Player *To,char *Data);
        void SendPrintMessage(Player *From,char AICode,Player *To,char *Data);
       t@@ -133,8 +137,8 @@ char *SetupNetwork(gboolean NonBlocking);
        char *FinishSetupNetwork();
        void ShutdownNetwork();
        void SwitchToSinglePlayer(Player *Play);
       -int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Code,
       -                   Player **To,char **Data,GSList *First);
       +int ProcessMessage(char *Msg,Player *Play,Player **Other,char *AICode,
       +                   char *Code,char **Data,GSList *First);
        void ReceiveDrugsHere(char *text,Player *To);
        gboolean HandleGenericClientMessage(Player *From,char AICode,char Code,
                                       Player *To,char *Data,char *DisplayMode);
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -210,8 +210,7 @@ void HandleServerMessage(gchar *buf,Player *Play) {
           int i;
           price_t money;
        
       -/* Ignore client's From: field - should always be "Play" */
       -   if (ProcessMessage(buf,Play,NULL,&AICode,&Code,&To,&Data,FirstServer)==-1) {
       +   if (ProcessMessage(buf,Play,&To,&AICode,&Code,&Data,FirstServer)==-1) {
              g_warning("Bad message");
              return;
           }
 (DIR) diff --git a/src/win32_client.c b/src/win32_client.c
       t@@ -241,8 +241,7 @@ static void HandleClientMessage(char *pt,Player *Play) {
           gchar *text;
           LRESULT Answer;
           GSList *list;
       -/* Ignore server's To: field; use "Play" instead */
       -   if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1) {
       +   if (ProcessMessage(pt,Play,&From,&AICode,&Code,&Data,FirstClient)==-1) {
              return;
           }
           Handled=HandleGenericClientMessage(From,AICode,Code,Play,Data,&DisplayMode);
       t@@ -321,7 +320,7 @@ static void HandleClientMessage(char *pt,Player *Play) {
                 if (Answer!=0) {
                    text=g_strdup_printf("%c",(char)Answer);
                    SendClientMessage(Play,C_NONE,C_ANSWER,
       -                              From==&Noone ? NULL : From,text,Play);
       +                              From==&Noone ? NULL : From,text);
                    g_free(text);
                 }
                 break;
       t@@ -365,7 +364,7 @@ static void StartGame() {
           Play->fd=ClientSock;
           SendAbilities(Play);
           SetPlayerName(Play,ClientData.PlayerName);
       -   SendClientMessage(NULL,C_NONE,C_NAME,NULL,ClientData.PlayerName,Play);
       +   SendNullClientMessage(Play,C_NONE,C_NAME,NULL,ClientData.PlayerName);
           InGame=TRUE;
           UpdateControls();
           if (Network) {
       t@@ -528,8 +527,7 @@ BOOL CALLBACK TalkWndProc(HWND hwnd,UINT msg,UINT wParam,
                       SetWindowText(MessageWnd,"");
                       message=g_string_new("");
                       if (IsDlgButtonChecked(hwnd,CB_TALKALL)==BST_CHECKED) {
       -                  SendClientMessage(ClientData.Play,C_NONE,C_MSG,NULL,text,
       -                                    ClientData.Play);
       +                  SendClientMessage(ClientData.Play,C_NONE,C_MSG,NULL,text);
                          g_string_sprintf(message,"%s: %s",
                                           GetPlayerName(ClientData.Play),text);
                          PrintMessage(message->str);
       t@@ -545,7 +543,7 @@ BOOL CALLBACK TalkWndProc(HWND hwnd,UINT msg,UINT wParam,
                                   if (LBResult!=LB_ERR && LBResult) {
                                      Play=(Player *)LBResult;
                                      SendClientMessage(ClientData.Play,C_NONE,C_MSGTO,
       -                                                Play,text,ClientData.Play);
       +                                                Play,text);
                                      g_string_sprintf(message,"%s->%s: %s",
                                                       GetPlayerName(ClientData.Play), 
                                                       GetPlayerName(Play),text);
       t@@ -667,7 +665,7 @@ BOOL CALLBACK GunShopWndProc(HWND hwnd,UINT msg,UINT wParam,
                          g_string_sprintf(text,"gun^%d^%d",GunInd,
                                           LOWORD(wParam)==BT_BUYGUN ? 1 : -1);
                          SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,
       -                                    NULL,text->str,ClientData.Play);
       +                                    NULL,text->str);
                       }
                       g_free(Title);
                       g_string_free(text,TRUE);
       t@@ -680,8 +678,7 @@ BOOL CALLBACK GunShopWndProc(HWND hwnd,UINT msg,UINT wParam,
              case WM_DESTROY:
                 GunShopWnd=NULL;
                 EnableWindow(ClientData.Window,TRUE);
       -         SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL,
       -                           ClientData.Play);
       +         SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL);
                 return TRUE;
           }
           return FALSE;
       t@@ -754,7 +751,7 @@ BOOL CALLBACK NewNameWndProc(HWND hwnd,UINT msg,UINT wParam,
                    text=g_new(char,buflen+1);
                    GetWindowText(EditWnd,text,buflen+1);
                    SetPlayerName(ClientData.Play,text);
       -            SendClientMessage(NULL,C_NONE,C_NAME,NULL,text,ClientData.Play);
       +            SendNullClientMessage(ClientData.Play,C_NONE,C_NAME,NULL,text);
                    g_free(text);
                    DestroyWindow(hwnd);
                    return TRUE;
       t@@ -824,7 +821,7 @@ BOOL CALLBACK TransferWndProc(HWND hwnd,UINT msg,UINT wParam,
                       text=pricetostr(money);
                       SendClientMessage(ClientData.Play,C_NONE,
                                         Type==C_LOANSHARK ? C_PAYLOAN : C_DEPOSIT,
       -                                 NULL,text,ClientData.Play);
       +                                 NULL,text);
                       g_free(text);
                       SendMessage(hwnd,WM_CLOSE,0,0);
                       return TRUE;
       t@@ -832,8 +829,7 @@ BOOL CALLBACK TransferWndProc(HWND hwnd,UINT msg,UINT wParam,
                 break;
              case WM_CLOSE:
                 EndDialog(hwnd,0);
       -         SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL,
       -                           ClientData.Play);
       +         SendClientMessage(ClientData.Play,C_NONE,C_DONE,NULL,NULL);
                 return TRUE;
           }
           return FALSE;
       t@@ -987,8 +983,7 @@ static BOOL CALLBACK DealWndProc(HWND hwnd,UINT msg,UINT wParam,
                    amount=atoi(Num);
                    text=g_strdup_printf("drug^%d^%d",DrugInd,
                                         DealType==BT_BUY ? amount : -amount);
       -            SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,text,
       -                              ClientData.Play);
       +            SendClientMessage(ClientData.Play,C_NONE,C_BUYOBJECT,NULL,text);
                    g_free(text);
                    EndDialog(hwnd,0); return TRUE;
                 } else if (HIWORD(wParam)==BN_CLICKED && LOWORD(wParam)==ID_CANCEL) {
       t@@ -1049,8 +1044,7 @@ static BOOL CALLBACK JetWndProc(HWND hwnd,UINT msg,UINT wParam,
                    EndDialog(hwnd,0);
                    NewLocation=(gint)(LOWORD(wParam));
                    text=g_strdup_printf("%d",NewLocation);
       -            SendClientMessage(ClientData.Play,C_NONE,C_REQUESTJET,NULL,text,
       -                              ClientData.Play);
       +            SendClientMessage(ClientData.Play,C_NONE,C_REQUESTJET,NULL,text);
                    g_free(text);
                    return TRUE;
                 }
       t@@ -1139,7 +1133,7 @@ static BOOL CALLBACK ErrandWndProc(HWND hwnd,UINT msg,UINT wParam,
                          Play=(Player *)LBResult;
                          SendClientMessage(ClientData.Play,C_NONE,
                                            ErrandType==ID_SPY ? C_SPYON : C_TIPOFF,
       -                                    Play,NULL,ClientData.Play);
       +                                    Play,NULL);
                          EndDialog(hwnd,0); return TRUE;
                       }
                    }
       t@@ -1492,14 +1486,14 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
                                      "by this bitch may be lost!)",
                                      "Sack Bitch",MB_YESNO)==IDYES) {
                          SendClientMessage(ClientData.Play,C_NONE,C_SACKBITCH,
       -                                    NULL,NULL,ClientData.Play);
       +                                    NULL,NULL);
                       }
                       break;
                    case ID_GETSPY:
                       if (SpyReportsWnd) DestroyWindow(SpyReportsWnd);
                       SpyReportsWnd=NULL;
                       SendClientMessage(ClientData.Play,C_NONE,C_CONTACTSPY,
       -                                 NULL,NULL,ClientData.Play);
       +                                 NULL,NULL);
                       break;
                    case ID_LISTPLAYERS:
                       if (PlayerListWnd) {
       t@@ -1525,7 +1519,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,UINT wParam,LONG lParam) {
                       break;
                    case ID_LISTSCORES:
                       SendClientMessage(ClientData.Play,C_NONE,C_REQUESTSCORE,
       -                                 NULL,NULL,ClientData.Play);
       +                                 NULL,NULL);
                       break;
                    case ID_ABOUT:
                       DialogBox(hInst,MAKEINTRESOURCE(AboutDialog),hwnd,AboutWndProc);
       t@@ -1558,8 +1552,7 @@ static BOOL CALLBACK FightWndProc(HWND hwnd,UINT msg,WPARAM wParam,
                          text[0]='F';
                       }
                       text[1]='\0';
       -               SendClientMessage(ClientData.Play,C_NONE,C_FIGHTACT,NULL,text,
       -                                 ClientData.Play);
       +               SendClientMessage(ClientData.Play,C_NONE,C_FIGHTACT,NULL,text);
                       return TRUE;
                    case BT_RUN:
                       EnableWindow(ClientData.Window,TRUE);