xref: /original-bsd/contrib/dungeon/nrooms.F (revision a95f03a8)
1C RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
2C
3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5C WRITTEN BY R. M. SUPNIK
6C
7C DECLARATIONS
8C
9	LOGICAL FUNCTION RAPPL2(RI)
10	IMPLICIT INTEGER (A-Z)
11	LOGICAL QOPEN,QHERE
12#include "parser.h"
13#include "gamestate.h"
14#include "state.h"
15#include "io.h"
16#include "rooms.h"
17#include "rflag.h"
18#include "rindex.h"
19#include "objects.h"
20#include "oflags.h"
21#include "oindex.h"
22#include "xsrch.h"
23#include "clock.h"
24#include "advers.h"
25#include "verbs.h"
26#include "flags.h"
27C
28C FUNCTIONS AND DATA
29C
30	QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
31	DATA NEWRMS/38/
32C RAPPL2, PAGE 2
33C
34	RAPPL2=.TRUE.
35	GO TO (38000,39000,40000,41000,42000,43000,44000,
36&		45000,46000,47000,48000,49000,50000,
37&		51000,52000,53000,54000,55000,56000,
38&		57000,58000,59000,60000),
39&		(RI-NEWRMS+1)
40	CALL BUG(70,RI)
41	RETURN
42C
43C R38--	MIRROR D ROOM
44C
4538000	IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
46	RETURN
47C
48C R39--	MIRROR G ROOM
49C
5039000	IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
51	RETURN
52C
53C R40--	MIRROR C ROOM
54C
5540000	IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
56	RETURN
57C
58C R41--	MIRROR B ROOM
59C
6041000	IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
61	RETURN
62C
63C R42--	MIRROR A ROOM
64C
6542000	IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
66	RETURN
67C RAPPL2, PAGE 3
68C
69C R43--	MIRROR C EAST/WEST
70C
7143000	IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
72	RETURN
73C
74C R44--	MIRROR B EAST/WEST
75C
7644000	IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
77	RETURN
78C
79C R45--	MIRROR A EAST/WEST
80C
8145000	IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
82	RETURN
83C
84C R46--	INSIDE MIRROR
85C
8646000	IF(PRSA.NE.LOOKW) RETURN
87C						!LOOK?
88	CALL RSPEAK(688)
89C						!DESCRIBE
90C
91C NOW DESCRIBE POLE STATE.
92C
93C CASES 1,2--	MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
94C CASES 3,4--	MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
95C CASE 5--	POLE IS UP
96C
97	I=689
98C						!ASSUME CASE 5.
99	IF((MDIR.EQ.270).AND.(MLOC.EQ.MRB))
100&		I=690+MIN0(POLEUF,1)
101	IF(MOD(MDIR,180).EQ.0)
102&		I=692+MIN0(POLEUF,1)
103	CALL RSPEAK(I)
104C						!DESCRIBE POLE.
105	CALL RSPSUB(694,695+(MDIR/45))
106C						!DESCRIBE ARROW.
107	RETURN
108C RAPPL2, PAGE 4
109C
110C R47--	MIRROR EYE ROOM
111C
11247000	IF(PRSA.NE.LOOKW) RETURN
113C						!LOOK?
114	I=704
115C						!ASSUME BEAM STOP.
116	DO 47100 J=1,OLNT
117	  IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
11847100	CONTINUE
119	I=703
12047200	CALL RSPSUB(I,ODESC2(J))
121C						!DESCRIBE BEAM.
122	CALL LOOKTO(MRA,0,0,0,0)
123C						!LOOK NORTH.
124	RETURN
125C
126C R48--	INSIDE CRYPT
127C
12848000	IF(PRSA.NE.LOOKW) RETURN
129C						!LOOK?
130	I=46
131C						!CRYPT IS OPEN/CLOSED.
132	IF(QOPEN(TOMB)) I=12
133	CALL RSPSUB(705,I)
134	RETURN
135C
136C R49--	SOUTH CORRIDOR
137C
13849000	IF(PRSA.NE.LOOKW) RETURN
139C						!LOOK?
140	CALL RSPEAK(706)
141C						!DESCRIBE.
142	I=46
143C						!ODOOR IS OPEN/CLOSED.
144	IF(QOPEN(ODOOR)) I=12
145	IF(LCELL.EQ.4) CALL RSPSUB(707,I)
146C						!DESCRIBE ODOOR IF THERE.
147	RETURN
148C
149C R50--	BEHIND DOOR
150C
15150000	IF(PRSA.NE.WALKIW) GO TO 50100
152C						!WALK IN?
153	CFLAG(CEVFOL)=.TRUE.
154C						!MASTER FOLLOWS.
155	CTICK(CEVFOL)=-1
156	RETURN
157C
15850100	IF(PRSA.NE.LOOKW) RETURN
159C						!LOOK?
160	I=46
161C						!QDOOR IS OPEN/CLOSED.
162	IF(QOPEN(QDOOR)) I=12
163	CALL RSPSUB(708,I)
164	RETURN
165C RAPPL2, PAGE 5
166C
167C R51--	FRONT DOOR
168C
16951000	IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
170C						!IF EXITS, KILL FOLLOW.
171	IF(PRSA.NE.LOOKW) RETURN
172C						!LOOK?
173	CALL LOOKTO(0,MRD,709,0,0)
174C						!DESCRIBE SOUTH.
175	I=46
176C						!PANEL IS OPEN/CLOSED.
177	IF(INQSTF) I=12
178C						!OPEN IF INQ STARTED.
179	J=46
180C						!QDOOR IS OPEN/CLOSED.
181	IF(QOPEN(QDOOR)) J=12
182	CALL RSPSB2(710,I,J)
183	RETURN
184C
185C R52--	NORTH CORRIDOR
186C
18752000	IF(PRSA.NE.LOOKW) RETURN
188C						!LOOK?
189	I=46
190	IF(QOPEN(CDOOR)) I=12
191C						!CDOOR IS OPEN/CLOSED.
192	CALL RSPSUB(711,I)
193	RETURN
194C
195C R53--	PARAPET
196C
19753000	IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
198	RETURN
199C
200C R54--	CELL
201C
20254000	IF(PRSA.NE.LOOKW) RETURN
203C						!LOOK?
204	I=721
205C						!CDOOR IS OPEN/CLOSED.
206	IF(QOPEN(CDOOR)) I=722
207	CALL RSPEAK(I)
208	I=46
209C						!ODOOR IS OPEN/CLOSED.
210	IF(QOPEN(ODOOR)) I=12
211	IF(LCELL.EQ.4) CALL RSPSUB(723,I)
212C						!DESCRIBE.
213	RETURN
214C
215C R55--	PRISON CELL
216C
21755000	IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
218C						!LOOK?
219	RETURN
220C
221C R56--	NIRVANA CELL
222C
22356000	IF(PRSA.NE.LOOKW) RETURN
224C						!LOOK?
225	I=46
226C						!ODOOR IS OPEN/CLOSED.
227	IF(QOPEN(ODOOR)) I=12
228	CALL RSPSUB(725,I)
229	RETURN
230C RAPPL2, PAGE 6
231C
232C R57--	NIRVANA AND END OF GAME
233C
23457000	IF(PRSA.NE.WALKIW) RETURN
235C						!WALKIN?
236	CALL RSPEAK(726)
237	CALL SCORE(.FALSE.)
238C moved to exit routine	CLOSE(DBCH)
239	CALL EXIT
240C
241C R58--	TOMB ROOM
242C
24358000	IF(PRSA.NE.LOOKW) RETURN
244C						!LOOK?
245	I=46
246C						!TOMB IS OPEN/CLOSED.
247	IF(QOPEN(TOMB)) I=12
248	CALL RSPSUB(792,I)
249	RETURN
250C
251C R59--	PUZZLE SIDE ROOM
252C
25359000	IF(PRSA.NE.LOOKW) RETURN
254C						!LOOK?
255	I=861
256C						!ASSUME DOOR CLOSED.
257	IF(CPOUTF) I=862
258C						!OPEN?
259	CALL RSPEAK(I)
260C						!DESCRIBE.
261	RETURN
262C
263C R60--	PUZZLE ROOM
264C
26560000	IF(PRSA.NE.LOOKW) RETURN
266C						!LOOK?
267	IF(CPUSHF) GO TO 60100
268C						!STARTED PUZZLE?
269	CALL RSPEAK(868)
270C						!NO, DESCRIBE.
271	IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
272	RETURN
273C
27460100	CALL CPINFO(880,CPHERE)
275C						!DESCRIBE ROOM.
276	RETURN
277C
278	END
279C LOOKTO--	DESCRIBE VIEW IN MIRROR HALLWAY
280C
281C DECLARATIONS
282C
283	SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
284	IMPLICIT INTEGER(A-Z)
285#include "gamestate.h"
286#include "flags.h"
287C LOOKTO, PAGE 2
288C
289	CALL RSPEAK(HT)
290C						!DESCRIBE HALL.
291	CALL RSPEAK(NT)
292C						!DESCRIBE NORTH VIEW.
293	CALL RSPEAK(ST)
294C						!DESCRIBE SOUTH VIEW.
295	DIR=0
296C						!ASSUME NO DIRECTION.
297	IF(IABS(MLOC-HERE).NE.1) GO TO 200
298C						!MIRROR TO N OR S?
299	IF(MLOC.EQ.NRM) DIR=695
300	IF(MLOC.EQ.SRM) DIR=699
301C						!DIR=N/S.
302	IF(MOD(MDIR,180).NE.0) GO TO 100
303C						!MIRROR N-S?
304	CALL RSPSUB(847,DIR)
305C						!YES, HE SEES PANEL
306	CALL RSPSB2(848,DIR,DIR)
307C						!AND NARROW ROOMS.
308	GO TO 200
309C
310100	M1=MRHERE(HERE)
311C						!WHICH MIRROR?
312	MRBF=0
313C						!ASSUME INTACT.
314	IF(((M1.EQ.1).AND..NOT.MR1F).OR.
315&	  ((M1.EQ.2).AND..NOT.MR2F)) MRBF=1
316	CALL RSPSUB(849+MRBF,DIR)
317C						!DESCRIBE.
318	IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
319	IF(MRBF.NE.0) CALL RSPEAK(851)
320C
321200	I=0
322C						!ASSUME NO MORE TO DO.
323	IF((NT.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.699))) I=852
324	IF((ST.EQ.0).AND.((DIR.EQ.0).OR.(DIR.EQ.695))) I=853
325	IF((NT+ST+DIR).EQ.0) I=854
326	IF(HT.NE.0) CALL RSPEAK(I)
327C						!DESCRIBE HALLS.
328	RETURN
329C
330	END
331C EWTELL--	DESCRIBE E/W NARROW ROOMS
332C
333C DECLARATIONS
334C
335	SUBROUTINE EWTELL(RM,ST)
336	IMPLICIT INTEGER(A-Z)
337	LOGICAL M1
338C
339C ROOMS
340#include "rindex.h"
341#include "flags.h"
342C EWTELL, PAGE 2
343C
344C NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
345C MIRROR MUST BE N-S.
346C
347	M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
348	I=819+MOD(RM-MRAE,2)
349C						!GET BASIC E/W STRING.
350	IF((M1.AND..NOT.MR1F).OR.(.NOT.M1.AND..NOT.MR2F))
351&		I=I+2
352	CALL RSPEAK(I)
353	IF(M1.AND.MROPNF) CALL RSPEAK(823+((I-819)/2))
354	CALL RSPEAK(825)
355	CALL RSPEAK(ST)
356	RETURN
357C
358	END
359