```   1: /*
2:  * Copyright (c) 1980 Regents of the University of California.
4:  * specifies the terms and conditions for redistribution.
5:  */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)snova.c	5.1 (Berkeley) 5/30/85";
9: #endif not lint
10:
11: # include   "trek.h"
12:
13: /*
14: **  CAUSE SUPERNOVA TO OCCUR
15: **
16: **	A supernova occurs.  If 'ix' < 0, a random quadrant is chosen;
17: **	otherwise, the current quadrant is taken, and (ix, iy) give
18: **	the sector quadrants of the star which is blowing up.
19: **
20: **	If the supernova turns out to be in the quadrant you are in,
21: **	you go into "emergency override mode", which tries to get you
22: **	out of the quadrant as fast as possible.  However, if you
23: **	don't have enough fuel, or if you by chance run into something,
24: **	or some such thing, you blow up anyway.  Oh yeh, if you are
25: **	within two sectors of the star, there is nothing that can
26: **	be done for you.
27: **
28: **	When a star has gone supernova, the quadrant becomes uninhab-
29: **	itable for the rest of eternity, i.e., the game.  If you ever
30: **	try stopping in such a quadrant, you will go into emergency
31: **	override mode.
32: */
33:
34: snova(x, y)
35: int x, y;
36: {
37:     int         qx, qy;
38:     register int        ix, iy;
39:     int         f;
40:     int         dx, dy;
41:     int         n;
43:
44:     f = 0;
45:     ix = x;
46:     if (ix < 0)
47:     {
48:         /* choose a quadrant */
49:         while (1)
50:         {
54:             if (q->stars > 0)
55:                 break;
56:         }
58:         {
59:             /* select a particular star */
60:             n = ranf(q->stars);
61:             for (ix = 0; ix < NSECTS; ix++)
62:             {
63:                 for (iy = 0; iy < NSECTS; iy++)
64:                     if (Sect[ix][iy] == STAR || Sect[ix][iy] == INHABIT)
65:                         if ((n -= 1) <= 0)
66:                             break;
67:                 if (n <= 0)
68:                     break;
69:             }
70:             f = 1;
71:         }
72:     }
73:     else
74:     {
76:         iy = y;
80:         f = 1;
81:     }
82:     if (f)
83:     {
84:         /* supernova is in same quadrant as Enterprise */
85:         printf("\nRED ALERT: supernova occuring at %d,%d\n", ix, iy);
86:         dx = ix - Ship.sectx;
87:         dy = iy - Ship.secty;
88:         if (dx * dx + dy * dy <= 2)
89:         {
90:             printf("***  Emergency override attem");
91:             sleep(1);
92:             printf("\n");
93:             lose(L_SNOVA);
94:         }
95:         q->scanned = 1000;
96:     }
97:     else
98:     {
100:         {
101:             q->scanned = 1000;
102:             printf("\nUhura: Captain, Starfleet Command reports a supernova\n");
104:         }
105:     }
106:
107:     /* clear out the supernova'ed quadrant */
108:     dx = q->klings;
109:     dy = q->stars;
110:     Now.klings -= dx;
111:     if (x >= 0)
112:     {
113:         /* Enterprise caused supernova */
114:         Game.kills += dy;
115:         if (q->bases)
116:             killb(qx, qy, -1);
117:         Game.killk += dx;
118:     }
119:     else
120:         if (q->bases)
121:             killb(qx, qy, 0);
122:     killd(qx, qy, (x >= 0));
123:     q->stars = -1;
124:     q->klings = 0;
125:     if (Now.klings <= 0)
126:     {
127:         printf("Lucky devil, that supernova destroyed the last klingon\n");
128:         win();
129:     }
130:     return;
131: }
```

#### Defined functions

snova defined in line 34; used 2 times

#### Defined variables

sccsid defined in line 8; never used
 Last modified: 1985-05-30 Generated: 2016-12-26 Generated by src2html V0.67 page hit count: 1772