From: Markus Armbruster Date: Sat, 4 May 2013 15:54:37 +0000 (+0200) Subject: Avoid double rounding materials when limiting products made X-Git-Tag: v4.3.31~18 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=ec60098c36df4c698014f916ba956a36c356432a Avoid double rounding materials when limiting products made We can make actual = roundavg(material_consume * prodeff) products. When we reduce actual, we have to reduce material_consume, too. Code does that like this: material_consume = roundavg(actual' * material_consume / actual) Double rounding. Do this instead: material_consume = roundavg(actual' / prodeff) --- diff --git a/src/lib/update/produce.c b/src/lib/update/produce.c index 1c0941537..e136d271e 100644 --- a/src/lib/update/produce.c +++ b/src/lib/update/produce.c @@ -122,15 +122,14 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work, if (actual <= 0) return 0; if (actual > 999) { - material_consume = roundavg(999.0 * material_consume / actual); actual = 999; + material_consume = roundavg(actual / prodeff); } if (vec[item] + actual > ITEM_MAX) { - material_consume = roundavg((double)(ITEM_MAX - vec[item]) - * material_consume / actual); + actual = ITEM_MAX - vec[item]; + material_consume = roundavg(actual / prodeff); if (material_consume < 0) material_consume = 0; - actual = ITEM_MAX - vec[item]; if (sp->sct_own && !player->simulation) wu(0, sp->sct_own, "%s production backlog in %s\n",