From 380d2e9f551499da8ddf2dcbe897416f98732623 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 16 Aug 2020 17:42:02 +0200 Subject: [PATCH] fairland: Simplify search for next wilderness to elevate To find the wilderness sector to elevate next, elevate_land() searches the non-mountain, non-capital sectors of the island for one that maximizes a function of its distance to mountains and to sea. The search ignores already elevated sectors in a less than obvious way: 1. it never picks a sector where the function yields -INFINITY or less, and 2. when elevating a wilderness, its (cached) distances get reset to values that make the function return a more negative value. Use a more direct check of "not yet elevated": elevation is still the initial -INFINITY. Signed-off-by: Markus Armbruster --- src/util/fairland.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/util/fairland.c b/src/util/fairland.c index 7f58e0254..263b6e68a 100644 --- a/src/util/fairland.c +++ b/src/util/fairland.c @@ -1002,15 +1002,16 @@ elevate_land(void) (100 * (HIGHMIN - LANDMIN)) / (ns - nm - ((c < nc) ? 3 : 1)) : 100 * INFINITY; for (k = 100 * (HIGHMIN - 1);; k -= dk) { - highest = -INFINITY; + highest = 0; where = -1; for (i = 0; i < ns; ++i) { - if (ELEV != INFINITY && + if (ELEV == -INFINITY && (c >= nc || ((!(capx[c] == sectx[c][i] && capy[c] == secty[c][i])) && (!(new_x(capx[c] + 2) == sectx[c][i] && capy[c] == secty[c][i]))))) { h = 3 * (5 - dmoun[i]) + dsea[i]; + assert(h > 0); if (h > highest) { highest = h; where = i; @@ -1025,8 +1026,6 @@ elevate_land(void) if (newk < LANDMIN) newk = LANDMIN; elev[sectx[c][where]][secty[c][where]] = newk; - dsea[where] = -INFINITY; - dmoun[where] = INFINITY; } /* Elevate the mountains and capitals */ -- 2.43.0