1
2
3
4
5
6
7
8
9
10
11 bug
12
13
14 bug
15
16
17
18
19
20
21
22
23 LOGICAL VAPPLI(RI)
24 IMPLICIT INTEGER (A-Z)
25 %include dparam
26 PARAMETER (MXNOP=39,MXJOKE=64,MXSMP=99)
27 PARAMETER (NUMANS=16)
28 LOGICAL LIT,OBJACT,WASLIT
29 LOGICAL QEMPTY,RMDESC,CLOCKD
30 LOGICAL MOVETO,YESNO
31 LOGICAL QOPEN,EDIBLE,DRKBLE
32 LOGICAL TAKE,PUT,DROP,WALK
33 LOGICAL QHERE,FINDXT,OAPPLI,F
34 INTEGER JOKES(25),ANSWER(NUMANS)
35 CHARACTER*12 ANSSTR(NUMANS)
36 CHARACTER*(WRDLNT) PW(2),CH,CH2
37
38
39
40
41 QOPEN(R)=AND(OFLAG2(R),OPENBT).NE.0
42
43 EDIBLE(R)=AND(OFLAG1(R),FOODBT).NE.0
44
45 DRKBLE(R)=AND(OFLAG1(R),DRNKBT).NE.0
46 DATA JOKES/4,5,3,304,305,306,307,308,309,310,311,312,
47 & 313,5314,5319,324,325,883,884,120,120,0,0,0,0/
48 DATA ANSWER/0,1,2,2,3,4,4,4,4,4,5,5,5,6,7,7/
49 DATA ANSSTR/'TEMPLE','FOREST','30003','30,003','FLASK','RUB',
50 & 'FONDLE','CARESS','FEEL','TOUCH','BONES','BODY',
51 & 'SKELETON','RUSTY KNIFE','NONE','NOWHERE'/
52
53
54
55 VAPPLI=.TRUE.
56 ODO2=0
57 ODI2=0
58 IF((PRSO.NE.0).AND.(PRSO.LE.OMAX)) ODO2=ODESC2(PRSO)
59 IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
60 AV=AVEHIC(WINNER)
61 RMK=372+RND(6)
62 IF(RI.EQ.0) GO TO 10
63 IF(RI.LE.MXNOP) RETURN
64 IF(RI.LE.MXJOKE) GO TO 20
65 IF(RI.LE.MXSMP) GO TO 30
66 WASLIT=LIT(HERE)
67 GO TO (
68 & 500, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000,
69 & 10000,11000,12000,13000,14000,15000,16000,17000,18000,19000,
70 & 20000,21000,22000,23000,24000,25000,26000,27000,28000,29000,
71 & 30000,31000,32000,33000,34000,35000,36000,37000,38000,39000,
72 & 40000,41000,42000,43000,44000,45000,46000,47000,48000,49000,
73 & 50000,51000,52000,53000,54000,55000,56000,57000,58000,59000,
74 & 60000,61000,62000,63000,64000,65000,66000,67000,68000,69000),
75 & (RI-MXSMP)
76 CALL BUG(7,RI)
77
78
79
80 10 VAPPLI=.FALSE.
81 RETURN
82
83
84
85
86 20 I=JOKES(RI-MXNOP)
87 J=I/1000
88 IF(J.NE.0) I=MOD(I,1000)+RND(J)
89 CALL RSPEAK(I)
90 RETURN
91
92
93
94 30 GO TO (65001,66001,67001,68001,69001,
95 & 70000,71000,72000,73000,74000,75000,76000,77000,78000,79000,
96 & 80000,81000,82000,83000,84000,85000,86000,87000,88000,89000,
97 & 90000,91000,92000,93000,94000,95000,96000,97000),
98 & (RI-MXJOKE)
99 CALL BUG(7,RI)
100
101
102
103 50 IF(WASLIT.AND..NOT.LIT(HERE)) CALL RSPEAK(406)
104 RETURN
105
106
107
108
109
110 500 IF(LIT(HERE)) GO TO 600
111 CALL RSPEAK(356)
112 RETURN
113
114 600 IF(PRSI.EQ.0) GO TO 700
115
116 IF(AND(OFLAG1(PRSI),TRANBT).NE.0) GO TO 700
117 CALL RSPSUB(357,ODI2)
118 RETURN
119
120 700 IF(OBJACT(X)) RETURN
121
122 IF(AND(OFLAG1(PRSO),READBT).NE.0) GO TO 800
123 CALL RSPSUB(358,ODO2)
124 RETURN
125
126 800 CALL RSPEAK(OREAD(PRSO))
127 RETURN
128
129
130
131 1000 IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2)
132 RETURN
133
134
135
136
137 2000 IF(AND(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 2100
138 CALL RSPSUB(301,ODI2)
139 RETURN
140
141 2100 IF(.NOT.OBJACT(X)) CALL RSPEAK(368)
142 RETURN
143
144
145
146 3000 IF(.NOT.OBJACT(X)) CALL RSPEAK(369)
147 RETURN
148
149
150
151
152
153
154 4000 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) GO TO 4100
155 CALL RSPEAK(552+RND(6))
156 RETURN
157
158 4100 IF(.NOT.OBJACT(X)) CALL RSPSUB(370,ODO2)
159 RETURN
160
161
162
163 5000 F=OBJACT(X)
164 RETURN
165
166
167
168 6000 IF(.NOT.OBJACT(X)) CALL RSPEAK(371)
169 RETURN
170
171
172
173 7000 IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK)
174 RETURN
175
176
177
178 8000 IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK)
179 RETURN
180
181
182
183 9000 CONTINUE
184 10000 IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK)
185 RETURN
186
187
188
189 11000 IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK)
190 RETURN
191
192
193
194 12000 IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK)
195 RETURN
196
197
198
199
200
201 13000 IF(OBJACT(X)) RETURN
202 I=383
203
204 IF(AND(OFLAG2(PRSO),TIEBT).EQ.0) I=384
205 CALL RSPEAK(I)
206 RETURN
207
208
209
210
211 14000 IF(AND(OFLAG2(PRSO),TIEBT).NE.0) GO TO 14100
212 CALL RSPEAK(385)
213 RETURN
214
215 14100 IF(OBJACT(X)) RETURN
216 I=386
217 IF(PRSI.EQ.OPLAY) I=919
218 CALL RSPSUB(386,ODO2)
219 RETURN
220
221
222
223
224 15000 IF(AND(OFLAG2(PRSI),TIEBT).NE.0) GO TO 15100
225 CALL RSPSUB(387,ODO2)
226 RETURN
227
228 15100 I=388
229
230 IF(AND(OFLAG2(PRSO),VILLBT).EQ.0) I=389
231 CALL RSPSUB(I,ODO2)
232 RETURN
233
234
235
236
237 16000 IF(AND(OFLAG1(PRSO),TURNBT).NE.0) GO TO 16100
238 CALL RSPEAK(390)
239 RETURN
240
241
242 16100 IF(AND(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 16200
243 CALL RSPSUB(391,ODI2)
244 RETURN
245
246 16200 VAPPLI=OBJACT(X)
247 RETURN
248
249
250
251 17000 PRSA=INFLAW
252 PRSI=LUNGS
253 GO TO 2000
254
255
256
257
258
259 18000 IF(OBJACT(X)) RETURN
260 I=394
261
262 IF(AND(OFLAG1(PRSO),DOORBT).EQ.0) I=395
263 CALL RSPSUB(I,ODO2)
264 RETURN
265
266
267
268 19000 IF(PRSO.NE.0) GO TO 20500
269 VAPPLI=RMDESC(3)
270 RETURN
271
272
273
274 20000 IF(PRSO.NE.0) GO TO 20500
275 VAPPLI=RMDESC(0)
276 RETURN
277
278 20500 IF(OBJACT(X)) RETURN
279 I=OREAD(PRSO)
280 IF(I.NE.0) CALL RSPEAK(I)
281 IF(I.EQ.0) CALL RSPSUB(429,ODO2)
282 PRSA=FOOW
283 RETURN
284
285
286
287 21000 IF(OBJACT(X)) RETURN
288 IF(PRSO.EQ.GWATE) GO TO 10
289
290 IF(AND(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 21100
291 CALL RSPEAK(371)
292 RETURN
293
294 21100 IF(PRSO.NE.AV) GO TO 21150
295 CALL RSPEAK(672)
296 RETURN
297
298
299 21150 IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 21200
300 CALL RSPEAK(923)
301 RETURN
302
303 21200 IF(OADV(PRSO).EQ.WINNER) GO TO 21250
304 CALL RSPEAK(527)
305 RETURN
306
307 21250 IF(QEMPTY(PRSO)) GO TO 10
308 IF(QOPEN(PRSO)) GO TO 21300
309 CALL RSPSUB(396,ODO2)
310 RETURN
311
312 21300 CALL RSPSUB(397,ODO2)
313 DO 21500 I=1,OLNT
314 IF(OCAN(I).NE.PRSO) GO TO 21500
315
316 OFLAG2(I)=OR(OFLAG2(I),TCHBT)
317 IF(AV.EQ.0) GO TO 21400
318 CALL NEWSTA(I,0,0,AV,0)
319 GO TO 21500
320
321 21400 CALL NEWSTA(I,0,HERE,0,0)
322 IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0)
323 21500 CONTINUE
324 RETURN
325
326
327
328
329
330 22000 IF(.NOT.QHERE(PRSO,HERE)) GO TO 22100
331 IF(OBJACT(X)) RETURN
332 I=399
333
334 IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) I=887
335 CALL RSPSUB(I,ODO2)
336 RETURN
337
338 22100 CALL RSPEAK(398)
339 RETURN
340
341
342
343 23000 IF(OBJACT(X)) RETURN
344
345
346 IF((AND(OFLAG1(PRSO),LITEBT).NE.0).AND.
347 & (OADV(PRSO).EQ.WINNER)) GO TO 23100
348 CALL RSPEAK(400)
349 RETURN
350
351
352 23100 IF(AND(OFLAG1(PRSO),ONBT).EQ.0) GO TO 23200
353 CALL RSPEAK(401)
354 RETURN
355
356
357 23200 OFLAG1(PRSO)=OR(OFLAG1(PRSO),ONBT)
358 CALL RSPSUB(404,ODO2)
359 RETURN
360
361
362
363 24000 IF(OBJACT(X)) RETURN
364
365
366 IF((AND(OFLAG1(PRSO),LITEBT).NE.0).AND.
367 & (OADV(PRSO).EQ.WINNER)) GO TO 24100
368 CALL RSPEAK(402)
369 RETURN
370
371
372 24100 IF(AND(OFLAG1(PRSO),ONBT).NE.0) GO TO 24200
373 CALL RSPEAK(403)
374 RETURN
375
376
377 24200 OFLAG1(PRSO)=AND(OFLAG1(PRSO), COMPL(ONBT))
378 CALL RSPSUB(405,ODO2)
379 GO TO 50
380
381
382
383 25000 IF(OBJACT(X)) RETURN
384
385 IF(AND(OFLAG1(PRSO),DOORBT).NE.0) GO TO 25150
386
387 IF(AND(OFLAG1(PRSO),CONTBT).NE.0) GO TO 25100
388 25050 CALL RSPSUB(407,ODO2)
389 RETURN
390
391 25100 IF(OCAPAC(PRSO).NE.0) GO TO 25200
392 25150 CALL RSPSUB(408,ODO2)
393 RETURN
394
395 25200 IF(.NOT.QOPEN(PRSO)) GO TO 25225
396 CALL RSPEAK(412)
397 RETURN
398
399
400 25225 OFLAG2(PRSO)=OR(OFLAG2(PRSO),OPENBT)
401
402
403 IF((AND(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO))
404 & GO TO 25300
405 CALL PRINCO(PRSO,410,.FALSE.)
406 RETURN
407
408 25300 CALL RSPEAK(409)
409 RETURN
410
411
412
413 26000 IF(OBJACT(X)) RETURN
414
415 IF(AND(OFLAG1(PRSO),DOORBT).NE.0) GO TO 26050
416
417 IF(AND(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 25050
418 IF(OCAPAC(PRSO).NE.0) GO TO 26100
419 26050 CALL RSPSUB(411,ODO2)
420 RETURN
421
422 26100 IF(QOPEN(PRSO)) GO TO 26200
423 CALL RSPEAK(413)
424 RETURN
425
426
427 26200 OFLAG2(PRSO)=AND(OFLAG2(PRSO), COMPL(OPENBT))
428 CALL RSPEAK(414)
429 GO TO 50
430
431
432
433
434
435 27000 IF(OBJACT(X)) RETURN
436 I=415
437 IF(QHERE(PRSO,HERE)) GO TO 27200
438 I=416
439 IF(OADV(PRSO).EQ.WINNER) GO TO 27200
440 J=OCAN(PRSO)
441 IF(J.EQ.0) GO TO 10
442
443
444
445 IF(((AND(OFLAG1(J),TRANBT).EQ.0).AND.
446 & (.NOT.QOPEN(J).OR.(AND(OFLAG1(J),(DOORBT+CONTBT)).EQ.0))))
447 & GO TO 10
448 I=417
449 IF(QHERE(J,HERE)) GO TO 27100
450 I=418
451 IF(OADV(J).NE.WINNER) GO TO 10
452 27100 CALL RSPSUB(I,ODESC2(J))
453 RETURN
454
455 27200 CALL RSPSUB(I,ODO2)
456 RETURN
457
458
459
460 28000 CALL RSPEAK(419)
461 DO 28100 I=1,3
462 IF(CLOCKD(X)) RETURN
463 IF(.NOT.DEADF) CALL FIGHTD
464 IF(PRSCON.EQ.0) RETURN
465 28100 CONTINUE
466 RETURN
467
468
469
470
471 29000 CONTINUE
472 59000 IF(OBJACT(X)) RETURN
473
474 IF(AND(OFLAG1(PRSO),TURNBT).NE.0) GO TO 59100
475 CALL RSPEAK(390)
476 RETURN
477
478 59100 CALL RSPSUB(663,ODO2)
479 RETURN
480
481
482
483
484 30000 IF(AND(OFLAG2(PRSO),VEHBT).NE.0) GO TO 30100
485 CALL RSPSUB(421,ODO2)
486 PRSCON=0
487 RETURN
488
489 30100 IF(QHERE(PRSO,HERE)) GO TO 30200
490 CALL RSPSUB(420,ODO2)
491 PRSCON=0
492 RETURN
493
494 30200 IF(AV.EQ.0) GO TO 30300
495 CALL RSPSUB(422,ODO2)
496 PRSCON=0
497 RETURN
498
499 30300 IF(OBJACT(X)) RETURN
500 CALL RSPSUB(423,ODO2)
501 AVEHIC(WINNER)=PRSO
502 IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,0,PRSO,0)
503 RETURN
504
505
506
507 31000 IF(AV.EQ.PRSO) GO TO 31100
508 CALL RSPEAK(424)
509 PRSCON=0
510 RETURN
511
512 31100 IF(OBJACT(X)) RETURN
513
514 IF(AND(RFLAG(HERE),RLAND).NE.0) GO TO 31200
515 CALL RSPEAK(425)
516 PRSCON=0
517 RETURN
518
519 31200 AVEHIC(WINNER)=0
520 CALL RSPEAK(426)
521 IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0)
522 RETURN
523
524
525
526 32000 VAPPLI=TAKE(.TRUE.)
527 RETURN
528
529
530
531 33000 CALL INVENT(WINNER)
532 RETURN
533
534
535
536
537
538 34000 IF(PRSI.NE.0) GO TO 34050
539
540 IF(AND(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 34025
541 CALL RSPEAK(516)
542 PRSWON=.FALSE.
543 CALL ORPHAN(-1,ACT,PREP1,PRSO,2,' ',0,0)
544 GO TO 10
545
546 34025 PRSI=GWATE
547 34050 PRSA=PUTW
548 I=PRSO
549 PRSO=PRSI
550 PRSI=I
551 VAPPLI=PUT(.TRUE.)
552 RETURN
553
554
555
556 35000 CONTINUE
557 36000 IF(OBJACT(X)) RETURN
558 IF(PRSO.EQ.GWATE) GO TO 36500
559 IF(.NOT.EDIBLE(PRSO)) GO TO 36400
560 IF(OADV(PRSO).EQ.WINNER) GO TO 36200
561 36100 CALL RSPSUB(454,ODO2)
562 RETURN
563
564 36200 IF(PRSA.EQ.DRINKW) GO TO 36300
565 CALL NEWSTA(PRSO,455,0,0,0)
566 RETURN
567
568 36300 CALL RSPEAK(456)
569 RETURN
570
571 36400 IF(.NOT.DRKBLE(PRSO)) GO TO 36600
572 IF(OCAN(PRSO).EQ.0) GO TO 36100
573 IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 36100
574 IF(QOPEN(OCAN(PRSO))) GO TO 36500
575 CALL RSPEAK(457)
576 RETURN
577
578 36500 CALL NEWSTA(PRSO,458,0,0,0)
579 RETURN
580
581 36600 CALL RSPSUB(453,ODO2)
582 RETURN
583
584
585
586
587
588 37000 IF(AND(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE.
589 & (FLAMBT+LITEBT+ONBT)) GO TO 37600
590 IF(OBJACT(X)) RETURN
591
592 IF(AND(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 37500
593 IF(OADV(PRSO).EQ.WINNER) GO TO 37400
594 IF(QHERE(PRSO,HERE)) GO TO 37200
595 J=OCAN(PRSO)
596 IF(J.EQ.0) GO TO 37100
597 IF(.NOT.QOPEN(J)) GO TO 37100
598 IF(J.EQ.RECEP) GO TO 37300
599 IF(OADV(J).EQ.WINNER) GO TO 37400
600 IF(QHERE(J,HERE)) GO TO 37200
601 37100 CALL RSPEAK(461)
602 RETURN
603
604 37200 CALL RSPSUB(462,ODO2)
605 CALL NEWSTA(PRSO,0,0,0,0)
606 RETURN
607
608 37300 VAPPLI=OAPPLI(OACTIO(BALLO),0)
609 RETURN
610
611 37400 CALL RSPSUB(459,ODO2)
612 CALL JIGSUP(460)
613 RETURN
614
615 37500 CALL RSPSUB(463,ODO2)
616 RETURN
617
618 37600 CALL RSPSUB(301,ODI2)
619 RETURN
620
621
622
623
624
625 38000 I=466
626
627 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) GO TO 41100
628 IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK)
629 RETURN
630
631
632
633 39000 I=467
634 GO TO 41100
635
636
637
638 40000 J=PRSO
639 PRSO=PRSI
640 PRSI=J
641 J=ODO2
642 ODO2=ODI2
643 ODI2=J
644 PRSA=ATTACW
645
646
647
648 41000 I=468
649
650
651
652 41100 IF(PRSO.NE.0) GO TO 41200
653 CALL RSPEAK(469)
654 RETURN
655
656 41200 IF(OBJACT(X)) RETURN
657
658 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) GO TO 41300
659
660
661 IF(AND(OFLAG1(PRSO),VICTBT).EQ.0)
662 & CALL RSPSUB(470,ODO2)
663 RETURN
664
665 41300 J=471
666 IF(PRSI.EQ.0) GO TO 41500
667
668 IF(AND(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 41400
669 MELEE=1
670 IF(PRSI.NE.SWORD) MELEE=2
671 I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0)
672 RETURN
673
674 41400 J=472
675 41500 CALL RSPSB2(I,ODO2,J)
676 RETURN
677
678
679
680
681
682 42000 VAPPLI=WALK(X)
683 RETURN
684
685
686
687 43000 CALL RSPEAK(603)
688 PRSCON=0
689 RETURN
690
691
692
693 44000 VAPPLI=PUT(.TRUE.)
694 RETURN
695
696
697
698 45000 CONTINUE
699 48000 VAPPLI=DROP(.TRUE.)
700 RETURN
701
702
703
704 46000 IF(OADV(PRSO).EQ.WINNER) GO TO 46100
705 X=OCAN(PRSO)
706 IF(X.EQ.0) GO TO 46200
707 IF(.NOT.QOPEN(X)) GO TO 46200
708 IF(OADV(X).NE.WINNER) GO TO 46200
709 46100 VAPPLI=OBJACT(X)
710 RETURN
711
712 46200 CALL RSPEAK(527)
713 RETURN
714
715
716
717 47000 IF(PRSO.EQ.WATER) GO TO 47100
718 CALL RSPEAK(1075)
719 RETURN
720
721 47100 IF(PRSI.EQ.0) GO TO 48000
722 PRSA=PUTW
723 VAPPLI=PUT(.TRUE.)
724 RETURN
725
726
727
728
729 49000 IF(AND(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 49100
730 CALL RSPEAK(828)
731 RETURN
732
733 49100 CALL SAVEGM
734 PRSWON=.FALSE.
735 PRSCON=0
736 RETURN
737
738
739
740
741 50000 IF(AND(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 50100
742 CALL RSPEAK(829)
743 RETURN
744
745 50100 CALL RSTRGM
746 PRSWON=.FALSE.
747 PRSCON=0
748 RETURN
749
750
751
752
753
754 51000 IF(PRSO.NE.0) GO TO 51100
755 CALL RSPEAK(346+RND(4))
756 RETURN
757
758 51100 IF(PRSO.NE.AVIAT) GO TO 51200
759 CALL RSPEAK(350)
760 RETURN
761
762 51200 IF(PRSO.NE.SAILO) GO TO 51300
763 HS=HS+1
764 I=351
765 IF(MOD(HS,10).EQ.0) I=352
766 IF(MOD(HS,20).EQ.0) I=353
767 CALL RSPEAK(I)
768 RETURN
769
770 51300 IF(OBJACT(X)) RETURN
771 I=354
772
773 IF(AND(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355
774 CALL RSPSUB(I,ODO2)
775 RETURN
776
777
778
779 52000 IF(OBJACT(X)) RETURN
780
781 IF(AND(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 52300
782 IF(.NOT.QOPEN(PRSO)) GO TO 52200
783 CALL RSPSUB(628,ODO2)
784 RETURN
785
786 52200 CALL RSPSUB(525,ODO2)
787 RETURN
788
789
790 52300 IF(AND(OFLAG1(PRSO),CONTBT).NE.0) GO TO 52500
791 IF(QOPEN(PRSO)) GO TO 52400
792 CALL RSPSUB(630,ODO2)
793 RETURN
794
795 52400 IF(.NOT.QEMPTY(PRSO)) GO TO 52700
796 CALL RSPSUB(1054,ODO2)
797 RETURN
798
799
800
801 52500 IF(QOPEN(PRSO).OR.(AND(OFLAG1(PRSO),TRANBT).NE.0))
802 & GO TO 52600
803 CALL RSPSUB(525,ODO2)
804 RETURN
805
806 52600 IF(QEMPTY(PRSO)) GO TO 52800
807 52700 CALL PRINCO(PRSO,573,.TRUE.)
808 RETURN
809
810 52800 CALL RSPSUB(629,ODO2)
811 RETURN
812
813
814
815
816
817 53000 IF(.NOT.OBJACT(X)) CALL RSPEAK(631)
818 RETURN
819
820
821
822 54000 IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER))
823 & GO TO 54100
824 CALL RSPEAK(632)
825 RETURN
826
827 54100 PRSI=PUMP
828 PRSA=INFLAW
829 GO TO 2000
830
831
832
833 55000 IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2)
834 RETURN
835
836
837
838
839
840 56000 CONTINUE
841 57000 CONTINUE
842 58000 IF(OBJACT(X)) RETURN
843 I=XUP
844 IF(PRSA.EQ.CLMBDW) I=XDOWN
845
846 F=AND(OFLAG2(PRSO),CLMBBT).NE.0
847 IF(F.AND.FINDXT(I,HERE)) GO TO 58500
848 I=657
849 IF(F) I=524
850 IF(.NOT.F .AND.((PRSO.EQ.WALL).OR.(PRSO.EQ.GRWAL).OR.
851 & ((PRSO.GE.WNORT).AND.(PRSO.LE.WNORT+3))))
852 & I=656
853 CALL RSPEAK(I)
854 RETURN
855
856 58500 PRSA=WALKW
857 PRSO=I
858 GO TO 42000
859
860
861
862
863
864 60000 IF(PRSO.NE.WATER) GO TO 60500
865 IF(OBJACT(X)) RETURN
866 CALL NEWSTA(WATER,0,0,0,0)
867 IF(OCAN(PRSI).NE.RECEP) GO TO 60100
868 CALL RSPSUB(977,ODI2)
869 RETURN
870
871
872 60100 IF(AND(OFLAG1(PRSI),(LITEBT+FLAMBT+ONBT)).NE.
873 & (LITEBT+FLAMBT+ONBT)) GO TO 60300
874 IF(PRSI.NE.TORCH) GO TO 60200
875 CALL RSPEAK(978)
876 RETURN
877
878
879 60200 OFLAG1(PRSI)=AND(OFLAG1(PRSI),COMPL(ONBT))
880 CALL RSPSUB(979,ODI2)
881 IF(PRSI.EQ.CANDL) CFLAG(CEVCND)=.FALSE.
882 IF(PRSI.EQ.MATCH) CTICK(CEVMAT)=0
883 GO TO 50
884
885 60300 CALL RSPSUB(980,ODI2)
886 RETURN
887
888 60500 CALL RSPEAK(981)
889 RETURN
890
891
892
893 61000 IF(OBJACT(X)) RETURN
894 I=1037
895
896 IF(AND(OFLAG1(PRSO),DOORBT).NE.0) I=982
897 CALL RSPEAK(I)
898 RETURN
899
900
901
902 62000 IF(((PRSO.EQ.BROPE).AND.(BTIEF.NE.0)).OR.
903 & ((PRSO.EQ.ROPE).AND.(TTIE.EQ.PRSI)).OR.
904 & ((PRSO.EQ.ROPE).AND.(PRSI.EQ.RAILI).AND.DOMEF))
905 & GO TO 62100
906 CALL RSPEAK(1070)
907 RETURN
908
909 62100 PRSA=UNTIEW
910 GO TO 13000
911
912
913
914
915
916
917 63000 IF(PRSO.NE.GWISH) GO TO 10
918 69000 IF(HERE.NE.BWELL) GO TO 63100
919 IF(OROOM(BAGCO).EQ.HERE) GO TO 63200
920 IF(OROOM(ZORKM).EQ.HERE) GO TO 63300
921 63100 CALL RSPEAK(937)
922 RETURN
923
924 63200 CALL NEWSTA(BAGCO,938,0,0,0)
925 RETURN
926
927 63300 CALL NEWSTA(ZORKM,938,0,0,0)
928 RETURN
929
930
931
932 64000 IF(PRSI.NE.PUTTY) GO TO 64100
933 IF(OBJACT(X)) RETURN
934 CALL RSPEAK(904)
935 RETURN
936
937 64100 CALL RSPEAK(905)
938 RETURN
939
940
941
942 65000 IF(PRSO.NE.STRAD) GO TO 65200
943 IF(PRSI.EQ.0) GO TO 65100
944
945 IF(AND(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 65100
946 OTVAL(STRAD)=0
947 CALL RSPEAK(933)
948 RETURN
949
950 65100 CALL RSPEAK(934)
951 RETURN
952
953
954 65200 IF(AND(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 10
955 CALL RSPSUB(935,ODO2)
956 CALL JIGSUP(0)
957 RETURN
958
959
960
961 66000 IF(OBJACT(X)) RETURN
962 I=940
963
964 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) I=941
965 CALL RSPSUB(I,ODO2)
966 RETURN
967
968
969
970
971
972 67000 PRSA=WALKW
973 PRSO=XENTER
974 GO TO 42000
975
976
977
978 68000 PRSA=WALKW
979 PRSO=XEXIT
980 GO TO 42000
981
982
983
984 65001 VAPPLI=RMDESC(2)
985 RETURN
986
987
988
989 66001 VAPPLI=RMDESC(1)
990 IF(.NOT.TELFLG) CALL RSPEAK(138)
991 RETURN
992
993
994
995 67001 CALL RSPEAK(RDESC2-HERE)
996 RETURN
997
998
999
1000 68001 IF(OBJACT(X)) RETURN
1001 I=901
1002
1003 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) I=902
1004 CALL RSPSUB(I,ODO2)
1005 RETURN
1006
1007
1008
1009 69001 CALL RSPSUB(903,ODO2)
1010 RETURN
1011
1012
1013
1014
1015
1016 70000 BRIEFF=.TRUE.
1017 SUPERF=.FALSE.
1018 CALL RSPEAK(326)
1019 RETURN
1020
1021
1022
1023 71000 BRIEFF=.FALSE.
1024 SUPERF=.FALSE.
1025 CALL RSPEAK(327)
1026 RETURN
1027
1028
1029
1030 72000 SUPERF=.TRUE.
1031 CALL RSPEAK(328)
1032 RETURN
1033
1034
1035
1036 73000 IF(WINNER.NE.AMASTR) GO TO 73100
1037 CALL RSPEAK(781)
1038 CTICK(CEVFOL)=0
1039 RETURN
1040
1041 73100 IF(WINNER.EQ.PLAYER) CALL RSPEAK(664)
1042 RETURN
1043
1044
1045
1046 74000 WRITE(OUTCH,74010) VMAJ,VMIN,VEDIT
1047 74010 FORMAT(' V',I1,'.',I1,A)
1048 TELFLG=.TRUE.
1049 RETURN
1050
1051
1052
1053 75000 I=330
1054
1055
1056 IF(AND(RFLAG(HERE),(RWATER+RFILL)).EQ.0)
1057 & I=331+RND(3)
1058 CALL RSPEAK(I)
1059 RETURN
1060
1061
1062
1063 76000 IF(AVEHIC(WINNER).EQ.BARRE) GO TO 76100
1064 CALL RSPEAK(334)
1065 RETURN
1066
1067 76100 CALL JIGSUP(335)
1068 RETURN
1069
1070
1071
1072 77000 IF((HERE.EQ.MCYCL).AND.(OROOM(CYCLO).EQ.HERE)) GO TO 77100
1073 CALL RSPEAK(336)
1074 RETURN
1075
1076 77100 CALL NEWSTA(CYCLO,337,0,0,0)
1077 CYCLOF=.TRUE.
1078 MAGICF=.TRUE.
1079
1080 OFLAG2(CYCLO)=AND(OFLAG2(CYCLO), COMPL(FITEBT))
1081 RETURN
1082
1083
1084
1085 78000 GO TO 10
1086
1087
1088
1089 79000 IF(HERE.NE.TEMP2) GO TO 79050
1090 IF(MOVETO(FORE1,WINNER)) GO TO 79100
1091 79050 CALL RSPEAK(340)
1092 RETURN
1093
1094 79100 F=RMDESC(3)
1095 RETURN
1096
1097
1098
1099 80000 IF(HERE.NE.TEMP1) GO TO 80050
1100 IF(MOVETO(TREAS,WINNER)) GO TO 79100
1101 80050 CALL RSPEAK(341)
1102 RETURN
1103
1104
1105
1106 81000 IF(HERE.NE.TREAS) GO TO 81050
1107 IF(MOVETO(TEMP1,WINNER)) GO TO 79100
1108 81050 CALL RSPEAK(341)
1109 RETURN
1110
1111
1112
1113 82000 I=342
1114 IF(PRSO.EQ.SAFE) I=252
1115 CALL RSPEAK(I)
1116 RETURN
1117
1118
1119
1120 83000 CALL SCORE(.FALSE.)
1121 RETURN
1122
1123
1124
1125 84000 CALL SCORE(.TRUE.)
1126 IF(.NOT.YESNO(343,10,0)) RETURN
1127 CALL EXIT
1128
1129
1130
1131
1132
1133 85000 IF(WINNER.NE.AMASTR) GO TO 85100
1134 CALL RSPEAK(782)
1135 CFLAG(CEVFOL)=.TRUE.
1136 CTICK(CEVFOL)=-1
1137 RETURN
1138
1139 85100 I=10
1140 IF(PRSO.EQ.0) GO TO 85200
1141 I=964
1142
1143 IF(AND(OFLAG2(PRSO),VILLBT).NE.0) I=965
1144 85200 CALL RSPEAK(I)
1145 RETURN
1146
1147
1148
1149 86000 IF(OBJACT(X)) RETURN
1150 IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND.
1151 & ((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 86100
1152 SCOLAC=SCOLRM
1153 PRSO=0
1154 CFLAG(CEVSCL)=.TRUE.
1155 CTICK(CEVSCL)=6
1156 CALL RSPEAK(668)
1157 F=MOVETO(SCOLRM,WINNER)
1158 F=RMDESC(0)
1159 RETURN
1160
1161 86100 IF(HERE.NE.SCOLAC) GO TO 86300
1162 DO 86200 I=1,12,3
1163 IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO))
1164 & GO TO 86500
1165 86200 CONTINUE
1166
1167
1168 86300 IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 86400
1169 I=669
1170 IF(PRSO.EQ.SCOL) I=670
1171 CALL RSPSUB(I,ODO2)
1172 RETURN
1173
1174 86400 I=671
1175 IF(OROOM(PRSO).NE.0) I=552+RND(6)
1176 CALL RSPEAK(I)
1177 RETURN
1178
1179 86500 PRSO=SCOLWL(I+2)
1180 DO 86600 I=1,8,2
1181 IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
1182 86600 CONTINUE
1183 CTICK(CEVSCL)=0
1184 CALL RSPEAK(668)
1185 F=MOVETO(BKBOX,WINNER)
1186 F=RMDESC(0)
1187 RETURN
1188
1189
1190
1191 87000 IF(OBJACT(X)) RETURN
1192 I=359
1193 IF(PRSO.EQ.BELL) I=360
1194 CALL RSPEAK(I)
1195 RETURN
1196
1197
1198
1199 88000 IF(PRSO.EQ.TEETH) GO TO 88100
1200 CALL RSPEAK(362)
1201 RETURN
1202
1203 88100 IF(PRSI.NE.0) GO TO 88200
1204 CALL RSPEAK(363)
1205 RETURN
1206
1207 88200 IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER))
1208 & GO TO 88300
1209 CALL RSPSUB(364,ODI2)
1210 RETURN
1211
1212 88300 CALL JIGSUP(365)
1213 RETURN
1214
1215
1216
1217
1218
1219 89000 IF(PRSI.NE.SHOVE) GO TO 89100
1220 VAPPLI=OBJACT(X)
1221 RETURN
1222
1223 89100 I=392
1224
1225 IF(AND(OFLAG1(PRSI),TOOLBT).EQ.0) I=393
1226 CALL RSPSUB(I,ODI2)
1227 RETURN
1228
1229
1230
1231 90000 CALL GTTIME(K)
1232 I=K/60
1233 J=MOD(K,60)
1234 WRITE(OUTCH,90010)
1235 IF(I.NE.0) WRITE(OUTCH,90011) I
1236 IF(I.GE.2) WRITE(OUTCH,90012)
1237 IF(I.EQ.1) WRITE(OUTCH,90013)
1238 IF(J.EQ.1) WRITE(OUTCH,90014) J
1239 IF(J.NE.1) WRITE(OUTCH,90015) J
1240 TELFLG=.TRUE.
1241 RETURN
1242
1243 90010 FORMAT(' You have been playing Dungeon for ',$)
1244 90011 FORMAT('+',I3,' hour',$)
1245 90012 FORMAT('+s and ',$)
1246 90013 FORMAT('+ and ',$)
1247 90014 FORMAT('+',I2,' minute.')
1248 90015 FORMAT('+',I2,' minutes.')
1249
1250
1251
1252 91000 IF(PRSO.EQ.0) GO TO 91200
1253 IF(QHERE(PRSO,HERE)) GO TO 91100
1254 CALL RSPEAK(447)
1255 RETURN
1256
1257
1258 91100 IF(AND(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 91300
1259 CALL RSPSUB(448,ODO2)
1260 RETURN
1261
1262 91200 IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 91300
1263 IF(XTYPE.EQ.XNO) GO TO 91400
1264 IF(XTYPE.NE.XCOND) GO TO 91300
1265 IF(.NOT.FLAGS(XFLAG)) GO TO 91400
1266 91300 CALL RSPEAK(314+RND(5))
1267 RETURN
1268
1269 91400 IF(WINNER.EQ.PLAYER) GO TO 91500
1270 CALL JIGSUP(452)
1271 RETURN
1272
1273 91500 CALL JIGSUP(449+RND(4))
1274 RETURN
1275
1276
1277
1278
1279
1280 92000 IF(OBJACT(X)) RETURN
1281 IF((PRSO.EQ.GRATE).AND..NOT.QOPEN(GRATE).AND.(HERE.EQ.MGRAT))
1282 & GO TO 92200
1283 92100 CALL RSPEAK(464)
1284 RETURN
1285
1286 92200 GRUNLF=.FALSE.
1287 CALL RSPEAK(214)
1288 TRAVEL(REXIT(HERE)+1)=214
1289 RETURN
1290
1291
1292
1293 93000 IF(OBJACT(X)) RETURN
1294 IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT))
1295 & GO TO 92100
1296 IF(PRSI.EQ.KEYS) GO TO 93200
1297 CALL RSPSUB(465,ODI2)
1298 RETURN
1299
1300 93200 GRUNLF=.TRUE.
1301 CALL RSPEAK(217)
1302 TRAVEL(REXIT(HERE)+1)=1041
1303 RETURN
1304
1305
1306
1307 94000 I=FIGHTS(WINNER,.FALSE.)
1308 J=ASTREN(WINNER)
1309 K=MIN0(I+J,4)
1310 IF(.NOT.CFLAG(CEVCUR)) J=0
1311 L=MIN0(4,IABS(J))
1312 CALL RSPEAK(473+L)
1313 I=(30*(-J-1))+CTICK(CEVCUR)
1314 IF(J.NE.0) WRITE(OUTCH,94100) I
1315 94100 FORMAT(' You will be cured after ',I3,' moves.')
1316 CALL RSPEAK(478+K)
1317 IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS)
1318 RETURN
1319
1320
1321
1322
1323
1324 95000 IF(WINNER.NE.PLAYER) GO TO 10
1325
1326 IF(AND(RFLAG(MREYE),RSEEN).NE.0) GO TO 95800
1327 IF(SUBLNT.EQ.0) GO TO 95350
1328 PW(1)=' '
1329 PW(2)=' '
1330 WP=1
1331 CP=1
1332 DO 95200 I=1,SUBLNT
1333 IF(SUBBUF(I:I).NE.' ') GO TO 95150
1334 IF(CP.EQ.1) GO TO 95200
1335 WP=MIN0(2,WP+1)
1336 CP=1
1337 GO TO 95200
1338 95150 IF(CP.LE.WRDLNT) PW(WP)(CP:CP)=SUBBUF(I:I)
1339 CP=CP+1
1340 95200 CONTINUE
1341
1342 IF(PW(1).NE.' ') GO TO 95400
1343 95350 CALL RSPEAK(856)
1344 95375 PRSCON=0
1345 RETURN
1346
1347 95400 CALL ENCRYP(PW(1),CH)
1348 IF(PW(2).NE.' ') GO TO 95600
1349
1350 IF(SPELLF) GO TO 95550
1351
1352 IF(AND(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 95575
1353 SPELLF=.TRUE.
1354 TELFLG=.TRUE.
1355 WRITE(OUTCH,95510) PW(1)(1:NBLEN(PW(1))),CH
1356 95510 FORMAT(' A hollow voice replies: "',A,1X,A,'".')
1357 RETURN
1358
1359 95550 CALL RSPEAK(857)
1360 GO TO 95375
1361
1362 95575 CALL RSPEAK(858)
1363 GO TO 95375
1364
1365 95600 CALL ENCRYP(PW(2),CH2)
1366 IF(SPELLF.OR.((PW(1).NE.CH2).AND.(PW(2).NE.CH)))
1367 & GO TO 95900
1368 SPELLF=.TRUE.
1369 CALL RSPEAK(859)
1370 CFLAG(CEVSTE)=.TRUE.
1371 CTICK(CEVSTE)=1
1372 RETURN
1373
1374 95800 CALL RSPEAK(855)
1375 GO TO 95375
1376
1377 95900 CALL RSPEAK(1052)
1378 GO TO 95375
1379
1380
1381
1382
1383
1384 96000 IF(WINNER.NE.PLAYER) GO TO 10
1385 IF(SUBLNT.EQ.0) GO TO 96050
1386 IF((HERE.EQ.RIDDL).AND..NOT.RIDDLF) GO TO 96700
1387 IF(HERE.EQ.FDOOR) GO TO 96100
1388 96050 CALL RSPEAK(799)
1389 PRSCON=0
1390 RETURN
1391
1392 96100 IF(INQSTF.AND.(NQATT.LT.5).AND.(CORRCT.LT.3))
1393 & GO TO 96200
1394 CALL RSPEAK(783)
1395 PRSCON=0
1396 RETURN
1397
1398 96200 DO 96300 J=1,NUMANS
1399 IF(QUESNO.NE.ANSWER(J)) GO TO 96300
1400 IF(SUBBUF.EQ.ANSSTR(J)(1:NBLEN(ANSSTR(J)))) GO TO 96500
1401 96300 CONTINUE
1402
1403 PRSCON=0
1404 NQATT=NQATT+1
1405 IF(NQATT.GE.5) GO TO 96400
1406 CALL RSPEAK(800+NQATT)
1407 RETURN
1408
1409 96400 CALL RSPEAK(826)
1410 CFLAG(CEVINQ)=.FALSE.
1411 RETURN
1412
1413 96500 CORRCT=CORRCT+1
1414 CALL RSPEAK(800)
1415 IF(CORRCT.GE.3) GO TO 96600
1416 CFLAG(CEVINQ)=.TRUE.
1417 CTICK(CEVINQ)=2
1418 QUESNO=MOD(QUESNO+3,8)
1419 NQATT=0
1420 CALL RSPEAK(769)
1421 CALL RSPEAK(770+QUESNO)
1422 RETURN
1423
1424 96600 CALL RSPEAK(827)
1425 CFLAG(CEVINQ)=.FALSE.
1426
1427 OFLAG2(QDOOR)=OR(OFLAG2(QDOOR),OPENBT)
1428 RETURN
1429
1430 96700 IF(SUBBUF.NE.'WELL') GO TO 96050
1431 RIDDLF=.TRUE.
1432 CALL RSPEAK(338)
1433 RETURN
1434
1435
1436
1437 97000 IF(PRSO.NE.MATCH) GO TO 97100
1438 IF(ORMTCH.EQ.1) WRITE(OUTCH,97010) ORMTCH
1439 IF(ORMTCH.NE.1) WRITE(OUTCH,97020) ORMTCH
1440 97010 FORMAT(' You have ',I1,' match.')
1441 97020 FORMAT(' You have ',I1,' matches.')
1442 TELFLG=.TRUE.
1443 RETURN
1444
1445 97100 I=1062
1446 IF(PRSO.EQ.BAGCO) I=561
1447 IF(PRSO.EQ.CANDL) I=1058
1448 IF(PRSO.EQ.BILLS) I=1059
1449 IF(PRSO.EQ.LEAVE) I=1060
1450 IF(PRSO.EQ.GWISH) I=1061
1451 IF(PRSO.EQ.HEADS) I=1084
1452 CALL RSPEAK(I)
1453 RETURN
1454
1455
1456
1457
1458
1459
1460
1461 LOGICAL TAKE(FLG)
1462
1463
1464
1465 IMPLICIT INTEGER (A-Z)
1466 LOGICAL FLG,OBJACT,OAPPLI,QHERE
1467 %include dparam
1468
1469
1470
1471
1472
1473 IF((PRSO.LE.STRBIT).AND.
1474 & (AND(OFLAG2(PRSO),NOCHBT).EQ.0)) GO TO 100
1475 TAKE=OBJACT(X)
1476 RETURN
1477
1478 100 TAKE=.FALSE.
1479 X=OCAN(PRSO)
1480 IF((PRSI.EQ.0).OR.(PRSI.EQ.X)) GO TO 200
1481 CALL RSPEAK(1038)
1482 RETURN
1483
1484 200 IF(PRSO.NE.AVEHIC(WINNER)) GO TO 400
1485 CALL RSPEAK(672)
1486 RETURN
1487
1488
1489 400 IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 500
1490 IF(.NOT.OAPPLI(OACTIO(PRSO),0)) CALL RSPEAK(552+RND(6))
1491 RETURN
1492
1493
1494
1495 500 IF((X.NE.0).OR. QHERE(PRSO,HERE)) GO TO 600
1496 I=103
1497 IF(WINNER.NE.PLAYER) I=1080
1498 IF(OADV(PRSO).EQ.WINNER) CALL RSPEAK(I)
1499 RETURN
1500
1501 600 IF(X.EQ.0) GO TO 650
1502 IF(OADV(X).EQ.WINNER) GO TO 700
1503 650 IF((WEIGHR(PRSO,WINNER)+OSIZE(PRSO)).LE.MXLOAD)
1504 & GO TO 700
1505 I=558
1506 IF(WINNER.NE.PLAYER) I=1079
1507 CALL RSPEAK(I)
1508 PRSCON=0
1509 RETURN
1510
1511 700 TAKE=.TRUE.
1512 IF(OAPPLI(OACTIO(PRSO),0)) RETURN
1513 CALL NEWSTA(PRSO,0,0,0,WINNER)
1514
1515 OFLAG2(PRSO)=OR(OFLAG2(PRSO),TCHBT)
1516 CALL SCRUPD(OFVAL(PRSO))
1517 OFVAL(PRSO)=0
1518 IF(FLG) CALL RSPEAK(559)
1519 RETURN
1520
1521
1522
1523
1524
1525
1526
1527 LOGICAL DROP(FLG)
1528 IMPLICIT INTEGER (A-Z)
1529 %include dparam
1530 LOGICAL F,PUT,OBJACT,FLG
1531
1532
1533 IF(AND(OFLAG2(PRSO),NOCHBT).EQ.0) GO TO 100
1534 DROP=OBJACT(X)
1535 RETURN
1536
1537 100 DROP=.TRUE.
1538 X=OCAN(PRSO)
1539 IF(X.EQ.0) GO TO 200
1540 IF(OADV(X).NE.WINNER) GO TO 1000
1541
1542 IF(AND(OFLAG2(X),OPENBT).NE.0) GO TO 300
1543 CALL RSPSUB(525,ODESC2(X))
1544 RETURN
1545
1546 200 IF(OADV(PRSO).NE.WINNER) GO TO 1000
1547 300 IF(AVEHIC(WINNER).EQ.0) GO TO 400
1548 PRSI=AVEHIC(WINNER)
1549 F=PUT(.TRUE.)
1550 PRSI=0
1551 RETURN
1552
1553 400 CALL NEWSTA(PRSO,0,HERE,0,0)
1554 CALL SCRUPD(OFVAL(PRSO))
1555 OFVAL(PRSO)=0
1556
1557 OFLAG2(PRSO)=OR(OFLAG2(PRSO),TCHBT)
1558
1559 IF(OBJACT(X)) RETURN
1560 IF(PRSA.EQ.DROPW) CALL RSPEAK(528)
1561 IF(PRSA.EQ.THROWW) CALL RSPEAK(529)
1562 RETURN
1563
1564 1000 I=527
1565 IF(WINNER.NE.PLAYER) I=1078
1566 CALL RSPEAK(I)
1567 RETURN
1568
1569
1570
1571
1572
1573
1574
1575 LOGICAL PUT(FLG)
1576 IMPLICIT INTEGER (A-Z)
1577 %include dparam
1578 LOGICAL QOPEN,QHERE,OBJACT,FLG,TAKE
1579
1580
1581
1582
1583 QOPEN(R)=AND(OFLAG2(R),OPENBT).NE.0
1584
1585
1586
1587
1588 IF(AND(OFLAG2(PRSO),NOCHBT).EQ.0) GO TO 100
1589 PUT=OBJACT(X)
1590 RETURN
1591
1592 100 PUT=.FALSE.
1593 IF((PRSO.LE.STRBIT).AND.(PRSI.LE.STRBIT)) GO TO 200
1594 IF(.NOT.OBJACT(X)) CALL RSPEAK(560)
1595 PUT=.TRUE.
1596 RETURN
1597
1598
1599
1600 200 IF(QOPEN(PRSI).OR.(AND(OFLAG1(PRSI),(DOORBT+CONTBT)).NE.0)
1601 & .OR.(AND(OFLAG2(PRSI),VEHBT).NE.0)) GO TO 300
1602 CALL RSPEAK(561)
1603 RETURN
1604
1605 300 IF(QOPEN(PRSI)) GO TO 400
1606 CALL RSPEAK(562)
1607 RETURN
1608
1609 400 IF(PRSO.NE.PRSI) GO TO 500
1610 CALL RSPEAK(563)
1611 RETURN
1612
1613 500 IF(OCAN(PRSO).NE.PRSI) GO TO 600
1614 CALL RSPSB2(564,ODESC2(PRSO),ODESC2(PRSI))
1615 PUT=.TRUE.
1616 RETURN
1617
1618 600 IF((WEIGHR(PRSO,0)+WEIGHR(PRSI,0)+OSIZE(PRSO))
1619 & .LE.OCAPAC(PRSI)) GO TO 700
1620 IF(PRSI.NE.AVEHIC(WINNER)) GO TO 650
1621 CALL RSPSUB(889,ODESC2(PRSI))
1622 RETURN
1623
1624 650 CALL RSPEAK(565)
1625 RETURN
1626
1627
1628
1629 700 J=PRSO
1630 725 IF(QHERE(J,HERE)) GO TO 750
1631 J=OCAN(J)
1632 IF(J.NE.0) GO TO 725
1633 GO TO 800
1634
1635 750 IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 800
1636 SVO=PRSO
1637 SVI=PRSI
1638 PRSA=TAKEW
1639 PRSI=0
1640 IF(.NOT.TAKE(.FALSE.)) RETURN
1641 PRSA=PUTW
1642 PRSO=SVO
1643 PRSI=SVI
1644 GO TO 1000
1645
1646
1647
1648 800 IF(OCAN(PRSO).EQ.0) GO TO 1000
1649 IF(QOPEN(OCAN(PRSO))) GO TO 900
1650 CALL RSPSUB(566,ODESC2(PRSO))
1651 RETURN
1652
1653 900 CALL SCRUPD(OFVAL(PRSO))
1654 OFVAL(PRSO)=0
1655
1656 OFLAG2(PRSO)=OR(OFLAG2(PRSO),TCHBT)
1657 CALL NEWSTA(PRSO,0,0,0,WINNER)
1658
1659 1000 IF(OBJACT(X)) RETURN
1660 CALL NEWSTA(PRSO,2,0,PRSI,0)
1661 PUT=.TRUE.
1662 RETURN
1663
1664