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
Defined variables
Udtab
defined in line
31; used 1 times
sccsid
defined in line
8;
never used