fairland: Fix island growth and correct its bias

grow_one_sector() picks a coastal start sector, then moves along the
coast trying to add an adjacent sector to the island.

It operates in spiking mode with a chance of @sp percent.

When spiking, the neighbors with sea on both sides are preferred.  For
instance, when the area around the sector being considered looks like
this

     - .
    - - .
     - .

then the neighbor in direction j is preferred, because it has sea in
directions u and n.  No other neighbor is preferred.

The start sector is the first coastal sector found in a linear search
in growth order, starting at the last sector grown when spiking, or
else at a random sector.  This is new_try().

grow_one_sector() tries adding a neighbor in clockwise order, starting
with a random direction.  When spiking, it goes around the clock two
times, trying only preferred sectors in the first round.

When it can't add a neighbor, it moves to the next coastal sector with
next_coast().

Taken together, this randomly picks one element from the set of
pairs (S, D) where the sector in direction D off base sector S can be
added to the island.  How does the probability distribution look like?

Bias: a sector's probability to be added to the island land increases
with the number of base sectors it is adjacent to.  This tends to fill
in bays and lakes, which is fine.

Bias: coastal sectors following runs of non-coastal ones are more
likely to be picked as start sector.  Perhaps less of an issue when
spiking, where the pick is not intended to be random.

Bias: a pair (S, D) is more likely to be picked when base sector S
follows a run of coastal sectors that aren't base sectors, or
direction D follows a a run of directions that don't permit growth.

The impact of these two biases is not obvious.  I suspect they are the
reason behind the tendency of large islands to curve around obstacles
in a counterclockwise direction.  This can result in multiple islands
wrapping around a central one like layers of an onion.

Bug: the move along the coast is broken.  next_coast() searches for
the first adjacent sea in clockwise order, starting in direction g,
then from there clockwise for a sector belonging to the island.
Amazingly, this does move along the coast in a clockwise direction.
It can get caught in a loop, though.  Consider this island:

        -
     - - -
      -

If we start at the central sector (marked 0), the search along the
coast progresses like this:

        1
     - 0 2
      -

It reaches the central sector again after three moves (to 1, to 2,
back to 0), and stops without having reached the two sectors on the
left.

If we start with the leftmost sector, the search loops: 0, 1, 2, 3, 1,
...

        2
     0 1 3
      -

grow_one_sector() ensures termination by giving up after 200 moves.
Nuts!

Because of this, grow_one_sector() can fail when it shouldn't, either
because the search along the coast stops early, or goes into a loop,
or simply because there's too much coast.  The latter should not
happen in common usage, where island sizes are in the tens, not the
hundreds.

Clean up this hot mess by rewriting grow_one_sector() to pick a sector
adjacent to the island with a clearly defined probability, as follows.

Use weighted random sampling to pick one sector from the set of
possible adjacent sectors.

When spiking, a sector's weight increases with number of adjacent sea
sectors.  This directs the growth away from land, resulting in spikes.

When not spiking, the weight increases with the number of adjacent
land sectors.  This makes the island more rounded.

To visit the adjacent sectors, grow_one_sector() iterates over the
neighbors of all island sectors, skipping neighbors that have been
visited already.

This produces comparable results for low spike percentages.  The weird
onions are gone, though.

Noticeable differences emerge as the spike percentage grows.  Whereas
the old one produces long snakes that tend to curve into themselves,
the new one produces shorter spikes extending from a core, a bit like
tentacles.  Moreover, islands are more centered on their first sector
now.  The probability for coastal capitals is lower, in particular for
moderate spike percentages.

I consider this improvements.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2020-08-13 08:10:37 +02:00
parent 5aa3938b37
commit 494ab8dc07
11 changed files with 4302 additions and 4303 deletions

View file

@ -68,7 +68,7 @@ average size of additional islands (default \fIsc\fP/2)
.TP .TP
.I sp .I sp
land spikiness (in percent, default 10), low values result in rounded land spikiness (in percent, default 10), low values result in rounded
islands, high values result in snakes islands, high values result in tentacles
.TP .TP
.I pm .I pm
how much of each island is mountain (in percent, default 0) how much of each island is mountain (in percent, default 0)

View file

@ -45,12 +45,17 @@
* *
* For all continents, add the first sector at the capital's location, * For all continents, add the first sector at the capital's location,
* and the second right to it. These are the capital sectors. Then * and the second right to it. These are the capital sectors. Then
* add one sector to each continent in turn, obeying the minimum * add one sector to each continent in turn, until they have the
* distance between continents, until they have the specified size. * specified size.
* *
* The kind of shape they grow into is determined by the "spike * Growth uses weighted random sampling to pick one sector from the
* percentage" --- the higher the spike, the more spindly they will * set of adjacent sea sectors that aren't too close to another
* be. If you lower the spike, the continents will be more round. * continent. Growth operates in spiking mode with a chance given by
* the spike percentage. When "spiking", a sector's weight increases
* with number of adjacent sea sectors. This directs the growth away
* from land, resulting in spikes. When not spiking, the weight
* increases with the number of adjacent land sectors. This makes the
* island more rounded.
* *
* If growing fails due to lack of room, start over. If it fails too * If growing fails due to lack of room, start over. If it fails too
* many times, give up and terminate unsuccessfully. * many times, give up and terminate unsuccessfully.
@ -166,9 +171,6 @@ static const char *outfile = DEFAULT_OUTFILE_NAME;
/* these defines prevent infinite loops: /* these defines prevent infinite loops:
*/ */
#define COAST_SEARCH_MAX 200 /* how many times do we look for a coast sector
when growing continents and islands */
#define DRIFT_BEFORE_CHECK ((WORLD_X + WORLD_Y)/2) #define DRIFT_BEFORE_CHECK ((WORLD_X + WORLD_Y)/2)
#define DRIFT_MAX ((WORLD_X + WORLD_Y)*2) #define DRIFT_MAX ((WORLD_X + WORLD_Y)*2)
#define MOUNTAIN_SEARCH_MAX 1000 /* how long do we try to place mountains */ #define MOUNTAIN_SEARCH_MAX 1000 /* how long do we try to place mountains */
@ -209,6 +211,14 @@ static unsigned char *adj_land;
*/ */
static short *xzone; static short *xzone;
/*
* Set of sectors seen already
* Increment @cur_seen to empty the set of sectors seen, set
* seen[XYOFFSET(x, y)] to @cur_seen to add x,y to the set.
*/
static unsigned *seen;
static unsigned cur_seen;
static int **elev; /* elevation of the sectors */ static int **elev; /* elevation of the sectors */
static int **sectx, **secty; /* the sectors for each continent */ static int **sectx, **secty; /* the sectors for each continent */
static int **sectc; /* which sectors are on the coast? */ static int **sectc; /* which sectors are on the coast? */
@ -503,6 +513,7 @@ allocate_memory(void)
own = calloc(WORLD_X, sizeof(int *)); own = calloc(WORLD_X, sizeof(int *));
adj_land = malloc(WORLD_SZ() * sizeof(*adj_land)); adj_land = malloc(WORLD_SZ() * sizeof(*adj_land));
xzone = malloc(WORLD_SZ() * sizeof(*xzone)); xzone = malloc(WORLD_SZ() * sizeof(*xzone));
seen = calloc(WORLD_SZ(), sizeof(*seen));
elev = calloc(WORLD_X, sizeof(int *)); elev = calloc(WORLD_X, sizeof(int *));
for (i = 0; i < WORLD_X; ++i) { for (i = 0; i < WORLD_X; ++i) {
own[i] = calloc(WORLD_Y, sizeof(int)); own[i] = calloc(WORLD_Y, sizeof(int));
@ -803,105 +814,68 @@ add_sector(int c, int x, int y)
} }
static int static int
try_to_grow(int c, int newx, int newy) grow_weight(int c, int x, int y, int spike)
{ {
if (!can_grow_at(c, newx, newy)) int n, b;
return 0;
add_sector(c, newx, newy); /*
return 1; * #Land neighbors is #bits set in adj_land[].
* Count them Brian Kernighan's way.
*/
n = 0;
for (b = adj_land[XYOFFSET(x, y)]; b; b &= b - 1)
n++;
assert(n > 0 && n < 7);
if (spike)
return (6 - n) * (6 - n);
return n * n * n;
} }
/* Move along the coast in a clockwise direction.
*/
static void
next_coast(int c, int x, int y, int *xp, int *yp)
{
int i, nx, ny, wat = 0;
if (isecs[c] == 1) {
*xp = x;
*yp = y;
return;
}
for (i = 0; i < 12; ++i) {
nx = new_x(x + dirx[i % 6]);
ny = new_y(y + diry[i % 6]);
if (own[nx][ny] == -1)
wat = 1;
if (wat && own[nx][ny] == c) {
*xp = nx;
*yp = ny;
return;
}
}
}
/* Choose a sector to grow from
*/
static int
new_try(int c, int spike)
{
int secs = isecs[c];
int i, starti;
if (secs == 1) {
if (sectc[c][0])
return 0;
} else {
i = starti = (spike && sectc[c][secs - 1]) ? secs - 1 : roll0(secs);
do {
if (sectc[c][i])
return i;
i = (i + 1) % secs;
} while (i != starti);
assert(c >= nc);
return -1;
}
return -1;
}
/* Grow continent c by 1 sector
*/
static int static int
grow_one_sector(int c) grow_one_sector(int c)
{ {
int spike = roll0(100) < sp; int spike = roll0(100) < sp;
int done, coast_search, try1, x, y, newx, newy, i, n, sx, sy; int wsum, newx, newy, i, x, y, off, dir, nx, ny, noff, w;
if ((try1 = new_try(c, spike)) == -1) assert(cur_seen < UINT_MAX);
cur_seen++;
wsum = 0;
newx = newy = -1;
for (i = 0; i < isecs[c]; i++) {
x = sectx[c][i];
y = secty[c][i];
off = XYOFFSET(x, y);
for (dir = DIR_FIRST; dir <= DIR_LAST; dir++) {
if (adj_land[off] & (1u << dir))
continue;
nx = new_x(x + diroff[dir][0]);
ny = new_y(y + diroff[dir][1]);
noff = XYOFFSET(nx, ny);
if (seen[noff] == cur_seen)
continue;
assert(seen[noff] < cur_seen);
seen[noff] = cur_seen;
if (!can_grow_at(c, nx, ny))
continue;
w = grow_weight(c, nx, ny, spike);
assert(wsum < INT_MAX - w);
wsum += w;
if (roll0(wsum) < w) {
newx = nx;
newy = ny;
}
}
}
if (!wsum)
return 0; return 0;
x = sx = sectx[c][try1];
y = sy = secty[c][try1]; add_sector(c, newx, newy);
coast_search = 0; return 1;
done = 0;
do {
if (spike) {
for (i = roll0(6), n = 0; n < 12 && !done; i = (i + 1) % 6, ++n) {
newx = new_x(x + dirx[i]);
newy = new_y(y + diry[i]);
if (n > 5 ||
(own[new_x(x+dirx[(i+5)%6])][new_y(y+diry[(i+5)%6])] == -1 &&
own[new_x(x+dirx[(i+1)%6])][new_y(y+diry[(i+1)%6])] == -1))
if (try_to_grow(c, newx, newy))
done = 1;
}
} else
for (i = roll0(6), n = 0; n < 6 && !done; i = (i + 1) % 6, ++n) {
newx = new_x(x + dirx[i]);
newy = new_y(y + diry[i]);
if (try_to_grow(c, newx, newy))
done = 1;
}
next_coast(c, x, y, &x, &y);
++coast_search;
} while (!done && coast_search < COAST_SEARCH_MAX &&
(isecs[c] == 1 || x != sx || y != sy));
return done;
} }
/* /*
@ -919,11 +893,13 @@ grow_continents(void)
for (c = 0; c < nc; ++c) { for (c = 0; c < nc; ++c) {
isecs[c] = 0; isecs[c] = 0;
if (!try_to_grow(c, capx[c], capy[c]) if (!can_grow_at(c, capx[c], capy[c])
|| !try_to_grow(c, new_x(capx[c] + 2), capy[c])) { || !can_grow_at(c, new_x(capx[c] + 2), capy[c])) {
done = 0; done = 0;
continue; continue;
} }
add_sector(c, capx[c], capy[c]);
add_sector(c, new_x(capx[c] + 2), capy[c]);
} }
if (!done) { if (!done) {
@ -933,7 +909,6 @@ grow_continents(void)
for (secs = 2; secs < sc && done; secs++) { for (secs = 2; secs < sc && done; secs++) {
for (c = 0; c < nc; ++c) { for (c = 0; c < nc; ++c) {
find_coast(c);
if (!grow_one_sector(c)) if (!grow_one_sector(c))
done = 0; done = 0;
} }
@ -1000,7 +975,6 @@ grow_islands(void)
isiz = roll(is) + roll0(is); isiz = roll(is) + roll0(is);
for (secs = 1; secs < isiz; secs++) { for (secs = 1; secs < isiz; secs++) {
find_coast(c);
if (!grow_one_sector(c)) { if (!grow_one_sector(c)) {
stunted_islands++; stunted_islands++;
break; break;

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(7) 2(14) 3(13) 4(3) 5(16) 6(4) 7(17) 8(9) 9(11) 10(12) 11(13) 12(14) 13(17) 14(11) 15(9) growing islands: 1(9) 2(11) 3(15) 4(9) 5(12) 6(9) 7(7) 8(11) 9(15) 10(13) 11(10) 12(10) 13(4) 14(11) 15(8)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
% % % % . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . . . % % % % . . . % % . . . . . % % % . % % . . . . . . .
% % % % . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . . . % % . . . . % % . . . . . % % % . % % % % . . . . . .
. % % % . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . % % . . % % . % % % . . . . . .
% % % . . . # # . # . . . . . . . . . . . . . . . % % % . . . . . . . . . . . # # # . # . . . . % % % . . . . . . . . . . . . .
. . . . . . # # c c # . . . . . . . . . % % % . . % % % % . % % . . . . . . . # c c # # . . . . % % % % . . . . . . . . . . . .
. . . . . # # # # # # . . . . . . . . . % % . . . . % % . . % % . . . . . . . # # # # # . . . . % % % . . . . . . . . . . . . .
. . . . . . . # # # # . . . . . % . . . % % % % . . . . . . . . . . . . . . . . # # # # . . . . . . % . . . . . . . . . . . . .
. . . . . # # # # # . . . . . % % . . . % % . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . .
. . % . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . % % . . . . % % . . . . . . .
% % % % . # # . . . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . # # . . . . . . % % . . . . % % % . . . . . . .
. % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . # . . . . . . . % % . . . % % % . . . . . . %
% % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . . . . . . . % % . . . . . % % . . . . . % %
. . . . . . . . . . . . % % . . . . . . . . . . . . % . . . . . % . . . . . . . . . . . . . . . . . . # . . . . . . . . . . % %
. . . . . . . . . . . . % % % . . . . . . . . . . % % . . . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . .
. . % % . . . . . . . . % % % % % . # # # # . . % % . . . . . . % % . . . . . . . . . % . . . . . . . # # # . . . . . . . . . .
. % % . . . . . . . . . % % % % . . # # # # . % % % . . . . . . % . . . . . . . . . % % . . . . . . # # # # . . . . . . . . . %
. % % % . . . . . . . . . % % . . . . # # # # . % % % . . . . . % % . . . . . . . . % % . . . . . . # # # # # . . . . . . . . %
. % % . . # # # . . . . . . . . . . # a a # # . . . . % % % . . % . . . . . . . . . % % . . . . . # # a a . . . . . . . . . % %
. . . . # # # # # . . . . . . . . . # # # # # # . % % % % % % . % . # # . # . . . . . % % . . . . # # # # # . . . . . . . . % %
. . . # # # # # . . . . . . . . . # # # # # # . . . . % % % % . . # # # # # # . . . . . . . . . . # # # # . . . . . % . . . % %
. . . # b b # # # . % % % . . . . . . # . . . . . . . . . . % . . # # # b b # . . . % % % . . % . . # . . . . . % % % . . . . .
. . . # # # # # . % % % % % . . . . . . . . . . . . . . . . . . . # # # # # . . . % % % . % % % % . . . . . . . % % % . . . . .
. . . . # # # # . . % % % % % . . . . . . . . . . . . . . . . . . # # # # # # . . . % % % . % % % % . . . . . % % % % % . . . .
. . . . # # . . . . . % % % . % . . . . . . . . . . . . . . . . . . . # # # . . . . % . . . . % % % . . . . . . . . . . . . . .
. . . . . . . . . . . . . % . % % . . . . . . . . . . . . . . . . . . . # . . % % . . . . . . . % % . % % . . . . . . . . . . .
. . . . % % . . . . . . . . % % % . . % % % . . . . . . . . . . . . . . . . . % % . . . . . . % . . . % % % % . . . . . . . . .
. . . % % % . . . . . . . % % % . . . . % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . .
. . . % % % . . . . . . % % % % . . . % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . . . .
. . . % % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . % % % % . . . . . . . . . . . . . . . . . . % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . % . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . . . % % . . . . . . % . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . % % % . . . . % % . . . . % % % . . . . . . . . . . .
A script for adding all the countries can be found in "sandbox/no-spike-newcap_script". A script for adding all the countries can be found in "sandbox/no-spike-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(13) 2(1) 3(10) 4(5) 5(23) growing islands: 1(11) 2(11) 3(7) 4(15) 5(7)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . # # # # # . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . . . . . . . . % % . . . . . . . # # . . . . . . . . . . .
. . . # # # . . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . . . . . % % % . . . . . . # # . . . . . . . . . . .
. . # # # # # . . . . . . . . . . . . . . . . . . . . % % % % . . . . . # # # . . . . % . . . . . . . . . . . . . . . . . . . .
. . # # # # # # . . . . . . . . . . . . . . . . . . . . . % % % . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . .
. . # # # e e # . . . . . . . . . . . . . . . . . . . . . . . % . . . # # e e # # . . . . . . . . . . . . . . . . . . . . . . .
. . . # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # . . . . . . . . . . . . . . . . . . . . . .
. . # # # # # . . . . . . . . . . . # . . . . . . . . . . . . . . . # # . # # # # . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . # . . # # # . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . .
. . . . . . . . . . . . . . . . # # c c # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c c # # # . . . . . . . . .
. . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . . . . . . . . .
# . . . . . . . . . . . . . . . . # # # # . . . . . . . . . # . . . . . . . . . . . % . . . . . # # # # # # # . . . . . . . . .
# . . . . . . . . . . . . . . . . # # . . . . . . . . . # # # # . . . . . . . . % % % % . % % . # # # # # # . . % % . . # # # #
# # . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . % % % % . . % % . . . . . . . . . % % . # # # #
# # . . . . . . . . . . . . . . . . . . . . . . . . . . # a a # . . . . . . . % % % % % . % % % . . . . . . . . . % % . # a a #
# # # . . . . . . # . . . % % . . . . . . . . . . . . . # # # # . . . . . . . . . % . . . . % % % . . . . . . . . . % . # # # #
# . . . . . # . # # # # . % % . . . . . . . . . . . . . # . # # . . . . . . . . . . # . . . % . . . . . . . . . . . . . # # # #
. . . . . . . # # # # # # . % % . . . . . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . . . . . . . # # #
. . . . . . # # # # # # # . % % . . . . . . . . % % % . . . . . . . % . . . . . # # # # . . . . . . . . . . . . . . . . # # # #
. . . . . . . # # d d # # . % % . . . . . . . . % % % % . . . . . . % % % . . . . d d # . . . . . . . . . . . . . . . . . . # #
. . . . . . . . # # . . . % % . . . . . . . . % % % % . . . . . . . % % % . . . # # # # . . . . . . . . . . . . . . . . . . # .
. . . . . . . . . # # . % % % % . . . . . . . . . % % . . . . . . . . % % % . . # # # # # . . . . . . . . . . . . . . . . . . .
. . % . . . . . . # . % % % . . . . . # . . . . . . . . . . . . . . . % . . . # # # # # # . . . . . . . . . . . . . . . . . . .
. . . % . . . . . . . . % % . . . . . # # . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . # . . . . . . . . . . . .
. . . % % . . . . . . . % . . . . # # # # . . . . . . . . . . . . . . . . . . . . . # . . . . . . . # # # . . . . . . . . . . .
. . . . % . . . . . . . . % . . . # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . .
. . . . . . . . . . . . . . . . # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # b b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # b b # . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # . . . . . . . . .
A script for adding all the countries can be found in "sandbox/plain-newcap_script". A script for adding all the countries can be found in "sandbox/plain-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(25) 2(22) 3(23) 4(23) 5(19) 6(20) 7(20) 8(13) growing islands: 1(13) 2(22) 3(29) 4(17) 5(30) 6(12) 7(27) 8(21)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. b b # # # . . . . . . . . . # . . . . . . . % % . . % . % % % # b b # # . . . . . . . . % . % % % % % . % % . . . . . . . . .
. ^ # # # . . . . . . . . . # . . . . . . . . . % % . . . % % . # # # # . . . . . . . . . % % % % ^ % % % % % % . . . . . # # #
# # ^ # . # . . . . . . . . . . . . . . . . . . . % % . . % % . # # # # . . . . . . . . . . % % % % % ^ % . . . % ^ . . . . # #
# # # # # . . . . . . . . . . . . . . . . . . . . . . . . . % . # # . . . . . . . . . . . . . . . % % % . . . % % % % % % . . #
# . # # . . . # # . . . . . . . . . . . . . . . . . . . . % % . . ^ . % % % % . # . . . . . . . . . . . % . . . % % % ^ ^ % % .
# # # . . . # # . . . . . . . . . # . . . . . . . . . % % . . . . . % % . . . # # . . . . . . . . # # . . . . % % % % % % % . .
. . # ^ . . # . # # # . . . . . . ^ # # . . # . . . . . . . . . . % % % . # # # ^ # . . . # . . # # # # # # . . % ^ % % % % . #
. . . # . . ^ # # # # . # . . . . f f # # # . . . . . # # # . . . % % . # # ^ # # . . . . # # # ^ f f . . # # . % % % % % . # .
. % . . . . . e e ^ ^ # # . % . . . # ^ # # # . . . . # # # # . # . % % . # # e e # # . . . . # # ^ # . . . # . % % % % % . # #
% % % % . # # # # # # . . % % . # # ^ # # # # . . . # # # ^ # . . % % % . . # ^ # # # # . . # ^ # # . . . . # . % % % % . # ^ #
. % % % . . . # # # # . % % % . . # . # # # # . . # # ^ # # # . . ^ % % % . . # # . # # . . # # # . . . . . . . . . . % . # ^ #
% % % % . . . . . . . % % % % % . . . # # . . . . # # # h h ^ . . % % % % . . # . . . . . . . . . . . . . . . . . . . . h h # #
. % % . . . . . . % . % % % . . % % . # . . . . . . # # # . . . . ^ % % . % . . . . . . . . . . . . . . . . . . . . # # ^ # # #
^ % . . . . . . . % ^ ^ % . . . % . . . . . # . . # # . . . . . . . % . . . . . . . . . . . . . . . . . . . . . . # # # . . # .
. . % . . . . . . % % % . . . . % . . . . # # # . . . # . . . . . . . . . . . . . . . . . . . . . . . # . . . . . # . # . . # #
. . % . . . # . % . . . . . . . ^ . . . # # # . . . . . . . . . . . . % . . . . . . . . . . . . . # # # # # # . . . . # . . . .
. . . % . . . # . . . . . . % . . % . . # # # # . . . . . . . . % . . % % % . # . # # . . . . . . . . # # ^ # # . % ^ . . % % %
. . . . . . # . . . . % % % % % % . . # d d . . . . . . . . . . % % % % . . # # # # . . . . . . . . # ^ d d # # . ^ % % % % % %
. . . . . . # . . # . . % . % . % . . # # ^ . . . . . . . . . . % % ^ % . # # # # . . . . . . . . . # # # # # # # . % % % . . .
. . . . . # ^ # ^ . . . . % % % . . # ^ # # # . . . . . . . . . . % % . . # ^ # . . . . . . . . . # . # . . . ^ . % % . . # . .
. . . . # # c c ^ # . . . . ^ . . . # # # # # . . . . . . . . . . . . . # # c c . . . . . . . . . # . . . . . . # . % . ^ # # .
# . . . . # # # # # . . . . . . . . ^ . # # . . . . . # # . . # . . . . . ^ # # . . . . . . . . . . . . . . . . . . . # # # . .
# . . # # # # # # # . % . # . # . % . . . . . . . . . . g g # # . . . . . ^ # # . . . . . % . . . . . . . . . . . . . # g g # .
# . . # . . . # # . % . . # # . . ^ . . . . . . . . . . # ^ ^ # . . . . . . # # . . . . % . . . . . . . . . . . . # # # # ^ # .
# . . . . . . . . . % % . . # # # . % . . . % % . . . . # # # # . % % . . . . # # . . % % % . ^ # . . . . . . . . . # # ^ # # .
# . . . . . . . % ^ % . # # # . ^ . % % % % ^ % . . . . # ^ # # . % % . . . . # # . % % . . . # . # # . . . . . . . # # . . # #
# . . . . . . . % . % % . . . # # . . % % % % % % . % % . # # # . % ^ % . . . . . . % % . # # # # # # . . . . . . . . . . . # #
. . . . . . . % % % . . . . . # . # . % % % % % % % % % . . # . . % % . . . . . . ^ % % . . . # # # # ^ . . . . . . . . # # . .
. . . . . . . . . . . . . # ^ # a a . % ^ % . % . % ^ % % % . # . . . % % . . . . % % ^ % % . # a a # # # . . . . . . . . . . .
% . . . . . . . . . . . . ^ # # # . % % % % % . . % % % % % . . . # . % % . . . % % % % % . # # # ^ # # . . . . . . . . . . . .
% . . . . . . . . . . . . . # # . . . % % ^ % % % % ^ % % ^ % % ^ # # . . . . . . . . . . . . . . # # . . . . . . . . . . . . .
. # . . . # . . . . . . . # # . . . . . . . % . % % % ^ % % % % # ^ # # . . . . . . . . . . . % . . . . . . . . . . . . . . . .
A script for adding all the countries can be found in "sandbox/spike-newcap_script". A script for adding all the countries can be found in "sandbox/spike-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -1,17 +1,17 @@
add 1 1 1 p add 1 1 1 p
newcap 1 53,11 newcap 1 62,16
add 2 2 2 p add 2 2 2 p
newcap 2 45,31 newcap 2 5,5
add 3 3 3 p add 3 3 3 p
newcap 3 8,4 newcap 3 45,7
add 4 4 4 p add 4 4 4 p
newcap 4 29,7 newcap 4 51,27
add 5 5 5 p add 5 5 5 p
newcap 5 17,17 newcap 5 12,24
add 6 6 6 p add 6 6 6 p
newcap 6 38,18 newcap 6 22,12
add 7 7 7 p add 7 7 7 p
newcap 7 62,24 newcap 7 29,31
add 8 8 8 p add 8 8 8 p
newcap 8 24,28 newcap 8 38,18
add 9 visitor visitor v add 9 visitor visitor v

View file

@ -15,53 +15,78 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
Only managed to grow 32 out of 37 sectors. Only managed to grow 36 out of 37 sectors.
try #2 (out of 10)... try #2 (out of 10)...
placing capitals... placing capitals...
growing continents... growing continents...
Only managed to grow 30 out of 37 sectors. Only managed to grow 32 out of 37 sectors.
try #3 (out of 10)... try #3 (out of 10)...
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(5) 2(9) 3(11) 4(7) 5(11) 6(18) 7(17) 8(7) 9(10) 10(8) 11(6) 12(18) 13(7) 14(9) 15(1) 16(2) 17(2) 18(1) Only managed to grow 30 out of 37 sectors.
No room for island #19
8 stunted islands try #4 (out of 10)...
placing capitals...
growing continents...
Only managed to grow 33 out of 37 sectors.
try #5 (out of 10)...
placing capitals...
growing continents...
Only managed to grow 35 out of 37 sectors.
try #6 (out of 10)...
placing capitals...
growing continents...
Only managed to grow 34 out of 37 sectors.
try #7 (out of 10)...
placing capitals...
growing continents...
Only managed to grow 29 out of 37 sectors.
try #8 (out of 10)...
placing capitals...
growing continents...
growing islands: 1(13) 2(7) 3(10) 4(19) 5(23) 6(11) 7(22) 8(17) 9(6) 10(2) 11(11) 12(6) 13(2) 14(5) 15(2) 16(1)
No room for island #17
7 stunted islands
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. . # # # # . . . . . . . . . . % % % % . . . # # # # # # . . . . . # # # # # . . . . . . # # a a # # . . . . . % . . . . . . %
. . # # # # . . . . . . . . . % % % % . . . # # e e # # . . % % . # # # # # # # . . . . . # # # # # . . . . . . % . . . . . . .
. . . f f # # . . % % % % . . . . . % % . . # # # # # # . . % % . # # h h # # . . . % % . . . # # # . . % % % . . % % % % % . .
. # # # # # # . . . % % % % . . . . % . . # # # # # # . . % % . # # # # # . . . . % % . . . . # # . . % . . . . . . . . % . . .
. . . # # # # # . . . % % . . . # . . . . . . # # # # . . % . . # # # # # . . . . % % % . . . . . . . % . . . . . . . . . . . .
. . . # # # # # # . . . . . . # # . . . . . . . . . . . . . . . # # # # . . . . . . . . . % . . . . % . . # # # # # # . . . . .
% % . . # # # # . . . . . . # # # # . . % % . . . . . . . . . % . . . # . . % . . . . . . . . . . % % . . # # # # # # . . % % .
. % . . # # . . . . % . . # # # # # . . . % % % % . . % . . . . . . . . . % . . . # # # . . . % % % . . # # # # # # . . % % % .
. . % . . . . . . % % . . # # g g # # . . . % . . . . . . . . . % . . . . % . . # # # # # . . . % % . . # # e e # # . . % % % %
. . % . . . . % % % % . . # # # # # # # . . % . . . . . . # # # . . % % % . . # # # # # # # . . . . . . # # # # # . . % . . . .
# . . . . % . . . . . . . . # # # # . # . . % . . # # . . # # # . . % % % . . # # # # # # # . . . . . . . # # # # . . % . . . .
# . . . . . . . . . . . . . # # # # . . . . . . # # . # # # # # . . . % . . # # # d d # # . . . . . . . . # # # . . % . . # # #
# . . % . . . . . # . . . . . # # # . . . . . . . # # # h h # # # . . . . . . . # # # # # # . . % % % . . . # . . . % . . # # #
. . % . . # # # # # . . % . . . . . . . % % . . . # # # # # # # . . . . . . . . . . # # . . . % % % . . . . . . . % . . # # # #
. . % . . # # # # # # . . % . . . . . . . % % % . . # # # # . . # # . . % % % . . . . . . . . % % % . . % . . . % % . . # # # #
. % . . # # b b # # # . . % % % % % % . . . . . . . # . . . . . # . . % % % % % . . . . . . . % % . . . % . . % % . . # # # g g
% % % . . # # # # # # # . . % % . . . . . . . . . . . . . . . % # # . . . % % % . . . . . . . . . . . . . . . % % . . # # # # #
. . % . . . # # # # # # . . % . . . . . # # . . % . . . . % % . # . . . . . . . . % % % % . . . . . # . . . . . % . . # # # # #
. . . . . . . # # # # # . . . . . # # # # # # . . % % % . . . . # . . % . . . . . . % % % % % . . # # # . . . . . . . . . . . .
# . . . % . . . . . . . . . . . . # # # # # # . . % % . . . . . . . % . . # . . . . % % % % . . # # # # # . . . . . . . . . . .
# # . . . % . . . . . . . % . . . . # # c c # # . . % % . . # # . . % . . # # # . . . % % % . . # # # # # # # . . % % . . % % .
# # . . . . . . % % % % % % . . . . # # # # # # . . % . . # # # % % . . # # # # # . . . % . . # # # b b # # # . . . . . . . % %
# # # # . . . . . . . . . . . . % . . # # # # # . . . . . # # # % % . . # # # # # # . . . . . . # # # # # # # . . . . . . . . .
# # # # . . % . . . . . . . . . % . . # # # # # . . . . . # d d % . . # # # c c # . . . . . . . # # # # # # . . % . . # # . . .
# # # # . . % . . # # . . # # . . % . . . . # . . . % . . . # # . % . . . # # # # # # . . % % . . . . . . . . . % . . # # # # .
# # # . . % . . # # # # # # # . . % . . . . . . . % % . . # # # % % . . # # # # # # # . . % % . . . . . . . . % . . # # # # . .
. . . . . % . . # # # # # # # # . . % % % . . . . % % % . . . # . % % . . . . . . # # . . . % % . . % % % % % % . . # # # # # .
. . . . % % . . # # a a # # . . . % % % % % % . . . . % . . . . . % . . . . . . . # . . . . . . . . . . . % % . . # # # # # # .
. % % % % % . . . # # # # # # . . . % % % % % . . . . . % . . . . % . . % % % % . . . . % . . . . . . . . . % . . # # f f # . .
% % . . . . . . . # # # . # . . . . . . . . . . . # . . . . % % . . . . . . . % . . . % . . # # # # # # . . % . . # # # # # . .
% . . . . . . % . . . # . . . . % . . . . . . . # # # . . . . % . . . . . . . . . . % % . . # # # # # # # . . % . . # # # # . .
. . . # # . . % . . # . . . . % % % % % % . . # # # # # . . . . . . # # # # . . . % % . . # # # # # # # # . . % . . # # . . . %
A script for adding all the countries can be found in "sandbox/stunted-newcap_script". A script for adding all the countries can be found in "sandbox/stunted-newcap_script".

File diff suppressed because it is too large Load diff