|
|
1.1 root 1: C ROBADV-- STEAL WINNER'S VALUABLES
2: C
3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5: C WRITTEN BY R. M. SUPNIK
6: C
7: C DECLARATIONS
8: C
9: INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
10: IMPLICIT INTEGER (A-Z)
11: #include "objects.h"
12: #include "oflags.h"
13: C
14: ROBADV=0
15: C !COUNT OBJECTS
16: DO 100 I=1,OLNT
17: IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
18: & (and(OFLAG2(I),SCRDBT).NE.0)) GO TO 100
19: CALL NEWSTA(I,0,NR,NC,NA)
20: C !STEAL OBJECT
21: ROBADV=ROBADV+1
22: 100 CONTINUE
23: RETURN
24: END
25: C ROBRM-- STEAL ROOM VALUABLES
26: C
27: C DECLARATIONS
28: C
29: INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
30: IMPLICIT INTEGER (A-Z)
31: LOGICAL PROB,QHERE
32: #include "objects.h"
33: #include "oflags.h"
34: C
35: ROBRM=0
36: C !COUNT OBJECTS
37: DO 100 I=1,OLNT
38: C !LOOP ON OBJECTS.
39: IF(.NOT. QHERE(I,RM)) GO TO 100
40: IF((OTVAL(I).LE.0).OR.(and(OFLAG2(I),SCRDBT).NE.0).OR.
41: & (and(OFLAG1(I),VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
42: & GO TO 50
43: CALL NEWSTA(I,0,NR,NC,NA)
44: ROBRM=ROBRM+1
45: OFLAG2(I)=or(OFLAG2(I),TCHBT)
46: GO TO 100
47: 50 IF(and(OFLAG2(I),ACTRBT).NE.0)
48: & ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
49: 100 CONTINUE
50: RETURN
51: END
52: C WINNIN-- SEE IF VILLAIN IS WINNING
53: C
54: C DECLARATIONS
55: C
56: LOGICAL FUNCTION WINNIN(VL,HR)
57: IMPLICIT INTEGER (A-Z)
58: LOGICAL PROB
59: #include "objects.h"
60: C
61: VS=OCAPAC(VL)
62: C !VILLAIN STRENGTH
63: PS=VS-FIGHTS(HR,.TRUE.)
64: C !HIS MARGIN OVER HERO
65: WINNIN=PROB(90,100)
66: IF(PS.GT.3) RETURN
67: C !+3... 90% WINNING
68: WINNIN=PROB(75,85)
69: IF(PS.GT.0) RETURN
70: C !>0... 75% WINNING
71: WINNIN=PROB(50,30)
72: IF(PS.EQ.0) RETURN
73: C !=0... 50% WINNING
74: WINNIN=PROB(25,25)
75: IF(VS.GT.1) RETURN
76: C !ANY VILLAIN STRENGTH.
77: WINNIN=PROB(10,0)
78: RETURN
79: END
80: C FIGHTS-- COMPUTE FIGHT STRENGTH
81: C
82: C DECLARATIONS
83: C
84: INTEGER FUNCTION FIGHTS(H,FLG)
85: IMPLICIT INTEGER (A-Z)
86: LOGICAL FLG
87: C
88: C GAME STATE
89: C
90: #include "state.h"
91: #include "advers.h"
92: C
93: C FUNCTIONS AND DATA
94: C
95: DATA SMAX/7/,SMIN/2/
96: C
97: FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
98: IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
99: RETURN
100: END
101: C VILSTR- COMPUTE VILLAIN STRENGTH
102: C
103: C DECLARATIONS
104: C
105: INTEGER FUNCTION VILSTR(V)
106: IMPLICIT INTEGER (A-Z)
107: #include "parser.h"
108: #include "objects.h"
109: #include "oflags.h"
110: #include "oindex.h"
111: #include "villians.h"
112: #include "flags.h"
113: C VILSTR, PAGE 2
114: C
115: VILSTR=OCAPAC(V)
116: IF(VILSTR.LE.0) RETURN
117: IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
118: THFENF=.FALSE.
119: C !THIEF UNENGROSSED.
120: VILSTR=MIN0(VILSTR,2)
121: C !NO BETTER THAN 2.
122: C
123: 100 DO 200 I=1,VLNT
124: C !SEE IF BEST WEAPON.
125: IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
126: & VILSTR=MAX0(1,VILSTR-1)
127: 200 CONTINUE
128: RETURN
129: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.