From: Markus Armbruster Date: Wed, 7 Jan 2015 18:38:53 +0000 (+0100) Subject: retreat: Rewrite automatic retreat code to fix its many bugs X-Git-Tag: v4.3.33~91 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=beedf8dced4340c784354a3500d2f15185c6431e retreat: Rewrite automatic retreat code to fix its many bugs Much of the retreat code duplicates navigate and march code. Worse, retreat's version is full of bugs: * Land units can sometimes retreat when they couldn't march: while on the trading block (forbidden with march since 4.0.9), crewless (likewise since 4.0.0), kidnapped in a foreign sector (inconsistent since land units were added in Chainsaw 3), loaded on a ship (likewise) or a land unit (inconsistent since trains were added in 4.0.0). * Ships can retreat while on the trading block (forbidden with navigate since 4.0.9) * Land units can't retreat into foreign sectors even though they could march there, namely when sector is allied or the land unit is a spy. They can march there since 4.0.0. * Land units keep their fortification on retreat. Has been that way since retreat was added in Chainsaw. Then there's group retreat. It's basically crazy: * It triggers retreat for everyone in the same fleet or army, one after the other, regardless of retreat path, conditions (including group retreat), or even location. The latter is quite abusable since retreats aren't interdicted. Has been that way since retreat was added in Chainsaw. * Group retreat fails to trigger when the originally retreating ship or land unit has no retreat path left when it's done. Broken in commit b860123. Finally, the reporting to the owner is sub-par: * When a retreat is cut short by insufficient mobility or obstructions, its end sector isn't reported, leaving the player guessing. * Non-retreats can be confusingly reported as retreat to the same sector. Can happen when the retreat path starts with 'h' (obscure feature to suppress a single retreat), or when a group retreat includes a ship or land unit without retreat orders. * Interaction with mines during retreat is reported before the retreat itself, which can be quite confusing. * Sweeping landmines isn't reported at all. * Much code and much bulletin text is dedicated to reporting what caused the retreat, even though it should be perfectly obvious. Rewrite this on top of common navigate and march code. Reuse of common code fixes the "can retreat when it couldn't navigate/march" and the "can't retreat into sectors it could navigate or march into" bugs, and improves the reporting. One special case isn't a bug fix but a rule change: mountains. The old code forbids that explicitly, and it's clearly intentional, if undocumented. The new code allows it by not doing anything special. Turn group retreat into an actual group retreat: everyone in the same fleet and sector with the the same retreat path and group retreat condition joins the group. The group retreats together, just like in navigate and march. Take care to always report the end sector. When retreat is impossible, report "can't retreat". When retreat is partial, report "and stays in X,Y". When it's complete, report "stopped at X,Y". Signed-off-by: Markus Armbruster --- diff --git a/include/land.h b/include/land.h index 74d59514c..7c1aa3b9b 100644 --- a/include/land.h +++ b/include/land.h @@ -194,11 +194,13 @@ extern void lnd_takemob(struct emp_qelem *, double); extern int lnd_spyval(struct lndstr *); extern void intelligence_report(int, struct lndstr *, int, char *); extern void lnd_mar_stay_behind(struct emp_qelem *, natid); +extern void lnd_mar_put(struct emp_qelem *, natid); extern void lnd_put(struct emp_qelem *); extern void lnd_put_one(struct ulist *); extern int lnd_hardtarget(struct lndstr *); extern int lnd_abandon_askyn(struct emp_qelem *); -extern int lnd_mar_one_sector(struct emp_qelem *, int, natid); +extern int lnd_mar_dir(struct emp_qelem *, int, natid); +extern int lnd_mar_gauntlet(struct emp_qelem *, int, natid); extern int lnd_support(natid, natid, coord, coord, int); extern int lnd_can_attack(struct lndstr *); extern int lnd_fortify(struct lndstr *lp, int hard_amt); diff --git a/include/ship.h b/include/ship.h index ed005af1f..855748790 100644 --- a/include/ship.h +++ b/include/ship.h @@ -173,11 +173,13 @@ extern int shp_may_nav(struct shpstr *, struct shpstr *, char *); extern void shp_sel(struct nstr_item *, struct emp_qelem *); extern struct ulist *shp_insque(struct shpstr *, struct emp_qelem *); extern void shp_nav_stay_behind(struct emp_qelem *, natid); +extern void shp_nav_put(struct emp_qelem *, natid); extern int shp_sweep(struct emp_qelem *, int, int, natid); extern enum shp_stuck shp_check_nav(struct shpstr *, struct sctstr *); extern int sect_has_dock(struct sctstr *); extern int shp_hardtarget(struct shpstr *); -extern int shp_nav_one_sector(struct emp_qelem *, int, natid); +extern int shp_nav_dir(struct emp_qelem *, int, natid); +extern int shp_nav_gauntlet(struct emp_qelem *, int, natid); extern int shp_missile_defense(coord, coord, natid, int); extern void shp_missdef(struct shpstr *, natid); extern double shp_mobcost(struct shpstr *); diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index b182c9e7f..2dd7f3882 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -573,7 +573,7 @@ lnd_mar_put_one(struct ulist *llp) lnd_put_one(llp); } -static void +void lnd_mar_put(struct emp_qelem *list, natid actor) { struct emp_qelem *qp, *next; @@ -1004,7 +1004,7 @@ int lnd_abandon_askyn(struct emp_qelem *list) } int -lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor) +lnd_mar_dir(struct emp_qelem *list, int dir, natid actor) { struct sctstr sect, osect; struct emp_qelem *qp; @@ -1015,8 +1015,6 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor) coord newx; coord newy; int move; - int stopping = 0; - int visible; int rel; int oldown; @@ -1122,9 +1120,21 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor) } } } - if (QEMPTY(list)) - return stopping; - stopping |= lnd_sweep(list, 0, 1, actor); + + return 0; +} + +int +lnd_mar_gauntlet(struct emp_qelem *list, int interdict, natid actor) +{ + struct ulist *mlp = (struct ulist *)list->q_back; + coord newx = mlp->unit.land.lnd_x; + coord newy = mlp->unit.land.lnd_y; + int stopping, visible; + struct emp_qelem *qp, *next; + struct ulist *llp; + + stopping = lnd_sweep(list, 0, 1, actor); if (QEMPTY(list)) return stopping; stopping |= lnd_check_mines(list); @@ -1138,7 +1148,7 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor) if (!(lchr[(int)llp->unit.land.lnd_type].l_flags & L_SPY)) visible = 1; } - if (visible) + if (visible && interdict) stopping |= lnd_interdict(list, newx, newy, actor); return stopping; diff --git a/src/lib/subs/retreat.c b/src/lib/subs/retreat.c index 5ecd294c9..961552f04 100644 --- a/src/lib/subs/retreat.c +++ b/src/lib/subs/retreat.c @@ -29,397 +29,252 @@ * Known contributors to this file: * Steve McClure, 2000 * Ron Koenderink, 2005-2006 - * Markus Armbruster, 2006-2014 + * Markus Armbruster, 2006-2015 */ #include -#include "chance.h" -#include "damage.h" #include "file.h" -#include "land.h" -#include "map.h" -#include "misc.h" -#include "nat.h" -#include "news.h" #include "nsc.h" -#include "optlist.h" #include "path.h" #include "player.h" #include "prototypes.h" #include "retreat.h" -#include "sect.h" -#include "ship.h" -#include "xy.h" - -static int findcondition(char); -static int retreat_land1(struct lndstr *, char, int); -static int retreat_ship1(struct shpstr *, char, int); - -struct ccode { - char code; - char *desc[2]; -}; - -static struct ccode conditions[] = { - { 'i', { "retreated with a damaged friend", - "was damaged" } }, - { 't', { "retreated with a torpedoed ship", - "was hit by a torpedo" } }, - { 's', { "retreated with a ship scared by sonar", - "detected a sonar ping" } }, - { 'h', { "retreated with a helpless ship", - "was fired upon with no one able to defend it" } }, - { 'b', { "retreated with a bombed friend", - "was bombed" } }, - { 'd', { "retreated with a depth-charged ship", - "was depth-charged" } }, - { 'u', { "retreated with a boarded ship", "was boarded" } }, - { 0, { "panicked", "panicked"} } -}; +#include "unit.h" + +static void retreat_ship_sel(struct shpstr *, struct emp_qelem *, int); +static int retreat_ships_step(struct emp_qelem *, char, natid); +static void retreat_land_sel(struct lndstr *, struct emp_qelem *, int); +static int retreat_lands_step(struct emp_qelem *, char, natid); + +static int +retreat_steps(char *rpath) +{ + int i; + + for (i = 0; i < MAX_RETREAT && rpath[i]; i++) { + if (rpath[i] == 'h') + return i + 1; + } + return i; +} + +static void +consume_step(char *rpath, int *rflags) +{ + memmove(rpath, rpath + 1, RET_LEN - 1); + if (!rpath[0]) + *rflags = 0; +} void retreat_ship(struct shpstr *sp, char code) { + int n, i; + natid own; + struct emp_qelem list; struct nstr_item ni; struct shpstr ship; if (CANT_HAPPEN(!sp->shp_own)) return; - if (sp->shp_own == player->cnum) + if (sp->shp_own == player->cnum || !sp->shp_rpath[0]) return; - retreat_ship1(sp, code, 1); + n = retreat_steps(sp->shp_rpath); + if (!n) + return; + + /* + * We're going to put a copy of *sp into list. The movement loop + * will use that copy, which may render *sp stale. To avoid + * leaving the caller with a stale *sp, we'll re-get it at the + * end. To make that work, we need to put it now. However, that + * resets sp->shp_own when the ship sinks, so save it first. + */ + own = sp->shp_own; + putship(sp->shp_uid, sp); + + emp_initque(&list); + if (sp->shp_own) + retreat_ship_sel(sp, &list, n); if (sp->shp_rflags & RET_GROUP) { - snxtitem_group(&ni, EF_SHIP, sp->shp_fleet); + snxtitem_xy(&ni, EF_SHIP, sp->shp_x, sp->shp_y); while (nxtitem(&ni, &ship)) { - if (ship.shp_own != sp->shp_own || ship.shp_uid == sp->shp_uid) + if (ship.shp_own != own + || !(ship.shp_rflags & RET_GROUP) + || ship.shp_fleet != sp->shp_fleet + || ship.shp_uid == sp->shp_uid) + continue; + if (strncmp(ship.shp_rpath, sp->shp_rpath, MAX_RETREAT + 1)) continue; - if (retreat_ship1(&ship, code, 0)) - putship(ship.shp_uid, &ship); + retreat_ship_sel(&ship, &list, n); } } -} - -static int -retreat_ship1(struct shpstr *sp, char code, int orig) - - - /* Is this the originally scared ship, or a follower */ -{ - struct sctstr sect; - int i; - int m; - int max; - int dir; - coord newx; - coord newy; - coord dx; - coord dy; - int mines; - int shells; - double mobcost; - struct mchrstr *mcp; - int changed; - - if (sp->shp_effic < SHIP_MINEFF) { - if (!orig) - putship(sp->shp_uid, sp); - return 0; - } - /* check crew - uws don't count */ - if (sp->shp_item[I_MILIT] == 0 && sp->shp_item[I_CIVIL] == 0) { - wu(0, sp->shp_own, - "%s %s,\nbut had no crew, and couldn't retreat!\n", prship(sp), - conditions[findcondition(code)].desc[orig]); - return 0; + /* Loop similar to the one in unit_move(). Keep it that way! */ + for (i = 0; i < n && !QEMPTY(&list); i++) { + /* + * Invariant: shp_may_nav() true for all ships + * Implies all are in the same sector + */ + if (!retreat_ships_step(&list, sp->shp_rpath[i], own)) + n = i; + shp_nav_stay_behind(&list, own); + unit_rad_map_set(&list); } - getsect(sp->shp_x, sp->shp_y, §); - switch (shp_check_nav(sp, §)) { - case SHP_STUCK_NOT: - break; - case SHP_STUCK_CONSTRUCTION: - wu(0, sp->shp_own, - "%s %s,\nbut was caught in a construction zone, and couldn't retreat!\n", - prship(sp), conditions[findcondition(code)].desc[orig]); - return 0; - default: - CANT_REACH(); - /* fall through */ - case SHP_STUCK_CANAL: - case SHP_STUCK_IMPASSABLE: - wu(0, sp->shp_own, - "%s %s,\nbut was landlocked, and couldn't retreat!\n", - prship(sp), conditions[findcondition(code)].desc[orig]); - return 0; - } - - if (sp->shp_mobil <= 0.0) { - wu(0, sp->shp_own, - "%s %s,\nbut had no mobility, and couldn't retreat!\n", - prship(sp), conditions[findcondition(code)].desc[orig]); - return 0; - } + if (!QEMPTY(&list)) + shp_nav_put(&list, own); + getship(sp->shp_uid, sp); +} - for (i = 0; i < MAX_RETREAT && sp->shp_rpath[0]; i++) { - if (sp->shp_mobil <= 0.0) { - wu(0, sp->shp_own, - "%s %s,\nbut ran out of mobility, and couldn't retreat fully!\n", - prship(sp), conditions[findcondition(code)].desc[orig]); - return 1; - } - dir = chkdir(sp->shp_rpath[0], DIR_STOP, DIR_LAST); - if (dir == DIR_STOP || CANT_HAPPEN(dir < 0)) { - memmove(sp->shp_rpath, sp->shp_rpath + 1, - sizeof(sp->shp_rpath) - 1); - if (sp->shp_rpath[0] == 0) - sp->shp_rflags = 0; - break; - } - dx = diroff[dir][0]; - dy = diroff[dir][1]; - - mcp = &mchr[(int)sp->shp_type]; - newx = xnorm(sp->shp_x + dx); - newy = ynorm(sp->shp_y + dy); - mobcost = shp_mobcost(sp); - - getsect(newx, newy, §); - if (shp_check_nav(sp, §) != SHP_STUCK_NOT || - (sect.sct_own - && relations_with(sect.sct_own, sp->shp_own) < FRIENDLY)) { - wu(0, sp->shp_own, "%s %s,\nbut could not retreat to %s!\n", - prship(sp), conditions[findcondition(code)].desc[orig], - xyas(newx, newy, sp->shp_own)); - return 1; - } - sp->shp_x = newx; - sp->shp_y = newy; - sp->shp_mobil -= mobcost; - sp->shp_mission = 0; - memmove(sp->shp_rpath, sp->shp_rpath + 1, - sizeof(sp->shp_rpath) - 1); - if (sp->shp_rpath[0] == 0) - sp->shp_rflags = 0; - - mines = sect.sct_mines; - changed = 0; - if (sect.sct_type != SCT_WATER || mines <= 0) - continue; - if (mcp->m_flags & M_SWEEP) { - max = mcp->m_item[I_SHELL]; - shells = sp->shp_item[I_SHELL]; - for (m = 0; mines > 0 && m < 5; m++) { - if (chance(0.66)) { - mines--; - shells = MIN(max, shells + 1); - changed |= map_set(sp->shp_own, sp->shp_x, sp->shp_y, - 'X', 0); - } - } - if (sect.sct_mines != mines) { - wu(0, sp->shp_own, - "%s cleared %d mine%s in %s while retreating\n", - prship(sp), sect.sct_mines - mines, - splur(sect.sct_mines - mines), - xyas(newx, newy, sp->shp_own)); - sect.sct_mines = mines; - sp->shp_item[I_SHELL] = shells; - putsect(§); - } - if (changed) - writemap(sp->shp_own); - } - if (chance(DMINE_HITCHANCE(mines))) { - wu(0, sp->shp_own, - "%s %s,\nand hit a mine in %s while retreating!\n", - prship(sp), conditions[findcondition(code)].desc[orig], - xyas(newx, newy, sp->shp_own)); - nreport(sp->shp_own, N_HIT_MINE, 0, 1); - m = MINE_DAMAGE(); - shipdamage(sp, m); - mines--; - if (map_set(sp->shp_own, sp->shp_x, sp->shp_y, 'X', 0)) - writemap(sp->shp_own); - sect.sct_mines = mines; - putsect(§); - return 1; - } - } +static void +retreat_ship_sel(struct shpstr *sp, struct emp_qelem *list, int n) +{ + struct shpstr *flg = QEMPTY(list) ? NULL + : &((struct ulist *)(list->q_back))->unit.ship; - if (orig) { - wu(0, sp->shp_own, "%s %s, and retreated to %s\n", - prship(sp), conditions[findcondition(code)].desc[orig], - xyas(sp->shp_x, sp->shp_y, sp->shp_own)); - } else { - wu(0, sp->shp_own, "%s %s, and ended up at %s\n", - prship(sp), - conditions[findcondition(code)].desc[orig], - xyas(sp->shp_x, sp->shp_y, sp->shp_own)); + if (!shp_may_nav(sp, flg, ", and can't retreat!")) + return; + if (sp->shp_mobil <= 0) { + mpr(sp->shp_own, "%s has no mobility, and can't retreat!\n", + prship(sp)); + return; } - return 1; + if (flg) + mpr(sp->shp_own, "%s retreats with her\n", prship(sp)); + else + mpr(sp->shp_own, "%s retreats along path %.*s\n", + prship(sp), n, sp->shp_rpath); + shp_insque(sp, list); } static int -findcondition(char code) +retreat_ships_step(struct emp_qelem *list, char step, natid actor) { - int i; + int dir = chkdir(step, DIR_STOP, DIR_LAST); + struct emp_qelem *qp; + struct ulist *mlp; + struct shpstr *sp; + + if (dir != DIR_STOP && shp_nav_dir(list, dir, actor)) + return 0; /* can't go there */ + + for (qp = list->q_back; qp != list; qp = qp->q_back) { + mlp = (struct ulist *)qp; + sp = &mlp->unit.ship; + consume_step(sp->shp_rpath, &sp->shp_rflags); + if (dir != DIR_STOP) + sp->shp_mission = 0; + putship(sp->shp_uid, sp); + } - for (i = 0; conditions[i].code && conditions[i].code != code; i++) ; - CANT_HAPPEN(!conditions[i].code); - return i; + return dir != DIR_STOP && !shp_nav_gauntlet(list, 0, actor); } void retreat_land(struct lndstr *lp, char code) { + int n, i; + natid own; + struct emp_qelem list; struct nstr_item ni; struct lndstr land; if (CANT_HAPPEN(!lp->lnd_own)) return; - if (lp->lnd_own == player->cnum) + if (lp->lnd_own == player->cnum || !lp->lnd_rpath[0]) return; - retreat_land1(lp, code, 1); + n = retreat_steps(lp->lnd_rpath); + if (!n) + return; + + /* See explanation in retreat_ship() */ + own = lp->lnd_own; + putland(lp->lnd_uid, lp); + + emp_initque(&list); + if (lp->lnd_own) + retreat_land_sel(lp, &list, n); if (lp->lnd_rflags & RET_GROUP) { - snxtitem_group(&ni, EF_LAND, lp->lnd_army); + snxtitem_xy(&ni, EF_LAND, lp->lnd_x, lp->lnd_y); while (nxtitem(&ni, &land)) { - if (land.lnd_own != lp->lnd_own || land.lnd_uid == lp->lnd_uid) + if (land.lnd_own != own + || !(land.lnd_rflags & RET_GROUP) + || land.lnd_army != lp->lnd_army + || land.lnd_uid == lp->lnd_uid) + continue; + if (strncmp(land.lnd_rpath, lp->lnd_rpath, MAX_RETREAT + 1)) continue; - if (retreat_land1(&land, code, 0)) - putland(land.lnd_uid, &land); + retreat_land_sel(&land, &list, n); } } -} -static int -retreat_land1(struct lndstr *lp, char code, int orig) + /* Loop similar to the one in unit_move(). Keep it that way! */ + for (i = 0; i < n && !QEMPTY(&list); i++) { + /* + * Invariant: lnd_may_nav() true for all land units + * Implies all are in the same sector + */ + if (!retreat_lands_step(&list, lp->lnd_rpath[i], own)) + n = i; + lnd_mar_stay_behind(&list, own); + unit_rad_map_set(&list); + } + if (!QEMPTY(&list)) + lnd_mar_put(&list, own); + getland(lp->lnd_uid, lp); +} - /* Is this the originally scared unit, or a follower */ +static void +retreat_land_sel(struct lndstr *lp, struct emp_qelem *list, int n) { - struct sctstr sect; - int i; - int m; - int max; - int dir; - coord newx; - coord newy; - coord dx; - coord dy; - int mines; - int shells; - double mobcost; - struct lchrstr *lcp; - - if (lp->lnd_effic < LAND_MINEFF) { - if (!orig) - putland(lp->lnd_uid, lp); - return 0; - } + struct lndstr *ldr = QEMPTY(list) + ? NULL : &((struct ulist *)(list->q_back))->unit.land; - getsect(lp->lnd_x, lp->lnd_y, §); - - if (lp->lnd_mobil <= 0.0) { - wu(0, lp->lnd_own, - "%s %s,\nbut had no mobility, and couldn't retreat!\n", - prland(lp), conditions[findcondition(code)].desc[orig]); - return 0; + if (!lnd_may_mar(lp, ldr, ", and can't retreat!")) + return; + if (lp->lnd_mobil <= 0) { + mpr(lp->lnd_own, "%s has no mobility, and can't retreat!\n", + prland(lp)); + return; } - for (i = 0; i < MAX_RETREAT && lp->lnd_rpath[0]; i++) { - if (lp->lnd_mobil <= 0.0) { - wu(0, lp->lnd_own, - "%s %s,\nbut ran out of mobility, and couldn't retreat fully!\n", - prland(lp), conditions[findcondition(code)].desc[orig]); - return 1; - } - dir = chkdir(lp->lnd_rpath[0], DIR_STOP, DIR_LAST); - if (dir == DIR_STOP || CANT_HAPPEN(dir < 0)) { - memmove(lp->lnd_rpath, lp->lnd_rpath + 1, - sizeof(lp->lnd_rpath) - 1); - if (lp->lnd_rpath[0] == 0) - lp->lnd_rflags = 0; - break; - } - dx = diroff[dir][0]; - dy = diroff[dir][1]; - - lcp = &lchr[(int)lp->lnd_type]; - newx = xnorm(lp->lnd_x + dx); - newy = ynorm(lp->lnd_y + dy); - - getsect(newx, newy, §); - mobcost = lnd_mobcost(lp, §); - if (mobcost < 0 - || sect.sct_type == SCT_MOUNT - || sect.sct_own != lp->lnd_own) { - wu(0, lp->lnd_own, "%s %s,\nbut could not retreat to %s!\n", - prland(lp), - conditions[findcondition(code)].desc[orig], - xyas(newx, newy, lp->lnd_own)); - return 1; - } - lp->lnd_x = newx; - lp->lnd_y = newy; - lp->lnd_mobil -= mobcost; - lp->lnd_mission = 0; - memmove(lp->lnd_rpath, lp->lnd_rpath + 1, - sizeof(lp->lnd_rpath) - 1); - if (lp->lnd_rpath[0] == 0) - lp->lnd_rflags = 0; - - mines = SCT_LANDMINES(§); - if (mines <= 0 || sect.sct_oldown == lp->lnd_own) - continue; - if (lcp->l_flags & L_ENGINEER) { - max = lcp->l_item[I_SHELL]; - shells = lp->lnd_item[I_SHELL]; - for (m = 0; mines > 0 && m < 5; m++) { - if (chance(0.66)) { - mines--; - shells = MIN(max, shells + 1); - } - } - sect.sct_mines = mines; - lp->lnd_item[I_SHELL] = shells; - putsect(§); - } - if (chance(DMINE_LHITCHANCE(mines))) { - wu(0, lp->lnd_own, - "%s %s,\nand hit a mine in %s while retreating!\n", - prland(lp), - conditions[findcondition(code)].desc[orig], - xyas(newx, newy, lp->lnd_own)); - nreport(lp->lnd_own, N_LHIT_MINE, 0, 1); - m = MINE_LDAMAGE(); - if (lcp->l_flags & L_ENGINEER) - m /= 2; - landdamage(lp, m); - mines--; - sect.sct_mines = mines; - putsect(§); - return 1; - } - } + if (ldr) + mpr(lp->lnd_own, "%s retreats with them\n", prland(lp)); + else + mpr(lp->lnd_own, "%s retreats along path %.*s\n", + prland(lp), n, lp->lnd_rpath); + lnd_insque(lp, list); +} - if (orig) { - wu(0, lp->lnd_own, "%s %s, and retreated to %s\n", - prland(lp), - conditions[findcondition(code)].desc[orig], - xyas(lp->lnd_x, lp->lnd_y, lp->lnd_own)); - } else { - wu(0, lp->lnd_own, "%s %s, and ended up at %s\n", - prland(lp), - conditions[findcondition(code)].desc[orig], - xyas(lp->lnd_x, lp->lnd_y, lp->lnd_own)); +static int +retreat_lands_step(struct emp_qelem *list, char step, natid actor) +{ + int dir = chkdir(step, DIR_STOP, DIR_LAST); + struct emp_qelem *qp; + struct ulist *llp; + struct lndstr *lp; + + if (dir != DIR_STOP && lnd_mar_dir(list, dir, actor)) + return 0; /* can't go there */ + + for (qp = list->q_back; qp != list; qp = qp->q_back) { + llp = (struct ulist *)qp; + lp = &llp->unit.land; + consume_step(lp->lnd_rpath, &lp->lnd_rflags); + if (dir != DIR_STOP) { + lp->lnd_mission = 0; + lp->lnd_harden = 0; + } + putland(lp->lnd_uid, lp); } - return 1; + return dir != DIR_STOP && !lnd_mar_gauntlet(list, 0, actor); } diff --git a/src/lib/subs/shpsub.c b/src/lib/subs/shpsub.c index 92813d05e..52c5afb65 100644 --- a/src/lib/subs/shpsub.c +++ b/src/lib/subs/shpsub.c @@ -197,7 +197,7 @@ shp_nav_stay_behind(struct emp_qelem *list, natid actor) } } -static void +void shp_nav_put(struct emp_qelem *list, natid actor) { struct emp_qelem *qp, *next; @@ -777,7 +777,7 @@ shp_hit_mine(struct shpstr *sp) } int -shp_nav_one_sector(struct emp_qelem *list, int dir, natid actor) +shp_nav_dir(struct emp_qelem *list, int dir, natid actor) { struct sctstr sect; struct emp_qelem *qp; @@ -789,7 +789,6 @@ shp_nav_one_sector(struct emp_qelem *list, int dir, natid actor) coord newy; int move; enum shp_stuck stuck; - int stopping = 0; double mobcost; if (CANT_HAPPEN(QEMPTY(list))) @@ -876,15 +875,26 @@ shp_nav_one_sector(struct emp_qelem *list, int dir, natid actor) mlp->unit.ship.shp_mobil = (int)mlp->mobil; putship(mlp->unit.ship.shp_uid, &mlp->unit.ship); } - if (QEMPTY(list)) - return stopping; - stopping |= shp_sweep(list, 0, 0, actor); + + return 0; +} + +int +shp_nav_gauntlet(struct emp_qelem *list, int interdict, natid actor) +{ + struct ulist *mlp = (struct ulist *)list->q_back; + coord newx = mlp->unit.ship.shp_x; + coord newy = mlp->unit.ship.shp_y; + int stopping; + + stopping = shp_sweep(list, 0, 0, actor); if (QEMPTY(list)) return stopping; stopping |= shp_check_mines(list); if (QEMPTY(list)) return stopping; - stopping |= shp_interdict(list, newx, newy, actor); + if (interdict) + stopping |= shp_interdict(list, newx, newy, actor); return stopping; } diff --git a/src/lib/subs/unitsub.c b/src/lib/subs/unitsub.c index 544162415..7b1d3f0b8 100644 --- a/src/lib/subs/unitsub.c +++ b/src/lib/subs/unitsub.c @@ -415,11 +415,13 @@ unit_move(struct emp_qelem *list) } else if ((dir = chkdir(*cp, DIR_STOP, DIR_LAST)) >= 0) { cp++; if (type == EF_SHIP) - stopping = shp_nav_one_sector(list, dir, player->cnum); + stopping = shp_nav_dir(list, dir, player->cnum) + || shp_nav_gauntlet(list, 1, player->cnum); else { if (!moved && !lnd_abandon_askyn(list)) return RET_FAIL; - stopping = lnd_mar_one_sector(list, dir, player->cnum); + stopping = lnd_mar_dir(list, dir, player->cnum) + || lnd_mar_gauntlet(list, 1, player->cnum); } if (dir == DIR_STOP) return RET_OK; diff --git a/tests/retreat/01-retreat-1 b/tests/retreat/01-retreat-1 index 7198a3091..bf596b0db 100644 --- a/tests/retreat/01-retreat-1 +++ b/tests/retreat/01-retreat-1 @@ -42,7 +42,6 @@ lret | sunk | as group (fleet c): 30 sinks, 32 crewless, 35 no mobility, 36 on sale fire se -2,2 30 -| BUG: 36 retreats anyway __cmd added -2 -2 0 | in canal 4,0 fire se -2,2 31 @@ -151,10 +150,6 @@ board 130 5 bomb 30 . p -2,2 jh l 30 -| BUG: 31 retreats anyway -| BUG: 32 retreats anyway -| BUG: 34 retreats anyway -| BUG: 36 retreats anyway __cmd added -1 -2 0 | kidnapped in -1,1 bomb 30 . p -2,2 uh @@ -172,6 +167,7 @@ bomb 30 . p -2,2 ujh l 40 | into mountain 2,0 after j +| not actually having difficulties; such a retreat is permitted now __cmd added -1 0 0 bomb 30 . p -2,2 ujh l @@ -186,20 +182,16 @@ __cmd added -1 0 0 bomb 30 . p -2,2 ujh l 44 -| BUG: sweeps silently -| BUG: 43 doesn't retreat when 44 retreats fully | rail ends after n | as group (army t): 45 train, 46 not bomb 31 . p -2,2 uyuuh l 45 -| BUG: 46 retreats anyway | into foreign, 47 can't, 48 can __cmd added -1 0 0 bomb 31 . p -2,2 uuuh l 47 -| BUG: 48 can't enter foreign sector __cmd added 2 4 0 || land units retreating fully | jh @@ -217,7 +209,6 @@ __cmd added -1 0 0 bomb 30 . p -2,2 ujjh l 10 -| BUG: can't enter allied sector | own land unit stays put bomb 30 . p -3,1 h l diff --git a/tests/retreat/final.xdump b/tests/retreat/final.xdump index d7036b45c..929a5bb05 100644 --- a/tests/retreat/final.xdump +++ b/tests/retreat/final.xdump @@ -1,6 +1,6 @@ config sect owner xloc yloc des effic mobil off loyal terr0 terr1 terr2 terr3 dterr xdist ydist avail elev work coastal newdes min gold fert ocontent uran oldown civil milit shell gun petrol iron dust bar food oil lcm hcm uw rad c_dist m_dist s_dist g_dist p_dist i_dist d_dist b_dist f_dist o_dist l_dist h_dist u_dist r_dist c_del m_del s_del g_del p_del i_del d_del b_del f_del o_del l_del h_del u_del r_del mines pstage ptime che che_target fallout access road rail dfense -2 0 0 15 88 112 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 1 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 healthy 0 0 0 0 0 0 0 0 +2 0 0 15 88 112 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 1 87 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 91 healthy 0 0 0 0 0 0 0 0 2 2 0 1 100 127 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 2 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 2 4 0 5 100 127 0 0 0 0 0 0 0 4 0 0 0 0 1 5 0 0 0 0 0 2 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 1 -4 0 15 100 127 0 0 0 0 0 0 0 -4 0 0 0 0 1 15 0 0 0 0 0 1 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 @@ -14,7 +14,7 @@ owner xloc yloc des effic mobil off loyal terr0 terr1 terr2 terr3 dterr xdist yd 2 -6 2 12 81 102 0 0 0 0 0 0 0 -6 2 0 0 0 1 12 0 0 0 0 0 2 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 1 -2 2 19 100 127 0 0 0 0 0 0 0 -2 2 0 0 0 1 19 0 0 0 0 0 1 100 5 11 2 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 4 4 4 12 100 127 0 0 0 0 0 0 0 4 4 0 0 0 1 12 0 0 0 0 0 4 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 -0 -6 4 0 0 0 0 0 0 0 0 0 0 -6 4 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 healthy 0 0 0 0 0 0 0 0 +0 -6 4 0 0 0 0 0 0 0 0 0 0 -6 4 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 healthy 0 0 0 0 0 0 0 0 2 0 -2 24 98 124 0 0 0 0 0 0 0 0 -2 0 0 0 1 24 0 0 0 0 0 2 98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 3 2 -2 15 100 127 0 0 0 0 0 0 0 2 -2 0 0 0 1 15 0 0 0 0 0 3 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 1 -2 -2 19 99 126 0 0 0 0 0 0 0 -2 -2 0 0 0 1 19 0 0 0 0 0 1 99 5 98 2 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 0 0 0 0 0 0 @@ -38,36 +38,36 @@ uid owner xloc yloc type effic mobil off tech opx opy mission radius fleet civil 11 2 1 3 10 93 105 0 45 0 2 none 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 20 2 -3 1 10 96 122 0 45 -3 1 interdiction 1 "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (helpless) "u" 24 1 -4 2 10 100 127 0 45 0 0 none 0 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "ggg" -25 2 -8 2 10 93 93 0 45 -4 2 none 1 "g" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" -26 2 -4 4 10 100 103 0 45 -4 2 none 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -27 2 -4 4 10 100 103 0 45 -4 2 none 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +25 2 -8 2 10 93 94 0 45 -4 2 none 1 "g" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" +26 2 -4 2 10 100 127 0 45 -4 2 interdiction 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "bn" +27 2 -4 2 10 100 127 0 45 -4 2 interdiction 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "bn" 28 2 -8 2 10 100 103 0 45 -4 2 none 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group bombed) "g" -29 2 1 3 10 100 103 0 45 5 3 none 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" +29 2 5 3 10 100 127 0 45 5 3 interdiction 1 "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "ggg" 30 0 0 2 10 0 119 0 45 0 2 interdiction 1 "c" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "n" 31 2 4 0 10 95 121 0 45 4 0 interdiction 1 "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "n" 32 2 0 2 10 100 127 0 45 0 2 interdiction 1 "c" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "n" 33 2 2 2 10 95 121 0 45 2 2 interdiction 1 "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "n" 34 2 3 1 10 94 120 0 45 3 1 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "n" 35 2 0 2 10 100 0 0 45 0 2 interdiction 1 "c" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "n" -36 2 1 3 10 100 115 0 45 0 2 none 1 "c" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +36 2 0 2 10 100 127 0 45 0 2 interdiction 1 "c" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "n" 40 2 1 3 10 91 -7 0 45 0 2 none 1 "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "nnnh" 41 2 1 3 10 96 109 0 45 0 2 none 1 "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "uh" 42 2 -4 2 10 95 121 0 45 -4 2 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured) "ugggh" -43 2 -8 4 16 100 99 0 45 0 0 none 0 "m" 0 10 2 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -44 2 -6 4 16 64 70 0 45 0 0 none 0 "m" 0 6 2 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" +43 2 -6 4 16 87 98 0 45 0 0 none 0 "m" 0 8 1 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" +44 2 -6 4 16 68 73 0 45 0 0 none 0 "m" 0 6 2 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "g" 46 2 5 1 10 93 118 0 45 5 1 interdiction 1 "n" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (group injured) "y" 47 2 4 0 9 100 117 0 45 5 1 none 0 "n" 0 2 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -50 2 -9 1 18 67 33 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -51 2 -9 1 18 64 28 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -52 2 -9 1 18 73 45 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +50 2 -9 1 18 67 34 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +51 2 -9 1 18 64 29 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +52 2 -9 1 18 73 46 0 60 -5 1 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 53 2 -4 -2 18 73 92 0 60 -4 -2 interdiction 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (helpless) "gg" 60 2 -6 2 17 100 127 0 70 -6 2 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured helpless bombed) "nn" -61 2 -4 4 17 73 65 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -62 2 -4 4 17 67 55 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +61 2 -4 4 17 73 66 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +62 2 -4 4 17 67 56 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 63 2 -4 4 17 56 37 0 70 -6 2 none 1 "" 0 5 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -64 2 -4 4 17 67 55 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -65 2 -4 4 17 59 40 0 70 -6 2 none 1 "" 0 6 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -66 2 -4 4 17 67 55 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +64 2 -4 4 17 67 56 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +65 2 -4 4 17 59 41 0 70 -6 2 none 1 "" 0 6 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +66 2 -4 4 17 67 56 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 67 2 -6 2 17 100 127 0 70 -6 2 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (helpless bombed) "nn" 68 2 -4 4 17 70 61 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 69 2 -4 4 17 65 53 0 70 -6 2 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" @@ -76,13 +76,13 @@ uid owner xloc yloc type effic mobil off tech opx opy mission radius fleet civil 82 2 -6 2 17 100 127 0 70 -6 2 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured helpless bombed) "nn" 83 2 -4 4 17 29 -28 0 70 -6 2 none 1 "" 0 3 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 84 2 -6 2 17 100 127 0 70 -6 2 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured helpless bombed) "nn" -100 2 2 -6 10 50 15 0 45 0 4 none 1 "" 0 5 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +100 2 2 -6 10 50 16 0 45 0 4 none 1 "" 0 5 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 101 2 0 4 10 100 127 0 45 0 4 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured torped helpless) "nn" -102 2 2 -6 10 71 56 0 45 0 4 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -103 2 2 -6 10 37 -16 0 45 0 4 none 1 "" 0 3 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +102 2 2 -6 10 71 57 0 45 0 4 none 1 "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +103 2 2 -6 10 37 -15 0 45 0 4 none 1 "" 0 3 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 104 2 0 4 10 100 127 0 45 0 4 interdiction 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 (injured torped helpless) "nn" 120 2 -9 1 18 100 93 0 60 -5 1 none 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" -130 2 -9 1 12 100 95 0 60 -5 1 none 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" +130 2 -9 1 12 100 96 0 60 -5 1 none 1 "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" -3 1 1 () "" 149 0 0 0 0 0 0 0 0 0 0 none 0 "" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 0 "" 0 0 0 () "" /config config plane @@ -115,35 +115,35 @@ uid owner xloc yloc type effic mobil off tech opx opy mission radius army ship h 4 1 -4 0 2 100 127 0 50 0 0 none 0 "a" -1 0 42 (group helpless) "b" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 7 1 -4 0 2 100 127 0 50 0 0 none 0 "a" -1 0 42 (group helpless) "b" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 9 2 0 2 7 99 126 0 50 0 0 none 0 "" -1 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -10 2 4 0 0 61 61 0 50 1 1 none 3 "" -1 127 42 (bombed) "y" 0 6 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +10 2 3 -1 0 42 29 0 50 1 1 none 3 "" -1 0 42 () "" 0 4 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 24 1 3 1 0 98 125 0 50 0 0 none 0 "g" -1 0 42 (group bombed) "bhg" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -25 2 2 2 0 91 96 0 50 3 1 none 3 "g" -1 127 42 (group bombed) "g" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -26 2 4 0 0 100 117 0 50 3 1 none 3 "g" -1 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -27 2 4 0 0 100 117 0 50 3 1 none 3 "g" -1 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -28 2 2 2 0 100 107 0 50 3 1 none 3 "g" -1 127 42 (group injured) "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -29 2 3 1 0 100 116 0 50 4 0 none 3 "g" -1 127 42 (group bombed) "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +25 2 2 2 0 91 96 0 50 3 1 none 3 "g" -1 0 42 (group bombed) "g" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +26 2 3 1 0 100 127 0 50 3 1 reserve 3 "g" -1 127 42 (bombed) "uh" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +27 2 3 1 0 100 127 0 50 3 1 reserve 3 "g" -1 127 42 (group bombed) "uh" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +28 2 2 2 0 100 107 0 50 3 1 none 3 "g" -1 0 42 (group injured) "g" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +29 2 4 0 0 100 127 0 50 4 0 reserve 3 "g" -1 127 42 (group bombed) "bhg" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 30 0 0 2 0 0 105 0 50 0 2 reserve 3 "c" -1 127 42 (group bombed) "j" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -31 2 2 2 0 100 107 0 50 0 2 none 3 "c" 35 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -32 2 2 2 0 100 107 0 50 0 2 none 3 "c" -1 127 42 () "" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -33 2 1 1 0 85 98 0 50 -1 1 none 3 "" -1 127 42 () "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -34 2 2 2 0 100 107 0 50 0 2 none 3 "c" -1 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 9 0 +31 2 0 2 0 100 127 0 50 0 2 reserve 3 "c" 35 127 42 (group bombed) "j" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +32 2 0 2 0 100 127 0 50 0 2 reserve 3 "c" -1 127 42 (group bombed) "j" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +33 2 -1 1 0 85 108 0 50 -1 1 reserve 3 "" -1 127 42 (bombed) "j" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +34 2 0 2 0 100 127 0 50 0 2 reserve 3 "c" -1 127 42 (group bombed) "j" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 9 0 35 2 0 2 0 100 0 0 50 0 2 reserve 3 "c" -1 127 42 (group bombed) "j" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -36 2 2 2 0 100 107 0 50 0 2 none 3 "c" -1 127 42 () "" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -37 2 1 1 7 82 105 0 50 0 0 none 0 "" -1 127 42 (bombed) "j" 0 8 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -40 2 2 2 0 91 -14 0 50 1 1 none 3 "" -1 127 42 (bombed) "u" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -41 2 3 1 0 89 103 0 50 1 1 none 3 "" -1 127 42 (bombed) "y" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +36 2 0 2 0 100 127 0 50 0 2 reserve 3 "c" -1 127 42 (group bombed) "j" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +37 2 1 1 7 82 105 0 50 0 0 none 0 "" -1 127 42 (bombed) "j" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +40 2 2 2 0 91 -14 0 50 1 1 none 3 "" -1 0 42 (bombed) "u" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +41 2 2 0 0 89 44 0 50 1 1 none 3 "" -1 0 42 () "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 42 2 1 1 0 86 109 0 50 1 1 reserve 3 "" -1 127 42 (bombed) "g" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -43 2 1 1 15 100 127 0 130 1 1 reserve 1 "m" -1 127 42 (group bombed) "yu" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -44 2 1 -1 15 90 88 0 130 1 1 none 1 "m" -1 127 42 () "" 0 9 3 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -45 2 1 -1 7 84 65 0 50 0 0 none 0 "t" -1 127 42 (group bombed) "b" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -46 2 0 0 0 92 99 0 50 0 -2 none 3 "t" -1 127 42 () "" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +43 2 1 -1 15 100 89 0 130 1 1 none 1 "m" -1 0 42 () "" 0 10 3 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +44 2 1 -1 15 90 76 0 130 1 1 none 1 "m" -1 0 42 () "" 0 9 3 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +45 2 1 -1 7 84 65 0 50 0 0 none 0 "t" -1 0 42 (group bombed) "b" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +46 2 0 -2 0 100 127 0 50 0 -2 reserve 3 "t" -1 127 42 (group bombed) "nb" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 47 2 1 -1 0 91 115 0 50 1 -1 reserve 3 "s" -1 127 42 (group bombed) "gh" 0 9 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -48 2 1 -1 8 100 127 0 50 1 -1 reserve 3 "s" -1 127 42 (group bombed) "gh" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -60 2 3 1 0 73 71 0 50 0 0 none 3 "" -1 127 42 () "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +48 2 -1 -1 8 100 116 0 50 1 -1 none 3 "s" -1 0 42 () "" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +60 2 3 1 0 73 72 0 50 0 0 none 3 "" -1 0 42 () "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 61 2 0 0 0 100 127 0 50 0 0 reserve 3 "" -1 127 42 (injured helpless bombed) "nj" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 62 2 0 0 0 100 127 0 50 0 0 reserve 3 "" -1 127 42 (injured helpless bombed) "nj" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 63 2 0 0 0 100 127 0 50 0 0 reserve 3 "" -1 127 42 (injured helpless bombed) "nj" 0 10 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 -64 2 3 1 0 74 72 0 50 0 0 none 3 "" -1 127 42 () "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 +64 2 3 1 0 74 73 0 50 0 0 none 3 "" -1 0 42 () "" 0 7 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 99 0 0 0 0 0 0 0 0 0 0 none 0 "" -1 0 0 () "" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 healthy 0 -1 0 /config config nuke @@ -152,7 +152,7 @@ uid owner xloc yloc type effic mobil off tech opx opy mission radius stockpile p config news actor action victim times duration time 1 11 2 15 0 0 -2 25 0 1 0 0 +2 25 0 3 0 0 1 11 1 1 0 0 2 14 1 2 0 0 1 9 2 11 0 0 @@ -161,7 +161,6 @@ actor action victim times duration time 2 13 0 3 0 0 1 19 2 1 0 0 1 55 2 15 0 0 -2 56 0 1 0 0 1 55 1 1 0 0 /config config trade diff --git a/tests/retreat/journal.log b/tests/retreat/journal.log index 733ce9fea..f588fbeb5 100644 --- a/tests/retreat/journal.log +++ b/tests/retreat/journal.log @@ -691,6 +691,7 @@ Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 32) 2 completely lc light cruiser (#32) Play#1 output Play#1 1 (# 35) 2 completely lc light cruiser (#35) + Play#1 output Play#1 1 (# 36) 2 completely lc light cruiser (#36) Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 9) 2 completely tra train #9 Play#1 output Play#1 1 (# 30) 2 minimally cav cavalry #30 @@ -746,7 +747,6 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 40) 2 completely cav cavalry #40 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 @@ -757,7 +757,6 @@ Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 40) 2 completely cav cavalry #40 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 @@ -781,7 +780,6 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 40) 2 completely cav cavalry #40 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 @@ -792,7 +790,6 @@ Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 40) 2 completely cav cavalry #40 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 @@ -819,7 +816,6 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 @@ -829,7 +825,6 @@ Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 @@ -852,7 +847,6 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 @@ -861,7 +855,6 @@ Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 @@ -886,7 +879,6 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 @@ -895,7 +887,6 @@ Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 @@ -946,12 +937,14 @@ Play#1 output Play#1 1 flying over agribusiness at 1,-1 Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type + Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 Play#1 output Play#1 1 (# 44) 2 completely eng engineer #44 Play#1 output Play#1 1 (# 45) 2 completely tra train #45 Play#1 output Play#1 1 (# 47) 2 completely cav cavalry #47 Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type + Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 Play#1 output Play#1 1 (# 44) 2 completely eng engineer #44 Play#1 output Play#1 1 (# 45) 2 completely tra train #45 Play#1 output Play#1 1 (# 47) 2 completely cav cavalry #47 @@ -978,18 +971,14 @@ Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 - Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type Play#1 output Play#1 1 (# 10) 2 completely cav cavalry #10 - Play#1 output Play#1 1 (# 33) 2 completely cav cavalry #33 Play#1 output Play#1 1 (# 37) 2 completely tra train #37 Play#1 output Play#1 1 (# 42) 2 completely cav cavalry #42 - Play#1 output Play#1 1 (# 43) 2 completely eng engineer #43 Play#1 output Play#1 4 ac AH-64 Apache #30, 1 bombs. Target ('~' to skip)? Play#1 input 10 Play#1 output Play#1 1 71% hitchance...Blam @@ -1018,7 +1007,6 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type @@ -1028,7 +1016,6 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 ac AH-64 Apache #30, 1 bombs. Target ('~' to skip)? Play#1 input 10 Play#1 output Play#1 1 73% hitchance...Blam @@ -1058,7 +1045,6 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type @@ -1068,10 +1054,9 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 ac AH-64 Apache #30, 1 bombs. Target ('~' to skip)? Play#1 input 10 - Play#1 output Play#1 1 75% hitchance...BLAM + Play#1 output Play#1 1 76% hitchance...BLAM Play#1 output Play#1 1 cav cavalry #24 takes 1 Play#1 output Play#1 6 0 547 Play#1 input bomb 30 . p -3,1 h @@ -1128,7 +1113,6 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type @@ -1137,7 +1121,6 @@ Play#1 output Play#1 1 (# 26) 2 completely cav cavalry #26 Play#1 output Play#1 1 (# 27) 2 completely cav cavalry #27 Play#1 output Play#1 1 (# 28) 2 completely cav cavalry #28 - Play#1 output Play#1 1 (# 41) 2 completely cav cavalry #41 Play#1 output Play#1 4 ac AH-64 Apache #30, 1 bombs. Target ('~' to skip)? Play#1 input 25 Play#1 output Play#1 1 71% hitchance...Blam @@ -1165,7 +1148,6 @@ Play#1 output Play#1 1 flying over agribusiness at 0,0 Play#1 output Play#1 1 Target sector is a completely constructed agribusiness Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 60) 2 completely cav cavalry #60 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 @@ -1174,7 +1156,6 @@ Play#1 output Play#1 4 Bomb what? (ship, plane, land unit, efficiency, commodities) Play#1 input l Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 60) 2 completely cav cavalry #60 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 @@ -1184,7 +1165,6 @@ Play#1 input 60 Play#1 output Play#1 1 50% hitchance...Blam-BLAM Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 Play#1 output Play#1 1 (# 63) 2 completely cav cavalry #63 @@ -1193,7 +1173,6 @@ Play#1 input 61 Play#1 output Play#1 1 50% hitchance...thud Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 Play#1 output Play#1 1 (# 63) 2 completely cav cavalry #63 @@ -1202,7 +1181,6 @@ Play#1 input 62 Play#1 output Play#1 1 50% hitchance...thud Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 Play#1 output Play#1 1 (# 63) 2 completely cav cavalry #63 @@ -1211,7 +1189,6 @@ Play#1 input 63 Play#1 output Play#1 1 50% hitchance...thud Play#1 output Play#1 1 # owner eff type - Play#1 output Play#1 1 (# 46) 2 completely cav cavalry #46 Play#1 output Play#1 1 (# 61) 2 completely cav cavalry #61 Play#1 output Play#1 1 (# 62) 2 completely cav cavalry #62 Play#1 output Play#1 1 (# 63) 2 completely cav cavalry #63 @@ -1248,80 +1225,94 @@ Play#0 output Play#0 1 > BULLETIN from POGO, (#0) dated Thu Jan 1 00:00:00 1970 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#30) in 0,2 for 10 damage. Play#0 output Play#0 1 lc light cruiser (#30) takes 6 - Play#0 output Play#0 1 lc light cruiser (#32) retreated with a damaged friend, - Play#0 output Play#0 1 but had no crew, and couldn't retreat! - Play#0 output Play#0 1 lc light cruiser (#35) retreated with a damaged friend, - Play#0 output Play#0 1 but had no mobility, and couldn't retreat! - Play#0 output Play#0 1 lc light cruiser (#36) retreated with a damaged friend, and ended up at 1,3 Play#0 output Play#0 1 lc light cruiser (#30) sunk! + Play#0 output Play#0 1 lc light cruiser (#32) is crewless, and can't retreat! + Play#0 output Play#0 1 lc light cruiser (#35) has no mobility, and can't retreat! + Play#0 output Play#0 1 lc light cruiser (#36) is on the trading block, and can't retreat! Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#31) in 4,0 for 8 damage. Play#0 output Play#0 1 lc light cruiser (#31) takes 5 - Play#0 output Play#0 1 lc light cruiser (#31) was damaged, - Play#0 output Play#0 1 but was landlocked, and couldn't retreat! + Play#0 output Play#0 1 lc light cruiser (#31) is landlocked, and can't retreat! Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#33) in 2,2 for 8 damage. Play#0 output Play#0 1 lc light cruiser (#33) takes 5 - Play#0 output Play#0 1 lc light cruiser (#33) was damaged, - Play#0 output Play#0 1 but was caught in a construction zone, and couldn't retreat! + Play#0 output Play#0 1 lc light cruiser (#33) is caught in a construction zone, and can't retreat! Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#34) in 3,1 for 10 damage. Play#0 output Play#0 1 lc light cruiser (#34) takes 6 - Play#0 output Play#0 1 lc light cruiser (#34) was damaged, - Play#0 output Play#0 1 but was landlocked, and couldn't retreat! + Play#0 output Play#0 1 lc light cruiser (#34) is landlocked, and can't retreat! Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#40) in 0,2 for 14 damage. Play#0 output Play#0 1 lc light cruiser (#40) takes 9 - Play#0 output Play#0 1 lc light cruiser (#40) was damaged, - Play#0 output Play#0 1 but ran out of mobility, and couldn't retreat fully! + Play#0 output Play#0 1 lc light cruiser (#40) retreats along path nn + Play#0 output Play#0 1 lc light cruiser (#40) is out of mobility & stays in 1,3 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#41) in 0,2 for 6 damage. Play#0 output Play#0 1 lc light cruiser (#41) takes 4 - Play#0 output Play#0 1 lc light cruiser (#41) was damaged, - Play#0 output Play#0 1 but could not retreat to 2,2! + Play#0 output Play#0 1 lc light cruiser (#41) retreats along path nu + Play#0 output Play#0 1 can't go to 2,2 + Play#0 output Play#0 1 lc light cruiser (#41) stopped at 1,3 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#42) in -4,2 for 8 damage. Play#0 output Play#0 1 lc light cruiser (#42) takes 5 - Play#0 output Play#0 1 lc light cruiser (#42) was damaged, - Play#0 output Play#0 1 but could not retreat to -3,1! + Play#0 output Play#0 1 lc light cruiser (#42) retreats along path ug + Play#0 output Play#0 1 can't go to -3,1 + Play#0 output Play#0 1 lc light cruiser (#42) stopped at -4,2 Play#0 output Play#0 1 Country #1 shelled ms minesweeper (#44) in -4,4 for 11 damage. Play#0 output Play#0 1 ms minesweeper (#44) takes 10 - Play#0 output Play#0 1 ms minesweeper (#44) cleared 3 mines in -6,4 while retreating - Play#0 output Play#0 1 ms minesweeper (#44) was damaged, - Play#0 output Play#0 1 and hit a mine in -6,4 while retreating! - Play#0 output Play#0 1 ms minesweeper (#44) takes 29 - Play#0 output Play#0 1 ms minesweeper (#43) cleared 2 mines in -6,4 while retreating - Play#0 output Play#0 1 ms minesweeper (#43) retreated with a damaged friend, and ended up at -8,4 + Play#0 output Play#0 1 ms minesweeper (#44) retreats along path gg + Play#0 output Play#0 1 ms minesweeper (#43) retreats with her + Play#0 output Play#0 1 Approaching minefield at -6,4... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Kawhomp! Mine detected in -6,4! + Play#0 output Play#0 1 ms minesweeper (#44) takes 14 + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Kawhomp! Mine detected in -6,4! + Play#0 output Play#0 1 ms minesweeper (#44) takes 13 + Play#0 output Play#0 1 Kawhomp! Mine detected in -6,4! + Play#0 output Play#0 1 ms minesweeper (#43) takes 13 + Play#0 output Play#0 1 ms minesweeper (#44) stopped at -6,4 + Play#0 output Play#0 1 ms minesweeper (#43) stopped at -6,4 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#46) in 5,1 for 11 damage. Play#0 output Play#0 1 lc light cruiser (#46) takes 7 - Play#0 output Play#0 1 lc light cruiser (#46) was damaged, - Play#0 output Play#0 1 but could not retreat to 4,0! - Play#0 output Play#0 1 pt patrol boat (#47) retreated with a damaged friend, and ended up at 4,0 + Play#0 output Play#0 1 lc light cruiser (#46) retreats along path y + Play#0 output Play#0 1 pt patrol boat (#47) retreats with her + Play#0 output Play#0 1 lc light cruiser (#46) is too large to fit into the canal system at 4,0 & stays in 5,1 + Play#0 output Play#0 1 pt patrol boat (#47) stopped at 4,0 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#10) in 0,2 for 11 damage. Play#0 output Play#0 1 lc light cruiser (#10) takes 7 - Play#0 output Play#0 1 lc light cruiser (#10) was damaged, and retreated to 1,3 + Play#0 output Play#0 1 lc light cruiser (#10) retreats along path nh + Play#0 output Play#0 1 lc light cruiser (#10) stopped at 1,3 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#10) in 1,3 for 6 damage. Play#0 output Play#0 1 lc light cruiser (#10) takes 4 - Play#0 output Play#0 1 lc light cruiser (#10) was damaged, and retreated to 1,3 + Play#0 output Play#0 1 lc light cruiser (#10) retreats along path h + Play#0 output Play#0 1 lc light cruiser (#10) stopped at 1,3 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#10) in 1,3 for 6 damage. Play#0 output Play#0 1 lc light cruiser (#10) takes 4 - Play#0 output Play#0 1 lc light cruiser (#10) was damaged, and retreated to 4,4 + Play#0 output Play#0 1 lc light cruiser (#10) retreats along path nj + Play#0 output Play#0 1 lc light cruiser (#10) stopped at 4,4 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#11) in 0,2 for 11 damage. Play#0 output Play#0 1 lc light cruiser (#11) takes 7 - Play#0 output Play#0 1 lc light cruiser (#11) was fired upon with no one able to defend it, and retreated to 1,3 + Play#0 output Play#0 1 lc light cruiser (#11) retreats along path n + Play#0 output Play#0 1 lc light cruiser (#11) stopped at 1,3 Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#20) in -3,1 for 6 damage. Play#0 output Play#0 1 lc light cruiser (#20) takes 4 Play#0 output Play#0 1 Return fire hit sector -2,-2 for 8 damage. Play#0 output Play#0 1 Country #1 shelled lc light cruiser (#25) in -4,2 for 11 damage. Play#0 output Play#0 1 lc light cruiser (#25) takes 7 - Play#0 output Play#0 1 lc light cruiser (#25) was damaged, and retreated to -8,2 - Play#0 output Play#0 1 lc light cruiser (#26) retreated with a damaged friend, and ended up at -4,4 - Play#0 output Play#0 1 lc light cruiser (#27) retreated with a damaged friend, and ended up at -4,4 - Play#0 output Play#0 1 lc light cruiser (#28) retreated with a damaged friend, and ended up at -8,2 - Play#0 output Play#0 1 lc light cruiser (#29) retreated with a damaged friend, and ended up at 1,3 + Play#0 output Play#0 1 lc light cruiser (#25) retreats along path gg + Play#0 output Play#0 1 lc light cruiser (#28) retreats with her + Play#0 output Play#0 1 lc light cruiser (#25) stopped at -8,2 + Play#0 output Play#0 1 lc light cruiser (#28) stopped at -8,2 Play#0 output Play#0 1 Country #1 shelled sb submarine (#50) in -5,1 for 42 damage. Play#0 output Play#0 1 sb submarine (#50) takes 33 - Play#0 output Play#0 1 sb submarine (#50) was damaged, and retreated to -9,1 + Play#0 output Play#0 1 sb submarine (#50) retreats along path gg + Play#0 output Play#0 1 sb submarine (#50) stopped at -9,1 Play#0 output Play#0 1 Country #1 shelled sb submarine (#51) in -5,1 for 45 damage. Play#0 output Play#0 1 sb submarine (#51) takes 36 - Play#0 output Play#0 1 sb submarine (#51) was depth-charged, and retreated to -9,1 + Play#0 output Play#0 1 sb submarine (#51) retreats along path gg + Play#0 output Play#0 1 sb submarine (#51) stopped at -9,1 Play#0 output Play#0 1 Country #1 shelled sb submarine (#52) in -5,1 for 34 damage. Play#0 output Play#0 1 sb submarine (#52) takes 27 - Play#0 output Play#0 1 sb submarine (#52) was fired upon with no one able to defend it, and retreated to -9,1 + Play#0 output Play#0 1 sb submarine (#52) retreats along path gg + Play#0 output Play#0 1 sb submarine (#52) stopped at -9,1 Play#0 output Play#0 1 1 dd destroyer (#5) sighted at -5,1 Play#0 output Play#0 1 1 dd destroyer (#5) sighted at -6,0 Play#0 output Play#0 1 Country #1 shelled sb submarine (#53) in -4,-2 for 34 damage. @@ -1332,38 +1323,46 @@ Play#0 output Play#0 1 -6,2 takes 3% collateral damage Play#0 output Play#0 1 1 bombs did 40 damage to dd destroyer (#61) at -6,2 Play#0 output Play#0 1 dd destroyer (#61) takes 27 - Play#0 output Play#0 1 dd destroyer (#61) was damaged, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#61) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#61) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 2% collateral damage Play#0 output Play#0 1 1 bombs did 48 damage to dd destroyer (#62) at -6,2 Play#0 output Play#0 1 dd destroyer (#62) takes 33 - Play#0 output Play#0 1 dd destroyer (#62) was damaged, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#62) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#62) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 2% collateral damage Play#0 output Play#0 1 1 bombs did 64 damage to dd destroyer (#63) at -6,2 Play#0 output Play#0 1 dd destroyer (#63) takes 44 - Play#0 output Play#0 1 dd destroyer (#63) was damaged, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#63) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#63) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 3% collateral damage Play#0 output Play#0 1 1 bombs did 48 damage to dd destroyer (#64) at -6,2 Play#0 output Play#0 1 dd destroyer (#64) takes 33 - Play#0 output Play#0 1 dd destroyer (#64) was damaged, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#64) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#64) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 2% collateral damage Play#0 output Play#0 1 1 planes spotted over -4,2 Play#0 output Play#0 1 1 planes spotted over -6,2 Play#0 output Play#0 1 1 bombs did 60 damage to dd destroyer (#65) at -6,2 Play#0 output Play#0 1 dd destroyer (#65) takes 41 - Play#0 output Play#0 1 dd destroyer (#65) was bombed, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#65) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#65) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 3% collateral damage Play#0 output Play#0 1 1 bombs did 48 damage to dd destroyer (#66) at -6,2 Play#0 output Play#0 1 dd destroyer (#66) takes 33 - Play#0 output Play#0 1 dd destroyer (#66) was bombed, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#66) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#66) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 2% collateral damage Play#0 output Play#0 1 -6,2 takes 4% collateral damage Play#0 output Play#0 1 1 bombs did 44 damage to dd destroyer (#68) at -6,2 Play#0 output Play#0 1 dd destroyer (#68) takes 30 - Play#0 output Play#0 1 dd destroyer (#68) was bombed, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#68) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#68) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 2% collateral damage Play#0 output Play#0 1 1 bombs did 52 damage to dd destroyer (#69) at -6,2 Play#0 output Play#0 1 dd destroyer (#69) takes 35 - Play#0 output Play#0 1 dd destroyer (#69) was bombed, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#69) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#69) stopped at -4,4 Play#0 output Play#0 1 -6,2 takes 3% collateral damage Play#0 output Play#0 1 Incoming 1 missile sighted at -6,2... Play#0 output Play#0 1 ...Incoming 1 missile missed @@ -1381,127 +1380,156 @@ Play#0 output Play#0 1 ...Incoming 1 missile HIT! Play#0 output Play#0 1 Play#0 output Play#0 1 dd destroyer (#83) takes 71 - Play#0 output Play#0 1 dd destroyer (#83) was damaged, and retreated to -4,4 + Play#0 output Play#0 1 dd destroyer (#83) retreats along path nn + Play#0 output Play#0 1 dd destroyer (#83) stopped at -4,4 Play#0 output Play#0 1 Incoming 1 missile sighted at -6,2... Play#0 output Play#0 1 ...Incoming 1 missile missed Play#0 output Play#0 1 Play#0 output Play#0 1 -6,2 takes 6% collateral damage Play#0 output Play#0 1 sub in -1,3 torpedoed lc light cruiser (#100) for 75 damage. Play#0 output Play#0 1 lc light cruiser (#100) takes 50 - Play#0 output Play#0 1 lc light cruiser (#100) was hit by a torpedo, and retreated to 2,-6 + Play#0 output Play#0 1 lc light cruiser (#100) retreats along path nn + Play#0 output Play#0 1 lc light cruiser (#100) stopped at 2,-6 Play#0 output Play#0 1 Torpedo sighted @ -1,3 by lc light cruiser (#101) Play#0 output Play#0 1 sub in -1,3 torpedoed lc light cruiser (#102) for 44 damage. Play#0 output Play#0 1 lc light cruiser (#102) takes 29 - Play#0 output Play#0 1 lc light cruiser (#102) was hit by a torpedo, and retreated to 2,-6 + Play#0 output Play#0 1 lc light cruiser (#102) retreats along path nn + Play#0 output Play#0 1 lc light cruiser (#102) stopped at 2,-6 Play#0 output Play#0 1 sub in -1,3 torpedoed lc light cruiser (#103) for 95 damage. Play#0 output Play#0 1 lc light cruiser (#103) takes 63 - Play#0 output Play#0 1 lc light cruiser (#103) was hit by a torpedo, and retreated to 2,-6 + Play#0 output Play#0 1 lc light cruiser (#103) retreats along path nn + Play#0 output Play#0 1 lc light cruiser (#103) stopped at 2,-6 Play#0 output Play#0 1 Torpedo sighted @ -1,3 by lc light cruiser (#104) Play#0 output Play#0 1 Sonar ping from -6,0 detected by sb submarine (#120)! - Play#0 output Play#0 1 sb submarine (#120) detected a sonar ping, and retreated to -9,1 + Play#0 output Play#0 1 sb submarine (#120) retreats along path gg + Play#0 output Play#0 1 sb submarine (#120) stopped at -9,1 Play#0 output Play#0 1 1 dd destroyer (#5) sighted at -5,1 Play#0 output Play#0 1 tt troop transport (#130) is being approached by dd destroyer (#5)... Play#0 output Play#0 1 1 (#1) lost 1 troops trying to board tt troop transport (#130) Play#0 output Play#0 1 We lost 0 troops defending - Play#0 output Play#0 1 tt troop transport (#130) was boarded, and retreated to -9,1 + Play#0 output Play#0 1 tt troop transport (#130) retreats along path gg + Play#0 output Play#0 1 tt troop transport (#130) stopped at -9,1 Play#0 output Play#0 1 1 planes spotted over 0,2 Play#0 output Play#0 1 1 pinpoint bombing raid did 44 damage to cav cavalry #30 Play#0 output Play#0 1 cav cavalry #30 takes 17 - Play#0 output Play#0 1 cav cavalry #31 retreated with a bombed friend, and ended up at 2,2 - Play#0 output Play#0 1 cav cavalry #32 retreated with a bombed friend, and ended up at 2,2 - Play#0 output Play#0 1 cav cavalry #34 retreated with a bombed friend, and ended up at 2,2 - Play#0 output Play#0 1 cav cavalry #35 retreated with a bombed friend, - Play#0 output Play#0 1 but had no mobility, and couldn't retreat! - Play#0 output Play#0 1 cav cavalry #36 retreated with a bombed friend, and ended up at 2,2 + Play#0 output Play#0 1 cav cavalry #31 is on a ship, and can't retreat! + Play#0 output Play#0 1 cav cavalry #32 has no mil on it to guide it, and can't retreat! + Play#0 output Play#0 1 cav cavalry #34 is on a unit, and can't retreat! + Play#0 output Play#0 1 cav cavalry #35 has no mobility, and can't retreat! + Play#0 output Play#0 1 cav cavalry #36 is on the trading block, and can't retreat! Play#0 output Play#0 1 0,2 takes 4% collateral damage Play#0 output Play#0 1 tra train #9 takes 1 Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 40 damage to cav cavalry #33 Play#0 output Play#0 1 cav cavalry #33 takes 15 - Play#0 output Play#0 1 cav cavalry #33 was bombed, and retreated to 1,1 + Play#0 output Play#0 1 cav cavalry #33 has been kidnapped by 1, and can't retreat! Play#0 output Play#0 1 1 pinpoint bombing raid did 24 damage to tra train #37 Play#0 output Play#0 1 tra train #37 takes 14 - Play#0 output Play#0 1 tra train #37 was bombed, - Play#0 output Play#0 1 but could not retreat to 3,1! + Play#0 output Play#0 1 tra train #37 is stuck off the rail system, and can't retreat! Play#0 output Play#0 1 1,1 takes 2% collateral damage + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 24 damage to cav cavalry #40 Play#0 output Play#0 1 cav cavalry #40 takes 9 - Play#0 output Play#0 1 cav cavalry #40 was bombed, - Play#0 output Play#0 1 but ran out of mobility, and couldn't retreat fully! + Play#0 output Play#0 1 cav cavalry #40 retreats along path nu + Play#0 output Play#0 1 cav cavalry #40 is out of mobility & stays in 2,2 Play#0 output Play#0 1 1,1 takes 2% collateral damage + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 planes spotted over 1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 28 damage to cav cavalry #41 Play#0 output Play#0 1 cav cavalry #41 takes 11 - Play#0 output Play#0 1 cav cavalry #41 was bombed, - Play#0 output Play#0 1 but could not retreat to 2,0! + Play#0 output Play#0 1 cav cavalry #41 retreats along path jy + Play#0 output Play#0 1 cav cavalry #41 stopped at 2,0 Play#0 output Play#0 1 1,1 takes 3% collateral damage Play#0 output Play#0 1 tra train #37 takes 1 + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 36 damage to cav cavalry #42 Play#0 output Play#0 1 cav cavalry #42 takes 14 - Play#0 output Play#0 1 cav cavalry #42 was bombed, - Play#0 output Play#0 1 but could not retreat to -1,1! + Play#0 output Play#0 1 cav cavalry #42 retreats along path g + Play#0 output Play#0 1 can't go to -1,1 + Play#0 output Play#0 1 cav cavalry #42 stopped at 1,1 Play#0 output Play#0 1 1,1 takes 4% collateral damage Play#0 output Play#0 1 tra train #37 takes 1 + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 planes spotted over 1,1 Play#0 output Play#0 1 Flak! Firing flak guns from unit eng engineer #44 (aa rating 1) Play#0 output Play#0 1 1 pinpoint bombing raid did 40 damage to eng engineer #44 Play#0 output Play#0 1 eng engineer #44 takes 10 - Play#0 output Play#0 1 eng engineer #44 was bombed, and retreated to 1,-1 + Play#0 output Play#0 1 eng engineer #44 retreats along path yu + Play#0 output Play#0 1 eng engineer #43 retreats with them + Play#0 output Play#0 1 Approaching minefield at 0,0... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 Sweep... + Play#0 output Play#0 1 eng engineer #44 stopped at 1,-1 + Play#0 output Play#0 1 eng engineer #43 stopped at 1,-1 Play#0 output Play#0 1 1,1 takes 4% collateral damage Play#0 output Play#0 1 tra train #37 takes 1 + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 planes spotted over 0,-2 Play#0 output Play#0 1 1 pinpoint bombing raid did 28 damage to tra train #45 Play#0 output Play#0 1 tra train #45 takes 16 - Play#0 output Play#0 1 tra train #45 was bombed, - Play#0 output Play#0 1 but could not retreat to 0,0! - Play#0 output Play#0 1 cav cavalry #46 retreated with a bombed friend, - Play#0 output Play#0 1 and hit a mine in 0,0 while retreating! - Play#0 output Play#0 1 cav cavalry #46 takes 8 + Play#0 output Play#0 1 tra train #45 retreats along path nb + Play#0 output Play#0 1 cav cavalry #46 can't rail-march with the leading train, and can't retreat! + Play#0 output Play#0 1 no rail system in 0,0 + Play#0 output Play#0 1 tra train #45 stopped at 1,-1 Play#0 output Play#0 1 0,-2 takes 3% collateral damage Play#0 output Play#0 1 1 planes spotted over 0,0 Play#0 output Play#0 1 1 planes spotted over 1,-1 Play#0 output Play#0 1 1 pinpoint bombing raid did 24 damage to cav cavalry #47 Play#0 output Play#0 1 cav cavalry #47 takes 9 - Play#0 output Play#0 1 cav cavalry #47 was bombed, - Play#0 output Play#0 1 but could not retreat to -1,-1! - Play#0 output Play#0 1 spy infiltrator #48 retreated with a bombed friend, - Play#0 output Play#0 1 but could not retreat to -1,-1! + Play#0 output Play#0 1 cav cavalry #47 retreats along path gh + Play#0 output Play#0 1 spy infiltrator #48 retreats with them + Play#0 output Play#0 1 cav cavalry #47 can't go to -1,-1 & stays in 1,-1 + Play#0 output Play#0 1 spy infiltrator #48 stopped at -1,-1 Play#0 output Play#0 1 1,-1 takes 2% collateral damage Play#0 output Play#0 1 1 planes spotted over 1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 44 damage to cav cavalry #10 Play#0 output Play#0 1 cav cavalry #10 takes 17 - Play#0 output Play#0 1 cav cavalry #10 was bombed, and retreated to 3,1 + Play#0 output Play#0 1 cav cavalry #10 retreats along path jh + Play#0 output Play#0 1 cav cavalry #10 stopped at 3,1 Play#0 output Play#0 1 1,1 takes 4% collateral damage Play#0 output Play#0 1 tra train #37 takes 1 Play#0 output Play#0 1 1 pinpoint bombing raid did 36 damage to cav cavalry #10 - Play#0 output Play#0 1 cav cavalry #10 takes 14 - Play#0 output Play#0 1 cav cavalry #10 was bombed, and retreated to 3,1 + Play#0 output Play#0 1 cav cavalry #10 takes 27 + Play#0 output Play#0 1 cav cavalry #10 retreats along path h + Play#0 output Play#0 1 cav cavalry #10 stopped at 3,1 Play#0 output Play#0 1 3,1 takes 4% collateral damage + Play#0 output Play#0 1 cav cavalry #10 takes 1 + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 40 damage to cav cavalry #10 - Play#0 output Play#0 1 cav cavalry #10 takes 15 - Play#0 output Play#0 1 cav cavalry #10 was bombed, - Play#0 output Play#0 1 but could not retreat to 3,-1! + Play#0 output Play#0 1 cav cavalry #10 takes 30 + Play#0 output Play#0 1 cav cavalry #10 retreats along path uy + Play#0 output Play#0 1 cav cavalry #10 stopped at 3,-1 Play#0 output Play#0 1 3,1 takes 4% collateral damage + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 planes spotted over 3,1 Play#0 output Play#0 1 1 pinpoint bombing raid did 24 damage to cav cavalry #25 Play#0 output Play#0 1 cav cavalry #25 takes 9 - Play#0 output Play#0 1 cav cavalry #25 was bombed, and retreated to 2,2 - Play#0 output Play#0 1 cav cavalry #26 retreated with a bombed friend, and ended up at 4,0 - Play#0 output Play#0 1 cav cavalry #27 retreated with a bombed friend, and ended up at 4,0 - Play#0 output Play#0 1 cav cavalry #28 retreated with a bombed friend, and ended up at 2,2 - Play#0 output Play#0 1 cav cavalry #29 retreated with a bombed friend, and ended up at 3,1 + Play#0 output Play#0 1 cav cavalry #25 retreats along path bh + Play#0 output Play#0 1 cav cavalry #28 retreats with them + Play#0 output Play#0 1 cav cavalry #25 stopped at 2,2 + Play#0 output Play#0 1 cav cavalry #28 stopped at 2,2 Play#0 output Play#0 1 3,1 takes 2% collateral damage + Play#0 output Play#0 1 1 planes spotted over -1,1 Play#0 output Play#0 1 1 planes spotted over 0,0 Play#0 output Play#0 1 1 pinpoint bombing raid did 72 damage to cav cavalry #60 Play#0 output Play#0 1 cav cavalry #60 takes 27 - Play#0 output Play#0 1 cav cavalry #60 was damaged, and retreated to 3,1 + Play#0 output Play#0 1 cav cavalry #60 retreats along path nj + Play#0 output Play#0 1 cav cavalry #60 stopped at 3,1 Play#0 output Play#0 1 0,0 takes 7% collateral damage Play#0 output Play#0 1 0,0 takes 4% collateral damage Play#0 output Play#0 1 0,0 takes 3% collateral damage Play#0 output Play#0 1 0,0 takes 4% collateral damage Play#0 output Play#0 1 1 pinpoint bombing raid did 68 damage to cav cavalry #64 Play#0 output Play#0 1 cav cavalry #64 takes 26 - Play#0 output Play#0 1 cav cavalry #64 was damaged, and retreated to 3,1 + Play#0 output Play#0 1 cav cavalry #64 retreats along path nj + Play#0 output Play#0 1 cav cavalry #64 stopped at 3,1 Play#0 output Play#0 1 0,0 takes 7% collateral damage Play#0 output Play#0 6 0 640 Play#0 input ship * @@ -1520,35 +1548,35 @@ Play#0 output Play#0 1 2 11 lc light cruis 1,3 93% 0 10 0 0 0 0 0 0 105 45 Play#0 output Play#0 1 2 20 lc light cruis -3,1 96% 0 9 0 0 0 0 0 0 122 45 Play#0 output Play#0 1 1 24 lc light cruis -4,2 g 100% 0 10 0 0 0 0 0 0 127 45 - Play#0 output Play#0 1 2 25 lc light cruis -8,2 g 93% 0 9 0 0 0 0 0 0 93 45 - Play#0 output Play#0 1 2 26 lc light cruis -4,4 g 100% 0 10 0 0 0 0 0 0 103 45 - Play#0 output Play#0 1 2 27 lc light cruis -4,4 g 100% 0 10 0 0 0 0 0 0 103 45 + Play#0 output Play#0 1 2 25 lc light cruis -8,2 g 93% 0 9 0 0 0 0 0 0 94 45 + Play#0 output Play#0 1 2 26 lc light cruis -4,2 g 100% 0 10 0 0 0 0 0 0 127 45 + Play#0 output Play#0 1 2 27 lc light cruis -4,2 g 100% 0 10 0 0 0 0 0 0 127 45 Play#0 output Play#0 1 2 28 lc light cruis -8,2 g 100% 0 10 0 0 0 0 0 0 103 45 - Play#0 output Play#0 1 2 29 lc light cruis 1,3 g 100% 0 10 0 0 0 0 0 0 103 45 + Play#0 output Play#0 1 2 29 lc light cruis 5,3 g 100% 0 10 0 0 0 0 0 0 127 45 Play#0 output Play#0 1 2 31 lc light cruis 4,0 95% 0 9 0 0 0 0 0 0 121 45 Play#0 output Play#0 1 2 32 lc light cruis 0,2 c 100% 0 0 0 0 0 0 0 0 127 45 Play#0 output Play#0 1 2 33 lc light cruis 2,2 95% 0 9 0 0 0 0 0 0 121 45 Play#0 output Play#0 1 2 34 lc light cruis 3,1 94% 0 10 0 0 0 0 0 0 120 45 Play#0 output Play#0 1 2 35 lc light cruis 0,2 c 100% 0 10 0 0 0 0 0 1 0 45 - Play#0 output Play#0 1 2 36 lc light cruis 1,3 c 100% 0 10 0 0 0 0 0 0 115 45 + Play#0 output Play#0 1 2 36 lc light cruis 0,2 c 100% 0 10 0 0 0 0 0 0 127 45 Play#0 output Play#0 1 2 40 lc light cruis 1,3 91% 0 9 0 0 0 0 0 0 -7 45 Play#0 output Play#0 1 2 41 lc light cruis 1,3 96% 0 9 0 0 0 0 0 0 109 45 Play#0 output Play#0 1 2 42 lc light cruis -4,2 95% 0 10 0 0 0 0 0 0 121 45 - Play#0 output Play#0 1 2 43 ms minesweeper -8,4 m 100% 0 10 0 0 0 0 0 0 99 45 - Play#0 output Play#0 1 2 44 ms minesweeper -6,4 m 64% 0 6 0 0 0 0 0 0 70 45 + Play#0 output Play#0 1 2 43 ms minesweeper -6,4 m 87% 0 8 0 0 0 0 0 0 98 45 + Play#0 output Play#0 1 2 44 ms minesweeper -6,4 m 68% 0 6 0 0 0 0 0 0 73 45 Play#0 output Play#0 1 2 46 lc light cruis 5,1 n 93% 0 9 0 0 0 0 0 0 118 45 Play#0 output Play#0 1 2 47 pt patrol boat 4,0 n 100% 0 2 0 0 0 0 0 0 117 45 - Play#0 output Play#0 1 2 50 sb submarine -9,1 67% 0 7 0 0 0 0 0 0 33 60 - Play#0 output Play#0 1 2 51 sb submarine -9,1 64% 0 7 0 0 0 0 0 0 28 60 - Play#0 output Play#0 1 2 52 sb submarine -9,1 73% 0 7 0 0 0 0 0 0 45 60 + Play#0 output Play#0 1 2 50 sb submarine -9,1 67% 0 7 0 0 0 0 0 0 34 60 + Play#0 output Play#0 1 2 51 sb submarine -9,1 64% 0 7 0 0 0 0 0 0 29 60 + Play#0 output Play#0 1 2 52 sb submarine -9,1 73% 0 7 0 0 0 0 0 0 46 60 Play#0 output Play#0 1 2 53 sb submarine -4,-2 73% 0 7 0 0 0 0 0 0 92 60 Play#0 output Play#0 1 2 60 dd destroyer -6,2 100% 0 10 0 0 0 0 0 0 127 70 - Play#0 output Play#0 1 2 61 dd destroyer -4,4 73% 0 7 0 0 0 0 0 0 65 70 - Play#0 output Play#0 1 2 62 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 55 70 + Play#0 output Play#0 1 2 61 dd destroyer -4,4 73% 0 7 0 0 0 0 0 0 66 70 + Play#0 output Play#0 1 2 62 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 56 70 Play#0 output Play#0 1 2 63 dd destroyer -4,4 56% 0 5 0 0 0 0 0 0 37 70 - Play#0 output Play#0 1 2 64 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 55 70 - Play#0 output Play#0 1 2 65 dd destroyer -4,4 59% 0 6 0 0 0 0 0 0 40 70 - Play#0 output Play#0 1 2 66 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 55 70 + Play#0 output Play#0 1 2 64 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 56 70 + Play#0 output Play#0 1 2 65 dd destroyer -4,4 59% 0 6 0 0 0 0 0 0 41 70 + Play#0 output Play#0 1 2 66 dd destroyer -4,4 67% 0 7 0 0 0 0 0 0 56 70 Play#0 output Play#0 1 2 67 dd destroyer -6,2 100% 0 10 0 0 0 0 0 0 127 70 Play#0 output Play#0 1 2 68 dd destroyer -4,4 70% 0 7 0 0 0 0 0 0 61 70 Play#0 output Play#0 1 2 69 dd destroyer -4,4 65% 0 7 0 0 0 0 0 0 53 70 @@ -1557,13 +1585,13 @@ Play#0 output Play#0 1 2 82 dd destroyer -6,2 100% 0 10 0 0 0 0 0 0 127 70 Play#0 output Play#0 1 2 83 dd destroyer -4,4 29% 0 3 0 0 0 0 0 0 -28 70 Play#0 output Play#0 1 2 84 dd destroyer -6,2 100% 0 10 0 0 0 0 0 0 127 70 - Play#0 output Play#0 1 2 100 lc light cruis 2,-6 50% 0 5 0 0 0 0 0 0 15 45 + Play#0 output Play#0 1 2 100 lc light cruis 2,-6 50% 0 5 0 0 0 0 0 0 16 45 Play#0 output Play#0 1 2 101 lc light cruis 0,4 100% 0 10 0 0 0 0 0 0 127 45 - Play#0 output Play#0 1 2 102 lc light cruis 2,-6 71% 0 7 0 0 0 0 0 0 56 45 - Play#0 output Play#0 1 2 103 lc light cruis 2,-6 37% 0 3 0 0 0 0 0 0 -16 45 + Play#0 output Play#0 1 2 102 lc light cruis 2,-6 71% 0 7 0 0 0 0 0 0 57 45 + Play#0 output Play#0 1 2 103 lc light cruis 2,-6 37% 0 3 0 0 0 0 0 0 -15 45 Play#0 output Play#0 1 2 104 lc light cruis 0,4 100% 0 10 0 0 0 0 0 0 127 45 Play#0 output Play#0 1 2 120 sb submarine -9,1 100% 0 10 0 0 0 0 0 0 93 60 - Play#0 output Play#0 1 2 130 tt troop trans -9,1 100% 0 10 0 0 0 0 0 0 95 60 + Play#0 output Play#0 1 2 130 tt troop trans -9,1 100% 0 10 0 0 0 0 0 0 96 60 Play#0 output Play#0 1 57 ships Play#0 output Play#0 6 0 640 Play#0 input retr * ?rflags#0 @@ -1575,16 +1603,20 @@ Play#0 output Play#0 1 2 20 lc light cruis -3,1 u h Play#0 output Play#0 1 1 24 lc light cruis -4,2 g ggg Yes i Play#0 output Play#0 1 2 25 lc light cruis -8,2 g g Yes i + Play#0 output Play#0 1 2 26 lc light cruis -4,2 g bn i + Play#0 output Play#0 1 2 27 lc light cruis -4,2 g bn Yes i Play#0 output Play#0 1 2 28 lc light cruis -8,2 g g Yes b - Play#0 output Play#0 1 2 29 lc light cruis 1,3 g g Yes i + Play#0 output Play#0 1 2 29 lc light cruis 5,3 g ggg Yes i Play#0 output Play#0 1 2 31 lc light cruis 4,0 n i Play#0 output Play#0 1 2 32 lc light cruis 0,2 c n Yes i Play#0 output Play#0 1 2 33 lc light cruis 2,2 n i Play#0 output Play#0 1 2 34 lc light cruis 3,1 n i Play#0 output Play#0 1 2 35 lc light cruis 0,2 c n Yes i + Play#0 output Play#0 1 2 36 lc light cruis 0,2 c n Yes i Play#0 output Play#0 1 2 40 lc light cruis 1,3 nnnh i Play#0 output Play#0 1 2 41 lc light cruis 1,3 uh i Play#0 output Play#0 1 2 42 lc light cruis -4,2 ugggh i + Play#0 output Play#0 1 2 43 ms minesweeper -6,4 m g Yes i Play#0 output Play#0 1 2 44 ms minesweeper -6,4 m g Yes i Play#0 output Play#0 1 2 46 lc light cruis 5,1 n y Yes i Play#0 output Play#0 1 2 53 sb submarine -4,-2 gg h @@ -1596,17 +1628,21 @@ Play#0 output Play#0 1 2 84 dd destroyer -6,2 nn ihb Play#0 output Play#0 1 2 101 lc light cruis 0,4 nn ith Play#0 output Play#0 1 2 104 lc light cruis 0,4 nn ith - Play#0 output Play#0 1 27 ships + Play#0 output Play#0 1 31 ships Play#0 output Play#0 6 0 639 Play#0 input miss s * ?mission#0 q Play#0 command mission Play#0 output Play#0 1 Thing x,y op-sect rad mission Play#0 output Play#0 1 lc light cruiser (#20) -3,1 -3,1 1 is on an interdiction mission + Play#0 output Play#0 1 lc light cruiser (#26) -4,2 -4,2 1 is on an interdiction mission + Play#0 output Play#0 1 lc light cruiser (#27) -4,2 -4,2 1 is on an interdiction mission + Play#0 output Play#0 1 lc light cruiser (#29) 5,3 5,3 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#31) 4,0 4,0 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#32) 0,2 0,2 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#33) 2,2 2,2 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#34) 3,1 3,1 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#35) 0,2 0,2 1 is on an interdiction mission + Play#0 output Play#0 1 lc light cruiser (#36) 0,2 0,2 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#42) -4,2 -4,2 1 is on an interdiction mission Play#0 output Play#0 1 lc light cruiser (#46) 5,1 5,1 1 is on an interdiction mission Play#0 output Play#0 1 sb submarine (#53) -4,-2 -4,-2 1 is on an interdiction mission @@ -1629,34 +1665,34 @@ Play#0 output Play#0 1 1 4 inf infantry -4,0 a 100% 10 0 127 0 50 42% 0 0 Play#0 output Play#0 1 1 7 inf infantry -4,0 a 100% 10 0 127 0 50 42% 0 0 Play#0 output Play#0 1 2 9 tra train 0,2 99% 10 127 126 0 50 42% 0 1 - Play#0 output Play#0 1 2 10 cav cavalry 4,0 61% 6 127 61 0 50 42% 0 0 + Play#0 output Play#0 1 2 10 cav cavalry 3,-1 42% 4 0 29 0 50 42% 0 0 Play#0 output Play#0 1 1 24 cav cavalry 3,1 g 98% 10 0 125 0 50 42% 0 0 - Play#0 output Play#0 1 2 25 cav cavalry 2,2 g 91% 9 127 96 0 50 42% 0 0 - Play#0 output Play#0 1 2 26 cav cavalry 4,0 g 100% 10 127 117 0 50 42% 0 0 - Play#0 output Play#0 1 2 27 cav cavalry 4,0 g 100% 10 127 117 0 50 42% 0 0 - Play#0 output Play#0 1 2 28 cav cavalry 2,2 g 100% 10 127 107 0 50 42% 0 0 - Play#0 output Play#0 1 2 29 cav cavalry 3,1 g 100% 10 127 116 0 50 42% 0 0 - Play#0 output Play#0 1 2 31 cav cavalry 2,2 c 100% 10 127 107 0 50 42% 0 0 35S - Play#0 output Play#0 1 2 32 cav cavalry 2,2 c 100% 0 127 107 0 50 42% 0 0 - Play#0 output Play#0 1 2 33 cav cavalry 1,1 85% 9 127 98 0 50 42% 0 0 - Play#0 output Play#0 1 2 34 cav cavalry 2,2 c 100% 10 127 107 0 50 42% 0 0 9L + Play#0 output Play#0 1 2 25 cav cavalry 2,2 g 91% 9 0 96 0 50 42% 0 0 + Play#0 output Play#0 1 2 26 cav cavalry 3,1 g 100% 10 127 127 0 50 42% 0 0 + Play#0 output Play#0 1 2 27 cav cavalry 3,1 g 100% 10 127 127 0 50 42% 0 0 + Play#0 output Play#0 1 2 28 cav cavalry 2,2 g 100% 10 0 107 0 50 42% 0 0 + Play#0 output Play#0 1 2 29 cav cavalry 4,0 g 100% 10 127 127 0 50 42% 0 0 + Play#0 output Play#0 1 2 31 cav cavalry 0,2 c 100% 10 127 127 0 50 42% 0 0 35S + Play#0 output Play#0 1 2 32 cav cavalry 0,2 c 100% 0 127 127 0 50 42% 0 0 + Play#0 output Play#0 1 2 33 cav cavalry -1,1 85% 9 127 108 0 50 42% 0 0 + Play#0 output Play#0 1 2 34 cav cavalry 0,2 c 100% 10 127 127 0 50 42% 0 0 9L Play#0 output Play#0 1 2 35 cav cavalry 0,2 c 100% 10 127 0 0 50 42% 0 0 - Play#0 output Play#0 1 2 36 cav cavalry 2,2 c 100% 10 127 107 0 50 42% 0 0 - Play#0 output Play#0 1 2 37 tra train 1,1 82% 8 127 105 0 50 42% 0 0 - Play#0 output Play#0 1 2 40 cav cavalry 2,2 91% 9 127 -14 0 50 42% 0 0 - Play#0 output Play#0 1 2 41 cav cavalry 3,1 89% 9 127 103 0 50 42% 0 0 + Play#0 output Play#0 1 2 36 cav cavalry 0,2 c 100% 10 127 127 0 50 42% 0 0 + Play#0 output Play#0 1 2 37 tra train 1,1 82% 9 127 105 0 50 42% 0 0 + Play#0 output Play#0 1 2 40 cav cavalry 2,2 91% 9 0 -14 0 50 42% 0 0 + Play#0 output Play#0 1 2 41 cav cavalry 2,0 89% 9 0 44 0 50 42% 0 0 Play#0 output Play#0 1 2 42 cav cavalry 1,1 86% 9 127 109 0 50 42% 0 0 - Play#0 output Play#0 1 2 43 eng engineer 1,1 m 100% 10 127 127 0 130 42% 0 0 - Play#0 output Play#0 1 2 44 eng engineer 1,-1 m 90% 9 127 88 0 130 42% 0 0 - Play#0 output Play#0 1 2 45 tra train 1,-1 t 84% 9 127 65 0 50 42% 0 0 - Play#0 output Play#0 1 2 46 cav cavalry 0,0 t 92% 9 127 99 0 50 42% 0 0 + Play#0 output Play#0 1 2 43 eng engineer 1,-1 m 100% 10 0 89 0 130 42% 0 0 + Play#0 output Play#0 1 2 44 eng engineer 1,-1 m 90% 9 0 76 0 130 42% 0 0 + Play#0 output Play#0 1 2 45 tra train 1,-1 t 84% 9 0 65 0 50 42% 0 0 + Play#0 output Play#0 1 2 46 cav cavalry 0,-2 t 100% 10 127 127 0 50 42% 0 0 Play#0 output Play#0 1 2 47 cav cavalry 1,-1 s 91% 9 127 115 0 50 42% 0 0 - Play#0 output Play#0 1 2 48 spy infiltrato 1,-1 s 100% 0 127 127 0 50 42% 0 0 - Play#0 output Play#0 1 2 60 cav cavalry 3,1 73% 7 127 71 0 50 42% 0 0 + Play#0 output Play#0 1 2 48 spy infiltrato -1,-1 s 100% 0 0 116 0 50 42% 0 0 + Play#0 output Play#0 1 2 60 cav cavalry 3,1 73% 7 0 72 0 50 42% 0 0 Play#0 output Play#0 1 2 61 cav cavalry 0,0 100% 10 127 127 0 50 42% 0 0 Play#0 output Play#0 1 2 62 cav cavalry 0,0 100% 10 127 127 0 50 42% 0 0 Play#0 output Play#0 1 2 63 cav cavalry 0,0 100% 10 127 127 0 50 42% 0 0 - Play#0 output Play#0 1 2 64 cav cavalry 3,1 74% 7 127 72 0 50 42% 0 0 + Play#0 output Play#0 1 2 64 cav cavalry 3,1 74% 7 0 73 0 50 42% 0 0 Play#0 output Play#0 1 35 units Play#0 output Play#0 6 0 637 Play#0 input lretr * ?rflags#0 @@ -1665,33 +1701,44 @@ Play#0 output Play#0 1 1 2 inf infantry -3,1 yujnbgyuj ihb Play#0 output Play#0 1 1 4 inf infantry -4,0 a b Yes h Play#0 output Play#0 1 1 7 inf infantry -4,0 a b Yes h - Play#0 output Play#0 1 2 10 cav cavalry 4,0 y b Play#0 output Play#0 1 1 24 cav cavalry 3,1 g bhg Yes b Play#0 output Play#0 1 2 25 cav cavalry 2,2 g g Yes b + Play#0 output Play#0 1 2 26 cav cavalry 3,1 g uh b + Play#0 output Play#0 1 2 27 cav cavalry 3,1 g uh Yes b Play#0 output Play#0 1 2 28 cav cavalry 2,2 g g Yes i - Play#0 output Play#0 1 2 29 cav cavalry 3,1 g g Yes b + Play#0 output Play#0 1 2 29 cav cavalry 4,0 g bhg Yes b + Play#0 output Play#0 1 2 31 cav cavalry 0,2 c j Yes b + Play#0 output Play#0 1 2 32 cav cavalry 0,2 c j Yes b + Play#0 output Play#0 1 2 33 cav cavalry -1,1 j b + Play#0 output Play#0 1 2 34 cav cavalry 0,2 c j Yes b Play#0 output Play#0 1 2 35 cav cavalry 0,2 c j Yes b + Play#0 output Play#0 1 2 36 cav cavalry 0,2 c j Yes b Play#0 output Play#0 1 2 37 tra train 1,1 j b Play#0 output Play#0 1 2 40 cav cavalry 2,2 u b - Play#0 output Play#0 1 2 41 cav cavalry 3,1 y b Play#0 output Play#0 1 2 42 cav cavalry 1,1 g b - Play#0 output Play#0 1 2 43 eng engineer 1,1 m yu Yes b Play#0 output Play#0 1 2 45 tra train 1,-1 t b Yes b + Play#0 output Play#0 1 2 46 cav cavalry 0,-2 t nb Yes b Play#0 output Play#0 1 2 47 cav cavalry 1,-1 s gh Yes b - Play#0 output Play#0 1 2 48 spy infiltrator 1,-1 s gh Yes b Play#0 output Play#0 1 2 61 cav cavalry 0,0 nj ihb Play#0 output Play#0 1 2 62 cav cavalry 0,0 nj ihb Play#0 output Play#0 1 2 63 cav cavalry 0,0 nj ihb - Play#0 output Play#0 1 20 units + Play#0 output Play#0 1 24 units Play#0 output Play#0 6 0 636 Play#0 input miss l * ?mission#0 q Play#0 command mission Play#0 output Play#0 1 Thing x,y op-sect rad mission + Play#0 output Play#0 1 cav cavalry #26 3,1 3,1 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #27 3,1 3,1 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #29 4,0 4,0 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #31 0,2 0,2 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #32 0,2 0,2 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #33 -1,1 -1,1 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #34 0,2 0,2 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #35 0,2 0,2 3 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #36 0,2 0,2 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #42 1,1 1,1 3 is on a reserve mission - Play#0 output Play#0 1 eng engineer #43 1,1 1,1 1 is on a reserve mission + Play#0 output Play#0 1 cav cavalry #46 0,-2 0,-2 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #47 1,-1 1,-1 3 is on a reserve mission - Play#0 output Play#0 1 spy infiltrator #48 1,-1 1,-1 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #61 0,0 0,0 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #62 0,0 0,0 3 is on a reserve mission Play#0 output Play#0 1 cav cavalry #63 0,0 0,0 3 is on a reserve mission