(shp_sweep): New parameter takemob. Charge mobility only if it's

true.
(shp_nav_one_sector): Pass false.  This lets minesweepers move at the
speed their stats indicate.  Closes #1498801.
(navi): Pass true.  This ensures sweeping without moving still costs
mobility.
This commit is contained in:
Markus Armbruster 2006-06-11 18:09:09 +00:00
parent 0252d4a750
commit f900ac68cb
3 changed files with 9 additions and 7 deletions

View file

@ -656,7 +656,7 @@ extern void show_news(int);
/* shpsub.c */ /* shpsub.c */
extern void shp_sel(struct nstr_item *, struct emp_qelem *); extern void shp_sel(struct nstr_item *, struct emp_qelem *);
extern void shp_nav(struct emp_qelem *, double *, double *, int *, natid); extern void shp_nav(struct emp_qelem *, double *, double *, int *, natid);
extern int shp_sweep(struct emp_qelem *, int, natid); extern int shp_sweep(struct emp_qelem *, int, int, natid);
extern char *shp_path(int, struct shpstr *, char *); extern char *shp_path(int, struct shpstr *, char *);
extern void shp_put(struct emp_qelem *, natid); extern void shp_put(struct emp_qelem *, natid);
extern void shp_list(struct emp_qelem *); extern void shp_list(struct emp_qelem *);

View file

@ -156,7 +156,7 @@ navi(void)
} else if (cp[-1] == 'i') { } else if (cp[-1] == 'i') {
shp_list(&ship_list); shp_list(&ship_list);
} else { } else {
stopping |= shp_sweep(&ship_list, 1, player->cnum); stopping |= shp_sweep(&ship_list, 1, 0, player->cnum);
} }
continue; continue;
} else if (*cp == 'r' || *cp == 'l' || *cp == 's') { } else if (*cp == 'r' || *cp == 'l' || *cp == 's') {

View file

@ -210,7 +210,7 @@ shp_put(struct emp_qelem *list, natid actor)
} }
int int
shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor) shp_sweep(struct emp_qelem *ship_list, int verbose, int takemob, natid actor)
{ {
struct emp_qelem *qp; struct emp_qelem *qp;
struct emp_qelem *next; struct emp_qelem *next;
@ -229,7 +229,7 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
prship(&mlp->ship)); prship(&mlp->ship));
continue; continue;
} }
if (mlp->mobil <= 0.0) { if (takemob && mlp->mobil <= 0.0) {
if (verbose) if (verbose)
mpr(actor, "%s is out of mobility!\n", prship(&mlp->ship)); mpr(actor, "%s is out of mobility!\n", prship(&mlp->ship));
continue; continue;
@ -241,8 +241,10 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
prship(&mlp->ship)); prship(&mlp->ship));
continue; continue;
} }
if (takemob) {
mlp->mobil -= shp_mobcost(&mlp->ship); mlp->mobil -= shp_mobcost(&mlp->ship);
mlp->ship.shp_mobil = (int)mlp->mobil; mlp->ship.shp_mobil = (int)mlp->mobil;
}
putship(mlp->ship.shp_uid, &mlp->ship); putship(mlp->ship.shp_uid, &mlp->ship);
if (!(mines = sect.sct_mines)) if (!(mines = sect.sct_mines))
continue; continue;
@ -877,7 +879,7 @@ shp_nav_one_sector(struct emp_qelem *list, int dir, natid actor,
} }
if (QEMPTY(list)) if (QEMPTY(list))
return stopping; return stopping;
stopping |= shp_sweep(list, 0, actor); stopping |= shp_sweep(list, 0, 0, actor);
if (QEMPTY(list)) if (QEMPTY(list))
return stopping; return stopping;
stopping |= shp_check_mines(list); stopping |= shp_check_mines(list);