retreat lretreat: Be less loquacious when changing orders

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>
This commit is contained in:
Markus Armbruster 2015-01-10 10:23:48 +01:00
parent c702dc9e94
commit e2b264f02c
2 changed files with 63 additions and 47 deletions

View file

@ -29,7 +29,7 @@
* Known contributors to this file: * Known contributors to this file:
* Ken Stevens, 1995 * Ken Stevens, 1995
* Steve McClure, 2000 * Steve McClure, 2000
* Markus Armbruster, 2008-2014 * Markus Armbruster, 2008-2015
*/ */
#include <config.h> #include <config.h>
@ -51,6 +51,7 @@ static char shp_rflagsc[] = "Xitshbdu";
static char lnd_rflagsc[] = "XiXXhbXX"; static char lnd_rflagsc[] = "XiXXhbXX";
static int retreat(int); static int retreat(int);
static int retreat_show(int, struct nstr_item *);
int int
retr(void) retr(void)
@ -72,8 +73,7 @@ retreat(int type)
struct nstr_item ni; struct nstr_item ni;
union empobj_storage unit; union empobj_storage unit;
int i, rflags, ch, j; int i, rflags, ch, j;
char *rflagsc, *p, *name, *rpath, *what; char *rflagsc, *p;
int *rflagsp;
char buf1[1024]; char buf1[1024];
char buf2[1024]; char buf2[1024];
@ -83,7 +83,6 @@ retreat(int type)
if (!snxtitem(&ni, type, player->argp[1], NULL)) if (!snxtitem(&ni, type, player->argp[1], NULL))
return RET_SYN; return RET_SYN;
nunits = 0;
if (player->argp[1] && !player->argp[2]) { if (player->argp[1] && !player->argp[2]) {
pr("Omitting the second argument is deprecated and will cease to work in a\n" pr("Omitting the second argument is deprecated and will cease to work in a\n"
@ -101,10 +100,9 @@ retreat(int type)
return RET_SYN; return RET_SYN;
} }
rflags = 0; if (*pq == 'q')
if (*pq == 'q') { return retreat_show(type, &ni);
pq = NULL;
} else {
for (i = 0; i < RET_LEN - 1 && pq[i]; i++) { for (i = 0; i < RET_LEN - 1 && pq[i]; i++) {
if (chkdir(pq[i], DIR_STOP, DIR_LAST) < 0) { if (chkdir(pq[i], DIR_STOP, DIR_LAST) < 0) {
pr("'%c' is not a valid direction...\n", pq[i]); pr("'%c' is not a valid direction...\n", pq[i]);
@ -114,8 +112,9 @@ retreat(int type)
} }
for (i--; i >= 0 && pq[i] == dirch[DIR_STOP]; i--) for (i--; i >= 0 && pq[i] == dirch[DIR_STOP]; i--)
pq[i] = 0; pq[i] = 0;
}
if (pq && *pq) { rflags = 0;
if (*pq) {
again: again:
fl = getstarg(player->argp[3], fl = getstarg(player->argp[3],
"Retreat conditions ('?' to list available ones)? ", "Retreat conditions ('?' to list available ones)? ",
@ -154,7 +153,43 @@ retreat(int type)
rflags = 0; rflags = 0;
} }
nunits = 0;
while (nxtitem(&ni, &unit)) { 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) if (!player->owner || unit.gen.own == 0)
continue; continue;
if (type == EF_SHIP) { if (type == EF_SHIP) {
@ -176,14 +211,9 @@ retreat(int type)
rpath = unit.land.lnd_rpath; rpath = unit.land.lnd_rpath;
rflagsp = &unit.land.lnd_rflags; 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) if (player->god)
pr("%3d ", unit.gen.own); pr("%3d ", unit.gen.own);
pr("%4d ", ni.cur); pr("%4d ", np->cur);
pr("%-16.16s ", name); pr("%-16.16s ", name);
prxy("%4d,%-4d ", unit.gen.x, unit.gen.y); prxy("%4d,%-4d ", unit.gen.x, unit.gen.y);
pr("%1.1s", &unit.gen.group); pr("%1.1s", &unit.gen.group);
@ -193,11 +223,11 @@ retreat(int type)
pr("Yes "); pr("Yes ");
else else
pr(" "); pr(" ");
for (j = 1; rflagsc[j]; j++) { for (i = 1; rflagsc[i]; i++) {
if ((1 << j) & rflags) { if ((1 << i) & rflags) {
if (CANT_HAPPEN(rflagsc[j] == 'X')) if (CANT_HAPPEN(rflagsc[i] == 'X'))
continue; continue;
pr("%c", rflagsc[j]); pr("%c", rflagsc[i]);
} }
} }
pr("\n"); pr("\n");

View file

@ -50,22 +50,15 @@
Play#1 output Play#1 6 0 639 Play#1 output Play#1 6 0 639
Play#1 input retr 2/3 bgyujnbgyujnbgyujn itshbdu Play#1 input retr 2/3 bgyujnbgyujnbgyujn itshbdu
Play#1 command retreat 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 ships ordered to retreat along path bgyujnbgyujnbgyujn when injured, torpedoed, sonared, helpless, bombed, depth-charged, boarded
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 6 0 638 Play#1 output Play#1 6 0 638
Play#1 input retr 3 h Play#1 input retr 3 h
Play#1 command retreat 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 1 ship ordered not to retreat
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 6 0 637 Play#1 output Play#1 6 0 637
Play#1 input retr a ?uid=4 b h Play#1 input retr a ?uid=4 b h
Play#1 command retreat 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 1 ship ordered to retreat as group along path b when helpless
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 6 0 636 Play#1 output Play#1 6 0 636
Play#1 input fleet a 7 Play#1 input fleet a 7
Play#1 command fleetadd Play#1 command fleetadd
@ -115,22 +108,15 @@
Play#1 output Play#1 6 0 634 Play#1 output Play#1 6 0 634
Play#1 input lret 2/3 yujnbgyujnbgyujnbg ihb Play#1 input lret 2/3 yujnbgyujnbgyujnbg ihb
Play#1 command lretreat 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 land units ordered to retreat along path yujnbgyujnbgyujnbg when injured, helpless, bombed
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 6 0 633 Play#1 output Play#1 6 0 633
Play#1 input lret 3 h Play#1 input lret 3 h
Play#1 command lretreat 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 1 land unit ordered not to retreat
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 6 0 632 Play#1 output Play#1 6 0 632
Play#1 input lret a ?uid=4 b h Play#1 input lret a ?uid=4 b h
Play#1 command lretreat 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 1 land unit ordered to retreat as group along path b when helpless
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 6 0 631 Play#1 output Play#1 6 0 631
Play#1 input army a 7 Play#1 input army a 7
Play#1 command army Play#1 command army