Annotation of researchv10no/games/trek/setup.c, revision 1.1.1.1

1.1       root        1: # include      "trek.h"
                      2: 
                      3: /**
                      4:  **    initialize game
                      5:  **/
                      6: 
                      7: CVNTAB Lentab[]
                      8: {
                      9:        "restart",      "",
                     10:        "s",            "hort",
                     11:        "m",            "edium",
                     12:        "i",            "ntermediate",
                     13:        "l",            "ong",
                     14:        0
                     15: };
                     16: 
                     17: CVNTAB Skitab[]
                     18: {
                     19:        "n",            "ovice",
                     20:        "f",            "air",
                     21:        "g",            "ood",
                     22:        "e",            "xpert",
                     23:        "c",            "ommodore",
                     24:        "i",            "mpossible",
                     25:        0
                     26: };
                     27: 
                     28: int    repflg;
                     29: double logdly();
                     30: 
                     31: setup(two)
                     32: {
                     33:        int                     timevec[2];
                     34:        register int            i, j, n;
                     35:        float                   f;
                     36:        int                     d;
                     37:        int                     klump;
                     38:        int                     ix, iy;
                     39:        QUAD                    *q;
                     40:        EVENT                   *e;
                     41:        char                    base_sq[NQUADS][NQUADS];
                     42: 
                     43:        time(timevec); srand(timevec[1]);
                     44:        if(repflg==0 && (Game.length=getcodpar("What length game", Lentab))<0) return(0);
                     45:        if(Game.length==0) {
                     46:                return(restart());
                     47:        }
                     48:        if(repflg==0 && (Game.skill=getcodpar("What skill game", Skitab)+1)<=0) return(0);
                     49:        Game.tourn = 1;
                     50:        if(two==0)
                     51:                getpasswd(Game.passwd);
                     52:        Initial.bases = Status.bases = 7 - Game.skill;
                     53:        Initial.time = Status.time = 6.0 * Game.length + 2.0;
                     54:        i = Game.skill;
                     55:        j = Game.length;
                     56:        Initial.kling = Status.kling = i * j * 5;
                     57:        Initial.energy = Status.energy = 5000;
                     58:        Initial.torped = Status.torped = 10;
                     59:        Status.ship = ENTERPRISE;
                     60:        Status.shipname = "Enterprise";
                     61:        Initial.shield = Status.shield = 1500;
                     62:        Initial.resource = Status.resource = Initial.kling * Initial.time;
                     63:        Initial.reserves = Status.reserves = (6 - Game.skill) * 2.0;
                     64:        Initial.crew = Status.crew = 387;
                     65:        Initial.brigfree = Status.brigfree = 40;
                     66:        Status.shldup = 1;
                     67:        Status.cond = GREEN;
                     68:        Status.warp = 5.0;
                     69:        Status.warp2 = 25.0;
                     70:        Status.warp3 = 125.0;
                     71:        Status.sinsbad = 0;
                     72:        Status.cloaked = 0;
                     73:        Initial.date = Status.date = (ranf(20) + 20) * 100;
                     74:        f = Game.skill;
                     75:        for (i = 0; i < NDEV; i++)
                     76:                if (Device[i].name[0] == '*')
                     77:                        Param.damfac[i] = 0;
                     78:                else
                     79:                        Param.damfac[i] = log(f+0.5);
                     80:        /* these probabilities must sum to 1000 */
                     81:        Param.damprob[WARP] = 70;       /* warp drive            7.0% */
                     82:        Param.damprob[SRSCAN] = 110;    /* short range scanners 11.0% */
                     83:        Param.damprob[LRSCAN] = 110;    /* long range scanners  11.0% */
                     84:        Param.damprob[PHASER] = 125;    /* phasers              12.5% */
                     85:        Param.damprob[TORPED] = 125;    /* photon torpedoes     12.5% */
                     86:        Param.damprob[IMPULSE] = 75;    /* impulse engines       7.5% */
                     87:        Param.damprob[SHIELD] = 150;    /* shield control       15.0% */
                     88:        Param.damprob[COMPUTER] = 20;   /* computer              2.0% */
                     89:        Param.damprob[SSRADIO] = 35;    /* subspace radio        3.5% */
                     90:        Param.damprob[LIFESUP] = 30;    /* life support          3.0% */
                     91:        Param.damprob[SINS] = 20;       /* navigation system     2.0% */
                     92:        Param.damprob[CLOAK] = 50;      /* cloaking device       5.0% */
                     93:        Param.damprob[XPORTER] = 80;    /* transporter           8.0% */
                     94:        /* check to see that I didn't blow it */
                     95:        for (i = j = 0; i < NDEV; i++)
                     96:                j =+ Param.damprob[i];
                     97:        if (j != 1000)
                     98:                syserr("Device probabilities sum to %d", j);
                     99:        Param.dockfac = 0.5;
                    100:        Param.regenfac = (6 - Game.skill) * 0.02;
                    101:        Param.warptime = 10;
                    102:        Param.stopengy = 50;
                    103:        Param.shupengy = 40;
                    104:        i = Game.skill;
                    105:        Param.klingpwr = 100 + 150 * i;
                    106:        if (i >= 6)
                    107:                Param.klingpwr =+ 150;
                    108:        Param.phasfac = 0.8;
                    109:        Param.hitfac = 0.5;
                    110:        Param.moveprob[KM_OB] = 45;
                    111:        Param.movefac[KM_OB] = .09;
                    112:        Param.moveprob[KM_OA] = 40;
                    113:        Param.movefac[KM_OA] = -0.05;
                    114:        Param.moveprob[KM_EB] = 40;
                    115:        Param.movefac[KM_EB] = 0.075;
                    116:        Param.moveprob[KM_EA] = 25 + 5 * Game.skill;
                    117:        Param.movefac[KM_EA] = -0.06 * Game.skill;
                    118:        Param.moveprob[KM_LB] = 0;
                    119:        Param.movefac[KM_LB] = 0.0;
                    120:        Param.moveprob[KM_LA] = 10 + 10 * Game.skill;
                    121:        Param.movefac[KM_LA] = 0.25;
                    122:        Param.eventdly[E_SNOVA] = 0.5;
                    123:        Param.eventdly[E_LRTB] = 25.0;
                    124:        Param.eventdly[E_KATSB] = 1.0;
                    125:        Param.eventdly[E_KDESB] = 3.0;
                    126:        Param.eventdly[E_ISSUE] = 1.0;
                    127:        Param.eventdly[E_SNAP] = 0.5;
                    128:        Param.eventdly[E_ENSLV] = 0.5;
                    129:        Param.eventdly[E_REPRO] = 2.0;
                    130:        Param.navigcrud[0] = 1.50;
                    131:        Param.navigcrud[1] = 0.75;
                    132:        Param.cloakenergy = 1000;
                    133:        for (i = 0; i < MAXEVENTS; i++)
                    134:        {
                    135:                e = &Event[i];
                    136:                e->date = 1e50;
                    137:                e->evcode = -1;
                    138:        }
                    139:        schedule(E_SNOVA, logdly(E_SNOVA), 0, 0, 0);
                    140:        schedule(E_LRTB, logdly(E_LRTB), 0, 0, 0);
                    141:        schedule(E_KATSB, logdly(E_KATSB), 0, 0, 0);
                    142:        schedule(E_ISSUE, logdly(E_ISSUE), 0, 0, 0);
                    143:        schedule(E_SNAP, logdly(E_SNAP), 0, 0, 0);
                    144:        Sectx = ranf(NSECTS);
                    145:        Secty = ranf(NSECTS);
                    146:        for (i = 0; i < NDEV; i++)
                    147:                Damage[i] = 0;
                    148:        Game.gkillk = Game.kills = Game.killb = 0;
                    149:        Game.deaths = Game.negenbar = 0;
                    150:        Game.captives = 0;
                    151:        Game.killinhab = 0;
                    152:        Game.distresses = 0;
                    153:        Game.helps = 0;
                    154:        Game.killed = 0;
                    155:        Game.snap = 0;
                    156:        Move.endgame = 0;
                    157: 
                    158:        /* setup stars */
                    159:        for (i = 0; i < NQUADS; i++)
                    160:                for (j = 0; j < NQUADS; j++)
                    161:                {
                    162:                        q = &Quad[i][j];
                    163:                        q->qkling = q->bases = 0;
                    164:                        q->scanned = -1;
                    165:                        q->stars = ranf(9) + 1;
                    166:                        q->holes = ranf(3-(q->stars/5));
                    167:                        q->systemname = 0;
                    168:                }
                    169: 
                    170:        /* select inhabited starsystems */
                    171:        for (d = 1; d < NINHAB; d++)
                    172:        {
                    173:                do
                    174:                {
                    175:                        i = ranf(NQUADS);
                    176:                        j = ranf(NQUADS);
                    177:                        q = &Quad[i][j];
                    178:                } while (q->systemname);
                    179:                q->systemname = d;
                    180:        }
                    181: 
                    182:        /* position starbases */
                    183:        d = (Initial.bases>4 ? 1 : 2);
                    184:        for (i = 0; i < NQUADS; i++)
                    185:                for (j = 0; j < NQUADS; j++)
                    186:                        base_sq[i][j]=0;
                    187:        for (n = 0; n < Initial.bases; n++)
                    188:                while (1)
                    189:                {
                    190:                        ix=ranf(NQUADS-2)+1;
                    191:                        iy=ranf(NQUADS-2)+1;
                    192:                        if(base_sq[ix][iy])
                    193:                                continue;
                    194:                        q = &Quad[ix][iy];
                    195:                        for(i=ix-d; i<=ix+d; i++)
                    196:                                for(j=iy-d; j<=iy+d; j++)
                    197:                                        if(i>=0 && j>=0 && i<NQUADS && j<NQUADS)
                    198:                                                base_sq[i][j]++;
                    199:                        q->bases = 1;
                    200:                        Base[n].x = ix;
                    201:                        Base[n].y = iy;
                    202:                        q->scanned = 1001;
                    203:                /* Enterprise cruising near star base */
                    204:                        if(n==0)
                    205:                        {       Quadx=ix;
                    206:                                Quady=iy;
                    207:                        }
                    208:                        break;
                    209:                }
                    210: 
                    211:        /* position klingons */
                    212:        for (i = Initial.kling; i > 0; )
                    213:        {
                    214:                klump = ranf(4) + 1;
                    215:                if (klump > i)
                    216:                        klump = i;
                    217:                while (1)
                    218:                {
                    219:                        ix = ranf(NQUADS);
                    220:                        iy = ranf(NQUADS);
                    221:                        q = &Quad[ix][iy];
                    222:                        if (q->qkling + klump > 9)
                    223:                                continue;
                    224:                        q->qkling =+ klump;
                    225:                        i =- klump;
                    226:                        break;
                    227:                }
                    228:        }
                    229: 
                    230:        /* initialize this quadrant */
                    231:        printf("%d Klingons; it takes %d units to kill a Klingon.\n", Initial.kling, Param.klingpwr);
                    232:        printf("%d starbases at", Initial.bases);
                    233:        for (i = 0; i < Initial.bases; i++)
                    234:                printf(" %d,%d", Base[i].x, Base[i].y);
                    235:        printf("\n");
                    236:        Move.free = 0;
                    237:        initquad(0);
                    238:        scansys(1);
                    239:        attack(0);
                    240:        return(1);
                    241: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.