]> git.pond.sub.org Git - empserver/commitdiff
(growfood): Simplify. Rev. 1.6 made it less robust against overflow;
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 16 Mar 2004 19:45:38 +0000 (19:45 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 16 Mar 2004 19:45:38 +0000 (19:45 +0000)
fix that.

src/lib/update/human.c

index f366d514a36a34fcb1b6ce546b00191f44c3f59a..5c4cda1600c76e5750b3d91813293c8152876262 100644 (file)
@@ -152,9 +152,9 @@ do_feed(struct sctstr *sp, struct natstr *np, short *vec,
 static int
 growfood(struct sctstr *sp, short *vec, int work, int etu)
 {
-    double food_fertil;
-    double food_workers;
-    double food;
+    int food_fertil;
+    int food_workers;
+    int food;
     int work_used;
 
     /* I'm being very nice and commenting out this so players
@@ -164,19 +164,17 @@ growfood(struct sctstr *sp, short *vec, int work, int etu)
      */
     food_workers = work * fcrate;
     food_fertil = etu * sp->sct_fertil * fgrate;
-    food = food_fertil;
-    if (food > food_workers)
-       food = food_workers;
+    food = min(food_workers, food_fertil);
     /*
      * be nice; grow minimum one food unit.
      * This makes life simpler for the player.
      */
-    vec[I_FOOD] += (int)food;
+    if (food > ITEM_MAX - vec[I_FOOD])
+       food = ITEM_MAX - vec[I_FOOD];
+    vec[I_FOOD] += food;
     if (vec[I_FOOD] == 0)
        vec[I_FOOD] = 1;
-    if (vec[I_FOOD] > ITEM_MAX)
-       vec[I_FOOD] = ITEM_MAX;
-    work_used = (int)food / fcrate;
+    work_used = food / fcrate;
     return work_used;
 }