X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=src%2Futil%2Fperfect.c;h=ea2880c1e41f208edb42af852b5d74bc4deb2070;hp=9097c00e865b5bb95d8c1dce8bf16edeb8bb72ab;hb=9b7adfbe;hpb=5f263a7753dc728809ff85c993af975f6c76e61e diff --git a/src/util/perfect.c b/src/util/perfect.c index 9097c00e8..ea2880c1e 100644 --- a/src/util/perfect.c +++ b/src/util/perfect.c @@ -51,222 +51,222 @@ #define YPLATES WORLD_Y #define YbyX (YPLATES*XPLATES/8) -struct sctstr sects[YPLATES*XPLATES]; -u_char s[YPLATES][XPLATES]; -short c[YPLATES][XPLATES]; -short e[YPLATES][XPLATES]; -int size[YbyX]; -int goldchance[YbyX]; -int ironchance[YbyX]; -int oilchance[YbyX]; -int fertchance[YbyX]; -int urchance[YbyX]; +struct sctstr sects[YPLATES * XPLATES]; +u_char s[YPLATES][XPLATES]; +short c[YPLATES][XPLATES]; +short e[YPLATES][XPLATES]; +int size[YbyX]; +int goldchance[YbyX]; +int ironchance[YbyX]; +int oilchance[YbyX]; +int fertchance[YbyX]; +int urchance[YbyX]; -void makec(); -void makeore(); -int nearelev(); +void makec(); +void makeore(); +int nearelev(); int main(argc, argp) - int argc; - s_char **argp; +int argc; +s_char **argp; { - register struct sctstr *sp; - register int y; - register int x; - int sectf; - int i; - time_t now; - s_char *sectfil = NULL; - extern char *optarg; - int opt; - char *config_file = NULL; - + register struct sctstr *sp; + register int y; + register int x; + int sectf; + int i; + time_t now; + s_char *sectfil = NULL; + extern char *optarg; + int opt; + char *config_file = NULL; - while ((opt = getopt (argc, argp, "e:s:")) != EOF) { - switch (opt) { - case 'e': - config_file = optarg; - break; - case 's': - sectfil = optarg; - break; - } + + while ((opt = getopt(argc, argp, "e:s:")) != EOF) { + switch (opt) { + case 'e': + config_file = optarg; + break; + case 's': + sectfil = optarg; + break; } + } - emp_config (config_file); + emp_config(config_file); - if (sectfil == NULL) - sectfil = empfile[EF_SECTOR].file; + if (sectfil == NULL) + sectfil = empfile[EF_SECTOR].file; - time(&now); - srandom((unsigned int)now); - sectf = open(sectfil, O_RDWR, 0); - if (sectf < 0) { - perror(sectfil); - exit(1); - } - read(sectf, sects, sizeof(sects)); - sp = sects; - for (y = 0; y < WORLD_Y; y++) { - for (x = 0; x < WORLD_X; x++) { - if (((x ^ y) & 1)) - continue; - c[y][x/2] = 0; - s[y][x/2] = sp->sct_type; - e[y][x/2] = sp->sct_elev; - sp++; - } + time(&now); + srandom((unsigned int)now); + sectf = open(sectfil, O_RDWR, 0); + if (sectf < 0) { + perror(sectfil); + exit(1); + } + read(sectf, sects, sizeof(sects)); + sp = sects; + for (y = 0; y < WORLD_Y; y++) { + for (x = 0; x < WORLD_X; x++) { + if (((x ^ y) & 1)) + continue; + c[y][x / 2] = 0; + s[y][x / 2] = sp->sct_type; + e[y][x / 2] = sp->sct_elev; + sp++; } - for (y = 0; y < WORLD_Y; y++) { - for (x = 0; x < WORLD_X; x++) { - if (((x ^ y) & 1)) - continue; - if (c[y][x/2] != 0) - continue; - makec(x, y, 0); - } + } + for (y = 0; y < WORLD_Y; y++) { + for (x = 0; x < WORLD_X; x++) { + if (((x ^ y) & 1)) + continue; + if (c[y][x / 2] != 0) + continue; + makec(x, y, 0); } - printf("size oil gold fert iron\n"); - for (i=1; i 10) { - printf("%3d %3d %3d %3d %3d\n", - size[i], oilchance[i], goldchance[i], - fertchance[i], ironchance[i]); - } + urchance[i] = roll(30) - goldchance[i]; + fertchance[i] = roll(40) - (goldchance[i] + oilchance[i]); + ironchance[i] = roll(45) - (goldchance[i] + oilchance[i] / 2); + if (size[i] > 10) { + printf("%3d %3d %3d %3d %3d\n", + size[i], oilchance[i], goldchance[i], + fertchance[i], ironchance[i]); } - if (i == YbyX) - printf("Oops. YbyX not big enough\n"); - sp = sects; - for (y = 0; y < WORLD_Y; y++) { - for (x = 0; x < WORLD_X; x++) { - if (((x ^ y) & 1)) - continue; - makeore(sp++); - } + } + if (i == YbyX) + printf("Oops. YbyX not big enough\n"); + sp = sects; + for (y = 0; y < WORLD_Y; y++) { + for (x = 0; x < WORLD_X; x++) { + if (((x ^ y) & 1)) + continue; + makeore(sp++); } - lseek(sectf, 0L, 0); - write(sectf, sects, sizeof(sects)); - close(sectf); - exit(0); + } + lseek(sectf, 0L, 0); + write(sectf, sects, sizeof(sects)); + close(sectf); + exit(0); } -int cont = 0; +int cont = 0; #define max(a,b) (a < b ? b : a) void makec(x, y, n) - int x; - int y; - int n; +int x; +int y; +int n; { - register int dy; - register int dx; - register int dir; - register short *cp; + register int dy; + register int dx; + register int dir; + register short *cp; - if (s[y][x/2] == SCT_WATER) - return; - cp = &c[y][x/2]; - if (*cp != 0) - return; - if (n == 0) - n = ++cont; - *cp = n; - size[n]++; - for (dir = 1; dir <= 6; dir++) { - dx = (diroff[dir][0] + x + WORLD_X) % WORLD_X; - dy = (diroff[dir][1] + y + WORLD_Y) % WORLD_Y; - makec(dx, dy, n); - } + if (s[y][x / 2] == SCT_WATER) + return; + cp = &c[y][x / 2]; + if (*cp != 0) + return; + if (n == 0) + n = ++cont; + *cp = n; + size[n]++; + for (dir = 1; dir <= 6; dir++) { + dx = (diroff[dir][0] + x + WORLD_X) % WORLD_X; + dy = (diroff[dir][1] + y + WORLD_Y) % WORLD_Y; + makec(dx, dy, n); + } } void makeore(sp) - register struct sctstr *sp; +register struct sctstr *sp; { - int elev; - int oil, gmin, iron, fertil, ur; - int lev; - int i; - int x,y; + int elev; + int oil, gmin, iron, fertil, ur; + int lev; + int i; + int x, y; - y = sp->sct_y; - x = sp->sct_x; - elev = e[y][x/2]; - lev = (elev*12 + nearelev(x, y))/18; - i = c[y][x/2]; - oil = 0; - iron = 0; - gmin = 0; + y = sp->sct_y; + x = sp->sct_x; + elev = e[y][x / 2]; + lev = (elev * 12 + nearelev(x, y)) / 18; + i = c[y][x / 2]; + oil = 0; + iron = 0; + gmin = 0; + fertil = 0; + ur = 0; + if (lev < 20 && lev > -15 && roll(100) < 30 + oilchance[i] + lev) { + oil = (45 - lev) + roll(50); + if (oil > 100) + oil = 100; + if (oil < 10) + oil = 0; + } + if (lev > 15 && roll(20 + lev) < lev + ironchance[i]) { + iron = lev + roll(55); + if (iron > 100) + iron = 100; + if (iron < 10) + iron = 0; + } + if (lev > 16 && roll(35 + lev) < lev + goldchance[i]) { + gmin = (lev - 5) + roll(45); + if (gmin > 100) + gmin = 100; + if (gmin < 10) + gmin = 0; + } + if (lev > 14 && roll(35 + lev) < lev + urchance[i]) { + ur = (lev - 5) + roll(45); + if (ur > 100) + ur = 100; + if (ur < 10) + ur = 0; + } + fertil = (85 + fertchance[i] - lev) - (((iron + gmin) / 2) - oil / 3); + if (fertil > 120) + fertil = 120; + if (fertil < 0) fertil = 0; - ur = 0; - if (lev < 20 && lev > -15 && roll(100) < 30+oilchance[i]+lev) { - oil = (45 - lev) + roll(50); - if (oil > 100) - oil = 100; - if (oil < 10) - oil = 0; - } - if (lev > 15 && roll(20+lev) < lev+ironchance[i]) { - iron = lev + roll(55); - if (iron > 100) - iron = 100; - if (iron < 10) - iron = 0; - } - if (lev > 16 && roll(35+lev) < lev+goldchance[i]) { - gmin = (lev - 5) + roll(45); - if (gmin > 100) - gmin = 100; - if (gmin < 10) - gmin = 0; - } - if (lev > 14 && roll(35+lev) < lev+urchance[i]) { - ur = (lev - 5) + roll(45); - if (ur > 100) - ur = 100; - if (ur < 10) - ur = 0; - } - fertil = (85 + fertchance[i] - lev) - (((iron + gmin)/2) - oil/3); - if (fertil > 120) - fertil = 120; - if (fertil < 0) - fertil = 0; - sp->sct_oil = 100; - sp->sct_min = 100; - sp->sct_gmin = 100; - sp->sct_fertil = 100; - sp->sct_uran = 100; + sp->sct_oil = 100; + sp->sct_min = 100; + sp->sct_gmin = 100; + sp->sct_fertil = 100; + sp->sct_uran = 100; } int nearelev(x, y) - int x; - int y; +int x; +int y; { - int dir; - int dx; - int dy; - int level; + int dir; + int dx; + int dy; + int level; - level = 0; - for (dir = 1; dir <= 6; dir++) { - dx = (diroff[dir][0] + x + WORLD_X) % WORLD_X; - dy = (diroff[dir][1] + y + WORLD_Y) % WORLD_Y; - level += e[dy][dx/2]; - } - return level; + level = 0; + for (dir = 1; dir <= 6; dir++) { + dx = (diroff[dir][0] + x + WORLD_X) % WORLD_X; + dy = (diroff[dir][1] + y + WORLD_Y) % WORLD_Y; + level += e[dy][dx / 2]; + } + return level; } /* Already in libgen.a @@ -279,10 +279,10 @@ roll(n) int min(a, b) - int a; - int b; +int a; +int b; { - if (a < b) - return a; - return b; + if (a < b) + return a; + return b; }