|
|
1.1 ! root 1: # include "trek.h" ! 2: ! 3: /** ! 4: ** cause supernova to occur ! 5: **/ ! 6: ! 7: snova(x, y) ! 8: int x, y; ! 9: { ! 10: int qx, qy; ! 11: register int ix, iy; ! 12: int f; ! 13: int dx, dy; ! 14: int n; ! 15: register QUAD *q; ! 16: ! 17: f = 0; ! 18: ix = x; ! 19: if (ix < 0) ! 20: { ! 21: /* choose a quadrant */ ! 22: while (1) ! 23: { ! 24: qx = ranf(NQUADS); ! 25: qy = ranf(NQUADS); ! 26: q = &Quad[qx][qy]; ! 27: if (q->stars > 0) ! 28: break; ! 29: } ! 30: if (Quadx == qx && Quady == qy) ! 31: { ! 32: /* select a particular star */ ! 33: n = ranf(q->stars); ! 34: for (ix = 0; ix < NSECTS; ix++) ! 35: { ! 36: for (iy = 0; iy < NSECTS; iy++) ! 37: if (Sect[ix][iy] == STAR || Sect[ix][iy] == INHABIT) ! 38: if ((n =- 1) <= 0) ! 39: break; ! 40: if (n <= 0) ! 41: break; ! 42: } ! 43: f = 1; ! 44: } ! 45: } ! 46: else ! 47: { ! 48: /* current quadrant */ ! 49: iy = y; ! 50: qx = Quadx; ! 51: qy = Quady; ! 52: q = &Quad[qx][qy]; ! 53: f = 1; ! 54: } ! 55: if (f) ! 56: { ! 57: /* supernova is in same quadrant as Enterprise */ ! 58: printf(" *** RED ALERT: supernova occuring at %d,%d", ix, iy); ! 59: dx = ix - Sectx; ! 60: dy = iy - Secty; ! 61: if (dx * dx + dy * dy <= 2) ! 62: { ! 63: printf(" *** Emergency override attempt"); ! 64: sleep(4); ! 65: printf("\n"); ! 66: lose(L_SNOVA); ! 67: } ! 68: printf("\n"); ! 69: q->scanned = 1000; ! 70: kills(ix, iy, x >= 0 ? -1 : 1); ! 71: Nkling = 0; ! 72: } ! 73: else ! 74: { ! 75: if (!Damage[SSRADIO]) ! 76: { ! 77: q->scanned = 1000; ! 78: printf("Uhura: Starfleet Command reports a supernova in quadrant %d,%d\n", qx, qy); ! 79: } ! 80: kills(qx, qy, 0); ! 81: } ! 82: ! 83: /* clear out the supernova'ed quadrant */ ! 84: dx = q->qkling; ! 85: dy = q->stars; ! 86: Status.kling =- dx; ! 87: if (x >= 0) ! 88: { ! 89: /* Enterprise caused supernova */ ! 90: Game.kills =+ dy; ! 91: if (q->bases) { ! 92: killb(qx, qy); Game.killb++; ! 93: } ! 94: Game.gkillk =+ dx; ! 95: } ! 96: else ! 97: if (q->bases) { ! 98: killb(qx, qy); ! 99: } ! 100: q->stars = -1; ! 101: q->qkling = 0; ! 102: if (Status.kling <= 0) ! 103: { ! 104: printf("Lucky devil, that supernova destroyed the last klingon\n"); ! 105: win(); ! 106: } ! 107: return; ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.