]> git.pond.sub.org Git - empserver/commitdiff
(feed_land): Work directly on ship item arrays instead of copies made
authorMarkus Armbruster <armbru@pond.sub.org>
Thu, 11 Mar 2004 12:51:34 +0000 (12:51 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 11 Mar 2004 12:51:34 +0000 (12:51 +0000)
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

index f66fb32c14df966ded45bffb172b4416daa444c7..53659a85b888a556b86e9f2fb92c7ff4ad5f9740 100644 (file)
@@ -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]) {