tFix for dopewars.sco install; player IDs now used in messages - 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 f6eb1f80293e4987d855294318867a02ca6a9541
 (DIR) parent f2393f7aef862474382e97307175f7f189dc5ceb
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Wed, 13 Sep 2000 04:21:22 +0000
       
       Fix for dopewars.sco install; player IDs now used in messages
       
       
       Diffstat:
         M ChangeLog                           |       3 ++-
         M Makefile.am                         |       1 +
         M Makefile.in                         |       1 +
         M po/dopewars.pot                     |     620 ++++++++++++++++----------------
         M src/AIPlayer.c                      |       8 ++------
         M src/curses_client.c                 |       7 +++----
         M src/dopewars.c                      |      28 ++++++++++++++++++++++++++++
         M src/dopewars.h                      |       2 ++
         M src/gtk_client.c                    |       5 ++---
         M src/message.c                       |     116 ++++++++++++++++++++-----------
         M src/message.h                       |       4 ++--
         M src/serverside.c                    |      27 +++++++++++++++++++--------
         M src/win32_client.c                  |       4 ++--
       
       13 files changed, 448 insertions(+), 378 deletions(-)
       ---
 (DIR) diff --git a/ChangeLog b/ChangeLog
       t@@ -3,7 +3,8 @@
            - Networking revamped - now uses nonblocking sockets to improve server
              responsiveness and to remove deadlocks (previously, any client could
              halt server by sending an unterminated message); "abilities" added to
       -      allow backwards-compatible protocol extensions
       +      allow backwards-compatible protocol extensions; player IDs used rather
       +      than player names to save bandwidth, with newer client+server
            - Longer T>alk and P>age messages allowed in curses client
            - Minor bug fixes to configure options
            - Client-side code moved out of clientside.c and dopewars.c;
 (DIR) diff --git a/Makefile.am b/Makefile.am
       t@@ -3,6 +3,7 @@ SUBDIRS = src doc po intl
        DISTFILES = ABOUT-NLS
        
        install-data-local:
       +        ${mkinstalldirs} ${datadir}
                touch ${datadir}/dopewars.sco
                chown root.games ${datadir}/dopewars.sco
                chmod 0660 ${datadir}/dopewars.sco
 (DIR) diff --git a/Makefile.in b/Makefile.in
       t@@ -376,6 +376,7 @@ mostlyclean distclean maintainer-clean
        
        
        install-data-local:
       +        ${mkinstalldirs} ${datadir}
                touch ${datadir}/dopewars.sco
                chown root.games ${datadir}/dopewars.sco
                chmod 0660 ${datadir}/dopewars.sco
 (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 01:58+0100\n"
       +"POT-Creation-Date: 2000-09-13 05:02+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@@ -738,53 +738,53 @@ msgstr ""
        msgid "Drugs can be your friend!"
        msgstr ""
        
       -#: src/dopewars.c:1074
       +#: src/dopewars.c:1102
        msgid "Unable to process configuration file line"
        msgstr ""
        
       -#: src/dopewars.c:1135
       +#: src/dopewars.c:1163
        msgid ""
        "Configuration can only be changed interactively when no\n"
        "players are logged on. Wait for all players to log off, or remove\n"
        "them with the push or kill commands, and try again."
        msgstr ""
        
       -#: src/dopewars.c:1196
       +#: src/dopewars.c:1224
        #, c-format
        msgid "Index into %s array should be between 1 and %d"
        msgstr ""
        
       -#: src/dopewars.c:1215
       +#: src/dopewars.c:1243
        #, c-format
        msgid "%s is %d\n"
        msgstr ""
        
       -#: src/dopewars.c:1220
       +#: src/dopewars.c:1248
        #, c-format
        msgid "%s is %s\n"
        msgstr ""
        
       -#: src/dopewars.c:1223
       +#: src/dopewars.c:1251
        #, c-format
        msgid "%s is \"%s\"\n"
        msgstr ""
        
       -#: src/dopewars.c:1227
       +#: src/dopewars.c:1255
        #, c-format
        msgid "%s[%d] is %s\n"
        msgstr ""
        
       -#: src/dopewars.c:1230
       +#: src/dopewars.c:1258
        #, c-format
        msgid "%s is { "
        msgstr ""
        
       -#: src/dopewars.c:1261
       +#: src/dopewars.c:1289
        #, c-format
        msgid "Resized structure list to %d elements\n"
        msgstr ""
        
       -#: src/dopewars.c:1404
       +#: src/dopewars.c:1432
        #, c-format
        msgid ""
        "Usage: dopewars [OPTION]...\n"
       t@@ -998,7 +998,7 @@ msgstr ""
        msgid "CLQP"
        msgstr ""
        
       -#: src/curses_client.c:371 src/gtk_client.c:808
       +#: src/curses_client.c:371 src/gtk_client.c:807
        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:827
       +#: src/curses_client.c:454 src/curses_client.c:826
        msgid "What do you wish to buy? "
        msgstr ""
        
       -#: src/curses_client.c:456 src/curses_client.c:829
       +#: src/curses_client.c:456 src/curses_client.c:828
        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:1689
       +#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1688
        msgid "YN"
        msgstr ""
        
       t@@ -1104,7 +1104,7 @@ msgstr ""
        msgid "The server has terminated. Reverting to single player mode."
        msgstr ""
        
       -#: src/curses_client.c:646 src/gtk_client.c:337 src/serverside.c:250
       +#: src/curses_client.c:646 src/gtk_client.c:337 src/serverside.c:259
        #, c-format
        msgid "%s joins the game!"
        msgstr ""
       t@@ -1129,224 +1129,224 @@ msgid ""
        "it."
        msgstr ""
        
       -#: src/curses_client.c:745
       +#: src/curses_client.c:744
        msgid "H I G H   S C O R E S"
        msgstr ""
        
       -#: src/curses_client.c:801
       +#: src/curses_client.c:800
        msgid "Will you B>uy, S>ell, or L>eave? "
        msgstr ""
        
       -#: src/curses_client.c:806
       +#: src/curses_client.c:805
        msgid "BSL"
        msgstr ""
        
       -#: src/curses_client.c:811
       +#: src/curses_client.c:810
        #, c-format
        msgid "You don't have any %s to sell!"
        msgstr ""
        
       -#: src/curses_client.c:818 src/gtk_client.c:1084
       +#: src/curses_client.c:817 src/gtk_client.c:1083
        #, c-format
        msgid "You'll need more %s to carry any more %s!"
        msgstr ""
        
       -#: src/curses_client.c:840 src/gtk_client.c:1088
       +#: src/curses_client.c:839 src/gtk_client.c:1087
        #, c-format
        msgid "You don't have enough space to carry that %s!"
        msgstr ""
        
       -#: src/curses_client.c:848 src/gtk_client.c:1092
       +#: src/curses_client.c:847 src/gtk_client.c:1091
        #, c-format
        msgid "You don't have enough cash to buy that %s!"
        msgstr ""
        
       -#: src/curses_client.c:861 src/gtk_client.c:1096
       +#: src/curses_client.c:860 src/gtk_client.c:1095
        msgid "You don't have any to sell!"
        msgstr ""
        
       -#: src/curses_client.c:885
       +#: src/curses_client.c:884
        msgid "How much money do you pay back? "
        msgstr ""
        
       -#: src/curses_client.c:891 src/curses_client.c:921 src/gtk_client.c:1931
       +#: src/curses_client.c:890 src/curses_client.c:920 src/gtk_client.c:1930
        msgid "You don't have that much money!"
        msgstr ""
        
       -#: src/curses_client.c:911
       +#: src/curses_client.c:910
        msgid "Do you want to D>eposit money, W>ithdraw money, or L>eave ? "
        msgstr ""
        
       -#: src/curses_client.c:914
       +#: src/curses_client.c:913
        msgid "DWL"
        msgstr ""
        
       -#: src/curses_client.c:916
       +#: src/curses_client.c:915
        msgid "How much money? "
        msgstr ""
        
       -#: src/curses_client.c:924 src/gtk_client.c:1924
       +#: src/curses_client.c:923 src/gtk_client.c:1923
        msgid "There isn't that much money in the bank..."
        msgstr ""
        
       -#: src/curses_client.c:1003
       +#: src/curses_client.c:1002
        msgid "Press any key..."
        msgstr ""
        
       -#: src/curses_client.c:1134
       +#: src/curses_client.c:1133
        msgid "Messages"
        msgstr ""
        
       -#: src/curses_client.c:1141 src/gtk_client.c:1382
       +#: src/curses_client.c:1140 src/gtk_client.c:1381
        msgid "Stats"
        msgstr ""
        
       -#: src/curses_client.c:1144
       +#: src/curses_client.c:1143
        #, c-format
        msgid "Cash %17s"
        msgstr ""
        
       -#: src/curses_client.c:1151
       +#: src/curses_client.c:1150
        #, c-format
        msgid "Health             %3d"
        msgstr ""
        
       -#: src/curses_client.c:1153
       +#: src/curses_client.c:1152
        #, c-format
        msgid "Bank %17s"
        msgstr ""
        
       -#: src/curses_client.c:1157
       +#: src/curses_client.c:1156
        #, c-format
        msgid "Debt %17s"
        msgstr ""
        
       -#: src/curses_client.c:1161
       +#: src/curses_client.c:1160
        #, c-format
        msgid "Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1163
       +#: src/curses_client.c:1162
        #, c-format
        msgid "%s %3d  Space %6d"
        msgstr ""
        
       -#: src/curses_client.c:1174
       +#: src/curses_client.c:1173
        msgid "Trenchcoat"
        msgstr ""
        
       -#: src/curses_client.c:1214
       +#: src/curses_client.c:1213
        #, c-format
        msgid "Spy reports for %s"
        msgstr ""
        
       -#: src/curses_client.c:1218 src/curses_client.c:1223
       +#: src/curses_client.c:1217 src/curses_client.c:1222
        #, c-format
        msgid "%s..."
        msgstr ""
        
       -#: src/curses_client.c:1244
       +#: src/curses_client.c:1243
        msgid "No other players are currently logged on!"
        msgstr ""
        
       -#: src/curses_client.c:1249
       +#: src/curses_client.c:1248
        msgid "Players currently logged on:-"
        msgstr ""
        
       -#: src/curses_client.c:1397
       +#: src/curses_client.c:1396
        msgid "Hey dude, what's your name? "
        msgstr ""
        
       -#: src/curses_client.c:1431
       +#: src/curses_client.c:1430
        #, c-format
        msgid "Hey dude, the prices of %s here are:"
        msgstr ""
        
       -#: src/curses_client.c:1443
       +#: src/curses_client.c:1442
        msgid "Will you B>uy"
        msgstr ""
        
       -#: src/curses_client.c:1444
       +#: src/curses_client.c:1443
        msgid ", S>ell"
        msgstr ""
        
       -#: src/curses_client.c:1445
       +#: src/curses_client.c:1444
        msgid ", D>rop"
        msgstr ""
        
       -#: src/curses_client.c:1446
       +#: src/curses_client.c:1445
        msgid ", T>alk, P>age, L>ist"
        msgstr ""
        
       -#: src/curses_client.c:1449
       +#: src/curses_client.c:1448
        msgid ", G>ive"
        msgstr ""
        
       -#: src/curses_client.c:1452
       +#: src/curses_client.c:1451
        msgid ", F>ight"
        msgstr ""
        
       -#: src/curses_client.c:1456
       +#: src/curses_client.c:1455
        msgid ", J>et"
        msgstr ""
        
       -#: src/curses_client.c:1458 src/curses_client.c:1473
       +#: src/curses_client.c:1457 src/curses_client.c:1472
        msgid ", or Q>uit? "
        msgstr ""
        
       -#: src/curses_client.c:1466
       +#: src/curses_client.c:1465
        msgid "Do you "
        msgstr ""
        
       -#: src/curses_client.c:1468
       +#: src/curses_client.c:1467
        msgid "F>ight, "
        msgstr ""
        
       -#: src/curses_client.c:1469
       +#: src/curses_client.c:1468
        msgid "S>tand, "
        msgstr ""
        
       -#: src/curses_client.c:1471
       +#: src/curses_client.c:1470
        msgid "R>un, "
        msgstr ""
        
       -#: src/curses_client.c:1472
       +#: src/curses_client.c:1471
        msgid "D>eal "
        msgstr ""
        
       -#: src/curses_client.c:1515
       +#: src/curses_client.c:1514
        msgid "Connection to server lost! Reverting to single player mode"
        msgstr ""
        
       -#: src/curses_client.c:1544
       +#: src/curses_client.c:1543
        msgid "BSDTPLGFJQ"
        msgstr ""
        
       -#: src/curses_client.c:1546
       +#: src/curses_client.c:1545
        msgid "DRFSQ"
        msgstr ""
        
       -#: src/curses_client.c:1574
       +#: src/curses_client.c:1573
        msgid "List what? P>layers or S>cores? "
        msgstr ""
        
       -#: src/curses_client.c:1575
       +#: src/curses_client.c:1574
        msgid "PS"
        msgstr ""
        
       -#: src/curses_client.c:1584
       +#: src/curses_client.c:1583
        msgid "Whom do you want to page (talk privately to) ? "
        msgstr ""
        
       -#: src/curses_client.c:1599
       +#: src/curses_client.c:1598
        msgid "Talk: "
        msgstr ""
        
       -#: src/curses_client.c:1688
       +#: src/curses_client.c:1687
        msgid "Play again? "
        msgstr ""
        
       -#: src/curses_client.c:1700
       +#: src/curses_client.c:1699
        msgid ""
        "No curses client available - rebuild the binary passing the\n"
        "--enable-curses-client option to configure, or use a windowed\n"
       t@@ -1445,7 +1445,7 @@ msgstr ""
        msgid "Inventory"
        msgstr ""
        
       -#: src/gtk_client.c:236 src/gtk_client.c:2167 src/gtk_client.c:2535
       +#: src/gtk_client.c:236 src/gtk_client.c:2166 src/gtk_client.c:2534
        msgid "Close"
        msgstr ""
        
       t@@ -1484,173 +1484,173 @@ msgstr ""
        msgid "<main>/Errands/Tipoff"
        msgstr ""
        
       -#: src/gtk_client.c:403
       +#: src/gtk_client.c:402
        msgid "High Scores"
        msgstr ""
        
       -#: src/gtk_client.c:437 src/gtk_client.c:1035 src/gtk_client.c:1495
       -#: src/gtk_client.c:1840 src/gtk_client.c:2005 src/gtk_client.c:2284
       -#: src/gtk_client.c:2442
       +#: 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
        msgid "OK"
        msgstr ""
        
       -#: src/gtk_client.c:519
       +#: src/gtk_client.c:518
        msgid "Fight"
        msgstr ""
        
       -#: src/gtk_client.c:546
       +#: src/gtk_client.c:545
        #, c-format
        msgid "_Deal %s"
        msgstr ""
        
       -#: src/gtk_client.c:550 src/gtk_client.c:1128 src/gtk_client.c:1325
       +#: src/gtk_client.c:549 src/gtk_client.c:1127 src/gtk_client.c:1324
        msgid "_Fight"
        msgstr ""
        
       -#: src/gtk_client.c:553
       +#: src/gtk_client.c:552
        msgid "_Stand"
        msgstr ""
        
       -#: src/gtk_client.c:556 src/gtk_client.c:1127
       +#: src/gtk_client.c:555 src/gtk_client.c:1126
        msgid "_Run"
        msgstr ""
        
       -#: src/gtk_client.c:799
       +#: src/gtk_client.c:798
        msgid "Jet to location"
        msgstr ""
        
       -#: src/gtk_client.c:868
       +#: src/gtk_client.c:867
        #, c-format
        msgid "at %s"
        msgstr ""
        
       -#: src/gtk_client.c:873
       +#: src/gtk_client.c:872
        #, c-format
        msgid "You are currently carrying %d %s"
        msgstr ""
        
       -#: src/gtk_client.c:878
       +#: src/gtk_client.c:877
        #, c-format
        msgid "Available space: %d"
        msgstr ""
        
       -#: src/gtk_client.c:883
       +#: src/gtk_client.c:882
        #, c-format
        msgid "You can afford %d"
        msgstr ""
        
       -#: src/gtk_client.c:933 src/gtk_client.c:1064
       +#: src/gtk_client.c:932 src/gtk_client.c:1063
        msgid "Buy"
        msgstr ""
        
       -#: src/gtk_client.c:934 src/gtk_client.c:1065
       +#: src/gtk_client.c:933 src/gtk_client.c:1064
        msgid "Sell"
        msgstr ""
        
       -#: src/gtk_client.c:935 src/gtk_client.c:1066
       +#: src/gtk_client.c:934 src/gtk_client.c:1065
        msgid "Drop"
        msgstr ""
        
       -#: src/gtk_client.c:1023
       +#: src/gtk_client.c:1022
        #, c-format
        msgid "%s how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1041 src/gtk_client.c:1840 src/gtk_client.c:2016
       -#: src/gtk_client.c:2292
       +#: src/gtk_client.c:1040 src/gtk_client.c:1839 src/gtk_client.c:2015
       +#: src/gtk_client.c:2291
        msgid "Cancel"
        msgstr ""
        
       -#: src/gtk_client.c:1080
       +#: src/gtk_client.c:1079
        #, c-format
        msgid "You don't have any %s!"
        msgstr ""
        
       -#: src/gtk_client.c:1127 src/gtk_client.c:1841
       +#: src/gtk_client.c:1126 src/gtk_client.c:1840
        msgid "_Yes"
        msgstr ""
        
       -#: src/gtk_client.c:1127 src/gtk_client.c:1841
       +#: src/gtk_client.c:1126 src/gtk_client.c:1840
        msgid "_No"
        msgstr ""
        
       -#: src/gtk_client.c:1128
       +#: src/gtk_client.c:1127
        msgid "_Attack"
        msgstr ""
        
       -#: src/gtk_client.c:1128
       +#: src/gtk_client.c:1127
        msgid "_Evade"
        msgstr ""
        
       -#: src/gtk_client.c:1146
       +#: src/gtk_client.c:1145
        msgid "Question"
        msgstr ""
        
       -#: src/gtk_client.c:1255
       +#: src/gtk_client.c:1254
        msgid "<main>/Talk"
        msgstr ""
        
       -#: src/gtk_client.c:1257
       +#: src/gtk_client.c:1256
        msgid "<main>/List"
        msgstr ""
        
       -#: src/gtk_client.c:1259
       +#: src/gtk_client.c:1258
        msgid "<main>/Errands"
        msgstr ""
        
       -#: src/gtk_client.c:1275
       +#: src/gtk_client.c:1274
        msgid "Space"
        msgstr ""
        
       -#: src/gtk_client.c:1280
       +#: src/gtk_client.c:1279
        msgid "Cash"
        msgstr ""
        
       -#: src/gtk_client.c:1285
       +#: src/gtk_client.c:1284
        msgid "Debt"
        msgstr ""
        
       -#: src/gtk_client.c:1290
       +#: src/gtk_client.c:1289
        msgid "Bank"
        msgstr ""
        
       -#: src/gtk_client.c:1305
       +#: src/gtk_client.c:1304
        msgid "Health"
        msgstr ""
        
       -#: src/gtk_client.c:1325
       +#: src/gtk_client.c:1324
        msgid "_Jet!"
        msgstr ""
        
       -#: src/gtk_client.c:1356
       +#: src/gtk_client.c:1355
        msgid "dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1442
       +#: src/gtk_client.c:1441
        msgid "Drug Dealing and Research"
        msgstr ""
        
       -#: src/gtk_client.c:1443
       +#: src/gtk_client.c:1442
        msgid "Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1444
       +#: src/gtk_client.c:1443
        msgid "Extensive Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1446
       +#: src/gtk_client.c:1445
        msgid "Constructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1448
       +#: src/gtk_client.c:1447
        msgid "Unconstructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1452
       +#: src/gtk_client.c:1451
        msgid "About dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1461
       +#: src/gtk_client.c:1460
        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:1469
       +#: src/gtk_client.c:1468
        #, 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:1487
       +#: src/gtk_client.c:1486
        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:1525 src/gtk_client.c:1548
       +#: src/gtk_client.c:1524 src/gtk_client.c:1547
        #, c-format
        msgid "Status: Could not connect (%s)"
        msgstr ""
        
       -#: src/gtk_client.c:1536
       +#: src/gtk_client.c:1535
        #, c-format
        msgid "Status: Attempting to contact %s..."
        msgstr ""
        
       -#: src/gtk_client.c:1596
       +#: src/gtk_client.c:1595
        #, c-format
        msgid "%d of %d"
        msgstr ""
        
       -#: src/gtk_client.c:1660 src/gtk_client.c:1701 src/gtk_client.c:1742
       +#: src/gtk_client.c:1659 src/gtk_client.c:1700 src/gtk_client.c:1741
        msgid "Server"
        msgstr ""
        
       -#: src/gtk_client.c:1661 src/gtk_client.c:1716
       +#: src/gtk_client.c:1660 src/gtk_client.c:1715
        msgid "Port"
        msgstr ""
        
       -#: src/gtk_client.c:1662
       +#: src/gtk_client.c:1661
        msgid "Version"
        msgstr ""
        
       -#: src/gtk_client.c:1663
       +#: src/gtk_client.c:1662
        msgid "Players"
        msgstr ""
        
       -#: src/gtk_client.c:1664
       +#: src/gtk_client.c:1663
        msgid "Comment"
        msgstr ""
        
       -#: src/gtk_client.c:1677
       +#: src/gtk_client.c:1676
        msgid "New Game"
        msgstr ""
        
       -#: src/gtk_client.c:1686
       +#: src/gtk_client.c:1685
        msgid "Hey dude, what's your _name?"
        msgstr ""
        
       -#: src/gtk_client.c:1708
       +#: src/gtk_client.c:1707
        msgid "Host name"
        msgstr ""
        
       -#: src/gtk_client.c:1731 src/gtk_client.c:1794
       +#: src/gtk_client.c:1730 src/gtk_client.c:1793
        msgid "_Connect"
        msgstr ""
        
       -#: src/gtk_client.c:1744 src/gtk_client.c:1765
       +#: src/gtk_client.c:1743 src/gtk_client.c:1764
        msgid "Single player"
        msgstr ""
        
       -#: src/gtk_client.c:1750
       +#: src/gtk_client.c:1749
        msgid "_Antique mode"
        msgstr ""
        
       -#: src/gtk_client.c:1757
       +#: src/gtk_client.c:1756
        msgid "_Start single-player game"
        msgstr ""
        
       -#: src/gtk_client.c:1767 src/gtk_client.c:1805
       +#: src/gtk_client.c:1766 src/gtk_client.c:1804
        msgid "Metaserver"
        msgstr ""
        
       -#: src/gtk_client.c:1784
       +#: src/gtk_client.c:1783
        msgid "_Update"
        msgstr ""
        
       -#: src/gtk_client.c:1809
       +#: src/gtk_client.c:1808
        msgid "Status: Waiting for user input"
        msgstr ""
        
       -#: src/gtk_client.c:1962
       +#: src/gtk_client.c:1961
        #, c-format
        msgid "Cash: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1969
       +#: src/gtk_client.c:1968
        #, c-format
        msgid "Debt: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1972
       +#: src/gtk_client.c:1971
        #, c-format
        msgid "Bank: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1980
       +#: src/gtk_client.c:1979
        msgid "Pay back:"
        msgstr ""
        
       -#: src/gtk_client.c:1983
       +#: src/gtk_client.c:1982
        msgid "Deposit"
        msgstr ""
        
       -#: src/gtk_client.c:1987
       +#: src/gtk_client.c:1986
        msgid "Withdraw"
        msgstr ""
        
       -#: src/gtk_client.c:2011
       +#: src/gtk_client.c:2010
        msgid "Pay all"
        msgstr ""
        
       -#: src/gtk_client.c:2033
       +#: src/gtk_client.c:2032
        msgid "Player List"
        msgstr ""
        
       -#: src/gtk_client.c:2122
       +#: src/gtk_client.c:2121
        msgid "Talk to player(s)"
        msgstr ""
        
       -#: src/gtk_client.c:2144
       +#: src/gtk_client.c:2143
        msgid "Talk to all players"
        msgstr ""
        
       -#: src/gtk_client.c:2148
       +#: src/gtk_client.c:2147
        msgid "Message:-"
        msgstr ""
        
       -#: src/gtk_client.c:2161
       +#: src/gtk_client.c:2160
        msgid "Send"
        msgstr ""
        
       -#: src/gtk_client.c:2254
       +#: src/gtk_client.c:2253
        msgid "Spy On Player"
        msgstr ""
        
       -#: src/gtk_client.c:2256
       +#: src/gtk_client.c:2255
        #, 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:2264
       +#: src/gtk_client.c:2263
        msgid "Tip Off The Cops"
        msgstr ""
        
       -#: src/gtk_client.c:2266
       +#: src/gtk_client.c:2265
        #, 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:2306
       +#: src/gtk_client.c:2305
        #, c-format
        msgid "Sack %s"
        msgstr ""
        
       -#: src/gtk_client.c:2307
       +#: src/gtk_client.c:2306
        #, c-format
        msgid ""
        "Are you sure? (Any %s or %s carried\n"
        "by this %s may be lost!)"
        msgstr ""
        
       -#: src/gtk_client.c:2328
       +#: src/gtk_client.c:2327
        msgid "Name"
        msgstr ""
        
       -#: src/gtk_client.c:2329
       +#: src/gtk_client.c:2328
        msgid "Price"
        msgstr ""
        
       -#: src/gtk_client.c:2330
       +#: src/gtk_client.c:2329
        msgid "Number"
        msgstr ""
        
       -#: src/gtk_client.c:2332
       +#: src/gtk_client.c:2331
        msgid "_Buy ->"
        msgstr ""
        
       -#: src/gtk_client.c:2333
       +#: src/gtk_client.c:2332
        msgid "<- _Sell"
        msgstr ""
        
       -#: src/gtk_client.c:2334
       +#: src/gtk_client.c:2333
        msgid "_Drop <-"
        msgstr ""
        
       -#: src/gtk_client.c:2339
       +#: src/gtk_client.c:2338
        #, c-format
        msgid "%s here"
        msgstr ""
        
       -#: src/gtk_client.c:2342
       +#: src/gtk_client.c:2341
        #, c-format
        msgid "%s carried"
        msgstr ""
        
       -#: src/gtk_client.c:2418
       +#: src/gtk_client.c:2417
        msgid "Change Name"
        msgstr ""
        
       -#: src/gtk_client.c:2428
       +#: src/gtk_client.c:2427
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it:-"
        msgstr ""
        
       -#: src/gtk_client.c:2487
       +#: src/gtk_client.c:2486
        msgid "Done"
        msgstr ""
        
       -#: src/gtk_client.c:2521
       +#: src/gtk_client.c:2520
        msgid "Spy reports"
        msgstr ""
        
       -#: src/gtk_client.c:2592
       +#: src/gtk_client.c:2591
        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:257
       +#: src/serverside.c:269
        #, c-format
        msgid "MaxClients (%d) exceeded - dropping connection"
        msgstr ""
        
       -#: src/serverside.c:261
       +#: src/serverside.c:273
        msgid ""
        "Sorry, but this server has a limit of 1 player, which has been "
        "reached.^Please try connecting again later."
        msgstr ""
        
       -#: src/serverside.c:266
       +#: src/serverside.c:278
        #, 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:279
       +#: src/serverside.c:291
        #, c-format
        msgid "%s will now be known as %s"
        msgstr ""
        
       -#: src/serverside.c:294
       +#: src/serverside.c:306
        msgid "Your dealing time is up..."
        msgstr ""
        
       -#: src/serverside.c:305
       +#: src/serverside.c:317
        #, c-format
        msgid "%s: DENIED jet to %s"
        msgstr ""
        
       -#: src/serverside.c:362
       +#: src/serverside.c:374
        #, c-format
        msgid "%s now spying on %s"
        msgstr ""
        
       -#: src/serverside.c:370
       +#: src/serverside.c:382
        #, c-format
        msgid "%s spy on %s: DENIED"
        msgstr ""
        
       -#: src/serverside.c:376
       +#: src/serverside.c:388
        #, c-format
        msgid "%s tipped off the cops to %s"
        msgstr ""
        
       -#: src/serverside.c:384
       +#: src/serverside.c:396
        #, c-format
        msgid "%s tipoff about %s: DENIED"
        msgstr ""
        
       -#: src/serverside.c:492
       +#: src/serverside.c:503
        msgid "--More--"
        msgstr ""
        
       -#: src/serverside.c:503
       +#: src/serverside.c:514
        msgid "Pager exited abnormally - using stdout instead..."
        msgstr ""
        
       -#: src/serverside.c:518
       +#: src/serverside.c:529
        #, c-format
        msgid "Maintaining pid file %s"
        msgstr ""
        
       -#: src/serverside.c:522
       +#: src/serverside.c:533
        #, c-format
        msgid "Cannot create pid file %s"
        msgstr ""
        
       -#: src/serverside.c:571
       +#: src/serverside.c:582
        #, 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:608
       +#: src/serverside.c:619
        #, 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:625
       +#: src/serverside.c:636
        msgid "Cannot install SIGUSR1 interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:631
       +#: src/serverside.c:642
        msgid "Cannot install SIGINT interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:634
       +#: src/serverside.c:645
        msgid "Cannot install SIGTERM interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:637
       +#: src/serverside.c:648
        msgid "Cannot install SIGHUP interrupt handler!"
        msgstr ""
        
       -#: src/serverside.c:642
       +#: src/serverside.c:653
        msgid "Cannot install pipe handler!"
        msgstr ""
        
       -#: src/serverside.c:665
       +#: src/serverside.c:676
        msgid "Users currently logged on:-\n"
        msgstr ""
        
       -#: src/serverside.c:670
       +#: src/serverside.c:681
        msgid "No users currently logged on!"
        msgstr ""
        
       -#: src/serverside.c:674
       +#: src/serverside.c:685
        #, c-format
        msgid "Pushing %s"
        msgstr ""
        
       -#: src/serverside.c:676 src/serverside.c:684
       +#: src/serverside.c:687 src/serverside.c:695
        msgid "No such user!"
        msgstr ""
        
       -#: src/serverside.c:680
       +#: src/serverside.c:691
        #, c-format
        msgid "%s killed"
        msgstr ""
        
       -#: src/serverside.c:686
       +#: src/serverside.c:697
        msgid "Unknown command - try \"help\" for help..."
        msgstr ""
        
       -#: src/serverside.c:703
       +#: src/serverside.c:714
        #, c-format
        msgid "got connection from %s"
        msgstr ""
        
       -#: src/serverside.c:719
       +#: src/serverside.c:730
        #, c-format
        msgid "%s leaves the server!"
        msgstr ""
        
       -#: src/serverside.c:787
       +#: src/serverside.c:798
        msgid "Standard input closed."
        msgstr ""
        
       -#: src/serverside.c:930
       +#: src/serverside.c:941
        #, c-format
        msgid "Unable to read high score file %s"
        msgstr ""
        
       -#: src/serverside.c:950
       +#: src/serverside.c:961
        msgid "Congratulations! You made the high scores!"
        msgstr ""
        
       -#: src/serverside.c:963
       +#: src/serverside.c:974
        msgid "You didn't even make the high score table..."
        msgstr ""
        
       -#: src/serverside.c:977
       +#: src/serverside.c:988
        #, c-format
        msgid "Unable to write high score file %s"
        msgstr ""
        
       -#: src/serverside.c:996
       +#: src/serverside.c:1007
        msgid "(R.I.P.)"
        msgstr ""
        
       -#: src/serverside.c:1031
       +#: src/serverside.c:1042
        #, c-format
        msgid "%s: Tipoff from %s"
        msgstr ""
        
       -#: src/serverside.c:1048
       +#: src/serverside.c:1059
        #, c-format
        msgid "One of your %s was spying for %s.^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1056
       +#: src/serverside.c:1067
        #, c-format
        msgid "Your spy working with %s has been discovered!^The spy %s!"
        msgstr ""
        
       -#: src/serverside.c:1079
       +#: src/serverside.c:1090
        #, c-format
        msgid " The lady next to you on the subway said,^ \"%s\"%s"
        msgstr ""
        
       -#: src/serverside.c:1082
       +#: src/serverside.c:1093
        msgid "^    (at least, you -think- that's what she said)"
        msgstr ""
        
       -#: src/serverside.c:1084
       +#: src/serverside.c:1095
        #, c-format
        msgid " You hear someone playing %s"
        msgstr ""
        
       -#: src/serverside.c:1093 src/serverside.c:1102 src/serverside.c:1111
       -#: src/serverside.c:1120
       +#: src/serverside.c:1104 src/serverside.c:1113 src/serverside.c:1122
       +#: src/serverside.c:1131
        #, c-format
        msgid "YN^Would you like to visit %s?"
        msgstr ""
        
       -#: src/serverside.c:1131
       +#: src/serverside.c:1142
        #, c-format
        msgid "YN^^Would you like to hire %s %s for %s?"
        msgstr ""
        
       -#: src/serverside.c:1132
       +#: src/serverside.c:1143
        msgid "an"
        msgstr ""
        
       -#: src/serverside.c:1132
       +#: src/serverside.c:1143
        msgid "a"
        msgstr ""
        
       -#: src/serverside.c:1144
       +#: src/serverside.c:1155
        #, 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:1213
       +#: src/serverside.c:1224
        #, c-format
        msgid "YN^Officer %s is chasing you!"
        msgstr ""
        
       -#: src/serverside.c:1215
       +#: src/serverside.c:1226
        #, c-format
        msgid "YN^Officer %s and %d of his deputies are chasing you!"
        msgstr ""
        
       -#: src/serverside.c:1236
       +#: src/serverside.c:1247
        msgid "^Do you run?"
        msgstr ""
        
       -#: src/serverside.c:1239
       +#: src/serverside.c:1250
        msgid "^Do you Run, or Fight?"
        msgstr ""
        
       -#: src/serverside.c:1254
       +#: src/serverside.c:1265
        #, c-format
        msgid "%s: tipoff by %s finished OK."
        msgstr ""
        
       -#: src/serverside.c:1260
       +#: src/serverside.c:1271
        #, c-format
        msgid "Following your tipoff, the cops ambushed %s, who was shot dead"
        msgstr ""
        
       -#: src/serverside.c:1264
       +#: src/serverside.c:1275
        #, c-format
        msgid "Following your tipoff, the cops ambushed %s, who escaped with %d %s. "
        msgstr ""
        
       -#: src/serverside.c:1301
       +#: src/serverside.c:1312
        msgid "^You stand there like an idiot."
        msgstr ""
        
       -#: src/serverside.c:1305
       +#: src/serverside.c:1316
        msgid "^You lose him in the alleys."
        msgstr ""
        
       -#: src/serverside.c:1307
       +#: src/serverside.c:1318
        msgid "^You lose them in the alleys."
        msgstr ""
        
       -#: src/serverside.c:1315
       +#: src/serverside.c:1326
        msgid "^You can't shake him, man!"
        msgstr ""
        
       -#: src/serverside.c:1317
       +#: src/serverside.c:1328
        msgid "^You can't shake them, man!"
        msgstr ""
        
       -#: src/serverside.c:1328
       +#: src/serverside.c:1339
        #, c-format
        msgid "^You killed Officer %s! You find %s on his corpse!"
        msgstr ""
        
       -#: src/serverside.c:1342
       +#: src/serverside.c:1353
        #, c-format
        msgid "YN^^^^Do you pay a doctor %s to sew your %s up?"
        msgstr ""
        
       -#: src/serverside.c:1346
       +#: src/serverside.c:1357
        #, c-format
        msgid "YN^^^^Do you pay a doctor %s to sew you up?"
        msgstr ""
        
       -#: src/serverside.c:1358
       +#: src/serverside.c:1369
        msgid "^You got one, man!"
        msgstr ""
        
       -#: src/serverside.c:1361
       +#: src/serverside.c:1372
        msgid "^You missed!"
        msgstr ""
        
       -#: src/serverside.c:1365
       +#: src/serverside.c:1376
        msgid "^He's firing on you, man! "
        msgstr ""
        
       -#: src/serverside.c:1367
       +#: src/serverside.c:1378
        msgid "^They're firing on you, man! "
        msgstr ""
        
       -#: src/serverside.c:1370
       +#: src/serverside.c:1381
        msgid "You've been hit! "
        msgstr ""
        
       -#: src/serverside.c:1377
       +#: src/serverside.c:1388
        msgid "He wasted you, man! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1379
       +#: src/serverside.c:1390
        msgid "They wasted you, man! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1387
       +#: src/serverside.c:1398
        #, c-format
        msgid "You lost one of your %s!"
        msgstr ""
        
       -#: src/serverside.c:1396
       +#: src/serverside.c:1407
        msgid "He missed!"
        msgstr ""
        
       -#: src/serverside.c:1398
       +#: src/serverside.c:1409
        msgid "They missed!"
        msgstr ""
        
       -#: src/serverside.c:1418
       +#: src/serverside.c:1429
        msgid "You were mugged in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1429
       +#: src/serverside.c:1440
        #, c-format
        msgid "You meet a friend! He gives you %d %s."
        msgstr ""
        
       -#: src/serverside.c:1434
       +#: src/serverside.c:1445
        #, c-format
        msgid "You meet a friend! You give him %d %s."
        msgstr ""
        
       -#: src/serverside.c:1441
       +#: src/serverside.c:1452
        msgid "Sanitized away a RandomOffer"
        msgstr ""
        
       -#: src/serverside.c:1446
       +#: src/serverside.c:1457
        #, c-format
        msgid ""
        "Police dogs chase you for %d blocks! You dropped some %s! That's a drag, man!"
        msgstr ""
        
       -#: src/serverside.c:1460
       +#: src/serverside.c:1471
        #, c-format
        msgid "You find %d %s on a dead dude in the subway!"
        msgstr ""
        
       -#: src/serverside.c:1472
       +#: src/serverside.c:1483
        #, c-format
        msgid "Your mama made brownies with some of your %s! They were great!"
        msgstr ""
        
       -#: src/serverside.c:1480
       +#: src/serverside.c:1491
        msgid ""
        "YN^There is some weed that smells like paraquat here!^It looks good! Will "
        "you smoke it? "
        msgstr ""
        
       -#: src/serverside.c:1487
       +#: src/serverside.c:1498
        #, c-format
        msgid "You stopped to %s."
        msgstr ""
        
       -#: src/serverside.c:1508
       +#: src/serverside.c:1519
        #, c-format
        msgid "Would you like to buy a bigger trenchcoat for %s?"
        msgstr ""
        
       -#: src/serverside.c:1513
       +#: src/serverside.c:1524
        #, c-format
        msgid "YN^Hey dude! I'll help carry your %s for a mere %s. Yes or no?"
        msgstr ""
        
       -#: src/serverside.c:1525
       +#: src/serverside.c:1536
        #, c-format
        msgid "YN^Would you like to buy a %s for %s?"
        msgstr ""
        
       -#: src/serverside.c:1626 src/serverside.c:1737
       +#: src/serverside.c:1637 src/serverside.c:1748
        #, c-format
        msgid "%s: offer was on behalf of %s"
        msgstr ""
        
       -#: src/serverside.c:1629
       +#: src/serverside.c:1640
        #, c-format
        msgid "%s has accepted your %s!^Use the G key to contact your spy."
        msgstr ""
        
       -#: src/serverside.c:1675
       +#: src/serverside.c:1686
        msgid ""
        "You hallucinated for three days on the wildest trip you ever imagined!^Then "
        "you died because your brain disintegrated!"
        msgstr ""
        
       -#: src/serverside.c:1714
       +#: src/serverside.c:1725
        #, c-format
        msgid "Too late - %s has just left!"
        msgstr ""
        
       -#: src/serverside.c:1740
       +#: src/serverside.c:1751
        #, c-format
        msgid "%s has rejected your %s!"
        msgstr ""
        
       -#: src/serverside.c:1775
       +#: src/serverside.c:1786
        #, c-format
        msgid "%s has got away!"
        msgstr ""
        
       -#: src/serverside.c:1816
       +#: src/serverside.c:1827
        #, c-format
        msgid "%s has run off!"
        msgstr ""
        
       -#: src/serverside.c:1828
       +#: src/serverside.c:1839
        msgid "Coward! You successfully escaped from the fight."
        msgstr ""
        
       -#: src/serverside.c:1884
       +#: src/serverside.c:1895
        msgid "pitifully armed"
        msgstr ""
        
       -#: src/serverside.c:1885
       +#: src/serverside.c:1896
        msgid "lightly armed"
        msgstr ""
        
       -#: src/serverside.c:1886
       +#: src/serverside.c:1897
        msgid "moderately well armed"
        msgstr ""
        
       -#: src/serverside.c:1887
       +#: src/serverside.c:1898
        msgid "heavily armed"
        msgstr ""
        
       -#: src/serverside.c:1888
       +#: src/serverside.c:1899
        msgid "armed to the teeth"
        msgstr ""
        
       -#: src/serverside.c:1889
       +#: src/serverside.c:1900
        msgid " fires and "
        msgstr ""
        
       -#: src/serverside.c:1890
       +#: src/serverside.c:1901
        msgid " stands and takes it."
        msgstr ""
        
       -#: src/serverside.c:1893
       +#: src/serverside.c:1904
        #, c-format
        msgid "%s arrives, with %d %s, %s,^%s"
        msgstr ""
        
       -#: src/serverside.c:1897
       +#: src/serverside.c:1908
        #, c-format
        msgid "%s arrives, %s,^%s"
        msgstr ""
        
       -#: src/serverside.c:1902
       +#: src/serverside.c:1913
        #, c-format
        msgid "%s fires and "
        msgstr ""
        
       -#: src/serverside.c:1904
       +#: src/serverside.c:1915
        #, c-format
        msgid "%s stands and takes it."
        msgstr ""
        
       -#: src/serverside.c:1916
       +#: src/serverside.c:1927
        msgid "misses you!"
        msgstr ""
        
       -#: src/serverside.c:1917
       +#: src/serverside.c:1928
        #, c-format
        msgid "You failed to hit %s."
        msgstr ""
        
       -#: src/serverside.c:1920
       +#: src/serverside.c:1931
        msgid "You stand and take it."
        msgstr ""
        
       -#: src/serverside.c:1924
       +#: src/serverside.c:1935
        msgid "hits you, man!"
        msgstr ""
        
       -#: src/serverside.c:1927
       +#: src/serverside.c:1938
        msgid " You've been wasted! What a drag!"
        msgstr ""
        
       -#: src/serverside.c:1928
       +#: src/serverside.c:1939
        #, c-format
        msgid "You hit and killed %s"
        msgstr ""
        
       -#: src/serverside.c:1943 src/serverside.c:1976
       +#: src/serverside.c:1954 src/serverside.c:1987
        msgid ", and loot the body!"
        msgstr ""
        
       -#: src/serverside.c:1952
       +#: src/serverside.c:1963
        #, c-format
        msgid "^You lost a %s, man!"
        msgstr ""
        
       -#: src/serverside.c:1957
       +#: src/serverside.c:1968
        #, c-format
        msgid "You are paid a bounty of %s in reward for killing^one of %s's %s"
        msgstr ""
        
       -#: src/serverside.c:1965
       +#: src/serverside.c:1976
        #, c-format
        msgid "You killed one of %s's %s (%d left)"
        msgstr ""
        
       -#: src/serverside.c:1983
       +#: src/serverside.c:1994
        #, c-format
        msgid "You fire, and hit %s!"
        msgstr ""
        
       -#: src/serverside.c:2023
       +#: src/serverside.c:2034
        msgid "YN^Officer %%s spots you dropping %s, and chases you!"
        msgstr ""
        
       -#: src/serverside.c:2025
       +#: src/serverside.c:2036
        msgid ""
        "YN^Officer %%s and %%d of his deputies spot you dropping %s, and chase you!"
        msgstr ""
        
       -#: src/serverside.c:2180
       +#: src/serverside.c:2191
        msgid "Player removed due to idle timeout"
        msgstr ""
        
       -#: src/serverside.c:2190
       +#: src/serverside.c:2201
        msgid "Player removed due to connect timeout"
        msgstr ""
        
       -#: src/serverside.c:2196 src/serverside.c:2202
       +#: src/serverside.c:2207 src/serverside.c:2213
        #, c-format
        msgid "%s fails to return fire..."
        msgstr ""
        
       -#: src/message.c:437
       +#: src/message.c:449
        #, 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:576
       +#: src/message.c:588
        msgid "Could not find host"
        msgstr ""
        
       -#: src/message.c:577
       +#: src/message.c:589
        msgid "Could not create network socket"
        msgstr ""
        
       -#: src/message.c:578 src/message.c:611
       +#: src/message.c:590 src/message.c:623
        msgid "Connection refused or no server present"
        msgstr ""
        
       -#: src/message.c:757
       +#: src/message.c:789
        msgid "Cannot locate metaserver"
        msgstr ""
        
       -#: src/message.c:758
       +#: src/message.c:790
        msgid "Cannot create socket"
        msgstr ""
        
       -#: src/message.c:760
       +#: src/message.c:792
        msgid "Metaserver not running HTTP or connection denied"
        msgstr ""
        
       t@@ -2564,26 +2564,26 @@ msgstr ""
        msgid "Using name %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:130
       +#: src/AIPlayer.c:131
        msgid "Players in this game:-\n"
        msgstr ""
        
       -#: src/AIPlayer.c:160
       +#: src/AIPlayer.c:161
        #, c-format
        msgid "%s joins the game.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:163
       +#: src/AIPlayer.c:164
        #, c-format
        msgid "%s has left the game.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:171
       +#: src/AIPlayer.c:172
        #, c-format
        msgid "Jetting to %s with %s cash and %s debt"
        msgstr ""
        
       -#: src/AIPlayer.c:191
       +#: src/AIPlayer.c:192
        msgid "AI Player killed. Terminating normally.\n"
        msgstr ""
        
       t@@ -2591,75 +2591,75 @@ msgstr ""
        msgid "Game time is up. Leaving game.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:216
       +#: src/AIPlayer.c:215
        msgid "AI Player pushed from the server.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:220
       +#: src/AIPlayer.c:218
        msgid "The server has terminated.\n"
        msgstr ""
        
       -#: src/AIPlayer.c:276
       +#: src/AIPlayer.c:272
        #, c-format
        msgid "Selling %d %s at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:292
       +#: src/AIPlayer.c:288
        #, c-format
        msgid "Buying %d %s at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:321
       +#: src/AIPlayer.c:317
        #, c-format
        msgid "Buying a %s for %s at the gun shop\n"
        msgstr ""
        
       -#: src/AIPlayer.c:361
       +#: src/AIPlayer.c:357
        #, c-format
        msgid "Debt of %s paid off to loan shark\n"
        msgstr ""
        
       -#: src/AIPlayer.c:386
       +#: src/AIPlayer.c:382
        #, c-format
        msgid "Loan shark located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:394
       +#: src/AIPlayer.c:390
        #, c-format
        msgid "Gun shop located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:402
       +#: src/AIPlayer.c:398
        #, c-format
        msgid "Pub located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:415
       +#: src/AIPlayer.c:411
        #, c-format
        msgid "Bank located at %s\n"
        msgstr ""
        
       -#: src/AIPlayer.c:439
       +#: src/AIPlayer.c:435
        msgid "Call yourselves drug dealers?"
        msgstr ""
        
       -#: src/AIPlayer.c:440
       +#: src/AIPlayer.c:436
        msgid "A trained monkey could do better..."
        msgstr ""
        
       -#: src/AIPlayer.c:441
       +#: src/AIPlayer.c:437
        msgid "Think you're hard enough to deal with the likes of me?"
        msgstr ""
        
       -#: src/AIPlayer.c:442
       +#: src/AIPlayer.c:438
        msgid "Zzzzz... are you dealing in candy or what?"
        msgstr ""
        
       -#: src/AIPlayer.c:443
       +#: src/AIPlayer.c:439
        msgid "Reckon I'll just have to shoot you for your own good."
        msgstr ""
        
       -#: src/AIPlayer.c:452
       +#: src/AIPlayer.c:448
        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@@ -121,7 +121,8 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
           gchar *prstr,*prstr2;
           struct timeval tv;
           gboolean Handled;
       -   if (ProcessMessage(Message,&From,&AICode,&Code,&To,&Data,FirstClient)==-1) {
       +   if (ProcessMessage(Message,AIPlay,&From,&AICode,&Code,&To,
       +                      &Data,FirstClient)==-1) {
              g_warning("Bad network message. Oops."); return 0;
           }
           Handled=HandleGenericClientMessage(From,AICode,Code,To,Data,NULL);
       t@@ -189,7 +190,6 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 }
                 if (AIPlay->Health==0) {
                    g_print(_("AI Player killed. Terminating normally.\n"));
       -            g_free(Data);
                    return 1;
                 }
                 break;
       t@@ -210,22 +210,18 @@ int HandleAIMessage(char *Message,Player *AIPlay) {
                 break;
              case C_ENDHISCORE:
                 g_print(_("Game time is up. Leaving game.\n"));
       -         g_free(Data);
                 return 1;
              case C_PUSH:
                 g_print(_("AI Player pushed from the server.\n"));
       -         g_free(Data);
                 return 1;
              case C_QUIT:
                 g_print(_("The server has terminated.\n"));
       -         g_free(Data);
                 return 1;
              default:
                 if (!Handled) g_message("%s^%c^%s%s\n",GetPlayerName(From),Code,
                                                        GetPlayerName(To),Data);
                 break;
           }
       -   g_free(Data);
           return 0;
        }
        
 (DIR) diff --git a/src/curses_client.c b/src/curses_client.c
       t@@ -587,9 +587,9 @@ void HandleClientMessage(char *Message,Player *Play) {
           int i;
           gboolean Handled;
        
       -/* Ignore To: field (use tmp Player pointer for this) - all messages
       -   will be for Player "Play" */
       -   if (ProcessMessage(Message,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1) {
       +/* Ignore To: field - all messages will be for Player "Play" */
       +   if (ProcessMessage(Message,Play,&From,&AICode,&Code,NULL,
       +                      &Data,FirstClient)==-1) {
              return;
           }
        
       t@@ -732,7 +732,6 @@ void HandleClientMessage(char *Message,Player *Play) {
                 }
                 break;
           }
       -   g_free(Data);
        }
        
        void PrepareHighScoreScreen() {
 (DIR) diff --git a/src/dopewars.c b/src/dopewars.c
       t@@ -490,6 +490,21 @@ GSList *AddPlayer(int fd,Player *NewPlayer,GSList *First) {
        /* start of the list. If this function is called by the server, then  */
        /* it should pass the file descriptor of the socket used to           */
        /* communicate with the client player.                                */
       +   Player *tmp;
       +   GSList *list;
       +   list=First;
       +   NewPlayer->ID=0;
       +/* Generate a unique player ID, if we're the server (clients get their IDs
       +   from the server, so don't need to generate IDs) */
       +   if (Server) while (list) {
       +      tmp=(Player *)list->data;
       +      if (tmp->ID==NewPlayer->ID) {
       +         NewPlayer->ID++;
       +         list=First;
       +      } else {
       +         list=g_slist_next(list);
       +      }
       +   }
           NewPlayer->fd=-1;
           NewPlayer->Name=NULL;
           SetPlayerName(NewPlayer,NULL);
       t@@ -573,6 +588,19 @@ void SetPlayerName(Player *Play,char *Name) {
           else Play->Name = g_strdup(Name);
        }
        
       +Player *GetPlayerByID(guint ID,GSList *First) {
       +/* Searches the linked list starting at "First" for a Player structure */
       +/* with the given ID. Returns a pointer to this structure, or NULL if  */
       +/* no match can be found.                                              */
       +   GSList *list;
       +   Player *Play;
       +   for (list=First;list;list=g_slist_next(list)) {
       +      Play=(Player *)list->data;
       +      if (Play->ID==ID) return Play;
       +   }
       +   return NULL;
       +}
       +
        Player *GetPlayerByName(char *Name,GSList *First) {
        /* Searches the linked list starting at "First" for a Player structure */
        /* with the name "Name". Returns a pointer to this structure, or NULL  */
 (DIR) diff --git a/src/dopewars.h b/src/dopewars.h
       t@@ -283,6 +283,7 @@ typedef struct tagConnBuf {
        } ConnBuf;            
        
        struct PLAYER_T {
       +   guint ID;
           int Turn;
           price_t Cash,Debt,Bank;
           int Health;
       t@@ -338,6 +339,7 @@ extern GSList *ServerList;
        extern GScannerConfig ScannerConfig;
        
        GSList *RemovePlayer(Player *Play,GSList *First);
       +Player *GetPlayerByID(guint ID,GSList *First);
        Player *GetPlayerByName(gchar *Name,GSList *First);
        int CountPlayers(GSList *First);
        GSList *AddPlayer(int fd,Player *NewPlayer,GSList *First);
 (DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
       t@@ -287,8 +287,8 @@ void HandleClientMessage(char *pt,Player *Play) {
           GtkWidget *MenuItem;
           GSList *list;
        
       -/* Ignore To: field (bin it in "tmp") as all messages should be for "Play" */
       -   if (ProcessMessage(pt,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1) {
       +/* Ignore To: field as all messages should be for "Play" */
       +   if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1) {
              return;
           }
        
       t@@ -388,7 +388,6 @@ void HandleClientMessage(char *pt,Player *Play) {
                 }
                 break;
           }
       -   g_free(Data);
        }
        
        struct HiScoreDiaStruct {
 (DIR) diff --git a/src/message.c b/src/message.c
       t@@ -92,9 +92,16 @@ void SendClientMessage(Player *From,char AICode,char Code,
           Player *ServerFrom;
           g_assert(BufOwn!=NULL);
           text=g_string_new(NULL);
       -   g_string_sprintf(text,"%s^%s^%c%c%s",From ? GetPlayerName(From) : "",
       -                    To ? GetPlayerName(To) : "",AICode,Code,
       -                    Data ? Data : "");
       +   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 {
       +      g_string_sprintf(text,"%s^%s^%c%c%s",From ? GetPlayerName(From) : "",
       +                       To ? GetPlayerName(To) : "",AICode,Code,
       +                       Data ? Data : "");
       +   }
        
        #if NETWORKING
           if (!Network) {
       t@@ -135,15 +142,17 @@ void SendServerMessage(Player *From,char AICode,char Code,
        /* 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"                    */
       -   gchar *text;
       +   GString *text;
           if (!Network) {
       -      text=g_strdup_printf("%s^%s^%c%c%s",From ? GetPlayerName(From) : "",
       -                           To ? GetPlayerName(To) : "",AICode,Code,
       -                           Data ? Data : "");
       +      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);
       +      g_string_sprintfa(text,"^%c%c%s",AICode,Code,Data ? Data : "");
              if (ClientMessageHandlerPt) {
       -         (*ClientMessageHandlerPt)(text,(Player *)(FirstClient->data));
       +         (*ClientMessageHandlerPt)(text->str,(Player *)(FirstClient->data));
              }
       -      g_free(text);
       +      g_string_free(text,TRUE);
           } else SendClientMessage(From,AICode,Code,To,Data,To);
        }
        
       t@@ -191,7 +200,7 @@ void CombineAbilities(Player *Play) {
        
        gboolean HaveAbility(Player *Play,gint Type) {
           if (Type<0 || Type>=A_NUM) return FALSE;
       -   else return (Play->Abil.Shared[Type]=='1');
       +   else return (Play->Abil.Shared[Type]);
        }
        
        #if NETWORKING
       t@@ -404,17 +413,19 @@ void SendSpyReport(Player *To,Player *SpiedOn) {
        }
        
        void SendInitialData(Player *To) {
       -   gchar *text;
       +   GString *text;
           if (!Network) return;
       -   text=g_strdup_printf("%s^%d^%d^%d^%s^%s^%s^%s^%s^%s^%s^%s^",
       -                        VERSION,NumLocation,NumGun,NumDrug,
       -                        Names.Bitch,Names.Bitches,Names.Gun,Names.Guns,
       -                        Names.Drug,Names.Drugs,Names.Month,Names.Year);
       -   SendServerMessage(NULL,C_NONE,C_INIT,To,text);
       -   g_free(text);
       +   text=g_string_new("");
       +   g_string_sprintf(text,"%s^%d^%d^%d^%s^%s^%s^%s^%s^%s^%s^%s^",
       +                         VERSION,NumLocation,NumGun,NumDrug,
       +                         Names.Bitch,Names.Bitches,Names.Gun,Names.Guns,
       +                         Names.Drug,Names.Drugs,Names.Month,Names.Year);
       +   if (HaveAbility(To,A_PLAYERID)) g_string_sprintfa(text,"%d^",To->ID);
       +   SendServerMessage(NULL,C_NONE,C_INIT,To,text->str);
       +   g_string_free(text,TRUE);
        }
        
       -void ReceiveInitialData(char *Data) {
       +void ReceiveInitialData(Player *Play,char *Data) {
           char *pt,*ServerVersion;
           GSList *list;
           pt=Data;
       t@@ -433,6 +444,7 @@ void ReceiveInitialData(char *Data) {
           AssignName(&Names.Drugs,GetNextWord(&pt,""));
           AssignName(&Names.Month,GetNextWord(&pt,""));
           AssignName(&Names.Year,GetNextWord(&pt,""));
       +   if (HaveAbility(Play,A_PLAYERID)) Play->ID=GetNextInt(&pt,0);
           if (strcmp(VERSION,ServerVersion)!=0) {
              g_message(_("This server is version %s, while your client is "
        "version %s.\nBe warned that different versions may not be fully compatible!\n"
       t@@ -663,33 +675,50 @@ void ShutdownNetwork() {
           Client=Network=Server=FALSE;
        }
        
       -int ProcessMessage(char *Msg,Player **From,char *AICode,char *Code,
       +int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Code,
                           Player **To,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 a dynamically-allocated buffer, which must be g_free'd by */
       -/* the caller. Returns 0 on success, -1 on failure.                          */
       -   gchar **split;
       -   Player *tmp;
       +/* 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.               */
       +   gchar *pt,*buf;
       +   guint ID;
       +
       +   *AICode=*Code=C_NONE;
       +   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;
       +   }
        
       -   *Data=NULL;
       -   split=g_strsplit(Msg,"^",2);
       -   if (split[0]) {
       -      tmp=GetPlayerByName(split[0],First);
       -      if (tmp && split[1]) {
       -         *From=tmp;
       -         tmp=GetPlayerByName(split[1],First);
       -         if (tmp && split[2]) {
       -            *To=tmp;
       -            *AICode=split[2][0];
       -            *Code=split[2][1];
       -            *Data=g_strdup(split[2]+2);
       -            g_strfreev(split);
       -            return 0;
       -         }
       +   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 (!(*To)) return -1;
       +   }
       +
       +   if (strlen(pt)>=2) {
       +      *AICode=pt[0];
       +      *Code=pt[1];
       +      *Data=&pt[2];
       +      return 0;
           }
       -   g_strfreev(split);
           return -1;
        }
        
       t@@ -707,20 +736,23 @@ void ReceiveDrugsHere(char *text,Player *To) {
        }
        
        gboolean HandleGenericClientMessage(Player *From,char AICode,char Code,
       -                               Player *To,char *Data,char *DisplayMode) {
       +                                    Player *To,char *Data,char *DisplayMode) {
        /* Handles messages that both human clients and AI players deal with in the */
        /* same way.                                                                */
           Player *tmp;
       +   gchar *pt;
           switch(Code) {
              case C_LIST: case C_JOIN:
                 tmp=g_new(Player,1);
                 FirstClient=AddPlayer(0,tmp,FirstClient);
       -         SetPlayerName(tmp,Data);
       +         pt=Data;
       +         SetPlayerName(tmp,GetNextWord(&pt,NULL));
       +         if (HaveAbility(To,A_PLAYERID)) tmp->ID=GetNextInt(&pt,0);
                 break;
              case C_DATA:
                 ReceiveMiscData(Data); break;
              case C_INIT:
       -         ReceiveInitialData(Data); break;
       +         ReceiveInitialData(To,Data); break;
              case C_ABILITIES:
                 ReceiveAbilities(To,Data); CombineAbilities(To);
                 break;
 (DIR) diff --git a/src/message.h b/src/message.h
       t@@ -122,7 +122,7 @@ void SendPlayerData(Player *To);
        void SendSpyReport(Player *To,Player *SpiedOn);
        void ReceivePlayerData(char *text,Player *From);
        void SendInitialData(Player *To);
       -void ReceiveInitialData(char *data);
       +void ReceiveInitialData(Player *Play,char *data);
        void SendMiscData(Player *To);
        void ReceiveMiscData(char *Data);
        gchar *GetNextWord(gchar **Data,gchar *Default);
       t@@ -133,7 +133,7 @@ char *SetupNetwork(gboolean NonBlocking);
        char *FinishSetupNetwork();
        void ShutdownNetwork();
        void SwitchToSinglePlayer(Player *Play);
       -int ProcessMessage(char *Msg,Player **From,char *AICode,char *Code,
       +int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Code,
                           Player **To,char **Data,GSList *First);
        void ReceiveDrugsHere(char *text,Player *To);
        gboolean HandleGenericClientMessage(Player *From,char AICode,char Code,
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -187,6 +187,18 @@ void HandleServerPlayer(Player *Play) {
           }
        }
        
       +void SendPlayerDetails(Player *Play,Player *To,char Code) {
       +/* Sends details (name, ID) about player "Play" to player "To", using */
       +/* message code "Code"                                                */
       +   GString *text;
       +   text=g_string_new(GetPlayerName(Play));
       +   if (HaveAbility(To,A_PLAYERID)) {
       +      g_string_sprintfa(text,"^%d",Play->ID);
       +   }
       +   SendServerMessage(NULL,C_NONE,Code,To,text->str);
       +   g_string_free(text,TRUE);
       +}
       +
        void HandleServerMessage(gchar *buf,Player *Play) {
        /* Given a message "buf", from player "Play", performs processing and */
        /* sends suitable replies.                                            */
       t@@ -198,8 +210,8 @@ void HandleServerMessage(gchar *buf,Player *Play) {
           int i;
           price_t money;
        
       -/* Ignore client's From: field (bin it in tmp) - should always be "Play" */
       -   if (ProcessMessage(buf,&tmp,&AICode,&Code,&To,&Data,FirstServer)==-1) {
       +/* Ignore client's From: field - should always be "Play" */
       +   if (ProcessMessage(buf,Play,NULL,&AICode,&Code,&To,&Data,FirstServer)==-1) {
              g_warning("Bad message");
              return;
           }
       t@@ -237,10 +249,7 @@ void HandleServerMessage(gchar *buf,Player *Play) {
                       SetPlayerName(Play,Data);
                       for (list=FirstServer;list;list=g_slist_next(list)) {
                          pt=(Player *)list->data;
       -                  if (pt!=Play) {
       -                     SendServerMessage(NULL,C_NONE,C_LIST,Play,
       -                                       GetPlayerName(pt));
       -                  }
       +                  if (pt!=Play) SendPlayerDetails(pt,Play,C_LIST);
                       }
                       SendServerMessage(NULL,C_NONE,C_ENDLIST,Play,NULL);
                       RegisterWithMetaServer(TRUE,FALSE);
       t@@ -249,7 +258,10 @@ void HandleServerMessage(gchar *buf,Player *Play) {
                       if (Network) {
                          g_message(_("%s joins the game!"),GetPlayerName(Play));
                       }
       -               BroadcastToClients(C_NONE,C_JOIN,GetPlayerName(Play),NULL,Play);
       +               for (list=FirstServer;list;list=g_slist_next(list)) {
       +                  pt=(Player *)list->data;
       +                  if (pt!=Play) SendPlayerDetails(Play,pt,C_JOIN);
       +               }
                       Play->EventNum=E_ARRIVE;
                       SendPlayerData(Play);
                       SendEvent(Play);
       t@@ -398,7 +410,6 @@ void HandleServerMessage(gchar *buf,Player *Play) {
                                         GetPlayerName(To),Data);
                 break;
           }
       -   g_free(Data);
        }
        
        void ClientLeftServer(Player *Play) {
 (DIR) diff --git a/src/win32_client.c b/src/win32_client.c
       t@@ -241,8 +241,8 @@ static void HandleClientMessage(char *pt,Player *Play) {
           gchar *text;
           LRESULT Answer;
           GSList *list;
       -/* Ignore server's To: field (bin it in tmp); use "Play" instead */
       -   if (ProcessMessage(pt,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1) {
       +/* Ignore server's To: field; use "Play" instead */
       +   if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1) {
              return;
           }
           Handled=HandleGenericClientMessage(From,AICode,Code,Play,Data,&DisplayMode);