1 /* ROBADV-- STEAL WINNER'S VALUABLES */
2
3 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
4 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
5 /* WRITTEN BY R. M. SUPNIK */
6
7 #include "funcs.h"
8 #include "vars.h"
9
robadv_(adv,nr,nc,na)10 integer robadv_(adv, nr, nc, na)
11 integer adv;
12 integer nr;
13 integer nc;
14 integer na;
15 {
16 /* System generated locals */
17 integer ret_val, i__1;
18
19 /* Local variables */
20 integer i;
21
22 ret_val = 0;
23 /* !COUNT OBJECTS */
24 i__1 = objcts_1.olnt;
25 for (i = 1; i <= i__1; ++i) {
26 if (objcts_1.oadv[i - 1] != adv || objcts_1.otval[i - 1] <= 0 || (
27 objcts_1.oflag2[i - 1] & SCRDBT) != 0) {
28 goto L100;
29 }
30 newsta_(i, 0, nr, nc, na);
31 /* !STEAL OBJECT */
32 ++ret_val;
33 L100:
34 ;
35 }
36 return ret_val;
37 } /* robadv_ */
38
39 /* ROBRM-- STEAL ROOM VALUABLES */
40
41 /* DECLARATIONS */
42
robrm_(rm,pr,nr,nc,na)43 integer robrm_(rm, pr, nr, nc, na)
44 integer rm;
45 integer pr;
46 integer nr;
47 integer nc;
48 integer na;
49 {
50 /* System generated locals */
51 integer ret_val, i__1, i__2;
52
53 /* Local variables */
54 integer i;
55
56
57 /* OBJECTS */
58
59
60
61
62 ret_val = 0;
63 /* !COUNT OBJECTS */
64 i__1 = objcts_1.olnt;
65 for (i = 1; i <= i__1; ++i) {
66 /* !LOOP ON OBJECTS. */
67 if (! qhere_(i, rm)) {
68 goto L100;
69 }
70 if (objcts_1.otval[i - 1] <= 0 || (objcts_1.oflag2[i - 1] &
71 SCRDBT) != 0 || (objcts_1.oflag1[i - 1] &
72 VISIBT) == 0 || ! prob_(pr, pr)) {
73 goto L50;
74 }
75 newsta_(i, 0, nr, nc, na);
76 ++ret_val;
77 objcts_1.oflag2[i - 1] |= TCHBT;
78 goto L100;
79 L50:
80 if ((objcts_1.oflag2[i - 1] & ACTRBT) != 0) {
81 i__2 = oactor_(i);
82 ret_val += robadv_(i__2, nr, nc, na);
83 }
84 L100:
85 ;
86 }
87 return ret_val;
88 } /* robrm_ */
89
90 /* WINNIN-- SEE IF VILLAIN IS WINNING */
91
92 /* DECLARATIONS */
93
winnin_(vl,hr)94 logical winnin_(vl, hr)
95 integer vl;
96 integer hr;
97 {
98 /* System generated locals */
99 logical ret_val;
100
101 /* Local variables */
102 integer ps, vs;
103
104
105 /* OBJECTS */
106
107
108
109 vs = objcts_1.ocapac[vl - 1];
110 /* !VILLAIN STRENGTH */
111 ps = vs - fights_(hr, 1);
112 /* !HIS MARGIN OVER HERO */
113 ret_val = prob_(90, 100);
114 if (ps > 3) {
115 return ret_val;
116 }
117 /* !+3... 90% WINNING */
118 ret_val = prob_(75, 85);
119 if (ps > 0) {
120 return ret_val;
121 }
122 /* !>0... 75% WINNING */
123 ret_val = prob_(50, 30);
124 if (ps == 0) {
125 return ret_val;
126 }
127 /* !=0... 50% WINNING */
128 ret_val = prob_(25, 25);
129 if (vs > 1) {
130 return ret_val;
131 }
132 /* !ANY VILLAIN STRENGTH. */
133 ret_val = prob_(10, 0);
134 return ret_val;
135 } /* winnin_ */
136
137 /* FIGHTS-- COMPUTE FIGHT STRENGTH */
138
139 /* DECLARATIONS */
140
fights_(h,flg)141 integer fights_(h, flg)
142 integer h;
143 logical flg;
144 {
145 /* Initialized data */
146
147 const integer smin = 2;
148 const integer smax = 7;
149
150 /* System generated locals */
151 integer ret_val;
152
153 ret_val = smin + ((smax - smin) * advs_1.ascore[h - 1] + state_1.mxscor /
154 2) / state_1.mxscor;
155 if (flg) {
156 ret_val += advs_1.astren[h - 1];
157 }
158 return ret_val;
159 } /* fights_ */
160
161 /* VILSTR- COMPUTE VILLAIN STRENGTH */
162
163 /* DECLARATIONS */
164
vilstr_(v)165 integer vilstr_(v)
166 integer v;
167 {
168 /* System generated locals */
169 integer ret_val, i__1, i__2, i__3;
170
171 /* Local variables */
172 integer i;
173
174 ret_val = objcts_1.ocapac[v - 1];
175 if (ret_val <= 0) {
176 return ret_val;
177 }
178 if (v != oindex_1.thief || ! findex_1.thfenf) {
179 goto L100;
180 }
181 findex_1.thfenf = FALSE_;
182 /* !THIEF UNENGROSSED. */
183 ret_val = min(ret_val,2);
184 /* !NO BETTER THAN 2. */
185
186 L100:
187 i__1 = vill_1.vlnt;
188 for (i = 1; i <= i__1; ++i) {
189 /* !SEE IF BEST WEAPON. */
190 if (vill_1.villns[i - 1] == v && prsvec_1.prsi == vill_1.vbest[i - 1]
191 ) {
192 /* Computing MAX */
193 i__2 = 1, i__3 = ret_val - 1;
194 ret_val = max(i__2,i__3);
195 }
196 /* L200: */
197 }
198 return ret_val;
199 } /* vilstr_ */
200