# 2.11BSD#431 - /usr/src/games/trek/snova.c

##### Functions

    snova             X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       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;
      42:     register struct quad    *q;
      43:
      44:     f = 0;
      45:     ix = x;
      46:     if (ix < 0)
      47:     {
      48:         /* choose a quadrant */
      49:         while (1)
      50:         {
      51:             qx = ranf(NQUADS);
      52:             qy = ranf(NQUADS);
      53:             q = &Quad[qx][qy];
      54:             if (q->stars > 0)
      55:                 break;
      56:         }
      57:         if (Ship.quadx == qx && Ship.quady == qy)
      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:     {
      75:         /* current quadrant */
      76:         iy = y;
      77:         qx = Ship.quadx;
      78:         qy = Ship.quady;
      79:         q = &Quad[qx][qy];
      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:     {
      99:         if (!damaged(SSRADIO))
     100:         {
     101:             q->scanned = 1000;
     102:             printf("\nUhura: Captain, Starfleet Command reports a supernova\n");
     103:             printf("  in quadrant %d,%d.  Caution is advised\n", qx, qy);
     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

- in /usr/src/games/trek/events.c line 108
- in /usr/src/games/trek/nova.c line 41

#### 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: 503 |