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

bsd-games/2.17/trek/destruct.c

    1: /*      $NetBSD: destruct.c,v 1.7 2003/08/07 09:37:50 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[] = "@(#)destruct.c  8.1 (Berkeley) 5/31/93";
   36: #else
   37: __RCSID("$NetBSD: destruct.c,v 1.7 2003/08/07 09:37:50 agc Exp $");
   38: #endif
   39: #endif /* not lint */
   40: 
   41: #include <stdio.h>
   42: #include <string.h>
   43: #include <unistd.h>
   44: #include "trek.h"
   45: #include "getpar.h"
   46: 
   47: /*
   48: **  Self Destruct Sequence
   49: **
   50: **      The computer starts up the self destruct sequence.  Obviously,
   51: **      if the computer is out nothing can happen.  You get a countdown
   52: **      and a request for password.  This must match the password that
   53: **      you entered at the start of the game.
   54: **
   55: **      You get to destroy things when you blow up; hence, it is
   56: **      possible to win the game by destructing if you take the last
   57: **      Klingon with you.
   58: **
   59: **      By the way, the \032 in the message is a ^Z, which is because
   60: **      the terminal in my office is an ADM-3, which uses that char-
   61: **      acter to clear the screen.  I also stick in a \014 (form feed)
   62: **      because that clears some other screens.
   63: **
   64: **      Uses trace flag 41
   65: */
   66: 
   67: /*ARGSUSED*/
   68: void
   69: destruct(v)
   70:         int v __attribute__((__unused__));
   71: {
   72:         char           checkpass[15];
   73:         int    i, j;
   74:         double         zap;
   75: 
   76:         if (damaged(COMPUTER)) {
   77:                 out(COMPUTER);
   78:                 return;
   79:         }
   80:         printf("\n\07 --- WORKING ---\07\n");
   81:         sleep(3);
   82:         /* output the count 10 9 8 7 6 */
   83:         for (i = 10; i > 5; i--)
   84:         {
   85:                 for (j = 10;  j > i; j--)
   86:                         printf("   ");
   87:                 printf("%d\n", i);
   88:                 sleep(1);
   89:         }
   90:         /* check for password on new line only */
   91:         skiptonl(0);
   92:         getstrpar("Enter password verification", checkpass, 14, 0);
   93:         sleep(2);
   94:         if (strcmp(checkpass, Game.passwd) != 0) {
   95:                 printf("Self destruct sequence aborted\n");
   96:                 return;
   97:         }
   98:         printf("Password verified; self destruct sequence continues:\n");
   99:         sleep(2);
  100:         /* output count 5 4 3 2 1 0 */
  101:         for (i = 5; i >= 0; i--)
  102:         {
  103:                 sleep(1);
  104:                 for (j = 5; j > i; j--)
  105:                         printf("   ");
  106:                 printf("%d\n", i);
  107:         }
  108:         sleep(2);
  109:         printf("\032\014***** %s destroyed *****\n", Ship.shipname);
  110:         Game.killed = 1;
  111:         /* let's see what we can blow up!!!! */
  112:         zap = 20.0 * Ship.energy;
  113:         Game.deaths += Ship.crew;
  114:         for (i = 0; i < Etc.nkling; )
  115:         {
  116:                 if (Etc.klingon[i].power * Etc.klingon[i].dist <= zap)
  117:                         killk(Etc.klingon[i].x, Etc.klingon[i].y);
  118:                 else
  119:                         i++;
  120:         }
  121:         /* if we didn't kill the last Klingon (detected by killk), */
  122:         /* then we lose.... */
  123:         lose(L_DSTRCT);
  124: }
Syntax (Markdown)