mirror of https://github.com/sean-m/zork
200 lines
3.7 KiB
C
200 lines
3.7 KiB
C
/* ROBADV-- STEAL WINNER'S VALUABLES */
|
|
|
|
/*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
|
|
/* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
|
|
/* WRITTEN BY R. M. SUPNIK */
|
|
|
|
#include "funcs.h"
|
|
#include "vars.h"
|
|
|
|
integer robadv_(adv, nr, nc, na)
|
|
integer adv;
|
|
integer nr;
|
|
integer nc;
|
|
integer na;
|
|
{
|
|
/* System generated locals */
|
|
integer ret_val, i__1;
|
|
|
|
/* Local variables */
|
|
integer i;
|
|
|
|
ret_val = 0;
|
|
/* !COUNT OBJECTS */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
if (objcts_1.oadv[i - 1] != adv || objcts_1.otval[i - 1] <= 0 || (
|
|
objcts_1.oflag2[i - 1] & SCRDBT) != 0) {
|
|
goto L100;
|
|
}
|
|
newsta_(i, 0, nr, nc, na);
|
|
/* !STEAL OBJECT */
|
|
++ret_val;
|
|
L100:
|
|
;
|
|
}
|
|
return ret_val;
|
|
} /* robadv_ */
|
|
|
|
/* ROBRM-- STEAL ROOM VALUABLES */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
integer robrm_(rm, pr, nr, nc, na)
|
|
integer rm;
|
|
integer pr;
|
|
integer nr;
|
|
integer nc;
|
|
integer na;
|
|
{
|
|
/* System generated locals */
|
|
integer ret_val, i__1, i__2;
|
|
|
|
/* Local variables */
|
|
integer i;
|
|
|
|
|
|
/* OBJECTS */
|
|
|
|
|
|
|
|
|
|
ret_val = 0;
|
|
/* !COUNT OBJECTS */
|
|
i__1 = objcts_1.olnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !LOOP ON OBJECTS. */
|
|
if (! qhere_(i, rm)) {
|
|
goto L100;
|
|
}
|
|
if (objcts_1.otval[i - 1] <= 0 || (objcts_1.oflag2[i - 1] &
|
|
SCRDBT) != 0 || (objcts_1.oflag1[i - 1] &
|
|
VISIBT) == 0 || ! prob_(pr, pr)) {
|
|
goto L50;
|
|
}
|
|
newsta_(i, 0, nr, nc, na);
|
|
++ret_val;
|
|
objcts_1.oflag2[i - 1] |= TCHBT;
|
|
goto L100;
|
|
L50:
|
|
if ((objcts_1.oflag2[i - 1] & ACTRBT) != 0) {
|
|
i__2 = oactor_(i);
|
|
ret_val += robadv_(i__2, nr, nc, na);
|
|
}
|
|
L100:
|
|
;
|
|
}
|
|
return ret_val;
|
|
} /* robrm_ */
|
|
|
|
/* WINNIN-- SEE IF VILLAIN IS WINNING */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
logical winnin_(vl, hr)
|
|
integer vl;
|
|
integer hr;
|
|
{
|
|
/* System generated locals */
|
|
logical ret_val;
|
|
|
|
/* Local variables */
|
|
integer ps, vs;
|
|
|
|
|
|
/* OBJECTS */
|
|
|
|
|
|
|
|
vs = objcts_1.ocapac[vl - 1];
|
|
/* !VILLAIN STRENGTH */
|
|
ps = vs - fights_(hr, 1);
|
|
/* !HIS MARGIN OVER HERO */
|
|
ret_val = prob_(90, 100);
|
|
if (ps > 3) {
|
|
return ret_val;
|
|
}
|
|
/* !+3... 90% WINNING */
|
|
ret_val = prob_(75, 85);
|
|
if (ps > 0) {
|
|
return ret_val;
|
|
}
|
|
/* !>0... 75% WINNING */
|
|
ret_val = prob_(50, 30);
|
|
if (ps == 0) {
|
|
return ret_val;
|
|
}
|
|
/* !=0... 50% WINNING */
|
|
ret_val = prob_(25, 25);
|
|
if (vs > 1) {
|
|
return ret_val;
|
|
}
|
|
/* !ANY VILLAIN STRENGTH. */
|
|
ret_val = prob_(10, 0);
|
|
return ret_val;
|
|
} /* winnin_ */
|
|
|
|
/* FIGHTS-- COMPUTE FIGHT STRENGTH */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
integer fights_(h, flg)
|
|
integer h;
|
|
logical flg;
|
|
{
|
|
/* Initialized data */
|
|
|
|
const integer smin = 2;
|
|
const integer smax = 7;
|
|
|
|
/* System generated locals */
|
|
integer ret_val;
|
|
|
|
ret_val = smin + ((smax - smin) * advs_1.ascore[h - 1] + state_1.mxscor /
|
|
2) / state_1.mxscor;
|
|
if (flg) {
|
|
ret_val += advs_1.astren[h - 1];
|
|
}
|
|
return ret_val;
|
|
} /* fights_ */
|
|
|
|
/* VILSTR- COMPUTE VILLAIN STRENGTH */
|
|
|
|
/* DECLARATIONS */
|
|
|
|
integer vilstr_(v)
|
|
integer v;
|
|
{
|
|
/* System generated locals */
|
|
integer ret_val, i__1, i__2, i__3;
|
|
|
|
/* Local variables */
|
|
integer i;
|
|
|
|
ret_val = objcts_1.ocapac[v - 1];
|
|
if (ret_val <= 0) {
|
|
return ret_val;
|
|
}
|
|
if (v != oindex_1.thief || ! findex_1.thfenf) {
|
|
goto L100;
|
|
}
|
|
findex_1.thfenf = FALSE_;
|
|
/* !THIEF UNENGROSSED. */
|
|
ret_val = min(ret_val,2);
|
|
/* !NO BETTER THAN 2. */
|
|
|
|
L100:
|
|
i__1 = vill_1.vlnt;
|
|
for (i = 1; i <= i__1; ++i) {
|
|
/* !SEE IF BEST WEAPON. */
|
|
if (vill_1.villns[i - 1] == v && prsvec_1.prsi == vill_1.vbest[i - 1]
|
|
) {
|
|
/* Computing MAX */
|
|
i__2 = 1, i__3 = ret_val - 1;
|
|
ret_val = max(i__2,i__3);
|
|
}
|
|
/* L200: */
|
|
}
|
|
return ret_val;
|
|
} /* vilstr_ */
|