|
|
1.1 root 1: C AAPPLI- APPLICABLES FOR ADVENTURERS
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: LOGICAL FUNCTION AAPPLI(RI)
10: IMPLICIT INTEGER (A-Z)
11: LOGICAL F,MOVETO
12: #include "parser.h"
13: #include "gamestate.h"
14: #include "rooms.h"
15: #include "rflag.h"
16: #include "rindex.h"
17: #include "xsrch.h"
18: #include "objects.h"
19: #include "oflags.h"
20: #include "oindex.h"
21: #include "clock.h"
22: #include "advers.h"
23: #include "verbs.h"
24: #include "flags.h"
25: C AAPPLI, PAGE 2
26: C
27: IF(RI.EQ.0) GO TO 10
28: C !IF ZERO, NO APP.
29: AAPPLI=.TRUE.
30: C !ASSUME WINS.
31: GO TO (1000,2000),RI
32: C !BRANCH ON ADV.
33: CALL BUG(11,RI)
34: C
35: C COMMON FALSE RETURN.
36: C
37: 10 AAPPLI=.FALSE.
38: RETURN
39: C
40: C A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT.
41: C
42: 1000 IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
43: CFLAG(CEVSPH)=.FALSE.
44: C !ROBOT RAISED CAGE.
45: WINNER=PLAYER
46: C !RESET FOR PLAYER.
47: F=MOVETO(CAGER,WINNER)
48: C !MOVE TO NEW ROOM.
49: CALL NEWSTA(CAGE,567,CAGER,0,0)
50: C !INSTALL CAGE IN ROOM.
51: CALL NEWSTA(ROBOT,0,CAGER,0,0)
52: C !INSTALL ROBOT IN ROOM.
53: AROOM(AROBOT)=CAGER
54: C !ALSO MOVE ROBOT/ADV.
55: CAGESF=.TRUE.
56: C !CAGE SOLVED.
57: OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
58: OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
59: RETURN
60: C
61: 1200 IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
62: CALL RSPEAK(568)
63: C !EAT OR DRINK, JOKE.
64: RETURN
65: C
66: 1300 IF(PRSA.NE.READW) GO TO 1400
67: C !READ,
68: CALL RSPEAK(569)
69: C !JOKE.
70: RETURN
71: C
72: 1400 IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
73: & .OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
74: & .OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
75: CALL RSPEAK(570)
76: C !JOKE.
77: RETURN
78: C AAPPLI, PAGE 3
79: C
80: C A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER.
81: C
82: 2000 IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
83: CALL RSPEAK(783)
84: C !NO MASTER YET.
85: RETURN
86: C
87: 2100 IF(PRSA.NE.WALKW) GO TO 2200
88: C !WALK?
89: I=784
90: C !ASSUME WONT.
91: IF(((HERE.EQ.SCORR).AND.
92: & ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
93: & ((HERE.EQ.NCORR).AND.
94: & ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
95: & I=785
96: CALL RSPEAK(I)
97: RETURN
98: C
99: 2200 IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
100: & (PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
101: & (PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
102: & (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
103: & (PRSA.EQ.KILLW)) GO TO 10
104: CALL RSPEAK(786)
105: C !MASTER CANT DO IT.
106: RETURN
107: C
108: END
109: C THIEFD- INTERMOVE THIEF DEMON
110: C
111: C DECLARATIONS
112: C
113: SUBROUTINE THIEFD
114: IMPLICIT INTEGER (A-Z)
115: LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
116: #include "gamestate.h"
117: C
118: #include "debug.h"
119: #include "rooms.h"
120: #include "rflag.h"
121: #include "rindex.h"
122: #include "objects.h"
123: #include "oflags.h"
124: #include "oindex.h"
125: #include "villians.h"
126: #include "flags.h"
127: C
128: C FUNCTIONS AND DATA
129: C
130: QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
131: C THIEFD, PAGE 2
132: C
133: #ifdef debug
134: DFLAG=and(PRSFLG, 32768).NE.0
135: #endif debug
136: C !SET UP DETAIL FLAG.
137: ONCE=.FALSE.
138: C !INIT FLAG.
139: 1025 RHERE=OROOM(THIEF)
140: C !VISIBLE POS.
141: IF(RHERE.NE.0) THFPOS=RHERE
142: C
143: IF(THFPOS.EQ.HERE) GO TO 1100
144: C !THIEF IN WIN RM?
145: IF(THFPOS.NE.TREAS) GO TO 1400
146: C !THIEF NOT IN TREAS?
147: C
148: C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
149: C
150: #ifdef debug
151: IF(DFLAG) PRINT 10
152: #ifdef NOCC
153: 10 FORMAT('THIEFD-- IN TREASURE ROOM')
154: #else NOCC
155: 10 FORMAT(' THIEFD-- IN TREASURE ROOM')
156: #endif
157: #endif debug
158: IF(RHERE.EQ.0) GO TO 1050
159: C !VISIBLE?
160: CALL NEWSTA(THIEF,0,0,0,0)
161: C !YES, VANISH.
162: RHERE=0
163: IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
164: 1050 I=ROBADV(-THIEF,THFPOS,0,0)
165: C !DROP VALUABLES.
166: IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
167: GO TO 1700
168: C
169: C THIEF AND WINNER IN SAME ROOM.
170: C
171: 1100 IF(THFPOS.EQ.TREAS) GO TO 1700
172: C !IF TREAS ROOM, NOTHING.
173: IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
174: #ifdef debug
175: IF(DFLAG) PRINT 20
176: #ifdef NOCC
177: 20 FORMAT('THIEFD-- IN ADV ROOM')
178: #else NOCC
179: 20 FORMAT(' THIEFD-- IN ADV ROOM')
180: #endif NOCC
181: #endif debug
182: IF(THFFLG) GO TO 1300
183: C !THIEF ANNOUNCED?
184: IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
185: C !IF INVIS AND 30%.
186: IF(OCAN(STILL).NE.THIEF) GO TO 1700
187: C !ABORT IF NO STILLETTO.
188: CALL NEWSTA(THIEF,583,THFPOS,0,0)
189: C !INSERT THIEF INTO ROOM.
190: THFFLG=.TRUE.
191: C !THIEF IS ANNOUNCED.
192: RETURN
193: C
194: 1150 IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
195: & GO TO 1200
196: IF(WINNIN(THIEF,WINNER)) GO TO 1175
197: C !WINNING?
198: CALL NEWSTA(THIEF,584,0,0,0)
199: C !NO, VANISH THIEF.
200: OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
201: IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
202: RETURN
203: C
204: 1175 IF(PROB(90,90)) GO TO 1700
205: C !90% CHANCE TO STAY.
206: C
207: 1200 IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
208: C !IF VISIBLE AND 30%
209: CALL NEWSTA(THIEF,585,0,0,0)
210: C !VANISH THIEF.
211: IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
212: RETURN
213: C
214: 1300 IF(RHERE.EQ.0) GO TO 1700
215: C !ANNOUNCED. VISIBLE?
216: 1250 IF(PROB(70,70)) RETURN
217: C !70% CHANCE TO DO NOTHING.
218: THFFLG=.TRUE.
219: NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
220: I=586
221: C !ROBBED EM.
222: IF(RHERE.NE.0) I=588
223: C !WAS HE VISIBLE?
224: IF(NR.NE.0) I=I+1
225: C !DID HE GET ANYTHING?
226: CALL NEWSTA(THIEF,I,0,0,0)
227: C !VANISH THIEF.
228: IF(QSTILL(THFPOS))
229: & CALL NEWSTA(STILL,0,0,THIEF,0)
230: IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
231: RHERE=0
232: GO TO 1700
233: C !ONWARD.
234: C
235: C NOT IN ADVENTURERS ROOM.
236: C
237: 1400 CALL NEWSTA(THIEF,0,0,0,0)
238: C !VANISH.
239: RHERE=0
240: #ifdef debug
241: IF(DFLAG) PRINT 30,THFPOS
242: #ifdef NOCC
243: 30 FORMAT('THIEFD-- IN ROOM ',I4)
244: #else NOCC
245: 30 FORMAT(' THIEFD-- IN ROOM ',I4)
246: #endif NOCC
247: #endif debug
248: IF(QSTILL(THFPOS))
249: & CALL NEWSTA(STILL,0,0,THIEF,0)
250: IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
251: I=ROBRM(THFPOS,75,0,0,-THIEF)
252: C !ROB ROOM 75%.
253: IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
254: & (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
255: DO 1450 I=1,OLNT
256: C !BOTH IN MAZE.
257: IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
258: & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
259: & GO TO 1450
260: CALL RSPSUB(590,ODESC2(I))
261: C !TAKE OBJECT.
262: IF(PROB(40,20)) GO TO 1700
263: CALL NEWSTA(I,0,0,0,-THIEF)
264: C !MOST OF THE TIME.
265: OFLAG2(I)=or(OFLAG2(I),TCHBT)
266: GO TO 1700
267: 1450 CONTINUE
268: GO TO 1700
269: C
270: 1500 DO 1550 I=1,OLNT
271: C !NOT IN MAZE.
272: IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
273: & (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
274: & GO TO 1550
275: CALL NEWSTA(I,0,0,0,-THIEF)
276: OFLAG2(I)=or(OFLAG2(I),TCHBT)
277: GO TO 1700
278: 1550 CONTINUE
279: C
280: C NOW MOVE TO NEW ROOM.
281: C
282: 1700 IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
283: IF(ONCE) GO TO 1800
284: ONCE=.NOT.ONCE
285: 1750 THFPOS=THFPOS-1
286: C !NEXT ROOM.
287: IF(THFPOS.LE.0) THFPOS=RLNT
288: IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
289: & GO TO 1750
290: THFFLG=.FALSE.
291: C !NOT ANNOUNCED.
292: GO TO 1025
293: C !ONCE MORE.
294: C
295: C ALL DONE.
296: C
297: 1800 IF(THFPOS.EQ.TREAS) RETURN
298: C !IN TREASURE ROOM?
299: J=591
300: C !NO, DROP STUFF.
301: IF(THFPOS.NE.HERE) J=0
302: DO 1850 I=1,OLNT
303: IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
304: & (OTVAL(I).GT.0)) GO TO 1850
305: CALL NEWSTA(I,J,THFPOS,0,0)
306: J=0
307: 1850 CONTINUE
308: RETURN
309: C
310: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.