(feed_ship): Work directly on land 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
0716438b5b
commit
902a1c9f17
1 changed files with 6 additions and 8 deletions
|
@ -436,7 +436,7 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
|
||||||
int can_eat, need;
|
int can_eat, need;
|
||||||
int total_people;
|
int total_people;
|
||||||
int to_starve;
|
int to_starve;
|
||||||
int starved, lvec[I_MAX + 1];
|
int starved;
|
||||||
struct nstr_item ni;
|
struct nstr_item ni;
|
||||||
struct lndstr *lp;
|
struct lndstr *lp;
|
||||||
|
|
||||||
|
@ -463,16 +463,14 @@ feed_ship(struct shpstr *sp, register int *vec, int etus, int *needed,
|
||||||
if (lp->lnd_ship != sp->shp_uid)
|
if (lp->lnd_ship != sp->shp_uid)
|
||||||
continue;
|
continue;
|
||||||
need = ifood_eaten - vec[I_FOOD];
|
need = ifood_eaten - vec[I_FOOD];
|
||||||
getvec(VT_ITEM, lvec, (s_char *)lp, EF_LAND);
|
|
||||||
land_eaten = (etus * eatrate) * (double)lnd_getmil(lp);
|
land_eaten = (etus * eatrate) * (double)lnd_getmil(lp);
|
||||||
if (lvec[I_FOOD] - need > land_eaten) {
|
if (lp->lnd_item[I_FOOD] - need > land_eaten) {
|
||||||
vec[I_FOOD] += need;
|
vec[I_FOOD] += need;
|
||||||
lvec[I_FOOD] -= need;
|
lp->lnd_item[I_FOOD] -= need;
|
||||||
} else if ((lvec[I_FOOD] - land_eaten) > 0) {
|
} else if (lp->lnd_item[I_FOOD] - land_eaten > 0) {
|
||||||
vec[I_FOOD] += (lvec[I_FOOD] - land_eaten);
|
vec[I_FOOD] += lp->lnd_item[I_FOOD] - land_eaten;
|
||||||
lvec[I_FOOD] -= (lvec[I_FOOD] - land_eaten);
|
lp->lnd_item[I_FOOD] -= lp->lnd_item[I_FOOD] - land_eaten;
|
||||||
}
|
}
|
||||||
putvec(VT_ITEM, lvec, (s_char *)lp, EF_LAND);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue