/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
#include <config.h>
-#include <string.h>
+#include "damage.h"
+#include "file.h"
+#include "land.h"
+#include "map.h"
#include "misc.h"
-#include "player.h"
#include "nat.h"
-#include "retreat.h"
-#include "ship.h"
-#include "land.h"
-#include "sect.h"
#include "news.h"
-#include "xy.h"
#include "nsc.h"
+#include "optlist.h"
#include "path.h"
-#include "file.h"
-#include "damage.h"
+#include "player.h"
#include "prototypes.h"
-#include "optlist.h"
+#include "retreat.h"
+#include "sect.h"
+#include "ship.h"
+#include "xy.h"
static int findcondition(char);
static int retreat_land1(struct lndstr *, char, int);
char *desc[2];
};
-struct ccode conditions[] = {
+static struct ccode conditions[] = {
{ 'i', { "retreated with a damaged friend",
"was damaged" } },
{ 't', { "retreated with a torpedoed ship",
return 0;
}
- n = (-1 * MAX_RETREAT);
+ n = -MAX_RETREAT;
stopping = 0;
while (!stopping && n) {
dx = dy = 0;
mcp = &mchr[(int)sp->shp_type];
newx = xnorm(sp->shp_x + dx);
newy = ynorm(sp->shp_y + dy);
- mobcost = sp->shp_effic * 0.01 * sp->shp_speed;
- mobcost = 480.0 / (mobcost + techfact(sp->shp_tech, mobcost));
+ mobcost = shp_mobcost(sp);
getsect(newx, newy, §);
if (shp_check_nav(§, sp) != CN_NAVIGABLE ||
mines = sect.sct_mines;
changed = 0;
if ((mcp->m_flags & M_SWEEP) && sect.sct_type == SCT_WATER) {
- sp->shp_mobil -= mobcost;
max = mcp->m_item[I_SHELL];
shells = sp->shp_item[I_SHELL];
for (m = 0; mines > 0 && m < 5; m++) {
}
if (orig) {
- wu(0, sp->shp_own, "%s %s, and retreated to %s\n", prship(sp),
- conditions[findcondition(code)].desc[orig],
+ wu(0, sp->shp_own, "%s %s, and retreated to %s\n",
+ prship(sp), conditions[findcondition(code)].desc[orig],
xyas(sp->shp_x, sp->shp_y, sp->shp_own));
} else {
wu(0, sp->shp_own, "%s %s, and ended up at %s\n",
return 0;
}
- n = (-1 * MAX_RETREAT);
+ n = -MAX_RETREAT;
stopping = 0;
while (!stopping && n) {
dx = dy = 0;
newy = ynorm(lp->lnd_y + dy);
getsect(newx, newy, §);
- if ((sect.sct_type == SCT_WATER) ||
- (sect.sct_type == SCT_MOUNT) ||
- (sect.sct_type == SCT_SANCT) ||
- (sect.sct_type == SCT_WASTE) ||
- (sect.sct_own != lp->lnd_own)) {
+ mobcost = lnd_mobcost(lp, §);
+ if (mobcost < 0
+ || sect.sct_type == SCT_MOUNT
+ || sect.sct_own != lp->lnd_own) {
wu(0, lp->lnd_own, "%s %s,\nbut could not retreat to %s!\n",
prland(lp),
conditions[findcondition(code)].desc[orig],
putland(lp->lnd_uid, lp);
return 0;
}
- mobcost = lnd_mobcost(lp, §, MOB_ROAD);
lp->lnd_x = newx;
lp->lnd_y = newy;
lp->lnd_mobil -= mobcost;
xyas(newx, newy, lp->lnd_own));
nreport(lp->lnd_own, N_LHIT_MINE, 0, 1);
m = MINE_LDAMAGE();
+ if (lcp->l_flags & L_ENGINEER)
+ m /= 2;
landdamage(lp, m);
mines--;
sect.sct_mines = mines;