]> git.pond.sub.org Git - empserver/blobdiff - src/util/fairland.c
Change fairland not to reject small worlds without trying
[empserver] / src / util / fairland.c
index 08d2af283a8d6e801941037cbf26708ae4bf89a4..e95b33d33cf8366ccd572cab992bda2971045a3a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2009, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2010, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                           Ken Stevens, Steve McClure
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -120,33 +120,33 @@ static char *program_name;
 #define new_y(newy) (((newy) + WORLD_Y) % WORLD_Y)
 #define rnd(x) (random() % (x))
 
-int secs;                      /* number of sectors grown */
-int ctot;                      /* total number of continents and islands grown */
-int *isecs;                    /* array of how large each island is */
+static int secs;               /* number of sectors grown */
+static int ctot;               /* total number of continents and islands grown */
+static int *isecs;             /* array of how large each island is */
 
-int nc, sc, di, sp, pm, ni, is, id;    /* the 8 arguments to this program */
-unsigned long rnd_seed;                /* optional seed can be passed as an argument */
-int *capx, *capy;              /* location of the nc capitals */
-int *mc, mcc;                  /* array and counter used for stability
+static int nc, sc, di, sp, pm, ni, is, id; /* the 8 args to this program */
+static unsigned long rnd_seed; /* optional seed argument */
+static int *capx, *capy;       /* location of the nc capitals */
+static int *mc, mcc;           /* array and counter used for stability
                                   check when perturbing */
-int spike;                     /* are we spiking? */
-int mind;                      /* the final distance between capitals that
+static int spike;              /* are we spiking? */
+static int mind;               /* the final distance between capitals that
                                   we achieved */
-int dirx[] = { -2, -1, 1, 2, 1, -1 };  /* gyujnb */
-int diry[] = { 0, -1, -1, 0, 1, 1 };
-
-int **own;                     /* owner of the sector.  -1 means water */
-int **elev;                    /* elevation of the sectors */
-int **sectx, **secty;          /* the sectors for each continent */
-int **sectc;                   /* which sectors are on the coast? */
-int *vector;                   /* used for measuring distances */
-int *weight;                   /* used for placing mountains */
-int *dsea, *dmoun;             /* the dist to the ocean and mountain */
-int fl_status;                 /* is anything wrong? */
+static int dirx[] = { -2, -1, 1, 2, 1, -1 }; /* gyujnb */
+static int diry[] = { 0, -1, -1, 0, 1, 1 };
+
+static int **own;              /* owner of the sector.  -1 means water */
+static int **elev;             /* elevation of the sectors */
+static int **sectx, **secty;   /* the sectors for each continent */
+static int **sectc;            /* which sectors are on the coast? */
+static int *vector;            /* used for measuring distances */
+static int *weight;            /* used for placing mountains */
+static int *dsea, *dmoun;      /* the dist to the ocean and mountain */
+static int fl_status;          /* is anything wrong? */
 #define STATUS_NO_ROOM 1       /* there was no room to grow */
 #define NUMTRIES 10            /* keep trying to grow this many times */
 
-const char *numletter =
+static const char *numletter =
     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
 static void help(char *);
@@ -420,10 +420,9 @@ parse_args(int argc, char *argv[])
        exit(1);
     }
     if (nc * sc + nc * my_sqrt(sc) * 2 * (di + 1) > WORLD_X * WORLD_Y) {
-       puts("fairland: error -- world not big enough to fit continents.");
-       puts("arguments must satisfy:");
+       puts("fairland: warning -- world might be too small to fit continents.");
+       puts("arguments should satisfy:");
        puts("nc*sc*sc + nc*sqrt(sc)*2*(di+1) < WORLD_X * WORLD_Y");
-       exit(1);
     }
 }
 
@@ -821,7 +820,7 @@ grow_islands(void)
        secs = 0;
        if (!place_island(c, &x, &y))
            return;
-       isiz = 1 + rnd(2 * is - 1);
+       isiz = 1 + rnd(is) + rnd(is);
        do {
            ++secs;
            find_coast(c);
@@ -1092,6 +1091,7 @@ write_sects(void)
                sct->sct_type = SCT_MOUNT;
            sct->sct_elev = total;
            sct->sct_newtype = sct->sct_type;
+           sct->sct_dterr = own[sct->sct_x][y] + 1;
            if (ORE)
                add_resources(sct);
        }
@@ -1166,7 +1166,6 @@ write_newcap_script(void)
        fprintf(script, "newcap %d %d,%d\n", c + 1, capx[c], capy[c]);
     }
     fprintf(script, "add %d visitor visitor v i\n", c + 1);
-    ++c;
     fclose(script);
     return 0;
 }