Fix che revolt to damage only land units that actually fight
authorMarkus Armbruster <armbru@pond.sub.org>
Thu, 13 May 2010 17:48:20 +0000 (19:48 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 13 May 2010 18:08:21 +0000 (20:08 +0200)
guerrilla() lets only the sector owner's land units fight.  But
take_casualties() spread the casualties among all land units in the
sector.  Thus, defending land units could survive a defeat if foreign
land units were present.  The sector takeover then had che capture
them, or their crews blow them up.  The foreign land units were
damaged silently.

src/lib/update/revolt.c

index da8b22849dc57db4645e008944171405a7657398..f8aef8dc0d06aed411848385b2fffa781bf6117e 100644 (file)
@@ -439,6 +439,8 @@ take_casualties(struct sctstr *sp, int mc)
      */
     snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
     while (NULL != (lp = nxtitemp(&ni))) {
+       if (lp->lnd_own != sp->sct_own)
+           continue;
        nunits++;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            nunits++;
@@ -452,6 +454,8 @@ take_casualties(struct sctstr *sp, int mc)
     /* kill some security troops */
     snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
     while (NULL != (lp = nxtitemp(&ni))) {
+       if (lp->lnd_own != sp->sct_own)
+           continue;
        if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY))
            continue;
 
@@ -477,6 +481,8 @@ take_casualties(struct sctstr *sp, int mc)
     /* kill some normal troops */
     snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
     while (NULL != (lp = nxtitemp(&ni))) {
+       if (lp->lnd_own != sp->sct_own)
+           continue;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            continue;
 
@@ -503,6 +509,8 @@ take_casualties(struct sctstr *sp, int mc)
     /* kill some normal troops */
     snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
     while (NULL != (lp = nxtitemp(&ni))) {
+       if (lp->lnd_own != sp->sct_own)
+           continue;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            continue;
 
@@ -521,6 +529,8 @@ take_casualties(struct sctstr *sp, int mc)
     /* kill some security troops */
     snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y);
     while (NULL != (lp = nxtitemp(&ni))) {
+       if (lp->lnd_own != sp->sct_own)
+           continue;
        if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY))
            continue;