From 83de4db1c00633a82547b24bde27a599131b2b6f Mon Sep 17 00:00:00 2001 From: belugas Date: Sat, 9 Feb 2008 03:12:05 +0000 Subject: (svn r12092) -Fix(r11532)[FS#1755]: Make sure the production level will not get out of delimited boundaries, while using var result 0D/0E and than multiplying/dividing it. And use multiply/divide operations instead of shifting. It does the same, just adds a bit more readability --- src/industry_cmd.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 498fa9fd4..bf8dea242 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2137,7 +2137,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) /* Increase if needed */ while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) { - i->prod_level <<= 1; + i->prod_level = min(i->prod_level * 2, PRODLEVEL_MAXIMUM); i->production_rate[0] = min(i->production_rate[0] * 2, 0xFF); i->production_rate[1] = min(i->production_rate[1] * 2, 0xFF); if (str == STR_NULL) str = indspec->production_up_text; @@ -2148,9 +2148,9 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) if (i->prod_level == PRODLEVEL_MINIMUM) { closeit = true; } else { - i->prod_level >>= 1; - i->production_rate[0] = (i->production_rate[0] + 1) >> 1; - i->production_rate[1] = (i->production_rate[1] + 1) >> 1; + i->prod_level = max(i->prod_level / 2, (int)PRODLEVEL_MINIMUM); // typecast to int required to please MSVC + i->production_rate[0] = (i->production_rate[0] + 1) / 2; + i->production_rate[1] = (i->production_rate[1] + 1) / 2; if (str == STR_NULL) str = indspec->production_down_text; } } -- cgit v1.2.3-70-g09d2