|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)snova.c 5.3 (Berkeley) 6/18/88"; ! 20: #endif /* not lint */ ! 21: ! 22: # include "trek.h" ! 23: ! 24: /* ! 25: ** CAUSE SUPERNOVA TO OCCUR ! 26: ** ! 27: ** A supernova occurs. If 'ix' < 0, a random quadrant is chosen; ! 28: ** otherwise, the current quadrant is taken, and (ix, iy) give ! 29: ** the sector quadrants of the star which is blowing up. ! 30: ** ! 31: ** If the supernova turns out to be in the quadrant you are in, ! 32: ** you go into "emergency override mode", which tries to get you ! 33: ** out of the quadrant as fast as possible. However, if you ! 34: ** don't have enough fuel, or if you by chance run into something, ! 35: ** or some such thing, you blow up anyway. Oh yeh, if you are ! 36: ** within two sectors of the star, there is nothing that can ! 37: ** be done for you. ! 38: ** ! 39: ** When a star has gone supernova, the quadrant becomes uninhab- ! 40: ** itable for the rest of eternity, i.e., the game. If you ever ! 41: ** try stopping in such a quadrant, you will go into emergency ! 42: ** override mode. ! 43: */ ! 44: ! 45: snova(x, y) ! 46: int x, y; ! 47: { ! 48: int qx, qy; ! 49: register int ix, iy; ! 50: int f; ! 51: int dx, dy; ! 52: int n; ! 53: register struct quad *q; ! 54: ! 55: f = 0; ! 56: ix = x; ! 57: if (ix < 0) ! 58: { ! 59: /* choose a quadrant */ ! 60: while (1) ! 61: { ! 62: qx = ranf(NQUADS); ! 63: qy = ranf(NQUADS); ! 64: q = &Quad[qx][qy]; ! 65: if (q->stars > 0) ! 66: break; ! 67: } ! 68: if (Ship.quadx == qx && Ship.quady == qy) ! 69: { ! 70: /* select a particular star */ ! 71: n = ranf(q->stars); ! 72: for (ix = 0; ix < NSECTS; ix++) ! 73: { ! 74: for (iy = 0; iy < NSECTS; iy++) ! 75: if (Sect[ix][iy] == STAR || Sect[ix][iy] == INHABIT) ! 76: if ((n -= 1) <= 0) ! 77: break; ! 78: if (n <= 0) ! 79: break; ! 80: } ! 81: f = 1; ! 82: } ! 83: } ! 84: else ! 85: { ! 86: /* current quadrant */ ! 87: iy = y; ! 88: qx = Ship.quadx; ! 89: qy = Ship.quady; ! 90: q = &Quad[qx][qy]; ! 91: f = 1; ! 92: } ! 93: if (f) ! 94: { ! 95: /* supernova is in same quadrant as Enterprise */ ! 96: printf("\nRED ALERT: supernova occuring at %d,%d\n", ix, iy); ! 97: dx = ix - Ship.sectx; ! 98: dy = iy - Ship.secty; ! 99: if (dx * dx + dy * dy <= 2) ! 100: { ! 101: printf("*** Emergency override attem"); ! 102: sleep(1); ! 103: printf("\n"); ! 104: lose(L_SNOVA); ! 105: } ! 106: q->scanned = 1000; ! 107: } ! 108: else ! 109: { ! 110: if (!damaged(SSRADIO)) ! 111: { ! 112: q->scanned = 1000; ! 113: printf("\nUhura: Captain, Starfleet Command reports a supernova\n"); ! 114: printf(" in quadrant %d,%d. Caution is advised\n", qx, qy); ! 115: } ! 116: } ! 117: ! 118: /* clear out the supernova'ed quadrant */ ! 119: dx = q->klings; ! 120: dy = q->stars; ! 121: Now.klings -= dx; ! 122: if (x >= 0) ! 123: { ! 124: /* Enterprise caused supernova */ ! 125: Game.kills += dy; ! 126: if (q->bases) ! 127: killb(qx, qy, -1); ! 128: Game.killk += dx; ! 129: } ! 130: else ! 131: if (q->bases) ! 132: killb(qx, qy, 0); ! 133: killd(qx, qy, (x >= 0)); ! 134: q->stars = -1; ! 135: q->klings = 0; ! 136: if (Now.klings <= 0) ! 137: { ! 138: printf("Lucky devil, that supernova destroyed the last klingon\n"); ! 139: win(); ! 140: } ! 141: return; ! 142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.