From b1effc466eac33997567e2f2e68812afb1c0a7f6 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 2 Sep 2007 20:41:46 +0000 Subject: [PATCH] (svn r11039) -Fix [FS#1191]: underflow that caused overflows in the performance rating calculation. --- src/economy.cpp | 5 +---- src/graph_gui.cpp | 10 ++-------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index a9b0d92299..8c5be601c9 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -217,10 +217,7 @@ int UpdateCompanyRatingAndValue(Player *p, bool update) /* Skip the total */ if (i == SCORE_TOTAL) continue; /* Check the score */ - s = (_score_part[owner][i] >= _score_info[i].needed) ? - _score_info[i].score : - _score_part[owner][i] * _score_info[i].score / _score_info[i].needed; - if (s < 0) s = 0; + s = clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed; score += s; total_score += _score_info[i].score; } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 9599d1fefe..7231ec6f3d 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1006,13 +1006,7 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e) DrawStringRightAligned(107, y, SET_PERFORMANCE_DETAIL_INT, 0); /* Calculate the %-bar */ - if (val > needed) { - x = 50; - } else if (val == 0) { - x = 0; - } else { - x = val * 50 / needed; - } + x = clamp(val, 0, needed) * 50 / needed; /* SCORE_LOAN is inversed */ if (val < 0 && i == SCORE_LOAN) x = 0; @@ -1022,7 +1016,7 @@ static void PerformanceRatingDetailWndProc(Window *w, WindowEvent *e) if (x != 50) GfxFillRect(112 + x, y - 2, 112 + 50, y + 10, color_notdone); /* Calculate the % */ - x = (val <= needed) ? val * 100 / needed : 100; + x = clamp(val, 0, needed) * 100 / needed; /* SCORE_LOAN is inversed */ if (val < 0 && i == SCORE_LOAN) x = 0;