diff --git a/include/prototypes.h b/include/prototypes.h index 9ea253b1..d23e7552 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -555,7 +555,7 @@ extern int do_feed(register struct sctstr *, register struct natstr *, 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 */ @@ -591,7 +591,7 @@ extern s_char *nxtitemp(struct nstr_item *, int); 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 */ @@ -623,7 +623,7 @@ extern void produce_sect(int natnum, int etu, int *bp, 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 diff --git a/src/lib/commands/strv.c b/src/lib/commands/strv.c index 5faa5451..83ef0e95 100644 --- a/src/lib/commands/strv.c +++ b/src/lib/commands/strv.c @@ -164,7 +164,7 @@ starv_ships(s_char *range) 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; @@ -173,9 +173,7 @@ starv_ships(s_char *range) 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) @@ -214,7 +212,7 @@ starv_units(s_char *range) 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; @@ -223,9 +221,7 @@ starv_units(s_char *range) 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) diff --git a/src/lib/update/land.c b/src/lib/update/land.c index 7c403526..453bc8f4 100644 --- a/src/lib/update/land.c +++ b/src/lib/update/land.c @@ -117,7 +117,6 @@ upd_land(register struct lndstr *lp, register int etus, { 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; @@ -170,8 +169,7 @@ upd_land(register struct lndstr *lp, register int etus, 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" : "")); @@ -185,7 +183,7 @@ upd_land(register struct lndstr *lp, register int etus, 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, @@ -229,7 +227,6 @@ upd_land(register struct lndstr *lp, register int etus, lp->lnd_pstage = pstage; lp->lnd_ptime = ptime; } - putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND); } /* end !player->simulation */ } } @@ -248,14 +245,12 @@ landrepair(register struct lndstr *land, struct natstr *np, 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; @@ -360,8 +355,7 @@ landrepair(register struct lndstr *land, struct natstr *np, * 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; @@ -388,32 +382,32 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed, * 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; } diff --git a/src/lib/update/plague.c b/src/lib/update/plague.c index 94ba2702..115d9114 100644 --- a/src/lib/update/plague.c +++ b/src/lib/update/plague.c @@ -52,7 +52,6 @@ static int infect_people(struct natstr *, struct sctstr *); void do_plague(struct sctstr *sp, struct natstr *np, int etu) { - int vec[I_MAX + 1]; u_short pstage, ptime; int n; @@ -66,8 +65,7 @@ do_plague(struct sctstr *sp, struct natstr *np, int etu) 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", @@ -107,7 +105,6 @@ do_plague(struct sctstr *sp, struct natstr *np, int etu) 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)) { @@ -154,7 +151,7 @@ infect_people(struct natstr *np, struct sctstr *sp) * 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) { diff --git a/src/lib/update/ship.c b/src/lib/update/ship.c index e9e303dc..2e043bea 100644 --- a/src/lib/update/ship.c +++ b/src/lib/update/ship.c @@ -116,7 +116,6 @@ upd_ship(register struct shpstr *sp, register int etus, { struct sctstr *sectp; struct mchrstr *mp; - int vec[I_MAX + 1]; u_short pstage, ptime; int oil_gained; int max_oil; @@ -163,19 +162,18 @@ upd_ship(register struct shpstr *sp, register int etus, } 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; @@ -184,17 +182,17 @@ upd_ship(register struct shpstr *sp, register int etus, } } 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. @@ -202,7 +200,7 @@ upd_ship(register struct shpstr *sp, register int etus, 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, @@ -247,8 +245,7 @@ upd_ship(register struct shpstr *sp, register int etus, 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]; } } } @@ -423,8 +420,7 @@ shiprepair(register struct shpstr *ship, struct natstr *np, * 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; @@ -438,63 +434,65 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed, 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; }