/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure, Markus Armbruster
*
* Empire is free software: you can redistribute it and/or modify
* move.c: Move something somewhere.
*
* Known contributors to this file:
- * Markus Armbruster, 2004-2011
+ * Markus Armbruster, 2004-2012
*/
#include <config.h>
#include <ctype.h>
+#include "chance.h"
#include "damage.h"
-#include "file.h"
#include "map.h"
#include "nsc.h"
#include "path.h"
int
move_ground(struct sctstr *start, struct sctstr *end,
double weight, char *path,
- int (*map)(coord, coord, char *), int exploring,
- int *dam)
+ int (*map)(coord, coord, char *, char *),
+ int exploring, int *dam)
{
struct sctstr sect;
struct sctstr next;
size_t len;
double mobility = start->sct_mobil;
int dir;
- int intcost;
+ char scanspace[1024];
+ char *argp[128];
int takedam = *dam;
int out = 0;
char prompt[128];
curx = start->sct_x;
cury = start->sct_y;
total_mcost = 0.0;
- if (getsect(curx, cury, §) < 0) {
+ if (!getsect(curx, cury, §)) {
logerror("move_path: getsect %d,%d", curx, cury);
return -1;
}
oldy = cury;
if (!movstr || *movstr == 0) {
if (exploring) {
- map(curx, cury, NULL);
+ map(curx, cury, NULL, NULL);
} else {
move_map(curx, cury, NULL);
}
*movstr = 0;
continue;
}
- movstr++;
if (dir == DIR_MAP) {
+ parse(movstr, scanspace, argp, NULL, NULL, NULL);
if (!exploring)
- map(curx, cury, movstr + 1);
+ map(curx, cury, argp[1], argp[2]);
*movstr = 0;
continue;
- } else if (dir == DIR_STOP)
+ }
+ movstr++;
+ if (dir == DIR_STOP)
break;
- else if (dir == DIR_VIEW) {
+ if (dir == DIR_VIEW) {
pr("%d%% %s with %d civilians.\n", sect.sct_effic,
dchr[sect.sct_type].d_name, sect.sct_item[I_CIVIL]);
continue;
*/
tmpx = curx + diroff[dir][0];
tmpy = cury + diroff[dir][1];
- if (getsect(tmpx, tmpy, &next) < 0) {
+ if (!getsect(tmpx, tmpy, &next)) {
pr("You can't go there...\n");
*movstr = 0;
continue;
break;
}
*end = sect;
- intcost = (int)total_mcost;
- if (intcost < 0)
- return -1;
if ((start->sct_x == end->sct_x) && (start->sct_y == end->sct_y)
&& !out)
return -1;
- if (chance(total_mcost - intcost))
- intcost++;
- return intcost;
+ return roundavg(total_mcost);
}