/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2004, 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
*/
-#include <math.h>
+#include <config.h>
+
#include "misc.h"
-#include "var.h"
#include "sect.h"
#include "nat.h"
#include "item.h"
-#include "news.h"
#include "file.h"
#include "xy.h"
#include "path.h"
#include "product.h"
-#include "distribute.h"
#include "optlist.h"
#include "budg.h"
#include "player.h"
* Return amount of work used.
*/
static int
-upd_buildeff(struct natstr *np, register struct sctstr *sp, int *workp,
+upd_buildeff(struct natstr *np, struct sctstr *sp, int *workp,
short *vec, int etu, int *desig, int sctwork, int *cost)
{
- register int work_cost = 0;
+ int work_cost = 0;
int buildeff_work = *workp / 2;
int n, hcms, lcms, neweff;
u_char old_type = *desig;
}
neweff = n;
*cost += work_cost;
- if (opt_BIG_CITY) {
- if (!n && dchr[old_type].d_pkg == UPKG &&
- dchr[*desig].d_pkg != UPKG) {
- int maxpop = max_pop(np->nat_level[NAT_RLEV], sp);
- if (vec[I_CIVIL] > maxpop)
- vec[I_CIVIL] = maxpop;
- if (vec[I_UW] > maxpop)
- vec[I_UW] = maxpop;
- *workp = (vec[I_CIVIL] * sctwork) / 100.0
- + (vec[I_MILIT] * 2 / 5.0) + vec[I_UW];
- *workp = roundavg((etu * (*workp)) / 100.0);
-
- buildeff_work = min((int)(*workp / 2), buildeff_work);
- }
+ if (!n && IS_BIG_CITY(old_type) &&
+ !IS_BIG_CITY(*desig)) {
+ int maxpop = max_population(np->nat_level[NAT_RLEV], *desig, n);
+ if (vec[I_CIVIL] > maxpop)
+ vec[I_CIVIL] = maxpop;
+ if (vec[I_UW] > maxpop)
+ vec[I_UW] = maxpop;
+ *workp = (vec[I_CIVIL] * sctwork) / 100.0
+ + (vec[I_MILIT] * 2 / 5.0) + vec[I_UW];
+ *workp = roundavg((etu * (*workp)) / 100.0);
+
+ buildeff_work = MIN((int)(*workp / 2), buildeff_work);
}
}
if (np->nat_priorities[*desig]) {
for (n = I_NONE + 1; n <= I_MAX; n++) {
melt = roundavg(vec[n] * etus * (long)fallout
- / (1000.0 * melt_item_denom[n]));
+ / (1000.0 * ichr[n].i_melt_denom));
if (melt > vec[n])
melt = vec[n];
if (melt > 5 && own) {
if (type == EF_SECTOR)
wu(0, own, "Lost %d %s to radiation in %s.\n",
- melt < vec[n] ? melt : vec[n], ichr[n].i_name,
+ melt, ichr[n].i_name,
xyas(x, y, own));
else if (type == EF_LAND)
wu(0, own, "Unit #%d lost %d %s to radiation in %s.\n",
- uid, melt < vec[n] ? melt : vec[n], ichr[n].i_name,
+ uid, melt, ichr[n].i_name,
xyas(x, y, own));
else if (type == EF_SHIP)
wu(0, own, "Ship #%d lost %d %s to radiation in %s.\n",
- uid, melt < vec[n] ? melt : vec[n], ichr[n].i_name,
+ uid, melt, ichr[n].i_name,
xyas(x, y, own));
}
vec[n] -= melt;
}
/*
- * do_fallout - calculate fallout for sectors.
- *
- * This is etu based. But, do limit HUGE kill offs in large ETU
- * games, the melting etus rate is limited to 24 etus.
+ * Do fallout meltdown for sector SP.
+ * ETUS above 24 are treated as 24 to avoid *huge* kill offs in
+ * large ETU games.
*/
-
void
-do_fallout(register struct sctstr *sp, register int etus)
+do_fallout(struct sctstr *sp, int etus)
{
struct shpstr *spp;
struct lndstr *lp;
meltitems(etus, sp->sct_fallout, spp->shp_own, spp->shp_item, EF_SHIP,
spp->shp_x, spp->shp_y, spp->shp_uid);
}
-#ifdef GODZILLA
- if ((sp->sct_fallout > 20) && chance(100))
- do_godzilla(sp);
-#endif /* GODZILLA */
}
void
{
struct sctstr *ap;
int n;
- register int inc;
+ int inc;
if (etus > 24)
etus = 24;
if (ap->sct_type == SCT_SANCT)
continue;
inc = roundavg(etus * fallout_spread * (sp->sct_fallout)) - 1;
-#if 0
- if (sp->sct_fallout) {
- wu(0, 0, "Fallout from sector %d,%d to %d,%d is %d=%d*%e*%d\n",
- sp->sct_x, sp->sct_y, sp->sct_x + diroff[n][0],
- sp->sct_y + diroff[n][1], inc, etus,
- fallout_spread, sp->sct_fallout);
- }
-#endif
if (inc < 0)
inc = 0;
- ap->sct_fallout = min(ap->sct_fallout + inc, FALLOUT_MAX);
+ ap->sct_fallout = MIN(ap->sct_fallout + inc, FALLOUT_MAX);
}
}
decay = roundavg(((decay_per_etu + 6.0) * fallout_spread) *
(double)etus * (double)sp->sct_fallout);
-#if 0
- if (decay || sp->sct_fallout)
- wu(0, 0, "Fallout decay in %d,%d is %d from %d\n", sp->sct_x,
- sp->sct_y, decay, sp->sct_fallout);
-#endif
-
sp->sct_fallout = decay < sp->sct_fallout ? sp->sct_fallout - decay : 0;
}
produce_sect(int natnum, int etu, int *bp, long int (*p_sect)[2],
int sector_type)
{
- register struct sctstr *sp;
- register struct natstr *np;
+ struct sctstr *sp;
+ struct natstr *np;
short buf[I_MAX + 1];
short *vec;
int work, cost, ecost, pcost, sctwork;