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

bsd-games/2.17/trek/capture.c

    1: /*      $NetBSD: capture.c,v 1.6 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[] = "@(#)capture.c   8.1 (Berkeley) 5/31/93";
   36: #else
   37: __RCSID("$NetBSD: capture.c,v 1.6 2003/08/07 09:37:50 agc Exp $");
   38: #endif
   39: #endif /* not lint */
   40: 
   41: #include <stdio.h>
   42: #include "trek.h"
   43: 
   44: /*
   45: **  Ask a Klingon To Surrender
   46: **
   47: **      (Fat chance)
   48: **
   49: **      The Subspace Radio is needed to ask a Klingon if he will kindly
   50: **      surrender.  A random Klingon from the ones in the quadrant is
   51: **      chosen.
   52: **
   53: **      The Klingon is requested to surrender.  The probability of this
   54: **      is a function of that Klingon's remaining power, our power,
   55: **      etc.
   56: */
   57: 
   58: /*ARGSUSED*/
   59: void
   60: capture(v)
   61:         int v __attribute__((__unused__));
   62: {
   63:         int            i;
   64:         struct kling   *k;
   65:         double                 x;
   66: 
   67:         /* check for not cloaked */
   68:         if (Ship.cloaked)
   69:         {
   70:                 printf("Ship-ship communications out when cloaked\n");
   71:                 return;
   72:         }
   73:         if (damaged(SSRADIO)) {
   74:                 out(SSRADIO);
   75:                 return;
   76:         }
   77:         /* find out if there are any at all */
   78:         if (Etc.nkling <= 0)
   79:         {
   80:                 printf("Uhura: Getting no response, sir\n");
   81:                 return;
   82:         }
   83: 
   84:         /* if there is more than one Klingon, find out which one */
   85:         k = selectklingon();
   86:         Move.free = 0;
   87:         Move.time = 0.05;
   88: 
   89:         /* check out that Klingon */
   90:         k->srndreq++;
   91:         x = Param.klingpwr;
   92:         x *= Ship.energy;
   93:         x /= k->power * Etc.nkling;
   94:         x *= Param.srndrprob;
   95:         i = x;
   96: #       ifdef xTRACE
   97:         if (Trace)
   98:                 printf("Prob = %d (%.4f)\n", i, x);
   99: #       endif
  100:         if (i > ranf(100))
  101:         {
  102:                 /* guess what, he surrendered!!! */
  103:                 printf("Klingon at %d,%d surrenders\n", k->x, k->y);
  104:                 i = ranf(Param.klingcrew);
  105:                 if ( i > 0 )
  106:                         printf("%d klingons commit suicide rather than be taken captive\n", Param.klingcrew - i);
  107:                 if (i > Ship.brigfree)
  108:                         i = Ship.brigfree;
  109:                 Ship.brigfree -= i;
  110:                 printf("%d captives taken\n", i);
  111:                 killk(k->x, k->y);
  112:                 return;
  113:         }
  114: 
  115:         /* big surprise, he refuses to surrender */
  116:         printf("Fat chance, captain\n");
  117:         return;
  118: }
  119: 
  120: 
  121: /*
  122: **  SELECT A KLINGON
  123: **
  124: **      Cruddy, just takes one at random.  Should ask the captain.
  125: */
  126: 
  127: struct kling    *selectklingon()
  128: {
  129:         int            i;
  130: 
  131:         if (Etc.nkling < 2)
  132:                 i = 0;
  133:         else
  134:                 i = ranf(Etc.nkling);
  135:         return (&Etc.klingon[i]);
  136: }
Syntax (Markdown)