]> git.pond.sub.org Git - empserver/commitdiff
nsc: Turn NSC_HIDDEN into a flag
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 2 Feb 2014 11:09:18 +0000 (12:09 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 1 Feb 2015 15:52:59 +0000 (16:52 +0100)
More general, and fewer places need to know about it.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
include/nsc.h
src/lib/common/nsc.c
src/lib/common/nstreval.c
src/lib/common/xundump.c
src/lib/global/symbol.c
tests/smoke/journal.log

index 3583c9ee86282d651ca7bcf2614947d10be57f40..6cfcb717f222520c67b3707b7eaa7b8b57296926 100644 (file)
@@ -56,8 +56,6 @@ enum nsc_type {
     NSC_INT,                   /* int */
     NSC_XCOORD,                        /* coord that needs x conversion */
     NSC_YCOORD,                        /* coord that needs y conversion */
-    NSC_HIDDEN,                        /* unsigned char in struct natstr that
-                                  may need hiding */
     NSC_TIME,                  /* time_t */
     NSC_FLOAT,                 /* float */
     NSC_STRINGY,               /* char[] */
@@ -118,6 +116,7 @@ struct valstr {
            int len;
            int idx;
            void *(*get)(struct valstr *, struct natstr *, void *);
+           int hidden;
        } sym;
        double dbl;             /* cat NSC_VAL, type NSC_DOUBLE */
        struct {                /* cat NSC_VAL, type NSC_STRING, cat NSC_ID */
@@ -193,7 +192,8 @@ enum {
     NSC_DEITY = bit(0),                /* access restricted to deity */
     NSC_EXTRA = bit(1),                /* computable from other selectors */
     NSC_CONST = bit(2),                /* field cannot be changed */
-    NSC_BITS = bit(3)          /* value consists of flag bits */
+    NSC_BITS = bit(3),         /* value consists of flag bits */
+    NSC_HIDDEN = bit(4)                /* visibility depends on contact */
 };
 
 /*
@@ -216,10 +216,14 @@ enum {
  * See struct valstr for details.
  * Because virtual selectors don't have a setter method, xundump must
  * be made to ignore them, by setting NSC_EXTRA.
- * If flag NSC_DEITY is set, only to deities can use this selector.
+ * If flag NSC_DEITY is set, only deities can use this selector.
  * If flag NSC_EXTRA is set, xdump and xundump ignore this selector.
  * If flag NSC_CONST is set, the datum can't be changed from its
  * initial value (xundump obeys that).
+ * If flag NSC_HIDDEN is set, the selector must be an array of MAXNOC
+ * elements, indexed by country number, and the context object must be
+ * EF_NATION.  Array elements are masked for contact when opt_HIDDEN
+ * is on.
  * If ca_table is not EF_BAD, the datum refers to that Empire table;
  * ca_type must be an integer type.  If flag NSC_BITS is set, the
  * datum consists of flag bits, and the referred table must be a
index af3b08117c3f8ed08b41fa6430aab6af6f3d768a..afdf62c6727fbed9accd5bfb132c941a8732bb4a 100644 (file)
@@ -570,8 +570,8 @@ struct castr cou_ca[] = {
      EF_BAD, 0},
     {"happiness", fldoff(nat_level[NAT_HLEV]), NSC_FLOAT, 0, NULL,
      EF_BAD, 0},
-    {"relations", fldoff(nat_relate), NSC_HIDDEN, MAXNOC, NULL,
-     EF_NATION_RELATIONS, NSC_EXTRA},
+    {"relations", fldoff(nat_relate), NSC_UCHAR, MAXNOC, NULL,
+     EF_NATION_RELATIONS, NSC_EXTRA | NSC_HIDDEN},
     /* mortals know there's contact (relations show), but not how strong */
     {"contacts", fldoff(nat_contact), NSC_UCHAR, MAXNOC, NULL,
      EF_BAD, NSC_DEITY | NSC_EXTRA},
index 1d7f2b3893b51b3ffa38e5ff86428ef148580a6c..f48688f46c8ead3af8aaff92fdc0a275f66cfde6 100644 (file)
@@ -54,6 +54,7 @@ nstr_mksymval(struct valstr *val, struct castr *ca, int idx)
     val->val_as.sym.len = ca->ca_len;
     val->val_as.sym.idx = idx;
     val->val_as.sym.get = ca->ca_get;
+    val->val_as.sym.hidden = ca->ca_flags & NSC_HIDDEN;
     return val;
 }
 
@@ -75,7 +76,7 @@ nstr_eval(struct valstr *val, natid cnum, void *ptr, enum nsc_type want)
 {
     char *memb_ptr;
     enum nsc_type valtype;
-    int idx;
+    int idx, hidden;
     coord c;
     struct natstr *natp;
 
@@ -105,6 +106,8 @@ nstr_eval(struct valstr *val, natid cnum, void *ptr, enum nsc_type want)
        memb_ptr = ptr;
        memb_ptr += val->val_as.sym.off;
        idx = val->val_as.sym.idx;
+       hidden = val->val_as.sym.hidden;
+       val->val_cat = NSC_VAL;
        switch (val->val_type) {
        case NSC_CHAR:
            val->val_as.lng = ((signed char *)memb_ptr)[idx];
@@ -144,18 +147,6 @@ nstr_eval(struct valstr *val, natid cnum, void *ptr, enum nsc_type want)
                c = yrel(getnatp(cnum), c);
            val->val_as.lng = c;
            break;
-       case NSC_HIDDEN:
-           val->val_as.lng = -1;
-           if (CANT_HAPPEN(((struct natstr *)ptr)->ef_type != EF_NATION))
-               break;
-           if (opt_HIDDEN && cnum != NATID_BAD) {
-               natp = getnatp(cnum);
-               if (natp->nat_stat != STAT_GOD
-                   && !(getcontact(natp, idx) && getcontact(ptr, idx)))
-                   break;
-           }
-           val->val_as.lng = ((unsigned char *)memb_ptr)[idx];
-           break;
        case NSC_FLOAT:
            val->val_as.dbl = ((float *)memb_ptr)[idx];
            valtype = NSC_DOUBLE;
@@ -183,7 +174,19 @@ nstr_eval(struct valstr *val, natid cnum, void *ptr, enum nsc_type want)
            CANT_REACH();
            valtype = NSC_NOTYPE;
        }
-       val->val_cat = NSC_VAL;
+
+       if (hidden) {
+           if (CANT_HAPPEN(hidden && valtype != NSC_LONG))
+               break;          /* not implemented */
+           if (CANT_HAPPEN(((struct natstr *)ptr)->ef_type != EF_NATION))
+               break;          /* only defined for nation selectors */
+           if (!opt_HIDDEN || cnum == NATID_BAD)
+               break;
+           natp = getnatp(cnum);
+           if (natp->nat_stat != STAT_GOD
+               && !(getcontact(natp, idx) && getcontact(ptr, idx)))
+               val->val_as.lng = -1;
+       }
        break;
     default:
        CANT_REACH();
@@ -228,7 +231,6 @@ nstr_promote(int valtype)
     case NSC_INT:
     case NSC_XCOORD:
     case NSC_YCOORD:
-    case NSC_HIDDEN:
     case NSC_TIME:
        valtype = NSC_LONG;
        break;
index 1b89308ed55fe1e024fe012b44049b38f4239aaf..9cd66bf1b4ff6de9863c9a654a350b4e46988afa 100644 (file)
@@ -703,7 +703,6 @@ setnum(int fldno, double dbl)
        new = ((signed char *)memb_ptr)[idx] = (signed char)dbl;
        break;
     case NSC_UCHAR:
-    case NSC_HIDDEN:
        old = ((unsigned char *)memb_ptr)[idx];
        new = ((unsigned char *)memb_ptr)[idx] = (unsigned char)dbl;
        break;
index 8568eefd48f04d933456a20a90d4bf7a2ba48e79..c0a2a3bcfd78289428c3fd75b34ab6417f75807d 100644 (file)
@@ -27,7 +27,7 @@
  *  symbol.c: Empire symbol tables
  *
  *  Known contributors to this file:
- *     Markus Armbruster, 2006-2010
+ *     Markus Armbruster, 2006-2014
  */
 
 #include <config.h>
@@ -82,6 +82,7 @@ struct symbol meta_flags[] = {
     {NSC_EXTRA, "extra"},
     {NSC_CONST, "const"},
     {NSC_BITS, "bits"},
+    {NSC_HIDDEN, "hidden"},
     {0, NULL}
 };
 
@@ -96,7 +97,6 @@ struct symbol meta_type[] = {
     {NSC_INT, "d"},
     {NSC_XCOORD, "d"},
     {NSC_YCOORD, "d"},
-    {NSC_HIDDEN, "d"},
     {NSC_TIME, "d"},
     {NSC_FLOAT, "g"},
     {NSC_STRINGY, "c"},
index 30e5d96bb418ee0f24e8f6298e0a9c0d2065a789..ca82bd8a0bdeade3a1fbaccfb5f62f54f9d3ba96 100644 (file)
     Play#0 output Play#0 1 "opy" 10 0 0 -1
     Play#0 output Play#0 1 "mission" 6 0 0 34
     Play#0 output Play#0 1 "radius" 6 0 0 -1
-    Play#0 output Play#0 1 "fleet" 14 0 1 -1
+    Play#0 output Play#0 1 "fleet" 13 0 1 -1
     Play#0 output Play#0 1 "xstart" 9 0 0 -1
     Play#0 output Play#0 1 "xend" 9 0 0 -1
     Play#0 output Play#0 1 "ystart" 10 0 0 -1
     Play#0 output Play#0 1 "ptime" 6 1 0 -1
     Play#0 output Play#0 1 "access" 6 0 0 -1
     Play#0 output Play#0 1 "mquota" 5 0 0 -1
-    Play#0 output Play#0 1 "path" 14 0 28 -1
+    Play#0 output Play#0 1 "path" 13 0 28 -1
     Play#0 output Play#0 1 "follow" 8 0 0 -1
-    Play#0 output Play#0 1 "name" 14 0 24 -1
+    Play#0 output Play#0 1 "name" 13 0 24 -1
     Play#0 output Play#0 1 "xbuilt" 9 1 0 -1
     Play#0 output Play#0 1 "ybuilt" 10 1 0 -1
     Play#0 output Play#0 1 "builder" 5 1 0 8
     Play#0 output Play#0 1 "rflags" 8 8 0 46
-    Play#0 output Play#0 1 "rpath" 14 0 10 -1
+    Play#0 output Play#0 1 "rpath" 13 0 10 -1
     Play#0 output Play#0 1 /49
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta plane
     Play#0 output Play#0 1 "opy" 10 0 0 -1
     Play#0 output Play#0 1 "mission" 6 0 0 34
     Play#0 output Play#0 1 "radius" 6 0 0 -1
-    Play#0 output Play#0 1 "wing" 14 0 1 -1
+    Play#0 output Play#0 1 "wing" 13 0 1 -1
     Play#0 output Play#0 1 "range" 5 0 0 -1
     Play#0 output Play#0 1 "harden" 4 0 0 -1
     Play#0 output Play#0 1 "ship" 8 0 0 1
     Play#0 output Play#0 1 "land" 8 0 0 3
     Play#0 output Play#0 1 "flags" 8 8 0 44
     Play#0 output Play#0 1 "access" 6 0 0 -1
-    Play#0 output Play#0 1 "theta" 13 0 0 -1
+    Play#0 output Play#0 1 "theta" 12 0 0 -1
     Play#0 output Play#0 1 /21
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta land
     Play#0 output Play#0 1 "opy" 10 0 0 -1
     Play#0 output Play#0 1 "mission" 6 0 0 34
     Play#0 output Play#0 1 "radius" 6 0 0 -1
-    Play#0 output Play#0 1 "army" 14 0 1 -1
+    Play#0 output Play#0 1 "army" 13 0 1 -1
     Play#0 output Play#0 1 "ship" 8 0 0 1
     Play#0 output Play#0 1 "harden" 4 0 0 -1
     Play#0 output Play#0 1 "retreat" 6 0 0 -1
     Play#0 output Play#0 1 "rflags" 8 8 0 46
-    Play#0 output Play#0 1 "rpath" 14 0 10 -1
+    Play#0 output Play#0 1 "rpath" 13 0 10 -1
     Play#0 output Play#0 1 "civil" 6 0 0 -1
     Play#0 output Play#0 1 "milit" 6 0 0 -1
     Play#0 output Play#0 1 "shell" 6 0 0 -1
     Play#0 output Play#0 1 "opy" 10 0 0 -1
     Play#0 output Play#0 1 "mission" 6 0 0 34
     Play#0 output Play#0 1 "radius" 6 0 0 -1
-    Play#0 output Play#0 1 "stockpile" 14 0 1 -1
+    Play#0 output Play#0 1 "stockpile" 13 0 1 -1
     Play#0 output Play#0 1 "plane" 8 0 0 2
     Play#0 output Play#0 1 /15
     Play#0 output Play#0 6 0 640
     Play#0 output Play#0 1 "victim" 5 0 0 8
     Play#0 output Play#0 1 "times" 4 0 0 -1
     Play#0 output Play#0 1 "duration" 6 0 0 -1
-    Play#0 output Play#0 1 "time" 12 0 0 -1
+    Play#0 output Play#0 1 "time" 11 0 0 -1
     Play#0 output Play#0 1 /6
     Play#0 output Play#0 6 0 640
     Play#0 input __cmd added -1 0 0
     Play#0 output Play#0 1 "unitid" 8 0 0 -1
     Play#0 output Play#0 1 "price" 8 0 0 -1
     Play#0 output Play#0 1 "maxbidder" 8 0 0 8
-    Play#0 output Play#0 1 "markettime" 12 0 0 -1
+    Play#0 output Play#0 1 "markettime" 11 0 0 -1
     Play#0 output Play#0 1 "xloc" 9 1 0 -1
     Play#0 output Play#0 1 "yloc" 10 1 0 -1
     Play#0 output Play#0 1 /9
     Play#0 output Play#0 1 "cnum" 5 0 0 8
     Play#0 output Play#0 1 "stat" 8 0 0 38
     Play#0 output Play#0 1 "flags" 8 9 0 35
-    Play#0 output Play#0 1 "cname" 14 0 20 -1
-    Play#0 output Play#0 1 "passwd" 14 1 20 -1
-    Play#0 output Play#0 1 "ip" 14 1 46 -1
-    Play#0 output Play#0 1 "hostname" 14 1 0 -1
-    Play#0 output Play#0 1 "userid" 14 1 32 -1
+    Play#0 output Play#0 1 "cname" 13 0 20 -1
+    Play#0 output Play#0 1 "passwd" 13 1 20 -1
+    Play#0 output Play#0 1 "ip" 13 1 46 -1
+    Play#0 output Play#0 1 "hostname" 13 1 0 -1
+    Play#0 output Play#0 1 "userid" 13 1 32 -1
     Play#0 output Play#0 1 "xcap" 9 1 0 -1
     Play#0 output Play#0 1 "ycap" 10 1 0 -1
     Play#0 output Play#0 1 "xorg" 9 1 0 -1
     Play#0 output Play#0 1 "access" 6 1 0 -1
     Play#0 output Play#0 1 "milreserve" 8 1 0 -1
     Play#0 output Play#0 1 "money" 8 1 0 -1
-    Play#0 output Play#0 1 "login" 12 1 0 -1
-    Play#0 output Play#0 1 "logout" 12 1 0 -1
-    Play#0 output Play#0 1 "newstim" 12 1 0 -1
-    Play#0 output Play#0 1 "annotim" 12 1 0 -1
-    Play#0 output Play#0 1 "tech" 13 1 0 -1
-    Play#0 output Play#0 1 "research" 13 1 0 -1
-    Play#0 output Play#0 1 "education" 13 1 0 -1
-    Play#0 output Play#0 1 "happiness" 13 1 0 -1
-    Play#0 output Play#0 1 "relations" 11 0 99 37
+    Play#0 output Play#0 1 "login" 11 1 0 -1
+    Play#0 output Play#0 1 "logout" 11 1 0 -1
+    Play#0 output Play#0 1 "newstim" 11 1 0 -1
+    Play#0 output Play#0 1 "annotim" 11 1 0 -1
+    Play#0 output Play#0 1 "tech" 12 1 0 -1
+    Play#0 output Play#0 1 "research" 12 1 0 -1
+    Play#0 output Play#0 1 "education" 12 1 0 -1
+    Play#0 output Play#0 1 "happiness" 12 1 0 -1
+    Play#0 output Play#0 1 "relations" 5 16 99 37
     Play#0 output Play#0 1 "contacts" 5 1 99 -1
     Play#0 output Play#0 1 "rejects" 5 8 99 36
     Play#0 output Play#0 1 /31
     Play#0 output Play#0 1 "ldur" 8 0 0 -1
     Play#0 output Play#0 1 "amtpaid" 8 0 0 -1
     Play#0 output Play#0 1 "amtdue" 8 0 0 -1
-    Play#0 output Play#0 1 "lastpay" 12 0 0 -1
-    Play#0 output Play#0 1 "duedate" 12 0 0 -1
+    Play#0 output Play#0 1 "lastpay" 11 0 0 -1
+    Play#0 output Play#0 1 "duedate" 11 0 0 -1
     Play#0 output Play#0 1 /10
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta commodity
     Play#0 output Play#0 1 "owner" 5 0 0 8
     Play#0 output Play#0 1 "type" 4 0 0 16
     Play#0 output Play#0 1 "amount" 8 0 0 -1
-    Play#0 output Play#0 1 "price" 13 0 0 -1
+    Play#0 output Play#0 1 "price" 12 0 0 -1
     Play#0 output Play#0 1 "maxbidder" 8 0 0 8
-    Play#0 output Play#0 1 "markettime" 12 0 0 -1
+    Play#0 output Play#0 1 "markettime" 11 0 0 -1
     Play#0 output Play#0 1 "xbuy" 9 1 0 -1
     Play#0 output Play#0 1 "ybuy" 9 1 0 -1
     Play#0 output Play#0 1 "xsell" 9 1 0 -1
     Play#0 input xdump meta lost
     Play#0 command xdump
     Play#0 output Play#0 1 XDUMP meta lost 0
-    Play#0 output Play#0 1 "timestamp" 12 0 0 -1
+    Play#0 output Play#0 1 "timestamp" 11 0 0 -1
     Play#0 output Play#0 1 "owner" 5 0 0 8
     Play#0 output Play#0 1 "type" 6 0 0 26
     Play#0 output Play#0 1 "id" 8 0 0 -1
     Play#0 output Play#0 1 "down" 4 0 0 -1
     Play#0 output Play#0 1 "turn" 6 0 0 -1
     Play#0 output Play#0 1 "tick" 6 1 0 -1
-    Play#0 output Play#0 1 "rt" 12 1 0 -1
+    Play#0 output Play#0 1 "rt" 11 1 0 -1
     Play#0 output Play#0 1 /5
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta item
     Play#0 output Play#0 1 XDUMP meta item 0
     Play#0 output Play#0 1 "uid" 4 0 0 16
     Play#0 output Play#0 1 "name" 3 0 0 -1
-    Play#0 output Play#0 1 "mnem" 14 4 1 -1
+    Play#0 output Play#0 1 "mnem" 13 4 1 -1
     Play#0 output Play#0 1 "value" 8 0 0 -1
     Play#0 output Play#0 1 "sell" 8 0 0 -1
     Play#0 output Play#0 1 "lbs" 8 0 0 -1
     Play#0 output Play#0 1 XDUMP meta sect-chr 0
     Play#0 output Play#0 1 "uid" 5 0 0 18
     Play#0 output Play#0 1 "name" 3 0 0 -1
-    Play#0 output Play#0 1 "mnem" 14 4 1 -1
+    Play#0 output Play#0 1 "mnem" 13 4 1 -1
     Play#0 output Play#0 1 "terrain" 5 0 0 18
     Play#0 output Play#0 1 "prd" 8 0 0 17
     Play#0 output Play#0 1 "peffic" 8 0 0 -1
-    Play#0 output Play#0 1 "mob0" 13 0 0 -1
-    Play#0 output Play#0 1 "mob1" 13 0 0 -1
+    Play#0 output Play#0 1 "mob0" 12 0 0 -1
+    Play#0 output Play#0 1 "mob1" 12 0 0 -1
     Play#0 output Play#0 1 "nav" 8 0 0 47
     Play#0 output Play#0 1 "pkg" 8 0 0 40
-    Play#0 output Play#0 1 "ostr" 13 0 0 -1
-    Play#0 output Play#0 1 "dstr" 13 0 0 -1
+    Play#0 output Play#0 1 "ostr" 12 0 0 -1
+    Play#0 output Play#0 1 "dstr" 12 0 0 -1
     Play#0 output Play#0 1 "value" 8 0 0 -1
     Play#0 output Play#0 1 "cost" 8 0 0 -1
     Play#0 output Play#0 1 "build" 8 0 0 -1
     Play#0 output Play#0 1 "h_build" 8 0 0 -1
     Play#0 output Play#0 1 "tech" 8 0 0 -1
     Play#0 output Play#0 1 "cost" 8 0 0 -1
-    Play#0 output Play#0 1 "att" 13 0 0 -1
-    Play#0 output Play#0 1 "def" 13 0 0 -1
+    Play#0 output Play#0 1 "att" 12 0 0 -1
+    Play#0 output Play#0 1 "def" 12 0 0 -1
     Play#0 output Play#0 1 "vul" 8 0 0 -1
     Play#0 output Play#0 1 "spd" 8 0 0 -1
     Play#0 output Play#0 1 "vis" 8 0 0 -1
     Play#0 input xdump meta updates
     Play#0 command xdump
     Play#0 output Play#0 1 XDUMP meta updates 0
-    Play#0 output Play#0 1 "time" 12 0 0 -1
+    Play#0 output Play#0 1 "time" 11 0 0 -1
     Play#0 output Play#0 1 /1
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta table
     Play#0 input xdump meta version
     Play#0 command xdump
     Play#0 output Play#0 1 XDUMP meta version 0
-    Play#0 output Play#0 1 "version" 14 0 23 -1
+    Play#0 output Play#0 1 "version" 13 0 23 -1
     Play#0 output Play#0 1 "maxnoc" 1 0 0 -1
     Play#0 output Play#0 1 "privname" 3 0 0 -1
     Play#0 output Play#0 1 "privlog" 3 0 0 -1
     Play#0 output Play#0 1 "SAIL" 8 0 0 -1
     Play#0 output Play#0 1 "SUPER_BARS" 8 0 0 -1
     Play#0 output Play#0 1 "TECH_POP" 8 0 0 -1
-    Play#0 output Play#0 1 "btu_build_rate" 13 0 0 -1
+    Play#0 output Play#0 1 "btu_build_rate" 12 0 0 -1
     Play#0 output Play#0 1 "m_m_p_d" 8 0 0 -1
     Play#0 output Play#0 1 "max_btus" 8 0 0 -1
     Play#0 output Play#0 1 "max_idle" 8 0 0 -1
     Play#0 output Play#0 1 "max_idle_visitor" 8 0 0 -1
     Play#0 output Play#0 1 "login_grace_time" 8 0 0 -1
     Play#0 output Play#0 1 "players_at_00" 8 0 0 -1
-    Play#0 output Play#0 1 "easy_tech" 13 0 0 -1
-    Play#0 output Play#0 1 "level_age_rate" 13 0 0 -1
-    Play#0 output Play#0 1 "tech_log_base" 13 0 0 -1
-    Play#0 output Play#0 1 "ally_factor" 13 0 0 -1
-    Play#0 output Play#0 1 "edu_avg" 13 0 0 -1
-    Play#0 output Play#0 1 "hap_avg" 13 0 0 -1
+    Play#0 output Play#0 1 "easy_tech" 12 0 0 -1
+    Play#0 output Play#0 1 "level_age_rate" 12 0 0 -1
+    Play#0 output Play#0 1 "tech_log_base" 12 0 0 -1
+    Play#0 output Play#0 1 "ally_factor" 12 0 0 -1
+    Play#0 output Play#0 1 "edu_avg" 12 0 0 -1
+    Play#0 output Play#0 1 "hap_avg" 12 0 0 -1
     Play#0 output Play#0 1 "edu_cons" 2 0 0 -1
     Play#0 output Play#0 1 "hap_cons" 2 0 0 -1
-    Play#0 output Play#0 1 "sect_mob_scale" 13 0 0 -1
+    Play#0 output Play#0 1 "sect_mob_scale" 12 0 0 -1
     Play#0 output Play#0 1 "sect_mob_max" 8 0 0 -1
     Play#0 output Play#0 1 "buil_bh" 8 0 0 -1
     Play#0 output Play#0 1 "buil_bc" 2 0 0 -1
     Play#0 output Play#0 1 "buil_tower_bh" 8 0 0 -1
     Play#0 output Play#0 1 "buil_tower_bc" 2 0 0 -1
     Play#0 output Play#0 1 "buil_tower_bt" 2 0 0 -1
-    Play#0 output Play#0 1 "land_mob_scale" 13 0 0 -1
-    Play#0 output Play#0 1 "land_grow_scale" 13 0 0 -1
+    Play#0 output Play#0 1 "land_mob_scale" 12 0 0 -1
+    Play#0 output Play#0 1 "land_grow_scale" 12 0 0 -1
     Play#0 output Play#0 1 "land_mob_max" 8 0 0 -1
     Play#0 output Play#0 1 "money_land" 2 0 0 -1
-    Play#0 output Play#0 1 "plane_mob_scale" 13 0 0 -1
-    Play#0 output Play#0 1 "plane_grow_scale" 13 0 0 -1
+    Play#0 output Play#0 1 "plane_mob_scale" 12 0 0 -1
+    Play#0 output Play#0 1 "plane_grow_scale" 12 0 0 -1
     Play#0 output Play#0 1 "plane_mob_max" 8 0 0 -1
     Play#0 output Play#0 1 "money_plane" 2 0 0 -1
-    Play#0 output Play#0 1 "ship_mob_scale" 13 0 0 -1
-    Play#0 output Play#0 1 "ship_grow_scale" 13 0 0 -1
+    Play#0 output Play#0 1 "ship_mob_scale" 12 0 0 -1
+    Play#0 output Play#0 1 "ship_grow_scale" 12 0 0 -1
     Play#0 output Play#0 1 "ship_mob_max" 8 0 0 -1
     Play#0 output Play#0 1 "money_ship" 2 0 0 -1
     Play#0 output Play#0 1 "torpedo_damage" 8 0 0 -1
     Play#0 output Play#0 1 "fort_max_interdiction_range" 8 0 0 -1
     Play#0 output Play#0 1 "land_max_interdiction_range" 8 0 0 -1
     Play#0 output Play#0 1 "ship_max_interdiction_range" 8 0 0 -1
-    Play#0 output Play#0 1 "flakscale" 13 0 0 -1
+    Play#0 output Play#0 1 "flakscale" 12 0 0 -1
     Play#0 output Play#0 1 "combat_mob" 2 0 0 -1
     Play#0 output Play#0 1 "people_damage" 2 0 0 -1
     Play#0 output Play#0 1 "unit_damage" 2 0 0 -1
     Play#0 output Play#0 1 "collateral_dam" 2 0 0 -1
     Play#0 output Play#0 1 "assault_penalty" 2 0 0 -1
-    Play#0 output Play#0 1 "fire_range_factor" 13 0 0 -1
+    Play#0 output Play#0 1 "fire_range_factor" 12 0 0 -1
     Play#0 output Play#0 1 "sect_mob_neg_factor" 8 0 0 -1
     Play#0 output Play#0 1 "uwbrate" 2 0 0 -1
     Play#0 output Play#0 1 "money_civ" 2 0 0 -1
     Play#0 output Play#0 1 "rollover_avail_max" 8 0 0 -1
     Play#0 output Play#0 1 "decay_per_etu" 2 0 0 -1
     Play#0 output Play#0 1 "fallout_spread" 2 0 0 -1
-    Play#0 output Play#0 1 "drnuke_const" 13 0 0 -1
+    Play#0 output Play#0 1 "drnuke_const" 12 0 0 -1
     Play#0 output Play#0 1 "MARK_DELAY" 8 0 0 -1
     Play#0 output Play#0 1 "TRADE_DELAY" 8 0 0 -1
     Play#0 output Play#0 1 "buytax" 2 0 0 -1
     Play#0 output Play#0 1 "trade_1_dist" 8 0 0 -1
     Play#0 output Play#0 1 "trade_2_dist" 8 0 0 -1
     Play#0 output Play#0 1 "trade_3_dist" 8 0 0 -1
-    Play#0 output Play#0 1 "trade_1" 13 0 0 -1
-    Play#0 output Play#0 1 "trade_2" 13 0 0 -1
-    Play#0 output Play#0 1 "trade_3" 13 0 0 -1
-    Play#0 output Play#0 1 "trade_ally_bonus" 13 0 0 -1
-    Play#0 output Play#0 1 "trade_ally_cut" 13 0 0 -1
+    Play#0 output Play#0 1 "trade_1" 12 0 0 -1
+    Play#0 output Play#0 1 "trade_2" 12 0 0 -1
+    Play#0 output Play#0 1 "trade_3" 12 0 0 -1
+    Play#0 output Play#0 1 "trade_ally_bonus" 12 0 0 -1
+    Play#0 output Play#0 1 "trade_ally_cut" 12 0 0 -1
     Play#0 output Play#0 1 /111
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta meta
     Play#0 output Play#0 1 XDUMP meta country 0
     Play#0 output Play#0 1 "cnum" 5 0 0 8
     Play#0 output Play#0 1 "flags" 8 8 0 35
-    Play#0 output Play#0 1 "ip" 14 0 46 -1
-    Play#0 output Play#0 1 "hostname" 14 0 0 -1
-    Play#0 output Play#0 1 "userid" 14 0 32 -1
+    Play#0 output Play#0 1 "ip" 13 0 46 -1
+    Play#0 output Play#0 1 "hostname" 13 0 0 -1
+    Play#0 output Play#0 1 "userid" 13 0 32 -1
     Play#0 output Play#0 1 "xcap" 9 0 0 -1
     Play#0 output Play#0 1 "ycap" 10 0 0 -1
     Play#0 output Play#0 1 "update" 4 0 0 -1
     Play#0 output Play#0 1 "access" 6 0 0 -1
     Play#0 output Play#0 1 "milreserve" 8 0 0 -1
     Play#0 output Play#0 1 "money" 8 0 0 -1
-    Play#0 output Play#0 1 "login" 12 0 0 -1
-    Play#0 output Play#0 1 "logout" 12 0 0 -1
-    Play#0 output Play#0 1 "newstim" 12 0 0 -1
-    Play#0 output Play#0 1 "annotim" 12 0 0 -1
-    Play#0 output Play#0 1 "tech" 13 0 0 -1
-    Play#0 output Play#0 1 "research" 13 0 0 -1
-    Play#0 output Play#0 1 "education" 13 0 0 -1
-    Play#0 output Play#0 1 "happiness" 13 0 0 -1
+    Play#0 output Play#0 1 "login" 11 0 0 -1
+    Play#0 output Play#0 1 "logout" 11 0 0 -1
+    Play#0 output Play#0 1 "newstim" 11 0 0 -1
+    Play#0 output Play#0 1 "annotim" 11 0 0 -1
+    Play#0 output Play#0 1 "tech" 12 0 0 -1
+    Play#0 output Play#0 1 "research" 12 0 0 -1
+    Play#0 output Play#0 1 "education" 12 0 0 -1
+    Play#0 output Play#0 1 "happiness" 12 0 0 -1
     Play#0 output Play#0 1 /23
     Play#0 output Play#0 6 0 640
     Play#0 input ctld
     Play#2 output Play#2 1 "opy" 10 0 0 -1
     Play#2 output Play#2 1 "mission" 6 0 0 34
     Play#2 output Play#2 1 "radius" 6 0 0 -1
-    Play#2 output Play#2 1 "fleet" 14 0 1 -1
+    Play#2 output Play#2 1 "fleet" 13 0 1 -1
     Play#2 output Play#2 1 "xstart" 9 0 0 -1
     Play#2 output Play#2 1 "xend" 9 0 0 -1
     Play#2 output Play#2 1 "ystart" 10 0 0 -1
     Play#2 output Play#2 1 "rad" 6 0 0 -1
     Play#2 output Play#2 1 "access" 6 0 0 -1
     Play#2 output Play#2 1 "mquota" 5 0 0 -1
-    Play#2 output Play#2 1 "path" 14 0 28 -1
+    Play#2 output Play#2 1 "path" 13 0 28 -1
     Play#2 output Play#2 1 "follow" 8 0 0 -1
-    Play#2 output Play#2 1 "name" 14 0 24 -1
+    Play#2 output Play#2 1 "name" 13 0 24 -1
     Play#2 output Play#2 1 "rflags" 8 8 0 46
-    Play#2 output Play#2 1 "rpath" 14 0 10 -1
+    Play#2 output Play#2 1 "rpath" 13 0 10 -1
     Play#2 output Play#2 1 /44
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta plane
     Play#2 output Play#2 1 "opy" 10 0 0 -1
     Play#2 output Play#2 1 "mission" 6 0 0 34
     Play#2 output Play#2 1 "radius" 6 0 0 -1
-    Play#2 output Play#2 1 "wing" 14 0 1 -1
+    Play#2 output Play#2 1 "wing" 13 0 1 -1
     Play#2 output Play#2 1 "range" 5 0 0 -1
     Play#2 output Play#2 1 "harden" 4 0 0 -1
     Play#2 output Play#2 1 "ship" 8 0 0 1
     Play#2 output Play#2 1 "land" 8 0 0 3
     Play#2 output Play#2 1 "flags" 8 8 0 44
     Play#2 output Play#2 1 "access" 6 0 0 -1
-    Play#2 output Play#2 1 "theta" 13 0 0 -1
+    Play#2 output Play#2 1 "theta" 12 0 0 -1
     Play#2 output Play#2 1 /21
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta land
     Play#2 output Play#2 1 "opy" 10 0 0 -1
     Play#2 output Play#2 1 "mission" 6 0 0 34
     Play#2 output Play#2 1 "radius" 6 0 0 -1
-    Play#2 output Play#2 1 "army" 14 0 1 -1
+    Play#2 output Play#2 1 "army" 13 0 1 -1
     Play#2 output Play#2 1 "ship" 8 0 0 1
     Play#2 output Play#2 1 "harden" 4 0 0 -1
     Play#2 output Play#2 1 "retreat" 6 0 0 -1
     Play#2 output Play#2 1 "rflags" 8 8 0 46
-    Play#2 output Play#2 1 "rpath" 14 0 10 -1
+    Play#2 output Play#2 1 "rpath" 13 0 10 -1
     Play#2 output Play#2 1 "civil" 6 0 0 -1
     Play#2 output Play#2 1 "milit" 6 0 0 -1
     Play#2 output Play#2 1 "shell" 6 0 0 -1
     Play#2 output Play#2 1 "opy" 10 0 0 -1
     Play#2 output Play#2 1 "mission" 6 0 0 34
     Play#2 output Play#2 1 "radius" 6 0 0 -1
-    Play#2 output Play#2 1 "stockpile" 14 0 1 -1
+    Play#2 output Play#2 1 "stockpile" 13 0 1 -1
     Play#2 output Play#2 1 "plane" 8 0 0 2
     Play#2 output Play#2 1 /15
     Play#2 output Play#2 6 0 636
     Play#2 output Play#2 1 "victim" 5 0 0 8
     Play#2 output Play#2 1 "times" 4 0 0 -1
     Play#2 output Play#2 1 "duration" 6 0 0 -1
-    Play#2 output Play#2 1 "time" 12 0 0 -1
+    Play#2 output Play#2 1 "time" 11 0 0 -1
     Play#2 output Play#2 1 /6
     Play#2 output Play#2 6 0 636
     Play#2 input __cmd added -1 0 0
     Play#2 output Play#2 1 "unitid" 8 0 0 -1
     Play#2 output Play#2 1 "price" 8 0 0 -1
     Play#2 output Play#2 1 "maxbidder" 8 0 0 8
-    Play#2 output Play#2 1 "markettime" 12 0 0 -1
+    Play#2 output Play#2 1 "markettime" 11 0 0 -1
     Play#2 output Play#2 1 /7
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta nat
     Play#2 output Play#2 1 XDUMP meta nat 0
     Play#2 output Play#2 1 "cnum" 5 0 0 8
     Play#2 output Play#2 1 "stat" 8 0 0 38
-    Play#2 output Play#2 1 "cname" 14 0 20 -1
-    Play#2 output Play#2 1 "relations" 11 0 99 37
+    Play#2 output Play#2 1 "cname" 13 0 20 -1
+    Play#2 output Play#2 1 "relations" 5 16 99 37
     Play#2 output Play#2 1 "rejects" 5 8 99 36
     Play#2 output Play#2 1 /5
     Play#2 output Play#2 6 0 636
     Play#2 output Play#2 1 "ldur" 8 0 0 -1
     Play#2 output Play#2 1 "amtpaid" 8 0 0 -1
     Play#2 output Play#2 1 "amtdue" 8 0 0 -1
-    Play#2 output Play#2 1 "lastpay" 12 0 0 -1
-    Play#2 output Play#2 1 "duedate" 12 0 0 -1
+    Play#2 output Play#2 1 "lastpay" 11 0 0 -1
+    Play#2 output Play#2 1 "duedate" 11 0 0 -1
     Play#2 output Play#2 1 /10
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta commodity
     Play#2 output Play#2 1 "owner" 5 0 0 8
     Play#2 output Play#2 1 "type" 4 0 0 16
     Play#2 output Play#2 1 "amount" 8 0 0 -1
-    Play#2 output Play#2 1 "price" 13 0 0 -1
+    Play#2 output Play#2 1 "price" 12 0 0 -1
     Play#2 output Play#2 1 "maxbidder" 8 0 0 8
-    Play#2 output Play#2 1 "markettime" 12 0 0 -1
+    Play#2 output Play#2 1 "markettime" 11 0 0 -1
     Play#2 output Play#2 1 /7
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta lost
     Play#2 command xdump
     Play#2 output Play#2 1 XDUMP meta lost 0
-    Play#2 output Play#2 1 "timestamp" 12 0 0 -1
+    Play#2 output Play#2 1 "timestamp" 11 0 0 -1
     Play#2 output Play#2 1 "owner" 5 0 0 8
     Play#2 output Play#2 1 "type" 6 0 0 26
     Play#2 output Play#2 1 "id" 8 0 0 -1
     Play#2 output Play#2 1 XDUMP meta item 0
     Play#2 output Play#2 1 "uid" 4 0 0 16
     Play#2 output Play#2 1 "name" 3 0 0 -1
-    Play#2 output Play#2 1 "mnem" 14 4 1 -1
+    Play#2 output Play#2 1 "mnem" 13 4 1 -1
     Play#2 output Play#2 1 "value" 8 0 0 -1
     Play#2 output Play#2 1 "sell" 8 0 0 -1
     Play#2 output Play#2 1 "lbs" 8 0 0 -1
     Play#2 output Play#2 1 XDUMP meta sect-chr 0
     Play#2 output Play#2 1 "uid" 5 0 0 18
     Play#2 output Play#2 1 "name" 3 0 0 -1
-    Play#2 output Play#2 1 "mnem" 14 4 1 -1
+    Play#2 output Play#2 1 "mnem" 13 4 1 -1
     Play#2 output Play#2 1 "terrain" 5 0 0 18
     Play#2 output Play#2 1 "prd" 8 0 0 17
     Play#2 output Play#2 1 "peffic" 8 0 0 -1
-    Play#2 output Play#2 1 "mob0" 13 0 0 -1
-    Play#2 output Play#2 1 "mob1" 13 0 0 -1
+    Play#2 output Play#2 1 "mob0" 12 0 0 -1
+    Play#2 output Play#2 1 "mob1" 12 0 0 -1
     Play#2 output Play#2 1 "nav" 8 0 0 47
     Play#2 output Play#2 1 "pkg" 8 0 0 40
-    Play#2 output Play#2 1 "ostr" 13 0 0 -1
-    Play#2 output Play#2 1 "dstr" 13 0 0 -1
+    Play#2 output Play#2 1 "ostr" 12 0 0 -1
+    Play#2 output Play#2 1 "dstr" 12 0 0 -1
     Play#2 output Play#2 1 "value" 8 0 0 -1
     Play#2 output Play#2 1 "cost" 8 0 0 -1
     Play#2 output Play#2 1 "build" 8 0 0 -1
     Play#2 output Play#2 1 "h_build" 8 0 0 -1
     Play#2 output Play#2 1 "tech" 8 0 0 -1
     Play#2 output Play#2 1 "cost" 8 0 0 -1
-    Play#2 output Play#2 1 "att" 13 0 0 -1
-    Play#2 output Play#2 1 "def" 13 0 0 -1
+    Play#2 output Play#2 1 "att" 12 0 0 -1
+    Play#2 output Play#2 1 "def" 12 0 0 -1
     Play#2 output Play#2 1 "vul" 8 0 0 -1
     Play#2 output Play#2 1 "spd" 8 0 0 -1
     Play#2 output Play#2 1 "vis" 8 0 0 -1
     Play#2 input xdump meta updates
     Play#2 command xdump
     Play#2 output Play#2 1 XDUMP meta updates 0
-    Play#2 output Play#2 1 "time" 12 0 0 -1
+    Play#2 output Play#2 1 "time" 11 0 0 -1
     Play#2 output Play#2 1 /1
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta table
     Play#2 input xdump meta version
     Play#2 command xdump
     Play#2 output Play#2 1 XDUMP meta version 0
-    Play#2 output Play#2 1 "version" 14 0 23 -1
+    Play#2 output Play#2 1 "version" 13 0 23 -1
     Play#2 output Play#2 1 "maxnoc" 1 0 0 -1
     Play#2 output Play#2 1 "privname" 3 0 0 -1
     Play#2 output Play#2 1 "privlog" 3 0 0 -1
     Play#2 output Play#2 1 "SAIL" 8 0 0 -1
     Play#2 output Play#2 1 "SUPER_BARS" 8 0 0 -1
     Play#2 output Play#2 1 "TECH_POP" 8 0 0 -1
-    Play#2 output Play#2 1 "btu_build_rate" 13 0 0 -1
+    Play#2 output Play#2 1 "btu_build_rate" 12 0 0 -1
     Play#2 output Play#2 1 "m_m_p_d" 8 0 0 -1
     Play#2 output Play#2 1 "max_btus" 8 0 0 -1
     Play#2 output Play#2 1 "max_idle" 8 0 0 -1
     Play#2 output Play#2 1 "max_idle_visitor" 8 0 0 -1
     Play#2 output Play#2 1 "login_grace_time" 8 0 0 -1
     Play#2 output Play#2 1 "players_at_00" 8 0 0 -1
-    Play#2 output Play#2 1 "easy_tech" 13 0 0 -1
-    Play#2 output Play#2 1 "level_age_rate" 13 0 0 -1
-    Play#2 output Play#2 1 "tech_log_base" 13 0 0 -1
-    Play#2 output Play#2 1 "ally_factor" 13 0 0 -1
-    Play#2 output Play#2 1 "edu_avg" 13 0 0 -1
-    Play#2 output Play#2 1 "hap_avg" 13 0 0 -1
+    Play#2 output Play#2 1 "easy_tech" 12 0 0 -1
+    Play#2 output Play#2 1 "level_age_rate" 12 0 0 -1
+    Play#2 output Play#2 1 "tech_log_base" 12 0 0 -1
+    Play#2 output Play#2 1 "ally_factor" 12 0 0 -1
+    Play#2 output Play#2 1 "edu_avg" 12 0 0 -1
+    Play#2 output Play#2 1 "hap_avg" 12 0 0 -1
     Play#2 output Play#2 1 "edu_cons" 2 0 0 -1
     Play#2 output Play#2 1 "hap_cons" 2 0 0 -1
-    Play#2 output Play#2 1 "sect_mob_scale" 13 0 0 -1
+    Play#2 output Play#2 1 "sect_mob_scale" 12 0 0 -1
     Play#2 output Play#2 1 "sect_mob_max" 8 0 0 -1
     Play#2 output Play#2 1 "buil_bh" 8 0 0 -1
     Play#2 output Play#2 1 "buil_bc" 2 0 0 -1
     Play#2 output Play#2 1 "buil_tower_bh" 8 0 0 -1
     Play#2 output Play#2 1 "buil_tower_bc" 2 0 0 -1
     Play#2 output Play#2 1 "buil_tower_bt" 2 0 0 -1
-    Play#2 output Play#2 1 "land_mob_scale" 13 0 0 -1
-    Play#2 output Play#2 1 "land_grow_scale" 13 0 0 -1
+    Play#2 output Play#2 1 "land_mob_scale" 12 0 0 -1
+    Play#2 output Play#2 1 "land_grow_scale" 12 0 0 -1
     Play#2 output Play#2 1 "land_mob_max" 8 0 0 -1
     Play#2 output Play#2 1 "money_land" 2 0 0 -1
-    Play#2 output Play#2 1 "plane_mob_scale" 13 0 0 -1
-    Play#2 output Play#2 1 "plane_grow_scale" 13 0 0 -1
+    Play#2 output Play#2 1 "plane_mob_scale" 12 0 0 -1
+    Play#2 output Play#2 1 "plane_grow_scale" 12 0 0 -1
     Play#2 output Play#2 1 "plane_mob_max" 8 0 0 -1
     Play#2 output Play#2 1 "money_plane" 2 0 0 -1
-    Play#2 output Play#2 1 "ship_mob_scale" 13 0 0 -1
-    Play#2 output Play#2 1 "ship_grow_scale" 13 0 0 -1
+    Play#2 output Play#2 1 "ship_mob_scale" 12 0 0 -1
+    Play#2 output Play#2 1 "ship_grow_scale" 12 0 0 -1
     Play#2 output Play#2 1 "ship_mob_max" 8 0 0 -1
     Play#2 output Play#2 1 "money_ship" 2 0 0 -1
     Play#2 output Play#2 1 "torpedo_damage" 8 0 0 -1
     Play#2 output Play#2 1 "fort_max_interdiction_range" 8 0 0 -1
     Play#2 output Play#2 1 "land_max_interdiction_range" 8 0 0 -1
     Play#2 output Play#2 1 "ship_max_interdiction_range" 8 0 0 -1
-    Play#2 output Play#2 1 "flakscale" 13 0 0 -1
+    Play#2 output Play#2 1 "flakscale" 12 0 0 -1
     Play#2 output Play#2 1 "combat_mob" 2 0 0 -1
     Play#2 output Play#2 1 "people_damage" 2 0 0 -1
     Play#2 output Play#2 1 "unit_damage" 2 0 0 -1
     Play#2 output Play#2 1 "collateral_dam" 2 0 0 -1
     Play#2 output Play#2 1 "assault_penalty" 2 0 0 -1
-    Play#2 output Play#2 1 "fire_range_factor" 13 0 0 -1
+    Play#2 output Play#2 1 "fire_range_factor" 12 0 0 -1
     Play#2 output Play#2 1 "sect_mob_neg_factor" 8 0 0 -1
     Play#2 output Play#2 1 "uwbrate" 2 0 0 -1
     Play#2 output Play#2 1 "money_civ" 2 0 0 -1
     Play#2 output Play#2 1 "rollover_avail_max" 8 0 0 -1
     Play#2 output Play#2 1 "decay_per_etu" 2 0 0 -1
     Play#2 output Play#2 1 "fallout_spread" 2 0 0 -1
-    Play#2 output Play#2 1 "drnuke_const" 13 0 0 -1
+    Play#2 output Play#2 1 "drnuke_const" 12 0 0 -1
     Play#2 output Play#2 1 "MARK_DELAY" 8 0 0 -1
     Play#2 output Play#2 1 "TRADE_DELAY" 8 0 0 -1
     Play#2 output Play#2 1 "buytax" 2 0 0 -1
     Play#2 output Play#2 1 "trade_1_dist" 8 0 0 -1
     Play#2 output Play#2 1 "trade_2_dist" 8 0 0 -1
     Play#2 output Play#2 1 "trade_3_dist" 8 0 0 -1
-    Play#2 output Play#2 1 "trade_1" 13 0 0 -1
-    Play#2 output Play#2 1 "trade_2" 13 0 0 -1
-    Play#2 output Play#2 1 "trade_3" 13 0 0 -1
-    Play#2 output Play#2 1 "trade_ally_bonus" 13 0 0 -1
-    Play#2 output Play#2 1 "trade_ally_cut" 13 0 0 -1
+    Play#2 output Play#2 1 "trade_1" 12 0 0 -1
+    Play#2 output Play#2 1 "trade_2" 12 0 0 -1
+    Play#2 output Play#2 1 "trade_3" 12 0 0 -1
+    Play#2 output Play#2 1 "trade_ally_bonus" 12 0 0 -1
+    Play#2 output Play#2 1 "trade_ally_cut" 12 0 0 -1
     Play#2 output Play#2 1 /111
     Play#2 output Play#2 6 0 636
     Play#2 input xdump meta meta
     Play#2 output Play#2 1 XDUMP meta country 0
     Play#2 output Play#2 1 "cnum" 5 0 0 8
     Play#2 output Play#2 1 "flags" 8 8 0 35
-    Play#2 output Play#2 1 "ip" 14 0 46 -1
-    Play#2 output Play#2 1 "hostname" 14 0 0 -1
-    Play#2 output Play#2 1 "userid" 14 0 32 -1
+    Play#2 output Play#2 1 "ip" 13 0 46 -1
+    Play#2 output Play#2 1 "hostname" 13 0 0 -1
+    Play#2 output Play#2 1 "userid" 13 0 32 -1
     Play#2 output Play#2 1 "xcap" 9 0 0 -1
     Play#2 output Play#2 1 "ycap" 10 0 0 -1
     Play#2 output Play#2 1 "update" 4 0 0 -1
     Play#2 output Play#2 1 "access" 6 0 0 -1
     Play#2 output Play#2 1 "milreserve" 8 0 0 -1
     Play#2 output Play#2 1 "money" 8 0 0 -1
-    Play#2 output Play#2 1 "login" 12 0 0 -1
-    Play#2 output Play#2 1 "logout" 12 0 0 -1
-    Play#2 output Play#2 1 "newstim" 12 0 0 -1
-    Play#2 output Play#2 1 "annotim" 12 0 0 -1
-    Play#2 output Play#2 1 "tech" 13 0 0 -1
-    Play#2 output Play#2 1 "research" 13 0 0 -1
-    Play#2 output Play#2 1 "education" 13 0 0 -1
-    Play#2 output Play#2 1 "happiness" 13 0 0 -1
+    Play#2 output Play#2 1 "login" 11 0 0 -1
+    Play#2 output Play#2 1 "logout" 11 0 0 -1
+    Play#2 output Play#2 1 "newstim" 11 0 0 -1
+    Play#2 output Play#2 1 "annotim" 11 0 0 -1
+    Play#2 output Play#2 1 "tech" 12 0 0 -1
+    Play#2 output Play#2 1 "research" 12 0 0 -1
+    Play#2 output Play#2 1 "education" 12 0 0 -1
+    Play#2 output Play#2 1 "happiness" 12 0 0 -1
     Play#2 output Play#2 1 /23
     Play#2 output Play#2 6 0 636
     Play#2 input ctld
     Play#0 output Play#0 1 2 "extra"
     Play#0 output Play#0 1 4 "const"
     Play#0 output Play#0 1 8 "bits"
-    Play#0 output Play#0 1 /4
+    Play#0 output Play#0 1 16 "hidden"
+    Play#0 output Play#0 1 /5
     Play#0 output Play#0 6 0 640
     Play#0 input xdump meta-type *
     Play#0 command xdump
     Play#0 output Play#0 1 9 "d"
     Play#0 output Play#0 1 10 "d"
     Play#0 output Play#0 1 11 "d"
-    Play#0 output Play#0 1 12 "d"
-    Play#0 output Play#0 1 13 "g"
-    Play#0 output Play#0 1 14 "c"
-    Play#0 output Play#0 1 /14
+    Play#0 output Play#0 1 12 "g"
+    Play#0 output Play#0 1 13 "c"
+    Play#0 output Play#0 1 /13
     Play#0 output Play#0 6 0 640
     Play#0 input xdump missions *
     Play#0 command xdump
     Play#1 output Play#1 1 2 "extra"
     Play#1 output Play#1 1 4 "const"
     Play#1 output Play#1 1 8 "bits"
-    Play#1 output Play#1 1 /4
+    Play#1 output Play#1 1 16 "hidden"
+    Play#1 output Play#1 1 /5
     Play#1 output Play#1 6 0 640
     Play#1 input xdump meta-type *
     Play#1 command xdump
     Play#1 output Play#1 1 9 "d"
     Play#1 output Play#1 1 10 "d"
     Play#1 output Play#1 1 11 "d"
-    Play#1 output Play#1 1 12 "d"
-    Play#1 output Play#1 1 13 "g"
-    Play#1 output Play#1 1 14 "c"
-    Play#1 output Play#1 1 /14
+    Play#1 output Play#1 1 12 "g"
+    Play#1 output Play#1 1 13 "c"
+    Play#1 output Play#1 1 /13
     Play#1 output Play#1 6 0 640
     Play#1 input xdump missions *
     Play#1 command xdump