From 4ea31b120bae53e4aa3cbefce26cc2a591746593 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Thu, 11 Mar 2004 12:51:34 +0000 Subject: [PATCH] (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. --- src/lib/update/land.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/lib/update/land.c b/src/lib/update/land.c index f66fb32c..53659a85 100644 --- a/src/lib/update/land.c +++ b/src/lib/update/land.c @@ -369,7 +369,7 @@ feed_land(struct lndstr *lp, register int *vec, int etus, int *needed, { double food_eaten, ship_eaten; double people_left; - int can_eat, need, svec[I_MAX + 1]; + int can_eat, need; int total_people; int starved; 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) { need = (int)food_eaten - vec[I_FOOD]; sp = getshipp(lp->lnd_ship); - getvec(VT_ITEM, svec, (s_char *)sp, EF_SHIP); - ship_eaten = (etus * eatrate) * - (svec[I_CIVIL] + svec[I_MILIT] + svec[I_UW]); - if ((svec[I_FOOD] - need) > ship_eaten) { + 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; - svec[I_FOOD] -= need; - } else if ((svec[I_FOOD] - ship_eaten) > 0) { - vec[I_FOOD] += (svec[I_FOOD] - ship_eaten); - svec[I_FOOD] -= (svec[I_FOOD] - ship_eaten); + 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; + 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]) {