(no message)
[unix-history] / usr / src / games / sail / pl_6.c
CommitLineData
7b487c4c 1#ifndef lint
fcc6b1db 2static char *sccsid = "@(#)pl_6.c 1.2 83/10/28";
7b487c4c
EW
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) {
7b487c4c
EW
35 switch (c) {
36 case 'h':
37 if (ptr->hull < ptr->guns/4)
38 Write(W_HULL, ms, 0,
39 ptr->hull + 2, 0, 0, 0);
40 else
41 c = 0;
42 break;
43 case 'g':
44 if (ptr->gunL < ptr->gunR) {
45 if (ptr->gunL + ptr->carL < ptr->guns/5)
46 Write(W_GUNL, ms, 0,
47 ptr->gunL + 2, ptr->carL, 0, 0);
48 else
49 c = 0;
50 } else
51 if (ptr->gunR + ptr->carR < ptr->guns/5)
52 Write(W_GUNR, ms, 0,
53 ptr->gunR + 2, ptr->carR, 0, 0);
54 else
55 c = 0;
56 break;
57 case 'r':
58 if (!ptr->rig4)
59 Write(W_RIG4, ms, 0,
60 ptr->rig4 + 2, 0, 0, 0);
61 else if (!ptr->rig3)
62 Write(W_RIG3, ms, 0, 2, 0, 0, 0);
63 else if (!ptr->rig2)
64 Write(W_RIG2, ms, 0, 2, 0, 0, 0);
65 else if (ptr->rig1 < 4)
66 Write(W_RIG1, ms, 0, 2, 0, 0, 0);
67 else
68 c = 0;
69 break;
70 }
fcc6b1db 71 if (!c) {
7b487c4c 72 Signal("Repairs completed.", (struct ship *)0);
fcc6b1db
EW
73 *repairs = 2;
74 } else {
75 *repairs = 0;
76 draw_stat();
77 }
7b487c4c 78 }
fcc6b1db 79 draw_slot();
7b487c4c
EW
80}
81
82turned()
83{
84 register char *p;
85
86 for (p = movebuf; *p; p++)
87 if (*p == 'r' || *p == 'l')
88 return 1;
89 return 0;
90}
91
92loadplayer()
93{
94 char c;
95 register loadL, loadR, ready, load;
96
97 if (!mc->crew3) {
98 Signal("Out of crew", (struct ship *)0);
99 return;
100 }
101 loadL = mf->loadL;
102 loadR = mf->loadR;
103 if (!loadL && !loadR) {
104 c = sgetch("Load which broadside (left or right)? ",
105 (struct ship *)0, 1);
106 if (c == 'r')
107 loadL = 1;
108 else
109 loadR = 1;
110 }
111 if (!loadL && loadR || loadL && !loadR) {
112 c = sgetch("Reload with (round, double, chain, grape)? ",
113 (struct ship *)0, 1);
114 switch (c) {
115 case 'r':
116 load = L_ROUND;
117 ready = 0;
118 break;
119 case 'd':
120 load = L_DOUBLE;
121 ready = R_DOUBLE;
122 break;
123 case 'c':
124 load = L_CHAIN;
125 ready = 0;
126 break;
127 case 'g':
128 load = L_GRAPE;
129 ready = 0;
130 break;
131 default:
132 Signal("Broadside not loaded.",
133 (struct ship *)0);
134 return;
135 }
136 if (!loadR) {
137 mf->loadR = load;
138 mf->readyR = ready|R_LOADING;
139 } else {
140 mf->loadL = load;
141 mf->readyL = ready|R_LOADING;
142 }
143 loaded = 1;
144 }
145}