empserver/tests
Markus Armbruster eecb9c9825 fairland: Correct island placement bias
A sector is admissible for island placement when land can be grown in
every sector within a certain distance.

place_island() picks a random start sector, then searches linearly for
an admissible sector.  If it finds one, it places the island there.
Else, it reduces the distance by one and tries again.  It fails when
none is found even for distance zero.

Trying with extra distance is obviously meant to reduce the risk of
islands from running into each other without need.  Initial distance
is @di, the minimum distance between continents, which doesn't really
make sense, and is undocumented.

Bug: place_island() never tries the start sector.

Bias: placement probability is higher for sectors immediately
following inadmissible sectors.  Because of that, islands are more
often placed to the right of existing islands.  Players could exploit
that to guide their search for land.

Rewrite place_island() to pick sectors with equal probability,
dropping the undocumented extra distance feature.  If it's missed, we
can bring it back.

The new code visits each sector once.  The old code visits only one
sector in the best case, but each sector several times in the worst
case.  fairland performance improves measurably for crowded setups
with large @di, else it suffers.  For instance, Hvy Fever example
given in the commit before previous runs seven times faster for me.
With @di reduced to 2, its run time more than doubles.  Not that it
matters.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2021-01-05 10:41:36 +01:00
..
actofgod subs: Maintain plane and land unit fortification invariant 2021-01-05 10:40:34 +01:00
bridgefall relations: Move relations state from struct natstr to relatstr 2017-08-06 20:09:22 +02:00
build Spell harbor consistently 2017-08-07 10:08:31 +02:00
empdump config: Generalize infrastructure build materials storage 2017-08-06 20:09:19 +02:00
fairland fairland: Correct island placement bias 2021-01-05 10:41:36 +01:00
files relations: Move relations state from struct natstr to relatstr 2017-08-06 20:09:22 +02:00
fire damage: Shield embarked planes and land units from sector damage 2021-01-05 10:41:28 +01:00
info tests/info: New; checks info and code agree on commands 2014-01-06 20:50:06 +01:00
load-tend load: Factor out plane_loadable(), land_loadable() 2021-01-05 07:25:18 +01:00
navi-march edit: Fix fortification limit of embarked planes and land units 2021-01-05 10:38:57 +01:00
retreat damage: Shield embarked planes and land units from sector damage 2021-01-05 10:41:28 +01:00
smoke Correct spelling as one word and as two words 2017-08-07 10:08:31 +02:00
torpedo Correct spelling as one word and as two words 2017-08-07 10:08:31 +02:00
update update/revolt: Fix land unit casualties 2018-04-29 10:33:48 +02:00
version Update copyright notice 2021-01-05 10:41:28 +01:00
actofgod-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
bridgefall-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
build-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
empdump-test tests/empdump: Fix to honor "make check-accept" 2021-01-05 10:41:35 +01:00
fairland-test tests/fairland: Cover "plenty of space" better 2021-01-05 10:41:35 +01:00
files-test tests/files tests/fairland: Check stderr and exit status 2015-02-01 16:52:59 +01:00
fire-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
info-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
load-tend-test tests/load-tend: New; exercises load and tend commands 2021-01-05 07:25:15 +01:00
navi-march-test navigate: Require all ships to start in the same sector 2015-02-28 16:13:14 +01:00
normalize.pl Make: Support shallow git clones for testing 2017-09-02 17:51:37 +02:00
retreat-test tests/retreat: Cover trains 2015-03-02 08:20:48 +01:00
smoke-test tests: Define and use some abbreviations 2015-02-01 16:52:59 +01:00
test-common.sh tests: Make "make check-accept" accept new files 2021-01-05 10:41:35 +01:00
torpedo-test tests/torpedo: New; exercises torpedo command 2015-03-02 08:20:52 +01:00
update-test tests/update: New; exercises the update 2017-08-06 14:04:15 +02:00
version-test tests/version: New; exercises config introspection commands 2017-08-06 14:03:55 +02:00