X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=src%2Futil%2Ffairland.c;h=d95282f2c60e82ee872f093ba680e1dbe47ee670;hp=741dcbac15dd3ee68c63da912522d133623a7213;hb=9102ecce5;hpb=1118f1c0ca13ca25b662fa600c5101ff1d38b67d diff --git a/src/util/fairland.c b/src/util/fairland.c index 741dcbac1..d95282f2c 100644 --- a/src/util/fairland.c +++ b/src/util/fairland.c @@ -1,6 +1,6 @@ /* * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2012, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak, * Ken Stevens, Steve McClure, Markus Armbruster * * Empire is free software: you can redistribute it and/or modify @@ -29,6 +29,7 @@ * Known contributors to this file: * Ken Stevens, 1995 * Steve McClure, 1998 + * Markus Armbruster, 2004-2012 */ #include @@ -70,6 +71,7 @@ static int quiet = 0; #include #include #include +#include "chance.h" #include "file.h" #include "optlist.h" #include "prototypes.h" @@ -115,7 +117,6 @@ static char *program_name; #define new_x(newx) (((newx) + WORLD_X) % WORLD_X) #define new_y(newy) (((newy) + WORLD_Y) % WORLD_Y) -#define rnd(x) (random() % (x)) static int secs; /* number of sectors grown */ static int ctot; /* total number of continents and islands grown */ @@ -178,9 +179,10 @@ main(int argc, char *argv[]) int opt; char *config_file = NULL; int i = 0; + int seed_set = 0; program_name = argv[0]; - rnd_seed = time(NULL); + rnd_seed = 0; while ((opt = getopt(argc, argv, "ae:hioqR:s:v")) != EOF) { switch (opt) { @@ -201,6 +203,7 @@ main(int argc, char *argv[]) break; case 'R': rnd_seed = strtoul(optarg, NULL, 10); + seed_set = 1; break; case 's': outfile = optarg; @@ -218,7 +221,9 @@ main(int argc, char *argv[]) } parse_args(argc - optind, argv + optind); - srandom(rnd_seed); + if (!seed_set) + rnd_seed = pick_seed(); + seed_prng(rnd_seed); empfile_init(); if (emp_config(config_file) < 0) exit(1); @@ -558,7 +563,7 @@ fl_move(int j) { int i, n, newx, newy; - for (i = rnd(6), n = 0; n < 6; i = (i + 1) % 6, ++n) { + for (i = roll0(6), n = 0; n < 6; i = (i + 1) % 6, ++n) { newx = new_x(capx[j] + dirx[i]); newy = new_y(capy[j] + diry[i]); if (iso(j, newx, newy) >= iso(j, capx[j], capy[j])) { @@ -675,7 +680,7 @@ new_try(int c) if (sectc[c][0]) return 0; } else { - i = starti = (spike && sectc[c][secs - 1]) ? secs - 1 : rnd(secs); + i = starti = (spike && sectc[c][secs - 1]) ? secs - 1 : roll0(secs); do { if (sectc[c][i]) return i; @@ -695,7 +700,7 @@ grow_one_sector(int c) { int done, coast_search, try1, x, y, newx, newy, i, n, sx, sy; - spike = rnd(100) < sp; + spike = roll0(100) < sp; if ((try1 = new_try(c)) == -1) return 0; x = sx = sectx[c][try1]; @@ -704,7 +709,7 @@ grow_one_sector(int c) done = 0; do { if (spike) { - for (i = rnd(6), n = 0; n < 12 && !done; i = (i + 1) % 6, ++n) { + 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 (own[newx][newy] == -1 && @@ -715,7 +720,7 @@ grow_one_sector(int c) done = 1; } } else - for (i = rnd(6), n = 0; n < 6 && !done; i = (i + 1) % 6, ++n) { + 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 (own[newx][newy] == -1) @@ -774,8 +779,8 @@ static int place_island(int c, int *xp, int *yp) { int d, sx, sy; - int ssy = rnd(WORLD_Y); - int ssx = new_x(rnd(WORLD_X / 2) * 2 + ssy % 2); + int ssy = roll0(WORLD_Y); + int ssx = new_x(roll0(WORLD_X / 2) * 2 + ssy % 2); if (ssx > WORLD_X - 2) ssx = new_x(ssx + 2); @@ -809,7 +814,7 @@ grow_islands(void) secs = 0; if (!place_island(c, &x, &y)) return; - isiz = 1 + rnd(2 * is - 1); + isiz = roll(2 * is - 1); do { ++secs; find_coast(c); @@ -895,7 +900,7 @@ elevate_land(void) for (k = nm, mountain_search = 0; k && mountain_search < MOUNTAIN_SEARCH_MAX; ++mountain_search) { - r = rnd(total); + r = roll0(total); for (i = 0; i < ns; ++i) if (r < weight[i] && ELEV == -INFINITY && (c >= nc || @@ -949,10 +954,10 @@ elevate_land(void) for (i = 0; i < ns; ++i) { if (ELEV == INFINITY) { if (dsea[i] == 1) - ELEV = HILLMIN + rnd(PLATMIN - HILLMIN); + ELEV = HILLMIN + roll0(PLATMIN - HILLMIN); else - ELEV = HIGHMIN + rnd((256 - HIGHMIN) / 2) + - rnd((256 - HIGHMIN) / 2); + ELEV = HIGHMIN + roll0((256 - HIGHMIN) / 2) + + roll0((256 - HIGHMIN) / 2); } else if (c < nc && (((capx[c] == sectx[c][i] && capy[c] == secty[c][i])) || ((new_x(capx[c] + 2) == sectx[c][i] && @@ -972,7 +977,7 @@ elevate_sea(void) for (y = 0; y < WORLD_Y; ++y) { for (x = y % 2; x < WORLD_X; x += 2) { if (elev[x][y] == -INFINITY) - elev[x][y] = -rnd((distance_to_land() * 20 + 27)) - 1; + elev[x][y] = -roll(distance_to_land() * 20 + 27); } } } @@ -999,7 +1004,7 @@ set_oil(int e) { int oil = 0; if (e < LANDMIN) - oil = (LANDMIN - e) * 2 + rnd(2); + oil = (LANDMIN - e) * 2 + roll0(2); else if (e <= OIL_MAX) oil = (120 * (OIL_MAX - e + 1)) / (OIL_MAX - LANDMIN + 1); if (oil > 100)