|
|
1.1 root 1: # include "trek.h"
2:
3: /**
4: ** move under warp power
5: **/
6:
7: float newpos();
8:
9: ram()
10: {
11: register int course;
12: int ix, iy;
13: float dist;
14:
15: if(getsect(&ix, &iy)==0)
16: return;
17: course=dokalc(Quadx,Quady,ix,iy,&dist);
18: warp(1,course,dist);
19: }
20:
21: move()
22: {
23: int course;
24: float dist;
25:
26: if(Status.cond==DOCKED) {
27: printf("%s is docked.\n", Status.shipname);
28: return;
29: }
30: if(getcodi(&course, &dist)==0)
31: return;
32: warp(0, course, dist);
33: }
34:
35: warp(ramflg, c, d)
36: int ramflg;
37: int c;
38: double d;
39: {
40: int course;
41: char evc;
42: float power;
43: float dist;
44: float time;
45: float speed;
46: double frac;
47: register int percent;
48: register int i;
49: extern char Snapshot[];
50:
51: if (Damage[WARP])
52: {
53: printf("Warp drive is disabled\n");
54: return;
55: }
56: course = c;
57: dist = d;
58: time = Param.warptime * dist / Status.warp2;
59: power = (dist + 0.05) * Status.warp3;
60: power =+ Status.cloaked * Param.cloakenergy * time;
61: percent = 100 * power / Status.energy + 0.5;
62: percent =* (Status.shldup+1);
63: if (percent >= 85)
64: {
65: printf("Scotty: That would consume %d%% of our remaining energy.\n",
66: percent);
67: if (!getynpar("Are you sure that is wise"))
68: return;
69: }
70: percent = 100 * time / Status.time + 0.5;
71: if (percent >= 85)
72: {
73: printf("Spock: That would take %d%% of our remaining time.\n",
74: percent);
75: if (!getynpar("Are you sure that is wise"))
76: return;
77: }
78: if (ranf(200) < 25 * (Status.warp - 6.0))
79: {
80: frac = franf();
81: dist =* frac;
82: time =* frac;
83: damage(WARP, (frac + 1.0) * Status.warp * (franf() + 0.25) * 0.20);
84: printf("Damage occurred to warp engines\n");
85: }
86: speed = Status.warp2 / Param.warptime;
87: Move.delta = newpos(ramflg, course, time, speed);
88: dist = Move.delta * speed;
89: Status.energy =- dist * Status.warp3 * (Status.shldup + 1);
90: if (Status.warp <= 9.0)
91: return;
92: printf("___ Speed exceeding warp nine ___\n");
93: sleep(2);
94: printf("Ship's safety systems malfunction\n");
95: sleep(2);
96: printf("Crew experiencing extreme sensory distortion\n");
97: sleep(4);
98: if (ranf(100) >= 50 * dist)
99: {
100: printf("Equilibrium restored -- all systems normal\n");
101: return;
102: }
103: percent = ranf(100);
104: if (percent < 90)
105: {
106: /* time warp */
107: if (percent < 35 || !Game.snap)
108: {
109: time = (Status.warp - 8.0) * dist * (franf() + 1.0);
110: Status.date =+ time;
111: printf("Positive time portal entered -- it is now Stardate %.2f\n",
112: Status.date);
113: for (i = 0; i < MAXEVENTS; i++)
114: if ((evc = Event[i].evcode) == E_FIXDV || evc == E_LRTB)
115: reschedule(&Event[i], time);
116: } else {
117: time = Status.date;
118: bmove(i=Snapshot, &Status.bases, 2);
119: bmove(i =+ 2, &Status.date, 12);
120: bmove(i =+ 12, &Quad, sizeof Quad);
121: bmove(i =+ sizeof Quad, &Event, sizeof Event);
122: bmove(i =+ sizeof Event, &Base, sizeof Base);
123: bmove(i =+ sizeof Base, &Etc, sizeof Etc);
124: printf("Negative time portal entered -- it is now Stardate %.2f\n",
125: Status.date);
126: for (i = 0; i < MAXEVENTS; i++)
127: if (Event[i].evcode == E_FIXDV)
128: reschedule(&Event[i], Status.date - time);
129: }
130: } else if (percent < 95)
131: lose(L_TOOFAST);
132: else {
133: printf("Equilibrium restored -- extreme damage occured to ship systems\n");
134: for (i = 0; i < NDEV; i++)
135: damage(i, (franf() + 1.0) * (Status.warp - 6) * Param.damfac[i] * 0.20);
136: Status.shldup = 0;
137: dcrept();
138: }
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.