|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.