ANSIfication; bug report 4.3BSD/bin/223
[unix-history] / usr / src / contrib / dungeon / nrooms.F
CommitLineData
8b22683c
KB
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