(feed_land): Work directly on ship item arrays instead of copies made
by getvec(). This is safe, because the new code changes the item array precisely when the old code writes back a changed copy.
This commit is contained in:
parent
d64fa8d529
commit
4ea31b120b
1 changed files with 9 additions and 10 deletions
|
@ -369,7 +369,7 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed,
|
||||||
{
|
{
|
||||||
double food_eaten, ship_eaten;
|
double food_eaten, ship_eaten;
|
||||||
double people_left;
|
double people_left;
|
||||||
int can_eat, need, svec[I_MAX + 1];
|
int can_eat, need;
|
||||||
int total_people;
|
int total_people;
|
||||||
int starved;
|
int starved;
|
||||||
struct lchrstr *lcp;
|
struct lchrstr *lcp;
|
||||||
|
@ -392,17 +392,16 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed,
|
||||||
if ((food_eaten > vec[I_FOOD]) && (lp->lnd_ship >= 0) && doit) {
|
if ((food_eaten > vec[I_FOOD]) && (lp->lnd_ship >= 0) && doit) {
|
||||||
need = (int)food_eaten - vec[I_FOOD];
|
need = (int)food_eaten - vec[I_FOOD];
|
||||||
sp = getshipp(lp->lnd_ship);
|
sp = getshipp(lp->lnd_ship);
|
||||||
getvec(VT_ITEM, svec, (s_char *)sp, EF_SHIP);
|
ship_eaten = etus * eatrate * (sp->shp_item[I_CIVIL]
|
||||||
ship_eaten = (etus * eatrate) *
|
+ sp->shp_item[I_MILIT]
|
||||||
(svec[I_CIVIL] + svec[I_MILIT] + svec[I_UW]);
|
+ sp->shp_item[I_UW]);
|
||||||
if ((svec[I_FOOD] - need) > ship_eaten) {
|
if (sp->shp_item[I_FOOD] - need > ship_eaten) {
|
||||||
vec[I_FOOD] += need;
|
vec[I_FOOD] += need;
|
||||||
svec[I_FOOD] -= need;
|
sp->shp_item[I_FOOD] -= need;
|
||||||
} else if ((svec[I_FOOD] - ship_eaten) > 0) {
|
} else if (sp->shp_item[I_FOOD] - ship_eaten > 0) {
|
||||||
vec[I_FOOD] += (svec[I_FOOD] - ship_eaten);
|
vec[I_FOOD] += sp->shp_item[I_FOOD] - ship_eaten;
|
||||||
svec[I_FOOD] -= (svec[I_FOOD] - ship_eaten);
|
sp->shp_item[I_FOOD] -= sp->shp_item[I_FOOD] - ship_eaten;
|
||||||
}
|
}
|
||||||
putvec(VT_ITEM, svec, (s_char *)sp, EF_SHIP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (food_eaten > vec[I_FOOD]) {
|
if (food_eaten > vec[I_FOOD]) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue