Fix pin bomb not to report subs when there are none

pin_bomb() computed the number of foreign subs as number of ships less
number of foreign surface ships.  This counted own surface ships as
subs.

Change it to count foreign subs directly.  Closes #906040.

However, shipsatxy(), the function for counting foreign ships, also
lists them.  Add a parameter to suppress that, and change its callers.
This commit is contained in:
Markus Armbruster 2008-05-11 13:43:26 +02:00
parent 221e88f106
commit 286388dcdc
3 changed files with 13 additions and 13 deletions

View file

@ -465,7 +465,7 @@ extern double torprange(struct shpstr *);
extern double fortrange(struct sctstr *); extern double fortrange(struct sctstr *);
extern int roundrange(double); extern int roundrange(double);
/* list.c */ /* list.c */
extern int shipsatxy(coord, coord, int, int); extern int shipsatxy(coord, coord, int, int, int);
extern int carriersatxy(coord, coord, natid); extern int carriersatxy(coord, coord, natid);
extern int unitsatxy(coord, coord, int, int); extern int unitsatxy(coord, coord, int, int);
extern int planesatxy(coord, coord, int, int); extern int planesatxy(coord, coord, int, int);

View file

@ -209,13 +209,11 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target)
effadv((int)target->sct_effic), dcp->d_name); effadv((int)target->sct_effic), dcp->d_name);
nsubs = 0; nsubs = 0;
plp = (struct plist *)list->q_forw; plp = (struct plist *)list->q_forw;
nships = shipsatxy(target->sct_x, target->sct_y, 0, M_SUB, 0);
if (plp->pcp->pl_flags & P_A) { if (plp->pcp->pl_flags & P_A) {
nships = num_shipsatxy(target->sct_x, target->sct_y, 0, 0); nsubs = shipsatxy(target->sct_x, target->sct_y, M_SUB, 0, 1);
nsubs = nships - shipsatxy(target->sct_x, target->sct_y, 0, M_SUB);
if (nsubs > 0) if (nsubs > 0)
pr("Some subs are present in the sector.\n"); pr("Some subs are present in the sector.\n");
} else {
nships = shipsatxy(target->sct_x, target->sct_y, 0, M_SUB);
} }
nplanes = planesatxy(target->sct_x, target->sct_y, 0, 0); nplanes = planesatxy(target->sct_x, target->sct_y, 0, 0);
nunits = unitsatxy(target->sct_x, target->sct_y, 0, 0); nunits = unitsatxy(target->sct_x, target->sct_y, 0, 0);
@ -481,7 +479,7 @@ ship_bomb(struct emp_qelem *list, struct sctstr *target)
nships = asw_shipsatxy(target->sct_x, target->sct_y, 0, 0, nships = asw_shipsatxy(target->sct_x, target->sct_y, 0, 0,
&plp->plane, &head); &plp->plane, &head);
else else
nships = shipsatxy(target->sct_x, target->sct_y, 0, M_SUB); nships = shipsatxy(target->sct_x, target->sct_y, 0, M_SUB, 0);
if (nships == 0) { if (nships == 0) {
pr("%s could not find any ships!\n", prplane(&plp->plane)); pr("%s could not find any ships!\n", prplane(&plp->plane));
continue; continue;
@ -501,7 +499,7 @@ ship_bomb(struct emp_qelem *list, struct sctstr *target)
if (plp->pcp->pl_flags & P_A) if (plp->pcp->pl_flags & P_A)
print_shiplist(head); print_shiplist(head);
else else
shipsatxy(target->sct_x, target->sct_y, 0, M_SUB); shipsatxy(target->sct_x, target->sct_y, 0, M_SUB, 0);
continue; continue;
} }
if (*q == 'd') if (*q == 'd')

View file

@ -48,7 +48,7 @@
#include "xy.h" #include "xy.h"
int int
shipsatxy(coord x, coord y, int wantflags, int nowantflags) shipsatxy(coord x, coord y, int wantflags, int nowantflags, int only_count)
{ {
int first; int first;
int ships; int ships;
@ -73,12 +73,14 @@ shipsatxy(coord x, coord y, int wantflags, int nowantflags)
if (mp->m_flags & nowantflags) if (mp->m_flags & nowantflags)
continue; continue;
} }
if (first) { if (!only_count) {
pr(" # owner eff type\n"); if (first) {
first = 0; pr(" # owner eff type\n");
first = 0;
}
pr("(#%3d) %10.10s %12.12s %s\n", ni.cur,
cname(ship.shp_own), effadv(ship.shp_effic), prship(&ship));
} }
pr("(#%3d) %10.10s %12.12s %s\n", ni.cur,
cname(ship.shp_own), effadv(ship.shp_effic), prship(&ship));
ships++; ships++;
} }
return ships; return ships;