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