date and time created 83/10/28 19:24:36 by edward
[unix-history] / usr / src / games / sail / pl_6.c
CommitLineData
7b487c4c
EW
1#ifndef lint
2static char *sccsid = "@(#)pl_6.c 1.1 83/10/28";
3#endif
4
5#include "player.h"
6
7repair()
8{
9 char c;
10 char *repairs;
11 struct shipspecs *ptr;
12
13 if (repaired || loaded || fired || changed || turned()) {
14 Signal("No hands free to repair", (struct ship *)0);
15 return;
16 }
17 ptr = mc;
18 c = sgetch("Repair (hull, guns, rigging)? ", (struct ship *)0, 1);
19 switch (c) {
20 case 'h':
21 repairs = &mf->RH;
22 break;
23 case 'g':
24 repairs = &mf->RG;
25 break;
26 case 'r':
27 repairs = &mf->RR;
28 break;
29 default:
30 Signal("Avast heaving!", (struct ship *)0);
31 return;
32 }
33 repaired = 1;
34 if (++*repairs >= 3) {
35 *repairs = 0;
36 switch (c) {
37 case 'h':
38 if (ptr->hull < ptr->guns/4)
39 Write(W_HULL, ms, 0,
40 ptr->hull + 2, 0, 0, 0);
41 else
42 c = 0;
43 break;
44 case 'g':
45 if (ptr->gunL < ptr->gunR) {
46 if (ptr->gunL + ptr->carL < ptr->guns/5)
47 Write(W_GUNL, ms, 0,
48 ptr->gunL + 2, ptr->carL, 0, 0);
49 else
50 c = 0;
51 } else
52 if (ptr->gunR + ptr->carR < ptr->guns/5)
53 Write(W_GUNR, ms, 0,
54 ptr->gunR + 2, ptr->carR, 0, 0);
55 else
56 c = 0;
57 break;
58 case 'r':
59 if (!ptr->rig4)
60 Write(W_RIG4, ms, 0,
61 ptr->rig4 + 2, 0, 0, 0);
62 else if (!ptr->rig3)
63 Write(W_RIG3, ms, 0, 2, 0, 0, 0);
64 else if (!ptr->rig2)
65 Write(W_RIG2, ms, 0, 2, 0, 0, 0);
66 else if (ptr->rig1 < 4)
67 Write(W_RIG1, ms, 0, 2, 0, 0, 0);
68 else
69 c = 0;
70 break;
71 }
72 if (!c)
73 Signal("Repairs completed.", (struct ship *)0);
74 }
75}
76
77turned()
78{
79 register char *p;
80
81 for (p = movebuf; *p; p++)
82 if (*p == 'r' || *p == 'l')
83 return 1;
84 return 0;
85}
86
87loadplayer()
88{
89 char c;
90 register loadL, loadR, ready, load;
91
92 if (!mc->crew3) {
93 Signal("Out of crew", (struct ship *)0);
94 return;
95 }
96 loadL = mf->loadL;
97 loadR = mf->loadR;
98 if (!loadL && !loadR) {
99 c = sgetch("Load which broadside (left or right)? ",
100 (struct ship *)0, 1);
101 if (c == 'r')
102 loadL = 1;
103 else
104 loadR = 1;
105 }
106 if (!loadL && loadR || loadL && !loadR) {
107 c = sgetch("Reload with (round, double, chain, grape)? ",
108 (struct ship *)0, 1);
109 switch (c) {
110 case 'r':
111 load = L_ROUND;
112 ready = 0;
113 break;
114 case 'd':
115 load = L_DOUBLE;
116 ready = R_DOUBLE;
117 break;
118 case 'c':
119 load = L_CHAIN;
120 ready = 0;
121 break;
122 case 'g':
123 load = L_GRAPE;
124 ready = 0;
125 break;
126 default:
127 Signal("Broadside not loaded.",
128 (struct ship *)0);
129 return;
130 }
131 if (!loadR) {
132 mf->loadR = load;
133 mf->readyR = ready|R_LOADING;
134 } else {
135 mf->loadL = load;
136 mf->readyL = ready|R_LOADING;
137 }
138 loaded = 1;
139 }
140}