(linenum→info "unix/slp.c:2238")

bsd-games/2.17/trek/nova.c

    1: /*      $NetBSD: nova.c,v 1.6 2003/08/07 09:37:53 agc Exp $  */
    2: 
    3: /*
    4:  * Copyright (c) 1980, 1993
    5:  *      The Regents of the University of California.  All rights reserved.
    6:  *
    7:  * Redistribution and use in source and binary forms, with or without
    8:  * modification, are permitted provided that the following conditions
    9:  * are met:
   10:  * 1. Redistributions of source code must retain the above copyright
   11:  *    notice, this list of conditions and the following disclaimer.
   12:  * 2. Redistributions in binary form must reproduce the above copyright
   13:  *    notice, this list of conditions and the following disclaimer in the
   14:  *    documentation and/or other materials provided with the distribution.
   15:  * 3. Neither the name of the University nor the names of its contributors
   16:  *    may be used to endorse or promote products derived from this software
   17:  *    without specific prior written permission.
   18:  *
   19:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29:  * SUCH DAMAGE.
   30:  */
   31: 
   32: #include <sys/cdefs.h>
   33: #ifndef lint
   34: #if 0
   35: static char sccsid[] = "@(#)nova.c      8.1 (Berkeley) 5/31/93";
   36: #else
   37: __RCSID("$NetBSD: nova.c,v 1.6 2003/08/07 09:37:53 agc Exp $");
   38: #endif
   39: #endif /* not lint */
   40: 
   41: #include <stdio.h>
   42: #include "trek.h"
   43: 
   44: /*
   45: **  CAUSE A NOVA TO OCCUR
   46: **
   47: **      A nova occurs.  It is the result of having a star hit with
   48: **      a photon torpedo.  There are several things which may happen.
   49: **      The star may not be affected.  It may go nova.  It may turn
   50: **      into a black hole.  Any (yummy) it may go supernova.
   51: **
   52: **      Stars that go nova cause stars which surround them to undergo
   53: **      the same probabilistic process.  Klingons next to them are
   54: **      destroyed.  And if the starship is next to it, it gets zapped.
   55: **      If the zap is too much, it gets destroyed.
   56: */
   57: 
   58: void
   59: nova(x, y)
   60: int     x, y;
   61: {
   62:         int    i, j;
   63:         int    se;
   64: 
   65:         if (Sect[x][y] != STAR || Quad[Ship.quadx][Ship.quady].stars < 0)
   66:                 return;
   67:         if (ranf(100) < 15)
   68:         {
   69:                 printf("Spock: Star at %d,%d failed to nova.\n", x, y);
   70:                 return;
   71:         }
   72:         if (ranf(100) < 5) {
   73:                 snova(x, y);
   74:                 return;
   75:         }
   76:         printf("Spock: Star at %d,%d gone nova\n", x, y);
   77: 
   78:         if (ranf(4) != 0)
   79:                 Sect[x][y] = EMPTY;
   80:         else
   81:         {
   82:                 Sect[x][y] = HOLE;
   83:                 Quad[Ship.quadx][Ship.quady].holes += 1;
   84:         }
   85:         Quad[Ship.quadx][Ship.quady].stars -= 1;
   86:         Game.kills += 1;
   87:         for (i = x - 1; i <= x + 1; i++)
   88:         {
   89:                 if (i < 0 || i >= NSECTS)
   90:                         continue;
   91:                 for (j = y - 1; j <= y + 1; j++)
   92:                 {
   93:                         if (j < 0 || j >= NSECTS)
   94:                                 continue;
   95:                         se = Sect[i][j];
   96:                         switch (se)
   97:                         {
   98: 
   99:                           case EMPTY:
  100:                           case HOLE:
  101:                                 break;
  102: 
  103:                           case KLINGON:
  104:                                 killk(i, j);
  105:                                 break;
  106: 
  107:                           case STAR:
  108:                                 nova(i, j);
  109:                                 break;
  110: 
  111:                           case INHABIT:
  112:                                 kills(i, j, -1);
  113:                                 break;
  114: 
  115:                           case BASE:
  116:                                 killb(i, j);
  117:                                 Game.killb += 1;
  118:                                 break;
  119: 
  120:                           case ENTERPRISE:
  121:                           case QUEENE:
  122:                                 se = 2000;
  123:                                 if (Ship.shldup) {
  124:                                         if (Ship.shield >= se) {
  125:                                                 Ship.shield -= se;
  126:                                                 se = 0;
  127:                                         } else {
  128:                                                 se -= Ship.shield;
  129:                                                 Ship.shield = 0;
  130:                                         }
  131:                                 }
  132:                                 Ship.energy -= se;
  133:                                 if (Ship.energy <= 0)
  134:                                         lose(L_SUICID);
  135:                                 break;
  136: 
  137:                           default:
  138:                                 printf("Unknown object %c at %d,%d destroyed\n",
  139:                                         se, i, j);
  140:                                 Sect[i][j] = EMPTY;
  141:                                 break;
  142:                         }
  143:                 }
  144:         }
  145:         return;
  146: }
Syntax (Markdown)