-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbank.zil
972 lines (938 loc) · 33.5 KB
/
bank.zil
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
;*****************************************************************************
; "game : SHERLOCK!"
; "file : BANK.ZIL"
; "auth : $Author: RAB $"
; "date : $Date: 28 Oct 1987 17:47:38 $"
; "revs : $Revision: 1.89 $"
; "vers : 1.00"
;*****************************************************************************
<CONSTANT K-GEM-BOX-NUM 600> ;"Box number containing the gem."
<ROUTINE RT-KIDNAP ()
<MOVE ,CH-HOLMES ,RM-LAIR>
<MOVE ,TH-ROPE ,CH-HOLMES>
<MC-MAKE ,CH-HOLMES ,FL-LOCKED>
<SETG TH-ROPE-AUX1 ,CH-HOLMES>
<SET-MYCROFT-STATE CLEAR ,MYCROFT-LOCKED>
<SETG GL-PUPPY <>>
<TELL
CR
"Suddenly, someone grabs you from behind, pins your arms to your sides, and
covers up your head. You struggle fiercely to get loose, but to no
avail. Then you hear a voice shout, \"Let him go, we've got the other
one.\"" CR CR
"The person holding you knocks you on the head and flings you to the
ground. You lose consciousness for a few moments, and when you awake, you
are alone." CR CR
"Sherlock Holmes has been kidnapped." CR>
<RTRUE>>
<ROUTINE RT-WIGGINS-HELP-MSG ()
<TELL
CTHE ,CH-WIGGINS " says, \"I saw it all, guv'nor. But it was over before I
could lift a finger. Mr 'Olmes was a friend to me, 'e was. And I'd do
anyfing to 'elp you get 'im back.\"" CR>
<SETG GL-PUPPY ,CH-WIGGINS>
<MC-UNMAKE ,CH-WIGGINS ,FL-NODESC>
<MC-UNMAKE ,CH-WIGGINS ,FL-BROKEN>
<SETG GL-PUPPY-MSG? <>>>
<GLOBAL BOX-KEY-COLD? <>>
<ROUTINE RT-STEAL-KEY ()
<COND (<F? ,BOX-KEY-COLD?>
<SETG BOX-KEY-COLD? T>
<MOVE ,TH-BOX-KEY ,CH-PLAYER>
<TELL
CTHE ,CH-WIGGINS " casually strolls past the guard and says, \"Cor blimey.
That bird isn't 'alf built, is she?\" While the guard's attention is diverted,
Wiggins's hand flashes in and out of his pocket. Then just as casually as
before, he strolls back to you, slips something into your hand, and whispers,
\"Sorry I couldn't get everything, guv. I 'ope this is enough.\"" CR>
<RT-UPDATE-SCORE <GETP ,TH-BOX-KEY ,P?VALUE>>
<PUTP ,TH-BOX-KEY ,P?VALUE 0>)
(T
<TELL "\"Sorry, guv. 'E'll never go for it twice.\"" CR>)>
<RTRUE>>
<OBJECT TH-INTNUM
(LOC GLOBAL-OBJECTS)
(DESC "number")
(FLAGS FL-NODESC FL-SEEN)
(SYNONYM INTNUM NUMBER)
(GENERIC RT-GN-INTNUM)
(ACTION RT-AC-TH-INTNUM)>
<OBJECT TH-SAFETY-DEPOSIT-BOX
(LOC RM-BANK-VAULT)
(DESC "safety deposit box")
(FLAGS FL-NODESC FL-CONTAINER FL-OPENABLE FL-LOCKED FL-HAS-DESCFCN)
(SYNONYM INTNUM BOX)
(ADJECTIVE SAFETY DEPOSIT BOX NUMBER)
(SIZE 0 CAPACITY 10)
(GENERIC RT-GN-INTNUM)
(ACTION RT-AC-TH-SAFETY-DEPOSIT-BOX)>
<OBJECT TH-RING
(LOC LOCAL-GLOBALS)
(DESC "ring")
(FLAGS FL-TAKEABLE FL-NOALL FL-CLOTHING)
(SYNONYM RING)
(ADJECTIVE SIGNET)
(VALUE 1)
(SIZE 1 MASS 1)
(ACTION RT-AC-TH-RING)>
<OBJECT TH-SHILLING
(DESC "shilling")
(FLAGS FL-TAKEABLE FL-MONEY)
(SYNONYM SHILLING COIN)
(VALUE 0)
(SIZE 1 MASS 1)>
<OBJECT TH-BOX-KEY
(LOC TH-GUARDS-POCKET)
(DESC "key")
(FLAGS FL-TAKEABLE FL-HAS-DESCFCN)
(SYNONYM KEY)
(ADJECTIVE MASTER)
(SIZE 1)
(VALUE 1)
(ACTION RT-AC-TH-BOX-KEY)>
<OBJECT TH-BOX-LOCK
(LOC RM-BANK-VAULT)
(DESC "lock")
(FLAGS FL-NODESC FL-CONTAINER FL-OPENED)
(SYNONYM INTNUM)
(ADJECTIVE LOCK NUMBER)
(GENERIC RT-GN-INTNUM)
(ACTION RT-AC-TH-BOX-LOCK)>
<OBJECT TH-BOXES
(LOC RM-BANK-VAULT)
(DESC "safety deposit boxes")
(FLAGS FL-NODESC FL-PLURAL FL-OPENABLE FL-CONTAINER
FL-HAS-DESCFCN)
(SYNONYM BOXES)
(ADJECTIVE SAFETY DEPOSIT)
(ACTION RT-AC-TH-BOXES)>
<OBJECT TH-GUARDS-POCKET
(LOC CH-BANK-GUARD)
(DESC "guard's pocket")
(FLAGS FL-NODESC FL-CONTAINER FL-OPENED FL-TRYTAKE)
(SYNONYM POCKET)
(ADJECTIVE HIS GUARD\'S)
(SIZE 0 CAPACITY 10)
(ACTION RT-AC-TH-GUARDS-POCKET)>
<ROUTINE RT-AC-TH-INTNUM ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-INTNUM" .CONTEXT>>
<COND (<MC-VERB? WAIT-FOR WAIT VERIFY>
<RFALSE>)
(<MC-VERB? SHOOT>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<NOT <MC-HERE? ,RM-BANK-VAULT>>
<COND (<EQUAL? ,GL-P-NUMBER -1>
<RT-CYOU-MSG "do" "does">
<TELL "not see that here." CR>)
(T
<RT-CYOU-MSG "do" "does">
<TELL "not need to use a number here." CR>)>)>>
<ROUTINE RT-AC-TH-RING ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-RING" .CONTEXT>>
<COND (<MC-THIS-PRSI?>
<RFALSE>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? WEAR>
<TELL "It's the wrong size." CR>)>)>>
<ROUTINE RT-AC-TH-BOX-KEY ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-BOX-KEY" .CONTEXT>>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<OR <IN? ,TH-BOX-KEY ,TH-GUARDS-POCKET>
<IN? ,TH-BOX-KEY ,CH-BANK-GUARD>>
<RT-CYOU-MSG>
<TELL "can't see it. The guard has it." CR>
<RTRUE>)
(T
<TELL
CTHE ,TH-BOX-KEY " has the word \"Master\" written on it." CR>)>)
(<MC-THIS-PRSI?>
<RFALSE>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? TURN>
<COND (<IN? ,TH-BOX-KEY ,TH-BOX-LOCK>
<COND (<EQUAL? ,TH-BOX-KEY-AUX1 ,K-GEM-BOX-NUM>
<COND (<MC-IS? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<TELL "The box is already open." CR>)
(T
<SETG TH-SAFETY-DEPOSIT-BOX-AUX1 ,TH-BOX-KEY-AUX1>
<RT-CYOU-MSG "open" "opens">
<TELL "the box with the key.">
<COND (<FIRST? ,TH-SAFETY-DEPOSIT-BOX>
<TELL " Inside you see ">
<RT-PRINT-CONTENTS-2 ,TH-SAFETY-DEPOSIT-BOX>
<TELL ".">)>
<MC-MAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<MC-UNMAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-LOCKED>
<CRLF>)>)
(T
<RT-CYOU-MSG "open" "opens">
<TELL ,K-NOTHING-INSIDE-MSG>
<RT-YOU-MSG "lock" "locks">
<TELL "it back up again." CR>)>)>)
(<MC-VERB? READ>
<COND (<OR <IN? ,TH-BOX-KEY ,TH-GUARDS-POCKET>
<IN? ,TH-BOX-KEY ,CH-BANK-GUARD>>
<RT-CYOU-MSG>
<TELL "can't see it. The guard has it." CR>)
(T
<TELL "It says, \Master.\"" CR>)>)>)>>
<ROUTINE RT-AC-TH-BOX-LOCK ("OPTIONAL" (CONTEXT <>) "AUX" NUM)
<DEBUGGING? <RT-DEBUG-TH-AC "TH-BOX-LOCK" .CONTEXT>>
<COND (<EQUAL? ,GL-P-NUMBER -1>
<COND (<ZERO? ,TH-BOX-LOCK-AUX1>
<TELL ,K-SPECIFY-MSG "lock by number." CR>
<RTRUE>)>)
(<OR <L? ,GL-P-NUMBER 1>
<G? ,GL-P-NUMBER 999>>
<TELL "There is no lock number " N ,GL-P-NUMBER "." CR>
<RTRUE>)
(T
<SETG TH-BOX-LOCK-AUX1 ,GL-P-NUMBER>)>
<SET NUM ,TH-BOX-LOCK-AUX1>
<COND (<MC-THIS-PRSI?>
<COND (<MC-VERB? PUT>
<COND (<MC-PRSO? ,TH-BOX-KEY>
<MOVE ,TH-BOX-KEY ,TH-BOX-LOCK>
<SETG TH-BOX-KEY-AUX1 ,TH-BOX-LOCK-AUX1>
<TELL "The key fits nicely." CR>)
(T
<RT-CANT-PUT-IN-ON-MSG>)>)
(<MC-VERB? TAKE>
<COND (<NOT <MC-PRSO? ,TH-BOX-KEY>>
<RFALSE>)
(<IN? ,TH-BOX-KEY ,TH-BOX-LOCK>
<MOVE ,TH-BOX-KEY ,GL-WINNER>
<SETG TH-BOX-KEY-AUX1 0>
<TELL "The key comes out smoothly." CR>)>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>)>)>>
<ROUTINE RT-AC-TH-SAFETY-DEPOSIT-BOX ("OPTIONAL" (CONTEXT <>) "AUX" NUM)
<DEBUGGING? <RT-DEBUG-TH-AC "TH-SAFETY-DEPOSIT-BOX" .CONTEXT>>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<SET NUM ,TH-SAFETY-DEPOSIT-BOX-AUX1>
<TELL "It looks the same as all the other boxes." CR>
<RTRUE>)
(<EQUAL? ,GL-P-NUMBER -1>
<COND (<ZERO? ,TH-SAFETY-DEPOSIT-BOX-AUX1>
<TELL ,K-SPECIFY-MSG "box by number." CR>
<RTRUE>)
(<MC-IS? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<SETG TH-SAFETY-DEPOSIT-BOX-AUX1 600>)>)
(<OR <L? ,GL-P-NUMBER 1>
<G? ,GL-P-NUMBER 999>>
<TELL "There is no box number " N ,GL-P-NUMBER "." CR>
<RTRUE>)
(T
<SETG TH-SAFETY-DEPOSIT-BOX-AUX1 ,GL-P-NUMBER>)>
<SET NUM ,TH-SAFETY-DEPOSIT-BOX-AUX1>
<COND (<MC-THIS-PRSI?>
<COND (<MC-VERB? TAKE PUT FILL EMPTY-INTO POUR-FROM>
<COND (<OR <NOT <EQUAL? .NUM ,K-GEM-BOX-NUM>>
<MC-ISNOT? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>>
<TELL CTHEI " is closed." CR>)>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? UNLOCK OPEN OPEN-WITH>
<COND (<NOT <MC-PRSI? <> ,TH-BOX-KEY>>
<RT-CYOU-MSG>
<TELL "can't " VW " " THEO " with " THEI "." CR>)
(<AND <NOT <IN? ,TH-BOX-KEY ,GL-WINNER>>
<NOT <EQUAL? .NUM ,TH-BOX-KEY-AUX1>>>
<RT-CYOU-MSG "do" "does">
<TELL "not have the key." CR>)
(<EQUAL? .NUM ,K-GEM-BOX-NUM>
<COND (<MC-IS? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<TELL "It is already open." CR>)
(T
<RT-CYOU-MSG "open" "opens">
<TELL "the box with the key.">
<COND (<FIRST? ,TH-SAFETY-DEPOSIT-BOX>
<TELL " Inside you see ">
<RT-PRINT-CONTENTS-2 ,TH-SAFETY-DEPOSIT-BOX>
<TELL ".">)>
<MC-MAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<MC-UNMAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-LOCKED>
<CRLF>)>)
(T
<RT-CYOU-MSG "open" "opens">
<TELL ,K-NOTHING-INSIDE-MSG>
<RT-YOU-MSG "lock" "locks">
<TELL "it back up again." CR>)>
<RTRUE>)
(<MC-VERB? LOCK CLOSE>
<COND (<EQUAL? .NUM ,K-GEM-BOX-NUM>
<COND (<AND <NOT <IN? ,TH-BOX-KEY ,GL-WINNER>>
<NOT <EQUAL? .NUM ,TH-BOX-KEY-AUX1>>>
<RT-CYOU-MSG "do" "does">
<TELL "not have the key." CR>)
(<MC-ISNOT? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<TELL ,K-CLOSED-AND-LOCKED-MSG CR>)
(T
<RT-CYOU-MSG "close and lock"
"closes and locks">
<TELL "the box with the key.">
<MC-UNMAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>
<MC-MAKE ,TH-SAFETY-DEPOSIT-BOX ,FL-LOCKED>
<CRLF>)>)
(T
<TELL ,K-CLOSED-AND-LOCKED-MSG CR>)>
<RTRUE>)
(<MC-VERB? READ>
<TELL N ,TH-SAFETY-DEPOSIT-BOX-AUX1 CR>)
(<MC-VERB? LOOK-INSIDE SEARCH>
<COND (<OR <NOT <EQUAL? .NUM ,K-GEM-BOX-NUM>>
<MC-ISNOT? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>>
<TELL CTHEO " is closed." CR>)
(T
<TELL "Inside " THEO>
<RT-YOU-MSG "see" "sees">
<RT-PRINT-CONTENTS-2 ,TH-SAFETY-DEPOSIT-BOX>
<TELL "." CR>)>)
(<MC-VERB? EMPTY REACH-IN>
<COND (<OR <NOT <EQUAL? .NUM ,K-GEM-BOX-NUM>>
<MC-ISNOT? ,TH-SAFETY-DEPOSIT-BOX ,FL-OPENED>>
<TELL CTHEO " is closed." CR>)>)
(<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>)>)>>
<ROUTINE RT-AC-TH-DIAL ("OPTIONAL" (CONTEXT <>) "AUX" (LOCK? 0) WHO PTS)
<DEBUGGING? <RT-DEBUG-TH-AC "TH-DIAL" .CONTEXT>>
<COND (<MC-T? .CONTEXT> <RFALSE>)
(<ZERO? ,TH-DIAL-AUX1>
<SETG TH-DIAL-AUX1 ,TH-RIGHT>)>
<COND (<MC-THIS-PRSI?>
<RFALSE>)
(<MC-THIS-PRSO?>
<COND (<AND <MC-VERB? TUNE-TO>
<NOT <MC-PRSI? <> TH-LEFT TH-RIGHT>>>
<RT-CYOU-MSG>
<TELL "can't " VW " " THE ,TH-DIAL " to " THEI "." CR>)
(<MC-VERB? TUNE-TO SPIN TURN>
<COND (<MC-PRSI? <> TH-LEFT TH-RIGHT TH-HANDS>
<COND (<MC-ISNOT? ,TH-STETHOSCOPE ,FL-WORN>
<SET LOCK? 1>
<TELL "The dial turns smoothly." CR>)
(<NOT <MC-LISTEN? ,TH-DIAL
,LG-BANK-VAULT-DOOR
,RM-BANK-VAULT>>
<SET LOCK? 1>
<TELL "The dial turns quietly." CR>)
(<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<SET LOCK? 1>
<TELL "The dial turns with a series of muffled clicks." CR>)
(<MC-IS? ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<SET LOCK? 2>
<TELL "Clunk." CR>)
(<NOT <EQUAL? ,TH-DIAL-AUX1 ,GL-PRSI>>
<SET LOCK? 1>
<TELL "Clunk." CR>)
(T
<SETG TH-DIAL-AUX2 <+ ,TH-DIAL-AUX2 1>>)>
<COND (<EQUAL? .LOCK? 1> T)
(<EQUAL? ,TH-DIAL-AUX2 1>
<SETG TH-DIAL-AUX1 ,TH-RIGHT>
<TELL "Whirr." CR>)
(<EQUAL? ,TH-DIAL-AUX2 2>
<SETG TH-DIAL-AUX1 ,TH-LEFT>
<TELL "Click." CR>)
(<EQUAL? ,TH-DIAL-AUX2 3>
<SETG TH-DIAL-AUX1 ,TH-RIGHT>
<TELL "Click." CR>)
(<EQUAL? ,TH-DIAL-AUX2 4>
<SETG TH-DIAL-AUX1 ,TH-RIGHT>
<TELL "Whirr." CR>)
(<EQUAL? ,TH-DIAL-AUX2 5>
<SET LOCK? 2>
<TELL "Click. Kerchunk. The vault door swings open." CR>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL CR
"Holmes says, \"Splendid, Watson. The net is drawing ever tighter
around our quarry.\"" CR>)>
<SET PTS <GETP ,LG-BANK-VAULT-DOOR
,P?VALUE>>
<COND (<NOT <ZERO? .PTS>>
<RT-UPDATE-SCORE .PTS>
<PUTP ,LG-BANK-VAULT-DOOR
,P?VALUE 0>)>)>)
(T
<RT-IMPOSSIBLE-MSG>)>
<COND (<EQUAL? .LOCK? 1>
<SETG TH-DIAL-AUX1 0>
<SETG TH-DIAL-AUX2 0>)
(<EQUAL? .LOCK? 2>
<SETG TH-DIAL-AUX1 -1>
<SETG TH-DIAL-AUX2 -1>
<MC-UNMAKE ,LG-BANK-VAULT-DOOR ,FL-LOCKED>
<MC-MAKE ,LG-BANK-VAULT-DOOR ,FL-OPENED>)>
<RTRUE>)
(<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>)>)>>
<ROUTINE RT-AC-TH-BOXES ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-BOXES">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL
"There are rows and rows of safety deposit boxes, all alike, numbered from 1
to 999." CR>)
(<MC-VERB? UNLOCK LOCK OPEN CLOSE READ>
<TELL ,K-SPECIFY-MSG "box by number." CR>
<RFATAL>)
(<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>)>>
<ROUTINE RT-AC-TH-GUARDS-POCKET ()
<DEBUGGING? <RT-DEBUG-OB-AC "TH-GUARDS-POCKET">>
<COND (<MC-VERB? LOOK-INSIDE EXAMINE SEARCH>
<RT-CYOU-MSG>
<TELL "can't see inside the guard's pocket." CR>
<RTRUE>)
(<MC-VERB? PUT>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)
(<MC-VERB? TAKE EMPTY REACH-IN STEAL>
<TELL
CTHE ,CH-BANK-GUARD " slaps the offending hand away and says, \"Keep your
hands to yourself, mate.\"" CR>
<RTRUE>)>>
<ROUTINE RT-AC-CH-BANK-GUARD ("OPTIONAL" (CONTEXT <>) "AUX" GEMCNT OBJ)
<DEBUGGING? <RT-DEBUG-CH-AC "CH-BANK-GUARD" .CONTEXT>>
<RT-THIS-IS-IT ,CH-BANK-GUARD>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL
CTHE ,CH-BANK-GUARD " is lounging against the wall, idly jangling some keys
in his pocket and waiting for girls to walk by." CR>
<RTRUE>)
(<RT-TELL-ABOUT? ,CH-BANK-GUARD>
<SET OBJ <COND (<MC-VERB? WHO WHAT>
,GL-PRSO)
(T
,GL-PRSI)>>
<TELL ,K-GUARD-IGNORES-MSG CR>)
(<RT-WHO-WHAT-FAIL?>
<RFATAL>)
(<MC-THIS-WINNER?>
<COND (<MC-VERB? GIVE>
<COND (<MC-PRSO? ,TH-BOX-KEY ,TH-GUARDS-KEYS>
<TELL ,K-SORRY-MATE-MSG CR>)
(<MC-PRSO? ,TH-OPAL ,TH-RUBY ,TH-SAPPHIRE ,TH-EMERALD>
<TELL ,K-ILL-HOLD-IT-MSG CR>)>)
(T
<TELL ,K-GUARD-IGNORES-MSG CR>)>)
(<MC-THIS-PRSI?>
<COND (<MC-VERB? GIVE>
<COND (<MC-PRSO? ,TH-OPAL ,TH-RUBY ,TH-SAPPHIRE ,TH-EMERALD>
<MOVE ,GL-PRSO ,CH-BANK-GUARD>
<MC-MAKE ,GL-PRSO ,FL-NOALL>
<SET GEMCNT ,CH-BANK-GUARD-AUX1>
<INC GEMCNT>
<SETG CH-BANK-GUARD-AUX1 .GEMCNT>
<COND (<EQUAL? .GEMCNT 1>
;<COND (<MC-F? <BAND ,CH-HOLMES-AUX1
,K-HOLMES-GEM?>>
<SETG CH-HOLMES-AUX1 <BOR ,CH-HOLMES-AUX1
,K-HOLMES-GEM?>>
<MOVE ,TH-RING ,CH-PLAYER>
<MC-MAKE ,TH-RING ,FL-SEEN>
<MC-MAKE ,TH-RING ,FL-TOUCHED>
<MC-UNMAKE ,TH-RING ,FL-NODESC>
<TELL
"Holmes intercepts the gem on it's way to the guard. He">
<RT-HOLMES-SAYS-AGRA-MSG>
<RT-UPDATE-SCORE <GETP ,TH-RING ,P?VALUE>>
<PUTP ,TH-RING ,P?VALUE 0>)>
<TELL
"\"Now this is very nice. But I think I would need more than just one to make
letting you in worth my while. I'll hold this for you until you come back.\""
CR>)
(<EQUAL? .GEMCNT 2>
<TELL
"\"This is even more beautiful than the other one. But it isn't worth taking
the risk for only two of them.\"" CR>)
(<EQUAL? .GEMCNT 3>
<TELL "\"One more and you're in.\"" CR>)
(<EQUAL? .GEMCNT 4>
<TELL
CTHE ,CH-BANK-GUARD " looks furtively up and down the street. Then he
whispers to you out of the side of his mouth, \"Good enough. Go on in.\"" CR>
<RT-UPDATE-SCORE 3>)>
<RTRUE>)
(<MC-PRSO? ,TH-BOX-KEY>
<MOVE ,TH-BOX-KEY ,TH-GUARDS-POCKET>
<TELL
CTHE ,CH-BANK-GUARD " looks surprised and says, \"Ta, mate. I didn't know
I dropped it. I'll have to keep it in a safer place.\" He puts the key
into one of his inside pockets." CR>)
(<MC-PRSO? ,TH-RED-GLASS>
<TELL
CTHE ,CH-BANK-GUARD " looks at it carefully and then hands it back
to you, saying, \"For a moment there, I thought this was a ruby. But
it's only a piece of glass.\"" CR CR ,K-MORE-VALUABLE-MSG CR>)
(T
<TELL
CTHE ,CH-BANK-GUARD " examines what you are offering and then declines
your bribe." CR CR ,K-MORE-VALUABLE-MSG CR>)>)
(<MC-VERB? TAKE>
<COND (<MC-PRSO? ,TH-OPAL ,TH-RUBY ,TH-SAPPHIRE ,TH-EMERALD>
<TELL ,K-ILL-HOLD-IT-MSG CR>)
(<MC-PRSO? ,TH-BOX-KEY ,TH-GUARDS-KEYS>
<TELL ,K-SORRY-MATE-MSG CR>)
(<MC-PRSO? CH-BANK-GUARD>
<TELL CTHE ,CH-BANK-GUARD ,K-MUST-WEIGH-MSG CR>)>)
(<MC-VERB? SHOW>
<COND (<MC-PRSO? ,TH-OPAL ,TH-RUBY ,TH-SAPPHIRE ,TH-EMERALD
,TH-RED-GLASS>
<TELL "\"My, what a loverly gem!\"" CR>)
(<MC-PRSO? ,TH-BOX-KEY>
<MOVE ,TH-BOX-KEY ,TH-GUARDS-POCKET>
<TELL
CTHE ,CH-BANK-GUARD " looks surprised and says, \"Oh! Thank you. I must have
dropped it. I'll be sure to keep it in a safer place.\" He takes the key and
puts it in one of his inside pockets." CR>)>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? TAKE>
<COND (<MC-PRSI? <>>
<TELL CTHE ,CH-BANK-GUARD ,K-MUST-WEIGH-MSG CR>)>)
(<MC-VERB? ASK-FOR>
<COND (<MC-PRSI? ,TH-BOX-KEY ,TH-GUARDS-KEYS>
<TELL ,K-SORRY-MATE-MSG CR>)
(<MC-PRSI? ,TH-OPAL ,TH-RUBY ,TH-SAPPHIRE ,TH-EMERALD>
<TELL ,K-ILL-HOLD-IT-MSG CR>)>)>)>>
<GLOBAL WIGGINS-COLD? <>>
<ROUTINE RT-AC-CH-WIGGINS ("OPTIONAL" (CONTEXT <>) OBJ)
<DEBUGGING? <RT-DEBUG-CH-AC "CH-WIGGINS" .CONTEXT>>
<RT-THIS-IS-IT ,CH-WIGGINS>
<COND (<AND <MC-THIS-WINNER?>
<FSET? ,GL-WINNER ,FL-ASLEEP>>
<RT-NO-CONDITION-MSG ,GL-WINNER>
<RTRUE>)
(<AND <==? .CONTEXT ,K-M-CONT>
<FSET? ,CH-WIGGINS ,FL-ASLEEP>>
<TELL "It's bad enough that you wasted the etherium; using it to
steal from your friends is quite unsporting. ">
<RTRUE>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<FSET? ,CH-WIGGINS ,FL-ASLEEP>
<TELL "Wiggins is still suffering from the effects of the
etherium gas." CR>
<RTRUE>)
(<MC-IS? ,CH-WIGGINS ,FL-BROKEN>
<MC-UNMAKE ,CH-WIGGINS ,FL-BROKEN>
<MC-UNMAKE ,CH-WIGGINS ,FL-NODESC>
<MC-MAKE ,CH-WIGGINS ,FL-SEEN>
<TELL
"After staring at his dirty face for a few moments, you suddenly
recognize the boy. He is Wiggins, the head of the Baker Street
Irregulars, which is Holmes's unofficial army of street urchins
who \"go everywhere and do everything.\"" CR>)>
<TELL <RT-PICK-NEXT ,GL-WIGGINS-DESC-TXT>>
<COND (<IN? ,CH-WIGGINS ,TH-BOAT>
<TELL ,K-ENJOYING-RIDE-MSG>)
(<OR <IN? ,CH-WIGGINS ,TH-HANSOM-CAB>
<IN? ,CH-WIGGINS ,TH-GROWLER-CAB>>
<TELL ,K-FIDGETING-MSG>)
(T
<TELL <RT-PICK-NEXT ,GL-WIGGINS-LOOK-TXT>>)>
<TELL "." CR>
<RETURN 2>)
(<RT-TELL-ABOUT? ,CH-WIGGINS>
<SET OBJ <COND (<MC-VERB? WHO WHAT>
,GL-PRSO)
(T
,GL-PRSI)>>
<COND (<MC-IS? ,CH-WIGGINS ,FL-ASLEEP>
<RT-NO-CONDITION-MSG ,CH-WIGGINS>)
(<AND <MC-VERB? WHO>
<EQUAL? .OBJ ,CH-WIGGINS>>
<TELL
"\"I'm Wiggins, 'ead o' the Baker Street Irregulars.\""
CR>)
(<EQUAL? .OBJ ,CH-HOLMES>
<TELL "\"E's a good man, guv'nor. Best as ever was.\"" CR>)
(T
<TELL "\"Beats me. What do you think?\"" CR>)>)
(<RT-WHO-WHAT-FAIL?>
<RFATAL>)
(<MC-THIS-WINNER?>
<COND (<MC-VERB? HELLO>
<TELL "\"'Ello.\"" CR>)
(<MC-VERB? GOODBYE>
<TELL "\"Ta ta.\"" CR>)
(<MC-VERB? THANK>
<TELL "\"Anytime, mate.\"" CR>)
(<MC-VERB? WHERE>
<TELL "\"Beats me. What do you think?\"" CR>)
(<ZERO? ,CH-WIGGINS-AUX1>
<TELL CTHE ,CH-WIGGINS ,K-WOUNDED-PRIDE-MSG CR>)
(<MC-VERB? ENTER>
<COND (<AND <MC-PRSO? ,TH-BUTT-OF-MALMSEY>
<NOT <FSET? ,GL-PRSO ,FL-BROKEN>>>
;<COND (<IN? ,CH-WIGGINS ,TH-BUTT-OF-MALMSEY>
<TELL "He's already up to his ears in malmsey."
CR>)
(T)>
<SETG WIGGINS-COLD? T>
<TELL
"Wiggins dutifully climbs into the full butt of malmsey and has a
nice bath and gets out again." CR>)
(<MC-PRSO? ,TH-BUTT-OF-MALMSEY>
<COND ;(<IN? ,CH-WIGGINS ,TH-BUTT-OF-MALMSEY>
<TELL "He's already in it." CR>)
(<IN? ,TH-GARNET ,TH-BUTT-OF-MALMSEY>
<MOVE ,TH-GARNET ,CH-PLAYER>
<RT-THIS-IS-IT ,TH-GARNET>
<SETG WIGGINS-COLD? T>
<MC-MAKE ,TH-GARNET ,FL-SEEN>
<MC-MAKE ,TH-GARNET ,FL-TOUCHED>
<MC-UNMAKE ,TH-GARNET ,FL-NODESC>
<TELL
"Wiggins climbs into the empty butt of malmsey, gets the gem, gets
out and gives it to you." CR>
<RT-UPDATE-SCORE <GETP ,TH-GARNET ,P?VALUE>>
<PUTP ,TH-GARNET ,P?VALUE 0>
<RTRUE>)
(T
<TELL
"Wiggins says, \"Once was enough, thank you.\""
CR>)>)
(<MC-PRSO? ,TH-HANSOM-CAB ,TH-GROWLER-CAB ,TH-BOAT>
<COND (<IN? ,CH-HOLMES ,RM-LAIR>
<COND (<IN? ,CH-PLAYER ,GL-PRSO>
<TELL "Wiggins climbs in next to you."
CR>
<MOVE ,CH-WIGGINS ,GL-PRSO>)
(T
<TELL ,K-AFTER-YOU-MSG CR>)>
<SETG GL-PUPPY ,CH-WIGGINS>
<MC-UNMAKE ,CH-WIGGINS ,FL-NODESC>
<MC-UNMAKE ,CH-WIGGINS ,FL-BROKEN>)
(T
<TELL ,K-CANT-LEAVE-MSG CR>)>)
(<MC-PRSO? LG-WATER>
<TELL
"\"I ain't no bleedin' mermaid. Besides, bathing ain't 'ealthy.\"" CR>)>)
(<MC-VERB? TAKE STEAL>
<COND (<AND <MC-PRSO? ,TH-GARNET>
<IN? ,TH-GARNET ,TH-BUTT-OF-MALMSEY>>
<MOVE ,TH-GARNET ,CH-PLAYER>
<RT-THIS-IS-IT ,TH-GARNET>
<SETG WIGGINS-COLD? T>
<MC-MAKE ,TH-GARNET ,FL-SEEN>
<MC-MAKE ,TH-GARNET ,FL-TOUCHED>
<MC-UNMAKE ,TH-GARNET ,FL-NODESC>
<TELL CTHE ,CH-WIGGINS>
<COND (<NOT <IN? ,CH-WIGGINS ,TH-BUTT-OF-MALMSEY>>
<TELL " climbs into the empty butt of malsey,">)>
<TELL " gets the gem, gets out, and gives it to you."
CR>
<RT-UPDATE-SCORE <GETP ,TH-GARNET ,P?VALUE>>
<PUTP ,TH-GARNET ,P?VALUE 0>
<RTRUE>)
(<OR <MC-PRSO? ,TH-GUARDS-POCKET ,TH-BOX-KEY
,TH-GUARDS-KEYS>
<MC-PRSI? ,TH-GUARDS-POCKET ,CH-BANK-GUARD>>
<RT-STEAL-KEY>
<RTRUE>)
(<MC-VERB? STEAL>
<TELL
"\"I would if I could, guv. But I don't see 'ow to do it.\"" CR>)>)
(<AND <MC-VERB? ROB>
<MC-PRSO? ,CH-BANK-GUARD>>
<RT-STEAL-KEY>)
(<MC-VERB? EMPTY REACH-IN SEARCH>
<COND (<OR <MC-PRSO? ,TH-GUARDS-POCKET ,CH-BANK-GUARD>
<MC-PRSI? ,TH-GUARDS-POCKET ,CH-BANK-GUARD>>
<RT-STEAL-KEY>
<RTRUE>)
(T
<TELL
"\"I would if I could, guv. But I don't see 'ow to do it.\"" CR>)>)
(<MC-VERB? FOLLOW>
<COND (<MC-PRSO? ,CH-ME ,CH-PLAYER>
<COND (<IN? ,CH-HOLMES ,RM-LAIR>
<TELL "\"After you, guv.\"" CR>
<SETG GL-PUPPY ,CH-WIGGINS>
<MC-UNMAKE ,CH-WIGGINS ,FL-NODESC>
<MC-UNMAKE ,CH-WIGGINS ,FL-BROKEN>)
(T
<TELL ,K-CANT-LEAVE-MSG CR>)>)
(T
<TELL "\"I'm not a bleedin' bloodhound.\"" CR>)>)
(<MC-VERB? WAIT>
<COND (<EQUAL? ,GL-PUPPY ,CH-WIGGINS>
<SETG GL-PUPPY <>>
<TELL "\"Right. I'm glued to this spot.\"" CR>)
(T
<TELL "\"Whatever you say, guv.\"" CR>)>)
(<MC-VERB? EXIT>
;<COND (<EQUAL? ,GL-PUPPY ,CH-WIGGINS>
<SETG GL-PUPPY <>>
<TELL ,K-CAN-LEAVE-MSG CR>)
(T
<TELL ,K-CAN-LEAVE-MSG CR>)>
<TELL ,K-AFTER-YOU-MSG CR>)
(<AND <MC-VERB? PULL>
<MC-PRSO? ,TH-PORTCULLIS-CHAIN>>
<TELL "\"I can't reach it, guv.\"" CR>)
(T
<TELL "Wiggins looks at you and scratches his head." CR>
<RTRUE>)>)
(<MC-THIS-PRSI?>
<COND (<MC-VERB? GIVE>
<COND (<MC-IS? ,CH-WIGGINS ,FL-ASLEEP>
<RT-NO-CONDITION-MSG ,CH-WIGGINS "accept your offer">)
(<MC-PRSO? ,TH-SHILLING>
<MOVE ,TH-SHILLING ,CH-WIGGINS>
<MC-MAKE ,TH-SHILLING ,FL-NOALL>
<SETG CH-WIGGINS-AUX1 1>
<COND (<F? ,GL-P-CONT>
<SETG WINNER-IS-WIGGINS T>)>
<SETG GL-P-QCONTEXT-TH ,CH-WIGGINS>
<SETG GL-P-QCONTEXT-RM ,GL-PLACE-CUR>
<TELL
"Wiggins looks at " THE ,TH-SHILLING " and then at you. After a few
moments he stuffs it deep into the recesses of his clothing and says, \"I'm
all yours. Wot's the plan?\"" CR>)
(<MC-PRSO? ,TH-EMERALD
,TH-SAPPHIRE
,TH-RUBY
,TH-OPAL
,TH-TOPAZ
,TH-GARNET
,TH-POUND-NOTE
,TH-SIXPENCE>
<TELL "Wiggins glances at your offer and"
,K-WOUNDED-PRIDE-MSG CR>)
(T
<TELL
"Wiggins looks at the item you have handed him and then returns it
to you. Clearly it was not of interest to him." CR>)>
<RTRUE>)
(<AND <MC-VERB? TAKE>
<MC-PRSO? ,TH-SHILLING>>
<COND (<MC-IS? ,CH-WIGGINS ,FL-ASLEEP>
<TELL "He must have hidden it very well. ">
<RT-CYOU-MSG>
<TELL "can't find it." CR>)
(T
<TELL "\"Sorry, guv'nor. A deal's a deal.\"" CR>)>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? SMELL>
<COND (<T? ,WIGGINS-COLD?>
<TELL ,K-EAU-DE-MSG CR>)
(T
<TELL "Yuck. Eau de urchin." CR>)>)>)>>
<ROUTINE RT-AC-CH-BUTLER ("OPTIONAL" (CONTEXT <>) "AUX" WORD-NUM)
<DEBUGGING? <RT-DEBUG-CH-AC "CH-BUTLER" .CONTEXT>>
<RT-THIS-IS-IT ,CH-BUTLER>
<COND (<MC-THIS-WINNER?>
<COND (<MC-IS? ,CH-BUTLER ,FL-ASLEEP>
<RT-NO-CONDITION-MSG ,CH-BUTLER>)
(<AND <MC-VERB? TAKE FIND>
<RT-IDENTIFY-EVENT? ,W?MYCROFT ,GL-PRSO>>
<SETG GL-WINNER ,CH-PLAYER>
<RT-PERFORM ,V?ASK-FOR ,CH-BUTLER ,TH-EVENT>
<RTRUE>)
(<MC-VERB? HELLO>
<TELL "\"">
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL "How do you do?">)
(<EQUAL? <RT-TIME-OF-DAY> 1 2>
<TELL "Good day.">)
(<EQUAL? <RT-TIME-OF-DAY> 3>
<TELL "Good evening.">)>
<TELL "\"" CR>)
(<MC-VERB? GOODBYE>
<TELL "\"">
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL "Good night">)
(<EQUAL? <RT-TIME-OF-DAY> 1 2>
<TELL "Good day">)
(<EQUAL? <RT-TIME-OF-DAY> 3>
<TELL "Good evening">)>
<TELL ".\"" CR>)
(<MC-VERB? THANK>
<TELL "\"You're quite welcome.\"" CR>)
(<AND <MC-VERB? WHO>
<MC-PRSO? ,CH-BUTLER>>
<TELL
"\"I am one of the staff of this fine establishment.\"" CR>)
(<MC-VERB? WHO WHAT WHERE>
<TELL
"\"I'm far too discreet to respond.\"" CR>)
(<MC-VERB? YES NO>
<TELL
CTHE ,CH-BUTLER " looks at you expectantly." CR>)
(<MC-VERB? RESCUE>
<TELL "\"What can I do for you?\"" CR>)
(T
<TELL
"\"I'm afraid I am unable to do that.\"" CR>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? ASK-FOR ASK-ABOUT>
<COND (<MC-IS? ,CH-BUTLER ,FL-ASLEEP>
<RT-NO-CONDITION-MSG ,CH-BUTLER>)
(<RT-IDENTIFY-EVENT? ,W?MYCROFT ,GL-PRSI>
<COND (<NOT <0? <ANDB ,MYCROFT-STATE
,MYCROFT-LOCKED>>>
<TELL
"\"I am very sorry but Mr Mycroft Holmes is not available at this time.
Perhaps you would care to come back later?\"" CR>)
(<NOT <0? <ANDB ,MYCROFT-STATE
,MYCROFT-ASLEEP>>>
<SET-MYCROFT-STATE CLEAR ,MYCROFT-ASLEEP>
<TELL
"The butler listens to you and then leaves. He comes back shortly." CR CR
"\"Mr Mycroft Holmes requires that you offer some token to verify that you
are indeed the person you claim to be. Give whatever it is to me and I will
take it to him.\"" CR>)
(T
<TELL
"The butler listens politely but insists that he can do nothing more for you
than to deliver the token to Mr Mycroft Holmes." CR>)>)
(<MC-PRSI? ,CH-HOLMES>
<TELL
"\"I am afraid that I know the younger Mr Holmes only by his somewhat
colourful reputation.\"" CR>)
(<MC-PRSI? ,CH-BUTLER>
<TELL
"\"I am well, sir. Thank you for asking.\"" CR>)
(<MC-PRSI? ,CH-PLAYER ,CH-ME>
<TELL
"He looks down his nose at you and sniffs, \"I don't believe we've been
introduced.\"" CR>)
(<MC-PRSI? ,CH-MEMBERS>
<TELL
"\"They seem livelier than usual for this time of year.\"" CR>)
(<MC-PRSI? ,RM-DIOGENES-CLUB>
<TELL
"The butler coughs deferentially, \"It is one of the most exclusive
clubs in London, sir.\" He glances at your clothes. \"Membership is by
invitation only.\"" CR>)
(<MC-IS? ,GL-PRSI ,FL-PERSON>
<COND (<MC-IS? ,GL-PRSI ,FL-PLURAL>
<TELL
"\"Unfortunately, I can say nothing about them.\"" CR>)
(<MC-IS? ,GL-PRSI ,FL-FEMALE>
<TELL
"\"I am sorry but I can tell you nothing about her.\"" CR>)
(T
<TELL
"\"Much to my regret I can tell you nothing about him.\"" CR>)>)
(T
<TELL
"\"I'm afraid I wouldn't know anything about that.\"" CR>)>)>)
(<MC-THIS-PRSI?>
<COND (<MC-VERB? GIVE>
<COND (<MC-IS? ,CH-BUTLER ,FL-ASLEEP>
<RT-NO-CONDITION-MSG ,CH-BUTLER "accept your offer">)
(<NOT <0? <ANDB ,MYCROFT-STATE ,MYCROFT-LOCKED>>>
<TELL
"The butler politely declines to take the gift you have offered." CR>)
(<NOT <0? <ANDB ,MYCROFT-STATE ,MYCROFT-ASLEEP>>>
<TELL
"The butler refuses to take the item you have offered and asks if you
have come to speak with someone here in the club." CR>)
(<MC-PRSO? ,TH-RING>
<SET-MYCROFT-STATE SET ,MYCROFT-LOCKED
,MYCROFT-SEEN>
<REMOVE ,TH-RING>
<TELL ,K-BUTLER-ACCEPTS-MSG CR CR
"After a few moments, Mycroft Holmes appears. He looks very worried." CR CR
"\"Sherlock warned me that you might come,\" he says. \"And the fact
that you are here indicates that he is indeed in trouble. I believe that
in order to solve this mystery, you are going to have to go to the Tower
of London. It will be closed, but you can give the password '">
<SET WORD-NUM <RANDOM 6>>
<SETG PASSWORD-ID .WORD-NUM>
<COND (<EQUAL? .WORD-NUM 1>
<TELL "Boleyn">)
(<EQUAL? .WORD-NUM 2>
<TELL "Cleves">)
(<EQUAL? .WORD-NUM 3>
<TELL "Howard">)
(<EQUAL? .WORD-NUM 4>
<TELL "Parr">)
(<EQUAL? .WORD-NUM 5>
<TELL "Aragon">)
(<EQUAL? .WORD-NUM 6>
<TELL "Seymour">)>
<TELL
"' to the guard at the Byward Tower. He will let you in. Good luck.\"" CR CR
"Mycroft pauses before he goes and looks at you meditatively, as if
trying to decide if he can put his faith in you to rescue his
brother. After a moment he gives his head an unconscious nod, then
turns around and disappears back into the club." CR>
<RT-UPDATE-SCORE 1>
<RTRUE>)
(T
<TELL ,K-BUTLER-ACCEPTS-MSG CR CR
"The butler soon returns looking concerned." CR CR
"\"I am sorry but Mr Mycroft Holmes says this will not do. Do you have
anything else?\"" CR>)>)>)>>
<ROUTINE RT-AC-LG-BANK-VAULT-DOOR ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-BANK-VAULT-DOOR" .CONTEXT>>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-BANK-OF-ENGLAND>
<RT-OPEN-CLOSED-MSG ,LG-BANK-VAULT-DOOR>
<CRLF> <CRLF>
<TELL "In the middle of the door you see a big shiny dial." CR>
<RTRUE>)
(T
<RT-OPEN-CLOSED-MSG ,LG-BANK-VAULT-DOOR>
<CRLF> <CRLF>
<TELL "The inside of the door is shiny and flat." CR>
<RTRUE>)>)
(<MC-VERB? OPEN>
<COND (<MC-IS? ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<TELL "The vault door is already open." CR>)
(<MC-IS? ,LG-BANK-VAULT-DOOR ,FL-LOCKED>
<TELL "The vault door is locked." CR>)
(T
<MC-MAKE ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<TELL "The vault door swings open." CR>)>)
(<MC-VERB? CLOSE>
<COND (<MC-ISNOT? ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<TELL "The vault door is already closed." CR>)
(T
<MC-UNMAKE ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<MC-MAKE ,LG-BANK-VAULT-DOOR ,FL-LOCKED>
<SETG TH-DIAL-AUX1 0>
<SETG TH-DIAL-AUX2 0>
<TELL "The vault door swings closed and locks">
<COND (<IN? ,CH-PLAYER ,RM-BANK-VAULT>
<TELL " you in. Whoops!" CR CR>
<RT-QSR>)
(T
<TELL "." CR>)>)>)
(<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-BANK-VAULT>
<RT-DO-WALK ,P?EAST>)
(<MC-HERE? ,RM-BANK-OF-ENGLAND>
<RT-DO-WALK ,P?WEST>)>)
(<MC-VERB? LOOK-INSIDE>
<COND (<MC-IS? ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<RT-CYOU-MSG "see" "sees">
<TELL "row upon row of " D ,TH-BOXES "." CR>)
(T
<TELL CTHE ,LG-BANK-VAULT-DOOR " is closed." CR>)>)
(<MC-VERB? UNLOCK>
<COND (<MC-IS? ,LG-BANK-VAULT-DOOR ,FL-OPENED>
<TELL CTHE ,LG-BANK-VAULT-DOOR " is already opened." CR>)
(T
<TELL ,K-HOW-TO-MSG CR>)>)
(<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>)>>
<ROUTINE RT-TOPAZ-MSG ()
<COND (<AND <==? ,GL-PRSO ,TH-TOPAZ>
<==? ,GL-PUPPY ,CH-HOLMES>>
<TELL CR "Holmes plucks you by the sleeve and reaches into
the box. \"Observe, Watson.\" He pulls out an almost invisible thread and
examines it with glittering eyes. \"Muslin,\" he declares, more to himself
than to you. \"Of Indian origin, and of the type used almost exclusively in
the manufacture of turbans.\" He looks at you in triumph. \"Our case is
almost complete, Doctor. The Agra gems, the Trichinopoly cigar, and now this
strand of muslin.\"" CR CR
"Holmes puts the strand into his pocket and explains. \"Moriarty - for reasons
as yet unknown to us - has stolen the Crown Jewels. The Agra gems have somehow
passed into his hands by way of this Indian accomplice, and he is using small
pieces of it to lure me into a rendezvous with him. It's a dangerous game we
play, Watson, but if we are to recover the regalia we have no choice.\"" CR>)>>