]> git.pond.sub.org Git - empserver/commitdiff
retreat lretreat: Be less loquacious when changing orders
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 10 Jan 2015 09:23:48 +0000 (10:23 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Mon, 2 Mar 2015 07:20:49 +0000 (08:20 +0100)
Instead of listing all the ships or land units ordered, just print how
many got ordered, and describe the order, like this:

    [0:640] Command : retr 2/3 bg itb
    2 ships ordered to retreat along path bg when injured, torpedoed, bombed
    [0:640] Command : retr 2 h
    1 ship ordered not to retreat

fleetadd doesn't list the ships it reassigns, either.  On the other
hand, stop lists the sectors it stops.  Perhaps it should be gagged,
too.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
src/lib/commands/retr.c
tests/retreat/journal.log

index 2504da5055a04d17ce928d102cae56748583bb3e..02acb4a41b89ab12edb6d22df06aea2a08fe1b2c 100644 (file)
@@ -29,7 +29,7 @@
  *  Known contributors to this file:
  *     Ken Stevens, 1995
  *     Steve McClure, 2000
- *     Markus Armbruster, 2008-2014
+ *     Markus Armbruster, 2008-2015
  */
 
 #include <config.h>
@@ -51,6 +51,7 @@ static char shp_rflagsc[] = "Xitshbdu";
 static char lnd_rflagsc[] = "XiXXhbXX";
 
 static int retreat(int);
+static int retreat_show(int, struct nstr_item *);
 
 int
 retr(void)
@@ -72,8 +73,7 @@ retreat(int type)
     struct nstr_item ni;
     union empobj_storage unit;
     int i, rflags, ch, j;
-    char *rflagsc, *p, *name, *rpath, *what;
-    int *rflagsp;
+    char *rflagsc, *p;
     char buf1[1024];
     char buf2[1024];
 
@@ -83,7 +83,6 @@ retreat(int type)
 
     if (!snxtitem(&ni, type, player->argp[1], NULL))
        return RET_SYN;
-    nunits = 0;
 
     if (player->argp[1] && !player->argp[2]) {
        pr("Omitting the second argument is deprecated and will cease to work in a\n"
@@ -101,21 +100,21 @@ retreat(int type)
            return RET_SYN;
     }
 
-    rflags = 0;
-    if (*pq == 'q') {
-       pq = NULL;
-    } else {
-       for (i = 0; i < RET_LEN - 1 && pq[i]; i++) {
-           if (chkdir(pq[i], DIR_STOP, DIR_LAST) < 0) {
-               pr("'%c' is not a valid direction...\n", pq[i]);
-               direrr(NULL, NULL, NULL);
-               return RET_SYN;
-           }
+    if (*pq == 'q')
+       return retreat_show(type, &ni);
+
+    for (i = 0; i < RET_LEN - 1 && pq[i]; i++) {
+       if (chkdir(pq[i], DIR_STOP, DIR_LAST) < 0) {
+           pr("'%c' is not a valid direction...\n", pq[i]);
+           direrr(NULL, NULL, NULL);
+           return RET_SYN;
        }
-       for (i--; i >= 0 && pq[i] == dirch[DIR_STOP]; i--)
-           pq[i] = 0;
     }
-    if (pq && *pq) {
+    for (i--; i >= 0 && pq[i] == dirch[DIR_STOP]; i--)
+       pq[i] = 0;
+
+    rflags = 0;
+    if (*pq) {
     again:
        fl = getstarg(player->argp[3],
                      "Retreat conditions ('?' to list available ones)? ",
@@ -154,7 +153,43 @@ retreat(int type)
            rflags = 0;
     }
 
+    nunits = 0;
     while (nxtitem(&ni, &unit)) {
+       if (!player->owner || unit.gen.own == 0)
+           continue;
+       if (type == EF_SHIP) {
+           strncpy(unit.ship.shp_rpath, pq, RET_LEN - 1);
+           unit.ship.shp_rflags = rflags;
+       } else {
+           strncpy(unit.land.lnd_rpath, pq, RET_LEN - 1);
+           unit.land.lnd_rflags = rflags;
+       }
+       put_empobj(type, unit.gen.uid, &unit);
+       nunits++;
+    }
+    if (rflags) {
+       symbol_set_fmt(buf2, sizeof(buf2), rflags & ~RET_GROUP,
+                      retreat_flags, ", ", 0);
+       pr("%d %s%s ordered to retreat%s along path %s when %s\n",
+          nunits, ef_nameof_pretty(type), splur(nunits),
+          rflags & RET_GROUP ? " as group" : "", pq, buf2);
+    } else
+       pr("%d %s%s ordered not to retreat\n",
+          nunits, ef_nameof_pretty(type), splur(nunits));
+    return RET_OK;
+}
+
+static int
+retreat_show(int type, struct nstr_item *np)
+{
+    char *rflagsc = type == EF_SHIP ? shp_rflagsc : lnd_rflagsc;
+    union empobj_storage unit;
+    int nunits;
+    char *name, *rpath, *what;
+    int *rflagsp, rflags, i;
+
+    nunits = 0;
+    while (nxtitem(np, &unit)) {
        if (!player->owner || unit.gen.own == 0)
            continue;
        if (type == EF_SHIP) {
@@ -176,14 +211,9 @@ retreat(int type)
            rpath = unit.land.lnd_rpath;
            rflagsp = &unit.land.lnd_rflags;
        }
-       if (pq) {
-           strncpy(rpath, pq, RET_LEN - 1);
-           *rflagsp = rflags;
-           put_empobj(type, unit.gen.uid, &unit);
-       }
        if (player->god)
            pr("%3d ", unit.gen.own);
-       pr("%4d ", ni.cur);
+       pr("%4d ", np->cur);
        pr("%-16.16s ", name);
        prxy("%4d,%-4d ", unit.gen.x, unit.gen.y);
        pr("%1.1s", &unit.gen.group);
@@ -193,11 +223,11 @@ retreat(int type)
            pr("Yes      ");
        else
            pr("         ");
-       for (j = 1; rflagsc[j]; j++) {
-           if ((1 << j) & rflags) {
-               if (CANT_HAPPEN(rflagsc[j] == 'X'))
+       for (i = 1; rflagsc[i]; i++) {
+           if ((1 << i) & rflags) {
+               if (CANT_HAPPEN(rflagsc[i] == 'X'))
                    continue;
-               pr("%c", rflagsc[j]);
+               pr("%c", rflagsc[i]);
            }
        }
        pr("\n");
index 99d522c99064dac7750c0fa2d81dbf9327690079..46abb1c3ddfc46e0a2ca97d87f18d0f76b6ed52d 100644 (file)
     Play#1 output Play#1 6 0 639
     Play#1 input retr 2/3 bgyujnbgyujnbgyujn itshbdu
     Play#1 command retreat
-    Play#1 output Play#1 1 shp#     ship type       x,y   fl path       as flt?  flags
-    Play#1 output Play#1 1    2 lc   light cruis   -3,1      bgyujnbgy           itshbdu
-    Play#1 output Play#1 1    3 lc   light cruis   -3,1    a bgyujnbgy           itshbdu
-    Play#1 output Play#1 1 2 ships
+    Play#1 output Play#1 1 2 ships ordered to retreat along path bgyujnbgyujnbgyujn when injured, torpedoed, sonared, helpless, bombed, depth-charged, boarded
     Play#1 output Play#1 6 0 638
     Play#1 input retr 3 h
     Play#1 command retreat
-    Play#1 output Play#1 1 shp#     ship type       x,y   fl path       as flt?  flags
-    Play#1 output Play#1 1    3 lc   light cruis   -3,1    a
-    Play#1 output Play#1 1 1 ship
+    Play#1 output Play#1 1 1 ship ordered not to retreat
     Play#1 output Play#1 6 0 637
     Play#1 input retr a ?uid=4 b h
     Play#1 command retreat
-    Play#1 output Play#1 1 shp#     ship type       x,y   fl path       as flt?  flags
-    Play#1 output Play#1 1    4 lc   light cruis   -5,1    a b          Yes      h
-    Play#1 output Play#1 1 1 ship
+    Play#1 output Play#1 1 1 ship ordered to retreat as group along path b when helpless
     Play#1 output Play#1 6 0 636
     Play#1 input fleet a 7
     Play#1 command fleetadd
     Play#1 output Play#1 6 0 634
     Play#1 input lret 2/3 yujnbgyujnbgyujnbg ihb
     Play#1 command lretreat
-    Play#1 output Play#1 1 lnd#     unit type       x,y   ar path       as army? flags
-    Play#1 output Play#1 1    2 inf  infantry      -3,1      yujnbgyuj           ihb
-    Play#1 output Play#1 1    3 inf  infantry      -3,1    a yujnbgyuj           ihb
-    Play#1 output Play#1 1 2 units
+    Play#1 output Play#1 1 2 land units ordered to retreat along path yujnbgyujnbgyujnbg when injured, helpless, bombed
     Play#1 output Play#1 6 0 633
     Play#1 input lret 3 h
     Play#1 command lretreat
-    Play#1 output Play#1 1 lnd#     unit type       x,y   ar path       as army? flags
-    Play#1 output Play#1 1    3 inf  infantry      -3,1    a
-    Play#1 output Play#1 1 1 unit
+    Play#1 output Play#1 1 1 land unit ordered not to retreat
     Play#1 output Play#1 6 0 632
     Play#1 input lret a ?uid=4 b h
     Play#1 command lretreat
-    Play#1 output Play#1 1 lnd#     unit type       x,y   ar path       as army? flags
-    Play#1 output Play#1 1    4 inf  infantry      -4,0    a b          Yes      h
-    Play#1 output Play#1 1 1 unit
+    Play#1 output Play#1 1 1 land unit ordered to retreat as group along path b when helpless
     Play#1 output Play#1 6 0 631
     Play#1 input army a 7
     Play#1 command army