home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / games / trek / shield.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  3.8 KB  |  144 lines

  1. /*
  2.  * Copyright (c) 1980 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  */
  33.  
  34. #ifndef lint
  35. static char sccsid[] = "@(#)shield.c    5.5 (Berkeley) 6/1/90";
  36. #endif /* not lint */
  37.  
  38. # include    "trek.h"
  39. # include    "getpar.h"
  40.  
  41. /*
  42. **  SHIELD AND CLOAKING DEVICE CONTROL
  43. **
  44. **    'f' is one for auto shield up (in case of Condition RED),
  45. **    zero for shield control, and negative one for cloaking
  46. **    device control.
  47. **
  48. **    Called with an 'up' or 'down' on the same line, it puts
  49. **    the shields/cloak into the specified mode.  Otherwise it
  50. **    reports to the user the current mode, and asks if she wishes
  51. **    to change.
  52. **
  53. **    This is not a free move.  Hits that occur as a result of
  54. **    this move appear as though the shields are half up/down,
  55. **    so you get partial hits.
  56. */
  57.  
  58. struct cvntab Udtab[] =
  59. {
  60.     "u",        "p",            (int (*)())1,        0,
  61.     "d",        "own",            0,        0,
  62.     0
  63. };
  64.  
  65. shield(f)
  66. int    f;
  67. {
  68.     register int        i;
  69.     char            c;
  70.     struct cvntab        *r;
  71.     char            s[100];
  72.     char            *device, *dev2, *dev3;
  73.     int            ind;
  74.     char            *stat;
  75.  
  76.     if (f > 0 && (Ship.shldup || damaged(SRSCAN)))
  77.         return;
  78.     if (f < 0)
  79.     {
  80.         /* cloaking device */
  81.         if (Ship.ship == QUEENE)
  82.             return (printf("Ye Faire Queene does not have the cloaking device.\n"));
  83.         device = "Cloaking device";
  84.         dev2 = "is";
  85.         ind = CLOAK;
  86.         dev3 = "it";
  87.         stat = &Ship.cloaked;
  88.     }
  89.     else
  90.     {
  91.         /* shields */
  92.         device = "Shields";
  93.         dev2 = "are";
  94.         dev3 = "them";
  95.         ind = SHIELD;
  96.         stat = &Ship.shldup;
  97.     }
  98.     if (damaged(ind))
  99.     {
  100.         if (f <= 0)
  101.             out(ind);
  102.         return;
  103.     }
  104.     if (Ship.cond == DOCKED)
  105.     {
  106.         printf("%s %s down while docked\n", device, dev2);
  107.         return;
  108.     }
  109.     if (f <= 0 && !testnl())
  110.     {
  111.         r = getcodpar("Up or down", Udtab);
  112.         i = (int) r->value;
  113.     }
  114.     else
  115.     {
  116.         if (*stat)
  117.             (void)sprintf(s, "%s %s up.  Do you want %s down", device, dev2, dev3);
  118.         else
  119.             (void)sprintf(s, "%s %s down.  Do you want %s up", device, dev2, dev3);
  120.         if (!getynpar(s))
  121.             return;
  122.         i = !*stat;
  123.     }
  124.     if (*stat == i)
  125.     {
  126.         printf("%s already ", device);
  127.         if (i)
  128.             printf("up\n");
  129.         else
  130.             printf("down\n");
  131.         return;
  132.     }
  133.     if (i)
  134.         if (f >= 0)
  135.             Ship.energy -= Param.shupengy;
  136.         else
  137.             Ship.cloakgood = 0;
  138.     Move.free = 0;
  139.     if (f >= 0)
  140.         Move.shldchg = 1;
  141.     *stat = i;
  142.     return;
  143. }
  144.