|
|
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.