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