Wolfpack Empire - mirror of https://git.pond.sub.org/empserver
http://wolfpackempire.com/
Land elevation is computed by first placing mountains, then elevating land to fit. Mountains placement is a weighted random sampling. A sector's weight is its distance to sea capped at five and squared. Non-mountain, non-capital sectors get assigned equidistant elevations from 1 up to 97 rounded to integer in an order that depends on distance to mountain and distance to sea, both capped at 5. Mountains get equidistant elevations starting at 98 (see recent commit "fairland: Fair mountain resources"). Capitals get 36. Sea elevation is randomly chosen from a range that depends on the sector's distance to land. The range increases from [-27,-1] next to land to [-127,-1] for distance 5 and up. Without mountains, the result is boring: elevation increases pretty much linearly with the distance from the coast, i.e. each islands is a single cone. With mountains, we get one cone per mountain. The sea sea elevations are basically noise. Worse, it's buggy: mountain placement can place fewer mountains than requested. The weighted random sampling assigns weights even to sectors that cannot be picked (capitals and sectors that have been picked already). When the dice land on such a sector, it instead picks the next one (in island growth order) that can be picked. If there is no next one, the mountain is not placed. This is a fairness issue. Impact varies with fairland parameters. For 60 sector islands with 5% mountains, around one in 10000 islands is short one mountain in my testing. For 10 sector islands with 50% mountains, some 760 out of 10000 islands are short one sector, 80 short two, and five short three. The numbers get worse as spikiness increases. Undocumented misfeature: the placement loop is limited to 1000 iterations, supposedly to catch a runaway loop. Since the loop iterates exactly once per mountain, all this accomplishes it limiting mountains to 1000 per island. When too few mountains are placed, the loop assigning elevations to non-mountain, non-capital decrements elevations below 1. Since Chainsaw 3, such elevations then get mapped to 1, plastering over the bug. We get non-mountain sectors with elevation 1 instead of mountains. Rewrite as follows. Use a simple random hill algorithm to assign raw elevations: initialize elevation to zero, then randomly raise circular hills on land / lower circular depressions at sea. Their size and height depends on the distance to the coast, capped at 3. After a sufficient number of iterations, the resulting terrain has a "natural" look. This is elevate_prep(). elevate_land() then sorts non-capital sectors by raw elevation. The highest become mountains. Sectors get assigned the same equidistant elevations as before, just in raw elevation order. elevate_sea() simply normalizes raw elevation to [-127,-1]. Elevations now show a nice undulating pattern independent of mountain percentage. Implementation detail: replace elev[x][y] by elev[XYOFFSET(x, y)], and narrow the element type from int to short. Takes a fourth the space. Signed-off-by: Markus Armbruster <armbru@pond.sub.org> |
||
---|---|---|
build-aux | ||
doc | ||
include | ||
info | ||
m4 | ||
man | ||
scripts | ||
src | ||
tests | ||
.gitignore | ||
.travis.yml | ||
bootstrap | ||
configure.ac | ||
COPYING | ||
CREDITS | ||
GNUmakefile.in | ||
INSTALL | ||
Make.mk | ||
README |
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!