|
|
1.1 ! root 1: # include "trek.h" ! 2: ! 3: /** ! 4: ** move under warp or impulse power ! 5: **/ ! 6: ! 7: float newpos(ramflg, course, time, speed) ! 8: int ramflg; ! 9: int course; ! 10: float time; ! 11: float speed; ! 12: { ! 13: double angle; ! 14: float x, y, dx, dy; ! 15: register int ix, iy; ! 16: double bigger; ! 17: int n; ! 18: register int i; ! 19: float dist; ! 20: float sectsize; ! 21: double xn; ! 22: float evtime; ! 23: ! 24: sectsize = NSECTS; ! 25: /* initialize delta factors for move */ ! 26: angle = course * 0.0174532925; ! 27: if (Damage[SINS]) ! 28: angle =+ Param.navigcrud[1] * (franf() - 0.5); ! 29: else ! 30: if (Status.sinsbad) ! 31: angle =+ Param.navigcrud[0] * (franf() - 0.5); ! 32: dx = -cos(angle); ! 33: dy = sin(angle); ! 34: bigger = fabs(dx); ! 35: dist = fabs(dy); ! 36: if (dist > bigger) ! 37: bigger = dist; ! 38: dx =/ bigger; ! 39: dy =/ bigger; ! 40: ! 41: /* check for LRTB */ ! 42: evtime = Etc.eventptr[E_LRTB]->date - Status.date; ! 43: if (time > evtime && Nkling < 3) ! 44: { ! 45: time = evtime + 0.05; ! 46: } ! 47: dist = time * speed; ! 48: ! 49: /* move within quadrant */ ! 50: Sect[Sectx][Secty] = EMPTY; ! 51: x = Sectx + 0.5; ! 52: y = Secty + 0.5; ! 53: xn = NSECTS * dist * bigger; ! 54: n = xn + 0.5; ! 55: Move.free = 0; ! 56: ! 57: for (i = 0; i < n; i++) ! 58: { ! 59: ix = (x =+ dx); ! 60: iy = (y =+ dy); ! 61: if (x < 0.0 || y < 0.0 || x >= sectsize || y >= sectsize) ! 62: { ! 63: /* enter new quadrant */ ! 64: ix = (Quadx * NSECTS + Sectx + dx * xn + 0.5); ! 65: iy = (Quady * NSECTS + Secty + dy * xn + 0.5); ! 66: Sectx = x; ! 67: Secty = y; ! 68: compkldist(0); ! 69: Move.newquad = 2; ! 70: attack(0); ! 71: checkcond(); ! 72: Quadx = ix / NSECTS; ! 73: Quady = iy / NSECTS; ! 74: Sectx = ix % NSECTS; ! 75: Secty = iy % NSECTS; ! 76: if (ix < 0 || Quadx >= NQUADS || iy < 0 || Quady >= NQUADS) ! 77: barrier("negative energy barrier"); ! 78: else initquad(0); ! 79: n = 0; ! 80: break; ! 81: } ! 82: if (Sect[ix][iy] != EMPTY) ! 83: { ! 84: /* we just hit something */ ! 85: if (Damage[COMPUTER] || ramflg) { ! 86: collide(ix, iy); ! 87: ix = x - dx; ! 88: iy = y - dy; ! 89: } else if(Sect[ix][iy]==BLACKHOLE) { ! 90: printf("Spock: Captain, We are approaching a black hole\n"); ! 91: barrier("black hole"); ! 92: Status.resource =- Status.kling * (franf() + 0.5); ! 93: n = 0; ! 94: } else { ! 95: ix = x - dx; ! 96: iy = y - dy; ! 97: printf("Computer reports navigation error; %s stopped at %d,%d\n", ! 98: Status.shipname, ix, iy); ! 99: Status.energy =- Param.stopengy * speed; ! 100: } ! 101: break; ! 102: } ! 103: } ! 104: if (n > 0) ! 105: { ! 106: dx = Sectx - ix; ! 107: dy = Secty - iy; ! 108: dist = sqrt(dx * dx + dy * dy) / NSECTS; ! 109: time = dist / speed; ! 110: Sectx = ix; ! 111: Secty = iy; ! 112: } ! 113: Sect[Sectx][Secty] = Status.ship; ! 114: compkldist(0); ! 115: return(time); ! 116: } ! 117: ! 118: barrier(msg) ! 119: char *msg; ! 120: { ! 121: if (!Damage[COMPUTER]) ! 122: { ! 123: Quadx = ranf(NQUADS); ! 124: Quady = ranf(NQUADS); ! 125: Sectx = ranf(NSECTS); ! 126: Secty = ranf(NSECTS); ! 127: printf("Computer applies full reverse power to avoid the %s\n", msg); ! 128: printf(" A space warp was entered and you ended up in quadrant %d,%d\n", ! 129: Quadx, Quady); ! 130: } ! 131: else ! 132: lose(L_NEGENB); ! 133: initquad(0); ! 134: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.