|
|
1.1 root 1: C SOBJS- SIMPLE OBJECTS PROCESSOR
2: C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
3: C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
4: C
5: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
6: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
7: C WRITTEN BY R. M. SUPNIK
8: C
9: C DECLARATIONS
10: C
11: LOGICAL FUNCTION SOBJS(RI,ARG)
12: IMPLICIT INTEGER (A-Z)
13: LOGICAL QOPEN
14: LOGICAL MOVETO,OPNCLS,LIT
15: LOGICAL QHERE,F
16: #include "parser.h"
17: #include "gamestate.h"
18: #include "state.h"
19: #include "rooms.h"
20: #include "rflag.h"
21: #include "rindex.h"
22: #include "objects.h"
23: #include "oflags.h"
24: #include "oindex.h"
25: #include "clock.h"
26:
27: #include "villians.h"
28: #include "advers.h"
29: #include "verbs.h"
30: #include "flags.h"
31: C
32: C FUNCTIONS AND DATA
33: C
34: QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
35: C SOBJS, PAGE 2
36: C
37: IF(PRSO.GT.220) GO TO 5
38: IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
39: 5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
40: AV=AVEHIC(WINNER)
41: SOBJS=.TRUE.
42: C
43: GO TO (1000,3000,4000,6000,7000,8000,9000,
44: & 13000,14000,16000,17000,
45: & 21000,23000,24000,27000,28000,29000,30000,
46: & 31000,33000,34000,36000,37000,38000,
47: & 41000,42000,43000,44000,46000,
48: & 53000,56000)
49: & RI
50: CALL BUG(6,RI)
51: C
52: C RETURN HERE TO DECLARE FALSE RESULT
53: C
54: 10 SOBJS=.FALSE.
55: RETURN
56: C SOBJS, PAGE 3
57: C
58: C O1-- GUNK FUNCTION
59: C
60: 1000 IF(OCAN(GUNK).EQ.0) GO TO 10
61: C !NOT INSIDE? F
62: CALL NEWSTA(GUNK,122,0,0,0)
63: C !FALLS APART.
64: RETURN
65: C
66: C O2-- TROPHY CASE
67: C
68: 3000 IF(PRSA.NE.TAKEW) GO TO 10
69: C !TAKE?
70: CALL RSPEAK(128)
71: C !CANT.
72: RETURN
73: C
74: C O3-- BOTTLE FUNCTION
75: C
76: 4000 IF(PRSA.NE.THROWW) GO TO 4100
77: C !THROW?
78: CALL NEWSTA(PRSO,129,0,0,0)
79: C !BREAKS.
80: RETURN
81: C
82: 4100 IF(PRSA.NE.MUNGW) GO TO 10
83: C !MUNG?
84: CALL NEWSTA(PRSO,131,0,0,0)
85: C !BREAKS.
86: RETURN
87: C SOBJS, PAGE 4
88: C
89: C O4-- ROPE FUNCTION
90: C
91: 6000 IF(HERE.EQ.DOME) GO TO 6100
92: C !IN DOME?
93: DOMEF=.FALSE.
94: C !NO,
95: IF(PRSA.NE.UNTIEW) GO TO 6050
96: C !UNTIE?
97: CALL RSPEAK(134)
98: C !CANT
99: RETURN
100: C
101: 6050 IF(PRSA.NE.TIEW) GO TO 10
102: C !TIE?
103: CALL RSPEAK(135)
104: C !CANT TIE
105: RETURN
106: C
107: 6100 IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
108: IF(DOMEF) GO TO 6150
109: C !ALREADY TIED?
110: DOMEF=.TRUE.
111: C !NO, TIE IT.
112: OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT)
113: OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT)
114: CALL NEWSTA(ROPE,137,DOME,0,0)
115: RETURN
116: C
117: 6150 CALL RSPEAK(136)
118: C !DUMMY.
119: RETURN
120: C
121: 6200 IF(PRSA.NE.UNTIEW) GO TO 6300
122: C !UNTIE?
123: IF(DOMEF) GO TO 6250
124: C !TIED?
125: CALL RSPEAK(134)
126: C !NO, DUMMY.
127: RETURN
128: C
129: 6250 DOMEF=.FALSE.
130: C !YES, UNTIE IT.
131: OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT))
132: OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT))
133: CALL RSPEAK(139)
134: RETURN
135: C
136: 6300 IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
137: C !DROP & UNTIED?
138: CALL NEWSTA(ROPE,140,MTORC,0,0)
139: C !YES, DROP.
140: RETURN
141: C
142: 6400 IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
143: CALL RSPEAK(141)
144: C !TAKE & TIED.
145: RETURN
146: C
147: C O5-- SWORD FUNCTION
148: C
149: 7000 IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
150: & SWDACT=.TRUE.
151: GO TO 10
152: C
153: C O6-- LANTERN
154: C
155: 8000 IF(PRSA.NE.THROWW) GO TO 8100
156: C !THROW?
157: CALL NEWSTA(LAMP,0,0,0,0)
158: C !KILL LAMP,
159: CALL NEWSTA(BLAMP,142,HERE,0,0)
160: C !REPLACE WITH BROKEN.
161: RETURN
162: C
163: 8100 IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
164: IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
165: GO TO 10
166: C
167: C O7-- RUG FUNCTION
168: C
169: 9000 IF(PRSA.NE.RAISEW) GO TO 9100
170: C !RAISE?
171: CALL RSPEAK(143)
172: C !CANT
173: RETURN
174: C
175: 9100 IF(PRSA.NE.TAKEW) GO TO 9200
176: C !TAKE?
177: CALL RSPEAK(144)
178: C !CANT
179: RETURN
180: C
181: 9200 IF(PRSA.NE.MOVEW) GO TO 9300
182: C !MOVE?
183: CALL RSPEAK(145+ORRUG)
184: ORRUG=1
185: OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
186: RETURN
187: C
188: 9300 IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
189: & QOPEN(DOOR)) GO TO 10
190: CALL RSPEAK(345)
191: RETURN
192: C SOBJS, PAGE 5
193: C
194: C O8-- SKELETON
195: C
196: 13000 I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
197: IF(I.NE.0) CALL RSPEAK(162)
198: C !IF ROBBED, SAY SO.
199: RETURN
200: C
201: C O9-- MIRROR
202: C
203: 14000 IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
204: MROOM=xor(HERE,1)
205: DO 14100 I=1,OLNT
206: C !INTERCHANGE OBJS.
207: IF(OROOM(I).EQ.HERE) OROOM(I)=-1
208: IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
209: IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
210: 14100 CONTINUE
211: F=MOVETO(MROOM,WINNER)
212: CALL RSPEAK(163)
213: C !SHAKE WORLD.
214: RETURN
215: C
216: 14500 IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
217: & (PRSA.NE.EXAMIW)) GO TO 14600
218: I=164
219: C !MIRROR OK.
220: IF(MIRRMF) I=165
221: C !MIRROR DEAD.
222: CALL RSPEAK(I)
223: RETURN
224: C
225: 14600 IF(PRSA.NE.TAKEW) GO TO 14700
226: C !TAKE?
227: CALL RSPEAK(166)
228: C !JOKE.
229: RETURN
230: C
231: 14700 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
232: I=167
233: C !MIRROR BREAKS.
234: IF(MIRRMF) I=168
235: C !MIRROR ALREADY BROKEN.
236: MIRRMF=.TRUE.
237: BADLKF=.TRUE.
238: CALL RSPEAK(I)
239: RETURN
240: C SOBJS, PAGE 6
241: C
242: C O10-- DUMBWAITER
243: C
244: 16000 IF(PRSA.NE.RAISEW) GO TO 16100
245: C !RAISE?
246: IF(CAGETF) GO TO 16400
247: C !ALREADY AT TOP?
248: CALL NEWSTA(TBASK,175,TSHAF,0,0)
249: C !NO, RAISE BASKET.
250: CALL NEWSTA(FBASK,0,BSHAF,0,0)
251: CAGETF=.TRUE.
252: C !AT TOP.
253: RETURN
254: C
255: 16100 IF(PRSA.NE.LOWERW) GO TO 16200
256: C !LOWER?
257: IF(.NOT.CAGETF) GO TO 16400
258: C !ALREADY AT BOTTOM?
259: CALL NEWSTA(TBASK,176,BSHAF,0,0)
260: C !NO, LOWER BASKET.
261: CALL NEWSTA(FBASK,0,TSHAF,0,0)
262: CAGETF=.FALSE.
263: IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
264: C !IF DARK, DIE.
265: RETURN
266: C
267: 16200 IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
268: CALL RSPEAK(130)
269: C !WRONG BASKET.
270: RETURN
271: C
272: 16300 IF(PRSA.NE.TAKEW) GO TO 10
273: C !TAKE?
274: CALL RSPEAK(177)
275: C !JOKE.
276: RETURN
277: C
278: 16400 CALL RSPEAK(125+RND(3))
279: C !DUMMY.
280: RETURN
281: C
282: C O11-- GHOST FUNCTION
283: C
284: 17000 I=178
285: C !ASSUME DIRECT.
286: IF(PRSO.NE.GHOST) I=179
287: C !IF NOT, INDIRECT.
288: CALL RSPEAK(I)
289: RETURN
290: C !SPEAK AND EXIT.
291: C SOBJS, PAGE 7
292: C
293: C O12-- TUBE
294: C
295: 21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
296: CALL RSPEAK(186)
297: C !CANT PUT BACK IN.
298: RETURN
299: C
300: C O13-- CHALICE
301: C
302: 23000 IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
303: & (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
304: & (and(OFLAG2(THIEF),FITEBT).EQ.0).OR.
305: & .NOT. THFACT) GO TO 10
306: CALL RSPEAK(204)
307: C !CANT TAKE.
308: RETURN
309: C
310: C O14-- PAINTING
311: C
312: 24000 IF(PRSA.NE.MUNGW) GO TO 10
313: C !MUNG?
314: CALL RSPEAK(205)
315: C !DESTROY PAINTING.
316: OFVAL(PRSO)=0
317: OTVAL(PRSO)=0
318: ODESC1(PRSO)=207
319: ODESC2(PRSO)=206
320: RETURN
321: C SOBJS, PAGE 8
322: C
323: C O15-- BOLT
324: C
325: 27000 IF(PRSA.NE.TURNW) GO TO 10
326: C !TURN BOLT?
327: IF(PRSI.NE.WRENC) GO TO 27500
328: C !WITH WRENCH?
329: IF(GATEF) GO TO 27100
330: C !PROPER BUTTON PUSHED?
331: CALL RSPEAK(210)
332: C !NO, LOSE.
333: RETURN
334: C
335: 27100 IF(LWTIDF) GO TO 27200
336: C !LOW TIDE NOW?
337: LWTIDF=.TRUE.
338: C !NO, EMPTY DAM.
339: CALL RSPEAK(211)
340: OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT))
341: OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT)
342: RFLAG(RESER)=and(or(RFLAG(RESER),RLAND)
343: & ,not(RWATER+RSEEN))
344: RETURN
345: C
346: 27200 LWTIDF=.FALSE.
347: C !YES, FILL DAM.
348: CALL RSPEAK(212)
349: IF(QHERE(TRUNK,RESER))
350: & OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT))
351: RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND))
352: RETURN
353: C
354: 27500 CALL RSPSUB(299,ODI2)
355: C !NOT WITH THAT.
356: RETURN
357: C
358: C O16-- GRATING
359: C
360: 28000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
361: IF(GRUNLF) GO TO 28200
362: C !UNLOCKED?
363: CALL RSPEAK(214)
364: C !NO, LOCKED.
365: RETURN
366: C
367: 28200 I=215
368: C !UNLOCKED, VIEW FRM CLR.
369: IF(HERE.NE.CLEAR) I=216
370: C !VIEW FROM BELOW.
371: SOBJS=OPNCLS(GRATE,I,885)
372: C !OPEN/CLOSE.
373: RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT))
374: IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT)
375: IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
376: C !IF DARK, DIE.
377: RETURN
378: C
379: C O17-- TRAP DOOR
380: C
381: 29000 IF(HERE.NE.LROOM) GO TO 29100
382: C !FROM LIVING ROOM?
383: SOBJS=OPNCLS(DOOR,218,219)
384: C !OPEN/CLOSE.
385: RETURN
386: C
387: 29100 IF(HERE.NE.CELLA) GO TO 10
388: C !FROM CELLAR?
389: IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
390: CALL RSPEAK(220)
391: C !CANT OPEN CLOSED DOOR.
392: RETURN
393: C
394: 29200 SOBJS=OPNCLS(DOOR,0,22)
395: C !NORMAL OPEN/CLOSE.
396: RETURN
397: C
398: C O18-- DURABLE DOOR
399: C
400: 30000 I=0
401: C !ASSUME NO APPL.
402: IF(PRSA.EQ.OPENW) I=221
403: C !OPEN?
404: IF(PRSA.EQ.BURNW) I=222
405: C !BURN?
406: IF(PRSA.EQ.MUNGW) I=223+RND(3)
407: C !MUNG?
408: IF(I.EQ.0) GO TO 10
409: CALL RSPEAK(I)
410: RETURN
411: C
412: C O19-- MASTER SWITCH
413: C
414: 31000 IF(PRSA.NE.TURNW) GO TO 10
415: C !TURN?
416: IF(PRSI.NE.SCREW) GO TO 31500
417: C !WITH SCREWDRIVER?
418: IF(QOPEN(MACHI)) GO TO 31600
419: C !LID UP?
420: CALL RSPEAK(226)
421: C !NO, ACTIVATE.
422: IF(OCAN(COAL).NE.MACHI) GO TO 31400
423: C !COAL INSIDE?
424: CALL NEWSTA(COAL,0,0,0,0)
425: C !KILL COAL,
426: CALL NEWSTA(DIAMO,0,0,MACHI,0)
427: C !REPLACE WITH DIAMOND.
428: RETURN
429: C
430: 31400 DO 31450 I=1,OLNT
431: C !KILL NONCOAL OBJECTS.
432: IF(OCAN(I).NE.MACHI) GO TO 31450
433: C !INSIDE MACHINE?
434: CALL NEWSTA(I,0,0,0,0)
435: C !KILL OBJECT AND CONTENTS.
436: CALL NEWSTA(GUNK,0,0,MACHI,0)
437: C !REDUCE TO GUNK.
438: 31450 CONTINUE
439: RETURN
440: C
441: 31500 CALL RSPSUB(300,ODI2)
442: C !CANT TURN WITH THAT.
443: RETURN
444: C
445: 31600 CALL RSPEAK(227)
446: C !LID IS UP.
447: RETURN
448: C SOBJS, PAGE 9
449: C
450: C O20-- LEAK
451: C
452: 33000 IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
453: & GO TO 10
454: IF(PRSI.NE.PUTTY) GO TO 33100
455: C !WITH PUTTY?
456: RVMNT=-1
457: C !DISABLE LEAK.
458: CTICK(CEVMNT)=0
459: CALL RSPEAK(577)
460: RETURN
461: C
462: 33100 CALL RSPSUB(301,ODI2)
463: C !CANT WITH THAT.
464: RETURN
465: C
466: C O21-- DROWNING BUTTONS
467: C
468: 34000 IF(PRSA.NE.PUSHW) GO TO 10
469: C !PUSH?
470: GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
471: GO TO 10
472: C !NOT A BUTTON.
473: C
474: 34100 RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT)
475: I=230
476: IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231
477: CALL RSPEAK(I)
478: RETURN
479: C
480: 34200 GATEF=.TRUE.
481: C !RELEASE GATE.
482: CALL RSPEAK(232)
483: RETURN
484: C
485: 34300 GATEF=.FALSE.
486: C !INTERLOCK GATE.
487: CALL RSPEAK(232)
488: RETURN
489: C
490: 34400 IF(RVMNT.NE.0) GO TO 34500
491: C !LEAK ALREADY STARTED?
492: CALL RSPEAK(233)
493: C !NO, START LEAK.
494: RVMNT=1
495: CTICK(CEVMNT)=-1
496: RETURN
497: C
498: 34500 CALL RSPEAK(234)
499: C !BUTTON JAMMED.
500: RETURN
501: C
502: C O22-- INFLATABLE BOAT
503: C
504: 36000 IF(PRSA.NE.INFLAW) GO TO 10
505: C !INFLATE?
506: IF(OROOM(IBOAT).NE.0) GO TO 36100
507: C !IN ROOM?
508: CALL RSPEAK(235)
509: C !NO, JOKE.
510: RETURN
511: C
512: 36100 IF(PRSI.NE.PUMP) GO TO 36200
513: C !WITH PUMP?
514: CALL NEWSTA(IBOAT,0,0,0,0)
515: C !KILL DEFL BOAT,
516: CALL NEWSTA(RBOAT,236,HERE,0,0)
517: C !REPL WITH INF.
518: DEFLAF=.FALSE.
519: RETURN
520: C
521: 36200 I=237
522: C !JOKES.
523: IF(PRSI.NE.LUNGS) I=303
524: CALL RSPSUB(I,ODI2)
525: RETURN
526: C
527: C O23-- DEFLATED BOAT
528: C
529: 37000 IF(PRSA.NE.INFLAW) GO TO 37100
530: C !INFLATE?
531: CALL RSPEAK(238)
532: C !JOKE.
533: RETURN
534: C
535: 37100 IF(PRSA.NE.PLUGW) GO TO 10
536: C !PLUG?
537: IF(PRSI.NE.PUTTY) GO TO 33100
538: C !WITH PUTTY?
539: CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
540: CALL NEWSTA(DBOAT,0,0,0,0)
541: C !KILL DEFL BOAT, REPL.
542: RETURN
543: C SOBJS, PAGE 10
544: C
545: C O24-- RUBBER BOAT
546: C
547: 38000 IF(ARG.NE.0) GO TO 10
548: C !DISMISS READIN, OUT.
549: IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
550: CALL NEWSTA(RBOAT,0,0,0,0)
551: C !KILL INFL BOAT,
552: CALL NEWSTA(DBOAT,240,HERE,0,0)
553: C !REPL WITH DEAD.
554: DEFLAF=.TRUE.
555: RETURN
556: C
557: 38100 IF(PRSA.NE.INFLAW) GO TO 38200
558: C !INFLATE?
559: CALL RSPEAK(367)
560: C !YES, JOKE.
561: RETURN
562: C
563: 38200 IF(PRSA.NE.DEFLAW) GO TO 10
564: C !DEFLATE?
565: IF(AV.EQ.RBOAT) GO TO 38300
566: C !IN BOAT?
567: IF(OROOM(RBOAT).EQ.0) GO TO 38400
568: C !ON GROUND?
569: CALL NEWSTA(RBOAT,0,0,0,0)
570: C !KILL INFL BOAT,
571: CALL NEWSTA(IBOAT,241,HERE,0,0)
572: C !REPL WITH DEFL.
573: DEFLAF=.TRUE.
574: RETURN
575: C
576: 38300 CALL RSPEAK(242)
577: C !IN BOAT.
578: RETURN
579: C
580: 38400 CALL RSPEAK(243)
581: C !NOT ON GROUND.
582: RETURN
583: C
584: C O25-- BRAIDED ROPE
585: C
586: 41000 IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
587: & ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
588: & GO TO 41500
589: BTIEF=PRSI
590: C !RECORD LOCATION.
591: CFLAG(CEVBAL)=.FALSE.
592: C !STALL ASCENT.
593: CALL RSPEAK(248)
594: RETURN
595: C
596: 41500 IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
597: IF(BTIEF.NE.0) GO TO 41600
598: C !TIED UP?
599: CALL RSPEAK(249)
600: C !NO, JOKE.
601: RETURN
602: C
603: 41600 CALL RSPEAK(250)
604: BTIEF=0
605: C !UNTIE.
606: CTICK(CEVBAL)=3
607: C !RESTART CLOCK.
608: CFLAG(CEVBAL)=.TRUE.
609: RETURN
610: C
611: C O26-- SAFE
612: C
613: 42000 I=0
614: C !ASSUME UNPROCESSED.
615: IF(PRSA.EQ.TAKEW) I=251
616: C !TAKE?
617: IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
618: C !OPEN AFTER BLAST?
619: IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
620: C !OPEN BEFORE BLAST?
621: IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
622: C !CLOSE AFTER?
623: IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
624: IF(I.EQ.0) GO TO 10
625: CALL RSPEAK(I)
626: RETURN
627: C
628: C O27-- FUSE
629: C
630: 43000 IF(PRSA.NE.BURNW) GO TO 10
631: C !BURN?
632: CALL RSPEAK(256)
633: CTICK(CEVFUS)=2
634: C !START COUNTDOWN.
635: RETURN
636: C
637: C O28-- GNOME
638: C
639: 44000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
640: IF(OTVAL(PRSO).EQ.0) GO TO 44100
641: C !TREASURE?
642: CALL RSPSUB(257,ODO2)
643: C !YES, GET DOOR.
644: CALL NEWSTA(PRSO,0,0,0,0)
645: CALL NEWSTA(GNOME,0,0,0,0)
646: C !VANISH GNOME.
647: GNODRF=.TRUE.
648: RETURN
649: C
650: 44100 CALL RSPSUB(258,ODO2)
651: C !NO, LOSE OBJECT.
652: CALL NEWSTA(PRSO,0,0,0,0)
653: RETURN
654: C
655: 44500 CALL RSPEAK(259)
656: C !NERVOUS GNOME.
657: IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
658: C !SCHEDULE BYEBYE.
659: GNOMEF=.TRUE.
660: RETURN
661: C
662: C O29-- COKE BOTTLES
663: C
664: 46000 IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
665: CALL NEWSTA(PRSO,262,0,0,0)
666: C !MUNG BOTTLES.
667: RETURN
668: C SOBJS, PAGE 11
669: C
670: C
671: C O30-- ROBOT
672: C
673: 53000 IF(PRSA.NE.GIVEW) GO TO 53200
674: C !GIVE?
675: CALL NEWSTA(PRSO,0,0,0,AROBOT)
676: C !PUT ON ROBOT.
677: CALL RSPSUB(302,ODO2)
678: RETURN
679: C
680: 53200 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
681: CALL NEWSTA(ROBOT,285,0,0,0)
682: C !KILL ROBOT.
683: RETURN
684: C
685: C O31-- GRUE
686: C
687: 56000 IF(PRSA.NE.EXAMIW) GO TO 56100
688: C !EXAMINE?
689: CALL RSPEAK(288)
690: RETURN
691: C
692: 56100 IF(PRSA.NE.FINDW) GO TO 10
693: C !FIND?
694: CALL RSPEAK(289)
695: RETURN
696: C
697: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.