]> git.pond.sub.org Git - empserver/commitdiff
Don't let automatic supply starve the sector containing the sink
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 15 Feb 2009 13:38:09 +0000 (14:38 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 17 Feb 2009 18:30:35 +0000 (19:30 +0100)
Automatic supply always leaves enough food to avoid starvation in
supply sources, except for one case: when drawing supplies from the
sector containing the sink.

This behavior contradicted info supply.  However, do_feed() used to
rely on it (it would have wiped out food without it).  Supply use
there was removed in commit 7da69c92, so we can now fix this.

Affected by this is the automatic food supply of land units in combat,
and the food supply in commands supply, load and lload.  Except supply
is disabled due to bugs in the last two.

src/lib/subs/supply.c

index d6203a32c9ef83c975e0cf59d3cd7966366dbdd9..dbe725720dc79da39c686a451141b3fa26b69eb5 100644 (file)
@@ -133,7 +133,7 @@ s_commod(int own, int x, int y, i_type type, int total_wanted,
     struct shpstr ship;
     struct lndstr land;
     /* leave at least 1 military in sectors/ships */
-    int minimum = (type == I_MILIT ? 1 : 0);
+    int minimum = 0;
     int can_move;
     double move_cost, weight, mobcost;
     int packing;
@@ -145,6 +145,9 @@ s_commod(int own, int x, int y, i_type type, int total_wanted,
     getsect(x, y, &dest);
     getsect(x, y, &sect);
     if (sect.sct_own == own) {
+       if (!opt_NOFOOD && type == I_FOOD)
+           minimum = 1 + (int)ceil(food_needed(sect.sct_item,
+                                               etu_per_update));
        if (sect.sct_item[type] - wanted >= minimum) {
            sect.sct_item[type] -= wanted;
            if (actually_doit)