Find a file
Markus Armbruster 4bbd8b9fb3 fairland: Precompute "exclusive zone" for speed
grow_one_sector() and place_island() pass candidate sectors to
try_to_grow() until it succeeds.

try_to_grow() fails when the candidate isn't water, or there are
sectors belonging to other islands within a minimum distance.
It does that the obvious way: it searches for such sectors.

When there is plenty of space, try_to_grow() rarely fails when it
searches.  For each land sector, we visit the sectors within minimum
distance, plus a little extra work for the rare failures.

In a more crowded setup, however, try_to_grow() fails a lot, and we
visit sectors many times more.

Example: Hvy Fever

    8 continents
    continent size: 60
    number of islands: 64
    average size of islands: 10
    spike: 0%
    0% of land is mountain (each continent will have 0 mountains)
    minimum distance between continents: 6
    minimum distance from islands to continents: 3
    World dimensions: 140x68

This is a crowded setup.  With -R 1, try_to_grow() fails almost
750,000 times due to minimum distance, and takes more than 18 Million
iterations.

With default minimum distances 2 and 1, it fails less than 700 times,
taking less than 14,000 iterations.

Instead of searching the surrounding sectors every time we check a
candidate, precompute an "exclusive zone" around each island where
only this island may grow the obvious way: when adding a sector, visit
the sectors within minimum distance and add them to the island's
exclusive zone.

When @extra_distance is non-zero, try_to_grow() still has to search,
Only place_island() passes non-zero @extra_distance.  The next few
commits will get rid of that.

Complication: since the minimum distance for growing islands may
differ from the minimum distance for growing continents, we have to
recompute exclusive zones between growing continents and islands.

For the Hvy Fever example above, this reduces the number of sector
visits by more than 90%, and run time by more than 70% for me.  With
default distances, it's a wash.

Of course, fairland performance is hardly an issue on today's
machines: it takes fairly impractical setups to push run time over a
second.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
2021-01-05 10:41:36 +01:00
build-aux Update copyright notice 2018-04-29 10:33:19 +02:00
doc doc/contributing: Fix a greengrocers' apostrophe 2021-01-05 07:25:18 +01:00
include Update copyright notice 2021-01-05 10:41:28 +01:00
info Update copyright notice 2021-01-05 10:41:28 +01:00
m4 m4: Make MY_WITH_TERMINFO consistent with MY_WITH_READLINE 2017-08-06 11:22:29 +02:00
man man/fairland: Fix typos, polish markup, clarify text 2021-01-05 10:41:36 +01:00
scripts Update copyright notice 2021-01-05 10:41:28 +01:00
src fairland: Precompute "exclusive zone" for speed 2021-01-05 10:41:36 +01:00
tests fairland: Report missing and stunted islands 2021-01-05 10:41:36 +01:00
.gitignore Make: Fix configure generated for dist-client 2017-08-13 14:31:07 +02:00
.travis.yml Bind Travis notifications to main mirror 2017-09-02 15:37:01 +02:00
bootstrap Replace other occurences of git-FOO by git FOO 2008-12-03 07:57:14 -05:00
configure.ac Update copyright notice 2021-01-05 10:41:28 +01:00
COPYING License upgrade to GPL version 3 or later 2011-04-12 21:20:58 +02:00
CREDITS Put URIs and e-mail addresses in <angle brackets> 2013-05-26 09:48:16 +02:00
GNUmakefile.in Update copyright notice 2021-01-05 10:41:28 +01:00
INSTALL INSTALL: Refresh from automake 1.13 2015-03-08 18:23:33 +01:00
Make.mk Update copyright notice 2021-01-05 10:41:28 +01:00
README Update copyright notice 2021-01-05 10:41:28 +01:00

Welcome to Empire 4, code-named Wolfpack.

Empire is a multi-player, client/server Internet based war game.
Copyright (C) 1986-2020, Dave Pare, Jeff Bailey, Thomas Ruschak,
Ken Stevens, Steve McClure, Markus Armbruster

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License (in file
`COPYING'), or (at your option) any later version.

See file `CREDITS' for a list of contributors.

Directory `doc' has additional information.  File `doc/README'
describes the files there and what they talk about.

To build the server and set up a game, follow the steps below.

(1) Unpacking the source tree

    If you downloaded a tarball, unpack it.

    If you cloned a git repository, run bootstrap.  This requires
    recent versions of Autoconf and Automake to be installed.  See
    also doc/contributing.

(2) Building a server

    Prerequisites: IEEE Std 1003.1-2001 (POSIX.1-2001), GNU make, a
    curses library, Perl, and either nroff or GNU troff (`groff').

    See file `INSTALL' for detailed compilation and installation
    instructions.  Quick guide for the impatient: run configure; make;
    make install.  The last step is optional; everything runs fine
    right from the build tree.

    If configure reports "readline: no" in its configuration summary,
    fancy line editing doesn't work in the client.  Commonly caused by
    not having development libraries installed.  On Linux, try
    installing readline-devel.

    If configure reports "terminfo: no" in its configuration summary,
    highlighting doesn't work in the client.  Commonly caused by not
    having development libraries installed.  On Linux, try installing
    ncurses-devel.

    If make fails without doing anything, you're probably not using
    GNU make.  Some systems have it installed as `gmake'.

    Solaris supports POSIX.1-2001, but you need to set up your
    environment for that.  Try passing
        SHELL=/usr/xpg4/bin/sh PATH=/usr/xpg6/bin:/usr/xpg4/bin:$PATH
    to make.  See standards(5) for details.

(3) Creating a game

    * Create a configuration for your game.  make install installs one
      in $prefix/etc/empire/econfig ($prefix is /usr/local unless you
      chose something else with configure).  You can use pconfig to
      create another one.

    * Edit your configuration file.  See doc/econfig for more
      information.

      Unless you put your configuration file in the default location
      (where make install installs it), you have to use -e with all
      programs to make them use your configuration.

    * Run files to set up your data directory.

    * Run fairland to create a world.  For a sample world, try
      `fairland 10 30'.  This creates file ./newcap_script, which will
      be used below.  You can edit it to change country names and
      passwords.

      Check out fairland's manual page for more information.

    * Start the server.  For development, you want to run it with -d
      in a debugger, see doc/debugging.  Do not use -d for a real
      game!

    * Log in as deity POGO with password peter.  This guide assumes
      you use the included client `empire', but other clients should
      work as well.

      For help, try `info'.

      To change the deity password, use `change re <password>'.

    * Create countries with `exec newcap_script'.

    Your game is now up!

Naturally, there's more to running a real game than that, but that's
beyond the scope of this file.

Please report bugs to <wolfpack@wolfpackempire.com> or via SourceForge
<http://sourceforge.net/projects/empserver/> (registration required).

For more information or help, try rec.games.empire on Usenet, or send
e-mail to <wolfpack@wolfpackempire.com> and we'll try to answer if we
can.  Also check out our web site at <http://www.wolfpackempire.com/>.

Have fun!

Wolfpack!