Don't let embarked land units fight a che revolt
authorMarkus Armbruster <armbru@pond.sub.org>
Thu, 13 May 2010 18:12:19 +0000 (20:12 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 13 May 2010 18:12:19 +0000 (20:12 +0200)
When take_casualties() kills a land unit, it neglects to take it off
its carrier.  This triggers an oops in unit_cargo_init().  Instead of
fixing this, just don't let them fight.  They can't defend against
other attacks, either.

src/lib/update/revolt.c

index f8aef8dc0d06aed411848385b2fffa781bf6117e..dfc9029e1af058d17c0eb96a4a66fa002ff88a9e 100644 (file)
@@ -164,6 +164,8 @@ 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)
+           continue;
 
        mil += lp->lnd_item[I_MILIT];
 
@@ -441,6 +443,8 @@ 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)
+           continue;
        nunits++;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            nunits++;
@@ -456,6 +460,8 @@ 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)
+           continue;
        if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY))
            continue;
 
@@ -483,6 +489,8 @@ 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)
+           continue;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            continue;
 
@@ -511,6 +519,8 @@ 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)
+           continue;
        if (lchr[(int)lp->lnd_type].l_flags & L_SECURITY)
            continue;
 
@@ -531,6 +541,8 @@ 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)
+           continue;
        if (!(lchr[(int)lp->lnd_type].l_flags & L_SECURITY))
            continue;