diff --git a/info/Maintenance.t b/info/Maintenance.t index 141836eb..3b265a24 100644 --- a/info/Maintenance.t +++ b/info/Maintenance.t @@ -23,9 +23,10 @@ Also note that engineering land units costs 3 times what normal units cost, after the tech is figured in. .s1 If you can not afford to pay maintenance costs then your unit will -lose ETU/5 points of -efficiency. Thus, if you were playing in a 60 ETU game, and you did -not pay your maintenance costs for a 50% frigate, then the frigate -would drop to 38% efficiency. +lose ETU/5 points of efficiency. It won't go below its minimum +efficiency, though. Thus, if you were playing in a 60 ETU game, and +you did not pay your maintenance costs for a 40% frigate, then the +frigate would drop to 28% efficiency at the first update, and to 20% +at the second update. .s1 .SA "Unit-types, Ship-types, Plane-types, Ships, LandUnits, Planes, Updates" diff --git a/src/lib/update/land.c b/src/lib/update/land.c index 669b732f..09c975d5 100644 --- a/src/lib/update/land.c +++ b/src/lib/update/land.c @@ -94,11 +94,8 @@ upd_land(struct lndstr *lp, int etus, { struct lchrstr *lcp; int pstage, ptime; - int n; int min = morale_base - (int)np->nat_level[NAT_HLEV]; - int mult; - int cost; - int eff; + int n, mult, cost, eff_lost; if (!player->simulation) if (lp->lnd_retreat < min) @@ -118,19 +115,14 @@ upd_land(struct lndstr *lp, int etus, mult *= 3; cost = -(mult * etus * MIN(0.0, money_land * lcp->l_cost)); if (np->nat_money < cost && !player->simulation) { - if ((eff = lp->lnd_effic - etus / 5) < LAND_MINEFF) { - wu(0, lp->lnd_own, - "%s lost to lack of maintenance\n", prland(lp)); - makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, - lp->lnd_x, lp->lnd_y); - lp->lnd_own = 0; - lp->lnd_ship = lp->lnd_land = -1; - return; + eff_lost = etus / 5; + if (lp->lnd_effic - eff_lost < LAND_MINEFF) + eff_lost = lp->lnd_effic - LAND_MINEFF; + if (eff_lost > 0) { + wu(0, lp->lnd_own, "%s lost %d%% to lack of maintenance\n", + prland(lp), eff_lost); + lp->lnd_effic -= eff_lost; } - wu(0, lp->lnd_own, - "%s lost %d%% to lack of maintenance\n", - prland(lp), lp->lnd_effic - eff); - lp->lnd_effic = eff; } else { np->nat_money -= cost; } diff --git a/src/lib/update/plane.c b/src/lib/update/plane.c index 88c53818..acf0fc19 100644 --- a/src/lib/update/plane.c +++ b/src/lib/update/plane.c @@ -29,7 +29,7 @@ * Known contributors to this file: * Dave Pare, 1986 * Steve McClure, 1998 - * Markus Armbruster, 2006-2010 + * Markus Armbruster, 2006-2011 */ #include @@ -90,7 +90,7 @@ upd_plane(struct plnstr *pp, int etus, struct natstr *np, struct bp *bp, int build) { struct plchrstr *pcp = &plchr[(int)pp->pln_type]; - int mult, cost, eff; + int mult, cost, eff_lost; if (build == 1) { if (!pp->pln_off && np->nat_money >= 0) @@ -103,19 +103,14 @@ upd_plane(struct plnstr *pp, int etus, mult = 2; cost = -(mult * etus * MIN(0.0, pcp->pl_cost * money_plane)); if (np->nat_money < cost && !player->simulation) { - if ((eff = pp->pln_effic - etus / 5) < PLANE_MINEFF) { - wu(0, pp->pln_own, - "%s lost to lack of maintenance\n", prplane(pp)); - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); - pp->pln_own = 0; - pp->pln_ship = pp->pln_land = -1; - return; + eff_lost = etus / 5; + if (pp->pln_effic - eff_lost < PLANE_MINEFF) + eff_lost = pp->pln_effic - PLANE_MINEFF; + if (eff_lost > 0) { + wu(0, pp->pln_own, "%s lost %d%% to lack of maintenance\n", + prplane(pp), eff_lost); + pp->pln_effic -= eff_lost; } - wu(0, pp->pln_own, - "%s lost %d%% to lack of maintenance\n", - prplane(pp), pp->pln_effic - eff); - pp->pln_effic = eff; } else { np->nat_money -= cost; } diff --git a/src/lib/update/ship.c b/src/lib/update/ship.c index 108ebf5d..ec206873 100644 --- a/src/lib/update/ship.c +++ b/src/lib/update/ship.c @@ -30,7 +30,7 @@ * Dave Pare, 1986 * Steve McClure, 1996 * Ron Koenderink, 2004 - * Markus Armbruster, 2006-2010 + * Markus Armbruster, 2006-2011 */ #include @@ -104,10 +104,7 @@ upd_ship(struct shpstr *sp, int etus, struct pchrstr *product; unsigned char *resource; int dep; - int n; - int mult; - int cost; - int eff; + int n, mult, cost, eff_lost; mp = &mchr[(int)sp->shp_type]; if (build == 1) { @@ -121,18 +118,14 @@ upd_ship(struct shpstr *sp, int etus, mult = 2; cost = -(mult * etus * MIN(0.0, money_ship * mp->m_cost)); if (np->nat_money < cost && !player->simulation) { - if ((eff = sp->shp_effic - etus / 5) < SHIP_MINEFF) { - wu(0, sp->shp_own, - "%s lost to lack of maintenance\n", prship(sp)); - makelost(EF_SHIP, sp->shp_own, sp->shp_uid, - sp->shp_x, sp->shp_y); - sp->shp_own = 0; - return; + eff_lost = etus / 5; + if (sp->shp_effic - eff_lost < SHIP_MINEFF) + eff_lost = sp->shp_effic - SHIP_MINEFF; + if (eff_lost > 0) { + wu(0, sp->shp_own, "%s lost %d%% to lack of maintenance\n", + prship(sp), eff_lost); + sp->shp_effic -= eff_lost; } - wu(0, sp->shp_own, - "%s lost %d%% to lack of maintenance\n", - prship(sp), sp->shp_effic - eff); - sp->shp_effic = eff; } else { np->nat_money -= cost; }