xref: /original-bsd/contrib/dungeon/sobjs.F (revision 1e14295c)
1C SOBJS-	SIMPLE OBJECTS PROCESSOR
2C	OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
3C	MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
4C
5C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
6C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
7C WRITTEN BY R. M. SUPNIK
8C
9C DECLARATIONS
10C
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"
31C
32C FUNCTIONS AND DATA
33C
34	QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
35C SOBJS, PAGE 2
36C
37	IF(PRSO.GT.220) GO TO 5
38	IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
395	IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
40	AV=AVEHIC(WINNER)
41	SOBJS=.TRUE.
42C
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)
51C
52C RETURN HERE TO DECLARE FALSE RESULT
53C
5410	SOBJS=.FALSE.
55	RETURN
56C SOBJS, PAGE 3
57C
58C O1--	GUNK FUNCTION
59C
601000	IF(OCAN(GUNK).EQ.0) GO TO 10
61C						!NOT INSIDE? F
62	CALL NEWSTA(GUNK,122,0,0,0)
63C						!FALLS APART.
64	RETURN
65C
66C O2--	TROPHY CASE
67C
683000	IF(PRSA.NE.TAKEW) GO TO 10
69C						!TAKE?
70	CALL RSPEAK(128)
71C						!CANT.
72	RETURN
73C
74C O3--	BOTTLE FUNCTION
75C
764000	IF(PRSA.NE.THROWW) GO TO 4100
77C						!THROW?
78	CALL NEWSTA(PRSO,129,0,0,0)
79C						!BREAKS.
80	RETURN
81C
824100	IF(PRSA.NE.MUNGW) GO TO 10
83C						!MUNG?
84	CALL NEWSTA(PRSO,131,0,0,0)
85C						!BREAKS.
86	RETURN
87C SOBJS, PAGE 4
88C
89C O4--	ROPE FUNCTION
90C
916000	IF(HERE.EQ.DOME) GO TO 6100
92C						!IN DOME?
93	DOMEF=.FALSE.
94C						!NO,
95	IF(PRSA.NE.UNTIEW) GO TO 6050
96C						!UNTIE?
97	CALL RSPEAK(134)
98C						!CANT
99	RETURN
100C
1016050	IF(PRSA.NE.TIEW) GO TO 10
102C						!TIE?
103	CALL RSPEAK(135)
104C						!CANT TIE
105	RETURN
106C
1076100	IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
108	IF(DOMEF) GO TO 6150
109C						!ALREADY TIED?
110	DOMEF=.TRUE.
111C						!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
116C
1176150	CALL RSPEAK(136)
118C						!DUMMY.
119	RETURN
120C
1216200	IF(PRSA.NE.UNTIEW) GO TO 6300
122C						!UNTIE?
123	IF(DOMEF) GO TO 6250
124C						!TIED?
125	CALL RSPEAK(134)
126C						!NO, DUMMY.
127	RETURN
128C
1296250	DOMEF=.FALSE.
130C						!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
135C
1366300	IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
137C						!DROP & UNTIED?
138	CALL NEWSTA(ROPE,140,MTORC,0,0)
139C						!YES, DROP.
140	RETURN
141C
1426400	IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
143	CALL RSPEAK(141)
144C						!TAKE & TIED.
145	RETURN
146C
147C O5--	SWORD FUNCTION
148C
1497000	IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
150&		SWDACT=.TRUE.
151	GO TO 10
152C
153C O6--	LANTERN
154C
1558000	IF(PRSA.NE.THROWW) GO TO 8100
156C						!THROW?
157	CALL NEWSTA(LAMP,0,0,0,0)
158C						!KILL LAMP,
159	CALL NEWSTA(BLAMP,142,HERE,0,0)
160C						!REPLACE WITH BROKEN.
161	RETURN
162C
1638100	IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
164	IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
165	GO TO 10
166C
167C O7--	RUG FUNCTION
168C
1699000	IF(PRSA.NE.RAISEW) GO TO 9100
170C						!RAISE?
171	CALL RSPEAK(143)
172C						!CANT
173	RETURN
174C
1759100	IF(PRSA.NE.TAKEW) GO TO 9200
176C						!TAKE?
177	CALL RSPEAK(144)
178C						!CANT
179	RETURN
180C
1819200	IF(PRSA.NE.MOVEW) GO TO 9300
182C						!MOVE?
183	CALL RSPEAK(145+ORRUG)
184	ORRUG=1
185	OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
186	RETURN
187C
1889300	IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
189&		QOPEN(DOOR)) GO TO 10
190	CALL RSPEAK(345)
191	RETURN
192C SOBJS, PAGE 5
193C
194C O8--	SKELETON
195C
19613000	I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
197	IF(I.NE.0) CALL RSPEAK(162)
198C						!IF ROBBED, SAY SO.
199	RETURN
200C
201C O9--	MIRROR
202C
20314000	IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
204	MROOM=xor(HERE,1)
205	DO 14100 I=1,OLNT
206C						!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
21014100	CONTINUE
211	F=MOVETO(MROOM,WINNER)
212	CALL RSPEAK(163)
213C						!SHAKE WORLD.
214	RETURN
215C
21614500	IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
217&		(PRSA.NE.EXAMIW)) GO TO 14600
218	I=164
219C						!MIRROR OK.
220	IF(MIRRMF) I=165
221C						!MIRROR DEAD.
222	CALL RSPEAK(I)
223	RETURN
224C
22514600	IF(PRSA.NE.TAKEW) GO TO 14700
226C						!TAKE?
227	CALL RSPEAK(166)
228C						!JOKE.
229	RETURN
230C
23114700	IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
232	I=167
233C						!MIRROR BREAKS.
234	IF(MIRRMF) I=168
235C						!MIRROR ALREADY BROKEN.
236	MIRRMF=.TRUE.
237	BADLKF=.TRUE.
238	CALL RSPEAK(I)
239	RETURN
240C SOBJS, PAGE 6
241C
242C O10--	DUMBWAITER
243C
24416000	IF(PRSA.NE.RAISEW) GO TO 16100
245C						!RAISE?
246	IF(CAGETF) GO TO 16400
247C						!ALREADY AT TOP?
248	CALL NEWSTA(TBASK,175,TSHAF,0,0)
249C						!NO, RAISE BASKET.
250	CALL NEWSTA(FBASK,0,BSHAF,0,0)
251	CAGETF=.TRUE.
252C						!AT TOP.
253	RETURN
254C
25516100	IF(PRSA.NE.LOWERW) GO TO 16200
256C						!LOWER?
257	IF(.NOT.CAGETF) GO TO 16400
258C						!ALREADY AT BOTTOM?
259	CALL NEWSTA(TBASK,176,BSHAF,0,0)
260C						!NO, LOWER BASKET.
261	CALL NEWSTA(FBASK,0,TSHAF,0,0)
262	CAGETF=.FALSE.
263	IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
264C						!IF DARK, DIE.
265	RETURN
266C
26716200	IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
268	CALL RSPEAK(130)
269C						!WRONG BASKET.
270	RETURN
271C
27216300	IF(PRSA.NE.TAKEW) GO TO 10
273C						!TAKE?
274	CALL RSPEAK(177)
275C						!JOKE.
276	RETURN
277C
27816400	CALL RSPEAK(125+RND(3))
279C						!DUMMY.
280	RETURN
281C
282C O11--	GHOST FUNCTION
283C
28417000	I=178
285C						!ASSUME DIRECT.
286	IF(PRSO.NE.GHOST) I=179
287C						!IF NOT, INDIRECT.
288	CALL RSPEAK(I)
289	RETURN
290C						!SPEAK AND EXIT.
291C SOBJS, PAGE 7
292C
293C O12--	TUBE
294C
29521000	IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
296	CALL RSPEAK(186)
297C						!CANT PUT BACK IN.
298	RETURN
299C
300C O13--	CHALICE
301C
30223000	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)
307C						!CANT TAKE.
308	RETURN
309C
310C O14--	PAINTING
311C
31224000	IF(PRSA.NE.MUNGW) GO TO 10
313C						!MUNG?
314	CALL RSPEAK(205)
315C						!DESTROY PAINTING.
316	OFVAL(PRSO)=0
317	OTVAL(PRSO)=0
318	ODESC1(PRSO)=207
319	ODESC2(PRSO)=206
320	RETURN
321C SOBJS, PAGE 8
322C
323C O15--	BOLT
324C
32527000	IF(PRSA.NE.TURNW) GO TO 10
326C						!TURN BOLT?
327	IF(PRSI.NE.WRENC) GO TO 27500
328C						!WITH WRENCH?
329	IF(GATEF) GO TO 27100
330C						!PROPER BUTTON PUSHED?
331	CALL RSPEAK(210)
332C						!NO, LOSE.
333	RETURN
334C
33527100	IF(LWTIDF) GO TO 27200
336C						!LOW TIDE NOW?
337	LWTIDF=.TRUE.
338C						!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
345C
34627200	LWTIDF=.FALSE.
347C						!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
353C
35427500	CALL RSPSUB(299,ODI2)
355C						!NOT WITH THAT.
356	RETURN
357C
358C O16--	GRATING
359C
36028000	IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
361	IF(GRUNLF) GO TO 28200
362C						!UNLOCKED?
363	CALL RSPEAK(214)
364C						!NO, LOCKED.
365	RETURN
366C
36728200	I=215
368C						!UNLOCKED, VIEW FRM CLR.
369	IF(HERE.NE.CLEAR) I=216
370C						!VIEW FROM BELOW.
371	SOBJS=OPNCLS(GRATE,I,885)
372C						!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)
376C						!IF DARK, DIE.
377	RETURN
378C
379C O17--	TRAP DOOR
380C
38129000	IF(HERE.NE.LROOM) GO TO 29100
382C						!FROM LIVING ROOM?
383	SOBJS=OPNCLS(DOOR,218,219)
384C						!OPEN/CLOSE.
385	RETURN
386C
38729100	IF(HERE.NE.CELLA) GO TO 10
388C						!FROM CELLAR?
389	IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
390	CALL RSPEAK(220)
391C						!CANT OPEN CLOSED DOOR.
392	RETURN
393C
39429200	SOBJS=OPNCLS(DOOR,0,22)
395C						!NORMAL OPEN/CLOSE.
396	RETURN
397C
398C O18--	DURABLE DOOR
399C
40030000	I=0
401C						!ASSUME NO APPL.
402	IF(PRSA.EQ.OPENW) I=221
403C						!OPEN?
404	IF(PRSA.EQ.BURNW) I=222
405C						!BURN?
406	IF(PRSA.EQ.MUNGW) I=223+RND(3)
407C						!MUNG?
408	IF(I.EQ.0) GO TO 10
409	CALL RSPEAK(I)
410	RETURN
411C
412C O19--	MASTER SWITCH
413C
41431000	IF(PRSA.NE.TURNW) GO TO 10
415C						!TURN?
416	IF(PRSI.NE.SCREW) GO TO 31500
417C						!WITH SCREWDRIVER?
418	IF(QOPEN(MACHI)) GO TO 31600
419C						!LID UP?
420	CALL RSPEAK(226)
421C						!NO, ACTIVATE.
422	IF(OCAN(COAL).NE.MACHI) GO TO 31400
423C						!COAL INSIDE?
424	CALL NEWSTA(COAL,0,0,0,0)
425C						!KILL COAL,
426	CALL NEWSTA(DIAMO,0,0,MACHI,0)
427C						!REPLACE WITH DIAMOND.
428	RETURN
429C
43031400	DO 31450 I=1,OLNT
431C						!KILL NONCOAL OBJECTS.
432	  IF(OCAN(I).NE.MACHI) GO TO 31450
433C						!INSIDE MACHINE?
434	  CALL NEWSTA(I,0,0,0,0)
435C						!KILL OBJECT AND CONTENTS.
436	  CALL NEWSTA(GUNK,0,0,MACHI,0)
437C						!REDUCE TO GUNK.
43831450	CONTINUE
439	RETURN
440C
44131500	CALL RSPSUB(300,ODI2)
442C						!CANT TURN WITH THAT.
443	RETURN
444C
44531600	CALL RSPEAK(227)
446C						!LID IS UP.
447	RETURN
448C SOBJS, PAGE 9
449C
450C O20--	LEAK
451C
45233000	IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
453&		GO TO 10
454	IF(PRSI.NE.PUTTY) GO TO 33100
455C						!WITH PUTTY?
456	RVMNT=-1
457C						!DISABLE LEAK.
458	CTICK(CEVMNT)=0
459	CALL RSPEAK(577)
460	RETURN
461C
46233100	CALL RSPSUB(301,ODI2)
463C						!CANT WITH THAT.
464	RETURN
465C
466C O21--	DROWNING BUTTONS
467C
46834000	IF(PRSA.NE.PUSHW) GO TO 10
469C						!PUSH?
470	GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
471	GO TO 10
472C						!NOT A BUTTON.
473C
47434100	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
479C
48034200	GATEF=.TRUE.
481C						!RELEASE GATE.
482	CALL RSPEAK(232)
483	RETURN
484C
48534300	GATEF=.FALSE.
486C						!INTERLOCK GATE.
487	CALL RSPEAK(232)
488	RETURN
489C
49034400	IF(RVMNT.NE.0) GO TO 34500
491C						!LEAK ALREADY STARTED?
492	CALL RSPEAK(233)
493C						!NO, START LEAK.
494	RVMNT=1
495	CTICK(CEVMNT)=-1
496	RETURN
497C
49834500	CALL RSPEAK(234)
499C						!BUTTON JAMMED.
500	RETURN
501C
502C O22--	INFLATABLE BOAT
503C
50436000	IF(PRSA.NE.INFLAW) GO TO 10
505C						!INFLATE?
506	IF(OROOM(IBOAT).NE.0) GO TO 36100
507C						!IN ROOM?
508	CALL RSPEAK(235)
509C						!NO, JOKE.
510	RETURN
511C
51236100	IF(PRSI.NE.PUMP) GO TO 36200
513C						!WITH PUMP?
514	CALL NEWSTA(IBOAT,0,0,0,0)
515C						!KILL DEFL BOAT,
516	CALL NEWSTA(RBOAT,236,HERE,0,0)
517C						!REPL WITH INF.
518	DEFLAF=.FALSE.
519	RETURN
520C
52136200	I=237
522C						!JOKES.
523	IF(PRSI.NE.LUNGS) I=303
524	CALL RSPSUB(I,ODI2)
525	RETURN
526C
527C O23--	DEFLATED BOAT
528C
52937000	IF(PRSA.NE.INFLAW) GO TO 37100
530C						!INFLATE?
531	CALL RSPEAK(238)
532C						!JOKE.
533	RETURN
534C
53537100	IF(PRSA.NE.PLUGW) GO TO 10
536C						!PLUG?
537	IF(PRSI.NE.PUTTY) GO TO 33100
538C						!WITH PUTTY?
539	CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
540	CALL NEWSTA(DBOAT,0,0,0,0)
541C						!KILL DEFL BOAT, REPL.
542	RETURN
543C SOBJS, PAGE 10
544C
545C O24--	RUBBER BOAT
546C
54738000	IF(ARG.NE.0) GO TO 10
548C						!DISMISS READIN, OUT.
549	IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
550	CALL NEWSTA(RBOAT,0,0,0,0)
551C						!KILL INFL BOAT,
552	CALL NEWSTA(DBOAT,240,HERE,0,0)
553C						!REPL WITH DEAD.
554	DEFLAF=.TRUE.
555	RETURN
556C
55738100	IF(PRSA.NE.INFLAW) GO TO 38200
558C						!INFLATE?
559	CALL RSPEAK(367)
560C						!YES, JOKE.
561	RETURN
562C
56338200	IF(PRSA.NE.DEFLAW) GO TO 10
564C						!DEFLATE?
565	IF(AV.EQ.RBOAT) GO TO 38300
566C						!IN BOAT?
567	IF(OROOM(RBOAT).EQ.0) GO TO 38400
568C						!ON GROUND?
569	CALL NEWSTA(RBOAT,0,0,0,0)
570C						!KILL INFL BOAT,
571	CALL NEWSTA(IBOAT,241,HERE,0,0)
572C						!REPL WITH DEFL.
573	DEFLAF=.TRUE.
574	RETURN
575C
57638300	CALL RSPEAK(242)
577C						!IN BOAT.
578	RETURN
579C
58038400	CALL RSPEAK(243)
581C						!NOT ON GROUND.
582	RETURN
583C
584C O25--	BRAIDED ROPE
585C
58641000	IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
587&		((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
588&		GO TO 41500
589	BTIEF=PRSI
590C						!RECORD LOCATION.
591	CFLAG(CEVBAL)=.FALSE.
592C						!STALL ASCENT.
593	CALL RSPEAK(248)
594	RETURN
595C
59641500	IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
597	IF(BTIEF.NE.0) GO TO 41600
598C						!TIED UP?
599	CALL RSPEAK(249)
600C						!NO, JOKE.
601	RETURN
602C
60341600	CALL RSPEAK(250)
604	BTIEF=0
605C						!UNTIE.
606	CTICK(CEVBAL)=3
607C						!RESTART CLOCK.
608	CFLAG(CEVBAL)=.TRUE.
609	RETURN
610C
611C O26--	SAFE
612C
61342000	I=0
614C						!ASSUME UNPROCESSED.
615	IF(PRSA.EQ.TAKEW) I=251
616C						!TAKE?
617	IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
618C						!OPEN AFTER BLAST?
619	IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
620C						!OPEN BEFORE BLAST?
621	IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
622C						!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
627C
628C O27--	FUSE
629C
63043000	IF(PRSA.NE.BURNW) GO TO 10
631C						!BURN?
632	CALL RSPEAK(256)
633	CTICK(CEVFUS)=2
634C						!START COUNTDOWN.
635	RETURN
636C
637C O28--	GNOME
638C
63944000	IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
640	IF(OTVAL(PRSO).EQ.0) GO TO 44100
641C						!TREASURE?
642	CALL RSPSUB(257,ODO2)
643C						!YES, GET DOOR.
644	CALL NEWSTA(PRSO,0,0,0,0)
645	CALL NEWSTA(GNOME,0,0,0,0)
646C						!VANISH GNOME.
647	GNODRF=.TRUE.
648	RETURN
649C
65044100	CALL RSPSUB(258,ODO2)
651C						!NO, LOSE OBJECT.
652	CALL NEWSTA(PRSO,0,0,0,0)
653	RETURN
654C
65544500	CALL RSPEAK(259)
656C						!NERVOUS GNOME.
657	IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
658C						!SCHEDULE BYEBYE.
659	GNOMEF=.TRUE.
660	RETURN
661C
662C O29--	COKE BOTTLES
663C
66446000	IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
665	CALL NEWSTA(PRSO,262,0,0,0)
666C						!MUNG BOTTLES.
667	RETURN
668C SOBJS, PAGE 11
669C
670C
671C O30--	ROBOT
672C
67353000	IF(PRSA.NE.GIVEW) GO TO 53200
674C						!GIVE?
675	CALL NEWSTA(PRSO,0,0,0,AROBOT)
676C						!PUT ON ROBOT.
677	CALL RSPSUB(302,ODO2)
678	RETURN
679C
68053200	IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
681	CALL NEWSTA(ROBOT,285,0,0,0)
682C						!KILL ROBOT.
683	RETURN
684C
685C O31--	GRUE
686C
68756000	IF(PRSA.NE.EXAMIW) GO TO 56100
688C						!EXAMINE?
689	CALL RSPEAK(288)
690	RETURN
691C
69256100	IF(PRSA.NE.FINDW) GO TO 10
693C						!FIND?
694	CALL RSPEAK(289)
695	RETURN
696C
697	END
698