|
|
1.1 root 1: C RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2
2: C
3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5: C WRITTEN BY R. M. SUPNIK
6: C
7: C DECLARATIONS
8: C
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"
27: C
28: C FUNCTIONS AND DATA
29: C
30: QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
31: DATA NEWRMS/38/
32: C RAPPL2, PAGE 2
33: C
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
42: C
43: C R38-- MIRROR D ROOM
44: C
45: 38000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(FDOOR,MRG,0,682,681)
46: RETURN
47: C
48: C R39-- MIRROR G ROOM
49: C
50: 39000 IF(PRSA.EQ.WALKIW) CALL JIGSUP(685)
51: RETURN
52: C
53: C R40-- MIRROR C ROOM
54: C
55: 40000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRG,MRB,683,0,681)
56: RETURN
57: C
58: C R41-- MIRROR B ROOM
59: C
60: 41000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRC,MRA,0,0,681)
61: RETURN
62: C
63: C R42-- MIRROR A ROOM
64: C
65: 42000 IF(PRSA.EQ.LOOKW) CALL LOOKTO(MRB,0,0,684,681)
66: RETURN
67: C RAPPL2, PAGE 3
68: C
69: C R43-- MIRROR C EAST/WEST
70: C
71: 43000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,683)
72: RETURN
73: C
74: C R44-- MIRROR B EAST/WEST
75: C
76: 44000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,686)
77: RETURN
78: C
79: C R45-- MIRROR A EAST/WEST
80: C
81: 45000 IF(PRSA.EQ.LOOKW) CALL EWTELL(HERE,687)
82: RETURN
83: C
84: C R46-- INSIDE MIRROR
85: C
86: 46000 IF(PRSA.NE.LOOKW) RETURN
87: C !LOOK?
88: CALL RSPEAK(688)
89: C !DESCRIBE
90: C
91: C NOW DESCRIBE POLE STATE.
92: C
93: C CASES 1,2-- MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE
94: C CASES 3,4-- MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL
95: C CASE 5-- POLE IS UP
96: C
97: I=689
98: C !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)
104: C !DESCRIBE POLE.
105: CALL RSPSUB(694,695+(MDIR/45))
106: C !DESCRIBE ARROW.
107: RETURN
108: C RAPPL2, PAGE 4
109: C
110: C R47-- MIRROR EYE ROOM
111: C
112: 47000 IF(PRSA.NE.LOOKW) RETURN
113: C !LOOK?
114: I=704
115: C !ASSUME BEAM STOP.
116: DO 47100 J=1,OLNT
117: IF(QHERE(J,HERE).AND.(J.NE.RBEAM)) GO TO 47200
118: 47100 CONTINUE
119: I=703
120: 47200 CALL RSPSUB(I,ODESC2(J))
121: C !DESCRIBE BEAM.
122: CALL LOOKTO(MRA,0,0,0,0)
123: C !LOOK NORTH.
124: RETURN
125: C
126: C R48-- INSIDE CRYPT
127: C
128: 48000 IF(PRSA.NE.LOOKW) RETURN
129: C !LOOK?
130: I=46
131: C !CRYPT IS OPEN/CLOSED.
132: IF(QOPEN(TOMB)) I=12
133: CALL RSPSUB(705,I)
134: RETURN
135: C
136: C R49-- SOUTH CORRIDOR
137: C
138: 49000 IF(PRSA.NE.LOOKW) RETURN
139: C !LOOK?
140: CALL RSPEAK(706)
141: C !DESCRIBE.
142: I=46
143: C !ODOOR IS OPEN/CLOSED.
144: IF(QOPEN(ODOOR)) I=12
145: IF(LCELL.EQ.4) CALL RSPSUB(707,I)
146: C !DESCRIBE ODOOR IF THERE.
147: RETURN
148: C
149: C R50-- BEHIND DOOR
150: C
151: 50000 IF(PRSA.NE.WALKIW) GO TO 50100
152: C !WALK IN?
153: CFLAG(CEVFOL)=.TRUE.
154: C !MASTER FOLLOWS.
155: CTICK(CEVFOL)=-1
156: RETURN
157: C
158: 50100 IF(PRSA.NE.LOOKW) RETURN
159: C !LOOK?
160: I=46
161: C !QDOOR IS OPEN/CLOSED.
162: IF(QOPEN(QDOOR)) I=12
163: CALL RSPSUB(708,I)
164: RETURN
165: C RAPPL2, PAGE 5
166: C
167: C R51-- FRONT DOOR
168: C
169: 51000 IF(PRSA.EQ.WALKIW) CTICK(CEVFOL)=0
170: C !IF EXITS, KILL FOLLOW.
171: IF(PRSA.NE.LOOKW) RETURN
172: C !LOOK?
173: CALL LOOKTO(0,MRD,709,0,0)
174: C !DESCRIBE SOUTH.
175: I=46
176: C !PANEL IS OPEN/CLOSED.
177: IF(INQSTF) I=12
178: C !OPEN IF INQ STARTED.
179: J=46
180: C !QDOOR IS OPEN/CLOSED.
181: IF(QOPEN(QDOOR)) J=12
182: CALL RSPSB2(710,I,J)
183: RETURN
184: C
185: C R52-- NORTH CORRIDOR
186: C
187: 52000 IF(PRSA.NE.LOOKW) RETURN
188: C !LOOK?
189: I=46
190: IF(QOPEN(CDOOR)) I=12
191: C !CDOOR IS OPEN/CLOSED.
192: CALL RSPSUB(711,I)
193: RETURN
194: C
195: C R53-- PARAPET
196: C
197: 53000 IF(PRSA.EQ.LOOKW) CALL RSPSUB(712,712+PNUMB)
198: RETURN
199: C
200: C R54-- CELL
201: C
202: 54000 IF(PRSA.NE.LOOKW) RETURN
203: C !LOOK?
204: I=721
205: C !CDOOR IS OPEN/CLOSED.
206: IF(QOPEN(CDOOR)) I=722
207: CALL RSPEAK(I)
208: I=46
209: C !ODOOR IS OPEN/CLOSED.
210: IF(QOPEN(ODOOR)) I=12
211: IF(LCELL.EQ.4) CALL RSPSUB(723,I)
212: C !DESCRIBE.
213: RETURN
214: C
215: C R55-- PRISON CELL
216: C
217: 55000 IF(PRSA.EQ.LOOKW) CALL RSPEAK(724)
218: C !LOOK?
219: RETURN
220: C
221: C R56-- NIRVANA CELL
222: C
223: 56000 IF(PRSA.NE.LOOKW) RETURN
224: C !LOOK?
225: I=46
226: C !ODOOR IS OPEN/CLOSED.
227: IF(QOPEN(ODOOR)) I=12
228: CALL RSPSUB(725,I)
229: RETURN
230: C RAPPL2, PAGE 6
231: C
232: C R57-- NIRVANA AND END OF GAME
233: C
234: 57000 IF(PRSA.NE.WALKIW) RETURN
235: C !WALKIN?
236: CALL RSPEAK(726)
237: CALL SCORE(.FALSE.)
238: C moved to exit routine CLOSE(DBCH)
239: CALL EXIT
240: C
241: C R58-- TOMB ROOM
242: C
243: 58000 IF(PRSA.NE.LOOKW) RETURN
244: C !LOOK?
245: I=46
246: C !TOMB IS OPEN/CLOSED.
247: IF(QOPEN(TOMB)) I=12
248: CALL RSPSUB(792,I)
249: RETURN
250: C
251: C R59-- PUZZLE SIDE ROOM
252: C
253: 59000 IF(PRSA.NE.LOOKW) RETURN
254: C !LOOK?
255: I=861
256: C !ASSUME DOOR CLOSED.
257: IF(CPOUTF) I=862
258: C !OPEN?
259: CALL RSPEAK(I)
260: C !DESCRIBE.
261: RETURN
262: C
263: C R60-- PUZZLE ROOM
264: C
265: 60000 IF(PRSA.NE.LOOKW) RETURN
266: C !LOOK?
267: IF(CPUSHF) GO TO 60100
268: C !STARTED PUZZLE?
269: CALL RSPEAK(868)
270: C !NO, DESCRIBE.
271: IF(and(OFLAG2(WARNI),TCHBT).NE.0) CALL RSPEAK(869)
272: RETURN
273: C
274: 60100 CALL CPINFO(880,CPHERE)
275: C !DESCRIBE ROOM.
276: RETURN
277: C
278: END
279: C LOOKTO-- DESCRIBE VIEW IN MIRROR HALLWAY
280: C
281: C DECLARATIONS
282: C
283: SUBROUTINE LOOKTO(NRM,SRM,NT,ST,HT)
284: IMPLICIT INTEGER(A-Z)
285: #include "gamestate.h"
286: #include "flags.h"
287: C LOOKTO, PAGE 2
288: C
289: CALL RSPEAK(HT)
290: C !DESCRIBE HALL.
291: CALL RSPEAK(NT)
292: C !DESCRIBE NORTH VIEW.
293: CALL RSPEAK(ST)
294: C !DESCRIBE SOUTH VIEW.
295: DIR=0
296: C !ASSUME NO DIRECTION.
297: IF(IABS(MLOC-HERE).NE.1) GO TO 200
298: C !MIRROR TO N OR S?
299: IF(MLOC.EQ.NRM) DIR=695
300: IF(MLOC.EQ.SRM) DIR=699
301: C !DIR=N/S.
302: IF(MOD(MDIR,180).NE.0) GO TO 100
303: C !MIRROR N-S?
304: CALL RSPSUB(847,DIR)
305: C !YES, HE SEES PANEL
306: CALL RSPSB2(848,DIR,DIR)
307: C !AND NARROW ROOMS.
308: GO TO 200
309: C
310: 100 M1=MRHERE(HERE)
311: C !WHICH MIRROR?
312: MRBF=0
313: C !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)
317: C !DESCRIBE.
318: IF((M1.EQ.1).AND.MROPNF) CALL RSPEAK(823+MRBF)
319: IF(MRBF.NE.0) CALL RSPEAK(851)
320: C
321: 200 I=0
322: C !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)
327: C !DESCRIBE HALLS.
328: RETURN
329: C
330: END
331: C EWTELL-- DESCRIBE E/W NARROW ROOMS
332: C
333: C DECLARATIONS
334: C
335: SUBROUTINE EWTELL(RM,ST)
336: IMPLICIT INTEGER(A-Z)
337: LOGICAL M1
338: C
339: C ROOMS
340: #include "rindex.h"
341: #include "flags.h"
342: C EWTELL, PAGE 2
343: C
344: C NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND
345: C MIRROR MUST BE N-S.
346: C
347: M1=(MDIR+(MOD(RM-MRAE,2)*180)).EQ.180
348: I=819+MOD(RM-MRAE,2)
349: C !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
357: C
358: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.