xref: /original-bsd/contrib/dungeon/nobjs.F (revision 1451ccc8)
1C NOBJS-	NEW OBJECTS PROCESSOR
2C	OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
3C	MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
4C
5C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
6C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
7C WRITTEN BY R. M. SUPNIK
8C
9C DECLARATIONS
10C
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"
20C
21C MISCELLANEOUS VARIABLES
22C
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"
36C
37C FUNCTIONS AND DATA
38C
39	QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
40C NOBJS, PAGE 2
41C
42	IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
43	IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
44	AV=AVEHIC(WINNER)
45	NOBJS=.TRUE.
46C
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)
52C
53C RETURN HERE TO DECLARE FALSE RESULT
54C
5510	NOBJS=.FALSE.
56	RETURN
57C
58C O32--	BILLS
59C
601000	IF(PRSA.NE.EATW) GO TO 1100
61C						!EAT?
62	CALL RSPEAK(639)
63C						!JOKE.
64	RETURN
65C
661100	IF(PRSA.EQ.BURNW) CALL RSPEAK(640)
67C						!BURN?  JOKE.
68	GO TO 10
69C						!LET IT BE HANDLED.
70C NOBJS, PAGE 3
71C
72C O33--	SCREEN OF LIGHT
73C
742000	TARGET=SCOL
75C						!TARGET IS SCOL.
762100	IF(PRSO.NE.TARGET) GO TO 2400
77C						!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)
81C						!HAND PASSES THRU.
82	RETURN
83C
842200	IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND.
85&		(PRSA.NE.MUNGW)) GO TO 2400
86	CALL RSPSUB(674,ODI2)
87C						!PASSES THRU.
88	RETURN
89C
902400	IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10
91	IF(HERE.EQ.BKBOX) GO TO 2600
92C						!THRU SCOL?
93	CALL NEWSTA(PRSO,0,BKBOX,0,0)
94C						!NO, THRU WALL.
95	CALL RSPSUB(675,ODO2)
96C						!ENDS UP IN BOX ROOM.
97	CTICK(CEVSCL)=0
98C						!CANCEL ALARM.
99	SCOLRM=0
100C						!RESET SCOL ROOM.
101	RETURN
102C
1032600	IF(SCOLRM.EQ.0) GO TO 2900
104C						!TRIED TO GO THRU?
105	CALL NEWSTA(PRSO,0,SCOLRM,0,0)
106C						!SUCCESS.
107	CALL RSPSUB(676,ODO2)
108C						!ENDS UP SOMEWHERE.
109	CTICK(CEVSCL)=0
110C						!CANCEL ALARM.
111	SCOLRM=0
112C						!RESET SCOL ROOM.
113	RETURN
114C
1152900	CALL RSPEAK(213)
116C						!CANT DO IT.
117	RETURN
118C NOBJS, PAGE 4
119C
120C O34--	GNOME OF ZURICH
121C
1223000	IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200
123	IF(OTVAL(PRSO).NE.0) GO TO 3100
124C						!THROW A TREASURE?
125	CALL NEWSTA(PRSO,641,0,0,0)
126C						!NO, GO POP.
127	RETURN
128C
1293100	CALL NEWSTA(PRSO,0,0,0,0)
130C						!YES, BYE BYE TREASURE.
131	CALL RSPSUB(642,ODO2)
132	CALL NEWSTA(ZGNOM,0,0,0,0)
133C						!BYE BYE GNOME.
134	CTICK(CEVZGO)=0
135C						!CANCEL EXIT.
136	F=MOVETO(BKENT,WINNER)
137C						!NOW IN BANK ENTRANCE.
138	RETURN
139C
1403200	IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
141&		(PRSA.NE.MUNGW)) GO TO 3300
142	CALL NEWSTA(ZGNOM,643,0,0,0)
143C						!VANISH GNOME.
144	CTICK(CEVZGO)=0
145C						!CANCEL EXIT.
146	RETURN
147C
1483300	CALL RSPEAK(644)
149C						!GNOME IS IMPATIENT.
150	RETURN
151C
152C O35--	EGG
153C
1544000	IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500
155	IF(.NOT.QOPEN(EGG)) GO TO 4100
156C						!OPEN ALREADY?
157	CALL RSPEAK(649)
158C						!YES.
159	RETURN
160C
1614100	IF(PRSI.NE.0) GO TO 4200
162C						!WITH SOMETHING?
163	CALL RSPEAK(650)
164C						!NO, CANT.
165	RETURN
166C
1674200	IF(PRSI.NE.HANDS) GO TO 4300
168C						!WITH HANDS?
169	CALL RSPEAK(651)
170C						!NOT RECOMMENDED.
171	RETURN
172C
1734300	I=652
174C						!MUNG MESSAGE.
175	IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR.
176&		(and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600
177	I=653
178C						!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
183C
1844500	IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800
185	I=655
186C						!YOU BLEW IT.
1874600	CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG))
188	CALL NEWSTA(EGG,0,0,0,0)
189C						!VANISH EGG.
190	OTVAL(BEGG)=2
191C						!BAD EGG HAS VALUE.
192	IF(OCAN(CANAR).NE.EGG) GO TO 4700
193C						!WAS CANARY INSIDE?
194	CALL RSPEAK(ODESCO(BCANA))
195C						!YES, DESCRIBE RESULT.
196	OTVAL(BCANA)=1
197	RETURN
198C
1994700	CALL NEWSTA(BCANA,0,0,0,0)
200C						!NO, VANISH IT.
201	RETURN
202C
2034800	IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10
204	CALL NEWSTA(BEGG,658,FORE3,0,0)
205C						!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
210C						!BAD CANARY.
211	RETURN
212C NOBJS, PAGE 5
213C
214C O36--	CANARIES, GOOD AND BAD
215C
2165000	IF(PRSA.NE.WINDW) GO TO 10
217C						!WIND EM UP?
218	IF(PRSO.EQ.CANAR) GO TO 5100
219C						!RIGHT ONE?
220	CALL RSPEAK(645)
221C						!NO, BAD NEWS.
222	RETURN
223C
2245100	IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR.
225&		((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))))
226&		GO TO 5200
227	CALL RSPEAK(646)
228C						!NO, MEDIOCRE NEWS.
229	RETURN
230C
2315200	SINGSF=.TRUE.
232C						!SANG SONG.
233	I=HERE
234	IF(I.EQ.MTREE) I=FORE3
235C						!PLACE BAUBLE.
236	CALL NEWSTA(BAUBL,647,I,0,0)
237	RETURN
238C
239C O37--	WHITE CLIFFS
240C
2416000	IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND.
242&		(PRSA.NE.CLMBDW)) GO TO 10
243	CALL RSPEAK(648)
244C						!OH YEAH?
245	RETURN
246C
247C O38--	WALL
248C
2497000	IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR.
250&		(PRSA.NE.PUSHW)) GO TO 7100
251	CALL RSPEAK(860)
252C						!PUSHED MIRROR WALL.
253	RETURN
254C
2557100	IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10
256	CALL RSPEAK(662)
257C						!NO WALL.
258	RETURN
259C NOBJS, PAGE 6
260C
261C O39--	SONG BIRD GLOBAL
262C
2638000	IF(PRSA.NE.FINDW) GO TO 8100
264C						!FIND?
265	CALL RSPEAK(666)
266	RETURN
267C
2688100	IF(PRSA.NE.EXAMIW) GO TO 10
269C						!EXAMINE?
270	CALL RSPEAK(667)
271	RETURN
272C
273C O40--	PUZZLE/SCOL WALLS
274C
2759000	IF(HERE.NE.CPUZZ) GO TO 9500
276C						!PUZZLE WALLS?
277	IF(PRSA.NE.PUSHW) GO TO 10
278C						!PUSH?
279	DO 9100 I=1,8,2
280C						!LOCATE WALL.
281	  IF(PRSO.EQ.CPWL(I)) GO TO 9200
2829100	CONTINUE
283	CALL BUG(80,PRSO)
284C						!WHAT?
285C
2869200	J=CPWL(I+1)
287C						!GET DIRECTIONAL OFFSET.
288	NXT=CPHERE+J
289C						!GET NEXT STATE.
290	WL=CPVEC(NXT)
291C						!GET C(NEXT STATE).
292	GO TO (9300,9300,9300,9250,9350),(WL+4)
293C						!PROCESS.
294C
2959250	CALL RSPEAK(876)
296C						!CLEAR CORRIDOR.
297	RETURN
298C
2999300	IF(CPVEC(NXT+J).EQ.0) GO TO 9400
300C						!MOVABLE, ROOM TO MOVE?
3019350	CALL RSPEAK(877)
302C						!IMMOVABLE, NO ROOM.
303	RETURN
304C
3059400	I=878
306C						!ASSUME FIRST PUSH.
307	IF(CPUSHF) I=879
308C						!NOT?
309	CPUSHF=.TRUE.
310	CPVEC(NXT+J)=WL
311C						!MOVE WALL.
312	CPVEC(NXT)=0
313C						!VACATE NEXT STATE.
314	CALL CPGOTO(NXT)
315C						!ONWARD.
316	CALL CPINFO(I,NXT)
317C						!DESCRIBE.
318	CALL PRINCR(.TRUE.,HERE)
319C						!PRINT ROOMS CONTENTS.
320	RFLAG(HERE)=or(RFLAG(HERE),RSEEN)
321	RETURN
322C
3239500	IF(HERE.NE.SCOLAC) GO TO 9700
324C						!IN SCOL ACTIVE ROOM?
325	DO 9600 I=1,12,3
326	  TARGET=SCOLWL(I+1)
327C						!ASSUME TARGET.
328	  IF(SCOLWL(I).EQ.HERE) GO TO 2100
329C						!TREAT IF FOUND.
3309600	CONTINUE
331C
3329700	IF(HERE.NE.BKBOX) GO TO 10
333C						!IN BOX ROOM?
334	TARGET=WNORT
335	GO TO 2100
336C NOBJS, PAGE 7
337C
338C O41--	SHORT POLE
339C
34010000	IF(PRSA.NE.RAISEW) GO TO 10100
341C						!LIFT?
342	I=749
343C						!ASSUME UP.
344	IF(POLEUF.EQ.2) I=750
345C						!ALREADY UP?
346	CALL RSPEAK(I)
347	POLEUF=2
348C						!POLE IS RAISED.
349	RETURN
350C
35110100	IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10
352	IF(POLEUF.NE.0) GO TO 10200
353C						!ALREADY LOWERED?
354	CALL RSPEAK(751)
355C						!CANT DO IT.
356	RETURN
357C
35810200	IF(MOD(MDIR,180).NE.0) GO TO 10300
359C						!MIRROR N-S?
360	POLEUF=0
361C						!YES, LOWER INTO
362	CALL RSPEAK(752)
363C						!CHANNEL.
364	RETURN
365C
36610300	IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400
367	POLEUF=0
368C						!LOWER INTO HOLE.
369	CALL RSPEAK(753)
370	RETURN
371C
37210400	CALL RSPEAK(753+POLEUF)
373C						!POLEUF = 1 OR 2.
374	POLEUF=1
375C						!NOW ON FLOOR.
376	RETURN
377C
378C O42--	MIRROR SWITCH
379C
38011000	IF(PRSA.NE.PUSHW) GO TO 10
381C						!PUSH?
382	IF(MRPSHF) GO TO 11300
383C						!ALREADY PUSHED?
384	CALL RSPEAK(756)
385C						!BUTTON GOES IN.
386	DO 11100 I=1,OLNT
387C						!BLOCKED?
388	  IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200
38911100	CONTINUE
390	CALL RSPEAK(757)
391C						!NOTHING IN BEAM.
392	RETURN
393C
39411200	CFLAG(CEVMRS)=.TRUE.
395C						!MIRROR OPENS.
396	CTICK(CEVMRS)=7
397	MRPSHF=.TRUE.
398	MROPNF=.TRUE.
399	RETURN
400C
40111300	CALL RSPEAK(758)
402C						!MIRROR ALREADYOPEN.
403	RETURN
404C NOBJS, PAGE 8
405C
406C O43--	BEAM FUNCTION
407C
40812000	IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100
409	CALL RSPEAK(759)
410C						!TAKE BEAM, JOKE.
411	RETURN
412C
41312100	I=PRSO
414C						!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
41912200	IF(OADV(I).NE.WINNER) GO TO 12300
420C						!CARRYING?
421	CALL NEWSTA(I,0,HERE,0,0)
422C						!DROP OBJ.
423	CALL RSPSUB(760,ODESC2(I))
424	RETURN
425C
42612300	J=761
427C						!ASSUME NOT IN ROOM.
428	IF(QHERE(J,HERE)) I=762
429C						!IN ROOM?
430	CALL RSPSUB(J,ODESC2(I))
431C						!DESCRIBE.
432	RETURN
433C
434C O44--	BRONZE DOOR
435C
43613000	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)
440C						!DOOR NOT THERE.
441	RETURN
442C
44313100	IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10
444C						!OPEN/CLOSE?
445	IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR))
446&		CALL RSPEAK(766)
447	RETURN
448C
449C O45--	QUIZ DOOR
450C
45114000	IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100
452	CALL RSPEAK(767)
453C						!DOOR WONT MOVE.
454	RETURN
455C
45614100	IF(PRSA.NE.KNOCKW) GO TO 10
457C						!KNOCK?
458	IF(INQSTF) GO TO 14200
459C						!TRIED IT ALREADY?
460	INQSTF=.TRUE.
461C						!START INQUISITION.
462	CFLAG(CEVINQ)=.TRUE.
463	CTICK(CEVINQ)=2
464	QUESNO=RND(8)
465C						!SELECT QUESTION.
466	NQATT=0
467	CORRCT=0
468	CALL RSPEAK(768)
469C						!ANNOUNCE RULES.
470	CALL RSPEAK(769)
471	CALL RSPEAK(770+QUESNO)
472C						!ASK QUESTION.
473	RETURN
474C
47514200	CALL RSPEAK(798)
476C						!NO REPLY.
477	RETURN
478C
479C O46--	LOCKED DOOR
480C
48115000	IF(PRSA.NE.OPENW) GO TO 10
482C						!OPEN?
483	CALL RSPEAK(778)
484C						!CANT.
485	RETURN
486C
487C O47--	CELL DOOR
488C
48916000	NOBJS=OPNCLS(CDOOR,779,780)
490C						!OPEN/CLOSE?
491	RETURN
492C NOBJS, PAGE 9
493C
494C O48--	DIALBUTTON
495C
49617000	IF(PRSA.NE.PUSHW) GO TO 10
497C						!PUSH?
498	CALL RSPEAK(809)
499C						!CLICK.
500	IF(QOPEN(CDOOR)) CALL RSPEAK(810)
501C						!CLOSE CELL DOOR.
502C
503	DO 17100 I=1,OLNT
504C						!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)
50917100	CONTINUE
510C
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)
515C
516	IF(AROOM(PLAYER).NE.CELL) GO TO 17400
517C						!PLAYER IN CELL?
518	IF(LCELL.NE.4) GO TO 17200
519C						!IN RIGHT CELL?
520	OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT)
521	F=MOVETO(NCELL,PLAYER)
522C						!YES, MOVETO NCELL.
523	GO TO 17400
52417200	F=MOVETO(PCELL,PLAYER)
525C						!NO, MOVETO PCELL.
526C
52717400	LCELL=PNUMB
528	RETURN
529C NOBJS, PAGE 10
530C
531C O49--	DIAL INDICATOR
532C
53318000	IF(PRSA.NE.SPINW) GO TO 18100
534C						!SPIN?
535	PNUMB=RND(8)+1
536C						!WHEE
537C						!
538	CALL RSPSUB(797,712+PNUMB)
539	RETURN
540C
54118100	IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND.
542&		(PRSA.NE.TRNTOW)) GO TO 10
543	IF(PRSI.NE.0) GO TO 18200
544C						!TURN DIAL TO X?
545	CALL RSPEAK(806)
546C						!MUST SPECIFY.
547	RETURN
548C
54918200	IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300
550	CALL RSPEAK(807)
551C						!MUST BE DIGIT.
552	RETURN
553C
55418300	PNUMB=PRSI-NUM1+1
555C						!SET UP NEW.
556	CALL RSPSUB(808,712+PNUMB)
557	RETURN
558C
559C O50--	GLOBAL MIRROR
560C
56119000	NOBJS=MIRPAN(832,.FALSE.)
562	RETURN
563C
564C O51--	GLOBAL PANEL
565C
56620000	IF(HERE.NE.FDOOR) GO TO 20100
567C						!AT FRONT DOOR?
568	IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
569	CALL RSPEAK(843)
570C						!PANEL IN DOOR, NOGO.
571	RETURN
572C
57320100	NOBJS=MIRPAN(838,.TRUE.)
574	RETURN
575C
576C O52--	PUZZLE ROOM SLIT
577C
57821000	IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10
579	IF(PRSO.NE.GCARD) GO TO 21100
580C						!PUT CARD IN SLIT?
581	CALL NEWSTA(PRSO,863,0,0,0)
582C						!KILL CARD.
583	CPOUTF=.TRUE.
584C						!OPEN DOOR.
585	OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT))
586	RETURN
587C
58821100	IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND.
589&	  (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200
590	CALL RSPEAK(RND(5)+552)
591C						!JOKE FOR VILL, VICT.
592	RETURN
593C
59421200	CALL NEWSTA(PRSO,0,0,0,0)
595C						!KILL OBJECT.
596	CALL RSPSUB(864,ODO2)
597C						!DESCRIBE.
598	RETURN
599C
600	END
601C MIRPAN--	PROCESSOR FOR GLOBAL MIRROR/PANEL
602C
603C DECLARATIONS
604C
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"
612C MIRPAN, PAGE 2
613C
614	MIRPAN=.TRUE.
615	NUM=MRHERE(HERE)
616C						!GET MIRROR NUM.
617	IF(NUM.NE.0) GO TO 100
618C						!ANY HERE?
619	CALL RSPEAK(ST)
620C						!NO, LOSE.
621	RETURN
622C
623100	MRBF=0
624C						!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)
629C						!CANT OPEN OR MOVE.
630	RETURN
631C
632200	IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND.
633&		(PRSA.NE.LOOKW))) GO TO 300
634	CALL RSPEAK(844+MRBF)
635C						!LOOK IN MIRROR.
636	RETURN
637C
638300	IF(PRSA.NE.MUNGW) GO TO 400
639C						!BREAK?
640	CALL RSPEAK(ST+2+MRBF)
641C						!DO IT.
642	IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE.
643	IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE.
644	RETURN
645C
646400	IF(PNF.OR.(MRBF.EQ.0)) GO TO 500
647C						!BROKEN MIRROR?
648	CALL RSPEAK(846)
649	RETURN
650C
651500	IF(PRSA.NE.PUSHW) GO TO 600
652C						!PUSH?
653	CALL RSPEAK(ST+3+NUM)
654	RETURN
655C
656600	MIRPAN=.FALSE.
657C						!CANT HANDLE IT.
658	RETURN
659C
660	END
661