/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2000, 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.
*
* ---
*
* Dave Pare, 1986
*/
+#include <config.h>
+
#include "misc.h"
-#include "var.h"
#include "sect.h"
#include "nat.h"
-#include "news.h"
-#include "var.h"
#include "file.h"
#include "path.h"
#include "xy.h"
#include "land.h"
-#include "budg.h"
#include "update.h"
#include "subs.h"
#include "gen.h"
#include "lost.h"
void
-populace(struct natstr *np, register struct sctstr *sp, register int *vec,
- int etu)
+populace(struct natstr *np, struct sctstr *sp, int etu)
{
float hap;
float tech;
float edu;
float pct;
int n;
+ int civ = sp->sct_item[I_CIVIL];
+ int mil = sp->sct_item[I_MILIT];
- if (vec[I_CIVIL] == 0 && vec[I_MILIT] > 0) {
+ if (civ == 0 && mil > 0) {
sp->sct_work = 100;
sp->sct_loyal = 0;
sp->sct_oldown = sp->sct_own;
}
- if (!vec[I_CIVIL] && !vec[I_MILIT] && !vec[I_UW] &&
- !has_units(sp->sct_x, sp->sct_y, sp->sct_own, 0)) {
+ if (!civ && !mil && !sp->sct_item[I_UW]
+ && !has_units(sp->sct_x, sp->sct_y, sp->sct_own, 0)) {
makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y);
sp->sct_own = 0;
sp->sct_oldown = 0;
n = 127;
sp->sct_loyal = n;
}
- if (sp->sct_loyal > 65 && vec[I_MILIT] < vec[I_CIVIL] / 20) {
+ if (sp->sct_loyal > 65 && mil < civ / 20) {
int work_red;
work_red = sp->sct_loyal - (50 + (random() % 15));
"Sector %s is now fully yours\n", ownxy(sp));
sp->sct_oldown = sp->sct_own;
}
- sp->sct_loyal = 0;
}
}
return;
}
int
-total_work(register int sctwork, register int etu, register int civil,
- register int milit, register int uw)
+total_work(int sctwork, int etu, int civil, int milit, int uw, int maxpop)
{
- return ((int)((((civil * sctwork) / 100.0 +
- (milit * 2 / 5.0) + uw)) * etu) / 100);
+ if (civil > maxpop)
+ civil = maxpop;
+ if (milit > maxpop)
+ milit = maxpop;
+ if (uw > maxpop)
+ uw = maxpop;
+
+ return (civil * sctwork / 100.0 + milit * 0.4 + uw) * etu / 100.0;
}