Use feels_like_helping() in dosupport(), lnd_support()
authorMarkus Armbruster <armbru@pond.sub.org>
Mon, 31 Jan 2011 19:53:44 +0000 (20:53 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 13 Feb 2011 15:06:22 +0000 (16:06 +0100)
feels_like_helping() case cn == foe is missing in the code it
replaces.  No difference in behavior, because:

* cn == foe && cn == friend can't happen.  Because you can't get into
  ground combat against yourself (assault, attack and paradrop don't
  let you), friend != foe for support.

* cn == foe && cn != friend behaves the same: no support.
  feels_like_helping() returns 0 because of the explicit case.  The
  replaced code doesn't support because cn can't be at war with
  itself.

src/lib/subs/lndsub.c
src/lib/subs/mission.c

index 1845bdeaa2038daf584be1f7ec4ceb329d8d1977..35ecaec3532d40bdf06c3ed0203082caef489ef4 100644 (file)
@@ -1068,16 +1068,15 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor,
 }
 
 /*
- * find all artillery units belonging
- * to the attacker or defender that can fire.
- * Each arty unit adds +1%/damage point
+ * Fire land unit support against VICTIM for ATTACKER, at X,Y.
+ * If DEFENDING, this is defensive support, else offensive support.
+ * Return total damage.
  */
 int
 lnd_support(natid victim, natid attacker, coord x, coord y, int defending)
 {
     struct nstr_item ni;
     struct lndstr land;
-    int rel, rel2;
     int dam, dam2;
     int dist;
     int range;
@@ -1087,10 +1086,7 @@ lnd_support(natid victim, natid attacker, coord x, coord y, int defending)
     while (nxtitem(&ni, &land)) {
        if ((land.lnd_x == x) && (land.lnd_y == y))
            continue;
-       rel = getrel(getnatp(land.lnd_own), attacker);
-       rel2 = getrel(getnatp(land.lnd_own), victim);
-       if ((land.lnd_own != attacker) &&
-           ((rel != ALLIED) || (rel2 != AT_WAR)))
+       if (!feels_like_helping(land.lnd_own, attacker, victim))
            continue;
 
        /* are we in range? */
index 8b475cc667a38222ba612509624b7715ebc657ea..ab8e58954ba1811a538f76753c6065d01680f125 100644 (file)
@@ -231,6 +231,11 @@ def_support(coord x, coord y, natid victim, natid actee)
     return dosupport(x, y, victim, actee, MI_DSUPPORT);
 }
 
+/*
+ * Perform support missions in X,Y against VICTIM for ACTEE.
+ * MISSION is either MI_OSUPPORT or MI_DSUPPORT.
+ * Return total damage.
+ */
 static int
 dosupport(coord x, coord y, natid victim, natid actee, int mission)
 {
@@ -243,9 +248,7 @@ dosupport(coord x, coord y, natid victim, natid actee, int mission)
     memset(mi, 0, sizeof(mi));
     act[0] = 0;
     for (cn = 1; cn < MAXNOC; cn++) {
-       act[cn] = (cn == actee
-                  || (getrel(getnatp(cn), actee) == ALLIED
-                      && getrel(getnatp(cn), victim) == AT_WAR));
+       act[cn] = feels_like_helping(cn, actee, victim);
        emp_initque((struct emp_qelem *)&mi[cn]);
     }