From 5ed02791f5d1b74eb383c52347eda41ce0256472 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 13 Jan 2013 17:17:44 +0100 Subject: [PATCH] Fix melting of big piles of stuff by ridiculously heavy fallout meltitems() computes #items * etus per update * fallout in type long. Theoretical maximum is ITEM_MAX * etus * FALLOUT_MAX = 99980001 * etus. Can overflow 32 bits for etus > 21. Has been broken since the introduction of fallout in KSU. Compute the product in double instead. --- src/lib/update/sect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/update/sect.c b/src/lib/update/sect.c index 99310647d..0bf31bf7e 100644 --- a/src/lib/update/sect.c +++ b/src/lib/update/sect.c @@ -159,7 +159,7 @@ meltitems(int etus, int fallout, int own, short *vec, int melt; for (n = I_NONE + 1; n <= I_MAX; n++) { - melt = roundavg(vec[n] * etus * (long)fallout + melt = roundavg(vec[n] * etus * (double)fallout / (1000.0 * ichr[n].i_melt_denom)); if (melt > vec[n]) melt = vec[n]; -- 2.43.0