|
|
1.1 root 1: C NOBJS- NEW OBJECTS PROCESSOR
2: C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
3: C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
4: C
5: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
6: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
7: C WRITTEN BY R. M. SUPNIK
8: C
9: C DECLARATIONS
10: C
11: LOGICAL FUNCTION NOBJS(RI,ARG)
12: IMPLICIT INTEGER (A-Z)
13: LOGICAL QOPEN,MOVETO,F
14: LOGICAL QHERE,OPNCLS,MIRPAN
15: #include "parser.h"
16: #include "gamestate.h"
17: #include "state.h"
18: #include "screen.h"
19: #include "puzzle.h"
20: C
21: C MISCELLANEOUS VARIABLES
22: C
23: COMMON /HYPER/ HFACTR
24: #include "rooms.h"
25: #include "rflag.h"
26: #include "rindex.h"
27: #include "objects.h"
28: #include "oflags.h"
29: #include "oindex.h"
30: #include "clock.h"
31:
32: #include "villians.h"
33: #include "advers.h"
34: #include "verbs.h"
35: #include "flags.h"
36: C
37: C FUNCTIONS AND DATA
38: C
39: QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
40: C NOBJS, PAGE 2
41: C
42: IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
43: IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
44: AV=AVEHIC(WINNER)
45: NOBJS=.TRUE.
46: C
47: GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,
48: & 10000,11000,12000,13000,14000,15000,16000,17000,
49: & 18000,19000,20000,21000),
50: & (RI-31)
51: CALL BUG(6,RI)
52: C
53: C RETURN HERE TO DECLARE FALSE RESULT
54: C
55: 10 NOBJS=.FALSE.
56: RETURN
57: C
58: C O32-- BILLS
59: C
60: 1000 IF(PRSA.NE.EATW) GO TO 1100
61: C !EAT?
62: CALL RSPEAK(639)
63: C !JOKE.
64: RETURN
65: C
66: 1100 IF(PRSA.EQ.BURNW) CALL RSPEAK(640)
67: C !BURN? JOKE.
68: GO TO 10
69: C !LET IT BE HANDLED.
70: C NOBJS, PAGE 3
71: C
72: C O33-- SCREEN OF LIGHT
73: C
74: 2000 TARGET=SCOL
75: C !TARGET IS SCOL.
76: 2100 IF(PRSO.NE.TARGET) GO TO 2400
77: C !PRSO EQ TARGET?
78: IF((PRSA.NE.PUSHW).AND.(PRSA.NE.MOVEW).AND.
79: & (PRSA.NE.TAKEW).AND.(PRSA.NE.RUBW)) GO TO 2200
80: CALL RSPEAK(673)
81: C !HAND PASSES THRU.
82: RETURN
83: C
84: 2200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND.
85: & (PRSA.NE.MUNGW)) GO TO 2400
86: CALL RSPSUB(674,ODI2)
87: C !PASSES THRU.
88: RETURN
89: C
90: 2400 IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10
91: IF(HERE.EQ.BKBOX) GO TO 2600
92: C !THRU SCOL?
93: CALL NEWSTA(PRSO,0,BKBOX,0,0)
94: C !NO, THRU WALL.
95: CALL RSPSUB(675,ODO2)
96: C !ENDS UP IN BOX ROOM.
97: CTICK(CEVSCL)=0
98: C !CANCEL ALARM.
99: SCOLRM=0
100: C !RESET SCOL ROOM.
101: RETURN
102: C
103: 2600 IF(SCOLRM.EQ.0) GO TO 2900
104: C !TRIED TO GO THRU?
105: CALL NEWSTA(PRSO,0,SCOLRM,0,0)
106: C !SUCCESS.
107: CALL RSPSUB(676,ODO2)
108: C !ENDS UP SOMEWHERE.
109: CTICK(CEVSCL)=0
110: C !CANCEL ALARM.
111: SCOLRM=0
112: C !RESET SCOL ROOM.
113: RETURN
114: C
115: 2900 CALL RSPEAK(213)
116: C !CANT DO IT.
117: RETURN
118: C NOBJS, PAGE 4
119: C
120: C O34-- GNOME OF ZURICH
121: C
122: 3000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200
123: IF(OTVAL(PRSO).NE.0) GO TO 3100
124: C !THROW A TREASURE?
125: CALL NEWSTA(PRSO,641,0,0,0)
126: C !NO, GO POP.
127: RETURN
128: C
129: 3100 CALL NEWSTA(PRSO,0,0,0,0)
130: C !YES, BYE BYE TREASURE.
131: CALL RSPSUB(642,ODO2)
132: CALL NEWSTA(ZGNOM,0,0,0,0)
133: C !BYE BYE GNOME.
134: CTICK(CEVZGO)=0
135: C !CANCEL EXIT.
136: F=MOVETO(BKENT,WINNER)
137: C !NOW IN BANK ENTRANCE.
138: RETURN
139: C
140: 3200 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
141: & (PRSA.NE.MUNGW)) GO TO 3300
142: CALL NEWSTA(ZGNOM,643,0,0,0)
143: C !VANISH GNOME.
144: CTICK(CEVZGO)=0
145: C !CANCEL EXIT.
146: RETURN
147: C
148: 3300 CALL RSPEAK(644)
149: C !GNOME IS IMPATIENT.
150: RETURN
151: C
152: C O35-- EGG
153: C
154: 4000 IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500
155: IF(.NOT.QOPEN(EGG)) GO TO 4100
156: C !OPEN ALREADY?
157: CALL RSPEAK(649)
158: C !YES.
159: RETURN
160: C
161: 4100 IF(PRSI.NE.0) GO TO 4200
162: C !WITH SOMETHING?
163: CALL RSPEAK(650)
164: C !NO, CANT.
165: RETURN
166: C
167: 4200 IF(PRSI.NE.HANDS) GO TO 4300
168: C !WITH HANDS?
169: CALL RSPEAK(651)
170: C !NOT RECOMMENDED.
171: RETURN
172: C
173: 4300 I=652
174: C !MUNG MESSAGE.
175: IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR.
176: & (and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600
177: I=653
178: C !NOVELTY 1.
179: IF(and(OFLAG2(PRSO),FITEBT).NE.0) I=654
180: OFLAG2(PRSO)=or(OFLAG2(PRSO),FITEBT)
181: CALL RSPSUB(I,ODI2)
182: RETURN
183: C
184: 4500 IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800
185: I=655
186: C !YOU BLEW IT.
187: 4600 CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG))
188: CALL NEWSTA(EGG,0,0,0,0)
189: C !VANISH EGG.
190: OTVAL(BEGG)=2
191: C !BAD EGG HAS VALUE.
192: IF(OCAN(CANAR).NE.EGG) GO TO 4700
193: C !WAS CANARY INSIDE?
194: CALL RSPEAK(ODESCO(BCANA))
195: C !YES, DESCRIBE RESULT.
196: OTVAL(BCANA)=1
197: RETURN
198: C
199: 4700 CALL NEWSTA(BCANA,0,0,0,0)
200: C !NO, VANISH IT.
201: RETURN
202: C
203: 4800 IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10
204: CALL NEWSTA(BEGG,658,FORE3,0,0)
205: C !DROPPED EGG.
206: CALL NEWSTA(EGG,0,0,0,0)
207: OTVAL(BEGG)=2
208: IF(OCAN(CANAR).NE.EGG) GO TO 4700
209: OTVAL(BCANA)=1
210: C !BAD CANARY.
211: RETURN
212: C NOBJS, PAGE 5
213: C
214: C O36-- CANARIES, GOOD AND BAD
215: C
216: 5000 IF(PRSA.NE.WINDW) GO TO 10
217: C !WIND EM UP?
218: IF(PRSO.EQ.CANAR) GO TO 5100
219: C !RIGHT ONE?
220: CALL RSPEAK(645)
221: C !NO, BAD NEWS.
222: RETURN
223: C
224: 5100 IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR.
225: & ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))))
226: & GO TO 5200
227: CALL RSPEAK(646)
228: C !NO, MEDIOCRE NEWS.
229: RETURN
230: C
231: 5200 SINGSF=.TRUE.
232: C !SANG SONG.
233: I=HERE
234: IF(I.EQ.MTREE) I=FORE3
235: C !PLACE BAUBLE.
236: CALL NEWSTA(BAUBL,647,I,0,0)
237: RETURN
238: C
239: C O37-- WHITE CLIFFS
240: C
241: 6000 IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND.
242: & (PRSA.NE.CLMBDW)) GO TO 10
243: CALL RSPEAK(648)
244: C !OH YEAH?
245: RETURN
246: C
247: C O38-- WALL
248: C
249: 7000 IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR.
250: & (PRSA.NE.PUSHW)) GO TO 7100
251: CALL RSPEAK(860)
252: C !PUSHED MIRROR WALL.
253: RETURN
254: C
255: 7100 IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10
256: CALL RSPEAK(662)
257: C !NO WALL.
258: RETURN
259: C NOBJS, PAGE 6
260: C
261: C O39-- SONG BIRD GLOBAL
262: C
263: 8000 IF(PRSA.NE.FINDW) GO TO 8100
264: C !FIND?
265: CALL RSPEAK(666)
266: RETURN
267: C
268: 8100 IF(PRSA.NE.EXAMIW) GO TO 10
269: C !EXAMINE?
270: CALL RSPEAK(667)
271: RETURN
272: C
273: C O40-- PUZZLE/SCOL WALLS
274: C
275: 9000 IF(HERE.NE.CPUZZ) GO TO 9500
276: C !PUZZLE WALLS?
277: IF(PRSA.NE.PUSHW) GO TO 10
278: C !PUSH?
279: DO 9100 I=1,8,2
280: C !LOCATE WALL.
281: IF(PRSO.EQ.CPWL(I)) GO TO 9200
282: 9100 CONTINUE
283: CALL BUG(80,PRSO)
284: C !WHAT?
285: C
286: 9200 J=CPWL(I+1)
287: C !GET DIRECTIONAL OFFSET.
288: NXT=CPHERE+J
289: C !GET NEXT STATE.
290: WL=CPVEC(NXT)
291: C !GET C(NEXT STATE).
292: GO TO (9300,9300,9300,9250,9350),(WL+4)
293: C !PROCESS.
294: C
295: 9250 CALL RSPEAK(876)
296: C !CLEAR CORRIDOR.
297: RETURN
298: C
299: 9300 IF(CPVEC(NXT+J).EQ.0) GO TO 9400
300: C !MOVABLE, ROOM TO MOVE?
301: 9350 CALL RSPEAK(877)
302: C !IMMOVABLE, NO ROOM.
303: RETURN
304: C
305: 9400 I=878
306: C !ASSUME FIRST PUSH.
307: IF(CPUSHF) I=879
308: C !NOT?
309: CPUSHF=.TRUE.
310: CPVEC(NXT+J)=WL
311: C !MOVE WALL.
312: CPVEC(NXT)=0
313: C !VACATE NEXT STATE.
314: CALL CPGOTO(NXT)
315: C !ONWARD.
316: CALL CPINFO(I,NXT)
317: C !DESCRIBE.
318: CALL PRINCR(.TRUE.,HERE)
319: C !PRINT ROOMS CONTENTS.
320: RFLAG(HERE)=or(RFLAG(HERE),RSEEN)
321: RETURN
322: C
323: 9500 IF(HERE.NE.SCOLAC) GO TO 9700
324: C !IN SCOL ACTIVE ROOM?
325: DO 9600 I=1,12,3
326: TARGET=SCOLWL(I+1)
327: C !ASSUME TARGET.
328: IF(SCOLWL(I).EQ.HERE) GO TO 2100
329: C !TREAT IF FOUND.
330: 9600 CONTINUE
331: C
332: 9700 IF(HERE.NE.BKBOX) GO TO 10
333: C !IN BOX ROOM?
334: TARGET=WNORT
335: GO TO 2100
336: C NOBJS, PAGE 7
337: C
338: C O41-- SHORT POLE
339: C
340: 10000 IF(PRSA.NE.RAISEW) GO TO 10100
341: C !LIFT?
342: I=749
343: C !ASSUME UP.
344: IF(POLEUF.EQ.2) I=750
345: C !ALREADY UP?
346: CALL RSPEAK(I)
347: POLEUF=2
348: C !POLE IS RAISED.
349: RETURN
350: C
351: 10100 IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10
352: IF(POLEUF.NE.0) GO TO 10200
353: C !ALREADY LOWERED?
354: CALL RSPEAK(751)
355: C !CANT DO IT.
356: RETURN
357: C
358: 10200 IF(MOD(MDIR,180).NE.0) GO TO 10300
359: C !MIRROR N-S?
360: POLEUF=0
361: C !YES, LOWER INTO
362: CALL RSPEAK(752)
363: C !CHANNEL.
364: RETURN
365: C
366: 10300 IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400
367: POLEUF=0
368: C !LOWER INTO HOLE.
369: CALL RSPEAK(753)
370: RETURN
371: C
372: 10400 CALL RSPEAK(753+POLEUF)
373: C !POLEUF = 1 OR 2.
374: POLEUF=1
375: C !NOW ON FLOOR.
376: RETURN
377: C
378: C O42-- MIRROR SWITCH
379: C
380: 11000 IF(PRSA.NE.PUSHW) GO TO 10
381: C !PUSH?
382: IF(MRPSHF) GO TO 11300
383: C !ALREADY PUSHED?
384: CALL RSPEAK(756)
385: C !BUTTON GOES IN.
386: DO 11100 I=1,OLNT
387: C !BLOCKED?
388: IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200
389: 11100 CONTINUE
390: CALL RSPEAK(757)
391: C !NOTHING IN BEAM.
392: RETURN
393: C
394: 11200 CFLAG(CEVMRS)=.TRUE.
395: C !MIRROR OPENS.
396: CTICK(CEVMRS)=7
397: MRPSHF=.TRUE.
398: MROPNF=.TRUE.
399: RETURN
400: C
401: 11300 CALL RSPEAK(758)
402: C !MIRROR ALREADYOPEN.
403: RETURN
404: C NOBJS, PAGE 8
405: C
406: C O43-- BEAM FUNCTION
407: C
408: 12000 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100
409: CALL RSPEAK(759)
410: C !TAKE BEAM, JOKE.
411: RETURN
412: C
413: 12100 I=PRSO
414: C !ASSUME BLK WITH DIROBJ.
415: IF((PRSA.EQ.PUTW).AND.(PRSI.EQ.RBEAM)) GO TO 12200
416: IF((PRSA.NE.MUNGW).OR.(PRSO.NE.RBEAM).OR.
417: & (PRSI.EQ.0)) GO TO 10
418: I=PRSI
419: 12200 IF(OADV(I).NE.WINNER) GO TO 12300
420: C !CARRYING?
421: CALL NEWSTA(I,0,HERE,0,0)
422: C !DROP OBJ.
423: CALL RSPSUB(760,ODESC2(I))
424: RETURN
425: C
426: 12300 J=761
427: C !ASSUME NOT IN ROOM.
428: IF(QHERE(J,HERE)) I=762
429: C !IN ROOM?
430: CALL RSPSUB(J,ODESC2(I))
431: C !DESCRIBE.
432: RETURN
433: C
434: C O44-- BRONZE DOOR
435: C
436: 13000 IF((HERE.EQ.NCELL).OR.((LCELL.EQ.4).AND.
437: & ((HERE.EQ.CELL).OR.(HERE.EQ.SCORR))))
438: & GO TO 13100
439: CALL RSPEAK(763)
440: C !DOOR NOT THERE.
441: RETURN
442: C
443: 13100 IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10
444: C !OPEN/CLOSE?
445: IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR))
446: & CALL RSPEAK(766)
447: RETURN
448: C
449: C O45-- QUIZ DOOR
450: C
451: 14000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100
452: CALL RSPEAK(767)
453: C !DOOR WONT MOVE.
454: RETURN
455: C
456: 14100 IF(PRSA.NE.KNOCKW) GO TO 10
457: C !KNOCK?
458: IF(INQSTF) GO TO 14200
459: C !TRIED IT ALREADY?
460: INQSTF=.TRUE.
461: C !START INQUISITION.
462: CFLAG(CEVINQ)=.TRUE.
463: CTICK(CEVINQ)=2
464: QUESNO=RND(8)
465: C !SELECT QUESTION.
466: NQATT=0
467: CORRCT=0
468: CALL RSPEAK(768)
469: C !ANNOUNCE RULES.
470: CALL RSPEAK(769)
471: CALL RSPEAK(770+QUESNO)
472: C !ASK QUESTION.
473: RETURN
474: C
475: 14200 CALL RSPEAK(798)
476: C !NO REPLY.
477: RETURN
478: C
479: C O46-- LOCKED DOOR
480: C
481: 15000 IF(PRSA.NE.OPENW) GO TO 10
482: C !OPEN?
483: CALL RSPEAK(778)
484: C !CANT.
485: RETURN
486: C
487: C O47-- CELL DOOR
488: C
489: 16000 NOBJS=OPNCLS(CDOOR,779,780)
490: C !OPEN/CLOSE?
491: RETURN
492: C NOBJS, PAGE 9
493: C
494: C O48-- DIALBUTTON
495: C
496: 17000 IF(PRSA.NE.PUSHW) GO TO 10
497: C !PUSH?
498: CALL RSPEAK(809)
499: C !CLICK.
500: IF(QOPEN(CDOOR)) CALL RSPEAK(810)
501: C !CLOSE CELL DOOR.
502: C
503: DO 17100 I=1,OLNT
504: C !RELOCATE OLD TO HYPER.
505: IF((OROOM(I).EQ.CELL).AND.(and(OFLAG1(I),DOORBT).EQ.0))
506: & CALL NEWSTA(I,0,LCELL*HFACTR,0,0)
507: IF(OROOM(I).EQ.(PNUMB*HFACTR))
508: & CALL NEWSTA(I,0,CELL,0,0)
509: 17100 CONTINUE
510: C
511: OFLAG2(ODOOR)=and(OFLAG2(ODOOR), not(OPENBT))
512: OFLAG2(CDOOR)=and(OFLAG2(CDOOR), not(OPENBT))
513: OFLAG1(ODOOR)=and(OFLAG1(ODOOR), not(VISIBT))
514: IF(PNUMB.EQ.4) OFLAG1(ODOOR)=or(OFLAG1(ODOOR),VISIBT)
515: C
516: IF(AROOM(PLAYER).NE.CELL) GO TO 17400
517: C !PLAYER IN CELL?
518: IF(LCELL.NE.4) GO TO 17200
519: C !IN RIGHT CELL?
520: OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT)
521: F=MOVETO(NCELL,PLAYER)
522: C !YES, MOVETO NCELL.
523: GO TO 17400
524: 17200 F=MOVETO(PCELL,PLAYER)
525: C !NO, MOVETO PCELL.
526: C
527: 17400 LCELL=PNUMB
528: RETURN
529: C NOBJS, PAGE 10
530: C
531: C O49-- DIAL INDICATOR
532: C
533: 18000 IF(PRSA.NE.SPINW) GO TO 18100
534: C !SPIN?
535: PNUMB=RND(8)+1
536: C !WHEE
537: C !
538: CALL RSPSUB(797,712+PNUMB)
539: RETURN
540: C
541: 18100 IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND.
542: & (PRSA.NE.TRNTOW)) GO TO 10
543: IF(PRSI.NE.0) GO TO 18200
544: C !TURN DIAL TO X?
545: CALL RSPEAK(806)
546: C !MUST SPECIFY.
547: RETURN
548: C
549: 18200 IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300
550: CALL RSPEAK(807)
551: C !MUST BE DIGIT.
552: RETURN
553: C
554: 18300 PNUMB=PRSI-NUM1+1
555: C !SET UP NEW.
556: CALL RSPSUB(808,712+PNUMB)
557: RETURN
558: C
559: C O50-- GLOBAL MIRROR
560: C
561: 19000 NOBJS=MIRPAN(832,.FALSE.)
562: RETURN
563: C
564: C O51-- GLOBAL PANEL
565: C
566: 20000 IF(HERE.NE.FDOOR) GO TO 20100
567: C !AT FRONT DOOR?
568: IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
569: CALL RSPEAK(843)
570: C !PANEL IN DOOR, NOGO.
571: RETURN
572: C
573: 20100 NOBJS=MIRPAN(838,.TRUE.)
574: RETURN
575: C
576: C O52-- PUZZLE ROOM SLIT
577: C
578: 21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10
579: IF(PRSO.NE.GCARD) GO TO 21100
580: C !PUT CARD IN SLIT?
581: CALL NEWSTA(PRSO,863,0,0,0)
582: C !KILL CARD.
583: CPOUTF=.TRUE.
584: C !OPEN DOOR.
585: OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT))
586: RETURN
587: C
588: 21100 IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND.
589: & (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200
590: CALL RSPEAK(RND(5)+552)
591: C !JOKE FOR VILL, VICT.
592: RETURN
593: C
594: 21200 CALL NEWSTA(PRSO,0,0,0,0)
595: C !KILL OBJECT.
596: CALL RSPSUB(864,ODO2)
597: C !DESCRIBE.
598: RETURN
599: C
600: END
601: C MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL
602: C
603: C DECLARATIONS
604: C
605: LOGICAL FUNCTION MIRPAN(ST,PNF)
606: IMPLICIT INTEGER(A-Z)
607: LOGICAL PNF
608: #include "gamestate.h"
609: #include "parser.h"
610: #include "verbs.h"
611: #include "flags.h"
612: C MIRPAN, PAGE 2
613: C
614: MIRPAN=.TRUE.
615: NUM=MRHERE(HERE)
616: C !GET MIRROR NUM.
617: IF(NUM.NE.0) GO TO 100
618: C !ANY HERE?
619: CALL RSPEAK(ST)
620: C !NO, LOSE.
621: RETURN
622: C
623: 100 MRBF=0
624: C !ASSUME MIRROR OK.
625: IF(((NUM.EQ.1).AND..NOT.MR1F).OR.
626: & ((NUM.EQ.2).AND..NOT.MR2F)) MRBF=1
627: IF((PRSA.NE.MOVEW).AND.(PRSA.NE.OPENW)) GO TO 200
628: CALL RSPEAK(ST+1)
629: C !CANT OPEN OR MOVE.
630: RETURN
631: C
632: 200 IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND.
633: & (PRSA.NE.LOOKW))) GO TO 300
634: CALL RSPEAK(844+MRBF)
635: C !LOOK IN MIRROR.
636: RETURN
637: C
638: 300 IF(PRSA.NE.MUNGW) GO TO 400
639: C !BREAK?
640: CALL RSPEAK(ST+2+MRBF)
641: C !DO IT.
642: IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE.
643: IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE.
644: RETURN
645: C
646: 400 IF(PNF.OR.(MRBF.EQ.0)) GO TO 500
647: C !BROKEN MIRROR?
648: CALL RSPEAK(846)
649: RETURN
650: C
651: 500 IF(PRSA.NE.PUSHW) GO TO 600
652: C !PUSH?
653: CALL RSPEAK(ST+3+NUM)
654: RETURN
655: C
656: 600 MIRPAN=.FALSE.
657: C !CANT HANDLE IT.
658: RETURN
659: C
660: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.