extern int feed_people(register int *, int, int *);
/* land.c */
extern int prod_land(int, int, int *, int);
-extern int feed_land(struct lndstr *, register int *, int, int *, int);
+extern int feed_land(struct lndstr *, int, int *, int);
/* main.c */
/* in server.h */
/* material.c */
extern struct sctstr *nxtsctp(register struct nstr_sect *);
/* plague.c */
extern void do_plague(struct sctstr *, struct natstr *, int);
-extern int plague_people(struct natstr *, int *, u_short *, u_short *, int);
+extern int plague_people(struct natstr *, short *, u_short *, u_short *, int);
/* plane.c */
extern int prod_plane(int, int, int *, int);
/* populace.c */
long int (*p_sect)[2], int sector_type);
/* ship.c */
extern int prod_ship(int, int, int *, int);
-extern int feed_ship(struct shpstr *, register int *, int, int *, int);
+extern int feed_ship(struct shpstr *, int, int *, int);
/*
* src/server
struct nstr_item ni;
struct shpstr ship;
int nship = 0;
- int vec[I_MAX + 1], s, needed;
+ int s, needed;
if (!snxtitem(&ni, EF_SHIP, range))
return;
if (!player->owner || !ship.shp_own)
continue;
- getvec(VT_ITEM, vec, (s_char *)&ship, EF_SHIP);
- s = feed_ship(&ship, vec, etu_per_update, &needed, 0);
-
+ s = feed_ship(&ship, etu_per_update, &needed, 0);
if (s == 0)
continue;
if (nship++ == 0)
struct nstr_item ni;
struct lndstr land;
int nunit = 0;
- int vec[I_MAX + 1], s, needed;
+ int s, needed;
if (!snxtitem(&ni, EF_LAND, range))
return;
if (!player->owner || !land.lnd_own)
continue;
- getvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
- s = feed_land(&land, vec, etu_per_update, &needed, 0);
-
+ s = feed_land(&land, etu_per_update, &needed, 0);
if (s == 0)
continue;
if (nunit++ == 0)
{
struct lchrstr *lcp;
u_short pstage, ptime;
- int vec[I_MAX + 1];
int n;
int min = morale_base - (int)np->nat_level[NAT_HLEV];
int mult;
resupply_commod(lp, I_FOOD);
if (!player->simulation) {
- getvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
- if ((n = feed_land(lp, vec, etus, &needed, 1)) > 0) {
+ if ((n = feed_land(lp, etus, &needed, 1)) > 0) {
wu(0, lp->lnd_own, "%d starved in %s%s\n",
n, prland(lp),
(lp->lnd_effic < LAND_MINEFF ? ", killing it" : ""));
pstage = lp->lnd_pstage;
ptime = lp->lnd_ptime;
if (pstage != PLG_HEALTHY) {
- n = plague_people(np, vec, &pstage, &ptime, etus);
+ n = plague_people(np, lp->lnd_item, &pstage, &ptime, etus);
switch (n) {
case PLG_DYING:
wu(0, lp->lnd_own,
lp->lnd_pstage = pstage;
lp->lnd_ptime = ptime;
}
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
} /* end !player->simulation */
}
}
int avail;
int w_p_eff;
int mult;
- int svec[I_MAX + 1];
int mvec[I_MAX + 1];
lp = &lchr[(int)land->lnd_type];
sp = getsectp(land->lnd_x, land->lnd_y);
if (sp->sct_off)
return 1;
- getvec(VT_ITEM, svec, (s_char *)sp, EF_SECTOR);
mult = 1;
if (np->nat_level[NAT_TLEV] < land->lnd_tech * 0.85)
mult = 2;
* returns the number who starved, if any.
*/
int
-feed_land(struct lndstr *lp, register int *vec, int etus, int *needed,
- int doit)
+feed_land(struct lndstr *lp, int etus, int *needed, int doit)
{
double food_eaten, ship_eaten;
int ifood_eaten;
* the ship, tho...
*/
/* doit - Only try to take food off the ship during the update */
- if (ifood_eaten > vec[I_FOOD] && lp->lnd_ship >= 0 && doit) {
- need = ifood_eaten - vec[I_FOOD];
+ if (ifood_eaten > lp->lnd_item[I_FOOD] && lp->lnd_ship >= 0 && doit) {
+ need = ifood_eaten - lp->lnd_item[I_FOOD];
sp = getshipp(lp->lnd_ship);
ship_eaten = etus * eatrate * (sp->shp_item[I_CIVIL]
+ sp->shp_item[I_MILIT]
+ sp->shp_item[I_UW]);
if (sp->shp_item[I_FOOD] - need > ship_eaten) {
- vec[I_FOOD] += need;
+ lp->lnd_item[I_FOOD] += need;
sp->shp_item[I_FOOD] -= need;
} else if (sp->shp_item[I_FOOD] - ship_eaten > 0) {
- vec[I_FOOD] += sp->shp_item[I_FOOD] - ship_eaten;
+ lp->lnd_item[I_FOOD] += sp->shp_item[I_FOOD] - ship_eaten;
sp->shp_item[I_FOOD] -= sp->shp_item[I_FOOD] - ship_eaten;
}
}
- if (ifood_eaten > vec[I_FOOD]) {
- *needed = ifood_eaten - vec[I_FOOD];
- people_left = (vec[I_FOOD] + 0.01) / (food_eaten + 0.01);
+ if (ifood_eaten > lp->lnd_item[I_FOOD]) {
+ *needed = ifood_eaten - lp->lnd_item[I_FOOD];
+ people_left = (lp->lnd_item[I_FOOD] + 0.01) / (food_eaten + 0.01);
/* only want to starve off at most 1/2 the populace. */
if (people_left < 0.5)
people_left = 0.5;
starved = total_people * (1 - people_left);
- vec[I_MILIT] -= starved;
- vec[I_FOOD] = 0;
+ lp->lnd_item[I_MILIT] -= starved;
+ lp->lnd_item[I_FOOD] = 0;
} else {
- vec[I_FOOD] -= (int)food_eaten;
+ lp->lnd_item[I_FOOD] -= (int)food_eaten;
}
return starved;
}
void
do_plague(struct sctstr *sp, struct natstr *np, int etu)
{
- int vec[I_MAX + 1];
u_short pstage, ptime;
int n;
pstage = infect_people(np, sp);
ptime = 0;
} else {
- getvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
- n = plague_people(np, vec, &pstage, &ptime, etu);
+ n = plague_people(np, sp->sct_item, &pstage, &ptime, etu);
switch (n) {
case PLG_DYING:
wu(0, sp->sct_own, "PLAGUE deaths reported in %s.\n",
default:
break;
}
- putvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
}
if (sp->sct_item[I_CIVIL] == 0 && sp->sct_item[I_MILIT] == 0
&& !has_units(sp->sct_x, sp->sct_y, sp->sct_own, 0)) {
* stage. No reports generated here anymore.
*/
int
-plague_people(struct natstr *np, register int *vec,
+plague_people(struct natstr *np, short *vec,
u_short *pstage, u_short *ptime,
int etus)
{
{
struct sctstr *sectp;
struct mchrstr *mp;
- int vec[I_MAX + 1];
u_short pstage, ptime;
int oil_gained;
int max_oil;
}
if (!player->simulation) {
- getvec(VT_ITEM, vec, (s_char *)sp, EF_SHIP);
sectp = getsectp(sp->shp_x, sp->shp_y);
if ((mp->m_flags & M_OIL) && sectp->sct_type == SCT_WATER) {
/*
* take care of oil production
*/
- oil_gained = roundavg((vec[I_CIVIL] * etus / 10000.0)
+ oil_gained = roundavg((sp->shp_item[I_CIVIL] * etus / 10000.0)
* sectp->sct_oil);
- vec[I_OIL] += oil_gained;
+ sp->shp_item[I_OIL] += oil_gained;
max_oil = vl_find(V_OIL, mp->m_vtype, mp->m_vamt, mp->m_nv);
- if (vec[I_OIL] > max_oil)
- vec[I_OIL] = max_oil;
+ if (sp->shp_item[I_OIL] > max_oil)
+ sp->shp_item[I_OIL] = max_oil;
product = &pchr[P_OIL];
if (product->p_nrdep != 0 && oil_gained > 0) {
resource = ((s_char *)sectp) + product->p_nrndx;
}
}
if ((mp->m_flags & M_FOOD) && sectp->sct_type == SCT_WATER) {
- vec[I_FOOD] += ((vec[I_CIVIL] * etus) / 1000.0)
+ sp->shp_item[I_FOOD] += ((sp->shp_item[I_CIVIL] * etus) / 1000.0)
* sectp->sct_fertil;
}
- if ((n = feed_ship(sp, vec, etus, &needed, 1)) > 0) {
+ if ((n = feed_ship(sp, etus, &needed, 1)) > 0) {
wu(0, sp->shp_own, "%d starved on %s\n", n, prship(sp));
if (n > 10)
nreport(sp->shp_own, N_DIE_FAMINE, 0, 1);
}
max_food = vl_find(V_FOOD, mp->m_vtype, mp->m_vamt, mp->m_nv);
- if (vec[I_FOOD] > max_food)
- vec[I_FOOD] = max_food;
+ if (sp->shp_item[I_FOOD] > max_food)
+ sp->shp_item[I_FOOD] = max_food;
/*
* do plague stuff. plague can't break out on ships,
* but it can still kill people.
pstage = sp->shp_pstage;
ptime = sp->shp_ptime;
if (pstage != PLG_HEALTHY) {
- n = plague_people(np, vec, &pstage, &ptime, etus);
+ n = plague_people(np, sp->shp_item, &pstage, &ptime, etus);
switch (n) {
case PLG_DYING:
wu(0, sp->shp_own,
sp->shp_pstage = pstage;
sp->shp_ptime = ptime;
}
- putvec(VT_ITEM, vec, (s_char *)sp, EF_SHIP);
- pops[sp->shp_own] += vec[I_CIVIL];
+ pops[sp->shp_own] += sp->shp_item[I_CIVIL];
}
}
}
* returns the number who starved, if any.
*/
int
-feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
- int doit)
+feed_ship(struct shpstr *sp, int etus, int *needed, int doit)
{
double food_eaten, land_eaten;
int ifood_eaten;
if (opt_NOFOOD)
return 0; /* no food no work to do */
- total_people = vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW];
+ total_people
+ = sp->shp_item[I_CIVIL] + sp->shp_item[I_MILIT] + sp->shp_item[I_UW];
food_eaten = etus * eatrate * total_people;
ifood_eaten = (int)food_eaten;
if (food_eaten - ifood_eaten > 0)
ifood_eaten++;
starved = 0;
*needed = 0;
- if (!player->simulation && ifood_eaten > vec[I_FOOD])
- vec[I_FOOD] += supply_commod(sp->shp_own, sp->shp_x, sp->shp_y,
- I_FOOD, ifood_eaten - vec[I_FOOD]);
+ if (!player->simulation && ifood_eaten > sp->shp_item[I_FOOD])
+ sp->shp_item[I_FOOD]
+ += supply_commod(sp->shp_own, sp->shp_x, sp->shp_y,
+ I_FOOD, ifood_eaten - sp->shp_item[I_FOOD]);
/* doit - only steal food from land units during the update */
- if (ifood_eaten > vec[I_FOOD] && sp->shp_nland > 0 && doit) {
+ if (ifood_eaten > sp->shp_item[I_FOOD] && sp->shp_nland > 0 && doit) {
snxtitem_all(&ni, EF_LAND);
while ((lp = (struct lndstr *)nxtitemp(&ni, 0)) &&
- ifood_eaten > vec[I_FOOD]) {
+ ifood_eaten > sp->shp_item[I_FOOD]) {
if (lp->lnd_ship != sp->shp_uid)
continue;
- need = ifood_eaten - vec[I_FOOD];
+ need = ifood_eaten - sp->shp_item[I_FOOD];
land_eaten = etus * eatrate * lnd_getmil(lp);
if (lp->lnd_item[I_FOOD] - need > land_eaten) {
- vec[I_FOOD] += need;
+ sp->shp_item[I_FOOD] += need;
lp->lnd_item[I_FOOD] -= need;
} else if (lp->lnd_item[I_FOOD] - land_eaten > 0) {
- vec[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
+ sp->shp_item[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
lp->lnd_item[I_FOOD] -= lp->lnd_item[I_FOOD] - land_eaten;
}
}
}
- if (ifood_eaten > vec[I_FOOD]) {
- *needed = ifood_eaten - vec[I_FOOD];
- can_eat = vec[I_FOOD] / (etus * eatrate);
+ if (ifood_eaten > sp->shp_item[I_FOOD]) {
+ *needed = ifood_eaten - sp->shp_item[I_FOOD];
+ can_eat = sp->shp_item[I_FOOD] / (etus * eatrate);
/* only want to starve off at most 1/2 the populace. */
if (can_eat < total_people / 2)
can_eat = total_people / 2;
to_starve = total_people - can_eat;
- while (to_starve && vec[I_UW]) {
+ while (to_starve && sp->shp_item[I_UW]) {
to_starve--;
starved++;
- vec[I_UW]--;
+ sp->shp_item[I_UW]--;
}
- while (to_starve && vec[I_CIVIL]) {
+ while (to_starve && sp->shp_item[I_CIVIL]) {
to_starve--;
starved++;
- vec[I_CIVIL]--;
+ sp->shp_item[I_CIVIL]--;
}
- while (to_starve && vec[I_MILIT]) {
+ while (to_starve && sp->shp_item[I_MILIT]) {
to_starve--;
starved++;
- vec[I_MILIT]--;
+ sp->shp_item[I_MILIT]--;
}
- vec[I_FOOD] = 0;
+ sp->shp_item[I_FOOD] = 0;
} else {
- vec[I_FOOD] -= (int)food_eaten;
+ sp->shp_item[I_FOOD] -= (int)food_eaten;
}
return starved;
}