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

bsd-games/2.17/trek/shield.c

    1: /*      $NetBSD: shield.c,v 1.8 2003/08/07 09:37:54 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[] = "@(#)shield.c    8.1 (Berkeley) 5/31/93";
   36: #else
   37: __RCSID("$NetBSD: shield.c,v 1.8 2003/08/07 09:37:54 agc Exp $");
   38: #endif
   39: #endif /* not lint */
   40: 
   41: #include <stdio.h>
   42: #include "trek.h"
   43: #include "getpar.h"
   44: 
   45: /*
   46: **  SHIELD AND CLOAKING DEVICE CONTROL
   47: **
   48: **      'f' is one for auto shield up (in case of Condition RED),
   49: **      zero for shield control, and negative one for cloaking
   50: **      device control.
   51: **
   52: **      Called with an 'up' or 'down' on the same line, it puts
   53: **      the shields/cloak into the specified mode.  Otherwise it
   54: **      reports to the user the current mode, and asks if she wishes
   55: **      to change.
   56: **
   57: **      This is not a free move.  Hits that occur as a result of
   58: **      this move appear as though the shields are half up/down,
   59: **      so you get partial hits.
   60: */
   61: 
   62: const struct cvntab Udtab[] =
   63: {
   64:         { "u",         "p",           (cmdfun)1,       0 },
   65:         { "d",         "own",         (cmdfun)0,     0 },
   66:         { NULL,                NULL,         NULL,          0 }
   67: };
   68: 
   69: void
   70: shield(f)
   71: int     f;
   72: {
   73:         int            i;
   74:         const struct cvntab    *r;
   75:         char           s[100];
   76:         const char     *device, *dev2, *dev3;
   77:         int            ind;
   78:         char           *stat;
   79: 
   80:         if (f > 0 && (Ship.shldup || damaged(SRSCAN)))
   81:                 return;
   82:         if (f < 0)
   83:         {
   84:                 /* cloaking device */
   85:                 if (Ship.ship == QUEENE) {
   86:                         printf("Ye Faire Queene does not have the cloaking device.\n");
   87:                         return;
   88:                 }
   89:                 device = "Cloaking device";
   90:                 dev2 = "is";
   91:                 ind = CLOAK;
   92:                 dev3 = "it";
   93:                 stat = &Ship.cloaked;
   94:         }
   95:         else
   96:         {
   97:                 /* shields */
   98:                 device = "Shields";
   99:                 dev2 = "are";
  100:                 dev3 = "them";
  101:                 ind = SHIELD;
  102:                 stat = &Ship.shldup;
  103:         }
  104:         if (damaged(ind))
  105:         {
  106:                 if (f <= 0)
  107:                         out(ind);
  108:                 return;
  109:         }
  110:         if (Ship.cond == DOCKED)
  111:         {
  112:                 printf("%s %s down while docked\n", device, dev2);
  113:                 return;
  114:         }
  115:         if (f <= 0 && !testnl())
  116:         {
  117:                 r = getcodpar("Up or down", Udtab);
  118:                 i = (long) r->value;
  119:         }
  120:         else
  121:         {
  122:                 if (*stat)
  123:                         (void)sprintf(s, "%s %s up.  Do you want %s down", device, dev2, dev3);
  124:                 else
  125:                         (void)sprintf(s, "%s %s down.  Do you want %s up", device, dev2, dev3);
  126:                 if (!getynpar(s))
  127:                         return;
  128:                 i = !*stat;
  129:         }
  130:         if (*stat == i)
  131:         {
  132:                 printf("%s already ", device);
  133:                 if (i)
  134:                         printf("up\n");
  135:                 else
  136:                         printf("down\n");
  137:                 return;
  138:         }
  139:         if (i) {
  140:                 if (f >= 0)
  141:                         Ship.energy -= Param.shupengy;
  142:                 else
  143:                         Ship.cloakgood = 0;
  144:         }
  145:         Move.free = 0;
  146:         if (f >= 0)
  147:                 Move.shldchg = 1;
  148:         *stat = i;
  149:         return;
  150: }
Syntax (Markdown)