Commit | Line | Data |
---|---|---|
8b22683c KB |
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 |