1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)shield.c	5.1 (Berkeley) 1/29/86";
   9: #endif not lint
  10: 
  11: # include   "trek.h"
  12: # include   "getpar.h"
  13: 
  14: /*
  15: **  SHIELD AND CLOAKING DEVICE CONTROL
  16: **
  17: **	'f' is one for auto shield up (in case of Condition RED),
  18: **	zero for shield control, and negative one for cloaking
  19: **	device control.
  20: **
  21: **	Called with an 'up' or 'down' on the same line, it puts
  22: **	the shields/cloak into the specified mode.  Otherwise it
  23: **	reports to the user the current mode, and asks if she wishes
  24: **	to change.
  25: **
  26: **	This is not a free move.  Hits that occur as a result of
  27: **	this move appear as though the shields are half up/down,
  28: **	so you get partial hits.
  29: */
  30: 
  31: struct cvntab Udtab[] =
  32: {
  33:     "u",        "p",            (int (*)())1,       0,
  34:     "d",        "own",          0,      0,
  35:     0
  36: };
  37: 
  38: shield(f)
  39: int f;
  40: {
  41:     register int        i;
  42:     char            c;
  43:     struct cvntab       *r;
  44:     char            s[100];
  45:     char            *device, *dev2, *dev3;
  46:     int         ind;
  47:     char            *stat;
  48: 
  49:     if (f > 0 && (Ship.shldup || damaged(SRSCAN)))
  50:         return;
  51:     if (f < 0)
  52:     {
  53:         /* cloaking device */
  54:         if (Ship.ship == QUEENE)
  55:             return (printf("Ye Faire Queene does not have the cloaking device.\n"));
  56:         device = "Cloaking device";
  57:         dev2 = "is";
  58:         ind = CLOAK;
  59:         dev3 = "it";
  60:         stat = &Ship.cloaked;
  61:     }
  62:     else
  63:     {
  64:         /* shields */
  65:         device = "Shields";
  66:         dev2 = "are";
  67:         dev3 = "them";
  68:         ind = SHIELD;
  69:         stat = &Ship.shldup;
  70:     }
  71:     if (damaged(ind))
  72:     {
  73:         if (f <= 0)
  74:             out(ind);
  75:         return;
  76:     }
  77:     if (Ship.cond == DOCKED)
  78:     {
  79:         printf("%s %s down while docked\n", device, dev2);
  80:         return;
  81:     }
  82:     if (f <= 0 && !testnl())
  83:     {
  84:         r = getcodpar("Up or down", Udtab);
  85:         i = (int) r->value;
  86:     }
  87:     else
  88:     {
  89:         if (*stat)
  90:             sprintf(s, "%s %s up.  Do you want %s down", device, dev2, dev3);
  91:         else
  92:             sprintf(s, "%s %s down.  Do you want %s up", device, dev2, dev3);
  93:         if (!getynpar(s))
  94:             return;
  95:         i = !*stat;
  96:     }
  97:     if (*stat == i)
  98:     {
  99:         printf("%s already ", device);
 100:         if (i)
 101:             printf("up\n");
 102:         else
 103:             printf("down\n");
 104:         return;
 105:     }
 106:     if (i)
 107:         if (f >= 0)
 108:             Ship.energy -= Param.shupengy;
 109:         else
 110:             Ship.cloakgood = 0;
 111:     Move.free = 0;
 112:     if (f >= 0)
 113:         Move.shldchg = 1;
 114:     *stat = i;
 115:     return;
 116: }

Defined functions

shield defined in line 38; used 4 times

Defined variables

Udtab defined in line 31; used 1 times
  • in line 84
sccsid defined in line 8; never used
Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1060
Valid CSS Valid XHTML 1.0 Strict