Land units loaded on land units fight che again
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 9 Jul 2011 15:46:40 +0000 (17:46 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 10 Jul 2011 19:10:17 +0000 (21:10 +0200)
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

index a5bed8f5a4ce21a34362abfe13f7c27e0735f8fb..0b257e4d7d39722e2a7b9009368760343349d0db 100644 (file)
@@ -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);