Mercurial > ~darius > hgwebdir.cgi > paradise_server
diff src/pl_gen4.c @ 4:aa38447a4b21
First entry of Paradise Server 2.9 patch 10 Beta
author | darius |
---|---|
date | Sat, 06 Dec 1997 04:37:03 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pl_gen4.c Sat Dec 06 04:37:03 1997 +0000 @@ -0,0 +1,260 @@ +/*-------------------------------------------------------------------------- +NETREK II -- Paradise + +Permission to use, copy, modify, and distribute this software and its +documentation, or any derivative works thereof, for any NON-COMMERCIAL +purpose and without fee is hereby granted, provided that this copyright +notice appear in all copies. No representations are made about the +suitability of this software for any purpose. This software is provided +"as is" without express or implied warranty. + + Xtrek Copyright 1986 Chris Guthrie + Netrek (Xtrek II) Copyright 1989 Kevin P. Smith + Scott Silvey + Paradise II (Netrek II) Copyright 1993 Larry Denys + Kurt Olsen + Brandon Gillespie +--------------------------------------------------------------------------*/ +#include "config.h" +#include <math.h> +#include <memory.h> + +#include "defs.h" +#include "struct.h" +#include "data.h" +#include "shmem.h" +#include "planets.h" + +#if 0 +#define SYSWIDTH (GWIDTH/5.75) /* width of a system */ +#endif + +#define SYSTEMS 0 /* number of planetary systems */ + +/* atmosphere chances form a cascade win rand()%100 */ +#define PATMOS1 100 /* chance for normal atmosphere */ +#define PATMOS2 100 /* chance for thin atmosphere */ +#define PATMOS3 100 /* chance for slightly toxic stmos */ +#define PPOISON 100 /* chance for poison atmos */ + +/* defines that deal with planets resources and types */ +#define NMETAL 8 /* number of metal deposits */ +#define NDILYTH 12 /* number of dilythium deposits */ +#define NARABLE 8 /* number of arable land planets */ + +#define MINARMY 8 /* min numer of armies on a planet */ +#define MAXARMY 15 /* max number of armies on a planet */ + +/* other defines */ +#define HOMEARMIES 30 /* number of armies on home planets */ +#define COLONYARMIES 10 /* number of armies for colony planet */ + + +/* defines dealing with growth timers */ +#define PLGFUEL configvals->plgrow.fuel /* time for growth of fuel + * depot */ +#define PLGAGRI configvals->plgrow.agri /* time for growth of agri */ +#define PLGREPAIR configvals->plgrow.repair /* time for growth of + * repair */ +#define PLGSHIP configvals->plgrow.shipyard /* time for growth of + * shipyard */ + + +/*-------------------------------INITBRONCO------------------------------*/ +/* + * Initializes the planet array the way normaltrek did it -- not much + * variety, but some people dig playing chess from the same setup over and + * over again too. :) + */ +static void +initbronco() +{ + int i, j; + + static struct planet pdata[MAXPLANETS] = { + {0, (FED | PLHOME | PLCORE | PLFUEL | PLREPAIR | PLSHIPYARD | PLMETAL | PLARABLE | PLDILYTH), + FED, 20000, 80000, 0, 0, 0, "Earth", 5, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {1, FED | PLCORE, FED, 30000, 90000, 0, 0, 0, "Deneb", 5, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {2, FED | PLCORE, FED, 11000, 75000, 0, 0, 0, "Altair", 6, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {3, FED | PLCORE, FED, 8000, 93000, 0, 0, 0, "Vega", 4, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {4, FED, FED, 10000, 60000, 0, 0, 0, "Rigel", 5, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {5, FED, FED, 25000, 60000, 0, 0, 0, "Canopus", 7, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {6, FED, FED, 44000, 81000, 0, 0, 0, "Beta Crucis", 11, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {7, FED, FED, 39000, 55000, 0, 0, 0, "Organia", 7, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {8, FED, FED, 45000, 66000, 0, 0, 0, "Ceti Alpha V", 12, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {9, FED, FED, 32000, 74000, 0, 0, 0, "Alpha Centauri", 14, + (ROM | KLI | ORI), 0, 0, 0, 30, 0, FED}, + {10, (ROM | PLHOME | PLCORE | PLFUEL | PLREPAIR | PLSHIPYARD | PLMETAL | PLARABLE | PLDILYTH), + ROM, 20000, 20000, 0, 0, 0, "Romulus", 7, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {11, ROM | PLCORE, ROM, 28000, 8000, 0, 0, 0, "Tauri", 5, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {12, ROM | PLCORE, ROM, 28000, 23000, 0, 0, 0, "Draconis", 8, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {13, ROM | PLCORE, ROM, 4000, 12000, 0, 0, 0, "Aldeberan", 9, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {14, ROM, ROM, 45000, 7000, 0, 0, 0, "Eridani", 7, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {15, ROM, ROM, 42000, 44000, 0, 0, 0, "Regulus", 7, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {16, ROM, ROM, 13000, 45000, 0, 0, 0, "Capella", 7, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {17, ROM, ROM, 40000, 25000, 0, 0, 0, "Sirius", 6, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {18, ROM, ROM, 25000, 44000, 0, 0, 0, "Indi", 4, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {19, ROM, ROM, 8000, 29000, 0, 0, 0, "Hydrae", 6, + (FED | KLI | ORI), 0, 0, 0, 30, 0, ROM}, + {20, (KLI | PLHOME | PLCORE | PLFUEL | PLREPAIR | PLSHIPYARD | PLMETAL | PLARABLE | PLDILYTH), + KLI, 80000, 20000, 0, 0, 0, "Klingus", 7, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {21, KLI | PLCORE, KLI, 88000, 12000, 0, 0, 0, "Pollux", 6, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {22, KLI | PLCORE, KLI, 69000, 31000, 0, 0, 0, "Scorpii", 7, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {23, KLI | PLCORE, KLI, 73000, 5000, 0, 0, 0, "Castor", 6, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {24, KLI, KLI, 70000, 40000, 0, 0, 0, "Pleiades V", 10, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {25, KLI, KLI, 60000, 10000, 0, 0, 0, "Andromeda", 9, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {26, KLI, KLI, 54000, 40000, 0, 0, 0, "Lalande", 7, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {27, KLI, KLI, 90000, 37000, 0, 0, 0, "Lyrae", 5, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {28, KLI, KLI, 83000, 48000, 0, 0, 0, "Mira", 4, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {29, KLI, KLI, 54000, 21000, 0, 0, 0, "Cygni", 5, + (FED | ROM | ORI), 0, 0, 0, 30, 0, KLI}, + {30, (ORI | PLHOME | PLCORE | PLFUEL | PLREPAIR | PLSHIPYARD | PLMETAL | PLARABLE | PLDILYTH), + ORI, 80000, 80000, 0, 0, 0, "Orion", 5, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {31, ORI | PLCORE, ORI, 72000, 69000, 0, 0, 0, "Procyon", 7, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {32, ORI | PLCORE, ORI, 91000, 94000, 0, 0, 0, "Ursae Majoris", 13, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {33, ORI | PLCORE, ORI, 85000, 70000, 0, 0, 0, "Antares", 7, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {34, ORI, ORI, 92000, 59000, 0, 0, 0, "Cassiopia", 9, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {35, ORI, ORI, 65000, 55000, 0, 0, 0, "El Nath", 7, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {36, ORI, ORI, 52000, 60000, 0, 0, 0, "Spica", 5, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {37, ORI, ORI, 64000, 80000, 0, 0, 0, "Polaris", 7, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {38, ORI, ORI, 56000, 89000, 0, 0, 0, "Arcturus", 8, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI}, + {39, ORI, ORI, 70000, 93000, 0, 0, 0, "Herculis", 8, + (FED | ROM | KLI), 0, 0, 0, 30, 0, ORI} + }; + for (i = 0; i < NUMPLANETS; i++) + { + for (j = 0; j < MAXTEAM + 1; j++) + { + pdata[i].pl_tinfo[j].owner = pdata[i].pl_owner; + pdata[i].pl_tinfo[j].armies = pdata[i].pl_armies; + pdata[i].pl_tinfo[j].flags = pdata[i].pl_flags; + pdata[i].pl_tinfo[j].timestamp = 0; + } + pdata[i].pl_trevolt = 0; + pdata[i].pl_next = 0; + pdata[i].pl_prev = 0; + pdata[i].pl_gridnum = 0; + } + memcpy((char *) planets, (char *) pdata, MAXPLANETS * sizeof(struct planet)); +} +/*-------------------------------GENRESOURCES----------------------------*/ +/* + * This function goes through the planets structure and determines what kind + * of atmosphere and what kind of surface the planets have. It generates the + * stars that will be used as system centers ans then places atmospheres on + * the other planets. It then distributes the resources on the planet + * surfaces. This version's been bronco-ified. :) + */ + +static void +genresources_bronco() +{ + int i, j; /* looping vars */ + int t; /* temp var */ + + for (i = SYSTEMS; i < NUMPLANETS; i++) + { /* generate atmospheres */ + t = lrand48() % 100; /* random # 0-99 */ + if (t < PATMOS1) /* is it atmosphere type 1 */ + planets[i].pl_flags |= PLATYPE1; + else if (t < PATMOS2) /* is it atmosphere type 2 */ + planets[i].pl_flags |= PLATYPE2; + else if (t < PATMOS3) /* is it atmosphere type 3 */ + planets[i].pl_flags |= PLATYPE3; + else if (t < PPOISON) /* is it poison atmosphere */ + planets[i].pl_flags |= PLPOISON; + } + for (i = 0; i < NMETAL; i++) + { /* place the metal deposits */ + t = lrand48() % ((NUMPLANETS - SYSTEMS) / 4) + SYSTEMS + + ((i / (NMETAL / 4)) * ((NUMPLANETS - SYSTEMS) / 4)); + if (!(planets[t].pl_flags & PLMETAL & PLSURMASK)) + { + planets[t].pl_flags |= PLMETAL; /* OR in the metal flag */ + planets[t].pl_flags |= PLREPAIR; + } + else + i--; + } + for (i = 0; i < NDILYTH; i++) + { /* place the crystals */ + t = lrand48() % ((NUMPLANETS - SYSTEMS) / 4) + SYSTEMS + + ((i / (NDILYTH / 4)) * ((NUMPLANETS - SYSTEMS) / 4)); + if (!(planets[t].pl_flags & PLDILYTH & PLSURMASK)) + { + planets[t].pl_flags |= PLDILYTH; /* OR in the dilyth flag */ + planets[t].pl_flags |= PLFUEL; + } + else + i--; + } + for (i = 0; i < NARABLE; i++) + { /* place the farms */ + t = lrand48() % ((NUMPLANETS - SYSTEMS) / 4) + SYSTEMS + + ((i / (NARABLE / 4)) * ((NUMPLANETS - SYSTEMS) / 4)); + if (!(planets[t].pl_flags & PLARABLE & PLSURMASK) && + !(planets[t].pl_flags & PLHOME)) + { + planets[t].pl_flags |= PLARABLE | PLATYPE1; /* OR in the arable flag */ + planets[t].pl_flags |= PLAGRI; + } + else + i--; + } + for (i = 0; i < NUMPLANETS; i++) + for (j = 0; j < MAXTEAM + 1; j++) + if (j == planets[i].pl_owner) + planets[i].pl_tinfo[j].flags = planets[i].pl_flags; +} + + + +/* + * Generate a complete galaxy. Uses ye old bronco planet setup. + */ + +void +gen_galaxy_4() +{ + GWIDTH = 100000; + NUMPLANETS = 40; + initbronco(); /* initialize planet structures */ + genresources_bronco(); /* place the resources */ + return; +}