/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2000, 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
*
* ---
*
- * 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
*/
-#include "misc.h"
-#include "player.h"
-#include "var.h"
-#include "sect.h"
-#include "xy.h"
-#include "nat.h"
+#include <config.h>
+
+#include <ctype.h>
#include "file.h"
#include "land.h"
+#include "lost.h"
+#include "misc.h"
+#include "nat.h"
#include "nsc.h"
+#include "optlist.h"
#include "plane.h"
+#include "player.h"
#include "prototypes.h"
-#include "optlist.h"
+#include "sect.h"
+#include "xy.h"
static int checksect(struct sctstr *);
-static void give_back_cap(struct sctstr *sp);
-/*ARGSUSED*/
int
-sct_postread(int id, s_char *ptr)
+sct_postread(int id, void *ptr)
{
- struct sctstr *sp = (struct sctstr *)ptr;
+ struct sctstr *sp = ptr;
checksect(sp);
player->owner = (player->god || sp->sct_own == player->cnum);
return 1;
}
-/*ARGSUSED*/
int
-sct_prewrite(int id, s_char *ptr)
+sct_prewrite(int id, void *ptr)
{
- struct sctstr *sp = (struct sctstr *)ptr;
+ struct sctstr *sp = ptr;
struct sctstr sect;
time(&sp->sct_timestamp);
return 1;
}
+void
+item_prewrite(short *item)
+{
+ i_type i;
+
+ for (i = I_NONE + 1; i <= I_MAX; ++i) {
+ if (CANT_HAPPEN(item[i] < 0))
+ item[i] = 0;
+ else if (CANT_HAPPEN(item[i] > ITEM_MAX))
+ item[i] = ITEM_MAX;
+ }
+}
+
static int
checksect(struct sctstr *sp)
{
int mil, civs, loyalcivs;
+ item_prewrite(sp->sct_item);
+
/* shouldn't happen, but... */
if (sp->sct_mobil > 127)
sp->sct_mobil = 0;
- mil = getvar(V_MILIT, (s_char *)sp, EF_SECTOR);
- civs = getvar(V_CIVIL, (s_char *)sp, EF_SECTOR);
+ mil = sp->sct_item[I_MILIT];
+ civs = sp->sct_item[I_CIVIL];
if (sp->sct_own == sp->sct_oldown)
loyalcivs = civs;
else
loyalcivs = 0;
- if (sp->sct_effic < 20) {
+ if (sp->sct_effic < SCT_MINEFF) {
if (sp->sct_type == SCT_BSPAN)
knockdown(sp, 0);
else if (sp->sct_type == SCT_BTOWER) {
makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y);
sp->sct_own = 0;
sp->sct_oldown = 0;
- } else {
- /* if oldown gets his cap back make agri */
- if (sp->sct_oldown &&
- player->cnum == sp->sct_own &&
- sp->sct_type == SCT_CAPIT &&
- sp->sct_newtype == SCT_CAPIT)
- give_back_cap(sp);
+ } else
takeover(sp, sp->sct_oldown);
- }
sp->sct_mobil = 0;
}
}
- if (!opt_DEFENSE_INFRA)
- sp->sct_defense = sp->sct_effic;
return 1;
}
int
-issector(s_char *arg)
+issector(char *arg)
{
- s_char c;
+ char c;
while (0 != (c = *arg++))
if (!isdigit(c) && !isspace(c) && (c != '/'))
return 0;
}
-
-static void
-give_back_cap(struct sctstr *sp)
-{
- struct natstr *natp = getnatp(sp->sct_oldown);
-
- if (xrel(natp, natp->nat_xcap) == xrel(natp, sp->sct_x) &&
- yrel(natp, natp->nat_ycap) == yrel(natp, sp->sct_y)) {
- sp->sct_newtype = SCT_AGRI;
- }
-}
-
-void
-sct_init(coord x, coord y, s_char *ptr)
-{
- struct sctstr *sp = (struct sctstr *)ptr;
-
- sp->ef_type = EF_SECTOR;
- sp->sct_x = x;
- sp->sct_y = y;
- sp->sct_dist_x = x;
- sp->sct_dist_y = y;
-}