/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2005, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program is free software; you can redistribute it and/or modify
*
* ---
*
- * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- * related information and legal notices. It is expected that any future
- * projects/authors will amend these files as needed.
+ * See files README, COPYING and CREDITS in the root of the source
+ * tree for related information and legal notices. It is expected
+ * that future projects/authors will amend these files as needed.
*
* ---
*
* Steve McClure, 1996-2000
*/
+#include <config.h>
+
#include <math.h>
#include "misc.h"
#include "queue.h"
#include "server.h"
#include "prototypes.h"
-static int shp_check_nav(struct sctstr *);
static int shp_check_one_mines(struct mlist *);
static int shp_hit_mine(struct shpstr *, struct mchrstr *);
static void shp_mess(s_char *, struct mlist *);
struct mlist *mlp;
emp_initque(list);
- while (nxtitem(ni, (s_char *)&ship)) {
+ while (nxtitem(ni, &ship)) {
if (!player->owner)
continue;
mcp = &mchr[(int)ship.shp_type];
ship.shp_rflags = 0;
memset(ship.shp_rpath, 0, sizeof(ship.shp_rpath));
putship(ship.shp_uid, &ship);
- mlp = (struct mlist *)malloc(sizeof(struct mlist));
+ mlp = malloc(sizeof(struct mlist));
mlp->mcp = mcp;
mlp->ship = ship;
mlp->mobil = (double)ship.shp_mobil;
mpr(actor, "%s was sunk at %s\n",
prship(&ship), xyas(ship.shp_x, ship.shp_y, actor));
emp_remque((struct emp_qelem *)mlp);
- free((s_char *)mlp);
+ free(mlp);
continue;
}
if (opt_SAIL) {
continue;
case CN_LANDLOCKED:
shp_mess("is landlocked", mlp);
- break;
+ continue;
case CN_NAVIGABLE:
break;
case CN_ERROR:
putship(mlp->ship.shp_uid, &mlp->ship);
newqp = qp->q_back;
emp_remque(qp);
- free((s_char *)qp);
+ free(qp);
qp = newqp;
}
}
if (chance(0.66)) {
mpr(actor, "Sweep...\n");
mines--;
- shells = min(max, shells + 1);
+ shells = MIN(max, shells + 1);
changed |= map_set(actor, sect.sct_x, sect.sct_y, 'X', 0);
}
}
if (shp_check_one_mines(mlp)) {
stopping = 1;
emp_remque(qp);
- free((s_char *)qp);
+ free(qp);
}
putship(mlp->ship.shp_uid, &mlp->ship);
putsect(§);
if (changed)
writemap(actor);
putsect(§);
- putship(mlp->ship.shp_uid, (s_char *)&mlp->ship);
+ putship(mlp->ship.shp_uid, &mlp->ship);
if (!mlp->ship.shp_own)
return 1;
}
if (shp_check_one_mines(mlp)) {
stopping = 1;
emp_remque(qp);
- free((s_char *)qp);
+ free(qp);
}
}
return stopping;
pr("%4d ", shp->shp_uid);
pr("%-16.16s ", mlp->mcp->m_name);
prxy("%4d,%-4d ", shp->shp_x, shp->shp_y, mlp->ship.shp_own);
- pr("%1c", shp->shp_fleet);
+ pr("%c", shp->shp_fleet);
pr("%4d%%", shp->shp_effic);
pr("%4d", shp->shp_item[I_MILIT]);
pr("%4d", shp->shp_item[I_SHELL]);
mlp->ship.shp_mobil = (int)mlp->mobil;
putship(mlp->ship.shp_uid, &mlp->ship);
emp_remque((struct emp_qelem *)mlp);
- free((s_char *)mlp);
+ free(mlp);
}
-static int
+int
shp_check_nav(struct sctstr *sect)
{
- switch (dchr[sect->sct_type].d_flg & 03) {
+ switch (dchr[sect->sct_type].d_nav) {
case NAVOK:
break;
return CN_NAVIGABLE;
}
+int
+sect_has_dock(struct sctstr *sect)
+{
+ switch (dchr[sect->sct_type].d_nav) {
+ case NAV_02:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
static int
shp_count(struct emp_qelem *list, int wantflags, int nowantflags, int x,
int y)
putship(mlp->ship.shp_uid, &mlp->ship);
if (!mlp->ship.shp_own) {
emp_remque((struct emp_qelem *)mlp);
- free((s_char *)mlp);
+ free(mlp);
}
}
if (vrange < trange)
return 0;
- /* We got here, so we could theoretically see the ship. Now,
- * do we want to see it in our telebox? If not, return positive
- * since we could see the ship and want forts to fire. */
- if (!(natp->nat_flags & NF_COASTWATCH))
- return 1;
-
for (qp = list->q_back; qp != list; qp = next) {
next = qp->q_back;
mlp = (struct mlist *)qp;
if (mlp->mcp->m_flags & M_SUB)
continue;
- wu(0, sectp->sct_own,
- "%s %s sighted at %s\n",
- cname(mlp->ship.shp_own),
- prship(&mlp->ship),
- xyas(mlp->ship.shp_x, mlp->ship.shp_y, sectp->sct_own));
- if (opt_HIDDEN) {
- setcont(sectp->sct_own, mlp->ship.shp_own, FOUND_LOOK);
- }
+ if (natp->nat_flags & NF_COASTWATCH)
+ wu(0, sectp->sct_own,
+ "%s %s sighted at %s\n",
+ cname(mlp->ship.shp_own),
+ prship(&mlp->ship),
+ xyas(mlp->ship.shp_x, mlp->ship.shp_y, sectp->sct_own));
+ if (opt_HIDDEN)
+ setcont(sectp->sct_own, mlp->ship.shp_own, FOUND_COAST);
}
return 1;
gun = fsect.sct_item[I_GUN];
if (gun < 1)
continue;
- range = tfactfire(fsect.sct_own, (double)min(gun, 7));
+ range = tfactfire(fsect.sct_own, (double)MIN(gun, 7));
if (fsect.sct_effic > 59)
range++;
range2 = roundrange(range);
continue;
}
}
- if (opt_BIG_CITY && sect.sct_type == SCT_CAPIT) {
- if (mlp->mcp->m_lcm + 2 * mlp->mcp->m_hcm >= 60) {
+ if (IS_BIG_CITY(sect.sct_type)) {
+ if (!(mlp->mcp->m_flags & M_CANAL)) {
sprintf(dp,
"is too large to fit into the canal system at %s",
xyas(newx, newy, actor));
continue;
/* now calculate the odds */
- gun = min(ship.shp_item[I_GUN], ship.shp_glim);
+ gun = MIN(ship.shp_item[I_GUN], ship.shp_glim);
eff = (double)ship.shp_effic / 100.0;
teff =
(((double)ship.shp_tech) / (((double)ship.shp_tech) + 200.0));
return 0;
}
- cp = (s_char *)BestShipPath(buf, shp->shp_x, shp->shp_y,
- d_sect.sct_x, d_sect.sct_y, player->cnum);
+ cp = BestShipPath(buf, shp->shp_x, shp->shp_y,
+ d_sect.sct_x, d_sect.sct_y, player->cnum);
if (!cp || shp->shp_mobil <= 0) {
mpr(shp->shp_own, "Can't get to '%s' right now.\n",
xyas(d_sect.sct_x, d_sect.sct_y, player->cnum));
emp_initque(&list);
- mlp = (struct mlist *)malloc(sizeof(struct mlist));
+ mlp = malloc(sizeof(struct mlist));
mlp->mcp = &mchr[(int)sp->shp_type];
mlp->ship = *sp;
mlp->mobil = (double)sp->shp_mobil;