From 91c2ecec53ebbc6eb3bd05bb89fc1d9bc185e3d9 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 9 Jul 2011 17:46:40 +0200 Subject: [PATCH] Land units loaded on land units fight che again They didn't since commit 93d033cf, v4.3.26. Drawback: micromanagement incentive to unload them for the update. Similar incentive has always existed for military on ships. Since the previous commit, land units loaded on land units get unloaded when the carrier dies fighting che. Such land units get stuck in the sector if the take over, and can be boarded. Doesn't feel right, and increases the micromanagement incentive. Avoid by letting them fight. --- src/lib/update/revolt.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lib/update/revolt.c b/src/lib/update/revolt.c index a5bed8f5..0b257e4d 100644 --- a/src/lib/update/revolt.c +++ b/src/lib/update/revolt.c @@ -162,7 +162,7 @@ guerrilla(struct sctstr *sp) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; mil += lp->lnd_item[I_MILIT]; @@ -440,7 +440,7 @@ take_casualties(struct sctstr *sp, int mc) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; nunits++; if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY) @@ -457,7 +457,7 @@ take_casualties(struct sctstr *sp, int mc) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY)) continue; @@ -486,7 +486,7 @@ take_casualties(struct sctstr *sp, int mc) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY) continue; @@ -516,7 +516,7 @@ take_casualties(struct sctstr *sp, int mc) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY) continue; @@ -533,7 +533,7 @@ take_casualties(struct sctstr *sp, int mc) while (NULL != (lp = nxtitemp(&ni))) { if (lp->lnd_own != sp->sct_own) continue; - if (lp->lnd_ship >= 0 || lp->lnd_land >= 0) + if (lp->lnd_ship >= 0) continue; if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY)) continue; @@ -562,6 +562,12 @@ lnd_dies_fighting_che(struct lndstr *lp) makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, lp->lnd_x, lp->lnd_y); lp->lnd_own = 0; + /* Take dead lp off its carrier */ + if (lp->lnd_land >= 0) { + lnd_carrier_change(lp, EF_LAND, lp->lnd_land, -1); + lp->lnd_land = -1; + } + /* Unload lp's land unit cargo */ for (i = lnd_first_on_land(lp); i >= 0; i = lnd_next_on_unit(i)) { clp = getlandp(i);