xref: /csrg-svn/contrib/dungeon/rooms.F (revision 35973)
1*35973SbosticC RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
2*35973SbosticC
3*35973SbosticC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4*35973SbosticC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5*35973SbosticC WRITTEN BY R. M. SUPNIK
6*35973SbosticC
7*35973SbosticC DECLARATIONS
8*35973SbosticC
9*35973Sbostic	LOGICAL FUNCTION RAPPL1(RI)
10*35973Sbostic	IMPLICIT INTEGER (A-Z)
11*35973Sbostic	LOGICAL QOPEN,QON,QHERE,PROB,F
12*35973Sbostic	LOGICAL MOVETO,LIT
13*35973Sbostic#include "parser.h"
14*35973Sbostic#include "gamestate.h"
15*35973Sbostic#include "state.h"
16*35973SbosticC
17*35973SbosticC SCREEN OF LIGHT
18*35973SbosticC
19*35973Sbostic	COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
20*35973Sbostic	COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
21*35973SbosticC
22*35973SbosticC MISCELLANEOUS VARIABLES
23*35973SbosticC
24*35973Sbostic	COMMON /BATS/ BATDRP(9)
25*35973Sbostic#include "rooms.h"
26*35973Sbostic#include "rflag.h"
27*35973Sbostic#include "rindex.h"
28*35973Sbostic#include "objects.h"
29*35973Sbostic#include "oflags.h"
30*35973Sbostic#include "oindex.h"
31*35973Sbostic#include "clock.h"
32*35973Sbostic#include "villians.h"
33*35973Sbostic#include "advers.h"
34*35973Sbostic#include "verbs.h"
35*35973Sbostic#include "flags.h"
36*35973SbosticC
37*35973SbosticC FUNCTIONS AND DATA
38*35973SbosticC
39*35973Sbostic	QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
40*35973Sbostic	QON(R)=and(OFLAG1(R),ONBT).NE.0
41*35973SbosticC RAPPL1, PAGE 2
42*35973SbosticC
43*35973Sbostic	RAPPL1=.TRUE.
44*35973SbosticC						!USUALLY IGNORED.
45*35973Sbostic	IF(RI.EQ.0) RETURN
46*35973SbosticC						!RETURN IF NAUGHT.
47*35973SbosticC
48*35973SbosticC						!SET TO FALSE FOR
49*35973SbosticC
50*35973SbosticC						!NEW DESC NEEDED.
51*35973Sbostic	GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
52*35973Sbostic&	 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
53*35973Sbostic&	 21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
54*35973Sbostic&	 31000,32000,33000,34000,35000,36000,37000),RI
55*35973Sbostic	CALL BUG(1,RI)
56*35973SbosticC
57*35973SbosticC R1--	EAST OF HOUSE.  DESCRIPTION DEPENDS ON STATE OF WINDOW
58*35973SbosticC
59*35973Sbostic1000	IF(PRSA.NE.LOOKW) RETURN
60*35973SbosticC						!LOOK?
61*35973Sbostic	I=13
62*35973SbosticC						!ASSUME CLOSED.
63*35973Sbostic	IF(QOPEN(WINDO)) I=12
64*35973SbosticC						!IF OPEN, AJAR.
65*35973Sbostic	CALL RSPSUB(11,I)
66*35973SbosticC						!DESCRIBE.
67*35973Sbostic	RETURN
68*35973SbosticC
69*35973SbosticC R2--	KITCHEN.  SAME VIEW FROM INSIDE.
70*35973SbosticC
71*35973Sbostic2000	IF(PRSA.NE.LOOKW) RETURN
72*35973SbosticC						!LOOK?
73*35973Sbostic	I=13
74*35973SbosticC						!ASSUME CLOSED.
75*35973Sbostic	IF(QOPEN(WINDO)) I=12
76*35973SbosticC						!IF OPEN, AJAR.
77*35973Sbostic	CALL RSPSUB(14,I)
78*35973SbosticC						!DESCRIBE.
79*35973Sbostic	RETURN
80*35973SbosticC
81*35973SbosticC R3--	LIVING ROOM.  DESCRIPTION DEPENDS ON MAGICF (STATE OF
82*35973SbosticC	DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
83*35973SbosticC
84*35973Sbostic3000	IF(PRSA.NE.LOOKW) GO TO 3500
85*35973SbosticC						!LOOK?
86*35973Sbostic	I=15
87*35973SbosticC						!ASSUME NO HOLE.
88*35973Sbostic	IF(MAGICF) I=16
89*35973SbosticC						!IF MAGICF, CYCLOPS HOLE.
90*35973Sbostic	CALL RSPEAK(I)
91*35973SbosticC						!DESCRIBE.
92*35973Sbostic	I=17+ORRUG
93*35973SbosticC						!ASSUME INITIAL STATE.
94*35973Sbostic	IF(QOPEN(DOOR)) I=I+2
95*35973SbosticC						!DOOR OPEN?
96*35973Sbostic	CALL RSPEAK(I)
97*35973SbosticC						!DESCRIBE.
98*35973Sbostic	RETURN
99*35973SbosticC
100*35973SbosticC	NOT A LOOK WORD.  REEVALUATE TROPHY CASE.
101*35973SbosticC
102*35973Sbostic3500	IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
103*35973Sbostic&		RETURN
104*35973Sbostic	ASCORE(WINNER)=RWSCOR
105*35973SbosticC						!SCORE TROPHY CASE.
106*35973Sbostic	DO 3600 I=1,OLNT
107*35973SbosticC						!RETAIN RAW SCORE AS WELL.
108*35973Sbostic	  J=I
109*35973SbosticC						!FIND OUT IF IN CASE.
110*35973Sbostic3550	  J=OCAN(J)
111*35973SbosticC						!TRACE OWNERSHIP.
112*35973Sbostic	  IF(J.EQ.0) GO TO 3600
113*35973Sbostic	  IF(J.NE.TCASE) GO TO 3550
114*35973SbosticC						!DO ALL LEVELS.
115*35973Sbostic	  ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
116*35973Sbostic3600	CONTINUE
117*35973Sbostic	CALL SCRUPD(0)
118*35973SbosticC						!SEE IF ENDGAME TRIG.
119*35973Sbostic	RETURN
120*35973SbosticC RAPPL1, PAGE 3
121*35973SbosticC
122*35973SbosticC R4--	CELLAR.  SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
123*35973SbosticC
124*35973Sbostic4000	IF(PRSA.NE.LOOKW) GO TO 4500
125*35973SbosticC						!LOOK?
126*35973Sbostic	CALL RSPEAK(21)
127*35973SbosticC						!DESCRIBE CELLAR.
128*35973Sbostic	RETURN
129*35973SbosticC
130*35973Sbostic4500	IF(PRSA.NE.WALKIW) RETURN
131*35973SbosticC						!WALKIN?
132*35973Sbostic	IF(and(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
133*35973Sbostic	OFLAG2(DOOR)=and( or(OFLAG2(DOOR),TCHBT), not(OPENBT))
134*35973Sbostic	CALL RSPEAK(22)
135*35973SbosticC						!SLAM AND BOLT DOOR.
136*35973Sbostic	RETURN
137*35973SbosticC
138*35973SbosticC R5--	MAZE11.  DESCRIBE STATE OF GRATING.
139*35973SbosticC
140*35973Sbostic5000	IF(PRSA.NE.LOOKW) RETURN
141*35973SbosticC						!LOOK?
142*35973Sbostic	CALL RSPEAK(23)
143*35973SbosticC						!DESCRIBE.
144*35973Sbostic	I=24
145*35973SbosticC						!ASSUME LOCKED.
146*35973Sbostic	IF(GRUNLF) I=26
147*35973SbosticC						!UNLOCKED?
148*35973Sbostic	IF(QOPEN(GRATE)) I=25
149*35973SbosticC						!OPEN?
150*35973Sbostic	CALL RSPEAK(I)
151*35973SbosticC						!DESCRIBE GRATE.
152*35973Sbostic	RETURN
153*35973SbosticC
154*35973SbosticC R6--	CLEARING.  DESCRIBE CLEARING, MOVE LEAVES.
155*35973SbosticC
156*35973Sbostic6000	IF(PRSA.NE.LOOKW) GO TO 6500
157*35973SbosticC						!LOOK?
158*35973Sbostic	CALL RSPEAK(27)
159*35973SbosticC						!DESCRIBE.
160*35973Sbostic	IF(RVCLR.EQ.0) RETURN
161*35973SbosticC						!LEAVES MOVED?
162*35973Sbostic	I=28
163*35973SbosticC						!YES, ASSUME GRATE CLOSED.
164*35973Sbostic	IF(QOPEN(GRATE)) I=29
165*35973SbosticC						!OPEN?
166*35973Sbostic	CALL RSPEAK(I)
167*35973SbosticC						!DESCRIBE GRATE.
168*35973Sbostic	RETURN
169*35973SbosticC
170*35973Sbostic6500	IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
171*35973Sbostic&		((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
172*35973Sbostic	CALL RSPEAK(30)
173*35973SbosticC						!MOVE LEAVES, REVEAL GRATE.
174*35973Sbostic	RVCLR=1
175*35973SbosticC						!INDICATE LEAVES MOVED.
176*35973Sbostic	RETURN
177*35973SbosticC RAPPL1, PAGE 4
178*35973SbosticC
179*35973SbosticC R7--	RESERVOIR SOUTH.  DESCRIPTION DEPENDS ON LOW TIDE FLAG.
180*35973SbosticC
181*35973Sbostic7000	IF(PRSA.NE.LOOKW) RETURN
182*35973SbosticC						!LOOK?
183*35973Sbostic	I=31
184*35973SbosticC						!ASSUME FULL.
185*35973Sbostic	IF(LWTIDF) I=32
186*35973SbosticC						!IF LOW TIDE, EMPTY.
187*35973Sbostic	CALL RSPEAK(I)
188*35973SbosticC						!DESCRIBE.
189*35973Sbostic	CALL RSPEAK(33)
190*35973SbosticC						!DESCRIBE EXITS.
191*35973Sbostic	RETURN
192*35973SbosticC
193*35973SbosticC R8--	RESERVOIR.  STATE DEPENDS ON LOW TIDE FLAG.
194*35973SbosticC
195*35973Sbostic8000	IF(PRSA.NE.LOOKW) RETURN
196*35973SbosticC						!LOOK?
197*35973Sbostic	I=34
198*35973SbosticC						!ASSUME FULL.
199*35973Sbostic	IF(LWTIDF) I=35
200*35973SbosticC						!IF LOW TIDE, EMTPY.
201*35973Sbostic	CALL RSPEAK(I)
202*35973SbosticC						!DESCRIBE.
203*35973Sbostic	RETURN
204*35973SbosticC
205*35973SbosticC R9--	RESERVOIR NORTH.  ALSO DEPENDS ON LOW TIDE FLAG.
206*35973SbosticC
207*35973Sbostic9000	IF(PRSA.NE.LOOKW) RETURN
208*35973SbosticC						!LOOK?
209*35973Sbostic	I=36
210*35973SbosticC						!YOU GET THE IDEA.
211*35973Sbostic	IF(LWTIDF) I=37
212*35973Sbostic	CALL RSPEAK(I)
213*35973Sbostic	CALL RSPEAK(38)
214*35973Sbostic	RETURN
215*35973SbosticC
216*35973SbosticC R10--	GLACIER ROOM.  STATE DEPENDS ON MELTED, VANISHED FLAGS.
217*35973SbosticC
218*35973Sbostic10000	IF(PRSA.NE.LOOKW) RETURN
219*35973SbosticC						!LOOK?
220*35973Sbostic	CALL RSPEAK(39)
221*35973SbosticC						!BASIC DESCRIPTION.
222*35973Sbostic	I=0
223*35973SbosticC						!ASSUME NO CHANGES.
224*35973Sbostic	IF(GLACMF) I=40
225*35973SbosticC						!PARTIAL MELT?
226*35973Sbostic	IF(GLACRF) I=41
227*35973SbosticC						!COMPLETE MELT?
228*35973Sbostic	CALL RSPEAK(I)
229*35973SbosticC						!DESCRIBE.
230*35973Sbostic	RETURN
231*35973SbosticC
232*35973SbosticC R11--	FOREST ROOM
233*35973SbosticC
234*35973Sbostic11000	IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.
235*35973SbosticC						!IF WALK IN, BIRDIE.
236*35973Sbostic	RETURN
237*35973SbosticC
238*35973SbosticC R12--	MIRROR ROOM.  STATE DEPENDS ON MIRROR INTACT.
239*35973SbosticC
240*35973Sbostic12000	IF(PRSA.NE.LOOKW) RETURN
241*35973SbosticC						!LOOK?
242*35973Sbostic	CALL RSPEAK(42)
243*35973SbosticC						!DESCRIBE.
244*35973Sbostic	IF(MIRRMF) CALL RSPEAK(43)
245*35973SbosticC						!IF BROKEN, NASTY REMARK.
246*35973Sbostic	RETURN
247*35973SbosticC RAPPL1, PAGE 5
248*35973SbosticC
249*35973SbosticC R13--	CAVE2 ROOM.  BLOW OUT CANDLES WITH 50% PROBABILITY.
250*35973SbosticC
251*35973Sbostic13000	IF(PRSA.NE.WALKIW) RETURN
252*35973SbosticC						!WALKIN?
253*35973Sbostic	IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
254*35973Sbostic&		.NOT.QON(CANDL)) RETURN
255*35973Sbostic	OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT))
256*35973Sbostic	CALL RSPEAK(47)
257*35973SbosticC						!TELL OF WINDS.
258*35973Sbostic	CFLAG(CEVCND)=.FALSE.
259*35973SbosticC						!HALT CANDLE COUNTDOWN.
260*35973Sbostic	RETURN
261*35973SbosticC
262*35973SbosticC R14--	BOOM ROOM.  BLOW HIM UP IF CARRYING FLAMING OBJECT.
263*35973SbosticC
264*35973Sbostic14000	J=ODESC2(CANDL)
265*35973SbosticC						!ASSUME CANDLE.
266*35973Sbostic	IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
267*35973Sbostic	J=ODESC2(TORCH)
268*35973SbosticC						!ASSUME TORCH.
269*35973Sbostic	IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
270*35973Sbostic	J=ODESC2(MATCH)
271*35973Sbostic	IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
272*35973Sbostic	RETURN
273*35973SbosticC						!SAFE
274*35973SbosticC
275*35973Sbostic14100	IF(PRSA.NE.TRNONW) GO TO 14200
276*35973SbosticC						!TURN ON?
277*35973Sbostic	CALL RSPSUB(294,J)
278*35973SbosticC						!BOOM
279*35973SbosticC						!
280*35973Sbostic	CALL JIGSUP(44)
281*35973Sbostic	RETURN
282*35973SbosticC
283*35973Sbostic14200	IF(PRSA.NE.WALKIW) RETURN
284*35973SbosticC						!WALKIN?
285*35973Sbostic	CALL RSPSUB(295,J)
286*35973SbosticC						!BOOM
287*35973SbosticC						!
288*35973Sbostic	CALL JIGSUP(44)
289*35973Sbostic	RETURN
290*35973SbosticC
291*35973SbosticC R15--	NO-OBJS.  SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
292*35973SbosticC
293*35973Sbostic15000	EMPTHF=.TRUE.
294*35973SbosticC						!ASSUME TRUE.
295*35973Sbostic	DO 15100 I=1,OLNT
296*35973SbosticC						!SEE IF CARRYING.
297*35973Sbostic	  IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
298*35973Sbostic15100	CONTINUE
299*35973SbosticC
300*35973Sbostic	IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
301*35973Sbostic	CALL SCRUPD(LTSHFT)
302*35973SbosticC						!SCORE LIGHT SHAFT.
303*35973Sbostic	LTSHFT=0
304*35973SbosticC						!NEVER AGAIN.
305*35973Sbostic	RETURN
306*35973SbosticC RAPPL1, PAGE 6
307*35973SbosticC
308*35973SbosticC R16--	MACHINE ROOM.  DESCRIBE MACHINE.
309*35973SbosticC
310*35973Sbostic16000	IF(PRSA.NE.LOOKW) RETURN
311*35973SbosticC						!LOOK?
312*35973Sbostic	I=46
313*35973SbosticC						!ASSUME LID CLOSED.
314*35973Sbostic	IF(QOPEN(MACHI)) I=12
315*35973SbosticC						!IF OPEN, OPEN.
316*35973Sbostic	CALL RSPSUB(45,I)
317*35973SbosticC						!DESCRIBE.
318*35973Sbostic	RETURN
319*35973SbosticC
320*35973SbosticC R17--	BAT ROOM.  UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
321*35973SbosticC
322*35973Sbostic17000	IF(PRSA.NE.LOOKW) GO TO 17500
323*35973SbosticC						!LOOK?
324*35973Sbostic	CALL RSPEAK(48)
325*35973SbosticC						!DESCRIBE ROOM.
326*35973Sbostic	IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)
327*35973SbosticC						!BAT HOLDS NOSE.
328*35973Sbostic	RETURN
329*35973SbosticC
330*35973Sbostic17500	IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
331*35973Sbostic	CALL RSPEAK(50)
332*35973SbosticC						!TIME TO FLY, JACK.
333*35973Sbostic	F=MOVETO(BATDRP(RND(9)+1),WINNER)
334*35973SbosticC						!SELECT RANDOM DEST.
335*35973Sbostic	RAPPL1=.FALSE.
336*35973SbosticC						!INDICATE NEW DESC NEEDED.
337*35973Sbostic	RETURN
338*35973SbosticC
339*35973SbosticC R18--	DOME ROOM.  STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
340*35973SbosticC
341*35973Sbostic18000	IF(PRSA.NE.LOOKW) GO TO 18500
342*35973SbosticC						!LOOK?
343*35973Sbostic	CALL RSPEAK(51)
344*35973SbosticC						!DESCRIBE.
345*35973Sbostic	IF(DOMEF) CALL RSPEAK(52)
346*35973SbosticC						!IF ROPE, DESCRIBE.
347*35973Sbostic	RETURN
348*35973SbosticC
349*35973Sbostic18500	IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)
350*35973SbosticC						!DID HE JUMP???
351*35973Sbostic	RETURN
352*35973SbosticC
353*35973SbosticC R19--	TORCH ROOM.  ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
354*35973SbosticC
355*35973Sbostic19000	IF(PRSA.NE.LOOKW) RETURN
356*35973SbosticC						!LOOK?
357*35973Sbostic	CALL RSPEAK(54)
358*35973SbosticC						!DESCRIBE.
359*35973Sbostic	IF(DOMEF) CALL RSPEAK(55)
360*35973SbosticC						!IF ROPE, DESCRIBE.
361*35973Sbostic	RETURN
362*35973SbosticC
363*35973SbosticC R20--	CAROUSEL ROOM.  SPIN HIM OR KILL HIM.
364*35973SbosticC
365*35973Sbostic20000	IF(PRSA.NE.LOOKW) GO TO 20500
366*35973SbosticC						!LOOK?
367*35973Sbostic	CALL RSPEAK(56)
368*35973SbosticC						!DESCRIBE.
369*35973Sbostic	IF(.NOT.CAROFF) CALL RSPEAK(57)
370*35973SbosticC						!IF NOT FLIPPED, SPIN.
371*35973Sbostic	RETURN
372*35973SbosticC
373*35973Sbostic20500	IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)
374*35973SbosticC						!WALKED IN.
375*35973Sbostic	RETURN
376*35973SbosticC RAPPL1, PAGE 7
377*35973SbosticC
378*35973SbosticC R21--	LLD ROOM.  HANDLE EXORCISE, DESCRIPTIONS.
379*35973SbosticC
380*35973Sbostic21000	IF(PRSA.NE.LOOKW) GO TO 21500
381*35973SbosticC						!LOOK?
382*35973Sbostic	CALL RSPEAK(59)
383*35973SbosticC						!DESCRIBE.
384*35973Sbostic	IF(.NOT.LLDF) CALL RSPEAK(60)
385*35973SbosticC						!IF NOT VANISHED, GHOSTS.
386*35973Sbostic	RETURN
387*35973SbosticC
388*35973Sbostic21500	IF(PRSA.NE.EXORCW) RETURN
389*35973SbosticC						!EXORCISE?
390*35973Sbostic	IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
391*35973Sbostic&		(OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
392*35973Sbostic	CALL RSPEAK(62)
393*35973SbosticC						!NOT EQUIPPED.
394*35973Sbostic	RETURN
395*35973SbosticC
396*35973Sbostic21600	IF(QHERE(GHOST,HERE)) GO TO 21700
397*35973SbosticC						!GHOST HERE?
398*35973Sbostic	CALL JIGSUP(61)
399*35973SbosticC						!NOPE, EXORCISE YOU.
400*35973Sbostic	RETURN
401*35973SbosticC
402*35973Sbostic21700	CALL NEWSTA(GHOST,63,0,0,0)
403*35973SbosticC						!VANISH GHOST.
404*35973Sbostic	LLDF=.TRUE.
405*35973SbosticC						!OPEN GATE.
406*35973Sbostic	RETURN
407*35973SbosticC
408*35973SbosticC R22--	LLD2-ROOM.  IS HIS HEAD ON A POLE?
409*35973SbosticC
410*35973Sbostic22000	IF(PRSA.NE.LOOKW) RETURN
411*35973SbosticC						!LOOK?
412*35973Sbostic	CALL RSPEAK(64)
413*35973SbosticC						!DESCRIBE.
414*35973Sbostic	IF(ONPOLF) CALL RSPEAK(65)
415*35973SbosticC						!ON POLE?
416*35973Sbostic	RETURN
417*35973SbosticC
418*35973SbosticC R23--	DAM ROOM.  DESCRIBE RESERVOIR, PANEL.
419*35973SbosticC
420*35973Sbostic23000	IF(PRSA.NE.LOOKW) RETURN
421*35973SbosticC						!LOOK?
422*35973Sbostic	CALL RSPEAK(66)
423*35973SbosticC						!DESCRIBE.
424*35973Sbostic	I=67
425*35973Sbostic	IF(LWTIDF) I=68
426*35973Sbostic	CALL RSPEAK(I)
427*35973SbosticC						!DESCRIBE RESERVOIR.
428*35973Sbostic	CALL RSPEAK(69)
429*35973SbosticC						!DESCRIBE PANEL.
430*35973Sbostic	IF(GATEF) CALL RSPEAK(70)
431*35973SbosticC						!BUBBLE IS GLOWING.
432*35973Sbostic	RETURN
433*35973SbosticC
434*35973SbosticC R24--	TREE ROOM
435*35973SbosticC
436*35973Sbostic24000	IF(PRSA.NE.LOOKW) RETURN
437*35973SbosticC						!LOOK?
438*35973Sbostic	CALL RSPEAK(660)
439*35973SbosticC						!DESCRIBE.
440*35973Sbostic	I=661
441*35973SbosticC						!SET FLAG FOR BELOW.
442*35973Sbostic	DO 24200 J=1,OLNT
443*35973SbosticC						!DESCRIBE OBJ IN FORE3.
444*35973Sbostic	  IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200
445*35973Sbostic	  CALL RSPEAK(I)
446*35973SbosticC						!SET STAGE,
447*35973Sbostic	  I=0
448*35973Sbostic	  CALL RSPSUB(502,ODESC2(J))
449*35973SbosticC						!DESCRIBE.
450*35973Sbostic24200	CONTINUE
451*35973Sbostic	RETURN
452*35973SbosticC RAPPL1, PAGE 8
453*35973SbosticC
454*35973SbosticC R25--	CYCLOPS-ROOM.  DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
455*35973SbosticC
456*35973Sbostic25000	IF(PRSA.NE.LOOKW) RETURN
457*35973SbosticC						!LOOK?
458*35973Sbostic	CALL RSPEAK(606)
459*35973SbosticC						!DESCRIBE.
460*35973Sbostic	I=607
461*35973SbosticC						!ASSUME BASIC STATE.
462*35973Sbostic	IF(RVCYC.GT.0) I=608
463*35973SbosticC						!>0?  HUNGRY.
464*35973Sbostic	IF(RVCYC.LT.0) I=609
465*35973SbosticC						!<0?  THIRSTY.
466*35973Sbostic	IF(CYCLOF) I=610
467*35973SbosticC						!ASLEEP?
468*35973Sbostic	IF(MAGICF) I=611
469*35973SbosticC						!GONE?
470*35973Sbostic	CALL RSPEAK(I)
471*35973SbosticC						!DESCRIBE.
472*35973Sbostic	IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
473*35973Sbostic&		CALL RSPEAK(193+IABS(RVCYC))
474*35973Sbostic	RETURN
475*35973SbosticC
476*35973SbosticC R26--	BANK BOX ROOM.
477*35973SbosticC
478*35973Sbostic26000	IF(PRSA.NE.WALKIW) RETURN
479*35973SbosticC						!SURPRISE HIM.
480*35973Sbostic	DO 26100 I=1,8,2
481*35973SbosticC						!SCOLRM DEPENDS ON
482*35973Sbostic	  IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
483*35973Sbostic26100	CONTINUE
484*35973SbosticC						!ENTRY DIRECTION.
485*35973Sbostic	RETURN
486*35973SbosticC
487*35973SbosticC R27--	TREASURE ROOM.
488*35973SbosticC
489*35973Sbostic27000	IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
490*35973Sbostic&		RETURN
491*35973Sbostic	IF(OROOM(THIEF).NE.HERE)
492*35973Sbostic&		CALL NEWSTA(THIEF,82,HERE,0,0)
493*35973Sbostic	THFPOS=HERE
494*35973SbosticC						!RESET SEARCH PATTERN.
495*35973Sbostic	OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
496*35973Sbostic	IF(OROOM(CHALI).EQ.HERE)
497*35973Sbostic&		OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
498*35973SbosticC
499*35973SbosticC	VANISH EVERYTHING IN ROOM
500*35973SbosticC
501*35973Sbostic	J=0
502*35973SbosticC						!ASSUME NOTHING TO VANISH.
503*35973Sbostic	DO 27200 I=1,OLNT
504*35973Sbostic	  IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
505*35973Sbostic&		GO TO 27200
506*35973Sbostic	  J=83
507*35973SbosticC						!FLAG BYEBYE.
508*35973Sbostic	  OFLAG1(I)=and(OFLAG1(I),not(VISIBT))
509*35973Sbostic27200	CONTINUE
510*35973Sbostic	CALL RSPEAK(J)
511*35973SbosticC						!DESCRIBE.
512*35973Sbostic	RETURN
513*35973SbosticC
514*35973SbosticC R28--	CLIFF FUNCTION.  SEE IF CARRYING INFLATED BOAT.
515*35973SbosticC
516*35973Sbostic28000	DEFLAF=OADV(RBOAT).NE.WINNER
517*35973SbosticC						!TRUE IF NOT CARRYING.
518*35973Sbostic	RETURN
519*35973SbosticC RAPPL1, PAGE 9
520*35973SbosticC
521*35973SbosticC R29--	RIVR4 ROOM.  PLAY WITH BUOY.
522*35973SbosticC
523*35973Sbostic29000	IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
524*35973Sbostic	CALL RSPEAK(84)
525*35973SbosticC						!GIVE HINT,
526*35973Sbostic	BUOYF=.FALSE.
527*35973SbosticC						!THEN DISABLE.
528*35973Sbostic	RETURN
529*35973SbosticC
530*35973SbosticC R30--	OVERFALLS.  DOOM.
531*35973SbosticC
532*35973Sbostic30000	IF(PRSA.NE.LOOKW) CALL JIGSUP(85)
533*35973SbosticC						!OVER YOU GO.
534*35973Sbostic	RETURN
535*35973SbosticC
536*35973SbosticC R31--	BEACH ROOM.  DIG A HOLE.
537*35973SbosticC
538*35973Sbostic31000	IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
539*35973Sbostic	RVSND=RVSND+1
540*35973SbosticC						!INCREMENT DIG STATE.
541*35973Sbostic	GO TO (31100,31100,31100,31400,31500),RVSND
542*35973SbosticC						!PROCESS STATE.
543*35973Sbostic	CALL BUG(2,RVSND)
544*35973SbosticC
545*35973Sbostic31100	CALL RSPEAK(85+RVSND)
546*35973SbosticC						!1-3... DISCOURAGE HIM.
547*35973Sbostic	RETURN
548*35973SbosticC
549*35973Sbostic31400	I=89
550*35973SbosticC						!ASSUME DISCOVERY.
551*35973Sbostic	IF(and(OFLAG1(STATU),VISIBT).NE.0) I=88
552*35973Sbostic	CALL RSPEAK(I)
553*35973Sbostic	OFLAG1(STATU)=or(OFLAG1(STATU),VISIBT)
554*35973Sbostic	RETURN
555*35973SbosticC
556*35973Sbostic31500	RVSND=0
557*35973SbosticC						!5... SAND COLLAPSES
558*35973Sbostic	CALL JIGSUP(90)
559*35973SbosticC						!AND SO DOES HE.
560*35973Sbostic	RETURN
561*35973SbosticC
562*35973SbosticC R32--	TCAVE ROOM.  DIG A HOLE IN GUANO.
563*35973SbosticC
564*35973Sbostic32000	IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
565*35973Sbostic	I=91
566*35973SbosticC						!ASSUME NO GUANO.
567*35973Sbostic	IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100
568*35973SbosticC						!IS IT HERE?
569*35973Sbostic	RVGUA=MIN0(4,RVGUA+1)
570*35973SbosticC						!YES, SET NEW STATE.
571*35973Sbostic	I=91+RVGUA
572*35973SbosticC						!GET NASTY REMARK.
573*35973Sbostic32100	CALL RSPEAK(I)
574*35973SbosticC						!DESCRIBE.
575*35973Sbostic	RETURN
576*35973SbosticC
577*35973SbosticC R33--	FALLS ROOM
578*35973SbosticC
579*35973Sbostic33000	IF(PRSA.NE.LOOKW) RETURN
580*35973SbosticC						!LOOK?
581*35973Sbostic	CALL RSPEAK(96)
582*35973SbosticC						!DESCRIBE.
583*35973Sbostic	I=97
584*35973SbosticC						!ASSUME NO RAINBOW.
585*35973Sbostic	IF(RAINBF) I=98
586*35973SbosticC						!GOT ONE?
587*35973Sbostic	CALL RSPEAK(I)
588*35973SbosticC						!DESCRIBE.
589*35973Sbostic	RETURN
590*35973SbosticC RAPPL1, PAGE 10
591*35973SbosticC
592*35973SbosticC R34--	LEDGE FUNCTION.  LEDGE CAN COLLAPSE.
593*35973SbosticC
594*35973Sbostic34000	IF(PRSA.NE.LOOKW) RETURN
595*35973SbosticC						!LOOK?
596*35973Sbostic	CALL RSPEAK(100)
597*35973SbosticC						!DESCRIBE.
598*35973Sbostic	I=102
599*35973SbosticC						!ASSUME SAFE ROOM OK.
600*35973Sbostic	IF(and(RFLAG(MSAFE),RMUNG).NE.0) I=101
601*35973Sbostic	CALL RSPEAK(I)
602*35973SbosticC						!DESCRIBE.
603*35973Sbostic	RETURN
604*35973SbosticC
605*35973SbosticC R35--	SAFE ROOM.  STATE DEPENDS ON WHETHER SAFE BLOWN.
606*35973SbosticC
607*35973Sbostic35000	IF(PRSA.NE.LOOKW) RETURN
608*35973SbosticC						!LOOK?
609*35973Sbostic	CALL RSPEAK(104)
610*35973SbosticC						!DESCRIBE.
611*35973Sbostic	I=105
612*35973SbosticC						!ASSUME OK.
613*35973Sbostic	IF(SAFEF) I=106
614*35973SbosticC						!BLOWN?
615*35973Sbostic	CALL RSPEAK(I)
616*35973SbosticC						!DESCRIBE.
617*35973Sbostic	RETURN
618*35973SbosticC
619*35973SbosticC R36--	MAGNET ROOM.  DESCRIBE, CHECK FOR SPINDIZZY DOOM.
620*35973SbosticC
621*35973Sbostic36000	IF(PRSA.NE.LOOKW) GO TO 36500
622*35973SbosticC						!LOOK?
623*35973Sbostic	CALL RSPEAK(107)
624*35973SbosticC						!DESCRIBE.
625*35973Sbostic	RETURN
626*35973SbosticC
627*35973Sbostic36500	IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN
628*35973SbosticC						!WALKIN ON FLIPPED?
629*35973Sbostic	IF(CAROZF) GO TO 36600
630*35973SbosticC						!ZOOM?
631*35973Sbostic	CALL RSPEAK(108)
632*35973SbosticC						!NO, SPIN HIS COMPASS.
633*35973Sbostic	RETURN
634*35973SbosticC
635*35973Sbostic36600	I=58
636*35973SbosticC						!SPIN HIS INSIDES.
637*35973Sbostic	IF(WINNER.NE.PLAYER) I=99
638*35973SbosticC						!SPIN ROBOT.
639*35973Sbostic	CALL JIGSUP(I)
640*35973SbosticC						!DEAD.
641*35973Sbostic	RETURN
642*35973SbosticC
643*35973SbosticC R37--	CAGE ROOM.  IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
644*35973SbosticC
645*35973Sbostic37000	IF(CAGESF) F=MOVETO(CAGER,WINNER)
646*35973SbosticC						!IF SOLVED, MOVE.
647*35973Sbostic	RETURN
648*35973SbosticC
649*35973Sbostic	END
650