Release Version

This commit is contained in:
historicalsource 2019-04-16 09:16:28 -04:00
commit d327e7626d
120 changed files with 75211 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# sherlock

BIN
armor Normal file

Binary file not shown.

BIN
badv.was-mid Normal file

Binary file not shown.

BIN
badvio Normal file

Binary file not shown.

43
bank.zabstr Normal file
View File

@ -0,0 +1,43 @@
<CONSTANT K-GEM-BOX-NUM 600>
<DEFINE-ROUTINE RT-KIDNAP>
<DEFINE-ROUTINE RT-WIGGINS-HELP-MSG>
<GLOBAL BOX-KEY-COLD? <> %<> WORD>
<DEFINE-ROUTINE RT-STEAL-KEY>
<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)>
<DEFINE-ROUTINE RT-AC-TH-INTNUM>
<DEFINE-ROUTINE RT-AC-TH-RING>
<DEFINE-ROUTINE RT-AC-TH-BOX-KEY>
<DEFINE-ROUTINE RT-AC-TH-BOX-LOCK>
<DEFINE-ROUTINE RT-AC-TH-SAFETY-DEPOSIT-BOX>
<DEFINE-ROUTINE RT-AC-TH-DIAL>
<DEFINE-ROUTINE RT-AC-TH-BOXES>
<DEFINE-ROUTINE RT-AC-TH-GUARDS-POCKET>
<DEFINE-ROUTINE RT-AC-CH-BANK-GUARD>
<GLOBAL WIGGINS-COLD? <> %<> WORD>
<DEFINE-ROUTINE RT-AC-CH-WIGGINS>
<DEFINE-ROUTINE RT-AC-CH-BUTLER>
<DEFINE-ROUTINE RT-AC-LG-BANK-VAULT-DOOR>
<DEFINE-ROUTINE RT-TOPAZ-MSG>

887
bank.zap Normal file
View File

@ -0,0 +1,887 @@
.FUNCT RT-KIDNAP
MOVE CH-HOLMES,RM-LAIR
MOVE TH-ROPE,CH-HOLMES
FSET CH-HOLMES,FL-LOCKED
SET 'TH-ROPE-AUX1,CH-HOLMES
BAND MYCROFT-STATE,-2 >MYCROFT-STATE
SET 'GL-PUPPY,FALSE-VALUE
CRLF
PRINTI "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."""
CRLF
CRLF
PRINTI "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."
CRLF
CRLF
PRINTR "Sherlock Holmes has been kidnapped."
.FUNCT RT-WIGGINS-HELP-MSG
ICALL2 RT-CTHEO-PRINT,CH-WIGGINS
PRINTI " 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."""
CRLF
SET 'GL-PUPPY,CH-WIGGINS
FCLEAR CH-WIGGINS,FL-NODESC
FCLEAR CH-WIGGINS,FL-BROKEN
SET 'GL-PUPPY-MSG?,FALSE-VALUE
RETURN GL-PUPPY-MSG?
.FUNCT RT-STEAL-KEY
ZERO? BOX-KEY-COLD? \?CCL3
SET 'BOX-KEY-COLD?,TRUE-VALUE
MOVE TH-BOX-KEY,CH-PLAYER
ICALL2 RT-CTHEO-PRINT,CH-WIGGINS
PRINTI " 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."""
CRLF
GETP TH-BOX-KEY,P?VALUE
ICALL2 RT-UPDATE-SCORE,STACK
PUTP TH-BOX-KEY,P?VALUE,0
RTRUE
?CCL3: PRINTR """Sorry, guv. 'E'll never go for it twice."""
.FUNCT RT-AC-TH-INTNUM,CONTEXT
EQUAL? GL-PRSA,V?WAIT-FOR,V?WAIT,V?VERIFY /FALSE
EQUAL? GL-PRSA,V?SHOOT \?CCL5
ICALL1 RT-IMPOSSIBLE-MSG
RTRUE
?CCL5: EQUAL? GL-PLACE-CUR,RM-BANK-VAULT /FALSE
EQUAL? GL-P-NUMBER,-1 \?CCL10
ICALL RT-CYOU-MSG,STR?655,STR?656
PRINTR "not see that here."
?CCL10: ICALL RT-CYOU-MSG,STR?655,STR?656
PRINTR "not need to use a number here."
.FUNCT RT-AC-TH-RING,CONTEXT
ZERO? GL-NOW-PRSI? \FALSE
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?WEAR \FALSE
PRINTR "It's the wrong size."
.FUNCT RT-AC-TH-BOX-KEY,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
IN? TH-BOX-KEY,TH-GUARDS-POCKET /?CTR5
IN? TH-BOX-KEY,CH-BANK-GUARD \?CCL6
?CTR5: ICALL1 RT-CYOU-MSG
PRINTR "can't see it. The guard has it."
?CCL6: ICALL2 RT-CTHEO-PRINT,TH-BOX-KEY
PRINTR " has the word ""Master"" written on it."
?CCL3: ZERO? GL-NOW-PRSI? \FALSE
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?TURN \?CCL15
IN? TH-BOX-KEY,TH-BOX-LOCK \FALSE
EQUAL? TH-BOX-KEY-AUX1,K-GEM-BOX-NUM \?CCL21
FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED \?CCL24
PRINTR "The box is already open."
?CCL24: SET 'TH-SAFETY-DEPOSIT-BOX-AUX1,TH-BOX-KEY-AUX1
ICALL RT-CYOU-MSG,STR?227,STR?707
PRINTI "the box with the key."
FIRST? TH-SAFETY-DEPOSIT-BOX \?CND25
PRINTI " Inside you see "
ICALL2 RT-PRINT-CONTENTS-2,TH-SAFETY-DEPOSIT-BOX
PRINTC 46
?CND25: FSET TH-SAFETY-DEPOSIT-BOX,FL-OPENED
FCLEAR TH-SAFETY-DEPOSIT-BOX,FL-LOCKED
CRLF
RTRUE
?CCL21: ICALL RT-CYOU-MSG,STR?227,STR?707
PRINT K-NOTHING-INSIDE-MSG
ICALL RT-YOU-MSG,STR?808,STR?809
PRINTR "it back up again."
?CCL15: EQUAL? GL-PRSA,V?READ \FALSE
IN? TH-BOX-KEY,TH-GUARDS-POCKET /?CTR30
IN? TH-BOX-KEY,CH-BANK-GUARD \?CCL31
?CTR30: ICALL1 RT-CYOU-MSG
PRINTR "can't see it. The guard has it."
?CCL31: PRINTR "It says, Master."""
.FUNCT RT-AC-TH-BOX-LOCK,CONTEXT,NUM
EQUAL? GL-P-NUMBER,-1 \?CCL3
ZERO? TH-BOX-LOCK-AUX1 \?CND1
PRINT K-SPECIFY-MSG
PRINTR "lock by number."
?CCL3: LESS? GL-P-NUMBER,1 /?CTR6
GRTR? GL-P-NUMBER,999 \?CCL7
?CTR6: PRINTI "There is no lock number "
PRINTN GL-P-NUMBER
PRINTR "."
?CCL7: SET 'TH-BOX-LOCK-AUX1,GL-P-NUMBER
?CND1: SET 'NUM,TH-BOX-LOCK-AUX1
ZERO? GL-NOW-PRSI? /?CCL12
EQUAL? GL-PRSA,V?PUT \?CCL15
EQUAL? GL-PRSO,TH-BOX-KEY \?CCL18
MOVE TH-BOX-KEY,TH-BOX-LOCK
SET 'TH-BOX-KEY-AUX1,TH-BOX-LOCK-AUX1
PRINTR "The key fits nicely."
?CCL18: CALL1 RT-CANT-PUT-IN-ON-MSG
RSTACK
?CCL15: EQUAL? GL-PRSA,V?TAKE \FALSE
EQUAL? GL-PRSO,TH-BOX-KEY \FALSE
IN? TH-BOX-KEY,TH-BOX-LOCK \FALSE
MOVE TH-BOX-KEY,GL-WINNER
SET 'TH-BOX-KEY-AUX1,0
PRINTR "The key comes out smoothly."
?CCL12: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-SAFETY-DEPOSIT-BOX,CONTEXT,NUM
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
SET 'NUM,TH-SAFETY-DEPOSIT-BOX-AUX1
PRINTR "It looks the same as all the other boxes."
?CCL3: EQUAL? GL-P-NUMBER,-1 \?CCL5
ZERO? TH-SAFETY-DEPOSIT-BOX-AUX1 \?CCL8
PRINT K-SPECIFY-MSG
PRINTR "box by number."
?CCL8: FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED \?CND1
SET 'TH-SAFETY-DEPOSIT-BOX-AUX1,600
JUMP ?CND1
?CCL5: LESS? GL-P-NUMBER,1 /?CTR10
GRTR? GL-P-NUMBER,999 \?CCL11
?CTR10: PRINTI "There is no box number "
PRINTN GL-P-NUMBER
PRINTR "."
?CCL11: SET 'TH-SAFETY-DEPOSIT-BOX-AUX1,GL-P-NUMBER
?CND1: SET 'NUM,TH-SAFETY-DEPOSIT-BOX-AUX1
ZERO? GL-NOW-PRSI? /?CCL16
EQUAL? GL-PRSA,V?TAKE,V?PUT,V?FILL /?CCL19
EQUAL? GL-PRSA,V?EMPTY-INTO,V?POUR-FROM \FALSE
?CCL19: EQUAL? NUM,K-GEM-BOX-NUM \?CCL24
FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED /FALSE
?CCL24: ICALL1 RT-CTHEI-PRINT
PRINTR " is closed."
?CCL16: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?UNLOCK,V?OPEN,V?OPEN-WITH \?CCL31
EQUAL? GL-PRSI,FALSE-VALUE,TH-BOX-KEY /?CCL34
ICALL1 RT-CYOU-MSG
PRINTI "can't "
PRINTB GL-P-PRSA-WORD
PRINTC 32
ICALL1 RT-THEO-PRINT
PRINTI " with "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL34: IN? TH-BOX-KEY,GL-WINNER /?CCL36
EQUAL? NUM,TH-BOX-KEY-AUX1 /?CCL36
ICALL RT-CYOU-MSG,STR?655,STR?656
PRINTR "not have the key."
?CCL36: EQUAL? NUM,K-GEM-BOX-NUM \?CCL40
FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED \?CCL43
PRINTR "It is already open."
?CCL43: ICALL RT-CYOU-MSG,STR?227,STR?707
PRINTI "the box with the key."
FIRST? TH-SAFETY-DEPOSIT-BOX \?CND44
PRINTI " Inside you see "
ICALL2 RT-PRINT-CONTENTS-2,TH-SAFETY-DEPOSIT-BOX
PRINTC 46
?CND44: FSET TH-SAFETY-DEPOSIT-BOX,FL-OPENED
FCLEAR TH-SAFETY-DEPOSIT-BOX,FL-LOCKED
CRLF
RTRUE
?CCL40: ICALL RT-CYOU-MSG,STR?227,STR?707
PRINT K-NOTHING-INSIDE-MSG
ICALL RT-YOU-MSG,STR?808,STR?809
PRINTR "it back up again."
?CCL31: EQUAL? GL-PRSA,V?LOCK,V?CLOSE \?CCL47
EQUAL? NUM,K-GEM-BOX-NUM \?CCL50
IN? TH-BOX-KEY,GL-WINNER /?CCL53
EQUAL? NUM,TH-BOX-KEY-AUX1 /?CCL53
ICALL RT-CYOU-MSG,STR?655,STR?656
PRINTR "not have the key."
?CCL53: FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED /?CCL57
PRINT K-CLOSED-AND-LOCKED-MSG
CRLF
RTRUE
?CCL57: ICALL RT-CYOU-MSG,STR?810,STR?811
PRINTI "the box with the key."
FCLEAR TH-SAFETY-DEPOSIT-BOX,FL-OPENED
FSET TH-SAFETY-DEPOSIT-BOX,FL-LOCKED
CRLF
RTRUE
?CCL50: PRINT K-CLOSED-AND-LOCKED-MSG
CRLF
RTRUE
?CCL47: EQUAL? GL-PRSA,V?READ \?CCL59
PRINTN TH-SAFETY-DEPOSIT-BOX-AUX1
CRLF
RTRUE
?CCL59: EQUAL? GL-PRSA,V?LOOK-INSIDE,V?SEARCH \?CCL61
EQUAL? NUM,K-GEM-BOX-NUM \?CTR63
FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED /?CCL64
?CTR63: ICALL1 RT-CTHEO-PRINT
PRINTR " is closed."
?CCL64: PRINTI "Inside "
ICALL1 RT-THEO-PRINT
ICALL RT-YOU-MSG,STR?665,STR?666
ICALL2 RT-PRINT-CONTENTS-2,TH-SAFETY-DEPOSIT-BOX
PRINTR "."
?CCL61: EQUAL? GL-PRSA,V?EMPTY,V?REACH-IN \?CCL68
EQUAL? NUM,K-GEM-BOX-NUM \?CCL71
FSET? TH-SAFETY-DEPOSIT-BOX,FL-OPENED /FALSE
?CCL71: ICALL1 RT-CTHEO-PRINT
PRINTR " is closed."
?CCL68: EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-DIAL,CONTEXT,LOCK?,WHO,PTS
ZERO? CONTEXT \FALSE
ZERO? TH-DIAL-AUX1 \?CND1
SET 'TH-DIAL-AUX1,TH-RIGHT
?CND1: ZERO? GL-NOW-PRSI? \FALSE
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?TUNE-TO \?CCL12
EQUAL? GL-PRSI,FALSE-VALUE,TH-LEFT,TH-RIGHT /?CCL12
ICALL1 RT-CYOU-MSG
PRINTI "can't "
PRINTB GL-P-PRSA-WORD
PRINTC 32
ICALL2 RT-THEO-PRINT,TH-DIAL
PRINTI " to "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL12: EQUAL? GL-PRSA,V?TUNE-TO,V?SPIN,V?TURN \?CCL16
EQUAL? GL-PRSI,FALSE-VALUE,TH-LEFT,TH-RIGHT /?CTR18
EQUAL? GL-PRSI,TH-HANDS \?CCL19
?CTR18: FSET? TH-STETHOSCOPE,FL-WORN /?CCL24
SET 'LOCK?,1
PRINTI "The dial turns smoothly."
CRLF
JUMP ?CND22
?CCL24: EQUAL? GL-LISTEN-OBJ,TH-DIAL,LG-BANK-VAULT-DOOR,RM-BANK-VAULT /?CCL26
SET 'LOCK?,1
PRINTI "The dial turns quietly."
CRLF
JUMP ?CND22
?CCL26: FSET? TH-COTTON-BALLS,FL-WORN \?CCL28
SET 'LOCK?,1
PRINTI "The dial turns with a series of muffled clicks."
CRLF
JUMP ?CND22
?CCL28: FSET? LG-BANK-VAULT-DOOR,FL-OPENED \?CCL30
SET 'LOCK?,2
PRINTI "Clunk."
CRLF
JUMP ?CND22
?CCL30: EQUAL? TH-DIAL-AUX1,GL-PRSI /?CCL32
SET 'LOCK?,1
PRINTI "Clunk."
CRLF
JUMP ?CND22
?CCL32: INC 'TH-DIAL-AUX2
?CND22: EQUAL? LOCK?,1 /?CND17
EQUAL? TH-DIAL-AUX2,1 \?CCL37
SET 'TH-DIAL-AUX1,TH-RIGHT
PRINTI "Whirr."
CRLF
JUMP ?CND17
?CCL37: EQUAL? TH-DIAL-AUX2,2 \?CCL39
SET 'TH-DIAL-AUX1,TH-LEFT
PRINTI "Click."
CRLF
JUMP ?CND17
?CCL39: EQUAL? TH-DIAL-AUX2,3 \?CCL41
SET 'TH-DIAL-AUX1,TH-RIGHT
PRINTI "Click."
CRLF
JUMP ?CND17
?CCL41: EQUAL? TH-DIAL-AUX2,4 \?CCL43
SET 'TH-DIAL-AUX1,TH-RIGHT
PRINTI "Whirr."
CRLF
JUMP ?CND17
?CCL43: EQUAL? TH-DIAL-AUX2,5 \?CND17
SET 'LOCK?,2
PRINTI "Click. Kerchunk. The vault door swings open."
CRLF
CALL1 RT-WHO-SAYS? >WHO
EQUAL? WHO,CH-HOLMES \?CND45
CRLF
PRINTI "Holmes says, ""Splendid, Watson. The net is drawing ever tighter around our quarry."""
CRLF
?CND45: GETP LG-BANK-VAULT-DOOR,P?VALUE >PTS
ZERO? PTS /?CND17
ICALL2 RT-UPDATE-SCORE,PTS
PUTP LG-BANK-VAULT-DOOR,P?VALUE,0
JUMP ?CND17
?CCL19: ICALL1 RT-IMPOSSIBLE-MSG
?CND17: EQUAL? LOCK?,1 \?CCL51
SET 'TH-DIAL-AUX1,0
SET 'TH-DIAL-AUX2,0
RTRUE
?CCL51: EQUAL? LOCK?,2 \TRUE
SET 'TH-DIAL-AUX1,-1
SET 'TH-DIAL-AUX2,-1
FCLEAR LG-BANK-VAULT-DOOR,FL-LOCKED
FSET LG-BANK-VAULT-DOOR,FL-OPENED
RTRUE
?CCL16: EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-BOXES,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "There are rows and rows of safety deposit boxes, all alike, numbered from 1 to 999."
?CCL3: EQUAL? GL-PRSA,V?UNLOCK,V?LOCK,V?OPEN /?CTR4
EQUAL? GL-PRSA,V?CLOSE,V?READ \?CCL5
?CTR4: PRINT K-SPECIFY-MSG
PRINTI "box by number."
CRLF
RETURN 2
?CCL5: EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-GUARDS-POCKET
EQUAL? GL-PRSA,V?LOOK-INSIDE,V?EXAMINE,V?SEARCH \?CCL3
ICALL1 RT-CYOU-MSG
PRINTR "can't see inside the guard's pocket."
?CCL3: EQUAL? GL-PRSA,V?PUT \?CCL5
ICALL1 RT-IMPOSSIBLE-MSG
RTRUE
?CCL5: EQUAL? GL-PRSA,V?TAKE,V?EMPTY,V?REACH-IN /?CCL7
EQUAL? GL-PRSA,V?STEAL \FALSE
?CCL7: ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTR " slaps the offending hand away and says, ""Keep your hands to yourself, mate."""
.FUNCT RT-AC-CH-BANK-GUARD,CONTEXT,GEMCNT,OBJ
ICALL2 RT-THIS-IS-IT,CH-BANK-GUARD
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTR " is lounging against the wall, idly jangling some keys in his pocket and waiting for girls to walk by."
?CCL3: CALL2 RT-TELL-ABOUT?,CH-BANK-GUARD
ZERO? STACK /?CCL5
EQUAL? GL-PRSA,V?WHO,V?WHAT \?CCL8
SET 'OBJ,GL-PRSO
JUMP ?CND6
?CCL8: SET 'OBJ,GL-PRSI
?CND6: PRINT K-GUARD-IGNORES-MSG
CRLF
RTRUE
?CCL5: CALL1 RT-WHO-WHAT-FAIL?
ZERO? STACK /?CCL10
RETURN 2
?CCL10: EQUAL? CONTEXT,K-M-WINNER \?CCL12
EQUAL? GL-PRSA,V?GIVE \?CCL15
EQUAL? GL-PRSO,TH-BOX-KEY,TH-GUARDS-KEYS \?CCL18
PRINT K-SORRY-MATE-MSG
CRLF
RTRUE
?CCL18: EQUAL? GL-PRSO,TH-OPAL,TH-RUBY,TH-SAPPHIRE /?CCL20
EQUAL? GL-PRSO,TH-EMERALD \FALSE
?CCL20: PRINT K-ILL-HOLD-IT-MSG
CRLF
RTRUE
?CCL15: PRINT K-GUARD-IGNORES-MSG
CRLF
RTRUE
?CCL12: ZERO? GL-NOW-PRSI? /?CCL24
EQUAL? GL-PRSA,V?GIVE \?CCL27
EQUAL? GL-PRSO,TH-OPAL,TH-RUBY,TH-SAPPHIRE /?CTR29
EQUAL? GL-PRSO,TH-EMERALD \?CCL30
?CTR29: MOVE GL-PRSO,CH-BANK-GUARD
FSET GL-PRSO,FL-NOALL
INC 'CH-BANK-GUARD-AUX1
SET 'GEMCNT,CH-BANK-GUARD-AUX1
EQUAL? GEMCNT,1 \?CCL35
PRINTR """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."""
?CCL35: EQUAL? GEMCNT,2 \?CCL37
PRINTR """This is even more beautiful than the other one. But it isn't worth taking the risk for only two of them."""
?CCL37: EQUAL? GEMCNT,3 \?CCL39
PRINTR """One more and you're in."""
?CCL39: EQUAL? GEMCNT,4 \TRUE
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTI " looks furtively up and down the street. Then he whispers to you out of the side of his mouth, ""Good enough. Go on in."""
CRLF
ICALL2 RT-UPDATE-SCORE,3
RTRUE
?CCL30: EQUAL? GL-PRSO,TH-BOX-KEY \?CCL42
MOVE TH-BOX-KEY,TH-GUARDS-POCKET
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTR " 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."
?CCL42: EQUAL? GL-PRSO,TH-RED-GLASS \?CCL44
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTI " 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."""
CRLF
CRLF
PRINT K-MORE-VALUABLE-MSG
CRLF
RTRUE
?CCL44: ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTI " examines what you are offering and then declines your bribe."
CRLF
CRLF
PRINT K-MORE-VALUABLE-MSG
CRLF
RTRUE
?CCL27: EQUAL? GL-PRSA,V?TAKE \?CCL46
EQUAL? GL-PRSO,TH-OPAL,TH-RUBY,TH-SAPPHIRE /?CTR48
EQUAL? GL-PRSO,TH-EMERALD \?CCL49
?CTR48: PRINT K-ILL-HOLD-IT-MSG
CRLF
RTRUE
?CCL49: EQUAL? GL-PRSO,TH-BOX-KEY,TH-GUARDS-KEYS \?CCL53
PRINT K-SORRY-MATE-MSG
CRLF
RTRUE
?CCL53: EQUAL? GL-PRSO,CH-BANK-GUARD \FALSE
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINT K-MUST-WEIGH-MSG
CRLF
RTRUE
?CCL46: EQUAL? GL-PRSA,V?SHOW \FALSE
EQUAL? GL-PRSO,TH-OPAL,TH-RUBY,TH-SAPPHIRE /?CTR59
EQUAL? GL-PRSO,TH-EMERALD,TH-RED-GLASS \?CCL60
?CTR59: PRINTR """My, what a loverly gem!"""
?CCL60: EQUAL? GL-PRSO,TH-BOX-KEY \FALSE
MOVE TH-BOX-KEY,TH-GUARDS-POCKET
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINTR " 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."
?CCL24: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?TAKE \?CCL69
EQUAL? GL-PRSI,FALSE-VALUE \FALSE
ICALL2 RT-CTHEO-PRINT,CH-BANK-GUARD
PRINT K-MUST-WEIGH-MSG
CRLF
RTRUE
?CCL69: EQUAL? GL-PRSA,V?ASK-FOR \FALSE
EQUAL? GL-PRSI,TH-BOX-KEY,TH-GUARDS-KEYS \?CCL77
PRINT K-SORRY-MATE-MSG
CRLF
RTRUE
?CCL77: EQUAL? GL-PRSI,TH-OPAL,TH-RUBY,TH-SAPPHIRE /?CCL79
EQUAL? GL-PRSI,TH-EMERALD \FALSE
?CCL79: PRINT K-ILL-HOLD-IT-MSG
CRLF
RTRUE
.FUNCT RT-AC-CH-WIGGINS,CONTEXT,OBJ
ICALL2 RT-THIS-IS-IT,CH-WIGGINS
EQUAL? CONTEXT,K-M-WINNER \?CCL3
FSET? GL-WINNER,FL-ASLEEP \?CCL3
ICALL2 RT-NO-CONDITION-MSG,GL-WINNER
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-CONT \?CCL7
FSET? CH-WIGGINS,FL-ASLEEP \?CCL7
PRINTI "It's bad enough that you wasted the etherium; using it to steal from your friends is quite unsporting. "
RTRUE
?CCL7: EQUAL? CONTEXT,K-M-DESCFCN \?CCL11
FSET? CH-WIGGINS,FL-ASLEEP \?CCL14
PRINTR "Wiggins is still suffering from the effects of the etherium gas."
?CCL14: FSET? CH-WIGGINS,FL-BROKEN \?CND12
FCLEAR CH-WIGGINS,FL-BROKEN
FCLEAR CH-WIGGINS,FL-NODESC
FSET CH-WIGGINS,FL-SEEN
PRINTI "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."""
CRLF
?CND12: CALL2 RT-PICK-NEXT,GL-WIGGINS-DESC-TXT
PRINT STACK
IN? CH-WIGGINS,TH-BOAT \?CCL18
PRINT K-ENJOYING-RIDE-MSG
JUMP ?CND16
?CCL18: IN? CH-WIGGINS,TH-HANSOM-CAB /?CTR19
IN? CH-WIGGINS,TH-GROWLER-CAB \?CCL20
?CTR19: PRINT K-FIDGETING-MSG
JUMP ?CND16
?CCL20: CALL2 RT-PICK-NEXT,GL-WIGGINS-LOOK-TXT
PRINT STACK
?CND16: PRINTC 46
CRLF
RETURN 2
?CCL11: CALL2 RT-TELL-ABOUT?,CH-WIGGINS
ZERO? STACK /?CCL24
EQUAL? GL-PRSA,V?WHO,V?WHAT \?CCL27
SET 'OBJ,GL-PRSO
JUMP ?CND25
?CCL27: SET 'OBJ,GL-PRSI
?CND25: FSET? CH-WIGGINS,FL-ASLEEP \?CCL30
CALL2 RT-NO-CONDITION-MSG,CH-WIGGINS
RSTACK
?CCL30: EQUAL? GL-PRSA,V?WHO \?CCL32
EQUAL? OBJ,CH-WIGGINS \?CCL32
PRINTR """I'm Wiggins, 'ead o' the Baker Street Irregulars."""
?CCL32: EQUAL? OBJ,CH-HOLMES \?CCL36
PRINTR """E's a good man, guv'nor. Best as ever was."""
?CCL36: PRINTR """Beats me. What do you think?"""
?CCL24: CALL1 RT-WHO-WHAT-FAIL?
ZERO? STACK /?CCL38
RETURN 2
?CCL38: EQUAL? CONTEXT,K-M-WINNER \?CCL40
EQUAL? GL-PRSA,V?HELLO \?CCL43
PRINTR """'Ello."""
?CCL43: EQUAL? GL-PRSA,V?GOODBYE \?CCL45
PRINTR """Ta ta."""
?CCL45: EQUAL? GL-PRSA,V?THANK \?CCL47
PRINTR """Anytime, mate."""
?CCL47: EQUAL? GL-PRSA,V?WHERE \?CCL49
PRINTR """Beats me. What do you think?"""
?CCL49: ZERO? CH-WIGGINS-AUX1 \?CCL51
ICALL2 RT-CTHEO-PRINT,CH-WIGGINS
PRINT K-WOUNDED-PRIDE-MSG
CRLF
RTRUE
?CCL51: EQUAL? GL-PRSA,V?ENTER \?CCL53
EQUAL? GL-PRSO,TH-BUTT-OF-MALMSEY \?CCL56
FSET? GL-PRSO,FL-BROKEN /?CCL56
SET 'WIGGINS-COLD?,TRUE-VALUE
PRINTR "Wiggins dutifully climbs into the full butt of malmsey and has a nice bath and gets out again."
?CCL56: EQUAL? GL-PRSO,TH-BUTT-OF-MALMSEY \?CCL60
IN? TH-GARNET,TH-BUTT-OF-MALMSEY \?CCL63
MOVE TH-GARNET,CH-PLAYER
ICALL2 RT-THIS-IS-IT,TH-GARNET
SET 'WIGGINS-COLD?,TRUE-VALUE
FSET TH-GARNET,FL-SEEN
FSET TH-GARNET,FL-TOUCHED
FCLEAR TH-GARNET,FL-NODESC
PRINTI "Wiggins climbs into the empty butt of malmsey, gets the gem, gets out and gives it to you."
CRLF
GETP TH-GARNET,P?VALUE
ICALL2 RT-UPDATE-SCORE,STACK
PUTP TH-GARNET,P?VALUE,0
RTRUE
?CCL63: PRINTR "Wiggins says, ""Once was enough, thank you."""
?CCL60: EQUAL? GL-PRSO,TH-HANSOM-CAB,TH-GROWLER-CAB,TH-BOAT \?CCL65
IN? CH-HOLMES,RM-LAIR \?CCL68
IN? CH-PLAYER,GL-PRSO \?CCL71
PRINTI "Wiggins climbs in next to you."
CRLF
MOVE CH-WIGGINS,GL-PRSO
JUMP ?CND69
?CCL71: PRINT K-AFTER-YOU-MSG
CRLF
?CND69: SET 'GL-PUPPY,CH-WIGGINS
FCLEAR CH-WIGGINS,FL-NODESC
FCLEAR CH-WIGGINS,FL-BROKEN
RTRUE
?CCL68: PRINT K-CANT-LEAVE-MSG
CRLF
RTRUE
?CCL65: EQUAL? GL-PRSO,LG-WATER \FALSE
PRINTR """I ain't no bleedin' mermaid. Besides, bathing ain't 'ealthy."""
?CCL53: EQUAL? GL-PRSA,V?TAKE,V?STEAL \?CCL75
EQUAL? GL-PRSO,TH-GARNET \?CCL78
IN? TH-GARNET,TH-BUTT-OF-MALMSEY \?CCL78
MOVE TH-GARNET,CH-PLAYER
ICALL2 RT-THIS-IS-IT,TH-GARNET
SET 'WIGGINS-COLD?,TRUE-VALUE
FSET TH-GARNET,FL-SEEN
FSET TH-GARNET,FL-TOUCHED
FCLEAR TH-GARNET,FL-NODESC
ICALL2 RT-CTHEO-PRINT,CH-WIGGINS
IN? CH-WIGGINS,TH-BUTT-OF-MALMSEY /?CND81
PRINTI " climbs into the empty butt of malsey,"
?CND81: PRINTI " gets the gem, gets out, and gives it to you."
CRLF
GETP TH-GARNET,P?VALUE
ICALL2 RT-UPDATE-SCORE,STACK
PUTP TH-GARNET,P?VALUE,0
RTRUE
?CCL78: EQUAL? GL-PRSO,TH-GUARDS-POCKET,TH-BOX-KEY,TH-GUARDS-KEYS /?CTR83
EQUAL? GL-PRSI,TH-GUARDS-POCKET,CH-BANK-GUARD \?CCL84
?CTR83: ICALL1 RT-STEAL-KEY
RTRUE
?CCL84: EQUAL? GL-PRSA,V?STEAL \FALSE
PRINTR """I would if I could, guv. But I don't see 'ow to do it."""
?CCL75: EQUAL? GL-PRSA,V?ROB \?CCL90
EQUAL? GL-PRSO,CH-BANK-GUARD \?CCL90
CALL1 RT-STEAL-KEY
RSTACK
?CCL90: EQUAL? GL-PRSA,V?EMPTY,V?REACH-IN,V?SEARCH \?CCL94
EQUAL? GL-PRSO,TH-GUARDS-POCKET,CH-BANK-GUARD /?CTR96
EQUAL? GL-PRSI,TH-GUARDS-POCKET,CH-BANK-GUARD \?CCL97
?CTR96: ICALL1 RT-STEAL-KEY
RTRUE
?CCL97: PRINTR """I would if I could, guv. But I don't see 'ow to do it."""
?CCL94: EQUAL? GL-PRSA,V?FOLLOW \?CCL101
EQUAL? GL-PRSO,CH-ME,CH-PLAYER \?CCL104
IN? CH-HOLMES,RM-LAIR \?CCL107
PRINTI """After you, guv."""
CRLF
SET 'GL-PUPPY,CH-WIGGINS
FCLEAR CH-WIGGINS,FL-NODESC
FCLEAR CH-WIGGINS,FL-BROKEN
RTRUE
?CCL107: PRINT K-CANT-LEAVE-MSG
CRLF
RTRUE
?CCL104: PRINTR """I'm not a bleedin' bloodhound."""
?CCL101: EQUAL? GL-PRSA,V?WAIT \?CCL109
EQUAL? GL-PUPPY,CH-WIGGINS \?CCL112
SET 'GL-PUPPY,FALSE-VALUE
PRINTR """Right. I'm glued to this spot."""
?CCL112: PRINTR """Whatever you say, guv."""
?CCL109: EQUAL? GL-PRSA,V?EXIT \?CCL114
PRINT K-AFTER-YOU-MSG
CRLF
RTRUE
?CCL114: EQUAL? GL-PRSA,V?PULL \?CCL116
EQUAL? GL-PRSO,TH-PORTCULLIS-CHAIN \?CCL116
PRINTR """I can't reach it, guv."""
?CCL116: PRINTR "Wiggins looks at you and scratches his head."
?CCL40: ZERO? GL-NOW-PRSI? /?CCL120
EQUAL? GL-PRSA,V?GIVE \?CCL123
FSET? CH-WIGGINS,FL-ASLEEP \?CCL126
ICALL RT-NO-CONDITION-MSG,CH-WIGGINS,STR?812
RTRUE
?CCL126: EQUAL? GL-PRSO,TH-SHILLING \?CCL128
MOVE TH-SHILLING,CH-WIGGINS
FSET TH-SHILLING,FL-NOALL
SET 'CH-WIGGINS-AUX1,1
ZERO? GL-P-CONT \?CND129
SET 'WINNER-IS-WIGGINS,TRUE-VALUE
?CND129: SET 'GL-P-QCONTEXT-TH,CH-WIGGINS
SET 'GL-P-QCONTEXT-RM,GL-PLACE-CUR
PRINTI "Wiggins looks at "
ICALL2 RT-THEO-PRINT,TH-SHILLING
PRINTR " 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?"""
?CCL128: EQUAL? GL-PRSO,TH-EMERALD,TH-SAPPHIRE,TH-RUBY /?CTR131
EQUAL? GL-PRSO,TH-OPAL,TH-TOPAZ,TH-GARNET /?CTR131
EQUAL? GL-PRSO,TH-POUND-NOTE,TH-SIXPENCE \?CCL132
?CTR131: PRINTI "Wiggins glances at your offer and"
PRINT K-WOUNDED-PRIDE-MSG
CRLF
RTRUE
?CCL132: PRINTR "Wiggins looks at the item you have handed him and then returns it to you. Clearly it was not of interest to him."
?CCL123: EQUAL? GL-PRSA,V?TAKE \FALSE
EQUAL? GL-PRSO,TH-SHILLING \FALSE
FSET? CH-WIGGINS,FL-ASLEEP \?CCL142
PRINTI "He must have hidden it very well. "
ICALL1 RT-CYOU-MSG
PRINTR "can't find it."
?CCL142: PRINTR """Sorry, guv'nor. A deal's a deal."""
?CCL120: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?SMELL \FALSE
ZERO? WIGGINS-COLD? /?CCL150
PRINT K-EAU-DE-MSG
CRLF
RTRUE
?CCL150: PRINTR "Yuck. Eau de urchin."
.FUNCT RT-AC-CH-BUTLER,CONTEXT,WORD-NUM
ICALL2 RT-THIS-IS-IT,CH-BUTLER
EQUAL? CONTEXT,K-M-WINNER \?CCL3
FSET? CH-BUTLER,FL-ASLEEP \?CCL6
CALL2 RT-NO-CONDITION-MSG,CH-BUTLER
RSTACK
?CCL6: EQUAL? GL-PRSA,V?TAKE,V?FIND \?CCL8
CALL RT-IDENTIFY-EVENT?,W?MYCROFT,GL-PRSO
ZERO? STACK /?CCL8
SET 'GL-WINNER,CH-PLAYER
ICALL RT-PERFORM,V?ASK-FOR,CH-BUTLER,TH-EVENT
RTRUE
?CCL8: EQUAL? GL-PRSA,V?HELLO \?CCL12
PRINTC 34
CALL1 RT-TIME-OF-DAY
ZERO? STACK \?CCL15
PRINTI "How do you do?"
JUMP ?CND13
?CCL15: CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2 \?CCL17
PRINTI "Good day."
JUMP ?CND13
?CCL17: CALL1 RT-TIME-OF-DAY
EQUAL? STACK,3 \?CND13
PRINTI "Good evening."
?CND13: PRINTR """"
?CCL12: EQUAL? GL-PRSA,V?GOODBYE \?CCL20
PRINTC 34
CALL1 RT-TIME-OF-DAY
ZERO? STACK \?CCL23
PRINTI "Good night"
JUMP ?CND21
?CCL23: CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2 \?CCL25
PRINTI "Good day"
JUMP ?CND21
?CCL25: CALL1 RT-TIME-OF-DAY
EQUAL? STACK,3 \?CND21
PRINTI "Good evening"
?CND21: PRINTR "."""
?CCL20: EQUAL? GL-PRSA,V?THANK \?CCL28
PRINTR """You're quite welcome."""
?CCL28: EQUAL? GL-PRSA,V?WHO \?CCL30
EQUAL? GL-PRSO,CH-BUTLER \?CCL30
PRINTR """I am one of the staff of this fine establishment."""
?CCL30: EQUAL? GL-PRSA,V?WHO,V?WHAT,V?WHERE \?CCL34
PRINTR """I'm far too discreet to respond."""
?CCL34: EQUAL? GL-PRSA,V?YES,V?NO \?CCL36
ICALL2 RT-CTHEO-PRINT,CH-BUTLER
PRINTR " looks at you expectantly."
?CCL36: EQUAL? GL-PRSA,V?RESCUE \?CCL38
PRINTR """What can I do for you?"""
?CCL38: PRINTR """I'm afraid I am unable to do that."""
?CCL3: ZERO? GL-NOW-PRSI? \?CCL40
EQUAL? GL-PRSA,V?ASK-FOR,V?ASK-ABOUT \FALSE
FSET? CH-BUTLER,FL-ASLEEP \?CCL46
CALL2 RT-NO-CONDITION-MSG,CH-BUTLER
RSTACK
?CCL46: CALL RT-IDENTIFY-EVENT?,W?MYCROFT,GL-PRSI
ZERO? STACK /?CCL48
BTST MYCROFT-STATE,1 \?CCL51
PRINTR """I am very sorry but Mr Mycroft Holmes is not available at this time. Perhaps you would care to come back later?"""
?CCL51: BTST MYCROFT-STATE,2 \?CCL53
BAND MYCROFT-STATE,-3 >MYCROFT-STATE
PRINTI "The butler listens to you and then leaves. He comes back shortly."
CRLF
CRLF
PRINTR """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."""
?CCL53: PRINTR "The butler listens politely but insists that he can do nothing more for you than to deliver the token to Mr Mycroft Holmes."
?CCL48: EQUAL? GL-PRSI,CH-HOLMES \?CCL55
PRINTR """I am afraid that I know the younger Mr Holmes only by his somewhat colourful reputation."""
?CCL55: EQUAL? GL-PRSI,CH-BUTLER \?CCL57
PRINTR """I am well, sir. Thank you for asking."""
?CCL57: EQUAL? GL-PRSI,CH-PLAYER,CH-ME \?CCL59
PRINTR "He looks down his nose at you and sniffs, ""I don't believe we've been introduced."""
?CCL59: EQUAL? GL-PRSI,CH-MEMBERS \?CCL61
PRINTR """They seem livelier than usual for this time of year."""
?CCL61: EQUAL? GL-PRSI,RM-DIOGENES-CLUB \?CCL63
PRINTR "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."""
?CCL63: FSET? GL-PRSI,FL-PERSON \?CCL65
FSET? GL-PRSI,FL-PLURAL \?CCL68
PRINTR """Unfortunately, I can say nothing about them."""
?CCL68: FSET? GL-PRSI,FL-FEMALE \?CCL70
PRINTR """I am sorry but I can tell you nothing about her."""
?CCL70: PRINTR """Much to my regret I can tell you nothing about him."""
?CCL65: PRINTR """I'm afraid I wouldn't know anything about that."""
?CCL40: ZERO? GL-NOW-PRSI? /FALSE
EQUAL? GL-PRSA,V?GIVE \FALSE
FSET? CH-BUTLER,FL-ASLEEP \?CCL78
CALL RT-NO-CONDITION-MSG,CH-BUTLER,STR?812
RSTACK
?CCL78: BTST MYCROFT-STATE,1 \?CCL80
PRINTR "The butler politely declines to take the gift you have offered."
?CCL80: BTST MYCROFT-STATE,2 \?CCL82
PRINTR "The butler refuses to take the item you have offered and asks if you have come to speak with someone here in the club."
?CCL82: EQUAL? GL-PRSO,TH-RING \?CCL84
BOR MYCROFT-STATE,5 >MYCROFT-STATE
REMOVE TH-RING
PRINT K-BUTLER-ACCEPTS-MSG
CRLF
CRLF
PRINTI "After a few moments, Mycroft Holmes appears. He looks very worried."
CRLF
CRLF
PRINTI """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 '"
RANDOM 6 >WORD-NUM
SET 'PASSWORD-ID,WORD-NUM
EQUAL? WORD-NUM,1 \?CCL87
PRINTI "Boleyn"
JUMP ?CND85
?CCL87: EQUAL? WORD-NUM,2 \?CCL89
PRINTI "Cleves"
JUMP ?CND85
?CCL89: EQUAL? WORD-NUM,3 \?CCL91
PRINTI "Howard"
JUMP ?CND85
?CCL91: EQUAL? WORD-NUM,4 \?CCL93
PRINTI "Parr"
JUMP ?CND85
?CCL93: EQUAL? WORD-NUM,5 \?CCL95
PRINTI "Aragon"
JUMP ?CND85
?CCL95: EQUAL? WORD-NUM,6 \?CND85
PRINTI "Seymour"
?CND85: PRINTI "' to the guard at the Byward Tower. He will let you in. Good luck."""
CRLF
CRLF
PRINTI "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."
CRLF
ICALL2 RT-UPDATE-SCORE,1
RTRUE
?CCL84: PRINT K-BUTLER-ACCEPTS-MSG
CRLF
CRLF
PRINTI "The butler soon returns looking concerned."
CRLF
CRLF
PRINTR """I am sorry but Mr Mycroft Holmes says this will not do. Do you have anything else?"""
.FUNCT RT-AC-LG-BANK-VAULT-DOOR,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
EQUAL? GL-PLACE-CUR,RM-BANK-OF-ENGLAND \?CCL6
ICALL2 RT-OPEN-CLOSED-MSG,LG-BANK-VAULT-DOOR
CRLF
CRLF
PRINTR "In the middle of the door you see a big shiny dial."
?CCL6: ICALL2 RT-OPEN-CLOSED-MSG,LG-BANK-VAULT-DOOR
CRLF
CRLF
PRINTR "The inside of the door is shiny and flat."
?CCL3: EQUAL? GL-PRSA,V?OPEN \?CCL8
FSET? LG-BANK-VAULT-DOOR,FL-OPENED \?CCL11
PRINTR "The vault door is already open."
?CCL11: FSET? LG-BANK-VAULT-DOOR,FL-LOCKED \?CCL13
PRINTR "The vault door is locked."
?CCL13: FSET LG-BANK-VAULT-DOOR,FL-OPENED
PRINTR "The vault door swings open."
?CCL8: EQUAL? GL-PRSA,V?CLOSE \?CCL15
FSET? LG-BANK-VAULT-DOOR,FL-OPENED /?CCL18
PRINTR "The vault door is already closed."
?CCL18: FCLEAR LG-BANK-VAULT-DOOR,FL-OPENED
FSET LG-BANK-VAULT-DOOR,FL-LOCKED
SET 'TH-DIAL-AUX1,0
SET 'TH-DIAL-AUX2,0
PRINTI "The vault door swings closed and locks"
IN? CH-PLAYER,RM-BANK-VAULT \?CCL21
PRINTI " you in. Whoops!"
CRLF
CRLF
CALL1 RT-QSR
RSTACK
?CCL21: PRINTR "."
?CCL15: EQUAL? GL-PRSA,V?ENTER,V?THROUGH \?CCL23
EQUAL? GL-PLACE-CUR,RM-BANK-VAULT \?CCL26
CALL2 RT-DO-WALK,P?EAST
RSTACK
?CCL26: EQUAL? GL-PLACE-CUR,RM-BANK-OF-ENGLAND \FALSE
CALL2 RT-DO-WALK,P?WEST
RSTACK
?CCL23: EQUAL? GL-PRSA,V?LOOK-INSIDE \?CCL30
FSET? LG-BANK-VAULT-DOOR,FL-OPENED \?CCL33
ICALL RT-CYOU-MSG,STR?665,STR?666
PRINTI "row upon row of "
ICALL2 DPRINT,TH-BOXES
PRINTR "."
?CCL33: ICALL2 RT-CTHEO-PRINT,LG-BANK-VAULT-DOOR
PRINTR " is closed."
?CCL30: EQUAL? GL-PRSA,V?UNLOCK \?CCL35
FSET? LG-BANK-VAULT-DOOR,FL-OPENED \?CCL38
ICALL2 RT-CTHEO-PRINT,LG-BANK-VAULT-DOOR
PRINTR " is already opened."
?CCL38: PRINT K-HOW-TO-MSG
CRLF
RTRUE
?CCL35: EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
.FUNCT RT-TOPAZ-MSG
EQUAL? GL-PRSO,TH-TOPAZ \FALSE
EQUAL? GL-PUPPY,CH-HOLMES \FALSE
CRLF
PRINTI "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."""
CRLF
CRLF
PRINTR "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."""
.ENDI

972
bank.zil Normal file
View File

@ -0,0 +1,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>)>>

BIN
bark.bin Normal file

Binary file not shown.

BIN
ben2 Normal file

Binary file not shown.

BIN
benclk Normal file

Binary file not shown.

BIN
benclk-ss1 Normal file

Binary file not shown.

32
boot.zabstr Normal file
View File

@ -0,0 +1,32 @@
<DEFINE-ROUTINE RT-META-IN?>
<DEFINE-ROUTINE RT-SEE-INSIDE?>
<DEFINE-ROUTINE RT-VISIBLE?>
<GLOBAL LAST-PSEUDO-LOC <> %<> WORD>
<DEFINE-ROUTINE CLOSED?>
<DEFINE-ROUTINE RT-ACCESSIBLE?>
<DEFINE-ROUTINE RT-DONT-ALL?>
<DEFINE-ROUTINE DPRINT>
<DEFINE-ROUTINE RT-A-PRINT>
<DEFINE-ROUTINE RT-THEO-PRINT>
<DEFINE-ROUTINE RT-CTHEO-PRINT>
<DEFINE-ROUTINE RT-THEI-PRINT>
<DEFINE-ROUTINE RT-CTHEI-PRINT>
<DEFINE-ROUTINE RT-PRINT-SPACES>
<DEFINE-ROUTINE SAY-NUMBER>
<DEFINE-ROUTINE RT-UPDATE-STATUS-LINE>
<DEFINE-ROUTINE RT-REFER-TO-MSG>
<DEFINE-ROUTINE RT-SAY-ROOM-NAME-IF-LIT>
<DEFINE-ROUTINE RT-DESCRIBE-PLACE>
<DEFINE-ROUTINE RT-EXEC-RM-DESCFCN>
<DEFINE-ROUTINE RT-DESCFCN-CONTEXT>
<DEFINE-ROUTINE RT-DESC-ALL>
<DEFINE-ROUTINE RT-GOTO>
<DEFINE-ROUTINE RT-RESET-THEM>
<DEFINE-ROUTINE RT-UPDATE-SCORE>
<DEFINE-ROUTINE RT-UPDATE-MOVES>
<DEFINE-ROUTINE RT-UPDATE-CLOCK>
<DEFINE-ROUTINE RT-MAIN-LOOP>
<DEFINE-ROUTINE RT-TOUCH-VERB?>
<DEFINE-ROUTINE RT-TALK-VERB?>
<DEFINE-ROUTINE RT-AC-CH-PLAYER>

737
boot.zap Normal file
View File

@ -0,0 +1,737 @@
.FUNCT RT-META-IN?,OBJ1,OBJ2
?PRG1: ZERO? OBJ1 /FALSE
IN? OBJ1,ROOMS /FALSE
IN? OBJ1,LOCAL-GLOBALS /FALSE
EQUAL? OBJ1,OBJ2 /TRUE
LOC OBJ1 >OBJ1
JUMP ?PRG1
.FUNCT RT-SEE-INSIDE?,THING
ZERO? THING /FALSE
FSET? THING,FL-SURFACE /TRUE
FSET? THING,FL-CONTAINER \?CCL7
FSET? THING,FL-OPENED /TRUE
FSET? THING,FL-TRANSPARENT /TRUE
?CCL7: FSET? THING,FL-PERSON /?PRD15
FSET? THING,FL-ALIVE \FALSE
?PRD15: EQUAL? THING,CH-PLAYER /FALSE
RTRUE
.FUNCT RT-VISIBLE?,OBJ
CALL RT-ACCESSIBLE?,OBJ,TRUE-VALUE
RSTACK
.FUNCT CLOSED?,WLOC,VISIBLE?
ZERO? WLOC /FALSE
FSET? WLOC,FL-OPENED /FALSE
ZERO? VISIBLE? /?PRD7
FSET? WLOC,FL-TRANSPARENT /FALSE
?PRD7: FSET? WLOC,FL-SURFACE /FALSE
FSET? WLOC,FL-ALIVE /FALSE
IN? WLOC,ROOMS \TRUE
RFALSE
.FUNCT RT-ACCESSIBLE?,OBJ,VISIBLE?,LOC,OLOC,WLOC,RMG,RMGL
GETPT GL-PLACE-CUR,P?GLOBAL >RMG
PTSIZE RMG >RMGL
ZERO? OBJ \?CCL3
SET 'GL-CLOSED-OBJECT,FALSE-VALUE
RFALSE
?CCL3: EQUAL? OBJ,ROOMS /TRUE
EQUAL? OBJ,PSEUDO-OBJECT \?CND1
EQUAL? LAST-PSEUDO-LOC,GL-PLACE-CUR /TRUE
RFALSE
?CND1: LOC GL-WINNER >WLOC
?PRG9: IN? WLOC,ROOMS /?REP10
CALL CLOSED?,WLOC,VISIBLE?
ZERO? STACK \?REP10
LOC WLOC >WLOC
JUMP ?PRG9
?REP10: SET 'OLOC,OBJ
EQUAL? OLOC,WLOC /TRUE
?PRG18: ZERO? OLOC /FALSE
IN? OLOC,GLOBAL-OBJECTS /?CCL23
INTBL? OLOC,RMG,RMGL,1 \?CND22
?CCL23: IN? OLOC,ROOMS \TRUE
EQUAL? OLOC,OBJ /TRUE
RFALSE
?CND22: IN? OLOC,ROOMS /FALSE
LOC OLOC >OLOC
EQUAL? OLOC,WLOC /TRUE
CALL CLOSED?,OLOC,VISIBLE?
ZERO? STACK /?PRG18
IN? OLOC,GLOBAL-OBJECTS /TRUE
INTBL? OLOC,RMG,RMGL,1 /TRUE
SET 'GL-CLOSED-OBJECT,OLOC
SET 'GL-IN-OUT,TRUE-VALUE
RFALSE
.FUNCT RT-DONT-ALL?,O,I,L
LOC O >L
ZERO? L /TRUE
EQUAL? O,I /TRUE
FSET? O,FL-BODYPART /TRUE
FSET? O,FL-NOALL /TRUE
EQUAL? GL-PRSA,V?TAKE \?CCL11
ZERO? I \?CCL14
CALL RT-META-IN?,O,GL-WINNER
ZERO? STACK /?CCL14
IN? O,GL-WINNER /TRUE
GET GL-P-NAMW,0
ZERO? STACK /TRUE
GET GL-P-BUTS,K-P-MATCHLEN
ZERO? STACK \TRUE
?CCL14: FSET? O,FL-TAKEABLE /?CCL22
FSET? O,FL-TRYTAKE \TRUE
?CCL22: FSET? L,FL-PERSON \?CCL26
EQUAL? L,I \TRUE
?CCL26: FSET? L,FL-CONTAINER \?CCL30
FSET? L,FL-OPENED \TRUE
?CCL30: ZERO? I /?CCL34
EQUAL? L,I \TRUE
CALL2 RT-SEE-INSIDE?,I
ZERO? STACK /TRUE
RFALSE
?CCL34: EQUAL? L,GL-PLACE-CUR /FALSE
CALL2 RT-SEE-INSIDE?,L
ZERO? STACK /TRUE
RFALSE
?CCL11: EQUAL? GL-PRSA,V?DROP,V?PUT,V?PUT-ON /?CTR44
EQUAL? GL-PRSA,V?THROW,V?THROW-OVER \FALSE
?CTR44: EQUAL? O,TH-POCKET /TRUE
EQUAL? L,TH-POCKET /TRUE
FSET? O,FL-WORN /TRUE
EQUAL? L,GL-WINNER /FALSE
RTRUE
.FUNCT DPRINT,O,X
FSET? O,FL-HAS-SDESC \?CCL3
GETP O,P?ACTION >X
ZERO? X /?CCL3
CALL X,K-M-SDESC
RSTACK
?CCL3: PRINTD O
RTRUE
.FUNCT RT-A-PRINT,O
ICALL RT-THEO-PRINT,O,FALSE-VALUE,K-DESC-A
RTRUE
.FUNCT RT-THEO-PRINT,O,CAP?,CLASS,?TMP1
ASSIGNED? 'CLASS /?CND1
SET 'CLASS,K-DESC-THE
?CND1: ZERO? O \?CND3
SET 'O,GL-PRSO
?CND3: ZERO? CAP? /?PRG7
DIROUT K-D-SCR-OFF
DIROUT K-D-TBL-ON,GL-DIROUT-TBL
?PRG7: FSET? O,FL-NOARTC /?CCL11
FSET? O,FL-YOUR \?CCL14
PRINTI "your"
JUMP ?CND12
?CCL14: EQUAL? CLASS,K-DESC-ANY \?CCL16
PRINTI "any"
JUMP ?CND12
?CCL16: EQUAL? CLASS,K-DESC-THE /?CTR17
FSET? O,FL-PLURAL \?CCL18
FSET? O,FL-PERSON \?CCL18
?CTR17: PRINTI "the"
JUMP ?CND12
?CCL18: FSET? O,FL-PLURAL \?CCL24
FSET? O,FL-PERSON /?CCL24
PRINTI "some"
JUMP ?CND12
?CCL24: EQUAL? O,LG-WATER /?CND12
FSET? O,FL-VOWEL \?CCL30
PRINTI "an"
JUMP ?CND12
?CCL30: PRINTC 97
?CND12: PRINTC 32
?CND9: EQUAL? O,CH-ME \?CCL34
ZERO? CAP? /?CCL34
PRINTI "you"
JUMP ?REP8
?CCL11: FSET? O,FL-HAS-SDESC \?CND9
GETP O,P?ACTION
ICALL STACK,K-M-SDESC,CLASS
JUMP ?REP8
?CCL34: ICALL2 DPRINT,O
?REP8: ZERO? CAP? /TRUE
DIROUT K-D-TBL-OFF
DIROUT K-D-SCR-ON
GETB GL-DIROUT-TBL,2 >CAP?
LESS? CAP?,97 /?CND39
GRTR? CAP?,122 /?CND39
SUB CAP?,32
PUTB GL-DIROUT-TBL,2,STACK
?CND39: ADD GL-DIROUT-TBL,2 >?TMP1
GET GL-DIROUT-TBL,0
PRINTT ?TMP1,STACK
RTRUE
.FUNCT RT-CTHEO-PRINT,O
CALL RT-THEO-PRINT,O,TRUE-VALUE
RSTACK
.FUNCT RT-THEI-PRINT,I
ZERO? I \?CND1
SET 'I,GL-PRSI
?CND1: CALL2 RT-THEO-PRINT,I
RSTACK
.FUNCT RT-CTHEI-PRINT,I
ZERO? I \?CND1
SET 'I,GL-PRSI
?CND1: CALL RT-THEO-PRINT,I,TRUE-VALUE
RSTACK
.FUNCT RT-PRINT-SPACES,N,AMT
?PRG1: GRTR? N,GL-BLANKS-LEN \?CCL5
SET 'AMT,GL-BLANKS-LEN
JUMP ?CND3
?CCL5: SET 'AMT,N
?CND3: PRINTT GL-BLANKS,AMT
SUB N,AMT >N
GRTR? N,0 /?PRG1
RTRUE
.FUNCT SAY-NUMBER,N,X
SET 'X,10000
?PRG1: LESS? N,X \?REP2
PRINTC 32
DIV X,10 >X
LESS? X,10 \?PRG1
?REP2: PRINTN N
RTRUE
.FUNCT RT-UPDATE-STATUS-LINE
GET 0,8
BTST STACK,4 \?CND1
ICALL2 RT-INIT-SCREEN,TRUE-VALUE
GET 0,8
BAND STACK,-5
PUT 0,8,STACK
?CND1: SCREEN K-S-WIN
HLIGHT K-H-INV
EQUAL? GL-PLACE-CUR,GL-PLACE-STS /?CND3
ZERO? GL-SHORT-STAT? /?CCL7
CURSET GL-SPLIT-ROW,1
JUMP ?CND5
?CCL7: CURSET GL-SPLIT-ROW,2
?CND5: ICALL2 RT-PRINT-SPACES,GL-STAT-MAX-ROOM
CURSET GL-SPLIT-ROW,2
CALL RT-SAY-ROOM-NAME-IF-LIT,GL-PLACE-CUR,FALSE-VALUE,TRUE-VALUE
ZERO? STACK /?CCL10
SET 'GL-PLACE-STS,GL-PLACE-CUR
JUMP ?CND3
?CCL10: SET 'GL-PLACE-STS,-1
?CND3: EQUAL? GL-SCORE-CUR,GL-SCORE-STS /?CND11
SET 'GL-SCORE-STS,GL-SCORE-CUR
ADD GL-SCORE-HEADER-LEN,GL-STAT-S-POS
CURSET GL-SPLIT-ROW,STACK
ICALL2 SAY-NUMBER,GL-SCORE-CUR
?CND11: CURSET GL-SPLIT-ROW,GL-STAT-T-POS
ZERO? GL-SHORT-STAT? /?CCL15
ICALL2 RT-CLK-DOW-MSG,3
PRINTC 32
ICALL2 RT-CLK-NTI-MSG,22
JUMP ?CND13
?CCL15: ICALL2 RT-CLK-DOW-MSG,5
ADD 10,GL-STAT-T-POS
CURSET GL-SPLIT-ROW,STACK
ICALL2 RT-CLK-NTI-MSG,7
?CND13: HLIGHT K-H-NRM
SCREEN K-S-NOR
RTRUE
.FUNCT RT-REFER-TO-MSG
PRINTR "[To what are you referring?]"
.FUNCT RT-SAY-ROOM-NAME-IF-LIT,HERE,FORCE?,SL?,LEN,MAXLEN,LC,X,CNT
ASSIGNED? 'HERE /?CND1
SET 'HERE,GL-PLACE-CUR
?CND1: SET 'MAXLEN,300
SET 'CNT,2
ZERO? SL? /?CND3
SET 'MAXLEN,GL-STAT-MAX-ROOM
?CND3: ZERO? FORCE? \?CTR6
ZERO? GL-NOW-LIT? /?CCL7
?CTR6: DIROUT K-D-SCR-OFF
DIROUT K-D-TBL-ON,GL-DIROUT-TBL
ICALL2 DPRINT,HERE
DIROUT K-D-TBL-OFF
DIROUT K-D-SCR-ON
GET GL-DIROUT-TBL,0 >LEN
INC 'LEN
PUT GL-DIROUT-TBL,0,0
GRTR? LEN,1 \?CCL12
SET 'LC,32
?PRG13: GETB GL-DIROUT-TBL,CNT >X
LESS? X,97 /?CND15
GRTR? X,122 /?CND15
EQUAL? CNT,2 /?CCL20
EQUAL? LC,32 \?CND15
?CCL20: SUB X,32 >X
?CND15: PRINTC X
SET 'LC,X
IGRTR? 'CNT,LEN /TRUE
GRTR? CNT,MAXLEN \?PRG13
RTRUE
?CCL12: GET GL-DIROUT-TBL,2
PRINTC STACK
RTRUE
?CCL7: PRINTI "Darkness"
RFALSE
.FUNCT RT-DESCRIBE-PLACE,PLACE,LOOK
ZERO? PLACE \?CND1
SET 'PLACE,GL-PLACE-CUR
?CND1: CALL RT-IS-LIT?,PLACE,TRUE-VALUE
ZERO? STACK \?CND3
PRINT K-TOO-DARK-MSG
CRLF
RTRUE
?CND3: HLIGHT K-H-BLD
ICALL RT-SAY-ROOM-NAME-IF-LIT,PLACE,TRUE-VALUE
CRLF
CRLF
HLIGHT K-H-NRM
ZERO? LOOK /?CCL7
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-3
RSTACK
?CCL7: FSET? PLACE,FL-TOUCHED /?CCL9
FSET PLACE,FL-TOUCHED
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-1
RSTACK
?CCL9: EQUAL? GL-DESC-LEVEL,2 \?CCL11
CALL RT-EXEC-RM-DESCFCN,PLACE,K-M-DESC-2
RSTACK
?CCL11: EQUAL? GL-DESC-LEVEL,1 /TRUE
ZERO? GL-DESC-LEVEL /FALSE
RFALSE
.FUNCT RT-EXEC-RM-DESCFCN,PLACE,CONTEXT,DF
FSET? PLACE,FL-HAS-DESCFCN \TRUE
GETP PLACE,P?ACTION
CALL STACK,CONTEXT
ZERO? STACK /TRUE
RFALSE
.FUNCT RT-DESCFCN-CONTEXT,CONTEXT
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2,K-M-DESC-3 /TRUE
RFALSE
.FUNCT RT-DESC-ALL,PLACE,LOOK,HOLMES-IN-HOUSE?
CALL RT-DESCRIBE-PLACE,PLACE,LOOK
ZERO? STACK /?CND1
ICALL RT-DESCRIBE-PLACE-CONTENTS,PLACE,LOOK
?CND1: CALL RT-IS-LIT?,PLACE,TRUE-VALUE
ZERO? STACK /TRUE
ZERO? GL-PUPPY-MSG? \?CCL7
SET 'GL-PUPPY-MSG?,TRUE-VALUE
RTRUE
?CCL7: ZERO? GL-PUPPY /TRUE
EQUAL? GL-PUPPY,CH-HOLMES \?CCL11
CRLF
CALL2 RT-PICK-NEXT,GL-HOLMES-DESC-TXT
PRINT STACK
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL,RM-PARLOUR,RM-VESTIBULE /?CCL13
EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY,RM-HOLMES-BEDROOM \?CND12
?CCL13: SET 'HOLMES-IN-HOUSE?,TRUE-VALUE
?CND12: ZERO? LOOK /?CCL18
IN? CH-HOLMES,TH-BOAT \?CCL21
PRINT K-SEASICK-MSG
JUMP ?CND19
?CCL21: IN? CH-HOLMES,TH-HANSOM-CAB /?CTR22
IN? CH-HOLMES,TH-GROWLER-CAB \?CCL23
?CTR22: PRINT K-SITTING-QUIETLY-MSG
JUMP ?CND19
?CCL23: ZERO? HOLMES-IN-HOUSE? /?CCL27
CALL2 RT-PICK-NEXT,GL-HOLMES-HOUSE-LOOK-TXT
PRINT STACK
JUMP ?CND19
?CCL27: FSET? GL-PLACE-CUR,FL-INDOORS \?CCL29
CALL2 RT-PICK-NEXT,GL-HOLMES-INDOORS-LOOK-TXT
PRINT STACK
JUMP ?CND19
?CCL29: CALL2 RT-PICK-NEXT,GL-HOLMES-OUTDOORS-LOOK-TXT
PRINT STACK
?CND19: PRINTR "."
?CCL18: EQUAL? GL-DESC-LEVEL,2,1 \TRUE
ZERO? HOLMES-IN-HOUSE? /?CCL33
CALL2 RT-PICK-NEXT,GL-HOLMES-HOUSE-ENTER-TXT
PRINT STACK
JUMP ?CND31
?CCL33: FSET? GL-PLACE-CUR,FL-INDOORS \?CCL35
CALL2 RT-PICK-NEXT,GL-HOLMES-INDOORS-ENTER-TXT
PRINT STACK
JUMP ?CND31
?CCL35: CALL2 RT-PICK-NEXT,GL-HOLMES-OUTDOORS-ENTER-TXT
PRINT STACK
?CND31: PRINTR "."
?CCL11: EQUAL? GL-PUPPY,CH-WIGGINS \TRUE
CRLF
CALL2 RT-PICK-NEXT,GL-WIGGINS-DESC-TXT
PRINT STACK
ZERO? LOOK /?CCL39
IN? CH-WIGGINS,TH-BOAT \?CCL42
PRINT K-ENJOYING-RIDE-MSG
JUMP ?CND40
?CCL42: IN? CH-WIGGINS,TH-HANSOM-CAB /?CTR43
IN? CH-WIGGINS,TH-GROWLER-CAB \?CCL44
?CTR43: PRINT K-FIDGETING-MSG
JUMP ?CND40
?CCL44: CALL2 RT-PICK-NEXT,GL-WIGGINS-LOOK-TXT
PRINT STACK
?CND40: PRINTR "."
?CCL39: EQUAL? GL-DESC-LEVEL,2,1 \TRUE
CALL2 RT-PICK-NEXT,GL-WIGGINS-ENTER-TXT
PRINT STACK
PRINTR "."
.FUNCT RT-GOTO,NEWPLACE,X,NEWLIT?,OLDPLACE,AMP?,SS?
SET 'OLDPLACE,GL-PLACE-CUR
MOVE CH-PLAYER,NEWPLACE
SET 'GL-PLACE-CUR,NEWPLACE
CALL1 RT-IS-LIT? >NEWLIT?
MOVE CH-PLAYER,OLDPLACE
SET 'GL-PLACE-CUR,OLDPLACE
ZERO? NEWLIT? \?CND1
ICALL2 TOO-DARK-TO-GO,NEWPLACE
RTRUE
?CND1: GETP GL-PLACE-CUR,P?ACTION
CALL STACK,K-M-EXIT >X
FSET? OLDPLACE,FL-INDOORS /?CND3
FSET? NEWPLACE,FL-INDOORS /?CND3
ICALL RT-CLOCK-JMP,0,5,0
?CND3: SET 'GL-PLACE-PRV,OLDPLACE
SET 'GL-PLACE-CUR,NEWPLACE
CALL1 RT-IS-LIT? >GL-NOW-LIT?
MOVE CH-PLAYER,GL-PLACE-CUR
GETP GL-PLACE-CUR,P?ACTION
CALL STACK,K-M-ENTERING >X
ZERO? GL-PUPPY /?CCL9
LOC CH-PLAYER
MOVE GL-PUPPY,STACK
JUMP ?CND7
?CCL9: ZERO? GL-FORMER-PUPPY /?CND7
IN? GL-FORMER-PUPPY,GL-PLACE-CUR \?CND7
FSET? GL-FORMER-PUPPY,FL-ASLEEP /?CND7
SET 'GL-PUPPY,GL-FORMER-PUPPY
SET 'GL-FORMER-PUPPY,FALSE-VALUE
?CND7: ICALL1 RT-DESC-ALL
IN? TH-ETHERIUM-AMPOULE,CH-PLAYER \?PST15
FSET? TH-ETHERIUM-AMPOULE,FL-BROKEN /?PRD18
SET 'AMP?,1
JUMP ?PEN14
?PRD18: SET 'AMP?,0
JUMP ?PEN14
?PST15: SET 'AMP?,0
?PEN14: FSET? TH-STETHOSCOPE,FL-WORN /?PRD20
PUSH 0
JUMP ?PRD21
?PRD20: PUSH 1
?PRD21: SET 'SS?,STACK
ZERO? AMP? \?CCL23
ZERO? SS? /?CND22
?CCL23: ICALL HOLMES-COMPLAINS,AMP?,SS?
?CND22: GETP GL-PLACE-CUR,P?ACTION
CALL STACK,K-M-ENTERED >X
ICALL1 RT-RESET-THEM
IN? TH-ETHERIUM-GAS,GL-PLACE-CUR \TRUE
ICALL1 RT-SMELL-ETHERIUM?
RTRUE
.FUNCT RT-RESET-THEM
CALL2 RT-VISIBLE?,GL-P-IT-OBJECT
ZERO? STACK \?CND1
SET 'GL-P-IT-OBJECT,TH-NOT-HERE-OBJECT
?CND1: CALL2 RT-VISIBLE?,GL-P-THEM-OBJECT
ZERO? STACK \?CND3
SET 'GL-P-THEM-OBJECT,TH-NOT-HERE-OBJECT
?CND3: CALL2 RT-VISIBLE?,GL-P-HIM-OBJECT
ZERO? STACK \?CND5
SET 'GL-P-HIM-OBJECT,TH-NOT-HERE-OBJECT
?CND5: CALL2 RT-VISIBLE?,GL-P-HER-OBJECT
ZERO? STACK \TRUE
SET 'GL-P-HER-OBJECT,TH-NOT-HERE-OBJECT
RTRUE
.FUNCT RT-UPDATE-SCORE,PTS
ASSIGNED? 'PTS /?CND1
SET 'PTS,1
?CND1: ADD GL-SCORE-CUR,PTS >GL-SCORE-CUR
CALL2 RT-NEW-SCORE-MSG,PTS
RSTACK
.FUNCT RT-UPDATE-MOVES,MVS
ASSIGNED? 'MVS /?CND1
SET 'MVS,1
?CND1: ZERO? GL-CLOCK-WAIT \FALSE
ZERO? GL-CLOCK-STOP \FALSE
ADD GL-MOVES-CUR,MVS >GL-MOVES-CUR
RETURN GL-MOVES-CUR
.FUNCT RT-UPDATE-CLOCK,HRS,MIN,SEC
ZERO? HRS \?CCL2
ZERO? MIN \?CCL2
ZERO? SEC /?CND1
?CCL2: ICALL RT-DO-CLOCK-SET,GL-TIME-UPDT-INC,HRS,MIN,SEC
?CND1: CALL1 RT-CLOCK-INC
RSTACK
.FUNCT RT-MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,X,TOUCH-VERB?,MYCROFT?,TV,?TMP1
?PRG1: SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
SET 'GL-P-MULT?,FALSE-VALUE
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM /?CND3
SET 'GL-P-QCONTEXT-TH,FALSE-VALUE
?CND3: CALL1 RT-PARSER >GL-P-GOOD
ZERO? GL-P-GOOD /?CCL7
GET GL-P-PRSI,K-P-MATCHLEN >ICNT
GET GL-P-PRSO,K-P-MATCHLEN >OCNT
ZERO? GL-P-IT-OBJECT /?CND8
CALL2 RT-ACCESSIBLE?,GL-P-IT-OBJECT
ZERO? STACK /?CND8
SET 'TMP,FALSE-VALUE
?PRG12: IGRTR? 'CNT,ICNT /?REP13
GET GL-P-PRSI,CNT
EQUAL? STACK,TH-IT \?PRG12
PUT GL-P-PRSI,CNT,GL-P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP13: ZERO? TMP \?CND19
SET 'CNT,0
?PRG21: IGRTR? 'CNT,OCNT /?CND19
GET GL-P-PRSO,CNT
EQUAL? STACK,TH-IT \?PRG21
PUT GL-P-PRSO,CNT,GL-P-IT-OBJECT
?CND19: SET 'CNT,0
?CND8: ZERO? OCNT \?CCL30
SET 'NUM,OCNT
JUMP ?CND28
?CCL30: GRTR? OCNT,1 \?CCL32
SET 'TBL,GL-P-PRSO
ZERO? ICNT \?CCL35
SET 'OBJ,FALSE-VALUE
JUMP ?CND33
?CCL35: GET GL-P-PRSI,1 >OBJ
?CND33: SET 'NUM,OCNT
JUMP ?CND28
?CCL32: GRTR? ICNT,1 \?CCL37
SET 'PTBL,FALSE-VALUE
SET 'TBL,GL-P-PRSI
GET GL-P-PRSO,1 >OBJ
SET 'NUM,ICNT
JUMP ?CND28
?CCL37: SET 'NUM,1
?CND28: ZERO? OBJ \?CND38
EQUAL? ICNT,1 \?CND38
GET GL-P-PRSI,1 >OBJ
?CND38: EQUAL? GL-PRSA,V?WALK \?CCL44
CALL RT-PERFORM,GL-PRSA,GL-PRSO >V
JUMP ?CND42
?CCL44: ZERO? NUM \?CCL46
GETB GL-P-SYNTAX,0
SHIFT STACK,-6
ZERO? STACK \?CCL49
CALL2 RT-PERFORM,GL-PRSA >V
SET 'GL-PRSO,FALSE-VALUE
JUMP ?CND42
?CCL49: ZERO? GL-NOW-LIT? \?CCL51
ICALL1 RT-P-CLEAR
PRINT K-TOO-DARK-MSG
CRLF
JUMP ?CND42
?CCL51: ICALL1 RT-P-CLEAR
PRINTI "[There isn't anything to "
GET GL-P-ITBL,K-P-VERBN >TMP
CALL1 RT-TALK-VERB?
ZERO? STACK /?CCL54
PRINTI "talk to"
JUMP ?CND52
?CCL54: ZERO? GL-P-MERGED \?CTR55
ZERO? GL-P-ORPH /?CCL56
?CTR55: GET TMP,0
PRINTB STACK
JUMP ?CND52
?CCL56: GETB TMP,2 >?TMP1
GETB TMP,3
CALL RT-WORD-PRINT,?TMP1,STACK >V
?CND52: PRINTI ".]"
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND42
?CCL46: SET 'X,0
GRTR? NUM,1 \?CND59
SET 'GL-P-MULT?,TRUE-VALUE
?CND59: SET 'TMP,FALSE-VALUE
?PRG61: IGRTR? 'CNT,NUM \?CCL65
GRTR? X,0 \?CCL68
PRINTI "[The "
EQUAL? X,NUM /?CND69
PRINTI "other "
?CND69: PRINTI "object"
EQUAL? X,1 /?CND71
PRINTC 115
?CND71: PRINTI " that you mentioned "
EQUAL? X,1 /?CCL75
PRINTI "are"
JUMP ?CND73
?CCL75: PRINTI "is"
?CND73: PRINTI "n't here.]"
CRLF
JUMP ?REP62
?CCL68: ZERO? TMP \?REP62
ICALL1 RT-REFER-TO-MSG
JUMP ?REP62
?CCL65: ZERO? PTBL /?CCL79
GET GL-P-PRSO,CNT >OBJ1
JUMP ?CND77
?CCL79: GET GL-P-PRSI,CNT >OBJ1
?CND77: GRTR? NUM,1 /?CCL81
GET GL-P-ITBL,K-P-NC1
GET STACK,0
EQUAL? STACK,W?ALL,W?EVERYTHING \?CND80
?CCL81: EQUAL? OBJ1,TH-NOT-HERE-OBJECT \?CCL86
INC 'X
JUMP ?PRG61
?CCL86: EQUAL? GL-P-GET-FLAGS,K-P-ALL \?CCL88
CALL RT-DONT-ALL?,OBJ1,OBJ
ZERO? STACK \?PRG61
?CCL88: CALL2 RT-ACCESSIBLE?,OBJ1
ZERO? STACK /?PRG61
EQUAL? OBJ1,CH-PLAYER /?PRG61
EQUAL? OBJ1,TH-IT \?CCL97
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
JUMP ?CND95
?CCL97: ICALL2 RT-CTHEO-PRINT,OBJ1
?CND95: PRINTI ": "
?CND80: SET 'TMP,TRUE-VALUE
ZERO? PTBL /?CCL100
SET 'GL-PRSO,OBJ1
JUMP ?CND98
?CCL100: SET 'GL-PRSO,OBJ
?CND98: ZERO? PTBL /?CCL103
SET 'GL-PRSI,OBJ
JUMP ?CND101
?CCL103: SET 'GL-PRSI,OBJ1
?CND101: EQUAL? GL-WINNER,CH-BUTLER \?CND104
GET GL-P-NAMW,0
EQUAL? STACK,W?HOLMES,W?MYCROFT \?CND104
SET 'MYCROFT?,TRUE-VALUE
SET 'TOUCH-VERB?,FALSE-VALUE
?CND104: ZERO? MYCROFT? \?CND108
EQUAL? GL-PRSA,V?FIND /?CND108
CALL1 RT-TOUCH-VERB? >TOUCH-VERB?
ZERO? TOUCH-VERB? \?CCL109
INTBL? GL-PRSA,GL-SEE-VERBS+2,20 >TV \?CND108
?CCL109: ZERO? GL-PRSO /?CCL117
CALL2 RT-VISIBLE?,GL-PRSO
ZERO? STACK \?CCL117
ICALL2 RT-CANT-SEE-ANY-MSG,GL-PRSO
GRTR? OCNT,1 /?PRG61
SET 'V,FATAL-VALUE
JUMP ?REP62
?CCL117: ZERO? GL-PRSI /?CND108
CALL2 RT-VISIBLE?,GL-PRSI
ZERO? STACK \?CND108
ICALL2 RT-CANT-SEE-ANY-MSG,GL-PRSI
GRTR? ICNT,1 /?PRG61
SET 'V,FATAL-VALUE
JUMP ?REP62
?CND108: ZERO? TOUCH-VERB? /?CND127
ZERO? GL-PRSO /?CCL131
CALL2 RT-ACCESSIBLE?,GL-PRSO
ZERO? STACK \?CCL131
ICALL RT-CANT-TOUCH-MSG,GL-PRSO,GL-CLOSED-OBJECT,GL-IN-OUT
GRTR? OCNT,1 /?PRG61
SET 'V,FATAL-VALUE
JUMP ?REP62
?CCL131: ZERO? GL-PRSI /?CND127
CALL2 RT-ACCESSIBLE?,GL-PRSI
ZERO? STACK \?CND127
ICALL RT-CANT-TOUCH-MSG,GL-PRSI,GL-CLOSED-OBJECT,GL-IN-OUT
GRTR? ICNT,1 /?PRG61
SET 'V,FATAL-VALUE
JUMP ?REP62
?CND127: CALL RT-PERFORM,GL-PRSA,GL-PRSO,GL-PRSI >V
EQUAL? V,FATAL-VALUE \?PRG61
?REP62: ZERO? GL-P-OVERFLOW /?CND42
CRLF
PRINTI "[Note: There are so many objects here that a few may have been overlooked. Please double check to make sure you have accomplished what you intended.]"
CRLF
?CND42: EQUAL? V,FATAL-VALUE \?CND5
SET 'GL-P-CONT,FALSE-VALUE
JUMP ?CND5
?CCL7: SET 'GL-P-CONT,FALSE-VALUE
?CND5: ZERO? GL-P-GOOD /?CND147
EQUAL? V,FATAL-VALUE /?CND147
INTBL? GL-PRSA,GL-GAME-VERBS+2,10 >TV /?CND147
ICALL1 RT-UPDATE-MOVES
ICALL1 RT-UPDATE-CLOCK
ICALL1 RT-ALARM-CHK
?CND147: ICALL1 RT-TIME-OF-DAY-MSG
SET 'GL-PRSA,FALSE-VALUE
SET 'GL-PRSO,FALSE-VALUE
SET 'GL-PRSI,FALSE-VALUE
JUMP ?PRG1
.FUNCT RT-TOUCH-VERB?
INTBL? GL-PRSA,GL-TOUCH-VERBS+2,69 /?BOGUS1
?BOGUS1: RSTACK
.FUNCT RT-TALK-VERB?
INTBL? GL-PRSA,GL-TALK-VERBS+2,19 /?BOGUS1
?BOGUS1: RSTACK
.FUNCT RT-AC-CH-PLAYER,CONTEXT
SET 'GL-WAIT-BELL,FALSE-VALUE
EQUAL? CONTEXT,K-M-WINNER \?CCL3
EQUAL? GL-PRSA,V?TELL \?CCL6
SET 'GL-CLOCK-WAIT,FALSE-VALUE
RFALSE
?CCL6: EQUAL? GL-PRSO,TH-HANDS /?PRD10
EQUAL? GL-PRSI,TH-HANDS \?CCL8
?PRD10: CALL1 RT-CHECK-HANDS
ZERO? STACK \FALSE
?CCL8: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
FSET? TH-HANDS,FL-LOCKED \FALSE
CALL1 RT-HANDS-COVERING-EARS
RSTACK
?CCL3: CALL1 RT-AC-CH-PLAYER-AUX
RSTACK
.ENDI

743
boot.zil Normal file
View File

@ -0,0 +1,743 @@
<ROUTINE RT-META-IN? (OBJ1 OBJ2)
<REPEAT ()
<COND (<OR <MC-F? .OBJ1>
<IN? .OBJ1 ,ROOMS>
<IN? .OBJ1 ,LOCAL-GLOBALS>>
<RFALSE>)
(<EQUAL? .OBJ1 .OBJ2>
<RTRUE>)>
<SET OBJ1 <LOC .OBJ1>>>>
<ROUTINE RT-SEE-INSIDE? (THING)
<COND (<MC-F? .THING>
<RFALSE>)
(<MC-IS? .THING ,FL-SURFACE>
<RTRUE>)
(<AND <MC-IS? .THING ,FL-CONTAINER>
; "All vehicles are also containers"
;<OR <MC-IS? .THING ,FL-CONTAINER>
<MC-IS? .THING ,FL-VEHICLE>>
<OR <MC-IS? .THING ,FL-OPENED>
<MC-IS? .THING ,FL-TRANSPARENT>>>
<RTRUE>)
(<AND <OR <MC-IS? .THING ,FL-PERSON>
<MC-IS? .THING ,FL-ALIVE>>
<NOT <EQUAL? .THING ,CH-PLAYER>>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE RT-VISIBLE? (OBJ)
<RT-ACCESSIBLE? .OBJ T>>
<GLOBAL LAST-PSEUDO-LOC <>>
<ROUTINE CLOSED? (WLOC VISIBLE?)
<COND (<AND <T? .WLOC>
<MC-ISNOT? .WLOC ,FL-OPENED>
<OR <NOT .VISIBLE?>
<MC-ISNOT? .WLOC ,FL-TRANSPARENT>>
<MC-ISNOT? .WLOC ,FL-SURFACE>
<MC-ISNOT? .WLOC ,FL-ALIVE>
<NOT <IN? .WLOC ,ROOMS>>>
T)>>
<ROUTINE RT-ACCESSIBLE? (OBJ "OPT" (VISIBLE? <>) "AUX" LOC OLOC WLOC
(RMG <GETPT ,GL-PLACE-CUR ,P?GLOBAL>) (RMGL <PTSIZE .RMG>))
; "See if it's a simple case"
<COND (<F? .OBJ>
<SETG GL-CLOSED-OBJECT <>>
<RFALSE>)
(<==? .OBJ ,ROOMS>
<RTRUE>)
(<==? .OBJ ,PSEUDO-OBJECT>
<RETURN <==? ,LAST-PSEUDO-LOC ,GL-PLACE-CUR>>)>
; "Now get the winner's effective room"
<SET WLOC <LOC ,GL-WINNER>>
<REPEAT ()
<COND (<AND <NOT <IN? .WLOC ,ROOMS>>
<NOT <CLOSED? .WLOC .VISIBLE?>>>
; "If he's in a vehicle, then if the vehicle's open
he can reach stuff in the room as well"
<SET WLOC <LOC .WLOC>>)
(T
<RETURN>)>>
<SET OLOC .OBJ>
<COND (<==? .OLOC .WLOC> <RTRUE>)>
<REPEAT ()
<COND (<F? .OLOC> <RFALSE>)>
; "We've hit a room, a global object, or a local global FOR THIS ROOM"
<COND (<OR <IN? .OLOC ,GLOBAL-OBJECTS>
<INTBL? .OLOC .RMG .RMGL 1>>
<COND (<AND <IN? .OLOC ,ROOMS>
<N==? .OLOC .OBJ>>
<RFALSE>)>
<RTRUE>)>
<COND (<IN? .OLOC ,ROOMS> <RFALSE>)>
; "Move up a step, see if we've run into the winner yet"
<COND (<==? <SET OLOC <LOC .OLOC>> .WLOC> <RTRUE>)>
; "Nope, see if this level is closed"
<COND (<CLOSED? .OLOC .VISIBLE?>
<COND (<OR <IN? .OLOC ,GLOBAL-OBJECTS>
<INTBL? .OLOC .RMG .RMGL 1>>
<RTRUE>)>
; "If the new thing is closed, we've lost"
<SETG GL-CLOSED-OBJECT .OLOC>
<SETG GL-IN-OUT T>
<RFALSE>)>>>
;<ROUTINE RT-ACCESSIBLE? (OBJ "OPT" (VISIBLE? <>) "AUX" WLOC OLOC (CLSD-PTR <>)
PTR (CNT 0) TEMP TBL END)
<COND (<MC-F? .OBJ>
<SETG GL-CLOSED-OBJECT <>>
<RFALSE>)
(<EQUAL? .OBJ ,ROOMS>
<RTRUE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<RETURN <==? ,LAST-PSEUDO-LOC ,GL-PLACE-CUR>>)>
<SET PTR ,GL-LOC-TRAIL>
<SET OLOC .OBJ>
; "Check the object to see if it's in a closed container"
<REPEAT ()
<PUT .PTR 0 .OLOC>
<INC CNT>
<COND (<OR <MC-F? .OLOC>
<IN? .OLOC ,ROOMS>
<IN? .OLOC ,LOCAL-GLOBALS>
<IN? .OLOC ,GLOBAL-OBJECTS>>
<RETURN>)>
<SET OLOC <LOC .OLOC>>
<SET PTR <REST .PTR 2>>
<COND (<CLOSED? .OLOC .VISIBLE?>
<SETG GL-CLOSED-OBJECT .OLOC>
<SETG GL-IN-OUT T>
<COND (<MC-F? .CLSD-PTR>
<SET CLSD-PTR .PTR>)>)>>
<SET PTR <>>
<SET WLOC ,GL-WINNER>
; "Now see if the winner's in a closed thing that doesn't enclose
anything that encloses the object in question"
<REPEAT ()
<COND (<MC-F? .WLOC>
<SETG GL-CLOSED-OBJECT <>>
<SETG GL-IN-OUT <>>
<RFALSE>)
(<SET PTR <INTBL? .WLOC ,GL-LOC-TRAIL .CNT>>
<RETURN>)
(<IN? .WLOC ,ROOMS>
<RETURN>)>
<SET WLOC <LOC .WLOC>>
<COND (<CLOSED? .WLOC .VISIBLE?>
<SETG GL-CLOSED-OBJECT .WLOC>
<SETG GL-IN-OUT <>>
<RFALSE>)>>
<COND (<MC-F? .PTR>
<RFALSE>)
(<AND <MC-T? .CLSD-PTR>
<G? .PTR .CLSD-PTR>>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE RT-DONT-ALL? (O I "AUX" L)
<SET L <LOC .O>>
<COND (<OR <MC-F? .L>
<EQUAL? .O .I>>
<RTRUE>)
(<MC-IS? .O ,FL-BODYPART>
<RTRUE>)
(<MC-IS? .O ,FL-NOALL>
<RTRUE>)
(<MC-VERB? TAKE>
<COND (<AND <MC-F? .I>
<RT-META-IN? .O ,GL-WINNER>
; "Let take find things in pockets and stuff if loser
gave a name"
<OR <IN? .O ,GL-WINNER>
<F? <ZGET ,GL-P-NAMW 0>>
<NOT <0? <ZGET ,GL-P-BUTS ,K-P-MATCHLEN>>>>>
<RTRUE>)
(<AND <MC-ISNOT? .O ,FL-TAKEABLE>
<MC-ISNOT? .O ,FL-TRYTAKE>>
<RTRUE>)
(<AND <MC-IS? .L ,FL-PERSON>
<N==? .L .I>>
<RTRUE>)
(<AND <MC-IS? .L ,FL-CONTAINER>
<MC-ISNOT? .L ,FL-OPENED>>
<RTRUE>)
(<MC-T? .I>
<COND (<NOT <EQUAL? .L .I>>
<RTRUE>)
(<RT-SEE-INSIDE? .I>
<RFALSE>)
(T
<RTRUE>)>)
(<OR <EQUAL? .L ,GL-PLACE-CUR>
<RT-SEE-INSIDE? .L>>
<RFALSE>)
(T
<RTRUE>)>)
(<MC-VERB? DROP PUT PUT-ON THROW THROW-OVER>
<COND (<EQUAL? .O ,TH-POCKET>
<RTRUE>)
(<EQUAL? .L ,TH-POCKET>
<RTRUE>)
(<MC-IS? .O ,FL-WORN>
<RTRUE>)
(<EQUAL? .L ,GL-WINNER>
<RFALSE>)
(T
<RTRUE>)>)
(T
<RFALSE>)>>
; "tell token output routines"
<ROUTINE DPRINT (O "AUX" X)
<COND (<AND <FSET? .O ,FL-HAS-SDESC>
<T? <SET X <GETP .O ,P?ACTION>>>>
<ZAPPLY .X ,K-M-SDESC>)
(T
<PRINTD .O>)>>
<ROUTINE RT-A-PRINT ("OPTIONAL" (O <>))
<RT-THEO-PRINT .O <> ,K-DESC-A>
<RTRUE>>
<ROUTINE RT-THEO-PRINT ("OPTIONAL" (O <>) (CAP? <>) (CLASS ,K-DESC-THE))
<COND (<MC-F? .O>
<SET O ,GL-PRSO>)>
<COND (.CAP?
<DIROUT ,K-D-SCR-OFF>
<DIROUT ,K-D-TBL-ON ,GL-DIROUT-TBL>)>
<PROG ()
<COND (<MC-ISNOT? .O ,FL-NOARTC>
<COND (<MC-IS? .O ,FL-YOUR>
<TELL "your">)
(<==? .CLASS ,K-DESC-ANY>
<TELL "any">)
(<OR <==? .CLASS ,K-DESC-THE>
<AND <MC-IS? .O ,FL-PLURAL>
<MC-IS? .O ,FL-PERSON>>>
<TELL "the">)
(<AND <MC-IS? .O ,FL-PLURAL>
<MC-ISNOT? .O ,FL-PERSON>>
<TELL "some">)
(<N==? .O ,LG-WATER>
<COND (<MC-IS? .O ,FL-VOWEL>
<TELL "an">)
(T
<TELL "a">)>)>
<PRINTC !\ >)
(<MC-IS? .O ,FL-HAS-SDESC>
; "Know we have NOARTC set here"
<APPLY <GETP .O ,P?ACTION> ,K-M-SDESC .CLASS>
<RETURN>)>
<COND (<AND <==? .O ,CH-ME> .CAP?> ;"to print YOU instead of YOURSELF"
<TELL "you">) ;"at beginning of sentence - GTB"
(T
<TELL D .O>)>>
<COND (.CAP?
<DIROUT ,K-D-TBL-OFF>
<DIROUT ,K-D-SCR-ON>
<COND (<AND <G=? <SET CAP? <GETB ,GL-DIROUT-TBL 2>> !\a>
<L=? .CAP? !\z>>
<PUTB ,GL-DIROUT-TBL 2 <- .CAP? 32>>)>
<PRINTT <ZREST ,GL-DIROUT-TBL 2> <ZGET ,GL-DIROUT-TBL 0>>)>
<RTRUE>>
<ROUTINE RT-CTHEO-PRINT ("OPTIONAL" (O <>))
<RT-THEO-PRINT .O T>>
<ROUTINE RT-THEI-PRINT ("OPTIONAL" (I <>))
<COND (<MC-F? .I>
<SET I ,GL-PRSI>)>
<RT-THEO-PRINT .I>>
<ROUTINE RT-CTHEI-PRINT ("OPTIONAL" (I <>))
<COND (<MC-F? .I>
<SET I ,GL-PRSI>)>
<RT-THEO-PRINT .I T>>
<ROUTINE RT-PRINT-SPACES (N "AUX" AMT)
<REPEAT ()
<COND (<G? .N ,GL-BLANKS-LEN>
<SET AMT ,GL-BLANKS-LEN>)
(T
<SET AMT .N>)>
<PRINTT ,GL-BLANKS .AMT>
<COND (<L=? <SET N <- .N .AMT>> 0>
<RTRUE>)>>>
<ROUTINE SAY-NUMBER (N)
<REPEAT ((X 10000))
<COND (<L? .N .X>
<TELL " ">)
(T
<RETURN>)>
<COND (<L? <SET X </ .X 10>> 10>
<RETURN>)>>
<TELL N .N>>
<ROUTINE RT-UPDATE-STATUS-LINE ()
<COND (<BTST <LOWCORE FLAGS> 4>
<RT-INIT-SCREEN T>
<LOWCORE FLAGS <BAND <LOWCORE FLAGS> <XORB 4 -1>>>)>
<SCREEN ,K-S-WIN>
<HLIGHT ,K-H-INV>
<COND (<NOT <EQUAL? ,GL-PLACE-CUR ,GL-PLACE-STS>>
<COND (,GL-SHORT-STAT?
<CURSET ,GL-SPLIT-ROW 1>)
(T
<CURSET ,GL-SPLIT-ROW 2>)>
<RT-PRINT-SPACES ,GL-STAT-MAX-ROOM>
<CURSET ,GL-SPLIT-ROW 2>
<COND (<RT-SAY-ROOM-NAME-IF-LIT ,GL-PLACE-CUR <> T>
<SETG GL-PLACE-STS ,GL-PLACE-CUR>)
(T
<SETG GL-PLACE-STS -1>)>)>
<COND (<N==? ,GL-SCORE-CUR ,GL-SCORE-STS>
<SETG GL-SCORE-STS ,GL-SCORE-CUR>
<CURSET ,GL-SPLIT-ROW <+ ,GL-SCORE-HEADER-LEN ,GL-STAT-S-POS>>
<SAY-NUMBER ,GL-SCORE-CUR>)>
<CURSET ,GL-SPLIT-ROW ,GL-STAT-T-POS>
<COND (,GL-SHORT-STAT?
<RT-CLK-DOW-MSG <+ ,K-DOW-DW ,K-DOW-SN>>
<TELL " ">
<RT-CLK-NTI-MSG <+ ,K-NTI-SM ,K-NTI-HH ,K-NTI-MM>>)
(T
<RT-CLK-DOW-MSG <+ ,K-DOW-DW ,K-DOW-EN>>
<CURSET ,GL-SPLIT-ROW <+ 10 ,GL-STAT-T-POS>>
<RT-CLK-NTI-MSG <+ ,K-NTI-HH ,K-NTI-MM ,K-NTI-SS>>)>
<HLIGHT ,K-H-NRM>
<SCREEN ,K-S-NOR>
<RTRUE>>
<ROUTINE RT-REFER-TO-MSG ()
<TELL "[To what are you referring?]" CR>
<RTRUE>>
<ROUTINE RT-SAY-ROOM-NAME-IF-LIT ("OPT" (HERE ,GL-PLACE-CUR) (FORCE? <>)
(SL? <>) "AUX" LEN (MAXLEN 300))
<COND (.SL?
<SET MAXLEN ,GL-STAT-MAX-ROOM>)>
<COND (<OR .FORCE? <MC-T? ,GL-NOW-LIT?>>
<DIROUT ,K-D-SCR-OFF>
<DIROUT ,K-D-TBL-ON ,GL-DIROUT-TBL>
<TELL D .HERE>
<DIROUT ,K-D-TBL-OFF>
<DIROUT ,K-D-SCR-ON>
<SET LEN <ZGET ,GL-DIROUT-TBL 0>>
<SET LEN <+ .LEN 1>>
<ZPUT ,GL-DIROUT-TBL 0 0>
<COND (<G? .LEN 1>
<REPEAT ((LC !\ ) X (CNT 2))
<SET X <GETB ,GL-DIROUT-TBL .CNT>>
<COND (<AND <G=? .X !\a>
<L=? .X !\z>>
<COND (<OR <==? .CNT 2>
<==? .LC !\ >>
<SET X <- .X 32>>)>)>
<PRINTC .X>
<SET LC .X>
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RETURN>)>
<COND (<G? .CNT .MAXLEN> <RETURN>)>>)
(T
<PRINTC <ZGET ,GL-DIROUT-TBL 2>>)>
<RTRUE>)
(T
<TELL "Darkness">
<RFALSE>)>>
<ROUTINE RT-DESCRIBE-PLACE ("OPTIONAL" (PLACE <>) (LOOK <>))
; "if no place is passed as an argument use gl-place-cur"
<COND (<MC-F? .PLACE>
<SET PLACE ,GL-PLACE-CUR>)>
; "check if this place is lit"
<COND (<MC-F? <RT-IS-LIT? .PLACE T>>
<TELL ,K-TOO-DARK-MSG CR>
<RTRUE>)>
; "display room description (DESC) in bold"
<HLIGHT ,K-H-BLD>
<RT-SAY-ROOM-NAME-IF-LIT .PLACE T>
<TELL CR CR>
<HLIGHT ,K-H-NRM>
; "determine description context"
<COND (<MC-T? .LOOK>
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-3>)
(<MC-ISNOT? .PLACE ,FL-TOUCHED>
<MC-MAKE .PLACE ,FL-TOUCHED>
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-1>)
(<EQUAL? ,GL-DESC-LEVEL 2>
<RT-EXEC-RM-DESCFCN .PLACE ,K-M-DESC-2>)
(<EQUAL? ,GL-DESC-LEVEL 1>
<RTRUE>)
(<EQUAL? ,GL-DESC-LEVEL 0>
<RFALSE>)>>
<ROUTINE RT-EXEC-RM-DESCFCN (PLACE CONTEXT "AUX" DF)
<COND (<FSET? .PLACE ,FL-HAS-DESCFCN>
<RETURN <NOT <APPLY <GETP .PLACE ,P?ACTION> .CONTEXT>>>)
(T <RTRUE>)>>
<ROUTINE RT-DESCFCN-CONTEXT (CONTEXT)
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2 ,K-M-DESC-3>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE RT-DESC-ALL ("OPTIONAL" (PLACE <>) (LOOK <>)
"AUX" (HOLMES-IN-HOUSE? <>))
<COND (<RT-DESCRIBE-PLACE .PLACE .LOOK>
<RT-DESCRIBE-PLACE-CONTENTS .PLACE .LOOK>)>
<COND (<MC-F? <RT-IS-LIT? .PLACE T>>
<RTRUE>)
(<MC-F? ,GL-PUPPY-MSG?>
<SETG GL-PUPPY-MSG? T>)
(<MC-T? ,GL-PUPPY>
<COND (<EQUAL? ,GL-PUPPY ,CH-HOLMES>
<TELL CR
<RT-PICK-NEXT ,GL-HOLMES-DESC-TXT>>
<COND (<MC-HERE? ,RM-ENTRY-HALL
,RM-PARLOUR
,RM-VESTIBULE
,RM-HOLMES-STUDY
,RM-HOLMES-BEDROOM>
<SET HOLMES-IN-HOUSE? T>)>
<COND (<MC-T? .LOOK>
<COND (<IN? ,CH-HOLMES ,TH-BOAT>
<TELL ,K-SEASICK-MSG>)
(<OR <IN? ,CH-HOLMES ,TH-HANSOM-CAB>
<IN? ,CH-HOLMES ,TH-GROWLER-CAB>>
<TELL ,K-SITTING-QUIETLY-MSG>)
(.HOLMES-IN-HOUSE?
<TELL <RT-PICK-NEXT
,GL-HOLMES-HOUSE-LOOK-TXT>>)
(<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL <RT-PICK-NEXT
,GL-HOLMES-INDOORS-LOOK-TXT>>)
(T
<TELL <RT-PICK-NEXT
,GL-HOLMES-OUTDOORS-LOOK-TXT>>)>
<TELL "." CR>)
(<EQUAL? ,GL-DESC-LEVEL 2 1>
<COND (.HOLMES-IN-HOUSE?
<TELL <RT-PICK-NEXT
,GL-HOLMES-HOUSE-ENTER-TXT>>)
(<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL <RT-PICK-NEXT
,GL-HOLMES-INDOORS-ENTER-TXT>>)
(T
<TELL <RT-PICK-NEXT
,GL-HOLMES-OUTDOORS-ENTER-TXT>>)>
<TELL "." CR>)>)
(<EQUAL? ,GL-PUPPY ,CH-WIGGINS>
<TELL CR
<RT-PICK-NEXT ,GL-WIGGINS-DESC-TXT>>
<COND (<MC-T? .LOOK>
<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>)
(<EQUAL? ,GL-DESC-LEVEL 2 1>
<TELL <RT-PICK-NEXT
,GL-WIGGINS-ENTER-TXT> "." CR>)>)>)>
<RTRUE>>
<ROUTINE RT-GOTO (NEWPLACE "AUX" X NEWLIT? OLDPLACE AMP? SS?)
<SET OLDPLACE ,GL-PLACE-CUR>
<MOVE ,CH-PLAYER .NEWPLACE>
<SETG GL-PLACE-CUR .NEWPLACE>
<SET NEWLIT? <RT-IS-LIT?>>
<MOVE ,CH-PLAYER .OLDPLACE>
<SETG GL-PLACE-CUR .OLDPLACE>
<COND (<MC-F? .NEWLIT?>
; "Moved to get it out of preload"
<TOO-DARK-TO-GO .NEWPLACE>
<RTRUE>)>
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-EXIT>>
<COND (<AND <MC-ISNOT? .OLDPLACE ,FL-INDOORS>
<MC-ISNOT? .NEWPLACE ,FL-INDOORS>>
<RT-CLOCK-JMP 0 5 0>)>
<SETG GL-PLACE-PRV .OLDPLACE>
<SETG GL-PLACE-CUR .NEWPLACE>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>
<MOVE ,CH-PLAYER ,GL-PLACE-CUR>
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-ENTERING>>
<COND (<MC-T? ,GL-PUPPY>
<MOVE ,GL-PUPPY <LOC ,CH-PLAYER>>)
(<AND <MC-T? ,GL-FORMER-PUPPY>
<IN? ,GL-FORMER-PUPPY ,GL-PLACE-CUR>
<NOT <FSET? ,GL-FORMER-PUPPY ,FL-ASLEEP>>>
<SETG GL-PUPPY ,GL-FORMER-PUPPY>
<SETG GL-FORMER-PUPPY <>>)>
<RT-DESC-ALL>
<SET AMP? <AND <IN? ,TH-ETHERIUM-AMPOULE ,CH-PLAYER>
<NOT <FSET? ,TH-ETHERIUM-AMPOULE ,FL-BROKEN>>>>
<SET SS? <MC-IS? ,TH-STETHOSCOPE ,FL-WORN>>
<COND (<OR .AMP? .SS?>
<HOLMES-COMPLAINS .AMP? .SS?>)>
<SET X <APPLY <GETP ,GL-PLACE-CUR ,P?ACTION> ,K-M-ENTERED>>
<RT-RESET-THEM>
<COND (<IN? ,TH-ETHERIUM-GAS ,GL-PLACE-CUR>
<RT-SMELL-ETHERIUM?>)>
;"Check if etherium is in the room."
<RTRUE>>
<ROUTINE RT-RESET-THEM ()
<COND (<NOT <RT-VISIBLE? ,GL-P-IT-OBJECT>>
<SETG GL-P-IT-OBJECT ,TH-NOT-HERE-OBJECT>)>
<COND (<NOT <RT-VISIBLE? ,GL-P-THEM-OBJECT>>
<SETG GL-P-THEM-OBJECT ,TH-NOT-HERE-OBJECT>)>
<COND (<NOT <RT-VISIBLE? ,GL-P-HIM-OBJECT>>
<SETG GL-P-HIM-OBJECT ,TH-NOT-HERE-OBJECT>)>
<COND (<NOT <RT-VISIBLE? ,GL-P-HER-OBJECT>>
<SETG GL-P-HER-OBJECT ,TH-NOT-HERE-OBJECT>)>
<RTRUE>>
<ROUTINE RT-UPDATE-SCORE ("OPTIONAL" (PTS 1))
<SETG GL-SCORE-CUR <+ ,GL-SCORE-CUR .PTS>>
<RT-NEW-SCORE-MSG .PTS>>
<ROUTINE RT-UPDATE-MOVES ("OPTIONAL" (MVS 1))
<COND (<MC-T? ,GL-CLOCK-WAIT>
<RFALSE>)
(<MC-T? ,GL-CLOCK-STOP>
<RFALSE>)>
<SETG GL-MOVES-CUR <+ ,GL-MOVES-CUR .MVS>>>
<ROUTINE RT-UPDATE-CLOCK ("OPTIONAL" (HRS 0) (MIN 0) (SEC 0))
<COND (<OR <MC-NOTZERO? .HRS>
<MC-NOTZERO? .MIN>
<MC-NOTZERO? .SEC>>
<RT-CLOCK-INC-SET .HRS .MIN .SEC>)>
<RT-CLOCK-INC>>
<ROUTINE RT-MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL (V <>) PTBL OBJ1
TMP X (TOUCH-VERB? <>) (MYCROFT? <>) TV)
<REPEAT ()
<SET CNT 0>
<SET OBJ <>>
<SET PTBL T>
<SETG GL-P-MULT? <>>
<COND (<NOT <MC-HERE? GL-P-QCONTEXT-RM>>
<SETG GL-P-QCONTEXT-TH <>>)>
<SETG GL-P-GOOD <RT-PARSER>>
<COND (<MC-T? ,GL-P-GOOD>
<SET ICNT <GET ,GL-P-PRSI ,K-P-MATCHLEN>>
<SET OCNT <GET ,GL-P-PRSO ,K-P-MATCHLEN>>
<COND (<AND <MC-T? ,GL-P-IT-OBJECT>
<RT-ACCESSIBLE? ,GL-P-IT-OBJECT>>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,GL-P-PRSI .CNT> ,TH-IT>
<PUT ,GL-P-PRSI .CNT ,GL-P-IT-OBJECT>
<SET TMP T>
<RETURN>)>)>>
<COND (<ZERO? .TMP>
<SET CNT 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,GL-P-PRSO .CNT> ,TH-IT>
<PUT ,GL-P-PRSO .CNT ,GL-P-IT-OBJECT>
<RETURN>)>)>>)>
<SET CNT 0>)>
<SET NUM <COND (<ZERO? .OCNT>
.OCNT)
(<G? .OCNT 1>
<SET TBL ,GL-P-PRSO>
<COND (<ZERO? .ICNT>
<SET OBJ <>>)
(T
<SET OBJ <GET ,GL-P-PRSI 1>>)>
.OCNT)
(<G? .ICNT 1>
<SET PTBL <>>
<SET TBL ,GL-P-PRSI>
<SET OBJ <GET ,GL-P-PRSO 1>>
.ICNT)
(T 1)>>
<COND (<AND <ZERO? .OBJ>
<EQUAL? .ICNT 1>>
<SET OBJ <GET ,GL-P-PRSI 1>>)>
<COND (<MC-VERB? WALK>
<SET V <RT-PERFORM ,GL-PRSA ,GL-PRSO>>)
(<ZERO? .NUM>
<COND (<0? <P-SONUMS ,GL-P-SYNTAX>>
<SET V <RT-PERFORM ,GL-PRSA>>
<SETG GL-PRSO <>>)
(<ZERO? ,GL-NOW-LIT?>
<RT-P-CLEAR>
<TELL ,K-TOO-DARK-MSG CR>)
(T
<RT-P-CLEAR>
<TELL "[There isn't anything to ">
<SET TMP <GET ,GL-P-ITBL ,K-P-VERBN>>
<COND (<RT-TALK-VERB?>
<TELL "talk to">)
(<OR <MC-T? ,GL-P-MERGED>
<MC-T? ,GL-P-ORPH>>
<PRINTB <GET .TMP 0>>)
(T
<SET V <RT-WORD-PRINT <GETB .TMP 2>
<GETB .TMP 3>>>)>
<TELL ".]" CR>
<SET V <>>)>)
(T
<SET X 0>
<COND (<G? .NUM 1>
<SETG GL-P-MULT? T>)>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
<COND (<G? .X 0>
<TELL "[The ">
<COND (<NOT <EQUAL? .X .NUM>>
<TELL "other ">)>
<TELL "object">
<COND (<NOT <EQUAL? .X 1>>
<TELL "s">)>
<TELL " that you mentioned ">
<COND (<NOT <EQUAL? .X 1>>
<TELL "are">)
(T
<TELL "is">)>
<TELL "n't here.]" CR>)
(<ZERO? .TMP>
<RT-REFER-TO-MSG>)>
<RETURN>)
(T
<COND (<MC-T? .PTBL>
<SET OBJ1 <GET ,GL-P-PRSO .CNT>>)
(T
<SET OBJ1 <GET ,GL-P-PRSI .CNT>>)>
<COND (<OR <G? .NUM 1>
<EQUAL? <GET <GET ,GL-P-ITBL ,K-P-NC1> 0>
,W?ALL ,W?EVERYTHING>>
<COND (<EQUAL? .OBJ1 ,TH-NOT-HERE-OBJECT>
<INC X>
<AGAIN>)
(<AND <EQUAL? ,GL-P-GET-FLAGS ,K-P-ALL>
<RT-DONT-ALL? .OBJ1 .OBJ>>
<AGAIN>)
(<NOT <RT-ACCESSIBLE? .OBJ1>>
<AGAIN>)
(<EQUAL? .OBJ1 ,CH-PLAYER>
<AGAIN>)
(T
<COND (<EQUAL? .OBJ1 ,TH-IT>
<TELL CTHE ,GL-P-IT-OBJECT>)
(T
<TELL CTHE .OBJ1>)>
<TELL ": ">)>)>
<SET TMP T>
<SETG GL-PRSO <COND (<MC-T? .PTBL>
.OBJ1)
(T
.OBJ)>>
<SETG GL-PRSI <COND (<MC-T? .PTBL>
.OBJ)
(T
.OBJ1)>>
; "DEB -- Do real visibility or accessibility tests here."
<COND (<AND <==? ,GL-WINNER ,CH-BUTLER>
<EQUAL? <ZGET ,GL-P-NAMW 0>
,W?HOLMES ,W?MYCROFT>>
<SET MYCROFT? T>
<SET TOUCH-VERB? <>>)>
<COND (<AND <F? .MYCROFT?>
<N==? ,GL-PRSA ,V?FIND>
<OR <SET TOUCH-VERB? <RT-TOUCH-VERB?>>
<SET TV <INTBL? ,GL-PRSA <REST ,GL-SEE-VERBS 2>
<GET ,GL-SEE-VERBS 0>>>>>
<COND (<AND <MC-T? ,GL-PRSO>
<NOT <RT-VISIBLE? ,GL-PRSO>>>
<RT-CANT-SEE-ANY-MSG ,GL-PRSO>
<COND (<L=? .OCNT 1>
<SET V ,FATAL-VALUE>
<RETURN>)>
<AGAIN>)
(<AND <MC-T? ,GL-PRSI>
<NOT <RT-VISIBLE? ,GL-PRSI>>>
<RT-CANT-SEE-ANY-MSG ,GL-PRSI>
<COND (<L=? .ICNT 1>
<SET V ,FATAL-VALUE>
<RETURN>)>
<AGAIN>)>)>
<COND (.TOUCH-VERB?
<COND (<AND <MC-T? ,GL-PRSO>
<NOT <RT-ACCESSIBLE? ,GL-PRSO>>>
<RT-CANT-TOUCH-MSG ,GL-PRSO ,GL-CLOSED-OBJECT ,GL-IN-OUT>
<COND (<L=? .OCNT 1>
<SET V ,FATAL-VALUE>
<RETURN>)>
<AGAIN>)
(<AND <MC-T? ,GL-PRSI>
<NOT <RT-ACCESSIBLE? ,GL-PRSI>>>
<RT-CANT-TOUCH-MSG ,GL-PRSI ,GL-CLOSED-OBJECT ,GL-IN-OUT>
<COND (<L=? .ICNT 1>
<SET V ,FATAL-VALUE>
<RETURN>)>
<AGAIN>)>)>
; "DEB -- End real visibility and accessibility tests."
<SET V <RT-PERFORM ,GL-PRSA ,GL-PRSO ,GL-PRSI>>
<COND (<EQUAL? .V ,FATAL-VALUE>
<RETURN>)>)>>
<COND (,GL-P-OVERFLOW
<TELL CR
"[Note: There are so many objects here that a few may have been overlooked.
Please double check to make sure you have accomplished what you intended.]"
CR>)>)>
<COND (<EQUAL? .V ,FATAL-VALUE>
<SETG GL-P-CONT <>>)>)
(T
<SETG GL-P-CONT <>>)>
<COND (<AND <MC-T? ,GL-P-GOOD>
<NOT <EQUAL? .V ,FATAL-VALUE>>
<NOT <SET TV <INTBL? ,GL-PRSA <REST ,GL-GAME-VERBS 2>
<GET ,GL-GAME-VERBS 0>>>>>
<RT-UPDATE-MOVES>
<RT-UPDATE-CLOCK>
<RT-ALARM-CHK>)>
<RT-TIME-OF-DAY-MSG>
<SETG GL-PRSA <>>
<SETG GL-PRSO <>>
<SETG GL-PRSI <>>>>
<ROUTINE RT-TOUCH-VERB? ()
<INTBL? ,GL-PRSA <REST ,GL-TOUCH-VERBS 2> <GET ,GL-TOUCH-VERBS 0>>>
<ROUTINE RT-TALK-VERB? ()
<INTBL? ,GL-PRSA <REST ,GL-TALK-VERBS 2> <GET ,GL-TALK-VERBS 0>>>
; "RT-AC-CH-PLAYER has to be here because called every turn, more or less."
<ROUTINE RT-AC-CH-PLAYER ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-CH-AC "CH-PLAYER" .CONTEXT>>
<SETG GL-WAIT-BELL <>>
<COND (<MC-THIS-WINNER?>
<COND (<MC-VERB? TELL>
<SETG GL-CLOCK-WAIT <>>
<RFALSE>)
(<AND <OR <MC-PRSO? ,TH-HANDS>
<MC-PRSI? ,TH-HANDS>>
<RT-CHECK-HANDS>>
<RFALSE>)
(<AND <RT-TOUCH-VERB?>
<MC-IS? ,TH-HANDS ,FL-LOCKED>>
<RT-HANDS-COVERING-EARS>)>)
(T
<RT-AC-CH-PLAYER-AUX>)>>

46
cab.zabstr Normal file
View File

@ -0,0 +1,46 @@
<OBJECT CH-HANSOM-CABBIE (LOC TH-HANSOM-CAB) (DESC "hansom cabbie") (FLAGS
FL-NODESC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL) (SYNONYM CABBIE DRIVER) (
ADJECTIVE HANSOM) (SIZE 99) (ACTION RT-AC-CH-HANSOM-CABBIE)>
<OBJECT CH-GROWLER-CABBIE (LOC TH-GROWLER-CAB) (DESC "growler cabbie") (FLAGS
FL-NODESC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL) (SYNONYM CABBIE DRIVER) (
ADJECTIVE GROWLER) (SIZE 99) (ACTION RT-AC-CH-GROWLER-CABBIE)>
<DEFINE-ROUTINE RT-AC-CH-HANSOM-CABBIE>
<DEFINE-ROUTINE RT-AC-CH-GROWLER-CABBIE>
<CONSTANT CAB-ROOM-IDS-LEN 37>
<CONSTANT CAB-ROOM-IDS <TABLE (PURE BYTE) RM-221B-BAKER-ST RM-YORK-PLACE
RM-MARYLEBONE-RD RM-TOTTENHAM-COURT-RD RM-ST-GILES-CIRCUS RM-OXFORD-ST
RM-ORCHARD-ST RM-AUDLEY-ST RM-HYDE-PARK-CORNER RM-KENSINGTON-GARDENS
RM-TRAFALGAR-SQUARE RM-GREAT-RUSSELL-ST RM-GROSVENOR-PLACE RM-VICTORIA-SQUARE
RM-VICTORIA-STREET RM-BROAD-SANCTUARY RM-PARLIAMENT-SQUARE
RM-BUCKINGHAM-PALACE-RD RM-QUEENS-GARDENS RM-BIRDCAGE-WALK RM-THE-MALL
RM-WHITEHALL RM-NEW-OXFORD-ST RM-COVENT-GARDEN RM-THE-STRAND RM-FLEET-STREET
RM-THE-EMBANKMENT RM-UPPER-THAMES-ST 0 RM-PINCHIN-LANE RM-CHEAPSIDE
RM-THREADNEEDLE-ST RM-KING-WILLIAM-ST RM-MONUMENT RM-LOWER-THAMES-ST
RM-LONDON-BRIDGE RM-TOWER-ENTRANCE>>
<DEFINE-ROUTINE RT-GET-ROOM-ID>
<DEFINE-ROUTINE RT-CAB-DIST>
<DEFINE-ROUTINE RT-I-CAB-ARRIVE>
<DEFINE-ROUTINE RT-I-HANSOM-LEAVE>
<DEFINE-ROUTINE RT-I-HANSOM-TO?>
<DEFINE-ROUTINE RT-I-GROWLER-LEAVE>
<DEFINE-ROUTINE RT-I-GROWLER-TO?>
<DEFINE-ROUTINE RT-MOVE-HANSOM>
<DEFINE-ROUTINE RT-MOVE-GROWLER>
<DEFINE-ROUTINE RT-CF-TH-HANSOM-CAB>
<DEFINE-ROUTINE RT-CF-TH-GROWLER-CAB>
<DEFINE-ROUTINE RT-BLOW-WHISTLE>
<OBJECT TH-HANSOM-CAB (LOC RM-VICTORIA-SQUARE) (DESC "hansom cab") (FLAGS
FL-VEHICLE FL-CONTAINER FL-TRYTAKE FL-OPENED FL-LIGHTED FL-HAS-DESCFCN) (
SYNONYM CAB) (ADJECTIVE HANSOM) (SIZE 0 CAPACITY 999) (ACTION
RT-AC-TH-HANSOM-CAB) (CONTFCN RT-CF-TH-HANSOM-CAB)>
<OBJECT TH-GROWLER-CAB (LOC RM-OXFORD-ST) (DESC "growler cab") (FLAGS
FL-VEHICLE FL-CONTAINER FL-TRYTAKE FL-OPENED FL-LIGHTED FL-HAS-DESCFCN) (
SYNONYM CAB) (ADJECTIVE GROWLER) (SIZE 0 CAPACITY 999) (ACTION
RT-AC-TH-GROWLER-CAB) (CONTFCN RT-CF-TH-GROWLER-CAB)>
<OBJECT TH-CAB-WHISTLE (LOC CH-PLAYER) (DESC "whistle") (FLAGS FL-TAKEABLE
FL-CLOTHING FL-WORN) (SYNONYM WHISTLE) (SIZE 1 MASS 1) (ACTION
RT-AC-TH-CAB-WHISTLE)>
<DEFINE-ROUTINE RT-AC-TH-HANSOM-CAB>
<DEFINE-ROUTINE RT-AC-TH-GROWLER-CAB>
<DEFINE-ROUTINE RT-AC-TH-CAB-WHISTLE>

823
cab.zap Normal file
View File

@ -0,0 +1,823 @@
.FUNCT RT-AC-CH-HANSOM-CABBIE,CONTEXT
EQUAL? CONTEXT,K-M-WINNER \?CCL3
EQUAL? GL-PRSA,V?WAIT \?CCL6
SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
PRINTI """Right-o."""
CRLF
SET 'TH-HANSOM-CAB-AUX2,1
ICALL2 RT-ALARM-CLR,RT-I-HANSOM-LEAVE
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,30,0
CALL RT-ALARM-SET-REL,RT-I-HANSOM-LEAVE,STACK
RSTACK
?CCL6: EQUAL? GL-PRSA,V?DRIVE,V?WALK-TO \?CCL8
CALL1 RT-CF-TH-HANSOM-CAB
RSTACK
?CCL8: EQUAL? GL-PRSA,V?HELLO,V?GOODBYE,V?THANK \?CCL10
SET 'GL-WINNER,CH-PLAYER
CALL RT-PERFORM,GL-PRSA,CH-HANSOM-CABBIE
RSTACK
?CCL10: PRINTR """Sorry, guv. All I does is drives a cab."""
?CCL3: EQUAL? GL-PRSA,V?PAY \?PRD14
ZERO? GL-NOW-PRSI? /?CTR11
?PRD14: EQUAL? GL-PRSA,V?GIVE \?CCL12
ZERO? GL-NOW-PRSI? /?CCL12
FSET? GL-PRSO,FL-MONEY \?CCL12
?CTR11: PRINTR """No thanks, guv'nor. It'll go on Mr 'Olmes's monthly account."""
?CCL12: EQUAL? GL-PRSA,V?TELL \?CCL21
ZERO? GL-NOW-PRSI? \?CCL21
ZERO? GL-P-CONT \FALSE
?CCL21: EQUAL? GL-PRSA,V?HELLO \?CCL26
PRINTR """'Ello."""
?CCL26: EQUAL? GL-PRSA,V?GOODBYE \?CCL28
PRINTR """Ta ta."""
?CCL28: EQUAL? GL-PRSA,V?THANK \?CCL30
PRINTR """Anytime, mate."""
?CCL30: CALL1 RT-TALK-VERB?
ZERO? STACK /FALSE
PRINTR """Sorry, sir. No time to chat."""
.FUNCT RT-AC-CH-GROWLER-CABBIE,CONTEXT
EQUAL? CONTEXT,K-M-WINNER \?CCL3
EQUAL? GL-PRSA,V?WAIT \?CCL6
SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
ICALL2 RT-CTHEO-PRINT,CH-GROWLER-CABBIE
PRINTR " says brightly, ""Okay."""
?CCL6: EQUAL? GL-PRSA,V?DRIVE,V?WALK-TO \?CCL8
CALL1 RT-CF-TH-GROWLER-CAB
RSTACK
?CCL8: ICALL2 RT-CTHEO-PRINT,CH-GROWLER-CABBIE
PRINTR " says brightly, ""Hello,"" and looks at you expectantly."
?CCL3: EQUAL? GL-PRSA,V?PAY \?PRD12
ZERO? GL-NOW-PRSI? /?CTR9
?PRD12: EQUAL? GL-PRSA,V?GIVE \?CCL10
ZERO? GL-NOW-PRSI? /?CCL10
FSET? GL-PRSO,FL-MONEY \?CCL10
?CTR9: ICALL2 RT-CTHEO-PRINT,CH-GROWLER-CABBIE
PRINTR " says brightly, ""No thanks. I'm not in it for the money. I just like to meet new people."""
?CCL10: EQUAL? GL-PRSA,V?TELL \?CCL19
ZERO? GL-NOW-PRSI? \?CCL19
ZERO? GL-P-CONT \FALSE
?CCL19: CALL1 RT-TALK-VERB?
ZERO? STACK /FALSE
ICALL2 RT-CTHEO-PRINT,CH-GROWLER-CABBIE
PRINTR " says brightly, ""Hello,"" and looks at you expectantly."
.FUNCT RT-GET-ROOM-ID,HERE,TBL
INTBL? HERE,CAB-ROOM-IDS,CAB-ROOM-IDS-LEN,1 >TBL \FALSE
LESS? CAB-ROOM-IDS,0 \?CCL6
SUB TBL,CAB-ROOM-IDS
ADD STACK,1
RSTACK
?CCL6: SUB CAB-ROOM-IDS,TBL
ADD STACK,1
RSTACK
.FUNCT RT-CAB-DIST,HERE,THERE,NUM1,NUM2,PTR,TMP
CALL2 RT-GET-ROOM-ID,HERE >NUM1
CALL2 RT-GET-ROOM-ID,THERE >NUM2
EQUAL? HERE,THERE /FALSE
EQUAL? NUM1,NUM2 /FALSE
LESS? NUM1,NUM2 \?CND5
SET 'TMP,NUM1
SET 'NUM1,NUM2
SET 'NUM2,TMP
?CND5: SUB NUM1,2 >NUM1
?PRG7: LESS? NUM1,1 /?REP8
ADD PTR,NUM1 >PTR
DEC 'NUM1
JUMP ?PRG7
?REP8: SUB NUM2,1
ADD PTR,STACK >PTR
GETB GL-CAB-DIST-TBL,PTR
RSTACK
.FUNCT RT-I-CAB-ARRIVE,CAB,PLACE,NUM,SCORE,AUX1
SET 'NUM,TH-CAB-WHISTLE-AUX1
SET 'PLACE,TH-CAB-WHISTLE-AUX2
SET 'TH-CAB-WHISTLE-AUX1,0
SET 'TH-CAB-WHISTLE-AUX2,0
EQUAL? GL-PLACE-CUR,PLACE \FALSE
EQUAL? GL-PRSA,V?WALK /FALSE
EQUAL? NUM,1 \?CCL8
SET 'CAB,TH-GROWLER-CAB
SET 'SCORE,0
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,5,0
ICALL RT-ALARM-SET-REL,RT-I-GROWLER-LEAVE,STACK
ICALL2 RT-REMOVE-ALL,TH-GROWLER-CAB
MOVE CH-GROWLER-CABBIE,TH-GROWLER-CAB
FSET CH-GROWLER-CABBIE,FL-SEEN
JUMP ?CND6
?CCL8: EQUAL? NUM,2 \FALSE
SET 'CAB,TH-HANSOM-CAB
SET 'SCORE,5
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,5,0
ICALL RT-ALARM-SET-REL,RT-I-HANSOM-LEAVE,STACK
ICALL2 RT-REMOVE-ALL,TH-HANSOM-CAB
MOVE CH-HANSOM-CABBIE,TH-HANSOM-CAB
FSET CH-HANSOM-CABBIE,FL-SEEN
?CND6: ZERO? SOUND-QUEUED? \?CND11
SET 'CAB-RAMP,2
ICALL1 RT-S-CAB-ARRIVES
?CND11: CRLF
PRINTI "A "
ICALL2 DPRINT,CAB
PRINTI " pulls up beside you."
CRLF
MOVE CAB,GL-PLACE-CUR
EQUAL? CAB,TH-HANSOM-CAB \?CCL15
SET 'AUX1,TH-HANSOM-CAB-AUX1
JUMP ?CND13
?CCL15: SET 'AUX1,TH-GROWLER-CAB-AUX1
?CND13: ZERO? AUX1 \TRUE
EQUAL? CAB,TH-HANSOM-CAB \?CCL20
SET 'TH-HANSOM-CAB-AUX1,1
JUMP ?CND18
?CCL20: SET 'TH-GROWLER-CAB-AUX1,1
?CND18: ZERO? SCORE /TRUE
ICALL2 RT-UPDATE-SCORE,SCORE
RTRUE
.FUNCT RT-I-HANSOM-LEAVE
EQUAL? GL-PLACE-CUR,RM-VICTORIA-SQUARE /?CND1
CALL2 RT-VISIBLE?,TH-HANSOM-CAB
ZERO? STACK /?CND3
ICALL1 RT-S-CAB-LEAVES
ICALL2 RT-CTHEO-PRINT,TH-HANSOM-CAB
PRINTI " drives off."
CRLF
?CND3: MOVE TH-HANSOM-CAB,RM-VICTORIA-SQUARE
ICALL2 RT-REMOVE-ALL,TH-HANSOM-CAB
MOVE CH-HANSOM-CABBIE,TH-HANSOM-CAB
CALL1 RT-IS-LIT? >GL-NOW-LIT?
?CND1: SET 'TH-HANSOM-CAB-AUX2,0
RFALSE
.FUNCT RT-I-HANSOM-TO?
IN? CH-PLAYER,TH-HANSOM-CAB \FALSE
PRINTI """Where to mister?"""
CRLF
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,1,0
CALL RT-ALARM-SET-REL,RT-I-HANSOM-TO?,STACK
RSTACK
.FUNCT RT-I-GROWLER-LEAVE
EQUAL? GL-PLACE-CUR,RM-OXFORD-ST /FALSE
CALL2 RT-VISIBLE?,TH-GROWLER-CAB
ZERO? STACK /?CND3
ICALL1 RT-S-CAB-LEAVES
ICALL2 RT-CTHEO-PRINT,TH-GROWLER-CAB
PRINTI " drives off."
CRLF
?CND3: MOVE TH-GROWLER-CAB,RM-OXFORD-ST
ICALL2 RT-REMOVE-ALL,TH-GROWLER-CAB
MOVE CH-GROWLER-CABBIE,TH-GROWLER-CAB
CALL1 RT-IS-LIT? >GL-NOW-LIT?
RFALSE
.FUNCT RT-I-GROWLER-TO?
IN? CH-PLAYER,TH-GROWLER-CAB \FALSE
CRLF
PRINTI "Suddenly the cabbie - who seems to have a low threshold of boredom - pipes up and says, ""I know where we can go!"""
CRLF
CRLF
PRINT K-WILD-RIDE-MSG
CRLF
ICALL1 RT-MOVE-GROWLER
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,5,0
ICALL RT-ALARM-SET-REL,RT-I-GROWLER-TO?,STACK
CRLF
CALL1 RT-DESC-ALL
RSTACK
.FUNCT RT-MOVE-HANSOM,ROOM,MIN
EQUAL? GL-PLACE-CUR,ROOM \?CCL3
PRINTR """We're already here, guv."""
?CCL3: ZERO? ROOM /FALSE
SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
CALL RT-CAB-DIST,GL-PLACE-CUR,ROOM
MUL STACK,K-HANSOM-TIME >MIN
PRINTI """Right-o."""
CRLF
CRLF
MOVE TH-HANSOM-CAB,ROOM
SET 'GL-PLACE-PRV,GL-PLACE-CUR
SET 'GL-PLACE-CUR,ROOM
IN? CH-PLAYER,TH-HANSOM-CAB \?CCL8
SET 'GL-PUPPY-MSG?,FALSE-VALUE
EQUAL? ROOM,RM-COVENT-GARDEN \?CCL11
SET 'LOOPING?,S-CROWD
SET 'LOOP-VOL,8
JUMP ?CND9
?CCL11: SET 'LOOPING?,FALSE-VALUE
?CND9: ICALL SOUNDS,S-HORSE,S-START,4,6
PRINTI "The cab speeds through the streets, "
CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2,3 \?CND12
PRINTI "deftly weaving in and out of the jubilee traffic and "
?CND12: PRINTI "whizzing past famous landmarks. Only a few minutes later, you arrive at your destination."
CRLF
CRLF
ICALL1 RT-DESC-ALL
JUMP ?CND6
?CCL8: ICALL1 RT-S-CAB-LEAVES
PRINTI "The cab drives off."
CRLF
CALL1 RT-IS-LIT? >GL-NOW-LIT?
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,30,0
ICALL RT-ALARM-SET-REL,RT-I-HANSOM-LEAVE,STACK
?CND6: ICALL2 RT-ALARM-CLR,RT-I-HANSOM-LEAVE
ICALL RT-CLOCK-JMP,0,MIN,0
RTRUE
.FUNCT RT-MOVE-GROWLER,ROOM,NUM,MIN
RANDOM 37 >NUM
EQUAL? NUM,1 \?CCL3
SET 'ROOM,RM-AUDLEY-ST
JUMP ?CND1
?CCL3: EQUAL? NUM,2 \?CCL5
SET 'ROOM,RM-221B-BAKER-ST
JUMP ?CND1
?CCL5: EQUAL? NUM,3 \?CCL7
SET 'ROOM,RM-BIRDCAGE-WALK
JUMP ?CND1
?CCL7: EQUAL? NUM,5 \?CCL9
SET 'ROOM,RM-BROAD-SANCTUARY
JUMP ?CND1
?CCL9: EQUAL? NUM,6 \?CCL11
SET 'ROOM,RM-BUCKINGHAM-PALACE-RD
JUMP ?CND1
?CCL11: EQUAL? NUM,7 \?CCL13
SET 'ROOM,RM-CHEAPSIDE
JUMP ?CND1
?CCL13: EQUAL? NUM,8 \?CCL15
SET 'ROOM,RM-COVENT-GARDEN
JUMP ?CND1
?CCL15: EQUAL? NUM,9 \?CCL17
SET 'ROOM,RM-THE-EMBANKMENT
JUMP ?CND1
?CCL17: EQUAL? NUM,10 \?CCL19
SET 'ROOM,RM-FLEET-STREET
JUMP ?CND1
?CCL19: EQUAL? NUM,11 \?CCL21
SET 'ROOM,RM-GREAT-RUSSELL-ST
JUMP ?CND1
?CCL21: EQUAL? NUM,12 \?CCL23
SET 'ROOM,RM-GROSVENOR-PLACE
JUMP ?CND1
?CCL23: EQUAL? NUM,13 \?CCL25
SET 'ROOM,RM-HYDE-PARK-CORNER
JUMP ?CND1
?CCL25: EQUAL? NUM,14 \?CCL27
SET 'ROOM,RM-KENSINGTON-GARDENS
JUMP ?CND1
?CCL27: EQUAL? NUM,15 \?CCL29
SET 'ROOM,RM-KING-WILLIAM-ST
JUMP ?CND1
?CCL29: EQUAL? NUM,16 \?CCL31
SET 'ROOM,RM-LONDON-BRIDGE
JUMP ?CND1
?CCL31: EQUAL? NUM,17 \?CCL33
SET 'ROOM,RM-LOWER-THAMES-ST
JUMP ?CND1
?CCL33: EQUAL? NUM,18 \?CCL35
SET 'ROOM,RM-THE-MALL
JUMP ?CND1
?CCL35: EQUAL? NUM,19 \?CCL37
SET 'ROOM,RM-MARYLEBONE-RD
JUMP ?CND1
?CCL37: EQUAL? NUM,20 \?CCL39
SET 'ROOM,RM-MONUMENT
JUMP ?CND1
?CCL39: EQUAL? NUM,21 \?CCL41
SET 'ROOM,RM-NEW-OXFORD-ST
JUMP ?CND1
?CCL41: EQUAL? NUM,22 \?CCL43
SET 'ROOM,RM-OXFORD-ST
JUMP ?CND1
?CCL43: EQUAL? NUM,23 \?CCL45
SET 'ROOM,RM-ORCHARD-ST
JUMP ?CND1
?CCL45: EQUAL? NUM,24 \?CCL47
SET 'ROOM,RM-PARLIAMENT-SQUARE
JUMP ?CND1
?CCL47: EQUAL? NUM,25 \?CCL49
SET 'ROOM,RM-PINCHIN-LANE
JUMP ?CND1
?CCL49: EQUAL? NUM,26 \?CCL51
SET 'ROOM,RM-QUEENS-GARDENS
JUMP ?CND1
?CCL51: EQUAL? NUM,27 \?CCL53
SET 'ROOM,RM-ST-GILES-CIRCUS
JUMP ?CND1
?CCL53: EQUAL? NUM,28 \?CCL55
SET 'ROOM,RM-THE-STRAND
JUMP ?CND1
?CCL55: EQUAL? NUM,29 \?CCL57
SET 'ROOM,RM-THREADNEEDLE-ST
JUMP ?CND1
?CCL57: EQUAL? NUM,30 \?CCL59
SET 'ROOM,RM-TOTTENHAM-COURT-RD
JUMP ?CND1
?CCL59: EQUAL? NUM,31 \?CCL61
SET 'ROOM,RM-TOWER-ENTRANCE
JUMP ?CND1
?CCL61: EQUAL? NUM,32 \?CCL63
SET 'ROOM,RM-TRAFALGAR-SQUARE
JUMP ?CND1
?CCL63: EQUAL? NUM,33 \?CCL65
SET 'ROOM,RM-UPPER-THAMES-ST
JUMP ?CND1
?CCL65: EQUAL? NUM,34 \?CCL67
SET 'ROOM,RM-VICTORIA-STREET
JUMP ?CND1
?CCL67: EQUAL? NUM,35 \?CCL69
SET 'ROOM,RM-VICTORIA-SQUARE
JUMP ?CND1
?CCL69: EQUAL? NUM,36 \?CCL71
SET 'ROOM,RM-WHITEHALL
JUMP ?CND1
?CCL71: EQUAL? NUM,37 \?CCL73
SET 'ROOM,RM-YORK-PLACE
JUMP ?CND1
?CCL73: PRINTI "This is odd..."
CRLF
CRLF
SET 'ROOM,RM-KENSINGTON-GARDENS
?CND1: CALL RT-CAB-DIST,GL-PLACE-CUR,ROOM
MUL STACK,K-GROWLER-TIME >MIN
EQUAL? ROOM,RM-COVENT-GARDEN \?CCL76
SET 'LOOPING?,S-CROWD
SET 'LOOP-VOL,8
JUMP ?CND74
?CCL76: SET 'LOOPING?,FALSE-VALUE
?CND74: ICALL SOUNDS,S-HORSE,S-START,4,6
MOVE TH-GROWLER-CAB,ROOM
SET 'GL-PLACE-PRV,GL-PLACE-CUR
SET 'GL-PLACE-CUR,ROOM
SET 'GL-PUPPY-MSG?,FALSE-VALUE
CALL RT-CLOCK-JMP,0,MIN,0
RSTACK
.FUNCT RT-CF-TH-HANSOM-CAB,CONTEXT,WRD,ADJ
IN? CH-PLAYER,TH-HANSOM-CAB \?CND1
SET 'GL-WHERE-TO-PROMPT?,TRUE-VALUE
SET 'GL-WHERE-TO-ORPH?,TRUE-VALUE
?CND1: EQUAL? GL-PRSA,V?WALK \?CCL5
EQUAL? GL-P-WALK-DIR,P?OUT \?CCL5
CALL RT-PERFORM,V?EXIT,TH-HANSOM-CAB
RSTACK
?CCL5: EQUAL? GL-PRSA,V?WALK \?PRD11
EQUAL? GL-WINNER,CH-PLAYER /?CTR8
?PRD11: EQUAL? GL-PRSA,V?ENTER \?CCL9
EQUAL? GL-PRSO,TH-HANSOM-CAB /?CCL9
?CTR8: ICALL1 RT-CYOU-MSG
ICALL RT-WOULD-HAVE-TO-MSG,STR?797,TH-HANSOM-CAB
PRINTR " first."
?CCL9: EQUAL? GL-PRSA,V?DRIVE,V?WALK-TO \?CCL17
GET GL-P-NAMW,0 >WRD
GET GL-P-ADJW,0 >ADJ
EQUAL? GL-PRSO,RM-AUDLEY-ST \?CCL20
CALL2 RT-MOVE-HANSOM,RM-AUDLEY-ST
RSTACK
?CCL20: EQUAL? GL-PRSO,RM-221B-BAKER-ST,RM-ENTRY-HALL \?CCL22
CALL2 RT-MOVE-HANSOM,RM-221B-BAKER-ST
RSTACK
?CCL22: EQUAL? GL-PRSO,RM-BIRDCAGE-WALK \?CCL24
CALL2 RT-MOVE-HANSOM,RM-BIRDCAGE-WALK
RSTACK
?CCL24: EQUAL? GL-PRSO,RM-BROAD-SANCTUARY,LG-TOMBS-ABBEY \?CCL26
CALL2 RT-MOVE-HANSOM,RM-BROAD-SANCTUARY
RSTACK
?CCL26: EQUAL? GL-PRSO,RM-BUCKINGHAM-PALACE-RD \?CCL28
CALL2 RT-MOVE-HANSOM,RM-BUCKINGHAM-PALACE-RD
RSTACK
?CCL28: EQUAL? GL-PRSO,RM-CHEAPSIDE \?CCL30
CALL2 RT-MOVE-HANSOM,RM-CHEAPSIDE
RSTACK
?CCL30: EQUAL? GL-PRSO,RM-COVENT-GARDEN \?CCL32
CALL2 RT-MOVE-HANSOM,RM-COVENT-GARDEN
RSTACK
?CCL32: EQUAL? GL-PRSO,RM-THE-EMBANKMENT,LG-WATER \?CCL34
CALL2 RT-MOVE-HANSOM,RM-THE-EMBANKMENT
RSTACK
?CCL34: EQUAL? GL-PRSO,RM-FLEET-STREET \?CCL36
CALL2 RT-MOVE-HANSOM,RM-FLEET-STREET
RSTACK
?CCL36: EQUAL? GL-PRSO,RM-GREAT-RUSSELL-ST,RM-BRITISH-MUSEUM \?CCL38
CALL2 RT-MOVE-HANSOM,RM-GREAT-RUSSELL-ST
RSTACK
?CCL38: EQUAL? GL-PRSO,RM-GROSVENOR-PLACE \?CCL40
CALL2 RT-MOVE-HANSOM,RM-GROSVENOR-PLACE
RSTACK
?CCL40: EQUAL? GL-PRSO,RM-HYDE-PARK-CORNER \?CCL42
CALL2 RT-MOVE-HANSOM,RM-HYDE-PARK-CORNER
RSTACK
?CCL42: EQUAL? GL-PRSO,RM-KENSINGTON-GARDENS \?CCL44
CALL2 RT-MOVE-HANSOM,RM-KENSINGTON-GARDENS
RSTACK
?CCL44: EQUAL? GL-PRSO,RM-KING-WILLIAM-ST \?CCL46
CALL2 RT-MOVE-HANSOM,RM-KING-WILLIAM-ST
RSTACK
?CCL46: EQUAL? GL-PRSO,RM-LONDON-BRIDGE \?CCL48
CALL2 RT-MOVE-HANSOM,RM-LONDON-BRIDGE
RSTACK
?CCL48: EQUAL? GL-PRSO,RM-LOWER-THAMES-ST,RM-BAR-OF-GOLD,RM-SWAN-LANE \?CCL50
CALL2 RT-MOVE-HANSOM,RM-LOWER-THAMES-ST
RSTACK
?CCL50: EQUAL? GL-PRSO,RM-THE-MALL \?CCL52
CALL2 RT-MOVE-HANSOM,RM-THE-MALL
RSTACK
?CCL52: EQUAL? GL-PRSO,RM-MARYLEBONE-RD,RM-MADAME-TUSSAUDS \?CCL54
CALL2 RT-MOVE-HANSOM,RM-MARYLEBONE-RD
RSTACK
?CCL54: EQUAL? WRD,W?MONUMENT \?PRD58
EQUAL? ADJ,FALSE-VALUE /?CTR55
?PRD58: EQUAL? GL-PRSO,RM-MONUMENT \?CCL56
?CTR55: CALL2 RT-MOVE-HANSOM,RM-MONUMENT
RSTACK
?CCL56: EQUAL? GL-PRSO,RM-NEW-OXFORD-ST \?CCL62
CALL2 RT-MOVE-HANSOM,RM-NEW-OXFORD-ST
RSTACK
?CCL62: EQUAL? WRD,W?STREET,W?ST \?PRD66
EQUAL? ADJ,W?OXFORD /?CTR63
?PRD66: EQUAL? GL-PRSO,RM-OXFORD-ST \?CCL64
?CTR63: CALL2 RT-MOVE-HANSOM,RM-OXFORD-ST
RSTACK
?CCL64: EQUAL? GL-PRSO,RM-ORCHARD-ST \?CCL70
CALL2 RT-MOVE-HANSOM,RM-ORCHARD-ST
RSTACK
?CCL70: EQUAL? GL-PRSO,RM-PARLIAMENT-SQUARE,RM-PARLIAMENT,TH-BELL \?CCL72
CALL2 RT-MOVE-HANSOM,RM-PARLIAMENT-SQUARE
RSTACK
?CCL72: EQUAL? GL-PRSO,RM-PINCHIN-LANE,RM-SHERMANS-HOUSE \?CCL74
CALL2 RT-MOVE-HANSOM,RM-PINCHIN-LANE
RSTACK
?CCL74: EQUAL? GL-PRSO,RM-QUEENS-GARDENS,RM-BUCKINGHAM-PALACE \?CCL76
CALL2 RT-MOVE-HANSOM,RM-QUEENS-GARDENS
RSTACK
?CCL76: EQUAL? GL-PRSO,RM-ST-GILES-CIRCUS \?CCL78
CALL2 RT-MOVE-HANSOM,RM-ST-GILES-CIRCUS
RSTACK
?CCL78: EQUAL? GL-PRSO,RM-THE-STRAND \?CCL80
CALL2 RT-MOVE-HANSOM,RM-THE-STRAND
RSTACK
?CCL80: EQUAL? GL-PRSO,RM-THREADNEEDLE-ST,RM-BANK-OF-ENGLAND \?CCL82
CALL2 RT-MOVE-HANSOM,RM-THREADNEEDLE-ST
RSTACK
?CCL82: EQUAL? GL-PRSO,RM-TOTTENHAM-COURT-RD \?CCL84
CALL2 RT-MOVE-HANSOM,RM-TOTTENHAM-COURT-RD
RSTACK
?CCL84: EQUAL? WRD,W?TOWER /?CTR85
EQUAL? GL-PRSO,RM-TOWER-ENTRANCE,LG-TOWER,RM-DRAWBRIDGE \?CCL86
?CTR85: CALL2 RT-MOVE-HANSOM,RM-TOWER-ENTRANCE
RSTACK
?CCL86: EQUAL? GL-PRSO,RM-TRAFALGAR-SQUARE,RM-DIOGENES-CLUB \?CCL90
CALL2 RT-MOVE-HANSOM,RM-TRAFALGAR-SQUARE
RSTACK
?CCL90: EQUAL? GL-PRSO,RM-UPPER-THAMES-ST \?CCL92
CALL2 RT-MOVE-HANSOM,RM-UPPER-THAMES-ST
RSTACK
?CCL92: EQUAL? GL-PRSO,RM-VICTORIA-STREET \?CCL94
CALL2 RT-MOVE-HANSOM,RM-VICTORIA-STREET
RSTACK
?CCL94: EQUAL? GL-PRSO,RM-VICTORIA-SQUARE \?CCL96
CALL2 RT-MOVE-HANSOM,RM-VICTORIA-SQUARE
RSTACK
?CCL96: EQUAL? GL-PRSO,RM-WHITEHALL,RM-SCOTLAND-YARD \?CCL98
CALL2 RT-MOVE-HANSOM,RM-WHITEHALL
RSTACK
?CCL98: EQUAL? GL-PRSO,RM-YORK-PLACE \FALSE
CALL2 RT-MOVE-HANSOM,RM-YORK-PLACE
RSTACK
?CCL17: EQUAL? GL-PRSA,V?STAND,V?STAND-ON,V?LEAP \?CCL102
PRINT K-ENOUGH-ROOM-MSG
CRLF
RTRUE
?CCL102: EQUAL? GL-PRSA,V?SIT \?CCL104
PRINTR "You're already seated."
?CCL104: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
EQUAL? GL-PRSO,FALSE-VALUE,ROOMS /?CND107
IN? GL-PRSO,GLOBAL-OBJECTS /?CND107
CALL RT-META-IN?,GL-PRSO,TH-HANSOM-CAB
ZERO? STACK \?CND107
ICALL1 RT-CYOU-MSG
PRINTI "cannot reach "
ICALL1 RT-THEO-PRINT
PRINTR "."
?CND107: EQUAL? GL-PRSI,FALSE-VALUE,ROOMS /FALSE
IN? GL-PRSI,GLOBAL-OBJECTS /FALSE
FSET? GL-PRSI,FL-PERSON \?CCL119
IN? GL-PRSI,GL-PLACE-CUR /FALSE
?CCL119: CALL RT-META-IN?,GL-PRSI,TH-HANSOM-CAB
ZERO? STACK \FALSE
ICALL1 RT-CYOU-MSG
PRINTI "cannot reach "
ICALL1 RT-THEI-PRINT
PRINTR "."
.FUNCT RT-CF-TH-GROWLER-CAB,CONTEXT
IN? CH-PLAYER,TH-GROWLER-CAB \?CND1
SET 'GL-WHERE-TO-PROMPT?,TRUE-VALUE
SET 'GL-WHERE-TO-ORPH?,TRUE-VALUE
?CND1: EQUAL? GL-PRSA,V?WALK \?CCL5
EQUAL? GL-P-WALK-DIR,P?OUT \?CCL5
CALL RT-PERFORM,V?EXIT,TH-GROWLER-CAB
RSTACK
?CCL5: EQUAL? GL-PRSA,V?WALK \?PRD11
EQUAL? GL-WINNER,CH-PLAYER /?CTR8
?PRD11: EQUAL? GL-PRSA,V?ENTER \?CCL9
EQUAL? GL-PRSO,TH-GROWLER-CAB /?CCL9
?CTR8: ICALL1 RT-CYOU-MSG
ICALL RT-WOULD-HAVE-TO-MSG,STR?797,TH-GROWLER-CAB
PRINTR " first."
?CCL9: EQUAL? GL-PRSA,V?DRIVE,V?WALK-TO \?CCL17
PRINTI """Oh good! I've never been THERE before."""
CRLF
CRLF
SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
ICALL2 RT-ALARM-CLR,RT-I-GROWLER-TO?
ICALL2 RT-ALARM-CLR,RT-I-GROWLER-LEAVE
ICALL1 RT-MOVE-GROWLER
IN? CH-PLAYER,TH-GROWLER-CAB \?CCL20
SET 'GL-PUPPY-MSG?,FALSE-VALUE
PRINT K-WILD-RIDE-MSG
CRLF
CRLF
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,5,0
ICALL RT-ALARM-SET-REL,RT-I-GROWLER-TO?,STACK
ICALL1 RT-DESC-ALL
RTRUE
?CCL20: PRINTI "The cab drives off."
CRLF
CALL1 RT-IS-LIT? >GL-NOW-LIT?
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,30,0
ICALL RT-ALARM-SET-REL,RT-I-GROWLER-LEAVE,STACK
RTRUE
?CCL17: EQUAL? GL-PRSA,V?STAND,V?STAND-ON,V?LEAP \?CCL22
PRINT K-ENOUGH-ROOM-MSG
CRLF
RTRUE
?CCL22: EQUAL? GL-PRSA,V?SIT \?CCL24
PRINTR "You're already seated."
?CCL24: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
EQUAL? GL-PRSO,FALSE-VALUE,ROOMS /?CND27
IN? GL-PRSO,GLOBAL-OBJECTS /?CND27
CALL RT-META-IN?,GL-PRSO,TH-GROWLER-CAB
ZERO? STACK \?CND27
ICALL1 RT-CYOU-MSG
PRINTI "cannot reach "
ICALL1 RT-THEO-PRINT
PRINTR "."
?CND27: EQUAL? GL-PRSI,FALSE-VALUE,ROOMS /FALSE
IN? GL-PRSI,GLOBAL-OBJECTS /FALSE
CALL RT-META-IN?,GL-PRSI,TH-GROWLER-CAB
ZERO? STACK \FALSE
ICALL1 RT-CYOU-MSG
PRINTI "cannot reach "
ICALL1 RT-THEI-PRINT
PRINTR "."
.FUNCT RT-BLOW-WHISTLE,WHO,WHO2,L,?TMP1
LOC TH-HANSOM-CAB >?TMP1
LOC TH-GROWLER-CAB
EQUAL? GL-PLACE-CUR,?TMP1,STACK \?CCL3
PRINT K-CAB-HERE-MSG
CRLF
RTRUE
?CCL3: PRINTI "Tweeeeeeeeee!"
CRLF
FSET? GL-PLACE-CUR,FL-INDOORS \?CCL6
EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY \?CND7
FSET? CH-HOLMES,FL-ASLEEP \?CND7
PRINT K-HOLMES-DISTRACTION-MSG
CRLF
RTRUE
?CND7: CALL1 RT-ANYONE-HERE? >WHO
ZERO? WHO /TRUE
LOC WHO >L
REMOVE WHO
CALL1 RT-ANYONE-HERE? >WHO2
ZERO? WHO2 /?CCL15
PRINTI "Everyone holds their hands to their "
JUMP ?CND13
?CCL15: ICALL2 RT-CTHEO-PRINT,WHO
PRINTI " hold"
ICALL2 RT-S-NOS-MSG,WHO
PRINTC 32
ICALL2 RT-YOUR-MSG,WHO
PRINTI "hands to "
ICALL2 RT-YOUR-MSG,WHO
?CND13: MOVE WHO,L
PRINTI "ears and glare"
ICALL2 RT-S-NOS-MSG,WHO
PRINTR " at you."
?CCL6: EQUAL? GL-PLACE-CUR,RM-TOWER-GREEN,RM-OUTER-WARD,RM-BYWARD-TOWER /TRUE
EQUAL? GL-PLACE-CUR,RM-INSIDE-TRAITORS-GATE,RM-OUTSIDE-TRAITORS-GATE,RM-DRAWBRIDGE /TRUE
EQUAL? GL-PLACE-CUR,RM-THAMES-ONE,RM-THAMES-TWO,RM-THAMES-THREE /TRUE
EQUAL? GL-PLACE-CUR,RM-THAMES-FOUR,RM-THAMES-FIVE,RM-SWAN-LANE /TRUE
INC 'TH-CAB-WHISTLE-AUX1
SET 'TH-CAB-WHISTLE-AUX2,GL-PLACE-CUR
CALL2 RT-ALARM-SET?,RT-I-CAB-ARRIVE
ZERO? STACK \TRUE
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,1,0
ICALL RT-ALARM-SET-REL,RT-I-CAB-ARRIVE,STACK
RTRUE
.FUNCT RT-AC-TH-HANSOM-CAB,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "It is a small cab with two wheels and room for only two persons, drawn by a single horse."
?CCL3: EQUAL? GL-PRSA,V?ENTER \?CCL5
EQUAL? GL-PRSO,ROOMS,TH-HANSOM-CAB \?CCL5
FSET? TH-SUIT-OF-ARMOUR,FL-WORN \?CCL10
PRINT K-HEAVY-ARMOUR-MSG
CRLF
RTRUE
?CCL10: IN? GL-WINNER,TH-HANSOM-CAB /FALSE
MOVE GL-WINNER,TH-HANSOM-CAB
ZERO? GL-PUPPY /?CCL15
EQUAL? GL-WINNER,CH-PLAYER \?CCL15
MOVE GL-PUPPY,TH-HANSOM-CAB
PRINTI "You and "
ICALL2 RT-THEO-PRINT,GL-PUPPY
PRINTI " get "
JUMP ?CND13
?CCL15: ICALL RT-CYOU-MSG,STR?753,STR?754
?CND13: FSET TH-HANSOM-CAB,FL-NODESC
ICALL2 RT-ALARM-CLR,RT-I-HANSOM-LEAVE
SET 'TH-HANSOM-CAB-AUX2,0
SET 'GL-WHERE-TO-PROMPT?,TRUE-VALUE
SET 'GL-WHERE-TO-ORPH?,TRUE-VALUE
PRINTR "into the cab."
?CCL5: EQUAL? GL-PRSA,V?EXIT \?CCL19
EQUAL? GL-PRSO,ROOMS,TH-HANSOM-CAB \?CCL19
IN? CH-PLAYER,TH-HANSOM-CAB \FALSE
MOVE GL-WINNER,GL-PLACE-CUR
ZERO? GL-PUPPY /?CCL27
EQUAL? GL-WINNER,CH-PLAYER \?CCL27
MOVE GL-PUPPY,GL-PLACE-CUR
PRINTI "You and "
ICALL2 RT-THEO-PRINT,GL-PUPPY
PRINTI " get "
JUMP ?CND25
?CCL27: ICALL RT-CYOU-MSG,STR?753,STR?754
?CND25: PRINTI "out of the cab."
FCLEAR TH-HANSOM-CAB,FL-NODESC
ZERO? TH-HANSOM-CAB-AUX2 \?CND30
IN? CH-PLAYER,TH-HANSOM-CAB /?CND30
ZERO? GL-PUPPY /?PRD35
IN? GL-PUPPY,TH-HANSOM-CAB /?CND30
?PRD35: EQUAL? GL-PLACE-CUR,RM-VICTORIA-SQUARE /?CND30
PRINTI " After"
ICALL RT-YOU-MSG,STR?753,STR?754
PRINTI "out, it drives off."
ICALL1 RT-S-CAB-LEAVES
MOVE TH-HANSOM-CAB,RM-VICTORIA-SQUARE
ICALL2 RT-REMOVE-ALL,TH-HANSOM-CAB
MOVE CH-HANSOM-CABBIE,TH-HANSOM-CAB
ICALL2 RT-ALARM-CLR,RT-I-HANSOM-LEAVE
CALL1 RT-IS-LIT? >GL-NOW-LIT?
?CND30: SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
CRLF
RTRUE
?CCL19: EQUAL? GL-PRSA,V?LOOK-ON \?CCL39
PRINTR "There is a cab driver sitting on the hansom."
?CCL39: EQUAL? GL-PRSA,V?TAKE,V?PUSH-TO \?CCL41
ZERO? GL-NOW-PRSI? \?CCL41
PRINT K-TAKE-CAB-MSG
CRLF
RETURN 2
?CCL41: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
.FUNCT RT-AC-TH-GROWLER-CAB,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "It is a large cab with four wheels and room for four persons, drawn by a single horse."
?CCL3: EQUAL? GL-PRSA,V?ENTER \?CCL5
EQUAL? GL-PRSO,ROOMS,TH-GROWLER-CAB \?CCL5
FSET? TH-SUIT-OF-ARMOUR,FL-WORN \?CCL10
PRINT K-HEAVY-ARMOUR-MSG
CRLF
RTRUE
?CCL10: IN? GL-WINNER,TH-GROWLER-CAB /FALSE
MOVE GL-WINNER,TH-GROWLER-CAB
ZERO? GL-PUPPY /?CCL15
EQUAL? GL-WINNER,CH-PLAYER \?CCL15
MOVE GL-PUPPY,TH-GROWLER-CAB
PRINTI "You and "
ICALL2 RT-THEO-PRINT,GL-PUPPY
PRINTI " get "
JUMP ?CND13
?CCL15: ICALL RT-CYOU-MSG,STR?753,STR?754
?CND13: FSET TH-GROWLER-CAB,FL-NODESC
ICALL2 RT-ALARM-CLR,RT-I-GROWLER-LEAVE
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,5,0
ICALL RT-ALARM-SET-REL,RT-I-GROWLER-TO?,STACK
SET 'GL-WHERE-TO-PROMPT?,TRUE-VALUE
SET 'GL-WHERE-TO-ORPH?,TRUE-VALUE
PRINTR "into the cab."
?CCL5: EQUAL? GL-PRSA,V?EXIT \?CCL19
EQUAL? GL-PRSO,ROOMS,TH-GROWLER-CAB \?CCL19
IN? CH-PLAYER,TH-GROWLER-CAB \FALSE
MOVE GL-WINNER,GL-PLACE-CUR
ZERO? GL-PUPPY /?CCL27
EQUAL? GL-WINNER,CH-PLAYER \?CCL27
MOVE GL-PUPPY,GL-PLACE-CUR
PRINTI "You and "
ICALL2 RT-THEO-PRINT,GL-PUPPY
PRINTI " get "
JUMP ?CND25
?CCL27: ICALL RT-CYOU-MSG,STR?753,STR?754
?CND25: PRINTI "out of the cab."
FCLEAR TH-GROWLER-CAB,FL-NODESC
IN? CH-PLAYER,TH-GROWLER-CAB /?CND30
ZERO? GL-PUPPY /?PRD34
IN? GL-PUPPY,TH-GROWLER-CAB /?CND30
?PRD34: EQUAL? GL-PLACE-CUR,RM-OXFORD-ST /?CND30
PRINTI " After"
ICALL RT-YOU-MSG,STR?753,STR?754
PRINTI "out, it drives off."
ICALL1 RT-S-CAB-LEAVES
MOVE TH-GROWLER-CAB,RM-OXFORD-ST
ICALL2 RT-REMOVE-ALL,TH-GROWLER-CAB
MOVE CH-GROWLER-CABBIE,TH-GROWLER-CAB
ICALL2 RT-ALARM-CLR,RT-I-GROWLER-LEAVE
ICALL2 RT-ALARM-CLR,RT-I-GROWLER-TO?
CALL1 RT-IS-LIT? >GL-NOW-LIT?
?CND30: SET 'GL-WHERE-TO-PROMPT?,FALSE-VALUE
SET 'GL-WHERE-TO-ORPH?,FALSE-VALUE
CRLF
RTRUE
?CCL19: EQUAL? GL-PRSA,V?LOOK-ON \?CCL38
PRINTR "There is a cab driver sitting on the growler."
?CCL38: EQUAL? GL-PRSA,V?TAKE,V?PUSH-TO \?CCL40
ZERO? GL-NOW-PRSI? \?CCL40
PRINT K-TAKE-CAB-MSG
CRLF
RETURN 2
?CCL40: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
.FUNCT RT-AC-TH-CAB-WHISTLE
EQUAL? GL-PRSA,V?BLOW-INTO \?CCL3
ZERO? GL-NOW-PRSI? \?CCL3
CALL1 RT-BLOW-WHISTLE
RSTACK
?CCL3: EQUAL? GL-PRSA,V?CALL \?CCL7
ZERO? GL-NOW-PRSI? /?CCL7
EQUAL? GL-PRSO,TH-HANSOM-CAB \?CCL12
ICALL1 RT-BLOW-WHISTLE
CALL2 RT-ALARM-SET?,RT-I-CAB-ARRIVE
ZERO? STACK /TRUE
ICALL RT-DO-CLOCK-SET,GL-TIME-UPDT-INC,0,2,0
ICALL1 RT-BLOW-WHISTLE
RTRUE
?CCL12: EQUAL? GL-PRSO,TH-GROWLER-CAB \?CCL16
ICALL1 RT-BLOW-WHISTLE
CALL2 RT-ALARM-SET?,RT-I-CAB-ARRIVE
ZERO? STACK /TRUE
ICALL RT-DO-CLOCK-SET,GL-TIME-UPDT-INC,0,2,0
RTRUE
?CCL16: GET GL-P-NAMW,0
EQUAL? STACK,W?CAB \?CCL20
CALL1 RT-BLOW-WHISTLE
RSTACK
?CCL20: ICALL1 RT-CYOU-MSG
PRINTI "can't "
PRINTB GL-P-PRSA-WORD
PRINTC 32
ICALL1 RT-A-PRINT
PRINTI " with "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL7: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
.ENDI

786
cab.zil Normal file
View File

@ -0,0 +1,786 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : CAB.ZIL"
; "auth : $Author: RAB $"
; "date : $Date: 28 Oct 1987 4:35:40 $"
; "rev : $Revision: 1.63 $"
; "vers : 1.00"
;*****************************************************************************
<OBJECT CH-HANSOM-CABBIE
(LOC TH-HANSOM-CAB)
(DESC "hansom cabbie")
(FLAGS FL-NODESC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL)
(SYNONYM CABBIE DRIVER)
(ADJECTIVE HANSOM)
(SIZE 99)
(ACTION RT-AC-CH-HANSOM-CABBIE)>
<OBJECT CH-GROWLER-CABBIE
(LOC TH-GROWLER-CAB)
(DESC "growler cabbie")
(FLAGS FL-NODESC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL)
(SYNONYM CABBIE DRIVER ;FLOYD)
(ADJECTIVE GROWLER)
(SIZE 99)
(ACTION RT-AC-CH-GROWLER-CABBIE)>
<ROUTINE RT-AC-CH-HANSOM-CABBIE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-CH-AC "CH-HANSOM-CABBIE" .CONTEXT>>
<COND (<MC-THIS-WINNER?>
<COND (<MC-VERB? WAIT>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<TELL "\"Right-o.\"" CR>
<SETG TH-HANSOM-CAB-AUX2 1>
<RT-ALARM-CLR ,RT-I-HANSOM-LEAVE>
<RT-ALARM-SET-REL ,RT-I-HANSOM-LEAVE <RT-PARM-SET 0 30 0>>)
(<MC-VERB? DRIVE WALK-TO>
<RT-CF-TH-HANSOM-CAB>)
(<MC-VERB? HELLO GOODBYE THANK>
<SETG GL-WINNER ,CH-PLAYER>
<RT-PERFORM ,GL-PRSA ,CH-HANSOM-CABBIE>)
(T
<TELL "\"Sorry, guv. All I does is drives a cab.\"" CR>)>)
(<OR <AND <MC-VERB? PAY>
<MC-THIS-PRSO?>>
<AND <MC-VERB? GIVE>
<MC-THIS-PRSI?>
<MC-IS? ,GL-PRSO ,FL-MONEY>>>
<TELL
"\"No thanks, guv'nor. It'll go on Mr 'Olmes's monthly account.\"" CR>)
(<AND <MC-VERB? TELL>
<MC-THIS-PRSO?>
,GL-P-CONT>
<RFALSE>)
(<MC-VERB? HELLO>
<TELL "\"'Ello.\"" CR>)
(<MC-VERB? GOODBYE>
<TELL "\"Ta ta.\"" CR>)
(<MC-VERB? THANK>
<TELL "\"Anytime, mate.\"" CR>)
(<RT-TALK-VERB?>
<TELL "\"Sorry, sir. No time to chat.\"" CR>)>>
<ROUTINE RT-AC-CH-GROWLER-CABBIE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-CH-AC "CH-GROWLER-CABBIE" .CONTEXT>>
<COND (<MC-THIS-WINNER?>
<COND (<MC-VERB? WAIT>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<TELL CTHE ,CH-GROWLER-CABBIE " says brightly, \"Okay.\"" CR>)
(<MC-VERB? DRIVE WALK-TO>
<RT-CF-TH-GROWLER-CAB>)
(T
<TELL CTHE ,CH-GROWLER-CABBIE " says brightly, \"Hello,\"
and looks at you expectantly." CR>)>)
(<OR <AND <MC-VERB? PAY>
<MC-THIS-PRSO?>>
<AND <MC-VERB? GIVE>
<MC-THIS-PRSI?>
<MC-IS? ,GL-PRSO ,FL-MONEY>>>
<TELL
CTHE ,CH-GROWLER-CABBIE " says brightly, \"No thanks. I'm not in it for the
money. I just like to meet new people.\"" CR>)
(<AND <MC-VERB? TELL>
<MC-THIS-PRSO?>
,GL-P-CONT>
<RFALSE>)
(<RT-TALK-VERB?>
<TELL CTHE ,CH-GROWLER-CABBIE " says brightly, \"Hello,\" and looks
at you expectantly." CR>)>>
; "This was formerly contained in the AUX1 properties of the rooms in the
table. Since it's just the numbers from 1 to 37, we can play horrible
games by subtracting the initial pointer and the INTBL? pointer instead.
It's a byte table because we order objects ROOMS-FIRST"
<CONSTANT CAB-ROOM-IDS-LEN 37>
<CONSTANT CAB-ROOM-IDS
<TABLE (PURE BYTE)
RM-221B-BAKER-ST ;1
RM-YORK-PLACE ;2
RM-MARYLEBONE-RD ;3
RM-TOTTENHAM-COURT-RD ;4
RM-ST-GILES-CIRCUS ;5
RM-OXFORD-ST ;6
RM-ORCHARD-ST ;7
RM-AUDLEY-ST ;8
RM-HYDE-PARK-CORNER ;9
RM-KENSINGTON-GARDENS ;10
RM-TRAFALGAR-SQUARE ;11
RM-GREAT-RUSSELL-ST ;12
RM-GROSVENOR-PLACE ;13
RM-VICTORIA-SQUARE ;14
RM-VICTORIA-STREET ;15
RM-BROAD-SANCTUARY ;16
RM-PARLIAMENT-SQUARE ;17
RM-BUCKINGHAM-PALACE-RD ;18
RM-QUEENS-GARDENS ;19
RM-BIRDCAGE-WALK ;20
RM-THE-MALL ;21
RM-WHITEHALL ;22
RM-NEW-OXFORD-ST ;23
RM-COVENT-GARDEN ;24
RM-THE-STRAND ;25
RM-FLEET-STREET ;26
RM-THE-EMBANKMENT ;27
RM-UPPER-THAMES-ST ;28
0;RM-BLIND-ALLEY ;29
RM-PINCHIN-LANE ;30
RM-CHEAPSIDE ;31
RM-THREADNEEDLE-ST ;32
RM-KING-WILLIAM-ST ;33
RM-MONUMENT ;34
RM-LOWER-THAMES-ST ;35
RM-LONDON-BRIDGE ;36
RM-TOWER-ENTRANCE ;37>>
<ROUTINE RT-GET-ROOM-ID (HERE "AUX" TBL)
<COND (<SET TBL <INTBL? .HERE ,CAB-ROOM-IDS ,CAB-ROOM-IDS-LEN 1>>
<COND (<L? ,CAB-ROOM-IDS 0>
<+ <- .TBL ,CAB-ROOM-IDS> 1>)
(T
<+ <- ,CAB-ROOM-IDS .TBL> 1>)>)
(T 0)>>
<ROUTINE RT-CAB-DIST (HERE THERE "AUX" NUM1 NUM2 (PTR 0) TMP)
<SET NUM1 <RT-GET-ROOM-ID .HERE>>
<SET NUM2 <RT-GET-ROOM-ID .THERE>>
<COND ;(<OR <ZERO? .NUM1>
<ZERO? .NUM2>>
<TELL "*** ERROR: Missing room number ***" CR D .HERE " to " D .THERE "." CR>
<RETURN 0>)
(<OR <EQUAL? .HERE .THERE>
<EQUAL? .NUM1 .NUM2>>
<RETURN 0>)>
<COND (<L? .NUM1 .NUM2>
<SET TMP .NUM1>
<SET NUM1 .NUM2>
<SET NUM2 .TMP>)>
<SET NUM1 <- .NUM1 2>>
<REPEAT ()
<COND (<L? .NUM1 1>
<RETURN>)
(T
<SET PTR <+ .PTR .NUM1>>
<DEC NUM1>)>>
<SET PTR <+ .PTR <- .NUM2 1>>>
<RETURN <GETB ,GL-CAB-DIST-TBL .PTR>>>
<ROUTINE RT-I-CAB-ARRIVE ("AUX" (CAB <>) (PLACE <>) NUM SCORE AUX1)
<SET NUM ,TH-CAB-WHISTLE-AUX1>
<SET PLACE ,TH-CAB-WHISTLE-AUX2>
<SETG TH-CAB-WHISTLE-AUX1 0>
<SETG TH-CAB-WHISTLE-AUX2 0>
<COND (<AND <MC-HERE? .PLACE>
<NOT <MC-VERB? WALK>>>
<COND (<EQUAL? .NUM 1>
<SET CAB ,TH-GROWLER-CAB>
<SET SCORE 0>
<RT-ALARM-SET-REL ,RT-I-GROWLER-LEAVE <RT-PARM-SET 0 5 0>>
<RT-REMOVE-ALL ,TH-GROWLER-CAB>
<MOVE ,CH-GROWLER-CABBIE ,TH-GROWLER-CAB>
<MC-MAKE ,CH-GROWLER-CABBIE ,FL-SEEN>
;<IFSOUND <COND (<F? ,SOUND-QUEUED?>
<SETG CAB-RAMP 2>
<RT-S-CAB-ARRIVES>)>>)
(<EQUAL? .NUM 2>
<SET CAB ,TH-HANSOM-CAB>
<SET SCORE 5>
<RT-ALARM-SET-REL ,RT-I-HANSOM-LEAVE <RT-PARM-SET 0 5 0>>
<RT-REMOVE-ALL ,TH-HANSOM-CAB>
<MOVE ,CH-HANSOM-CABBIE ,TH-HANSOM-CAB>
<MC-MAKE ,CH-HANSOM-CABBIE ,FL-SEEN>)
(T
<RFALSE>)>
<IFSOUND <COND (<F? ,SOUND-QUEUED?>
<SETG CAB-RAMP 2>
<RT-S-CAB-ARRIVES>)>>
<TELL CR "A " D .CAB " pulls up beside you." CR>
<MOVE .CAB ,GL-PLACE-CUR>
<COND (<==? .CAB ,TH-HANSOM-CAB>
<SET AUX1 ,TH-HANSOM-CAB-AUX1>)
(T
<SET AUX1 ,TH-GROWLER-CAB-AUX1>)>
<COND (<ZERO? .AUX1>
<COND (<==? .CAB ,TH-HANSOM-CAB>
<SETG TH-HANSOM-CAB-AUX1 1>)
(T
<SETG TH-GROWLER-CAB-AUX1 1>)>
<COND (<NOT <ZERO? .SCORE>>
<RT-UPDATE-SCORE .SCORE>)>)>
<RTRUE>)>>
<ROUTINE RT-I-HANSOM-LEAVE ()
<COND (<NOT <MC-HERE? ,RM-VICTORIA-SQUARE>>
<COND (<RT-VISIBLE? ,TH-HANSOM-CAB>
<IFSOUND <RT-S-CAB-LEAVES>>
<TELL CTHE ,TH-HANSOM-CAB " drives off." CR>)>
<MOVE ,TH-HANSOM-CAB ,RM-VICTORIA-SQUARE>
<RT-REMOVE-ALL ,TH-HANSOM-CAB>
<MOVE ,CH-HANSOM-CABBIE ,TH-HANSOM-CAB>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>)>
<SETG TH-HANSOM-CAB-AUX2 0>
<RFALSE>>
<ROUTINE RT-I-HANSOM-TO? ()
<COND (<IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<TELL "\"Where to mister?\"" CR>
<RT-ALARM-SET-REL ,RT-I-HANSOM-TO? <RT-PARM-SET 0 1 0>>)>>
<ROUTINE RT-I-GROWLER-LEAVE ()
<COND (<NOT <MC-HERE? ,RM-OXFORD-ST>>
<COND (<RT-VISIBLE? ,TH-GROWLER-CAB>
<IFSOUND <RT-S-CAB-LEAVES>>
<TELL CTHE ,TH-GROWLER-CAB " drives off." CR>)>
<MOVE ,TH-GROWLER-CAB ,RM-OXFORD-ST>
<RT-REMOVE-ALL ,TH-GROWLER-CAB>
<MOVE ,CH-GROWLER-CABBIE ,TH-GROWLER-CAB>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>)>
<RFALSE>>
<ROUTINE RT-I-GROWLER-TO? ()
<COND (<IN? ,CH-PLAYER ,TH-GROWLER-CAB>
<TELL CR
"Suddenly the cabbie - who seems to have a low threshold of boredom - pipes
up and says, \"I know where we can go!\"" CR CR ,K-WILD-RIDE-MSG CR>
<RT-MOVE-GROWLER>
<RT-ALARM-SET-REL ,RT-I-GROWLER-TO? <RT-PARM-SET 0 5 0>>
<CRLF>
<RT-DESC-ALL>)>>
<ROUTINE RT-MOVE-HANSOM ("OPTIONAL" (ROOM <>) MIN)
<COND (<MC-HERE? .ROOM>
<TELL "\"We're already here, guv.\"" CR>)
(<MC-T? .ROOM>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<SET MIN <* <RT-CAB-DIST ,GL-PLACE-CUR .ROOM> ,K-HANSOM-TIME>>
<TELL "\"Right-o.\"" CR CR>
<MOVE ,TH-HANSOM-CAB .ROOM>
<SETG GL-PLACE-PRV ,GL-PLACE-CUR>
<SETG GL-PLACE-CUR .ROOM>
<COND (<IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<SETG GL-PUPPY-MSG? <>>
<IFSOUND <COND (<==? .ROOM ,RM-COVENT-GARDEN>
<SETG LOOPING? ,S-CROWD>
<SETG LOOP-VOL 8>)
(T
<SETG LOOPING? <>>)>
<SOUNDS ,S-HORSE ,S-START 4 6>>
<TELL "The cab speeds through the streets, ">
<COND (<EQUAL? <RT-TIME-OF-DAY> 1 2 3>
<TELL "deftly weaving in and out of the
jubilee traffic and ">)>
<TELL "whizzing past famous landmarks. Only a few minutes
later, you arrive at your destination." CR CR>
<RT-DESC-ALL>)
(T
<IFSOUND <RT-S-CAB-LEAVES>>
<TELL "The cab drives off." CR>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>
<RT-ALARM-SET-REL ,RT-I-HANSOM-LEAVE <RT-PARM-SET 0 30 0>>)>
<RT-ALARM-CLR ,RT-I-HANSOM-LEAVE>
<RT-CLOCK-JMP 0 .MIN 0>
<RTRUE>)>>
<ROUTINE RT-MOVE-GROWLER ("AUX" ROOM NUM MIN)
<SET NUM <RANDOM 37>>
<COND (<EQUAL? .NUM 1>
<SET ROOM ,RM-AUDLEY-ST>)
(<EQUAL? .NUM 2>
<SET ROOM ,RM-221B-BAKER-ST>)
(<EQUAL? .NUM 3>
<SET ROOM ,RM-BIRDCAGE-WALK>)
;(<EQUAL? .NUM 4>
<SET ROOM ,RM-BLIND-ALLEY>)
(<EQUAL? .NUM 5>
<SET ROOM ,RM-BROAD-SANCTUARY>)
(<EQUAL? .NUM 6>
<SET ROOM ,RM-BUCKINGHAM-PALACE-RD>)
(<EQUAL? .NUM 7>
<SET ROOM ,RM-CHEAPSIDE>)
(<EQUAL? .NUM 8>
<SET ROOM ,RM-COVENT-GARDEN>)
(<EQUAL? .NUM 9>
<SET ROOM ,RM-THE-EMBANKMENT>)
(<EQUAL? .NUM 10>
<SET ROOM ,RM-FLEET-STREET>)
(<EQUAL? .NUM 11>
<SET ROOM ,RM-GREAT-RUSSELL-ST>)
(<EQUAL? .NUM 12>
<SET ROOM ,RM-GROSVENOR-PLACE>)
(<EQUAL? .NUM 13>
<SET ROOM ,RM-HYDE-PARK-CORNER>)
(<EQUAL? .NUM 14>
<SET ROOM ,RM-KENSINGTON-GARDENS>)
(<EQUAL? .NUM 15>
<SET ROOM ,RM-KING-WILLIAM-ST>)
(<EQUAL? .NUM 16>
<SET ROOM ,RM-LONDON-BRIDGE>)
(<EQUAL? .NUM 17>
<SET ROOM ,RM-LOWER-THAMES-ST>)
(<EQUAL? .NUM 18>
<SET ROOM ,RM-THE-MALL>)
(<EQUAL? .NUM 19>
<SET ROOM ,RM-MARYLEBONE-RD>)
(<EQUAL? .NUM 20>
<SET ROOM ,RM-MONUMENT>)
(<EQUAL? .NUM 21>
<SET ROOM ,RM-NEW-OXFORD-ST>)
(<EQUAL? .NUM 22>
<SET ROOM ,RM-OXFORD-ST>)
(<EQUAL? .NUM 23>
<SET ROOM ,RM-ORCHARD-ST>)
(<EQUAL? .NUM 24>
<SET ROOM ,RM-PARLIAMENT-SQUARE>)
(<EQUAL? .NUM 25>
<SET ROOM ,RM-PINCHIN-LANE>)
(<EQUAL? .NUM 26>
<SET ROOM ,RM-QUEENS-GARDENS>)
(<EQUAL? .NUM 27>
<SET ROOM ,RM-ST-GILES-CIRCUS>)
(<EQUAL? .NUM 28>
<SET ROOM ,RM-THE-STRAND>)
(<EQUAL? .NUM 29>
<SET ROOM ,RM-THREADNEEDLE-ST>)
(<EQUAL? .NUM 30>
<SET ROOM ,RM-TOTTENHAM-COURT-RD>)
(<EQUAL? .NUM 31>
<SET ROOM ,RM-TOWER-ENTRANCE>)
(<EQUAL? .NUM 32>
<SET ROOM ,RM-TRAFALGAR-SQUARE>)
(<EQUAL? .NUM 33>
<SET ROOM ,RM-UPPER-THAMES-ST>)
(<EQUAL? .NUM 34>
<SET ROOM ,RM-VICTORIA-STREET>)
(<EQUAL? .NUM 35>
<SET ROOM ,RM-VICTORIA-SQUARE>)
(<EQUAL? .NUM 36>
<SET ROOM ,RM-WHITEHALL>)
(<EQUAL? .NUM 37>
<SET ROOM ,RM-YORK-PLACE>)
(T
<TELL "This is odd..." CR CR>
<SET ROOM ,RM-KENSINGTON-GARDENS>)>
<SET MIN <* <RT-CAB-DIST ,GL-PLACE-CUR .ROOM> ,K-GROWLER-TIME>>
<IFSOUND <COND (<==? .ROOM ,RM-COVENT-GARDEN>
<SETG LOOPING? ,S-CROWD>
<SETG LOOP-VOL 8>)
(T
<SETG LOOPING? <>>)>
<SOUNDS ,S-HORSE ,S-START 4 6>>
<MOVE ,TH-GROWLER-CAB .ROOM>
<SETG GL-PLACE-PRV ,GL-PLACE-CUR>
<SETG GL-PLACE-CUR .ROOM>
<SETG GL-PUPPY-MSG? <>>
<RT-CLOCK-JMP 0 .MIN 0>>
<ROUTINE RT-CF-TH-HANSOM-CAB ("OPTIONAL" (CONTEXT <>) "AUX" WRD ADJ)
<COND (<IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<SETG GL-WHERE-TO-PROMPT? T>
<SETG GL-WHERE-TO-ORPH? T>)>
<COND (<AND <MC-VERB? WALK>
<EQUAL? ,GL-P-WALK-DIR ,P?OUT>>
<RT-PERFORM ,V?EXIT ,TH-HANSOM-CAB>)
(<OR <AND <MC-VERB? WALK>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<AND <MC-VERB? ENTER>
<NOT <MC-PRSO? ,TH-HANSOM-CAB>>>>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "get out of" ,TH-HANSOM-CAB>
<TELL " first." CR>
<RTRUE>)
(<MC-VERB? DRIVE WALK-TO>
<SET WRD <GET ,GL-P-NAMW 0>>
<SET ADJ <GET ,GL-P-ADJW 0>>
<COND (<MC-PRSO? ,RM-AUDLEY-ST>
<RT-MOVE-HANSOM ,RM-AUDLEY-ST>)
(<MC-PRSO? ,RM-221B-BAKER-ST ,RM-ENTRY-HALL>
<RT-MOVE-HANSOM ,RM-221B-BAKER-ST>)
(<MC-PRSO? ,RM-BIRDCAGE-WALK>
<RT-MOVE-HANSOM ,RM-BIRDCAGE-WALK>)
;(<MC-PRSO? ,RM-BLIND-ALLEY ,RM-SIGN-OF-RED-HERRING>
<RT-MOVE-HANSOM ,RM-BLIND-ALLEY>)
(<MC-PRSO? ,RM-BROAD-SANCTUARY ,LG-TOMBS-ABBEY>
<RT-MOVE-HANSOM ,RM-BROAD-SANCTUARY>)
(<MC-PRSO? ,RM-BUCKINGHAM-PALACE-RD>
<RT-MOVE-HANSOM ,RM-BUCKINGHAM-PALACE-RD>)
(<MC-PRSO? ,RM-CHEAPSIDE>
<RT-MOVE-HANSOM ,RM-CHEAPSIDE>)
(<MC-PRSO? ,RM-COVENT-GARDEN>
<RT-MOVE-HANSOM ,RM-COVENT-GARDEN>)
(<MC-PRSO? ,RM-THE-EMBANKMENT ,LG-WATER>
<RT-MOVE-HANSOM ,RM-THE-EMBANKMENT>)
(<MC-PRSO? ,RM-FLEET-STREET>
<RT-MOVE-HANSOM ,RM-FLEET-STREET>)
(<MC-PRSO? ,RM-GREAT-RUSSELL-ST ,RM-BRITISH-MUSEUM>
<RT-MOVE-HANSOM ,RM-GREAT-RUSSELL-ST>)
(<MC-PRSO? ,RM-GROSVENOR-PLACE>
<RT-MOVE-HANSOM ,RM-GROSVENOR-PLACE>)
(<MC-PRSO? ,RM-HYDE-PARK-CORNER>
<RT-MOVE-HANSOM ,RM-HYDE-PARK-CORNER>)
(<MC-PRSO? ,RM-KENSINGTON-GARDENS>
<RT-MOVE-HANSOM ,RM-KENSINGTON-GARDENS>)
(<MC-PRSO? ,RM-KING-WILLIAM-ST>
<RT-MOVE-HANSOM ,RM-KING-WILLIAM-ST>)
(<MC-PRSO? ,RM-LONDON-BRIDGE>
<RT-MOVE-HANSOM ,RM-LONDON-BRIDGE>)
(<MC-PRSO? ,RM-LOWER-THAMES-ST ,RM-BAR-OF-GOLD
,RM-SWAN-LANE>
<RT-MOVE-HANSOM ,RM-LOWER-THAMES-ST>)
(<MC-PRSO? ,RM-THE-MALL>
<RT-MOVE-HANSOM ,RM-THE-MALL>)
(<MC-PRSO? ,RM-MARYLEBONE-RD ,RM-MADAME-TUSSAUDS>
<RT-MOVE-HANSOM ,RM-MARYLEBONE-RD>)
(<OR <AND <EQUAL? .WRD ,W?MONUMENT>
<EQUAL? .ADJ <>>>
<MC-PRSO? ,RM-MONUMENT>>
<RT-MOVE-HANSOM ,RM-MONUMENT>)
(<MC-PRSO? ,RM-NEW-OXFORD-ST>
<RT-MOVE-HANSOM ,RM-NEW-OXFORD-ST>)
(<OR <AND <EQUAL? .WRD ,W?STREET ,W?ST>
<EQUAL? .ADJ ,W?OXFORD>>
<MC-PRSO? ,RM-OXFORD-ST>>
<RT-MOVE-HANSOM ,RM-OXFORD-ST>)
(<MC-PRSO? ,RM-ORCHARD-ST>
<RT-MOVE-HANSOM ,RM-ORCHARD-ST>)
(<MC-PRSO? ,RM-PARLIAMENT-SQUARE ,RM-PARLIAMENT ,TH-BELL>
<RT-MOVE-HANSOM ,RM-PARLIAMENT-SQUARE>)
(<MC-PRSO? ,RM-PINCHIN-LANE ,RM-SHERMANS-HOUSE>
<RT-MOVE-HANSOM ,RM-PINCHIN-LANE>)
(<MC-PRSO? ,RM-QUEENS-GARDENS ,RM-BUCKINGHAM-PALACE>
<RT-MOVE-HANSOM ,RM-QUEENS-GARDENS>)
(<MC-PRSO? ,RM-ST-GILES-CIRCUS>
<RT-MOVE-HANSOM ,RM-ST-GILES-CIRCUS>)
(<MC-PRSO? ,RM-THE-STRAND>
<RT-MOVE-HANSOM ,RM-THE-STRAND>)
(<MC-PRSO? ,RM-THREADNEEDLE-ST ,RM-BANK-OF-ENGLAND>
<RT-MOVE-HANSOM ,RM-THREADNEEDLE-ST>)
(<MC-PRSO? ,RM-TOTTENHAM-COURT-RD>
<RT-MOVE-HANSOM ,RM-TOTTENHAM-COURT-RD>)
(<OR <EQUAL? .WRD ,W?TOWER>
<MC-PRSO? ,RM-TOWER-ENTRANCE ,LG-TOWER
,RM-DRAWBRIDGE>>
<RT-MOVE-HANSOM ,RM-TOWER-ENTRANCE>)
(<MC-PRSO? ,RM-TRAFALGAR-SQUARE ,RM-DIOGENES-CLUB>
<RT-MOVE-HANSOM ,RM-TRAFALGAR-SQUARE>)
(<MC-PRSO? ,RM-UPPER-THAMES-ST>
<RT-MOVE-HANSOM ,RM-UPPER-THAMES-ST>)
(<MC-PRSO? ,RM-VICTORIA-STREET>
<RT-MOVE-HANSOM ,RM-VICTORIA-STREET>)
(<MC-PRSO? ,RM-VICTORIA-SQUARE>
<RT-MOVE-HANSOM ,RM-VICTORIA-SQUARE>)
(<MC-PRSO? ,RM-WHITEHALL ,RM-SCOTLAND-YARD>
<RT-MOVE-HANSOM ,RM-WHITEHALL>)
(<MC-PRSO? ,RM-YORK-PLACE>
<RT-MOVE-HANSOM ,RM-YORK-PLACE>)>)
(<MC-VERB? STAND STAND-ON LEAP>
<TELL ,K-ENOUGH-ROOM-MSG CR>
<RTRUE>)
(<MC-VERB? SIT>
<TELL "You're already seated." CR>
<RTRUE>)
(<RT-TOUCH-VERB?>
<COND (<MC-PRSO? <> ,ROOMS>
T)
(<IN? ,GL-PRSO ,GLOBAL-OBJECTS>
T)
(<NOT <RT-META-IN? ,GL-PRSO ,TH-HANSOM-CAB>>
<RT-CYOU-MSG>
<TELL "cannot reach " THEO "." CR>
<RTRUE>)>
<COND (<MC-PRSI? <> ,ROOMS>
<RFALSE>)
(<IN? ,GL-PRSI ,GLOBAL-OBJECTS>
<RFALSE>)
(<AND <FSET? ,GL-PRSI ,FL-PERSON>
<IN? ,GL-PRSI ,GL-PLACE-CUR>>
<RFALSE>)
(<NOT <RT-META-IN? ,GL-PRSI ,TH-HANSOM-CAB>>
<RT-CYOU-MSG>
<TELL "cannot reach " THEI "." CR>)>)>>
<ROUTINE RT-CF-TH-GROWLER-CAB ("OPTIONAL" (CONTEXT <>))
<COND (<IN? ,CH-PLAYER ,TH-GROWLER-CAB>
<SETG GL-WHERE-TO-PROMPT? T>
<SETG GL-WHERE-TO-ORPH? T>)>
<COND (<AND <MC-VERB? WALK>
<EQUAL? ,GL-P-WALK-DIR ,P?OUT>>
<RT-PERFORM ,V?EXIT ,TH-GROWLER-CAB>)
(<OR <AND <MC-VERB? WALK>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<AND <MC-VERB? ENTER>
<NOT <MC-PRSO? ,TH-GROWLER-CAB>>>>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "get out of" ,TH-GROWLER-CAB>
<TELL " first." CR>
<RTRUE>)
(<MC-VERB? DRIVE WALK-TO>
<TELL "\"Oh good! I've never been THERE before.\"" CR CR>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<RT-ALARM-CLR ,RT-I-GROWLER-TO?>
<RT-ALARM-CLR ,RT-I-GROWLER-LEAVE>
<RT-MOVE-GROWLER>
<COND (<IN? ,CH-PLAYER ,TH-GROWLER-CAB>
<SETG GL-PUPPY-MSG? <>>
<TELL ,K-WILD-RIDE-MSG CR CR>
<RT-ALARM-SET-REL ,RT-I-GROWLER-TO? <RT-PARM-SET 0 5 0>>
<RT-DESC-ALL>)
(T
<TELL "The cab drives off." CR>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>
<RT-ALARM-SET-REL ,RT-I-GROWLER-LEAVE <RT-PARM-SET 0 30 0>>)>
<RTRUE>)
(<MC-VERB? STAND STAND-ON LEAP>
<TELL ,K-ENOUGH-ROOM-MSG CR>
<RTRUE>)
(<MC-VERB? SIT>
<TELL "You're already seated." CR>
<RTRUE>)
(<RT-TOUCH-VERB?>
<COND (<MC-PRSO? <> ,ROOMS> T)
(<IN? ,GL-PRSO ,GLOBAL-OBJECTS> T)
(<NOT <RT-META-IN? ,GL-PRSO ,TH-GROWLER-CAB>>
<RT-CYOU-MSG>
<TELL "cannot reach " THEO "." CR>
<RTRUE>)>
<COND (<MC-PRSI? <> ,ROOMS>
<RFALSE>)
(<IN? ,GL-PRSI ,GLOBAL-OBJECTS>
<RFALSE>)
(<NOT <RT-META-IN? ,GL-PRSI ,TH-GROWLER-CAB>>
<RT-CYOU-MSG>
<TELL "cannot reach " THEI "." CR>)>)>>
<ROUTINE RT-BLOW-WHISTLE ("AUX" WHO WHO2 L)
<COND (<MC-HERE? <LOC ,TH-HANSOM-CAB> <LOC ,TH-GROWLER-CAB>>
<TELL ,K-CAB-HERE-MSG CR>
<RTRUE>)
(T
;<IFSOUND <SOUNDS ,S-WHISTLE ,S-START 8 1
<COND (,TH-CAB-WHISTLE-AUX1
<RT-S-WHISTLE-TWICE>)
(T CHECK-LOOPING)>>>
<TELL "Tweeeeeeeeee!" CR>)>
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<COND (<AND <MC-HERE? ,RM-HOLMES-STUDY>
<MC-IS? ,CH-HOLMES ,FL-ASLEEP>>
<TELL ,K-HOLMES-DISTRACTION-MSG CR>
<RTRUE>)>
<SET WHO <RT-ANYONE-HERE?>>
<COND (<MC-T? .WHO>
<SET L <LOC .WHO>>
<REMOVE .WHO>
<SET WHO2 <RT-ANYONE-HERE?>>
<COND (;AND .WHO2 ;<MC-ISNOT? .WHO2 ,FL-ASLEEP> ;"RFP"
<TELL "Everyone holds their hands to their ">)
(T
<TELL CTHE .WHO " hold">
<RT-S-NOS-MSG .WHO>
<TELL " ">
<RT-YOUR-MSG .WHO>
<TELL "hands to ">
<RT-YOUR-MSG .WHO>)>
<MOVE .WHO .L>
<TELL "ears and glare">
<RT-S-NOS-MSG .WHO>
<TELL " at you." CR>)>)
(<NOT <MC-HERE? ,RM-TOWER-GREEN ,RM-OUTER-WARD
,RM-BYWARD-TOWER ,RM-INSIDE-TRAITORS-GATE
,RM-OUTSIDE-TRAITORS-GATE ,RM-DRAWBRIDGE
,RM-THAMES-ONE ,RM-THAMES-TWO
,RM-THAMES-THREE ,RM-THAMES-FOUR
,RM-THAMES-FIVE ,RM-SWAN-LANE>>
<SETG TH-CAB-WHISTLE-AUX1 <+ ,TH-CAB-WHISTLE-AUX1 1>>
<SETG TH-CAB-WHISTLE-AUX2 ,GL-PLACE-CUR>
<COND (<NOT <RT-ALARM-SET? ,RT-I-CAB-ARRIVE>>
<RT-ALARM-SET-REL ,RT-I-CAB-ARRIVE <RT-PARM-SET 0 1 0>>)>)>
<RTRUE>>
<OBJECT TH-HANSOM-CAB
(LOC RM-VICTORIA-SQUARE)
(DESC "hansom cab")
(FLAGS FL-VEHICLE FL-CONTAINER FL-TRYTAKE FL-OPENED FL-LIGHTED
FL-HAS-DESCFCN)
(SYNONYM CAB)
(ADJECTIVE HANSOM)
(SIZE 0 CAPACITY 999)
(ACTION RT-AC-TH-HANSOM-CAB)
(CONTFCN RT-CF-TH-HANSOM-CAB)>
<OBJECT TH-GROWLER-CAB
(LOC RM-OXFORD-ST)
(DESC "growler cab")
(FLAGS FL-VEHICLE FL-CONTAINER FL-TRYTAKE FL-OPENED FL-LIGHTED
FL-HAS-DESCFCN)
(SYNONYM CAB)
(ADJECTIVE GROWLER)
(SIZE 0 CAPACITY 999)
(ACTION RT-AC-TH-GROWLER-CAB)
(CONTFCN RT-CF-TH-GROWLER-CAB)>
<OBJECT TH-CAB-WHISTLE
(LOC CH-PLAYER)
(DESC "whistle")
(FLAGS FL-TAKEABLE FL-CLOTHING FL-WORN)
(SYNONYM WHISTLE)
(SIZE 1 MASS 1)
(ACTION RT-AC-TH-CAB-WHISTLE)>
<ROUTINE RT-AC-TH-HANSOM-CAB ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-HANSOM-CAB">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL
"It is a small cab with two wheels and room for only two persons,
drawn by a single horse." CR>
<RTRUE>)
(<AND <MC-VERB? ENTER>
<MC-PRSO? ,ROOMS ,TH-HANSOM-CAB>>
<COND (<MC-IS? ,TH-SUIT-OF-ARMOUR ,FL-WORN>
<TELL ,K-HEAVY-ARMOUR-MSG CR>)
(<NOT <IN? ,GL-WINNER ,TH-HANSOM-CAB>>
<MOVE ,GL-WINNER ,TH-HANSOM-CAB>
<COND (<AND <MC-T? ,GL-PUPPY>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<MOVE ,GL-PUPPY ,TH-HANSOM-CAB>
<TELL "You and " THE ,GL-PUPPY " get ">)
(T
<RT-CYOU-MSG "get" "gets">)>
<MC-MAKE ,TH-HANSOM-CAB ,FL-NODESC>
<RT-ALARM-CLR ,RT-I-HANSOM-LEAVE>
<SETG TH-HANSOM-CAB-AUX2 0>
;<RT-ALARM-SET-REL ,RT-I-HANSOM-TO? <RT-PARM-SET 0 5 0>>
<SETG GL-WHERE-TO-PROMPT? T>
<SETG GL-WHERE-TO-ORPH? T>
<TELL "into the cab." CR>)>)
(<AND <MC-VERB? EXIT>
<MC-PRSO? ,ROOMS ,TH-HANSOM-CAB>>
<COND (<IN? ,CH-PLAYER ,TH-HANSOM-CAB>
<MOVE ,GL-WINNER ,GL-PLACE-CUR>
<COND (<AND <MC-T? ,GL-PUPPY>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<MOVE ,GL-PUPPY ,GL-PLACE-CUR>
<TELL "You and " THE ,GL-PUPPY " get ">)
(T
<RT-CYOU-MSG "get" "gets">)>
<TELL "out of the cab.">
<MC-UNMAKE ,TH-HANSOM-CAB ,FL-NODESC>
<COND (<AND <ZERO? ,TH-HANSOM-CAB-AUX2>
<NOT <IN? ,CH-PLAYER ,TH-HANSOM-CAB>>
<OR <MC-F? ,GL-PUPPY>
<NOT <IN? ,GL-PUPPY ,TH-HANSOM-CAB>>>
<NOT <MC-HERE? ,RM-VICTORIA-SQUARE>>>
<TELL " After">
<RT-YOU-MSG "get" "gets">
<TELL "out, it drives off.">
<IFSOUND <RT-S-CAB-LEAVES>>
<MOVE ,TH-HANSOM-CAB ,RM-VICTORIA-SQUARE>
<RT-REMOVE-ALL ,TH-HANSOM-CAB>
<MOVE ,CH-HANSOM-CABBIE ,TH-HANSOM-CAB>
<RT-ALARM-CLR ,RT-I-HANSOM-LEAVE>
;<RT-ALARM-CLR ,RT-I-HANSOM-TO?>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>)>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<CRLF>)>)
(<MC-VERB? LOOK-ON>
<TELL "There is a cab driver sitting on the hansom." CR>)
(<AND <MC-VERB? TAKE PUSH-TO>
<MC-THIS-PRSO?>>
<TELL ,K-TAKE-CAB-MSG CR>
<RFATAL>)
(<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>>
<ROUTINE RT-AC-TH-GROWLER-CAB ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-GROWLER-CAB">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL
"It is a large cab with four wheels and room for four persons,
drawn by a single horse." CR>
<RTRUE>)
(<AND <MC-VERB? ENTER>
<MC-PRSO? ,ROOMS ,TH-GROWLER-CAB>>
<COND (<MC-IS? ,TH-SUIT-OF-ARMOUR ,FL-WORN>
<TELL ,K-HEAVY-ARMOUR-MSG CR>)
(<NOT <IN? ,GL-WINNER ,TH-GROWLER-CAB>>
<MOVE ,GL-WINNER ,TH-GROWLER-CAB>
<COND (<AND <MC-T? ,GL-PUPPY>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<MOVE ,GL-PUPPY ,TH-GROWLER-CAB>
<TELL "You and " THE ,GL-PUPPY " get ">)
(T
<RT-CYOU-MSG "get" "gets">)>
<MC-MAKE ,TH-GROWLER-CAB ,FL-NODESC>
<RT-ALARM-CLR ,RT-I-GROWLER-LEAVE>
<RT-ALARM-SET-REL ,RT-I-GROWLER-TO? <RT-PARM-SET 0 5 0>>
<SETG GL-WHERE-TO-PROMPT? T>
<SETG GL-WHERE-TO-ORPH? T>
<TELL "into the cab." CR>)>)
(<AND <MC-VERB? EXIT>
<MC-PRSO? ,ROOMS ,TH-GROWLER-CAB>>
<COND (<IN? ,CH-PLAYER ,TH-GROWLER-CAB>
<MOVE ,GL-WINNER ,GL-PLACE-CUR>
<COND (<AND <MC-T? ,GL-PUPPY>
<EQUAL? ,GL-WINNER ,CH-PLAYER>>
<MOVE ,GL-PUPPY ,GL-PLACE-CUR>
<TELL "You and " THE ,GL-PUPPY " get ">)
(T
<RT-CYOU-MSG "get" "gets">)>
<TELL "out of the cab.">
<MC-UNMAKE ,TH-GROWLER-CAB ,FL-NODESC>
<COND (<AND <NOT <IN? ,CH-PLAYER ,TH-GROWLER-CAB>>
<OR <MC-F? ,GL-PUPPY>
<NOT <IN? ,GL-PUPPY ,TH-GROWLER-CAB>>>
<NOT <MC-HERE? ,RM-OXFORD-ST>>>
<TELL " After">
<RT-YOU-MSG "get" "gets">
<TELL "out, it drives off.">
<IFSOUND <RT-S-CAB-LEAVES>>
<MOVE ,TH-GROWLER-CAB ,RM-OXFORD-ST>
<RT-REMOVE-ALL ,TH-GROWLER-CAB>
<MOVE ,CH-GROWLER-CABBIE ,TH-GROWLER-CAB>
<RT-ALARM-CLR ,RT-I-GROWLER-LEAVE>
<RT-ALARM-CLR ,RT-I-GROWLER-TO?>
<SETG GL-NOW-LIT? <RT-IS-LIT?>>)>
<SETG GL-WHERE-TO-PROMPT? <>>
<SETG GL-WHERE-TO-ORPH? <>>
<CRLF>)>)
(<MC-VERB? LOOK-ON>
<TELL "There is a cab driver sitting on the growler." CR>)
(<AND <MC-VERB? TAKE PUSH-TO>
<MC-THIS-PRSO?>>
<TELL ,K-TAKE-CAB-MSG CR>
<RFATAL>)
(<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>>
<ROUTINE RT-AC-TH-CAB-WHISTLE ()
<DEBUGGING? <RT-DEBUG-OB-AC "TH-CAB-WHISTLE">>
<COND (<AND <MC-VERB? BLOW-INTO>
<MC-THIS-PRSO?>>
<RT-BLOW-WHISTLE>)
(<AND <MC-VERB? CALL>
<MC-THIS-PRSI?>>
<COND (<MC-PRSO? ,TH-HANSOM-CAB>
<RT-BLOW-WHISTLE>
<COND (<RT-ALARM-SET? ,RT-I-CAB-ARRIVE>
<RT-CLOCK-INC-SET 0 2 0>
<RT-BLOW-WHISTLE>)>
<RTRUE>)
(<MC-PRSO? ,TH-GROWLER-CAB>
<RT-BLOW-WHISTLE>
<COND (<RT-ALARM-SET? ,RT-I-CAB-ARRIVE>
<RT-CLOCK-INC-SET 0 2 0>)>
<RTRUE>)
(<EQUAL? <GET ,GL-P-NAMW 0> ,W?CAB>
<RT-BLOW-WHISTLE>)
(T
<RT-CYOU-MSG>
<TELL "can't " VW " " AO " with " THEI "." CR>)>)
(<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>>

53
charles.zabstr Normal file
View File

@ -0,0 +1,53 @@
<OBJECT TH-WAX-HEAD (LOC TH-CHARLES-STATUE) (FLAGS FL-TAKEABLE FL-TRYTAKE
FL-NODESC FL-NOALL FL-HAS-SDESC FL-HAS-DESCFCN) (SYNONYM HEAD WAX) (ADJECTIVE
HEAD WAX) (SIZE 1 CAPACITY 1 MASS 0) (GENERIC RT-GN-WAX) (ACTION
RT-AC-TH-WAX-HEAD)>
<VOC "POOL" NOUN>
<VOC "POOL" ADJ>
<OBJECT TH-WAX-AX (LOC TH-CHARLES-STATUE) (FLAGS FL-TAKEABLE FL-VOWEL FL-NODESC
FL-NOALL FL-WEAPON FL-HAS-DESCFCN FL-HAS-SDESC) (SYNONYM BLADE AX AXE WAX) (
ADJECTIVE WAX WAX) (SIZE 12 CAPACITY 0 MASS 0) (GENERIC RT-GN-WAX) (ACTION
DESC-WAX-AX)>
<VOC "MELTED" ADJ>
<OBJECT TH-EMERALD (FLAGS FL-READABLE FL-TAKEABLE FL-VOWEL FL-SURFACE FL-MONEY
FL-HAS-DESCFCN FL-HAS-SDESC FL-NEEDS-IDENTITY FL-LOSE-IDENTITY) (OBJ-ADJ 0) (
OBJ-NOUN 0) (SYNONYM EMERALD GEM GEMS SCRATCH) (ADJECTIVE GREEN EMERALD
EMERALD\'S) (VALUE 5) (SIZE 1 MASS 1 CAPACITY 1) (GENERIC RT-GN-GEM) (ACTION
RT-AC-TH-EMERALD)>
<OBJECT TH-TORCH (LOC TH-FAWKES-STATUE) (FLAGS FL-BURNABLE FL-TAKEABLE
FL-NODESC FL-NOALL FL-HAS-SDESC FL-HAS-DESCFCN) (SYNONYM TORCH) (ADJECTIVE ZZZP
) (SIZE 1) (ACTION RT-AC-TH-TORCH)>
<VOC "BURNT" ADJ>
<OBJECT TH-TOBACCO (LOC TH-PERSIAN-SLIPPER) (DESC "tobacco") (FLAGS FL-TAKEABLE
FL-BURNABLE FL-PLURAL FL-COLLECTIVE FL-NOALL FL-HAS-DESCFCN) (SYNONYM TOBACCO
SHAG) (ADJECTIVE SHAG) (VALUE 1) (SIZE 1) (ACTION RT-AC-TH-TOBACCO)>
<DEFINE-ROUTINE BURN-OUT-MATCH>
<DEFINE-ROUTINE RT-AC-TH-MATCH>
<DEFINE-ROUTINE CLEAR-ALL-FLAGS>
<DEFINE-ROUTINE RT-AC-TH-TORCH>
<DEFINE-ROUTINE RT-LIGHT-PIPE>
<DEFINE-ROUTINE RT-AC-TH-TOBACCO>
<DEFINE-ROUTINE RT-AC-TH-PIPE>
<DEFINE-ROUTINE RT-AC-TH-MAIL>
<DEFINE-ROUTINE RT-AC-TH-NEWSPAPER>
<DEFINE-ROUTINE RT-AC-TH-WESTMINSTER-CLUE>
<CONSTANT K-HOLMES-HEAD? 1>
<CONSTANT K-HOLMES-GEM? 2>
<DEFINE-ROUTINE RT-AC-TH-WAX-HEAD>
<DEFINE-ROUTINE DESC-WAX-AX>
<DEFINE-ROUTINE RT-GUARD-TAKE-ITEM>
<DEFINE-ROUTINE RT-GUARD-STOP-ENTRANCE>
<DEFINE-ROUTINE RT-EX-RM-EXIT-TUSSAUDS>
<DEFINE-ROUTINE RT-EX-RM-MATCH-SNIFFING-DOG>
<DEFINE-ROUTINE RT-PUT-OUT>
<DEFINE-ROUTINE RT-I-MATCH-OUT>
<DEFINE-ROUTINE BURN-MATCH-OUT>
<DEFINE-ROUTINE RT-I-PIPE-OUT>
<DEFINE-ROUTINE RT-I-TORCH-OUT>
<DEFINE-ROUTINE RT-I-NEWSPAPER-OUT>
<DEFINE-ROUTINE RT-I-CLUE-OUT>
<DEFINE-ROUTINE RT-I-MAIL-OUT>
<DEFINE-ROUTINE RT-I-MATCHBOOK-OUT>
<DEFINE-ROUTINE PRE-LIGHT-WITH>
<DEFINE-ROUTINE RT-GN-WAX>

994
charles.zap Normal file
View File

@ -0,0 +1,994 @@
.FUNCT BURN-OUT-MATCH
FCLEAR TH-MATCH,FL-BURNABLE
ICALL2 CLEAR-ALL-FLAGS,TH-MATCH
FSET TH-MATCH,FL-TAKEABLE
FSET TH-MATCH,FL-BROKEN
RTRUE
.FUNCT RT-AC-TH-MATCH,CONTEXT
EQUAL? CONTEXT,K-M-SDESC \?CCL3
FSET? TH-MATCH,FL-BROKEN \?CCL6
PRINTI "burnt match"
RTRUE
?CCL6: PRINTI "match"
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \?CCL8
FSET? TH-MATCH,FL-BROKEN /FALSE
FSET? TH-MATCH,FL-LIGHTED \FALSE
ICALL2 RT-CTHEO-PRINT,TH-MATCH
PRINTR " is burning."
?CCL8: ZERO? CONTEXT \FALSE
FSET? TH-MATCH,FL-BROKEN \?CCL17
EQUAL? GL-PRSA,V?LAMP-OFF,V?LIGHT,V?STRIKE /?CCL20
EQUAL? GL-PRSA,V?BURN-WITH,V?LIGHT-WITH \FALSE
?CCL20: PRINTR "The match is already burned out."
?CCL17: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH,V?STRIKE /?PRD26
EQUAL? GL-PRSA,V?LIGHT \?CCL24
?PRD26: EQUAL? GL-PRSO,TH-MATCH \?CCL24
FSET? TH-MATCH,FL-LIGHTED \?CCL31
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL31: FSET? TH-MATCH,FL-BURNABLE /?CCL33
ICALL1 RT-CTHEO-PRINT
PRINTR " is burned out."
?CCL33: EQUAL? GL-PRSI,TH-HANDS,FALSE-VALUE /?CCL35
FSET? GL-PRSI,FL-LIGHTED \FALSE
FSET? GL-PRSI,FL-BURNABLE \FALSE
?CCL35: FSET TH-MATCH,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,2,0
ICALL RT-ALARM-SET-REL,RT-I-MATCH-OUT,STACK
MOVE TH-MATCH,GL-WINNER
ICALL1 RT-CTHEO-PRINT
PRINTR " flares to life."
?CCL24: EQUAL? GL-PRSA,V?LAMP-OFF \FALSE
FSET? TH-MATCH,FL-LIGHTED /?CCL44
ICALL1 RT-CTHEO-PRINT
PRINTR " isn't lit."
?CCL44: FCLEAR TH-MATCH,FL-LIGHTED
ICALL1 BURN-OUT-MATCH
ICALL2 RT-ALARM-CLR,RT-I-MATCH-OUT
ICALL RT-CYOU-MSG,STR?802,STR?803
PRINTR "out the match."
.FUNCT CLEAR-ALL-FLAGS,OBJ,N
SET 'N,1
?PRG1: EQUAL? N,FL-HAS-SDESC,FL-HAS-DESCFCN,FL-NEEDS-IDENTITY /?CND3
EQUAL? N,FL-LOSE-IDENTITY /?CND3
FCLEAR OBJ,N
?CND3: IGRTR? 'N,48 \?PRG1
RTRUE
.FUNCT RT-AC-TH-TORCH,CONTEXT,WHO
EQUAL? CONTEXT,K-M-SDESC \?CCL3
FSET? TH-TORCH,FL-BROKEN \?CCL6
PRINTI "burnt torch"
RTRUE
?CCL6: PRINTI "torch"
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \?CCL8
FSET? TH-TORCH,FL-BROKEN /FALSE
FSET? TH-TORCH,FL-LIGHTED \FALSE
ICALL2 RT-CTHEO-PRINT,TH-TORCH
PRINTR " is burning."
?CCL8: FSET? TH-TORCH,FL-BROKEN /FALSE
EQUAL? GL-PRSA,V?MELT,V?HEAT,V?LIGHT-WITH /?PRD18
EQUAL? GL-PRSA,V?BURN-WITH \?CCL16
?PRD18: EQUAL? GL-PRSI,TH-TORCH \?CCL16
FSET? TH-TORCH,FL-LIGHTED /?CCL23
ICALL2 RT-CTHEO-PRINT,TH-TORCH
PRINTR " is not lit."
?CCL23: EQUAL? GL-PRSO,TH-TORCH \?CCL25
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL25: EQUAL? GL-PRSO,TH-WAX-HEAD \?CCL27
ICALL1 RT-CTHEO-PRINT
PRINTI " melts into a pool of wax on the floor. You see a gem glittering in the wax."
CRLF
MOVE TH-WAX-HEAD,GL-PLACE-CUR
MOVE TH-EMERALD,TH-WAX-HEAD
ICALL2 CLEAR-ALL-FLAGS,TH-WAX-HEAD
FSET TH-WAX-HEAD,FL-OPENED
FSET TH-WAX-HEAD,FL-TRANSPARENT
FSET TH-WAX-HEAD,FL-CONTAINER
FSET TH-WAX-HEAD,FL-BROKEN
ICALL2 SET-MASS-TO-ONE,TH-WAX-HEAD
GETPT TH-WAX-HEAD,P?SYNONYM
PUT STACK,0,W?POOL
GETPT TH-WAX-HEAD,P?ADJECTIVE
PUT STACK,0,W?POOL
CALL2 RT-THIS-IS-IT,TH-EMERALD
RSTACK
?CCL27: EQUAL? GL-PRSO,TH-WAX-AX \?CCL29
ICALL1 RT-CTHEO-PRINT
PRINTI " melts into a pool of wax on the floor."
CRLF
MOVE TH-WAX-AX,GL-PLACE-CUR
ICALL2 CLEAR-ALL-FLAGS,TH-WAX-AX
FSET TH-WAX-AX,FL-OPENED
FSET TH-WAX-AX,FL-TRANSPARENT
FSET TH-WAX-AX,FL-CONTAINER
FSET TH-WAX-AX,FL-BROKEN
ICALL2 SET-SIZE-TO-ONE,TH-WAX-AX
ICALL2 SET-CAPACITY-TO-ONE,TH-WAX-AX
ICALL2 SET-MASS-TO-ONE,TH-WAX-AX
GETPT TH-WAX-AX,P?SYNONYM
PUT STACK,0,W?AX
GETPT TH-WAX-AX,P?ADJECTIVE
PUT STACK,0,W?MELTED
RTRUE
?CCL29: FSET? GL-PRSO,FL-BURNABLE /FALSE
ICALL1 RT-CYOU-MSG
PRINTI "cannot "
PRINTB GL-P-PRSA-WORD
PRINTC 32
ICALL1 RT-THEO-PRINT
PRINTI " with "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL16: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \FALSE
EQUAL? GL-PRSO,TH-TORCH \FALSE
EQUAL? GL-PRSI,TH-TOBACCO,TH-PIPE \?CCL38
FSET? TH-TOBACCO,FL-LIGHTED \?CCL38
ICALL1 RT-CTHEI-PRINT
ICALL2 RT-DONT-DOESNT-MSG,GL-PRSI
PRINTI "put out enough heat to light "
ICALL1 RT-THEO-PRINT
PRINTR "."
?CCL38: FSET? GL-PRSI,FL-BURNABLE /?CCL42
ICALL1 RT-CYOU-MSG
PRINTI "cannot light "
ICALL1 RT-THEO-PRINT
PRINTI " with "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL42: FSET? GL-PRSI,FL-LIGHTED /?CCL44
ICALL1 RT-CTHEI-PRINT
ICALL2 RT-ISNT-ARENT-MSG,GL-PRSI
PRINTR "burning."
?CCL44: ICALL1 RT-CTHEO-PRINT
PRINTI " catches fire quickly."
CRLF
FSET TH-TORCH,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,1,0,0
ICALL RT-ALARM-SET-REL,RT-I-TORCH-OUT,STACK
CALL1 RT-WHO-SAYS? >WHO
EQUAL? WHO,CH-HOLMES \?CND45
CRLF
PRINTI "Holmes looks at you and says, ""An ingenious solution, Watson. My compliments, old chap."""
CRLF
?CND45: CALL2 RT-UPDATE-SCORE,4
RSTACK
.FUNCT RT-LIGHT-PIPE,FIRE
FSET? FIRE,FL-BURNABLE /?CCL3
ICALL1 RT-CYOU-MSG
PRINTI "cannot light "
ICALL1 RT-THEO-PRINT
PRINTI " with "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL3: FSET? FIRE,FL-LIGHTED /?CCL5
ICALL2 RT-CTHEO-PRINT,FIRE
PRINTR " is not burning."
?CCL5: FSET? TH-TOBACCO,FL-LIGHTED \?CCL7
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL7: IN? TH-TOBACCO,TH-PIPE \FALSE
FSET TH-TOBACCO,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,15,0
ICALL RT-ALARM-SET-REL,RT-I-PIPE-OUT,STACK
PRINTI "After a few puffs, "
ICALL1 RT-THEO-PRINT
PRINTR " fires right up."
.FUNCT RT-AC-TH-TOBACCO,CONTEXT,I
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
FSET? TH-TOBACCO,FL-LIGHTED \?CCL6
ICALL2 RT-CTHEO-PRINT,TH-TOBACCO
PRINTR " is burning."
?CCL6: PRINTR "It's Holmes's favorite brand of shag tobacco."
?CCL3: ZERO? GL-NOW-PRSI? \?CND1
SET 'GL-P-IT-OBJECT,TH-TOBACCO
?CND1: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \?CCL10
EQUAL? GL-PRSO,TH-TOBACCO \?CCL10
EQUAL? GL-PRSI,FALSE-VALUE,TH-HANDS \?CCL15
SET 'I,TH-MATCH
JUMP ?CND13
?CCL15: SET 'I,GL-PRSI
?CND13: IN? I,GL-WINNER /?CCL18
ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not holding "
ICALL2 RT-A-PRINT,I
PRINTR "."
?CCL18: IN? TH-PIPE,GL-WINNER /?CCL20
ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not holding "
ICALL2 RT-THEO-PRINT,TH-PIPE
PRINTR "."
?CCL20: FSET? TH-TOBACCO,FL-LIGHTED \?CCL22
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL22: CALL2 RT-LIGHT-PIPE,I
ZERO? STACK \TRUE
ICALL1 RT-CTHEO-PRINT
PRINTC 32
PRINT K-SMOULDERS-MSG
CRLF
RTRUE
?CCL10: EQUAL? GL-PRSA,V?TAKE,V?TOUCH \?CCL26
FSET? TH-TOBACCO,FL-LIGHTED \?CCL26
PRINTR "Yeeeeouch! That's hot!"
?CCL26: EQUAL? GL-PRSA,V?SMOKE \?CCL30
FSET? TH-TOBACCO,FL-LIGHTED \?CCL33
PRINT K-BRAND-MSG
CRLF
RTRUE
?CCL33: ICALL1 RT-CTHEO-PRINT
PRINTR " is not lit."
?CCL30: EQUAL? GL-PRSA,V?SMELL \FALSE
PRINTR "The shag has a strong, but pleasant smell."
.FUNCT RT-AC-TH-PIPE,CONTEXT,I,DEST
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
FSET? TH-TOBACCO,FL-LIGHTED \?CCL6
IN? TH-TOBACCO,TH-PIPE \?CCL6
PRINTI "Smoke gently wafts from "
ICALL2 RT-THEO-PRINT,TH-PIPE
PRINTR "."
?CCL6: PRINTR "It is an old and oily black clay pipe, the companion of Holmes's deepest meditations."
?CCL3: ZERO? CONTEXT \FALSE
ZERO? GL-NOW-PRSI? \?CCL12
EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \?CCL15
EQUAL? GL-PRSI,FALSE-VALUE,TH-HANDS \?CCL18
SET 'I,TH-MATCH
JUMP ?CND16
?CCL18: SET 'I,GL-PRSI
?CND16: IN? I,GL-WINNER /?CCL21
ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not holding "
ICALL2 RT-A-PRINT,I
PRINTR "."
?CCL21: IN? TH-PIPE,GL-WINNER /?CCL23
ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not holding "
ICALL2 RT-THEO-PRINT,TH-PIPE
PRINTR "."
?CCL23: FSET? TH-TOBACCO,FL-LIGHTED \?CCL25
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL25: CALL2 RT-LIGHT-PIPE,I
ZERO? STACK \TRUE
PRINTR "There is nothing in the pipe to light."
?CCL15: EQUAL? GL-PRSA,V?PUT \?CCL29
EQUAL? GL-PRSI,TH-PLAYER-BODY \?CCL29
GET GL-P-NAMW,1
EQUAL? STACK,W?MOUTH \?CCL29
CALL RT-PERFORM,V?SMOKE,TH-PIPE
RSTACK
?CCL29: EQUAL? GL-PRSA,V?SMOKE \?CCL34
FSET? TH-TOBACCO,FL-LIGHTED \?CCL37
PRINT K-BRAND-MSG
CRLF
RTRUE
?CCL37: ICALL1 RT-CTHEO-PRINT
PRINTR " is not lit."
?CCL34: EQUAL? GL-PRSA,V?EMPTY-INTO,V?POUR \FALSE
IN? TH-TOBACCO,TH-PIPE \FALSE
FSET? TH-TOBACCO,FL-LIGHTED \FALSE
EQUAL? GL-PRSA,V?POUR \?CCL45
FCLEAR TH-TOBACCO,FL-LIGHTED
MOVE TH-TOBACCO,GL-PLACE-CUR
ICALL2 RT-CTHEO-PRINT,TH-TOBACCO
PRINTI " falls "
EQUAL? GL-PLACE-CUR,RM-THAMES-ONE,RM-THAMES-TWO,RM-THAMES-THREE /?CTR47
EQUAL? GL-PLACE-CUR,RM-THAMES-FOUR,RM-THAMES-FIVE \?CCL48
?CTR47: REMOVE TH-TOBACCO
PRINTR "into the water."
?CCL48: PRINTI "to "
FSET? GL-PLACE-CUR,FL-INDOORS \?CCL53
ICALL1 TELL-THE-FLOOR
JUMP ?CND51
?CCL53: ICALL1 TELL-THE-GROUND
?CND51: PRINTI ", "
PRINT K-SMOULDERS-MSG
CRLF
RTRUE
?CCL45: EQUAL? GL-PRSA,V?EMPTY-INTO \FALSE
CALL RT-ROOM-IN-ON-MSG?,TH-TOBACCO,GL-PRSI
ZERO? STACK \TRUE
CALL RT-CHECK-MOVE-MSG?,TH-TOBACCO,GL-PRSI
ZERO? STACK \TRUE
FCLEAR TH-TOBACCO,FL-LIGHTED
MOVE TH-TOBACCO,GL-PRSI
ICALL2 RT-CTHEO-PRINT,TH-TOBACCO
PRINTI " falls "
FSET? GL-PRSI,FL-CONTAINER \?CCL63
PRINTI "into"
JUMP ?CND61
?CCL63: PRINTI "onto"
?CND61: PRINTC 32
ICALL1 RT-THEI-PRINT
PRINTI ", "
PRINT K-SMOULDERS-MSG
CRLF
RTRUE
?CCL12: ZERO? GL-NOW-PRSI? /FALSE
EQUAL? GL-PRSA,V?PUT \?CCL68
EQUAL? GL-PRSO,TH-TOBACCO /?CCL68
PRINTI "Putting "
ICALL1 RT-THEO-PRINT
PRINTI " in "
ICALL1 RT-THEI-PRINT
PRINTI " would"
CALL1 RT-WASTE-OF-TIME-MSG
RSTACK
?CCL68: EQUAL? GL-PRSA,V?POUR-FROM \FALSE
EQUAL? GL-PRSO,TH-TOBACCO \FALSE
IN? TH-TOBACCO,TH-PIPE \FALSE
FSET? TH-TOBACCO,FL-LIGHTED \FALSE
FCLEAR TH-TOBACCO,FL-LIGHTED
MOVE TH-TOBACCO,GL-PLACE-CUR
ICALL1 RT-CTHEO-PRINT
PRINTI " falls to "
FSET? GL-PLACE-CUR,FL-INDOORS \?CCL79
ICALL1 TELL-THE-FLOOR
JUMP ?CND77
?CCL79: ICALL1 TELL-THE-GROUND
?CND77: PRINTI ", "
PRINT K-SMOULDERS-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-MAIL,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
FSET? TH-MAIL,FL-LIGHTED \FALSE
ICALL2 RT-CTHEO-PRINT,TH-MAIL
PRINTR " is burning."
?CCL3: ZERO? CONTEXT \FALSE
ZERO? GL-NOW-PRSI? \?CND1
SET 'GL-P-IT-OBJECT,TH-MAIL
?CND1: EQUAL? GL-PRSA,V?READ,V?EXAMINE,V?LOOK-ON /?CTR11
EQUAL? GL-PRSA,V?LOOK-INSIDE,V?OPEN,V?SEARCH /?CTR11
EQUAL? GL-PRSA,V?OPEN-WITH \?CCL12
?CTR11: PRINTR "You should not read other people's mail."
?CCL12: EQUAL? GL-PRSA,V?CLOSE \?CCL17
PRINTR "The mail hasn't been opened."
?CCL17: EQUAL? GL-PRSA,V?TAKE \?CCL19
ZERO? KNIFE-COLD? /?CCL19
SET 'KNIFE-COLD?,FALSE-VALUE
MOVE TH-KNIFE,GL-WINNER
PRINTI "[Taking the knife first]"
ZERO? GL-P-MULT? /?CCL24
PRINTC 32
RFALSE
?CCL24: CRLF
RFALSE
?CCL19: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \FALSE
ZERO? GL-NOW-PRSI? \FALSE
FSET? TH-MAIL,FL-LIGHTED \?CCL31
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL31: FSET? GL-PRSI,FL-BURNABLE /?CCL33
EQUAL? GL-PRSI,TH-PIPE \FALSE
?CCL33: FSET? GL-PRSI,FL-LIGHTED \?PRD39
FSET? GL-PRSI,FL-BURNABLE /?CTR36
?PRD39: EQUAL? GL-PRSI,TH-PIPE \?CCL37
FSET? TH-TOBACCO,FL-LIGHTED \?CCL37
?CTR36: ICALL2 RT-CTHEO-PRINT,TH-MAIL
PRINTI " lights up."
CRLF
FSET TH-MAIL,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,3,0
CALL RT-ALARM-SET-REL,RT-I-MAIL-OUT,STACK
RSTACK
?CCL37: ICALL1 RT-CTHEI-PRINT
ICALL2 RT-ISNT-ARENT-MSG,GL-PRSI
PRINTR "burning."
.FUNCT RT-AC-TH-NEWSPAPER,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
FSET? TH-NEWSPAPER,FL-LIGHTED \?CCL6
ICALL2 RT-CTHEO-PRINT,TH-NEWSPAPER
PRINTR " is burning."
?CCL6: PRINTR "It's the newspaper that came in your game package."
?CCL3: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?READ,V?READ-TO,V?SHOW /?CCL10
EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH,V?GIVE /?CCL10
EQUAL? GL-PRSA,V?TELL-ABOUT \FALSE
?CCL10: IN? TH-NEWSPAPER,CH-PLAYER /?CCL15
PRINTR "The newspaper will not leap into your hand by itself."
?CCL15: EQUAL? GL-PRSA,V?READ \?CCL17
CALL1 RT-READ-NEWSPAPER
RSTACK
?CCL17: EQUAL? GL-PRSA,V?READ-TO,V?SHOW,V?GIVE \?PRD21
ZERO? GL-NOW-PRSI? /?CTR18
?PRD21: EQUAL? GL-PRSA,V?TELL-ABOUT \?CCL19
ZERO? GL-NOW-PRSI? /?CCL19
?CTR18: FSET? GL-PRSI,FL-PERSON \FALSE
FSET? TH-NEWSPAPER,FL-ASLEEP /?CCL29
FSET? TH-NEWSPAPER,FL-OPENED \?CND26
?CCL29: ICALL1 RT-READ-NEWSPAPER
CRLF
?CND26: EQUAL? GL-PRSA,V?READ-TO,V?SHOW,V?GIVE \?PRD36
EQUAL? GL-PRSI,CH-HOLMES /?CTR33
?PRD36: EQUAL? GL-PRSA,V?TELL-ABOUT \?CCL34
EQUAL? GL-PRSO,CH-HOLMES \?CCL34
?CTR33: FSET? CH-HOLMES,FL-ASLEEP \FALSE
ICALL1 RT-WAKE-UP-HOLMES
EQUAL? GL-PRSA,V?GIVE \TRUE
MOVE TH-NEWSPAPER,CH-HOLMES
RTRUE
?CCL34: ICALL1 RT-CTHEI-PRINT
ICALL2 RT-DONT-DOESNT-MSG,GL-PRSI
PRINTR "seem to be interested."
?CCL19: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \FALSE
ZERO? GL-NOW-PRSI? \FALSE
FSET? TH-NEWSPAPER,FL-LIGHTED \?CCL52
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL52: FSET? GL-PRSI,FL-BURNABLE /?CCL54
EQUAL? GL-PRSI,TH-PIPE \FALSE
?CCL54: FSET? GL-PRSI,FL-LIGHTED \?PRD60
FSET? GL-PRSI,FL-BURNABLE /?CTR57
?PRD60: EQUAL? GL-PRSI,TH-PIPE \?CCL58
FSET? TH-TOBACCO,FL-LIGHTED \?CCL58
?CTR57: ICALL2 RT-CTHEO-PRINT,TH-NEWSPAPER
PRINTI " lights up."
CRLF
FSET TH-NEWSPAPER,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,3,0
ICALL RT-ALARM-SET-REL,RT-I-NEWSPAPER-OUT,STACK
RTRUE
?CCL58: ICALL1 RT-CTHEI-PRINT
ICALL2 RT-ISNT-ARENT-MSG,GL-PRSI
PRINTR "burning."
.FUNCT RT-AC-TH-WESTMINSTER-CLUE,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
FSET? TH-MAIL,FL-LIGHTED \FALSE
ICALL2 RT-CTHEO-PRINT,TH-MAIL
PRINTR " is burning."
?CCL3: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?READ,V?EXAMINE \?CCL10
IN? TH-WESTMINSTER-CLUE,CH-PLAYER /?CCL13
PRINTR "The paper will not leap into your hand by itself."
?CCL13: GETP TH-WESTMINSTER-CLUE,P?FLIPPED
ZERO? STACK \?CCL15
ICALL1 RT-INDENT-PRINT
PRINTI "Mortality, behold and fear!"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "What a change of flesh is here!"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Think how many royal bones"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Sleep within this heap of stones:"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Here they lie, had realms and lands,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Who now want strength"
ICALL1 RT-WRAP-PRINT
PRINTI "to stir their hands."
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINT K-ASTERISK-MSG
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "For two-score years I reigned alone,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "A virgin queen on England's throne."
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "My navy caused Armada's shame,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "And with me died the Tudor name."
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINT K-ASTERISK-MSG
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "The apple sorely tempted Eve,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "And Tell another aimed to cleave."
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "But when one fell, it showed to me,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "The mighty pull of gravity."
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINT K-ASTERISK-MSG
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "My father, it was said, would die,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Beneath the Holy City's sky."
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "Jerusalem his body claimed,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "And it is after him I'm named."
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINT K-ASTERISK-MSG
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINT K-ASTERISK-MSG
CRLF
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "O stately Holmes of England,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "In Baker Street abide."
CRLF
ICALL1 RT-INDENT-PRINT
PRINTI "For even you must surely fail,"
CRLF
ICALL1 RT-INDENT-PRINT
PRINTR "To save your country's pride."
?CCL15: PRINTR "This side appears to be blank."
?CCL10: EQUAL? GL-PRSA,V?LIGHT-WITH,V?BURN-WITH \?CCL17
ZERO? GL-NOW-PRSI? \?CCL17
FSET? TH-WESTMINSTER-CLUE,FL-LIGHTED \?CCL22
ICALL1 RT-CTHEO-PRINT
PRINTR " is already lit."
?CCL22: FSET? GL-PRSI,FL-BURNABLE /?CCL24
EQUAL? GL-PRSI,TH-PIPE \FALSE
?CCL24: FSET? GL-PRSI,FL-LIGHTED \?PRD30
FSET? GL-PRSI,FL-BURNABLE /?CTR27
?PRD30: EQUAL? GL-PRSI,TH-PIPE \?CCL28
FSET? TH-TOBACCO,FL-LIGHTED \?CCL28
?CTR27: ICALL2 RT-CTHEO-PRINT,TH-WESTMINSTER-CLUE
PRINTI " lights up."
CRLF
FSET TH-WESTMINSTER-CLUE,FL-LIGHTED
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,3,0
ICALL RT-ALARM-SET-REL,RT-I-CLUE-OUT,STACK
RTRUE
?CCL28: ICALL1 RT-CTHEI-PRINT
ICALL2 RT-ISNT-ARENT-MSG,GL-PRSI
PRINTR "burning."
?CCL17: EQUAL? GL-PRSA,V?FLIP \?CCL36
IN? TH-WESTMINSTER-CLUE,GL-WINNER /?CCL39
ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not holding "
ICALL2 RT-THEO-PRINT,TH-WESTMINSTER-CLUE
PRINTR "."
?CCL39: GETP TH-WESTMINSTER-CLUE,P?FLIPPED
SUB 1,STACK
PUTP TH-WESTMINSTER-CLUE,P?FLIPPED,STACK
ICALL RT-CYOU-MSG,STR?804,STR?805
ICALL2 RT-THEO-PRINT,TH-WESTMINSTER-CLUE
PRINTR " over."
?CCL36: EQUAL? GL-PRSA,V?LOOK-THRU \FALSE
EQUAL? GL-PRSI,TH-MAGNIFYING-GLASS \FALSE
PRINTR "It's been wiped clean."
.FUNCT RT-AC-TH-WAX-HEAD,CONTEXT
EQUAL? CONTEXT,K-M-SDESC \?CCL3
FSET? TH-WAX-HEAD,FL-BROKEN \?CCL6
PRINTI "wax pool"
RTRUE
?CCL6: PRINTI "wax head"
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \?CCL8
FSET? TH-WAX-HEAD,FL-BROKEN \FALSE
FIRST? TH-WAX-HEAD /FALSE
PRINTI "Looks like any other "
ICALL2 DPRINT,TH-WAX-HEAD
PRINTR "."
?CCL8: FSET? TH-WAX-HEAD,FL-BROKEN /FALSE
IN? TH-WAX-HEAD,TH-CHARLES-STATUE \?CCL18
EQUAL? GL-PRSA,V?TAKE,V?UNSCREW-FROM \?CCL21
MOVE TH-WAX-HEAD,GL-WINNER
FSET TH-WAX-HEAD,FL-SEEN
FCLEAR TH-WAX-HEAD,FL-NODESC
FCLEAR TH-WAX-HEAD,FL-NOALL
ZERO? GL-P-MULT? /?CCL24
PRINTR "Taken."
?CCL24: ICALL RT-CYOU-MSG,STR?697,STR?698
ICALL2 RT-THEO-PRINT,TH-WAX-HEAD
PRINTR "."
?CCL21: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
FSET TH-WAX-HEAD,FL-SEEN
ICALL2 RT-CTHEO-PRINT,TH-WAX-HEAD
PRINTI " wobbles slightly."
BTST CH-HOLMES-AUX1,1 /?CND27
PRINTC 32
ICALL2 RT-THEO-PRINT,CH-HOLMES
PRINTI " says, ""Even when he was alive, he didn't have his head screwed on right."""
BOR CH-HOLMES-AUX1,K-HOLMES-HEAD? >CH-HOLMES-AUX1
?CND27: CRLF
RTRUE
?CCL18: EQUAL? GL-PRSA,V?MELT,V?HEAT \?CCL30
ZERO? GL-NOW-PRSI? \?CCL30
FSET? GL-PRSI,FL-BURNABLE \?PRD35
FSET? GL-PRSI,FL-LIGHTED /?CTR29
?PRD35: EQUAL? GL-PRSI,TH-PIPE \?CCL30
FSET? TH-TOBACCO,FL-LIGHTED \?CCL30
?CTR29: ICALL1 RT-CTHEO-PRINT
PRINTI " softens, but "
ICALL1 RT-THEI-PRINT
PRINTR " does not put out enough heat to melt it."
?CCL30: EQUAL? GL-PRSA,V?MUNG,V?KILL,V?OPEN \FALSE
ICALL1 RT-CYOU-MSG
PRINTR "can't break into the head."
.FUNCT DESC-WAX-AX,CONTEXT
EQUAL? CONTEXT,K-M-SDESC \?CCL3
FSET? TH-WAX-AX,FL-BROKEN \?CCL6
PRINTI "melted axe"
RTRUE
?CCL6: PRINTI "axe"
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \FALSE
FSET? TH-WAX-AX,FL-BROKEN \FALSE
FIRST? TH-WAX-AX /FALSE
PRINTI "Looks like any other "
ICALL2 DPRINT,TH-WAX-AX
PRINTR "."
.FUNCT RT-GUARD-TAKE-ITEM,OBJ1,OBJ2,OBJ3,STR
ICALL2 RT-CTHEO-PRINT,CH-TUSSAUDS-GUARD
PRINTI " says, ""I'm sorry, but "
ICALL2 RT-THEO-PRINT,OBJ1
ZERO? OBJ2 /?CCL3
ZERO? OBJ3 /?CCL3
PRINTI ", "
ICALL2 RT-THEO-PRINT,OBJ2
PRINTI " and "
ICALL2 RT-THEO-PRINT,OBJ3
PRINTI " are"
SET 'STR,STR?806
JUMP ?CND1
?CCL3: ZERO? OBJ2 /?CCL7
PRINTI " and "
ICALL2 RT-THEO-PRINT,OBJ2
PRINTI " are"
SET 'STR,STR?806
JUMP ?CND1
?CCL7: PRINTI " is"
SET 'STR,STR?807
?CND1: PRINTI " not to be removed."" He takes "
PRINT STR
PRINTI " and returns "
PRINT STR
PRINTI " to the proper place."
CRLF
CRLF
RTRUE
.FUNCT RT-GUARD-STOP-ENTRANCE,OBJ,WHO
CALL1 RT-WHO-SAYS? >WHO
ICALL SOUNDS,S-BARK,S-START,8,4
ICALL2 RT-CTHEO-PRINT,CH-MATCH-SNIFFING-DOG
PRINTI " barks loudly and "
ICALL2 RT-THEO-PRINT,CH-TUSSAUDS-GUARD
PRINTI " says, ""Seeing as how it's you, "
EQUAL? WHO,CH-HOLMES \?CCL3
PRINTI "Mr Holmes"
JUMP ?CND1
?CCL3: PRINTI "Doctor Watson"
?CND1: PRINTI ", I don't mind letting you in. But as you know we are very afraid of fire here, so we have trained this dog to detect matches or open flames. I'm afraid I can't allow you"
EQUAL? WHO,CH-HOLMES,CH-WIGGINS \?CND4
PRINTI " or your companion"
?CND4: PRINTI " to enter until "
ICALL2 RT-THEO-PRINT,OBJ
PRINTR " has been discarded."""
.FUNCT RT-EX-RM-EXIT-TUSSAUDS,IN1,IN2,IN3,TORCH
EQUAL? GL-PRSO,P?SOUTH,P?OUT \FALSE
EQUAL? GL-PLACE-CUR,RM-MADAME-TUSSAUDS \FALSE
CALL RT-META-IN?,TH-TORCH,GL-WINNER
ZERO? STACK \?CCL8
CALL RT-META-IN?,TH-TORCH,GL-PUPPY
ZERO? STACK \?CCL8
SET 'IN1,0
JUMP ?CND6
?CCL8: SET 'TORCH,TH-TORCH
SET 'IN1,1
?CND6: CALL RT-META-IN?,TH-WAX-HEAD,GL-WINNER >IN2
ZERO? IN2 \?PEN11
CALL RT-META-IN?,TH-WAX-HEAD,GL-PUPPY >IN2
?PEN11: CALL RT-META-IN?,TH-WAX-AX,GL-WINNER >IN3
ZERO? IN3 \?PEN14
CALL RT-META-IN?,TH-WAX-AX,GL-PUPPY >IN3
?PEN14: ZERO? IN1 /?CCL19
ZERO? IN2 /?CCL19
ZERO? IN3 /?CCL19
ICALL RT-GUARD-TAKE-ITEM,TH-TORCH,TH-WAX-HEAD,TH-WAX-AX
JUMP ?CND17
?CCL19: ZERO? IN1 /?CCL24
ZERO? IN2 /?CCL24
ICALL RT-GUARD-TAKE-ITEM,TH-TORCH,TH-WAX-HEAD
JUMP ?CND17
?CCL24: ZERO? IN1 /?CCL28
ZERO? IN3 /?CCL28
ICALL RT-GUARD-TAKE-ITEM,TH-TORCH,TH-WAX-AX
JUMP ?CND17
?CCL28: ZERO? IN2 /?CCL32
ZERO? IN3 /?CCL32
ICALL RT-GUARD-TAKE-ITEM,TH-WAX-HEAD,TH-WAX-AX
JUMP ?CND17
?CCL32: ZERO? IN1 /?CCL36
ICALL2 RT-GUARD-TAKE-ITEM,TH-TORCH
JUMP ?CND17
?CCL36: ZERO? IN2 /?CCL38
ICALL2 RT-GUARD-TAKE-ITEM,TH-WAX-HEAD
JUMP ?CND17
?CCL38: ZERO? IN3 /?CND17
ICALL2 RT-GUARD-TAKE-ITEM,TH-WAX-AX
?CND17: ZERO? IN1 /?CND40
MOVE TORCH,TH-FAWKES-STATUE
FSET TORCH,FL-NODESC
FSET? TORCH,FL-LIGHTED \?CND40
ICALL2 RT-ALARM-CLR,RT-I-TORCH-OUT
ICALL1 RT-I-TORCH-OUT
FSET TH-TORCH,FL-NODESC
?CND40: ZERO? IN2 /?CND44
MOVE TH-WAX-HEAD,TH-CHARLES-STATUE
FSET TH-WAX-HEAD,FL-NODESC
?CND44: ZERO? IN3 /?CND46
MOVE TH-WAX-AX,TH-CHARLES-STATUE
FSET TH-WAX-AX,FL-NODESC
?CND46: RETURN RM-MARYLEBONE-RD
.FUNCT RT-EX-RM-MATCH-SNIFFING-DOG,OBJ,FLAME?,FIRST,LAMP?,MATCH?
SET 'FIRST,TRUE-VALUE
EQUAL? GL-PRSO,P?NORTH,P?IN \FALSE
EQUAL? GL-PLACE-CUR,RM-MARYLEBONE-RD \FALSE
?PRG6: FIRST? GL-WINNER >OBJ /?PRG9
?PRG9: ZERO? OBJ /?REP10
FSET? OBJ,FL-BURNABLE \?CND11
FSET? OBJ,FL-LIGHTED \?CND11
EQUAL? OBJ,TH-TOBACCO /?CND11
SET 'FLAME?,OBJ
?REP10: ZERO? FLAME? \?REP7
ZERO? FIRST /?REP7
ZERO? GL-PUPPY /?REP7
FIRST? GL-PUPPY >OBJ /?BOGUS25
?BOGUS25: SET 'FIRST,FALSE-VALUE
JUMP ?PRG6
?CND11: NEXT? OBJ >OBJ /?PRG9
JUMP ?PRG9
?REP7: CALL RT-META-IN?,TH-MATCH,CH-PLAYER
ZERO? STACK \?PRD32
CALL RT-META-IN?,TH-MATCH,GL-PUPPY
ZERO? STACK /?PST31
?PRD32: FSET? TH-MATCH,FL-BURNABLE /?PST36
FSET? TH-MATCH,FL-LIGHTED /?PRD38
PUSH 0
JUMP ?PRD39
?PRD38: PUSH 1
?PRD39: SET 'MATCH?,STACK
JUMP ?PEN30
?PST36: SET 'MATCH?,1
JUMP ?PEN30
?PST31: SET 'MATCH?,0
?PEN30: ZERO? MATCH? \?CCL27
CALL RT-META-IN?,TH-LAMP,CH-PLAYER >LAMP?
ZERO? LAMP? \?PEN41
CALL RT-META-IN?,TH-LAMP,GL-PUPPY >LAMP?
?PEN41: ZERO? LAMP? \?CCL27
ZERO? FLAME? /?CND26
?CCL27: ZERO? FLAME? /?CCL46
SET 'OBJ,FLAME?
JUMP ?CND44
?CCL46: ZERO? LAMP? /?CCL48
SET 'OBJ,TH-LAMP
JUMP ?CND44
?CCL48: ZERO? MATCH? \?CCL50
SET 'OBJ,0
JUMP ?CND44
?CCL50: SET 'OBJ,TH-MATCH
?CND44: ICALL2 RT-GUARD-STOP-ENTRANCE,OBJ
RFALSE
?CND26: FSET? TH-WAX-HEAD,FL-BROKEN /?CCL52
FSET? TH-WAX-AX,FL-BROKEN /?CCL52
RETURN RM-MADAME-TUSSAUDS
?CCL52: PRINTI "The guard blocks your path and says, ""Oh no you don't, laddie. When I let you in earlier you made a proper mess of my museum. I won't let you do that again."" After you promise to pay for the damage and plead with him for a few moments, he finally steps aside."
CRLF
CRLF
RETURN RM-MADAME-TUSSAUDS
.FUNCT RT-PUT-OUT,THING
FSET? THING,FL-BURNABLE \FALSE
FSET? THING,FL-LIGHTED \FALSE
EQUAL? THING,TH-MATCH \?CCL7
ICALL2 RT-ALARM-CLR,RT-I-MATCH-OUT
CALL1 RT-I-MATCH-OUT
RSTACK
?CCL7: EQUAL? THING,TH-PIPE \?CCL9
ICALL2 RT-ALARM-CLR,RT-I-PIPE-OUT
CALL1 RT-I-PIPE-OUT
RSTACK
?CCL9: EQUAL? THING,TH-TORCH \?CCL11
ICALL2 RT-ALARM-CLR,RT-I-TORCH-OUT
CALL1 RT-I-TORCH-OUT
RSTACK
?CCL11: EQUAL? THING,TH-NEWSPAPER \?CCL13
ICALL2 RT-ALARM-CLR,RT-I-NEWSPAPER-OUT
CALL1 RT-I-NEWSPAPER-OUT
RSTACK
?CCL13: EQUAL? THING,TH-WESTMINSTER-CLUE \?CCL15
ICALL2 RT-ALARM-CLR,RT-I-CLUE-OUT
CALL1 RT-I-CLUE-OUT
RSTACK
?CCL15: EQUAL? THING,TH-MAIL \?CCL17
ICALL2 RT-ALARM-CLR,RT-I-MAIL-OUT
CALL1 RT-I-MAIL-OUT
RSTACK
?CCL17: EQUAL? THING,TH-MATCHBOOK \?CCL19
ICALL2 RT-ALARM-CLR,RT-I-MATCHBOOK-OUT
CALL1 RT-I-MATCHBOOK-OUT
RSTACK
?CCL19: REMOVE THING
FCLEAR THING,FL-WORN
FCLEAR THING,FL-LIGHTED
FCLEAR THING,FL-BURNABLE
ICALL2 RT-CTHEO-PRINT,THING
PRINTI " burn"
ICALL2 RT-S-NOS-MSG,THING
PRINTR " up and disappears."
.FUNCT RT-I-MATCH-OUT,RESULT
CALL2 RT-VISIBLE?,TH-MATCH
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-MATCH
PRINTI " flickers and dies."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: FCLEAR TH-MATCH,FL-LIGHTED
ICALL1 BURN-MATCH-OUT
RETURN RESULT
.FUNCT BURN-MATCH-OUT
FCLEAR TH-MATCH,FL-BURNABLE
FSET TH-MATCH,FL-BROKEN
GETPT TH-MATCH,P?ADJECTIVE
PUT STACK,0,W?BURNT
RTRUE
.FUNCT RT-I-PIPE-OUT,RESULT
CALL2 RT-VISIBLE?,TH-TOBACCO
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-PIPE
PRINTI " has gone out."
CRLF
?CND1: FCLEAR TH-TOBACCO,FL-LIGHTED
FCLEAR TH-TOBACCO,FL-BURNABLE
REMOVE TH-TOBACCO
RETURN RESULT
.FUNCT RT-I-TORCH-OUT,RESULT
CALL2 RT-VISIBLE?,TH-TORCH
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-TORCH
PRINTI " sputters and dies."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: ICALL2 CLEAR-ALL-FLAGS,TH-TORCH
GETPT TH-TORCH,P?ADJECTIVE
PUT STACK,0,W?BURNT
FSET TH-TORCH,FL-TAKEABLE
FSET TH-TORCH,FL-BROKEN
RETURN RESULT
.FUNCT RT-I-NEWSPAPER-OUT,RESULT
CALL2 RT-VISIBLE?,TH-NEWSPAPER
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-NEWSPAPER
PRINTI " disappears into a cloud of fine ash, which itself disappears."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: FCLEAR TH-NEWSPAPER,FL-LIGHTED
FCLEAR TH-NEWSPAPER,FL-BURNABLE
REMOVE TH-NEWSPAPER
RETURN RESULT
.FUNCT RT-I-CLUE-OUT,RESULT
CALL2 RT-VISIBLE?,TH-WESTMINSTER-CLUE
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-WESTMINSTER-CLUE
PRINTI " disappears in a puff of oily black smoke."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: FCLEAR TH-WESTMINSTER-CLUE,FL-LIGHTED
FCLEAR TH-WESTMINSTER-CLUE,FL-BURNABLE
REMOVE TH-WESTMINSTER-CLUE
RETURN RESULT
.FUNCT RT-I-MAIL-OUT,RESULT
CALL2 RT-VISIBLE?,TH-MAIL
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-MAIL
PRINTI " disappears in a flash of light."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: FCLEAR TH-MAIL,FL-LIGHTED
FCLEAR TH-MAIL,FL-BURNABLE
REMOVE TH-MAIL
RETURN RESULT
.FUNCT RT-I-MATCHBOOK-OUT,RESULT
CALL2 RT-VISIBLE?,TH-MATCHBOOK
ZERO? STACK /?CND1
CRLF
ICALL2 RT-CTHEO-PRINT,TH-MATCHBOOK
PRINTI " burns up and disappears."
CRLF
SET 'RESULT,TRUE-VALUE
?CND1: FCLEAR TH-MATCHBOOK,FL-LIGHTED
FCLEAR TH-MATCHBOOK,FL-BURNABLE
REMOVE TH-MATCHBOOK
RETURN RESULT
.FUNCT PRE-LIGHT-WITH
EQUAL? GL-PRSO,TH-MATCH,TH-TOBACCO /FALSE
IN? GL-PRSO,GL-WINNER /FALSE
ICALL1 RT-CYOU-MSG
ICALL RT-WOULD-HAVE-TO-MSG,STR?738,GL-PRSO
PRINTI " to light "
ICALL2 RT-SAY-HIM-HER-THEM-IT-MSG,GL-PRSO
PRINTR "."
.FUNCT RT-GN-WAX,TBL,LEN
PUTP PSEUDO-OBJECT,P?ACTION,RT-DF-LG-WAX-STATUES
SET 'LAST-PSEUDO-LOC,GL-PLACE-CUR
RETURN PSEUDO-OBJECT
.ENDI

943
charles.zil Normal file
View File

@ -0,0 +1,943 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : CHARLES.ZIL"
; "auth : $Author: RAB $"
; "date : $Date: 28 Oct 1987 19:34:20 $"
; "rev : $Revision: 1.76 $"
; "vers : 1.00"
;*****************************************************************************
;-----------------------------------------------------------------------------
; "TH-WAX-HEAD commented out of THINGS1.ZIL"
; "TH-WAX-AX commented out of THINGS1.ZIL"
; "TH-EMERALD commented out of THINGS1.ZIL"
; "TH-TORCH commented out of THINGS1.ZIL"
; "TH-TOBACCO commented out of THINGS1.ZIL"
;-----------------------------------------------------------------------------
; "RT-AC-TH-MATCH commented out of THINGS2.ZIL"
; "RT-AC-TH-TORCH commented out of THINGS2.ZIL"
; "RT-AC-TH-TOBACCO commented out of THINGS2.ZIL"
; "RT-AC-TH-PIPE commented out of THINGS2.ZIL"
; "RT-AC-TH-MAIL commented out of THINGS2.ZIL"
; "RT-AC-TH-NEWSPAPER commented out of THINGS2.ZIL"
; "RT-AC-TH-WESTMINSTER-CLUE commented out of THINGS2.ZIL"
;-----------------------------------------------------------------------------
; "RT-DF-TH-MAIL commented out of THINGS3.ZIL"
; "RT-DF-TH-NEWSPAPER commented out of THINGS3.ZIL"
; "RT-DF-TH-WESTMINSTER-CLUE commented out of THINGS3.ZIL"
; "RT-DF-TH-TOBACCO commented out of THINGS3.ZIL"
; "RT-DF-TH-PIPE commented out of THINGS3.ZIL"
; "RT-DF-TH-MATCH commented out of THINGS3.ZIL"
; "RT-DF-TH-TORCH commented out of THINGS3.ZIL"
;-----------------------------------------------------------------------------
<OBJECT TH-WAX-HEAD
(LOC TH-CHARLES-STATUE)
(FLAGS FL-TAKEABLE FL-TRYTAKE FL-NODESC FL-NOALL FL-HAS-SDESC
FL-HAS-DESCFCN)
(SYNONYM HEAD WAX)
(ADJECTIVE HEAD WAX)
(SIZE 1 CAPACITY 1 MASS 0)
(GENERIC RT-GN-WAX)
(ACTION RT-AC-TH-WAX-HEAD)>
<VOC "POOL" NOUN>
<VOC "POOL" ADJ>
<OBJECT TH-WAX-AX
(LOC TH-CHARLES-STATUE)
;(DESC "axe")
(FLAGS FL-TAKEABLE FL-VOWEL FL-NODESC FL-NOALL FL-WEAPON
FL-HAS-DESCFCN FL-HAS-SDESC)
(SYNONYM BLADE AX AXE WAX)
(ADJECTIVE WAX WAX)
(SIZE 12 CAPACITY 0 MASS 0)
(GENERIC RT-GN-WAX)
(ACTION DESC-WAX-AX)>
<VOC "MELTED" ADJ>
<OBJECT TH-EMERALD
(FLAGS FL-READABLE FL-TAKEABLE FL-VOWEL FL-SURFACE FL-MONEY
FL-HAS-DESCFCN FL-HAS-SDESC FL-NEEDS-IDENTITY FL-LOSE-IDENTITY)
(OBJ-ADJ 0)
(OBJ-NOUN 0)
(SYNONYM EMERALD GEM GEMS SCRATCH)
(ADJECTIVE GREEN EMERALD EMERALD\'S)
(VALUE 5)
(SIZE 1 MASS 1 CAPACITY 1)
(GENERIC RT-GN-GEM)
(ACTION RT-AC-TH-EMERALD)>
<OBJECT TH-TORCH
(LOC TH-FAWKES-STATUE)
;(DESC "torch")
(FLAGS FL-BURNABLE FL-TAKEABLE FL-NODESC FL-NOALL FL-HAS-SDESC
FL-HAS-DESCFCN)
(SYNONYM TORCH)
(ADJECTIVE ZZZP)
(SIZE 1)
(ACTION RT-AC-TH-TORCH)>
<VOC "BURNT" ADJ>
<OBJECT TH-TOBACCO
(LOC TH-PERSIAN-SLIPPER)
(DESC "tobacco")
(FLAGS FL-TAKEABLE FL-BURNABLE FL-PLURAL FL-COLLECTIVE FL-NOALL
FL-HAS-DESCFCN)
(SYNONYM TOBACCO SHAG)
(ADJECTIVE SHAG)
(VALUE 1)
(SIZE 1)
(ACTION RT-AC-TH-TOBACCO)>
<ROUTINE BURN-OUT-MATCH ()
<FCLEAR ,TH-MATCH ,FL-BURNABLE>
<CLEAR-ALL-FLAGS ,TH-MATCH>
<FSET ,TH-MATCH ,FL-TAKEABLE>
<FSET ,TH-MATCH ,FL-BROKEN>>
<ROUTINE RT-AC-TH-MATCH ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-MATCH">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<COND (<FSET? ,TH-MATCH ,FL-BROKEN>
<TELL "burnt match">)
(T
<TELL "match">)>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<FSET? ,TH-MATCH ,FL-BROKEN>
<RFALSE>)
(<MC-IS? ,TH-MATCH ,FL-LIGHTED>
<TELL CTHE ,TH-MATCH " is burning." CR>)
(T <RFALSE>)>)
(<MC-T? .CONTEXT> <RFALSE>)
(<FSET? ,TH-MATCH ,FL-BROKEN>
<COND (<MC-VERB? LAMP-OFF LIGHT STRIKE BURN-WITH LIGHT-WITH>
<TELL "The match is already burned out." CR>)>)
(<AND <MC-VERB? LIGHT-WITH BURN-WITH STRIKE LIGHT>
<MC-PRSO? ,TH-MATCH>>
<COND (<MC-IS? ,TH-MATCH ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<MC-ISNOT? ,TH-MATCH ,FL-BURNABLE>
<TELL CTHEO " is burned out." CR>)
(<OR <MC-PRSI? ,TH-HANDS <>>
<AND <MC-IS? ,GL-PRSI ,FL-LIGHTED>
<MC-IS? ,GL-PRSI ,FL-BURNABLE>>>
<MC-MAKE ,TH-MATCH ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-MATCH-OUT
<RT-PARM-SET 0 2 0>>
<MOVE ,TH-MATCH ,GL-WINNER>
<TELL CTHEO " flares to life." CR>)>)
(<MC-VERB? LAMP-OFF>
<COND (<MC-ISNOT? ,TH-MATCH ,FL-LIGHTED>
<TELL CTHEO " isn't lit." CR>)
(T
<MC-UNMAKE ,TH-MATCH ,FL-LIGHTED>
;<MC-UNMAKE ,TH-MATCH ,FL-BURNABLE>
<BURN-OUT-MATCH>
;<MOVE ,TH-BURNT-MATCH <LOC ,TH-MATCH>>
;<REMOVE ,TH-MATCH>
<RT-ALARM-CLR ,RT-I-MATCH-OUT>
<RT-CYOU-MSG "blow" "blows">
<TELL "out the match." CR>)>)>>
<ROUTINE CLEAR-ALL-FLAGS (OBJ)
<REPEAT ((N 1))
<COND (<NOT <EQUAL? .N ,FL-HAS-SDESC ,FL-HAS-DESCFCN ,FL-NEEDS-IDENTITY
,FL-LOSE-IDENTITY>>
<FCLEAR .OBJ .N>)>
<COND (<G? <SET N <+ .N 1>> 48> <RETURN>)>>>
<ROUTINE RT-AC-TH-TORCH ("OPTIONAL" (CONTEXT <>) "AUX" WHO)
<DEBUGGING? <RT-DEBUG-OB-AC "TH-TORCH">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<COND (<FSET? ,TH-TORCH ,FL-BROKEN>
<TELL "burnt torch">)
(T
<TELL "torch">)>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<FSET? ,TH-TORCH ,FL-BROKEN>
<RFALSE>)
(<MC-IS? ,TH-TORCH ,FL-LIGHTED>
<TELL CTHE ,TH-TORCH " is burning." CR>
<RTRUE>)>
<RFALSE>)
(<FSET? ,TH-TORCH ,FL-BROKEN>
<RFALSE>
;<RT-AC-TH-BURNT-TORCH .CONTEXT>)
(<AND <MC-VERB? MELT HEAT LIGHT-WITH BURN-WITH>
<MC-PRSI? ,TH-TORCH>>
<COND (<MC-ISNOT? ,TH-TORCH ,FL-LIGHTED>
<TELL CTHE ,TH-TORCH " is not lit." CR>)
(<MC-PRSO? ,TH-TORCH>
<TELL CTHEO " is already lit." CR>)
(<MC-PRSO? ,TH-WAX-HEAD>
;<REMOVE ,TH-WAX-HEAD>
;<MOVE ,TH-WAX-POOL ,GL-PLACE-CUR>
<TELL
CTHEO " melts into a pool of wax on the floor. You see
a gem glittering in the wax." CR>
<MOVE ,TH-WAX-HEAD ,GL-PLACE-CUR>
<MOVE ,TH-EMERALD ,TH-WAX-HEAD>
<CLEAR-ALL-FLAGS ,TH-WAX-HEAD>
<FSET ,TH-WAX-HEAD ,FL-OPENED>
<FSET ,TH-WAX-HEAD ,FL-TRANSPARENT>
<FSET ,TH-WAX-HEAD ,FL-CONTAINER>
<FSET ,TH-WAX-HEAD ,FL-BROKEN>
<SET-MASS-TO-ONE ,TH-WAX-HEAD>
<PUT <GETPT ,TH-WAX-HEAD ,P?SYNONYM> 0 ,W?POOL>
<PUT <GETPT ,TH-WAX-HEAD ,P?ADJECTIVE> 0 ,W?POOL>
<RT-THIS-IS-IT ,TH-EMERALD>)
(<MC-PRSO? ,TH-WAX-AX>
;<REMOVE ,TH-WAX-AX>
;<MOVE ,TH-MELTED-AX ,GL-PLACE-CUR>
<TELL CTHEO " melts into a pool of wax on the floor." CR>
<MOVE ,TH-WAX-AX ,GL-PLACE-CUR>
<CLEAR-ALL-FLAGS ,TH-WAX-AX>
<FSET ,TH-WAX-AX ,FL-OPENED>
<FSET ,TH-WAX-AX ,FL-TRANSPARENT>
<FSET ,TH-WAX-AX ,FL-CONTAINER>
<FSET ,TH-WAX-AX ,FL-BROKEN>
<SET-SIZE-TO-ONE ,TH-WAX-AX>
<SET-CAPACITY-TO-ONE ,TH-WAX-AX>
<SET-MASS-TO-ONE ,TH-WAX-AX>
<PUT <GETPT ,TH-WAX-AX ,P?SYNONYM> 0 ,W?AX>
<PUT <GETPT ,TH-WAX-AX ,P?ADJECTIVE> 0 ,W?MELTED>)
(<MC-ISNOT? ,GL-PRSO ,FL-BURNABLE>
<RT-CYOU-MSG>
<TELL "cannot " VW " " THEO " with " THEI "." CR>)>)
(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-PRSO? ,TH-TORCH>>
<COND (<AND <MC-PRSI? ,TH-TOBACCO ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>
<TELL CTHEI>
<RT-DONT-DOESNT-MSG ,GL-PRSI>
<TELL "put out enough heat to light " THEO "." CR>)
(<MC-ISNOT? ,GL-PRSI ,FL-BURNABLE>
<RT-CYOU-MSG>
<TELL "cannot light " THEO " with " THEI "." CR>)
(<MC-ISNOT? ,GL-PRSI ,FL-LIGHTED>
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "burning." CR>)
(T
<TELL CTHEO " catches fire quickly." CR>
<MC-MAKE ,TH-TORCH ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-TORCH-OUT <RT-PARM-SET 1 0 0>>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL CR
"Holmes looks at you and says, \"An ingenious solution, Watson. My
compliments, old chap.\"" CR>)>
<RT-UPDATE-SCORE 4>)>)>>
<ROUTINE RT-LIGHT-PIPE (FIRE)
<COND (<MC-ISNOT? .FIRE ,FL-BURNABLE>
<RT-CYOU-MSG>
<TELL "cannot light " THEO " with " THEI "." CR>)
(<MC-ISNOT? .FIRE ,FL-LIGHTED>
<TELL CTHE .FIRE " is not burning." CR>)
(<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<IN? ,TH-TOBACCO ,TH-PIPE>
<MC-MAKE ,TH-TOBACCO ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-PIPE-OUT <RT-PARM-SET 0 15 0>>
<TELL "After a few puffs, " THEO " fires right up." CR>)>>
<ROUTINE RT-AC-TH-TOBACCO ("OPTIONAL" (CONTEXT <>) "AUX" I)
<DEBUGGING? <RT-DEBUG-OB-AC "TH-TOBACCO">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHE ,TH-TOBACCO " is burning." CR>)
(T
<TELL "It's Holmes's favorite brand of shag tobacco." CR>)>
<RTRUE>)
(<MC-THIS-PRSO?>
<SETG GL-P-IT-OBJECT ,TH-TOBACCO>)>
<COND (<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-PRSO? ,TH-TOBACCO>>
<COND (<MC-PRSI? <> ,TH-HANDS>
<SET I ,TH-MATCH>)
(T
<SET I ,GL-PRSI>)>
<COND (<NOT <IN? .I ,GL-WINNER>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " A .I "." CR>)
(<NOT <IN? ,TH-PIPE ,GL-WINNER>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " THE ,TH-PIPE "." CR>)
(<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<RT-LIGHT-PIPE .I>
<RTRUE>)
(T
<TELL CTHEO " " ,K-SMOULDERS-MSG CR>)>)
(<AND <MC-VERB? TAKE TOUCH>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>
<TELL "Yeeeeouch! That's hot!" CR>)
;(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-PRSI? ,TH-TOBACCO>
<MC-IS? ,GL-PRSO ,FL-BURNABLE>>
<COND (<MC-PRSO? ,TH-TORCH>
<RFALSE>)
(<MC-ISNOT? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHEI " is not lit." CR>)
(<MC-IS? ,GL-PRSO ,FL-LIGHTED>
<TELL CTHEO " is already burning." CR>)
(<MC-PRSO? ,TH-NEWSPAPER ,TH-WESTMINSTER-CLUE ,TH-MAIL>
<TELL CTHEO " lights right up." CR>
<MC-MAKE ,GL-PRSO ,FL-LIGHTED>
<COND (<MC-PRSO? ,TH-NEWSPAPER>
<RT-ALARM-SET-REL ,RT-I-NEWSPAPER-OUT <RT-PARM-SET 0 3 0>>)
(<MC-PRSO? ,TH-WESTMINSTER-CLUE>
<RT-ALARM-SET-REL ,RT-I-CLUE-OUT <RT-PARM-SET 0 3 0>>)
(<MC-PRSO? ,TH-MAIL>
<RT-ALARM-SET-REL ,RT-I-MAIL-OUT <RT-PARM-SET 0 3 0>>)>)
(T
<TELL "Unfortunately, " THEI " doesn't put out enough heat to light " THEO "." CR>)>)
(<MC-VERB? SMOKE>
<COND (<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL ,K-BRAND-MSG CR>)
(T
<TELL CTHEO " is not lit." CR>)>)
(<MC-VERB? SMELL>
<TELL "The shag has a strong, but pleasant smell." CR>)>>
<ROUTINE RT-AC-TH-PIPE ("OPTIONAL" (CONTEXT <>) "AUX" I DEST)
<DEBUGGING? <RT-DEBUG-OB-AC "TH-PIPE">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<AND <MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<IN? ,TH-TOBACCO ,TH-PIPE>>
<TELL "Smoke gently wafts from " THE ,TH-PIPE "." CR>)
(T
<TELL "It is an old and oily black clay pipe, the companion of Holmes's deepest meditations." CR>)>)
(<MC-T? .CONTEXT> <RFALSE>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? LIGHT-WITH BURN-WITH>
<COND (<MC-PRSI? <> ,TH-HANDS>
<SET I ,TH-MATCH>)
(T
<SET I ,GL-PRSI>)>
<COND (<NOT <IN? .I ,GL-WINNER>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " A .I "." CR>)
(<NOT <IN? ,TH-PIPE ,GL-WINNER>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " THE ,TH-PIPE "." CR>)
(<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<RT-LIGHT-PIPE .I>
<RTRUE>)
;(<FIRST? ,TH-PIPE>
<RT-CYOU-MSG>
<TELL "cannot light " THE <FIRST? ,TH-PIPE>
" in " THE ,TH-PIPE "." CR>)
(T
<TELL "There is nothing in the pipe to light." CR>)>)
(<AND <MC-VERB? PUT>
<MC-PRSI? ,TH-PLAYER-BODY>
<==? <ZGET ,GL-P-NAMW 1> ,W?MOUTH>>
<RT-PERFORM ,V?SMOKE ,TH-PIPE>)
(<MC-VERB? SMOKE>
<COND (<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>
<TELL ,K-BRAND-MSG CR>)
(T
<TELL CTHEO " is not lit." CR>)>)
(<AND <MC-VERB? EMPTY-INTO POUR>
<IN? ,TH-TOBACCO ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>
<COND (<MC-VERB? POUR>
<MC-UNMAKE ,TH-TOBACCO ,FL-LIGHTED>
<MOVE ,TH-TOBACCO ,GL-PLACE-CUR>
<TELL CTHE ,TH-TOBACCO " falls ">
<COND (<MC-HERE? ,RM-THAMES-ONE ,RM-THAMES-TWO
,RM-THAMES-THREE ,RM-THAMES-FOUR
,RM-THAMES-FIVE>
<REMOVE ,TH-TOBACCO>
<TELL "into the water." CR>)
(T
<TELL "to ">
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL-THE-FLOOR>)
(T
<TELL-THE-GROUND>)>
<TELL ", " ,K-SMOULDERS-MSG CR>)>)
(<MC-VERB? EMPTY-INTO>
<COND (<RT-ROOM-IN-ON-MSG? ,TH-TOBACCO ,GL-PRSI>
<RTRUE>)
(<RT-CHECK-MOVE-MSG? ,TH-TOBACCO ,GL-PRSI>
<RTRUE>)
(T
<MC-UNMAKE ,TH-TOBACCO ,FL-LIGHTED>
<MOVE ,TH-TOBACCO ,GL-PRSI>
<TELL CTHE ,TH-TOBACCO " falls ">
<COND (<MC-IS? ,GL-PRSI ,FL-CONTAINER>
<TELL "into">)
(T
<TELL "onto">)>
<TELL " " THEI ", " ,K-SMOULDERS-MSG CR>)>)>)>)
(<MC-THIS-PRSI?>
<COND (<AND <MC-VERB? PUT>
<NOT <MC-PRSO? ,TH-TOBACCO>>>
<TELL "Putting " THEO " in " THEI " would">
<RT-WASTE-OF-TIME-MSG>)
(<AND <MC-VERB? POUR-FROM>
<MC-PRSO? ,TH-TOBACCO>
<IN? ,TH-TOBACCO ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>
<MC-UNMAKE ,TH-TOBACCO ,FL-LIGHTED>
<MOVE ,TH-TOBACCO ,GL-PLACE-CUR>
<TELL CTHEO " falls to ">
<COND (<MC-IS? ,GL-PLACE-CUR ,FL-INDOORS>
<TELL-THE-FLOOR>)
(T
<TELL-THE-GROUND>)>
<TELL ", " ,K-SMOULDERS-MSG CR>)
;(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-THIS-PRSI?>
<MC-IS? ,GL-PRSO ,FL-BURNABLE>>
<COND (<MC-PRSO? ,TH-TORCH>
<RFALSE>)
(<MC-ISNOT? ,TH-TOBACCO ,FL-LIGHTED>
<TELL CTHEI " is not lit." CR>)
(<MC-IS? ,GL-PRSO ,FL-LIGHTED>
<TELL CTHEO " is already burning." CR>)
(<MC-PRSO? ,TH-NEWSPAPER ,TH-WESTMINSTER-CLUE ,TH-MAIL>
<TELL CTHEO " lights right up." CR>
<MC-MAKE ,GL-PRSO ,FL-LIGHTED>
<COND (<MC-PRSO? ,TH-NEWSPAPER>
<RT-ALARM-SET-REL ,RT-I-NEWSPAPER-OUT <RT-PARM-SET 0 3 0>>)
(<MC-PRSO? ,TH-WESTMINSTER-CLUE>
<RT-ALARM-SET-REL ,RT-I-CLUE-OUT <RT-PARM-SET 0 3 0>>)
(<MC-PRSO? ,TH-MAIL>
<RT-ALARM-SET-REL ,RT-I-MAIL-OUT <RT-PARM-SET 0 3 0>>)>)
(T
<TELL "Unfortunately, " THEI " doesn't put out
enough heat to light " THEO "." CR>)>)>)>>
<ROUTINE RT-AC-TH-MAIL ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-MAIL">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<MC-IS? ,TH-MAIL ,FL-LIGHTED>
<TELL CTHE ,TH-MAIL " is burning." CR>
<RTRUE>)
(T
<RFALSE>)>)
(<MC-T? .CONTEXT> <RFALSE>)
(<MC-THIS-PRSO?>
<SETG GL-P-IT-OBJECT ,TH-MAIL>)>
<COND (<MC-VERB? READ EXAMINE LOOK-ON LOOK-INSIDE OPEN SEARCH OPEN-WITH>
<TELL "You should not read other people's mail." CR>)
(<MC-VERB? CLOSE>
<TELL "The mail hasn't been opened." CR>)
(<AND <MC-VERB? TAKE>
<T? ,KNIFE-COLD?>>
<SETG KNIFE-COLD? <>>
<MOVE ,TH-KNIFE ,GL-WINNER>
<TELL "[Taking the knife first]">
<COND (,GL-P-MULT?
<TELL " ">)
(T
<CRLF>)>
<RFALSE>)
(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-THIS-PRSO?>>
<COND (<MC-IS? ,TH-MAIL ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<AND <MC-ISNOT? ,GL-PRSI ,FL-BURNABLE>
<NOT <MC-PRSI? ,TH-PIPE>>>
<RFALSE>)
(<OR <AND <MC-IS? ,GL-PRSI ,FL-LIGHTED>
<MC-IS? ,GL-PRSI ,FL-BURNABLE>>
<AND <MC-PRSI? ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>>
<TELL CTHE ,TH-MAIL " lights up." CR>
<MC-MAKE ,TH-MAIL ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-MAIL-OUT <RT-PARM-SET 0 3 0>>)
(T
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "burning." CR>)>)>>
<ROUTINE RT-AC-TH-NEWSPAPER ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-NEWSPAPER">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<MC-IS? ,TH-NEWSPAPER ,FL-LIGHTED>
<TELL CTHE ,TH-NEWSPAPER " is burning." CR>)
(T
<TELL
"It's the newspaper that came in your game package."
CR>)>
<RTRUE>)
(<MC-T? .CONTEXT> <RFALSE>)
(<NOT <MC-VERB? READ READ-TO SHOW LIGHT-WITH BURN-WITH
GIVE TELL-ABOUT>>
<RFALSE>)
(<NOT <IN? ,TH-NEWSPAPER ,CH-PLAYER>>
<TELL "The newspaper will not leap into your hand by itself." CR>)
(<MC-VERB? READ>
<RT-READ-NEWSPAPER>)
(<OR <AND <MC-VERB? READ-TO SHOW GIVE>
<MC-THIS-PRSO?>>
<AND <MC-VERB? TELL-ABOUT>
<MC-THIS-PRSI?>>>
<COND (<MC-ISNOT? ,GL-PRSI ,FL-PERSON>
<RFALSE>)
(<OR <MC-IS? ,TH-NEWSPAPER ,FL-ASLEEP>
<MC-IS? ,TH-NEWSPAPER ,FL-OPENED>>
<RT-READ-NEWSPAPER>
<CRLF>)>
<COND (<OR <AND <MC-VERB? READ-TO SHOW GIVE>
<MC-PRSI? ,CH-HOLMES>>
<AND <MC-VERB? TELL-ABOUT>
<MC-PRSO? ,CH-HOLMES>>>
<COND (<MC-IS? ,CH-HOLMES ,FL-ASLEEP>
<RT-WAKE-UP-HOLMES>
<COND
(<MC-VERB? GIVE>
<MOVE ,TH-NEWSPAPER ,CH-HOLMES>)>
<RTRUE>)
;(T
<TELL "\"Don't be tedious, Watson. You have ">
<COND (<MC-VERB? READ-TO>
<TELL "read">)
(<MC-VERB? SHOW>
<TELL "shown">)
(<MC-VERB? GIVE>
<TELL "given">)
(<MC-VERB? TELL-ABOUT>
<TELL "mentioned">)>
<TELL " that to me already.\"" CR>)>)
(T
<TELL CTHEI>
<RT-DONT-DOESNT-MSG ,GL-PRSI>
<TELL "seem to be interested." CR>)>)
(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-THIS-PRSO?>>
<COND (<MC-IS? ,TH-NEWSPAPER ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<AND <MC-ISNOT? ,GL-PRSI ,FL-BURNABLE>
<NOT <MC-PRSI? ,TH-PIPE>>>
<RFALSE>)
(<OR <AND <MC-IS? ,GL-PRSI ,FL-LIGHTED>
<MC-IS? ,GL-PRSI ,FL-BURNABLE>>
<AND <MC-PRSI? ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>>
<TELL CTHE ,TH-NEWSPAPER " lights up." CR>
<MC-MAKE ,TH-NEWSPAPER ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-NEWSPAPER-OUT <RT-PARM-SET 0 3 0>>
<RTRUE>)
(T
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "burning." CR>)>)>>
<ROUTINE RT-AC-TH-WESTMINSTER-CLUE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-WESTMINSTER-CLUE">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<MC-IS? ,TH-MAIL ,FL-LIGHTED>
<TELL CTHE ,TH-MAIL " is burning." CR>
<RTRUE>)
(T <RFALSE>)>)
(<MC-T? .CONTEXT> <RFALSE>)
(<MC-VERB? READ EXAMINE>
<COND (<NOT <IN? ,TH-WESTMINSTER-CLUE ,CH-PLAYER>>
<TELL "The paper will not leap into your hand by itself." CR>)
(<ZERO? <GETP ,TH-WESTMINSTER-CLUE ,P?FLIPPED>>
<TELL
INDENT "Mortality, behold and fear!" CR
INDENT "What a change of flesh is here!" CR
INDENT "Think how many royal bones" CR
INDENT "Sleep within this heap of stones:" CR
INDENT "Here they lie, had realms and lands," CR
INDENT "Who now want strength" WRAP "to stir their hands." CR CR
INDENT ,K-ASTERISK-MSG CR CR
INDENT "For two-score years I reigned alone," CR
INDENT "A virgin queen on England's throne." CR
INDENT "My navy caused Armada's shame," CR
INDENT "And with me died the Tudor name." CR CR
INDENT ,K-ASTERISK-MSG CR CR
INDENT "The apple sorely tempted Eve," CR
INDENT "And Tell another aimed to cleave." CR
INDENT "But when one fell, it showed to me," CR
INDENT "The mighty pull of gravity." CR CR
INDENT ,K-ASTERISK-MSG CR CR
INDENT "My father, it was said, would die," CR
INDENT "Beneath the Holy City's sky." CR
INDENT "Jerusalem his body claimed," CR
INDENT "And it is after him I'm named." CR CR
INDENT ,K-ASTERISK-MSG CR CR
INDENT ,K-ASTERISK-MSG CR CR
INDENT "O stately Holmes of England," CR
INDENT "In Baker Street abide." CR
INDENT "For even you must surely fail," CR
INDENT "To save your country's pride." CR>)
(T
<TELL "This side appears to be blank." CR>)>)
(<AND <MC-VERB? LIGHT-WITH BURN-WITH>
<MC-THIS-PRSO?>>
<COND (<MC-IS? ,TH-WESTMINSTER-CLUE ,FL-LIGHTED>
<TELL CTHEO " is already lit." CR>)
(<AND <MC-ISNOT? ,GL-PRSI ,FL-BURNABLE>
<NOT <MC-PRSI? ,TH-PIPE>>>
<RFALSE>)
(<OR <AND <MC-IS? ,GL-PRSI ,FL-LIGHTED>
<MC-IS? ,GL-PRSI ,FL-BURNABLE>>
<AND <MC-PRSI? ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>>
<TELL CTHE ,TH-WESTMINSTER-CLUE " lights up." CR>
<MC-MAKE ,TH-WESTMINSTER-CLUE ,FL-LIGHTED>
<RT-ALARM-SET-REL ,RT-I-CLUE-OUT <RT-PARM-SET 0 3 0>>)
(T
<TELL CTHEI>
<RT-ISNT-ARENT-MSG ,GL-PRSI>
<TELL "burning." CR>)>
<RTRUE>)
(<MC-VERB? FLIP>
<COND (<NOT <IN? ,TH-WESTMINSTER-CLUE ,GL-WINNER>>
<RT-CYOU-MSG "are" "is">
<TELL "not holding " THE ,TH-WESTMINSTER-CLUE "." CR>)
(T
<PUTP ,TH-WESTMINSTER-CLUE ,P?FLIPPED <- 1 <GETP ,TH-WESTMINSTER-CLUE ,P?FLIPPED>>>
<RT-CYOU-MSG "turn" "turns">
<TELL THE ,TH-WESTMINSTER-CLUE " over." CR>)>)
(<AND <MC-VERB? LOOK-THRU>
<MC-PRSI? ,TH-MAGNIFYING-GLASS>>
<TELL "It's been wiped clean." CR>)>>
<CONSTANT K-HOLMES-HEAD? 1> ; "Has Holmes made comment about Charles I head?"
<CONSTANT K-HOLMES-GEM? 2> ; "Has Holmes made comment about gem?"
<ROUTINE RT-AC-TH-WAX-HEAD ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "TH-WAX-HEAD">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<COND (<FSET? ,TH-WAX-HEAD ,FL-BROKEN>
<TELL "wax pool">)
(T
<TELL "wax head">)>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<NOT <FSET? ,TH-WAX-HEAD ,FL-BROKEN>>
<RFALSE>)
(<NOT <FIRST? ,TH-WAX-HEAD>>
<TELL "Looks like any other " D ,TH-WAX-HEAD "." CR>)>)
(<NOT <FSET? ,TH-WAX-HEAD ,FL-BROKEN>> ; "STILL THE HEAD"
<COND (<IN? ,TH-WAX-HEAD ,TH-CHARLES-STATUE>
<COND (<MC-VERB? TAKE ;UNSCREW UNSCREW-FROM>
<MOVE ,TH-WAX-HEAD ,GL-WINNER>
<MC-MAKE ,TH-WAX-HEAD ,FL-SEEN>
<MC-UNMAKE ,TH-WAX-HEAD ,FL-NODESC>
<MC-UNMAKE ,TH-WAX-HEAD ,FL-NOALL>
<COND (,GL-P-MULT?
<TELL "Taken." CR>)
(T
<RT-CYOU-MSG "take" "takes">
<TELL THE ,TH-WAX-HEAD "." CR>)>)
(<RT-TOUCH-VERB?>
<MC-MAKE ,TH-WAX-HEAD ,FL-SEEN>
<TELL CTHE ,TH-WAX-HEAD " wobbles slightly.">
<COND (<MC-F? <BAND ,CH-HOLMES-AUX1 ,K-HOLMES-HEAD?>>
<TELL " " THE ,CH-HOLMES
" says, \"Even when he was alive, he didn't have his head screwed on right.\"">
<SETG CH-HOLMES-AUX1 <BOR ,CH-HOLMES-AUX1 ,K-HOLMES-HEAD?>>)>
<CRLF>)>)
(<AND <MC-VERB? MELT HEAT>
<MC-THIS-PRSO?>
<OR <AND <MC-IS? ,GL-PRSI ,FL-BURNABLE>
<MC-IS? ,GL-PRSI ,FL-LIGHTED>>
<AND <MC-PRSI? ,TH-PIPE>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>>>
<TELL CTHEO " softens, but " THEI
" does not put out enough heat to melt it." CR>)
(<MC-VERB? MUNG KILL OPEN>
<RT-CYOU-MSG>
<TELL "can't break into the head." CR>)>)
(T ; "NOW THE POOL"
<RFALSE>)>>
<ROUTINE DESC-WAX-AX ("OPTIONAL" (CONTEXT <>))
<COND (<==? .CONTEXT ,K-M-SDESC>
<COND (<FSET? ,TH-WAX-AX ,FL-BROKEN>
<TELL "melted axe">)
(T
<TELL "axe">)>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<NOT <FSET? ,TH-WAX-AX ,FL-BROKEN>> <RFALSE>)
(<NOT <FIRST? ,TH-WAX-AX>>
<TELL "Looks like any other " D ,TH-WAX-AX "." CR>)>)>>
<ROUTINE RT-GUARD-TAKE-ITEM (OBJ1 "OPTIONAL" (OBJ2 <>) (OBJ3 <>) "AUX" STR)
<TELL CTHE ,CH-TUSSAUDS-GUARD " says, \"I'm sorry, but " THE .OBJ1>
<COND (<AND .OBJ2 .OBJ3>
<TELL ", " THE .OBJ2 " and " THE .OBJ3 " are">
<SET STR "them">)
(<MC-T? .OBJ2>
<TELL " and " THE .OBJ2 " are">
<SET STR "them">)
(T
<TELL " is">
<SET STR "it">)>
<TELL
" not to be removed.\" He takes " .STR " and returns " .STR " to the proper
place." CR CR>>
<ROUTINE RT-GUARD-STOP-ENTRANCE ("OPTIONAL" (OBJ <>) "AUX" WHO)
<SET WHO <RT-WHO-SAYS?>>
<IFSOUND <SOUNDS ,S-BARK ,S-START 8 4>>
<TELL CTHE ,CH-MATCH-SNIFFING-DOG " barks loudly and " THE
,CH-TUSSAUDS-GUARD " says, \"Seeing as how it's you, ">
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL "Mr Holmes">)
(T
<TELL "Doctor Watson">)>
<TELL
", I don't mind letting you in. But as you know we are very afraid of
fire here, so we have trained this dog to detect matches or open
flames. I'm afraid I can't allow you">
<COND (<EQUAL? .WHO ,CH-HOLMES ,CH-WIGGINS>
<TELL " or your companion">)>
<TELL " to enter until " THE .OBJ " has been discarded.\"" CR>
;<COND (<AND .OBJ ;"COND ALWAYS TRUE"
<OR <IN? .OBJ ,CH-PLAYER>
<AND ,GL-PUPPY
<IN? .OBJ ,GL-PUPPY>>>>
<TELL THE .OBJ>)
(T
<TELL "the item">
<COND (<NOT .OBJ>
<TELL "s">)>
<TELL " to which the dog objects">)>
;<TELL " ha">
;<COND (.OBJ
<TELL "s">)
(T
<TELL "ve">)>
;<TELL " been discarded.\"" CR>>
<ROUTINE RT-EX-RM-EXIT-TUSSAUDS ("AUX" IN1 IN2 IN3 TORCH)
<COND (<AND <EQUAL? ,GL-PRSO ,P?SOUTH ,P?OUT>
<MC-HERE? ,RM-MADAME-TUSSAUDS>>
<SET IN1
<COND (<OR <RT-META-IN? ,TH-TORCH ,GL-WINNER>
<RT-META-IN? ,TH-TORCH ,GL-PUPPY>>
<SET TORCH ,TH-TORCH>)
;(<OR <RT-META-IN? ,TH-BURNT-TORCH ,GL-WINNER>
<RT-META-IN? ,TH-BURNT-TORCH ,GL-PUPPY>>
<SET TORCH ,TH-BURNT-TORCH>)>>
<SET IN2 <OR <RT-META-IN? ,TH-WAX-HEAD ,GL-WINNER>
<RT-META-IN? ,TH-WAX-HEAD ,GL-PUPPY>>>
<SET IN3 <OR <RT-META-IN? ,TH-WAX-AX ,GL-WINNER>
<RT-META-IN? ,TH-WAX-AX ,GL-PUPPY>>>
<COND (<AND .IN1 .IN2 .IN3>
<RT-GUARD-TAKE-ITEM ,TH-TORCH ,TH-WAX-HEAD ,TH-WAX-AX>)
(<AND .IN1 .IN2>
<RT-GUARD-TAKE-ITEM ,TH-TORCH ,TH-WAX-HEAD>)
(<AND .IN1 .IN3>
<RT-GUARD-TAKE-ITEM ,TH-TORCH ,TH-WAX-AX>)
(<AND .IN2 .IN3>
<RT-GUARD-TAKE-ITEM ,TH-WAX-HEAD ,TH-WAX-AX>)
(<MC-T? .IN1>
<RT-GUARD-TAKE-ITEM ,TH-TORCH>)
(<MC-T? .IN2>
<RT-GUARD-TAKE-ITEM ,TH-WAX-HEAD>)
(<MC-T? .IN3>
<RT-GUARD-TAKE-ITEM ,TH-WAX-AX>)>
<COND (<MC-T? .IN1>
<MOVE .TORCH ,TH-FAWKES-STATUE>
<MC-MAKE .TORCH ,FL-NODESC>
<COND (<MC-IS? .TORCH ,FL-LIGHTED>
<RT-ALARM-CLR ,RT-I-TORCH-OUT>
<RT-I-TORCH-OUT>
<MC-MAKE ,TH-TORCH ,FL-NODESC>
;<MC-MAKE ,TH-BURNT-TORCH ,FL-NODESC>)>)>
<COND (<MC-T? .IN2>
<MOVE ,TH-WAX-HEAD ,TH-CHARLES-STATUE>
<MC-MAKE ,TH-WAX-HEAD ,FL-NODESC>)>
<COND (<MC-T? .IN3>
<MOVE ,TH-WAX-AX ,TH-CHARLES-STATUE>
<MC-MAKE ,TH-WAX-AX ,FL-NODESC>)>
<RETURN ,RM-MARYLEBONE-RD>)>>
; "NORTH from RM-MARYLEBONE-RD to RM-MADAME-TUSSAUDS"
<ROUTINE RT-EX-RM-MATCH-SNIFFING-DOG ("AUX" OBJ (FLAME? <>) (FIRST T) LAMP? MATCH?)
<COND (<AND <EQUAL? ,GL-PRSO ,P?NORTH ,P?IN>
<MC-HERE? ,RM-MARYLEBONE-RD>>
<REPEAT ()
<SET OBJ <FIRST? ,GL-WINNER>>
<REPEAT ()
<COND (<MC-F? .OBJ>
<RETURN>)
(<AND <MC-IS? .OBJ ,FL-BURNABLE>
<MC-IS? .OBJ ,FL-LIGHTED>
<NOT <EQUAL? .OBJ ,TH-TOBACCO>>>
<SET FLAME? .OBJ>
<RETURN>)>
<SET OBJ <NEXT? .OBJ>>>
<COND (<AND <MC-F? .FLAME?>
<MC-T? .FIRST>
<MC-T? ,GL-PUPPY>>
<SET OBJ <FIRST? ,GL-PUPPY>>
<SET FIRST <>>)
(T
<RETURN>)>>
<COND (<OR <SET MATCH? <AND <OR <RT-META-IN? ,TH-MATCH ,CH-PLAYER>
<RT-META-IN? ,TH-MATCH ,GL-PUPPY>>
<OR <MC-IS? ,TH-MATCH ,FL-BURNABLE>
<MC-IS? ,TH-MATCH ,FL-LIGHTED>>>>
<SET LAMP? <OR <RT-META-IN? ,TH-LAMP ,CH-PLAYER>
<RT-META-IN? ,TH-LAMP ,GL-PUPPY>>>
.FLAME?>
<SET OBJ <COND (.FLAME?
.FLAME?)
(.LAMP?
,TH-LAMP)
(.MATCH?
,TH-MATCH)>>
<RT-GUARD-STOP-ENTRANCE .OBJ>
<RFALSE>)>
<COND (<OR <FSET? ,TH-WAX-HEAD ,FL-BROKEN>
;<MC-F? <LOC ,TH-WAX-HEAD>>
<FSET? ,TH-WAX-AX ,FL-BROKEN>
;<MC-F? <LOC ,TH-WAX-AX>>>
<TELL
"The guard blocks your path and says, \"Oh no you don't, laddie. When I let
you in earlier you made a proper mess of my museum. I won't let you do that
again.\" After you promise to pay for the damage and plead with him for a few
moments, he finally steps aside." CR CR>)>
<RETURN ,RM-MADAME-TUSSAUDS>)>>
<ROUTINE RT-PUT-OUT (THING)
<COND (<MC-ISNOT? .THING ,FL-BURNABLE>
<RFALSE>)
(<MC-ISNOT? .THING ,FL-LIGHTED>
<RFALSE>)
(<EQUAL? .THING ,TH-MATCH>
<RT-ALARM-CLR ,RT-I-MATCH-OUT>
<RT-I-MATCH-OUT>)
(<EQUAL? .THING ,TH-PIPE>
<RT-ALARM-CLR ,RT-I-PIPE-OUT>
<RT-I-PIPE-OUT>)
(<EQUAL? .THING ,TH-TORCH>
<RT-ALARM-CLR ,RT-I-TORCH-OUT>
<RT-I-TORCH-OUT>)
(<EQUAL? .THING ,TH-NEWSPAPER>
<RT-ALARM-CLR ,RT-I-NEWSPAPER-OUT>
<RT-I-NEWSPAPER-OUT>)
(<EQUAL? .THING ,TH-WESTMINSTER-CLUE>
<RT-ALARM-CLR ,RT-I-CLUE-OUT>
<RT-I-CLUE-OUT>)
(<EQUAL? .THING ,TH-MAIL>
<RT-ALARM-CLR ,RT-I-MAIL-OUT>
<RT-I-MAIL-OUT>)
(<EQUAL? .THING ,TH-MATCHBOOK>
<RT-ALARM-CLR ,RT-I-MATCHBOOK-OUT>
<RT-I-MATCHBOOK-OUT>)
(T
<REMOVE .THING>
<FCLEAR .THING ,FL-WORN>
<MC-UNMAKE .THING ,FL-LIGHTED>
<MC-UNMAKE .THING ,FL-BURNABLE>
<TELL CTHE .THING " burn">
<RT-S-NOS-MSG .THING>
<TELL " up and disappears." CR>)>>
<ROUTINE RT-I-MATCH-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-MATCH>
<TELL CR CTHE ,TH-MATCH " flickers and dies." CR>
<SET RESULT T>)>
<MC-UNMAKE ,TH-MATCH ,FL-LIGHTED>
<BURN-MATCH-OUT>
;<MC-UNMAKE ,TH-MATCH ,FL-BURNABLE>
;<MOVE ,TH-BURNT-MATCH <LOC ,TH-MATCH>>
;<REMOVE ,TH-MATCH>
<RETURN .RESULT>>
<ROUTINE BURN-MATCH-OUT ()
<FCLEAR ,TH-MATCH ,FL-BURNABLE>
<FSET ,TH-MATCH ,FL-BROKEN>
<PUT <GETPT ,TH-MATCH ,P?ADJECTIVE> 0 ,W?BURNT>>
<ROUTINE RT-I-PIPE-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-TOBACCO>
<TELL CR CTHE ,TH-PIPE " has gone out." CR>)>
<MC-UNMAKE ,TH-TOBACCO ,FL-LIGHTED>
<MC-UNMAKE ,TH-TOBACCO ,FL-BURNABLE>
<REMOVE ,TH-TOBACCO>
<RETURN .RESULT>>
<ROUTINE RT-I-TORCH-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-TORCH>
<TELL CR CTHE ,TH-TORCH " sputters and dies." CR>
<SET RESULT T>)>
<CLEAR-ALL-FLAGS ,TH-TORCH>
<PUT <GETPT ,TH-TORCH ,P?ADJECTIVE> 0 ,W?BURNT>
<FSET ,TH-TORCH ,FL-TAKEABLE>
<FSET ,TH-TORCH ,FL-BROKEN>
;<MC-UNMAKE ,TH-TORCH ,FL-LIGHTED>
;<MC-UNMAKE ,TH-TORCH ,FL-BURNABLE>
;<MOVE ,TH-BURNT-TORCH <LOC ,TH-TORCH>>
;<REMOVE ,TH-TORCH>
<RETURN .RESULT>>
<ROUTINE RT-I-NEWSPAPER-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-NEWSPAPER>
<TELL CR CTHE ,TH-NEWSPAPER " disappears into a cloud of fine ash, which itself disappears." CR>
<SET RESULT T>)>
<MC-UNMAKE ,TH-NEWSPAPER ,FL-LIGHTED>
<MC-UNMAKE ,TH-NEWSPAPER ,FL-BURNABLE>
<REMOVE ,TH-NEWSPAPER>
<RETURN .RESULT>>
<ROUTINE RT-I-CLUE-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-WESTMINSTER-CLUE>
<TELL CR CTHE ,TH-WESTMINSTER-CLUE
" disappears in a puff of oily black smoke." CR>
<SET RESULT T>)>
<MC-UNMAKE ,TH-WESTMINSTER-CLUE ,FL-LIGHTED>
<MC-UNMAKE ,TH-WESTMINSTER-CLUE ,FL-BURNABLE>
<REMOVE ,TH-WESTMINSTER-CLUE>
<RETURN .RESULT>>
<ROUTINE RT-I-MAIL-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-MAIL>
<TELL CR CTHE ,TH-MAIL " disappears in a flash of light." CR>
<SET RESULT T>)>
<MC-UNMAKE ,TH-MAIL ,FL-LIGHTED>
<MC-UNMAKE ,TH-MAIL ,FL-BURNABLE>
<REMOVE ,TH-MAIL>
<RETURN .RESULT>>
<ROUTINE RT-I-MATCHBOOK-OUT ("AUX" (RESULT <>))
<COND (<RT-VISIBLE? ,TH-MATCHBOOK>
<TELL CR CTHE ,TH-MATCHBOOK " burns up and disappears." CR>
<SET RESULT T>)>
<MC-UNMAKE ,TH-MATCHBOOK ,FL-LIGHTED>
<MC-UNMAKE ,TH-MATCHBOOK ,FL-BURNABLE>
<REMOVE ,TH-MATCHBOOK>
<RETURN .RESULT>>
<ROUTINE PRE-LIGHT-WITH ()
<DEBUGGING? <RT-DEBUG-PRE-VERB "PRE-LIGHT-WITH">>
<COND (<AND <NOT <MC-PRSO? ,TH-MATCH ,TH-TOBACCO>>
<NOT <IN? ,GL-PRSO ,GL-WINNER>>>
<RT-CYOU-MSG>
<RT-WOULD-HAVE-TO-MSG "be holding" ,GL-PRSO>
<TELL " to light ">
<RT-SAY-HIM-HER-THEM-IT-MSG ,GL-PRSO>
<TELL "." CR>)>>
<ROUTINE RT-GN-WAX (TBL "OPTIONAL" (LEN 0))
<PUTP ,PSEUDO-OBJECT ,P?ACTION ,RT-DF-LG-WAX-STATUES>
<SETG LAST-PSEUDO-LOC ,GL-PLACE-CUR>
<RETURN ,PSEUDO-OBJECT>>

BIN
clk.was-mid Normal file

Binary file not shown.

1222
constants.zil Normal file

File diff suppressed because it is too large Load Diff

BIN
crowd-ss1 Normal file

Binary file not shown.

BIN
crowd.was-mid Normal file

Binary file not shown.

BIN
crowd1 Normal file

Binary file not shown.

22
eliza.zabstr Normal file
View File

@ -0,0 +1,22 @@
<OBJECT TH-BLUE-PILL-BOTTLE (LOC TH-BLACK-BAG) (DESC "blue bottle") (FLAGS
FL-CONTAINER FL-OPENABLE FL-READABLE FL-TAKEABLE) (SYNONYM BOTTLE BOTTLES LABEL
) (ADJECTIVE BLUE) (SIZE 3 MASS 2 CAPACITY 2) (GENERIC RT-GN-BOTTLE) (ACTION
RT-AC-TH-BLUE-PILL-BOTTLE)>
<OBJECT TH-BROWN-PILL-BOTTLE (LOC TH-BLACK-BAG) (DESC "brown bottle") (FLAGS
FL-CONTAINER FL-OPENABLE FL-READABLE FL-TAKEABLE) (SYNONYM BOTTLE BOTTLES LABEL
) (ADJECTIVE BROWN) (SIZE 3 MASS 2 CAPACITY 2) (GENERIC RT-GN-BOTTLE) (ACTION
RT-AC-TH-BROWN-PILL-BOTTLE)>
<OBJECT TH-ORANGE-PILL (LOC TH-BLUE-PILL-BOTTLE) (DESC "orange pill") (FLAGS
FL-TAKEABLE FL-READABLE FL-FOOD FL-VOWEL) (SYNONYM PILL PILLS) (ADJECTIVE
ORANGE) (SIZE 1 MASS 1) (GENERIC RT-GN-PILL) (ACTION RT-AC-TH-ORANGE-PILL)>
<OBJECT TH-YELLOW-PILL (LOC TH-BROWN-PILL-BOTTLE) (DESC "yellow pill") (FLAGS
FL-TAKEABLE FL-READABLE FL-FOOD) (SYNONYM PILL PILLS) (ADJECTIVE YELLOW) (SIZE
1 MASS 1) (GENERIC RT-GN-PILL) (ACTION RT-AC-TH-YELLOW-PILL)>
<DEFINE-ROUTINE RT-AC-TH-BLUE-PILL-BOTTLE>
<DEFINE-ROUTINE RT-AC-TH-BROWN-PILL-BOTTLE>
<DEFINE-ROUTINE RT-AC-TH-ORANGE-PILL>
<DEFINE-ROUTINE RT-AC-TH-YELLOW-PILL>
<DEFINE-ROUTINE RT-AC-CH-ELIZA-DOOLITTLE>
<DEFINE-ROUTINE RT-LISTEN-ELIZA>
<DEFINE-ROUTINE RT-CURE-ELIZA>

210
eliza.zap Normal file
View File

@ -0,0 +1,210 @@
.FUNCT RT-AC-TH-BLUE-PILL-BOTTLE,CONTEXT
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?READ,V?EXAMINE,V?LOOK-ON \?CCL6
PRINTR "The label on the bottle reads: ""Digitalis leaf. For tachycardia and other accelerated arrhythmias."""
?CCL6: EQUAL? GL-PRSA,V?SHOOT \FALSE
REMOVE TH-BLUE-PILL-BOTTLE
ICALL1 RT-CTHEO-PRINT
PRINT K-SHATTER-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-BROWN-PILL-BOTTLE,CONTEXT
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?READ,V?EXAMINE,V?LOOK-ON \?CCL6
PRINTR "The label on the bottle reads: ""Belladonna. For bradycardia and other decelerated arrhythmias."""
?CCL6: EQUAL? GL-PRSA,V?SHOOT \FALSE
REMOVE TH-BROWN-PILL-BOTTLE
ICALL1 RT-CTHEO-PRINT
PRINT K-SHATTER-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-ORANGE-PILL,CONTEXT
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?EAT \?CCL6
EQUAL? GL-WINNER,CH-PLAYER \?CCL6
PRINTI "You swallow the pill. For a few moments everything seems to move much slower."
CRLF
REMOVE GL-PRSO
RTRUE
?CCL6: EQUAL? GL-PRSA,V?SHOOT \FALSE
REMOVE TH-ORANGE-PILL
ICALL1 RT-CTHEO-PRINT
PRINT K-SHATTER-MSG
CRLF
RTRUE
.FUNCT RT-AC-TH-YELLOW-PILL,CONTEXT
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?EAT \?CCL6
EQUAL? GL-WINNER,CH-PLAYER \?CCL6
PRINTI "You swallow the pill. For a few moments everything seems to move much faster."
CRLF
REMOVE GL-PRSO
RTRUE
?CCL6: EQUAL? GL-PRSA,V?SHOOT \FALSE
REMOVE TH-YELLOW-PILL
ICALL1 RT-CTHEO-PRINT
PRINT K-SHATTER-MSG
CRLF
RTRUE
.FUNCT RT-AC-CH-ELIZA-DOOLITTLE,CONTEXT
GETP CH-ELIZA-DOOLITTLE,P?OBJ-NOUN
EQUAL? STACK,W?HEART,W?HEARTBEAT \?CCL3
EQUAL? CONTEXT,K-M-SDESC \?CCL6
PRINTI "girl's heart"
RTRUE
?CCL6: EQUAL? CONTEXT,K-M-DESCFCN \?CCL8
PRINTR "You don't have X-ray vision."
?CCL8: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?LISTEN \?CCL12
ICALL1 RT-LISTEN-ELIZA
RTRUE
?CCL12: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
ICALL1 RT-IMPOSSIBLE-MSG
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-SDESC \?CCL16
PRINTI "girl"
RTRUE
?CCL16: EQUAL? CONTEXT,K-M-DESCFCN \?CCL18
ICALL2 RT-THIS-IS-IT,CH-ELIZA-DOOLITTLE
PRINTR "The flower girl is lying on the ground in a dead faint. She is very beautiful, but her clothes indicate that she must be poor."
?CCL18: EQUAL? CONTEXT,K-M-WINNER \?CCL20
ICALL2 RT-CTHEO-PRINT,CH-ELIZA-DOOLITTLE
PRINTR " is unconscious. She cannot do anything."
?CCL20: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?LISTEN \?PRD26
ZERO? GL-NOW-PRSI? /?CTR23
?PRD26: EQUAL? GL-PRSA,V?USE-ON,V?TOUCH-TO \?PRD29
EQUAL? GL-PRSO,TH-STETHOSCOPE \?PRD29
ZERO? GL-NOW-PRSI? \?CTR23
?PRD29: EQUAL? GL-PRSA,V?DIAGNOSE \?PRD33
ZERO? GL-NOW-PRSI? /?CTR23
?PRD33: EQUAL? GL-PRSA,V?LOOK-THRU \?CCL24
EQUAL? GL-P-PRSA-WORD,W?EXAMINE \?CCL24
ZERO? GL-NOW-PRSI? \?CCL24
EQUAL? GL-PRSI,TH-STETHOSCOPE \?CCL24
?CTR23: CALL1 RT-LISTEN-ELIZA
RSTACK
?CCL24: EQUAL? GL-PRSA,V?GIVE,V?FEED \?CCL41
CALL2 RT-CURE-ELIZA,GL-PRSO
RSTACK
?CCL41: EQUAL? GL-PRSA,V?TAKE,V?RAISE,V?MOVE \?CCL43
EQUAL? GL-PRSO,TH-ELIZAS-FLOWERS \?CCL46
PRINT K-OUTRAGED-CROWD-MSG
CRLF
RTRUE
?CCL46: EQUAL? GL-PRSO,CH-ELIZA-DOOLITTLE \FALSE
PRINTR "The girl is too sick to be moved."
?CCL43: EQUAL? GL-PRSA,V?RESCUE \?CCL50
PRINTR "A noble thought, worthy of someone who has taken the Hippocratic oath."
?CCL50: EQUAL? GL-PRSA,V?ALARM \?CCL52
PRINTR "Your medical expertise tells you she's not just asleep. It's more serious than that."
?CCL52: EQUAL? GL-PRSA,V?SEARCH \FALSE
PRINT K-OUTRAGED-CROWD-MSG
CRLF
RTRUE
.FUNCT RT-LISTEN-ELIZA,?TMP1
FSET? TH-COTTON-BALLS,FL-WORN \?CCL3
ICALL1 RT-CYOU-MSG
PRINTI "cannot hear a thing with "
ICALL2 RT-THEO-PRINT,TH-COTTON-BALLS
PRINTI " in "
ICALL2 RT-THEO-PRINT,TH-EARS
PRINTR "."
?CCL3: FSET? TH-STETHOSCOPE,FL-WORN \?CCL5
LOC CH-PLAYER >?TMP1
LOC CH-ELIZA-DOOLITTLE
EQUAL? ?TMP1,STACK /?CND6
PRINTR "You can't reach the girl from where you are."
?CND6: ZERO? CH-ELIZA-DOOLITTLE-AUX1 \?CND8
RANDOM 100
LESS? 50,STACK /?CCL12
SET 'CH-ELIZA-DOOLITTLE-AUX1,1
JUMP ?CND8
?CCL12: SET 'CH-ELIZA-DOOLITTLE-AUX1,2
?CND8: EQUAL? CH-ELIZA-DOOLITTLE-AUX1,1 \?CCL15
ICALL SOUNDS,S-HEART3,S-START,6,10
PRINTR "Her heartbeat is incredibly fast."
?CCL15: EQUAL? CH-ELIZA-DOOLITTLE-AUX1,2 \FALSE
ICALL SOUNDS,S-HEART1,S-START,6,6
PRINTR "Her heartbeat is incredibly slow."
?CCL5: EQUAL? GL-PRSO,TH-STETHOSCOPE /?CTR18
EQUAL? GL-PRSI,TH-STETHOSCOPE \?CCL19
?CTR18: ICALL RT-CYOU-MSG,STR?228,STR?229
PRINTI "not wearing "
ICALL2 RT-THEO-PRINT,TH-STETHOSCOPE
PRINTR "."
?CCL19: PRINTR "The city noises are too loud for you to make an accurate diagnosis."
.FUNCT RT-CURE-ELIZA,CURE
EQUAL? CURE,TH-ORANGE-PILL \?CCL3
REMOVE TH-ORANGE-PILL
EQUAL? CH-ELIZA-DOOLITTLE-AUX1,1 \?CCL6
SET 'CH-ELIZA-DOOLITTLE-AUX1,3
JUMP ?CND4
?CCL6: SET 'CH-ELIZA-DOOLITTLE-AUX1,4
?CND4: PRINTI "You give her "
ICALL2 RT-THEO-PRINT,CURE
PRINTC 46
CRLF
CRLF
JUMP ?CND1
?CCL3: EQUAL? CURE,TH-YELLOW-PILL \?CCL8
REMOVE TH-YELLOW-PILL
EQUAL? CH-ELIZA-DOOLITTLE-AUX1,2 \?CCL11
SET 'CH-ELIZA-DOOLITTLE-AUX1,3
JUMP ?CND9
?CCL11: SET 'CH-ELIZA-DOOLITTLE-AUX1,4
?CND9: PRINTI "You give her "
ICALL2 RT-THEO-PRINT,CURE
PRINTC 46
CRLF
CRLF
?CND1: EQUAL? CH-ELIZA-DOOLITTLE-AUX1,3 \?CCL14
MOVE TH-CARNATION,TH-LAPEL
REMOVE CH-ELIZA-DOOLITTLE
FCLEAR CH-ELIZA-DOOLITTLE,FL-ASLEEP
PRINTI "Nothing happens for a moment, but then her eyelids flutter briefly and she opens her eyes."
CRLF
CRLF
PRINTI "The crowd breaks into applause, and they help her to her feet. When she is standing, she smiles at you shyly and puts a lovely carnation in your lapel as a gesture of thanks."
CRLF
CRLF
PRINTI "Just then, a distinguished-looking gentleman appears on the scene, takes her by the arm, and says, ""Come, Eliza. We mustn't be late for the ball."""
CRLF
CRLF
PRINTI "He escorts her away, but as she leaves, she glances back at you once more with a grateful expression in her lovely eyes."
CRLF
GETP TH-CARNATION,P?VALUE
ICALL2 RT-UPDATE-SCORE,STACK
PUTP TH-CARNATION,P?VALUE,0
RTRUE
?CCL8: PRINTR "That would not do her much good."
?CCL14: EQUAL? CH-ELIZA-DOOLITTLE-AUX1,4 \FALSE
FCLEAR CH-ELIZA-DOOLITTLE,FL-ALIVE
PRINTI "Nothing happens for a moment, but then suddenly her body goes limp. It must have been the wrong pill."
CRLF
CRLF
PRINTI "By this time, the large crowd has gathered the attention of the police. Inspector Lestrade pushes his way through the crowd, sees the dead girl, and says, ""I'm sorry, Doctor Watson. I know you must have tried to save her. I'm afraid you'll have to come along with me to fill out the death certificate."""
CRLF
CRLF
PRINTI "Unfortunately, by the time you finish filling out the forms associated with the girl's death, the news of theft of the Crown Jewels leaks to the press, and all is lost."
CRLF
CRLF
CALL1 RT-QSR
RSTACK
.ENDI

250
eliza.zil Normal file
View File

@ -0,0 +1,250 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : ELIZA.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 26 Oct 1987 4:07:18 $"
; "revs : $Revision: 1.34 $"
; "vers : 1.00"
;*****************************************************************************
<OBJECT TH-BLUE-PILL-BOTTLE
(LOC TH-BLACK-BAG)
(DESC "blue bottle")
(FLAGS FL-CONTAINER FL-OPENABLE FL-READABLE FL-TAKEABLE)
(SYNONYM BOTTLE BOTTLES LABEL)
(ADJECTIVE BLUE)
(SIZE 3 MASS 2 CAPACITY 2)
(GENERIC RT-GN-BOTTLE)
(ACTION RT-AC-TH-BLUE-PILL-BOTTLE)>
<OBJECT TH-BROWN-PILL-BOTTLE
(LOC TH-BLACK-BAG)
(DESC "brown bottle")
(FLAGS FL-CONTAINER FL-OPENABLE FL-READABLE FL-TAKEABLE)
(SYNONYM BOTTLE BOTTLES LABEL)
(ADJECTIVE BROWN)
(SIZE 3 MASS 2 CAPACITY 2)
(GENERIC RT-GN-BOTTLE)
(ACTION RT-AC-TH-BROWN-PILL-BOTTLE)>
<OBJECT TH-ORANGE-PILL
(LOC TH-BLUE-PILL-BOTTLE)
(DESC "orange pill")
(FLAGS FL-TAKEABLE FL-READABLE FL-FOOD FL-VOWEL)
(SYNONYM PILL PILLS)
(ADJECTIVE ORANGE)
(SIZE 1 MASS 1)
(GENERIC RT-GN-PILL)
(ACTION RT-AC-TH-ORANGE-PILL)>
<OBJECT TH-YELLOW-PILL
(LOC TH-BROWN-PILL-BOTTLE)
(DESC "yellow pill")
(FLAGS FL-TAKEABLE FL-READABLE FL-FOOD)
(SYNONYM PILL PILLS)
(ADJECTIVE YELLOW)
(SIZE 1 MASS 1)
(GENERIC RT-GN-PILL)
(ACTION RT-AC-TH-YELLOW-PILL)>
<ROUTINE RT-AC-TH-BLUE-PILL-BOTTLE ("OPTIONAL" (CONTEXT<>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-BLUE-PILL-BOTTLE" .CONTEXT>>
<COND (<MC-THIS-PRSO?>
<COND (<MC-VERB? READ EXAMINE LOOK-ON>
<TELL
"The label on the bottle reads: \"Digitalis leaf. For tachycardia and
other accelerated arrhythmias.\"" CR>)
(<MC-VERB? SHOOT>
<REMOVE ,TH-BLUE-PILL-BOTTLE>
<TELL CTHEO ,K-SHATTER-MSG CR>)>)>>
<ROUTINE RT-AC-TH-BROWN-PILL-BOTTLE ("OPTIONAL" (CONTEXT<>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-BROWN-PILL-BOTTLE" .CONTEXT>>
<COND (<MC-THIS-PRSO?>
<COND (<MC-VERB? READ EXAMINE LOOK-ON>
<TELL
"The label on the bottle reads: \"Belladonna. For bradycardia and
other decelerated arrhythmias.\"" CR>)
(<MC-VERB? SHOOT>
<REMOVE ,TH-BROWN-PILL-BOTTLE>
<TELL CTHEO ,K-SHATTER-MSG CR>)>)>>
<ROUTINE RT-AC-TH-ORANGE-PILL ("OPTIONAL" (CONTEXT<>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-ORANGE-PILL" .CONTEXT>>
<COND (<MC-THIS-PRSO?>
<COND (<AND <MC-VERB? EAT>
<==? ,GL-WINNER ,CH-PLAYER>>
<TELL "You swallow the pill. For a few moments everything
seems to move much slower." CR>
<REMOVE ,GL-PRSO>
T)
(<MC-VERB? SHOOT>
<REMOVE ,TH-ORANGE-PILL>
<TELL CTHEO ,K-SHATTER-MSG CR>)>)>>
<ROUTINE RT-AC-TH-YELLOW-PILL ("OPTIONAL" (CONTEXT<>))
<DEBUGGING? <RT-DEBUG-TH-AC "TH-YELLOW-PILL" .CONTEXT>>
<COND (<MC-THIS-PRSO?>
<COND (<AND <MC-VERB? EAT>
<==? ,GL-WINNER ,CH-PLAYER>>
<TELL "You swallow the pill. For a few moments everything
seems to move much faster." CR>
<REMOVE ,GL-PRSO>
T)
(<MC-VERB? SHOOT>
<REMOVE ,TH-YELLOW-PILL>
<TELL CTHEO ,K-SHATTER-MSG CR>)>)>>
<ROUTINE RT-AC-CH-ELIZA-DOOLITTLE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-CH-AC "CH-ELIZA-DOOLITTLE" .CONTEXT>>
<COND (<EQUAL? <GETP ,CH-ELIZA-DOOLITTLE ,P?OBJ-NOUN>
,W?HEART ,W?HEARTBEAT>
<COND (<==? .CONTEXT ,K-M-SDESC>
<TELL "girl's heart">
<RTRUE>)
(<==? .CONTEXT ,K-M-DESCFCN>
<TELL "You don't have X-ray vision." CR>
<RTRUE>)
(<T? .CONTEXT> <RFALSE>)
(<MC-VERB? LISTEN>
<RT-LISTEN-ELIZA>
<RTRUE>)
(<RT-TOUCH-VERB?>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>)
(<==? .CONTEXT ,K-M-SDESC>
<TELL "girl">)
(<==? .CONTEXT ,K-M-DESCFCN>
<RT-THIS-IS-IT ,CH-ELIZA-DOOLITTLE>
<TELL
"The flower girl is lying on the ground in a dead faint. She is very
beautiful, but her clothes indicate that she must be poor." CR>
<RTRUE>)
(<MC-THIS-WINNER?>
<TELL
CTHE ,CH-ELIZA-DOOLITTLE " is unconscious. She cannot do anything." CR>
<RTRUE>)
(<T? .CONTEXT> <RFALSE>)
(<OR <AND <MC-VERB? LISTEN>
<MC-THIS-PRSO?>>
<AND <MC-VERB? USE-ON TOUCH-TO>
<MC-PRSO? ,TH-STETHOSCOPE>
<MC-THIS-PRSI?>>
<AND <MC-VERB? DIAGNOSE>
<MC-THIS-PRSO?>>
<AND <MC-VERB? LOOK-THRU>
<EQUAL? ,GL-P-PRSA-WORD ,W?EXAMINE>
<MC-THIS-PRSO?>
<MC-PRSI? ,TH-STETHOSCOPE>>>
<RT-LISTEN-ELIZA>)
(<MC-VERB? GIVE FEED>
<RT-CURE-ELIZA ,GL-PRSO>)
(<MC-VERB? TAKE RAISE MOVE>
<COND (<MC-PRSO? ,TH-ELIZAS-FLOWERS>
<TELL ,K-OUTRAGED-CROWD-MSG CR>
<RTRUE>)
(<MC-PRSO? CH-ELIZA-DOOLITTLE>
<TELL "The girl is too sick to be moved." CR>
<RTRUE>)
(T
<RFALSE>)>)
(<MC-VERB? RESCUE>
<TELL
"A noble thought, worthy of someone who has taken the Hippocratic oath." CR>
<RTRUE>)
(<MC-VERB? ALARM>
<TELL
"Your medical expertise tells you she's not just asleep. It's more serious
than that." CR>
<RTRUE>)
(<MC-VERB? SEARCH>
<TELL ,K-OUTRAGED-CROWD-MSG CR>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE RT-LISTEN-ELIZA ()
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<RT-CYOU-MSG>
<TELL
"cannot hear a thing with " THE ,TH-COTTON-BALLS " in " THE ,TH-EARS "." CR>)
(<MC-IS? ,TH-STETHOSCOPE ,FL-WORN>
<COND (<N==? <LOC ,CH-PLAYER> <LOC ,CH-ELIZA-DOOLITTLE>>
<TELL "You can't reach the girl from where you are."
CR>
<RTRUE>)>
<COND (<ZERO? ,CH-ELIZA-DOOLITTLE-AUX1>
<COND (<MC-PROB 50>
<SETG CH-ELIZA-DOOLITTLE-AUX1 1>)
(T
<SETG CH-ELIZA-DOOLITTLE-AUX1 2>)>)>
<COND (<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 1>
<IFSOUND <SOUNDS ,S-HEART3 ,S-START 6 10>>
<TELL "Her heartbeat is incredibly fast." CR>)
(<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 2>
<IFSOUND <SOUNDS ,S-HEART1 ,S-START 6 6>>
<TELL "Her heartbeat is incredibly slow." CR>)>)
(<OR <MC-PRSO? ,TH-STETHOSCOPE>
<MC-PRSI? ,TH-STETHOSCOPE>>
<RT-CYOU-MSG "are" "is">
<TELL "not wearing " THE ,TH-STETHOSCOPE "." CR>)
(T
<TELL
"The city noises are too loud for you to make an accurate diagnosis." CR>)>>
<ROUTINE RT-CURE-ELIZA (CURE)
<COND (<EQUAL? .CURE ,TH-ORANGE-PILL>
<REMOVE ,TH-ORANGE-PILL>
<COND (<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 1>
<SETG CH-ELIZA-DOOLITTLE-AUX1 3>)
(T
<SETG CH-ELIZA-DOOLITTLE-AUX1 4>)>
<TELL "You give her " THE .CURE "." CR CR>)
(<EQUAL? .CURE ,TH-YELLOW-PILL>
<REMOVE ,TH-YELLOW-PILL>
<COND (<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 2>
<SETG CH-ELIZA-DOOLITTLE-AUX1 3>)
(T
<SETG CH-ELIZA-DOOLITTLE-AUX1 4>)>
<TELL "You give her " THE .CURE "." CR CR>)
(T
<TELL "That would not do her much good." CR>
<RTRUE>)>
<COND (<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 3>
<MOVE ,TH-CARNATION ,TH-LAPEL>
<REMOVE ,CH-ELIZA-DOOLITTLE>
<MC-UNMAKE ,CH-ELIZA-DOOLITTLE ,FL-ASLEEP>
<TELL
"Nothing happens for a moment, but then her eyelids flutter briefly and
she opens her eyes." CR CR
"The crowd breaks into applause, and they help her to her feet. When she
is standing, she smiles at you shyly and puts a lovely carnation in your
lapel as a gesture of thanks." CR CR
"Just then, a distinguished-looking gentleman appears on the scene, takes
her by the arm, and says, \"Come, Eliza. We mustn't be late for the
ball.\"" CR CR
"He escorts her away, but as she leaves, she glances back at you once
more with a grateful expression in her lovely eyes." CR>
<RT-UPDATE-SCORE <GETP ,TH-CARNATION ,P?VALUE>>
<PUTP ,TH-CARNATION ,P?VALUE 0>
<RTRUE>)
(<EQUAL? ,CH-ELIZA-DOOLITTLE-AUX1 4>
<MC-UNMAKE ,CH-ELIZA-DOOLITTLE ,FL-ALIVE>
<TELL
"Nothing happens for a moment, but then suddenly her body goes limp. It
must have been the wrong pill." CR CR
"By this time, the large crowd has gathered the attention of the
police. Inspector Lestrade pushes his way through the crowd, sees the
dead girl, and says, \"I'm sorry, Doctor Watson. I know you must have
tried to save her. I'm afraid you'll have to come along with me to fill
out the death certificate.\"" CR CR
"Unfortunately, by the time you finish filling out the forms associated
with the girl's death, the news of theft of the Crown Jewels leaks to the
press, and all is lost." CR CR>
<RT-QSR>)>>

BIN
fan.was-mid Normal file

Binary file not shown.

BIN
fanfare.bin Normal file

Binary file not shown.

28
gamesound.chart Normal file
View File

@ -0,0 +1,28 @@
-date- -rel- -size- -pre- -obj- -glo- -voc-
12/23 1 182622 30979 314 240 1194
12/23 2 189426 30979 314 240 1194
12/24 3 189410 30977 314 240 1194
1/07 3 189410 30977 314 240 1194
1/08 4 189402 30977 314 240 1194
1/11 5 189402 30977 314 240 1194
1/12 6 189522 30977 314 240 1194
1/12 7 189554 30977 314 240 1194
1/12 8 189606 30977 314 240 1194
1/13 9 189614 30977 314 240 1194
1/15 10 190390 30983 314 240 1194
1/18 11 190390 30983 314 240 1194
1/18 12 190402 30983 314 240 1194
1/18 13 190410 30983 314 240 1194
1/18 14 190410 30983 314 240 1194
1/19 15 190414 30983 314 240 1194
1/19 16 190478 30983 314 240 1194
1/19 17 190502 30983 314 240 1194
1/19 18 190474 30977 314 240 1194
1/20 19 190378 30977 314 240 1194
1/20 20 190362 30977 314 240 1194
1/22 21 190362 30977 314 240 1194
1/23 22 190366 30977 314 240 1194
1/26 23 190174 30977 314 240 1194
1/26 24 190138 30973 314 240 1194
1/26 25 190130 30973 314 240 1194
1/27 26 190178 30973 314 240 1194

36
gamesound.errors Normal file
View File

@ -0,0 +1,36 @@
Assembling GAMESOUND.ZAP.26 on Wednesday, January 27, 1988 15:52:06
Release: 26
64 Inserting GAMESOUNDFREQ.ZAP.1 (620 bytes)
684 Inserting GAMESOUNDDAT.ZAP.26 (30289 bytes)
30973 Inserting SCHED.ZAP.140 (1253 bytes)
32226 Inserting BOOT.ZAP.159 (2610 bytes)
34836 Inserting PARSER.ZAP.184 (9985 bytes)
44821 Inserting GAMESOUNDPUR.ZAP.26 (3202 bytes)
48023 Inserting OTHER-MISC.ZAP.138 (4317 bytes)
52340 Inserting DEBUG.ZAP.147 (58 bytes)
52398 Inserting HINTS.ZAP.140 (1650 bytes)
54048 Inserting VERBS.ZAP.84 (18296 bytes)
72344 Inserting PEOPLE.ZAP.71 (15680 bytes)
88024 Inserting GENERIC.ZAP.120 (871 bytes)
88895 Inserting PLACES3.ZAP.137 (14899 bytes)
103794 Inserting PLACES2.ZAP.129 (8415 bytes)
112209 Inserting THINGS2.ZAP.145 (17725 bytes)
129934 Inserting THINGS1.ZAP.125 (1601 bytes)
131535 Inserting CAB.ZAP.142 (3875 bytes)
135410 Inserting TOWER.ZAP.125 (2311 bytes)
137721 Inserting SCOPE.ZAP.122 (1533 bytes)
139254 Inserting ELIZA.ZAP.124 (1801 bytes)
141055 Inserting CHARLES.ZAP.131 (5059 bytes)
146114 Inserting BANK.ZAP.128 (7526 bytes)
153640 Inserting PUZZLES.ZAP.133 (14468 bytes)
168108 Inserting LOCALS.ZAP.65 (3365 bytes)
171473 Inserting GAMESOUNDSTR.ZAP.26 (18705 bytes)
314 objects.
240 globals.
1194 word vocabulary.
190178 bytes (186K).
30973 bytes of preload.
16443 bytes of impure.
Outputting symbol tables

2
gamesound.lowcore Normal file
View File

@ -0,0 +1,2 @@
0

1319
gamesound.record Normal file

File diff suppressed because it is too large Load Diff

1
gamesound.serial Normal file
View File

@ -0,0 +1 @@
27

63
gamesound.zap Normal file
View File

@ -0,0 +1,63 @@
.NEW 5
; Low core locations
%ZVERSION:: .BYTE 5
.BYTE FLAGS
%ZORKID:: ZORKID
%ENDLOD:: ENDLOD
%START:: START
%VOCAB:: VOCAB
%OBJECT:: OBJECT
%GLOBAL:: GLOBAL
%PURBOT:: IMPURE
%FLAGS:: .WORD 144
%SERIAL:: .WORD 0
%SERI1:: .WORD 0
%SERI2:: .WORD 0
%FWORDS:: WORDS
%PLENTH:: .WORD 0
%PCHKSM:: .WORD 0
%INTWRD:: .WORD 0
%SCRWRD:: .WORD 0
%HWRD:: .WORD 0
%VWRD:: .WORD 0
%FWRD:: .WORD 0
%LMRG:: .WORD 0
%RMRG:: .WORD 0
%CLRWRD:: .WORD 0
%TCHAR:: TCHARS
%CRCNT:: .WORD 0
%CRFUNC:: .WORD 0
%CHRSET:: .WORD 0
%EXTAB:: 0
.WORD 0
.WORD 0
.WORD 0
.WORD 0
.INSERT "PS:<SHERLOCK>GAMESOUNDFREQ" ;Frequent word table
.INSERT "PS:<SHERLOCK>GAMESOUNDDAT" ; Data file
.INSERT "PS:<SHERLOCK>SCHED"
.INSERT "PS:<SHERLOCK>BOOT"
.INSERT "PS:<SHERLOCK>PARSER"
.INSERT "PS:<SHERLOCK>GAMESOUNDPUR"
.INSERT "PS:<SHERLOCK>OTHER-MISC"
.INSERT "PS:<SHERLOCK>DEBUG"
.INSERT "PS:<SHERLOCK>HINTS"
.INSERT "PS:<SHERLOCK>VERBS"
.INSERT "PS:<SHERLOCK>PEOPLE"
.INSERT "PS:<SHERLOCK>GENERIC"
.INSERT "PS:<SHERLOCK>PLACES3"
.INSERT "PS:<SHERLOCK>PLACES2"
.INSERT "PS:<SHERLOCK>THINGS2"
.INSERT "PS:<SHERLOCK>THINGS1"
.INSERT "PS:<SHERLOCK>CAB"
.INSERT "PS:<SHERLOCK>TOWER"
.INSERT "PS:<SHERLOCK>SCOPE"
.INSERT "PS:<SHERLOCK>ELIZA"
.INSERT "PS:<SHERLOCK>CHARLES"
.INSERT "PS:<SHERLOCK>BANK"
.INSERT "PS:<SHERLOCK>PUZZLES"
.INSERT "PS:<SHERLOCK>LOCALS"
.INSERT "PS:<SHERLOCK>GAMESOUNDSTR"
.END

185
gamesound.zil Normal file
View File

@ -0,0 +1,185 @@
<PRINC "
******************************************************************************
******************************* SHERLOCK 1.00 ********************************
******************************************************************************
">
<VERSION XZIP>
ON!-INITIAL
OFF!-INITIAL
ENABLE!-INITIAL
DISABLE!-INITIAL
<SET REDEFINE T>
<SETG SIBREAKS ".,\"!?">
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<COND
(<GASSIGNED? PREDGEN>
<SETG ZSTR-ON <SETG ZSTR-OFF ,TIME>>)>
<SETG GL-DEBUG? <>>
<FUNNY-GLOBALS?>
<FREQUENT-WORDS?>
<ORDER-OBJECTS? ROOMS-AND-LGS-FIRST> ; "So we can use byte tables for rooms"
<SETG COMPACT-VOCABULARY? T> ; "Saves a byte/word"
<SETG COMPACT-SYNTAXES? T> ; "Seriously cram syntaxes"
<SETG DO-PURE-TABLE-NTHS? T> ; "Minor optimization"
<ZIP-OPTIONS SOUND UNDO> ; "Set UNDO bit in FLAGS"
; "GLOBAL property should make byte tables instead of word tables, due to
ROOMS-AND-LGS-FIRST. DIRECTION properties redefined to take advantage
of single-byte room pointers, and to make more common exit types take
less space."
<PROPDEF GLOBAL <>
(GLOBAL "MANY" LG:OBJECT = <> "MANY" <ROOM .LG>)>
<PROPDEF DIRECTIONS <>
(DIR TO R:ROOM =
(UEXIT 1) #SEMI "UNCONDITIONAL EXIT"
(REXIT <ROOM .R>) #SEMI "TO ROOM")
(DIR PER F:FCN = ; "Changed because most common case"
(FEXIT 2) #SEMI "CONDITIONAL EXIT"
(FEXITFCN <WORD .F>) #SEMI "PER FUNCTION")
(DIR TO R:ROOM IF O:OBJECT IS OPEN =
(DEXIT 3) #SEMI "CONDITIONAL EXIT"
(REXIT <ROOM .R>) #SEMI "TO ROOM"
(DEXITOBJ <OBJECT .O>) #SEMI "IF DOOR IS OPEN")
(DIR SORRY S:STRING =
(NEXIT 4) #SEMI "IMPOSSIBLE EXIT"
(NEXITSTR <STRING .S>) #SEMI "FAILURE MESSAGE"
<BYTE 0>
<BYTE 0>)
(DIR TO R:ROOM IF F:GLOBAL =
(CEXIT 5) #SEMI "CONDITIONAL EXIT"
(REXIT <ROOM .R>) #SEMI "TO ROOM"
(CEXITFLAG <GLOBAL .F>) #SEMI "IF FLAG IS TRUE"
<BYTE 0> <BYTE 0> <BYTE 0>)
>
<DIRECTIONS NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
<PUTPROP PSEUDOS PROPSPEC HACK-PSEUDOS>
<DEFINE20 HACK-PSEUDOS (LIST "AUX" (N 0) (CT 0) NL)
<SET LIST <REST .LIST>>
<SET LIST
<MAPF ,LIST
<FUNCTION (X)
<COND (<0? .N>
<SET CT <+ .CT 1>>
<SET N 1>
<COND (<TYPE? .X ATOM>
<TABLE (PURE PATTERN (BYTE [REST WORD]))
1
<VOC <SPNAME .X> ADJ>>)
(<TYPE? .X LIST>
<EVAL <CHTYPE (TABLE (PURE PATTERN (BYTE [REST WORD]))
<LENGTH .X>
!<MAPF ,LIST
<FUNCTION (Y)
<VOC <SPNAME .Y> ADJ>>
.X>) FORM>>)
(T 0)>)
(<1? .N>
<SET N 2>
<COND (<TYPE? .X ATOM>
<TABLE (PURE PATTERN (BYTE [REST WORD]))
1 <VOC <SPNAME .X> NOUN>>)
(<TYPE? .X LIST>
<EVAL <CHTYPE (TABLE (PURE PATTERN (BYTE [REST WORD]))
<LENGTH .X>
!<MAPF ,LIST
<FUNCTION (Y)
<VOC <SPNAME .Y> NOUN>>
.X>) FORM>>)
(T 0)>)
(T
<SET N 0>
.X)>>
.LIST>>
(<> <EVAL <CHTYPE (TABLE (PURE PATTERN (BYTE [REST WORD]))
.CT !.LIST) FORM>>)>
<PUTPROP SIZE PROPSPEC HACK-SIZE>
<SETG20 SIZE-VALS 13>
<SETG20 MASS-VALS 11>
<SETG20 CAPACITY-VALS 102>
<DEFINE20 HACK-SIZE (LIST "AUX" (VAL 0) TL TN)
<COND (<SET TL <MEMQ SIZE .LIST>>
<SET TN <2 .TL>>
<COND (<L? .TN 6>
<SET VAL .TN>)
(<==? .TN 10> <SET VAL 6>)
(<==? .TN 12> <SET VAL 7>)
(<==? .TN 15> <SET VAL 8>)
(<==? .TN 20> <SET VAL 9>)
(<==? .TN 50> <SET VAL 10>)
(<==? .TN 99> <SET VAL 11>)
(<==? .TN 100> <SET VAL 12>)
(T <ERROR UNKNOWN-SIZE!-ERRORS .TN .LIST>)>)>
<COND (<SET TL <MEMQ MASS .LIST>>
<SET TN <2 .TL>>
<COND (<L? .TN 6>)
(<==? .TN 10> <SET TN 6>)
(<==? .TN 15> <SET TN 7>)
(<==? .TN 50> <SET TN 8>)
(<==? .TN 100> <SET TN 9>)
(<==? .TN 250> <SET TN 10>)
(T <ERROR UNKNOWN-MASS!-ERRORS .TN .NAME .LIST>)>
<SET VAL <+ .VAL <* .TN ,SIZE-VALS>>>)>
<COND (<SET TL <MEMQ CAPACITY .LIST>>
<SET TN <2 .TL>>
<COND (<L? .TN 101>)
(<==? .TN 999> <SET TN 101>)
(T <ERROR UNKNOWN CAPACITY!-ERRORS .TN .NAME .LIST>)>
<SET VAL <+ .VAL <* .TN <* ,SIZE-VALS ,MASS-VALS>>>>)>
(<> .VAL)>
<DEFMAC IFSOUND ("ARGS" X)
<COND (<LENGTH? .X 1> <1 .X>)
(T <CHTYPE (!.X) SPLICE>)>>
<INSERT-FILE "CONSTANTS" T>
<INSERT-FILE "MACROS" T> ;"AUXES MERGED INTO MACROS"
<INSERT-FILE "SYNTAX" T> ;"MISC (BETA/GAMMA STUFF) DELETED"
<INSERT-FILE "SCHED" T>
<INSERT-FILE "BOOT" T>
<INSERT-FILE "PARSER" T>
; "If PARSER doesn't end before 44800, you'll lose on the C64."
<PUT-PURE-HERE>
<INSERT-FILE "OTHER-MISC" T> ;"GO & WAIT & WINDOW MERGED INTO OTHER-MISC"
<INSERT-FILE "SOUNDS" T>
<INSERT-FILE "DEBUG" T>
<INSERT-FILE "HINTS" T>
<INSERT-FILE "VERBS" T>
<INSERT-FILE "PEOPLE" T>
<INSERT-FILE "GENERIC" T>
<INSERT-FILE "PLACES3" T>
<INSERT-FILE "PLACES2" T>
<INSERT-FILE "PLACES1" T>
<INSERT-FILE "THINGS2" T>
<INSERT-FILE "THINGS1" T>
<INSERT-FILE "CAB" T>
<INSERT-FILE "TOWER" T>
<INSERT-FILE "SCOPE" T>
<INSERT-FILE "ELIZA" T>
<INSERT-FILE "CHARLES" T>
<INSERT-FILE "BANK" T>
<INSERT-FILE "PUZZLES" T>
<INSERT-FILE "LOCALS" T> ;"MERGED LOCALS1 AND LOCALS2"

BIN
gamesound.zip Normal file

Binary file not shown.

16688
gamesounddat.zap Normal file

File diff suppressed because it is too large Load Diff

200
gamesoundfreq.zap Normal file
View File

@ -0,0 +1,200 @@
.FSTR FSTR?1,"the " ;3108 1555
.FSTR FSTR?2,"you " ;1300 651
.FSTR FSTR?3,", " ;1172 1173
.FSTR FSTR?4,"You " ;1104 369
.FSTR FSTR?5,"and " ;1074 538
.FSTR FSTR?6,"The " ;1014 339
.FSTR FSTR?7,"to " ;724 725
.FSTR FSTR?8,". " ;707 708
.FSTR FSTR?9,"of " ;619 620
.FSTR FSTR?10,"is " ;539 540
.FSTR FSTR?11,"Holmes " ;534 90
.FSTR FSTR?12,"that " ;531 178
.FSTR FSTR?13,"your " ;477 160
.FSTR FSTR?14,"with " ;429 144
.FSTR FSTR?15,"cannot " ;420 85
.FSTR FSTR?16,"already " ;414 70
.FSTR FSTR?17,"Watson" ;390 79
.FSTR FSTR?18,"in " ;387 388
.FSTR FSTR?19,"are " ;378 190
.FSTR FSTR?20,"have " ;372 125
.FSTR FSTR?21,"It's " ;350 71
.FSTR FSTR?22,"into " ;345 116
.FSTR FSTR?23,"can't " ;330 67
.FSTR FSTR?24,"from " ;321 108
.FSTR FSTR?25,"for " ;316 159
.FSTR FSTR?26,"not " ;270 136
.FSTR FSTR?27,"There " ;270 55
.FSTR FSTR?28,"his " ;238 120
.FSTR FSTR?29,"looks " ;224 57
.FSTR FSTR?30,"anything " ;224 33
.FSTR FSTR?31,"says" ;210 106
.FSTR FSTR?32,"about " ;204 52
.FSTR FSTR?33,"I " ;203 204
.FSTR FSTR?34,"He " ;202 102
.FSTR FSTR?35,"see " ;196 99
.FSTR FSTR?36,"out " ;192 97
.FSTR FSTR?37,"through " ;192 33
.FSTR FSTR?38,"something " ;192 25
.FSTR FSTR?39,"Holmes's " ;189 22
.FSTR FSTR?40,"which " ;188 48
.FSTR FSTR?41,"on " ;180 181
.FSTR FSTR?42,"it " ;176 177
.FSTR FSTR?43,"but " ;176 89
.FSTR FSTR?44,"would " ;176 45
.FSTR FSTR?45,"don't " ;175 36
.FSTR FSTR?46,"nothing " ;162 28
.FSTR FSTR?47,"I'm " ;156 40
.FSTR FSTR?48,"around " ;155 32
.FSTR FSTR?49,"doesn't " ;154 23
.FSTR FSTR?50,"at " ;153 154
.FSTR FSTR?51,"It " ;150 76
.FSTR FSTR?52,"get " ;144 73
.FSTR FSTR?53,"door " ;144 49
.FSTR FSTR?54,"back " ;144 49
.FSTR FSTR?55,"this " ;141 48
.FSTR FSTR?56,"How " ;141 48
.FSTR FSTR?57,"other " ;140 36
.FSTR FSTR?58,"Wiggins " ;140 21
.FSTR FSTR?59,"then " ;138 47
.FSTR FSTR?60,"will " ;135 46
.FSTR FSTR?61,"you" ;132 133
.FSTR FSTR?62,"has " ;132 67
.FSTR FSTR?63,"holding " ;132 23
.FSTR FSTR?64,"looking " ;126 22
.FSTR FSTR?65,"appears " ;126 22
.FSTR FSTR?66,"disappears " ;126 15
.FSTR FSTR?67,"just " ;123 42
.FSTR FSTR?68,"been " ;120 41
.FSTR FSTR?69,"Street" ;120 25
.FSTR FSTR?70,"Holmes" ;120 25
.FSTR FSTR?71,"you're " ;120 21
.FSTR FSTR?72,"You're " ;119 18
.FSTR FSTR?73,"everything " ;117 14
.FSTR FSTR?74,"do " ;116 117
.FSTR FSTR?75,"there " ;116 30
.FSTR FSTR?76,"That " ;116 30
.FSTR FSTR?77,"one " ;114 58
.FSTR FSTR?78,"can " ;114 58
.FSTR FSTR?79,"be " ;113 114
.FSTR FSTR?80,"Tower" ;112 29
.FSTR FSTR?81,"This " ;112 29
.FSTR FSTR?82,"Lestrade " ;112 15
.FSTR FSTR?83,"only " ;111 38
.FSTR FSTR?84,"he " ;110 111
.FSTR FSTR?85,"Tower " ;110 23
.FSTR FSTR?86,"must " ;108 37
.FSTR FSTR?87,"look " ;108 37
.FSTR FSTR?88,"like " ;108 37
.FSTR FSTR?89,"Have " ;108 28
.FSTR FSTR?90,"London " ;108 19
.FSTR FSTR?91,"After " ;105 22
.FSTR FSTR?92,"Crown " ;105 22
.FSTR FSTR?93,"Hudson " ;102 18
.FSTR FSTR?94,"Don't " ;102 18
.FSTR FSTR?95,"as " ;100 101
.FSTR FSTR?96,"too " ;100 51
;word frequency table of 96 most common words
WORDS:: .TABLE
FSTR?1
FSTR?2
FSTR?3
FSTR?4
FSTR?5
FSTR?6
FSTR?7
FSTR?8
FSTR?9
FSTR?10
FSTR?11
FSTR?12
FSTR?13
FSTR?14
FSTR?15
FSTR?16
FSTR?17
FSTR?18
FSTR?19
FSTR?20
FSTR?21
FSTR?22
FSTR?23
FSTR?24
FSTR?25
FSTR?26
FSTR?27
FSTR?28
FSTR?29
FSTR?30
FSTR?31
FSTR?32
FSTR?33
FSTR?34
FSTR?35
FSTR?36
FSTR?37
FSTR?38
FSTR?39
FSTR?40
FSTR?41
FSTR?42
FSTR?43
FSTR?44
FSTR?45
FSTR?46
FSTR?47
FSTR?48
FSTR?49
FSTR?50
FSTR?51
FSTR?52
FSTR?53
FSTR?54
FSTR?55
FSTR?56
FSTR?57
FSTR?58
FSTR?59
FSTR?60
FSTR?61
FSTR?62
FSTR?63
FSTR?64
FSTR?65
FSTR?66
FSTR?67
FSTR?68
FSTR?69
FSTR?70
FSTR?71
FSTR?72
FSTR?73
FSTR?74
FSTR?75
FSTR?76
FSTR?77
FSTR?78
FSTR?79
FSTR?80
FSTR?81
FSTR?82
FSTR?83
FSTR?84
FSTR?85
FSTR?86
FSTR?87
FSTR?88
FSTR?89
FSTR?90
FSTR?91
FSTR?92
FSTR?93
FSTR?94
FSTR?95
FSTR?96
.ENDT
.ENDI

311
gamesoundglobals.dat Normal file
View File

@ -0,0 +1,311 @@
(GL-PRSO ; 885
GL-PRSA ; 787
GL-PRSI ; 400
GL-PLACE-CUR ; 381
GL-WINNER ; 232
GL-NOW-PRSI? ; 167
GL-PUPPY ; 80
GL-P-PRSA-WORD ; 60
GL-P-IT-OBJECT ; 45
GL-P-ITBL ; 81
GL-PLACE-PRV ; 40
GL-P-LEN ; 39
GL-NOW-LIT? ; 36
GL-P-ADJ ; 32
GL-P-NCN ; 30
GL-TIME-PARM ; 60
GL-P-P-LEX ; 57
GL-P-NAM ; 28
GL-P-ORPH ; 23
GL-P-OTBL ; 39
CH-TRAINED-PIGEON-AUX1 ; 19
GL-CUR-POS ; 18
GL-P-SLOCBITS ; 18
GL-WINDOW ; 18
SOUND-QUEUED? ; 17
GL-P-NUMBER ; 16
GL-QUEST-NUM ; 15
GL-TIME ; 30
GL-CHAPT-NUM ; 14
GL-P-GET-FLAGS ; 14
CH-ELIZA-DOOLITTLE-AUX1 ; 13
GL-P-CONT ; 13
GL-P-MULT? ; 13
GL-P-QUOT ; 13
GL-P-WALK-DIR ; 13
GL-SCORE-CUR ; 13
GL-WHERE-TO-ORPH? ; 13
LOOPING? ; 13
GL-P-NAMW ; 25
CH-HOLMES-AUX1 ; 12
CH-TRAINED-PIGEON-AUX2 ; 12
GL-FORMER-PUPPY ; 12
GL-P-ACLAUSE ; 12
GL-P-HER-OBJECT ; 12
GL-P-HIM-OBJECT ; 12
GL-P-MERGED ; 12
GL-P-THEM-OBJECT ; 12
GL-SPLIT-ROW ; 12
GL-WHERE-TO-PROMPT? ; 12
GL-CLOCK-WAIT ; 11
GL-P-SYNTAX ; 11
MYCROFT-STATE ; 11
CAB-RAMP ; 10
CH-TRAINED-PIGEON-AUX3 ; 10
GL-ALLSCREEN ; 10
GL-DESC-LEVEL ; 10
GL-P-PRSO ; 20
GL-P-QCONTEXT-TH ; 10
GL-PUPPY-MSG? ; 10
TH-DIAL-AUX1 ; 10
TH-DIAL-AUX2 ; 10
K-RICOCHET-MSG ; 19
GL-P-VTBL ; 18
HEARD-SWING? ; 9
SOUND-ON? ; 9
TH-BELL-AUX1 ; 9
TH-ROPE-AUX2 ; 9
GL-P-PRSI ; 17
GL-LISTEN-OBJ ; 8
GL-P-DIRECTION ; 8
GL-P-GOOD ; 8
GL-P-GWIMBIT ; 8
GL-P-PHR ; 8
GL-SCORE-MSG ; 8
TH-BELL-AUX2 ; 8
TH-PACKET-OF-PAPER-AUX1 ; 8
TH-ROPE-AUX1 ; 8
K-TOO-DARK-MSG ; 15
CH-VENDOR-AUX1 ; 7
GL-LAST-OUT-TOD ; 7
GL-OOPS-TABLE ; 14
GL-P-QCONTEXT-RM ; 7
GL-P-TABLE ; 7
GL-PLACE-STS ; 7
PLAYER-IN-ABBEY ; 7
TH-SAFETY-DEPOSIT-BOX-AUX1 ; 7
GL-FUNNY-CLAUSE? ; 6
GL-P-OF ; 6
GL-P-XNAM ; 6
GL-RESERVE-PTR ; 6
GL-TIME-UPDT-INC ; 12
TH-BOX-KEY-AUX1 ; 6
GL-A-TIME ; 11
GL-HOLMES-DESC-TXT ; 11
GL-P-ADJW ; 11
GL-P-MERGE ; 11
GL-P-PIBUF ; 11
GL-P-S-LEX ; 11
GL-A-ROUT ; 10
GL-P-XADJ ; 5
GL-SCORE-MAX ; 5
GL-SCORE-STS ; 5
GL-STAT-S-POS ; 5
GL-STAT-T-POS ; 5
GL-WAIT-BELL ; 5
INHIBIT-ROOMS ; 5
K-HOW-TO-MSG ; 10
RUN-SMELL-ETHERIUM? ; 5
GL-BORING-TXT ; 9
GL-P-OCLAUSE ; 9
GL-P-TIME ; 9
BELIEVE-WAIT-TIME? ; 4
GL-CAN-UNDO ; 4
GL-CLOSED-OBJECT ; 4
GL-LASTFOC ; 4
GL-LINE-TABLE ; 4
GL-MOVES-CUR ; 4
GL-OOPS-INBUF ; 8
GL-P-END-ON-PREP ; 4
GL-P-MOBY-FOUND ; 4
GL-SHORT-STAT? ; 4
K-ASTERISK-MSG ; 8
K-GOOD-SHOW-MSG ; 8
K-MAYBE-MSG ; 8
K-PITY-MSG ; 8
LOOP-VOL ; 4
TH-BOX-LOCK-AUX1 ; 4
TH-CAB-WHISTLE-AUX1 ; 4
TH-HANSOM-CAB-AUX2 ; 4
WIGGINS-COLD? ; 4
GL-P-BUTS ; 7
GL-P-OFW ; 7
GL-TEMP-TIME ; 7
K-SHATTER-MSG ; 7
ALLOW-IN-TOWER ; 3
CH-BANK-GUARD-AUX1 ; 3
GL-AGAIN-DIR ; 3
GL-ALARM-EXEC ; 3
GL-DEBUG-FLAG ; 3
GL-IN-OUT ; 3
GL-LONG-OOPS ; 3
GL-MOVES-STS ; 3
GL-P-ANAM ; 3
GL-P-AND ; 3
GL-P-OVERFLOW ; 3
GL-P-OVTBL ; 6
GL-P-TIME-FLAG ; 3
GL-STAT-MAX-ROOM ; 3
KNIFE-COLD? ; 3
LAST-PSEUDO-LOC ; 3
PASSWORD-ID ; 3
RM-HOLMES-STUDY-AUX1 ; 3
TH-BOAT-AUX1 ; 3
TH-CAB-WHISTLE-AUX2 ; 3
TH-GUN-AUX1 ; 3
WINNER-IS-WIGGINS ; 3
K-ANNIE-OAKELEY-MSG ; 5
K-BE-MORE-SPECIFIC-MSG ; 5
K-HINTS ; 5
BOX-KEY-COLD? ; 2
CAB-ROOM-IDS ; 4
CH-WIGGINS-AUX1 ; 2
GL-ALARM-WAIT ; 2
GL-CLOCK-STOP ; 2
GL-COLUMN-TABLE ; 4
GL-DIROUT-TBL ; 4
GL-HINT-WARNING ; 2
GL-HINTS-OFF ; 2
GL-MIDSCREEN ; 2
GL-P-DIR-WORD ; 2
GL-SCORE-HEADER-LEN ; 2
GL-YES-LEXV ; 4
K-DONT-UNDERSTAND-MSG ; 4
K-INAPPROPRIATE-MSG ; 4
K-SMOULDERS-MSG ; 4
K-SPECIFY-DIR-MSG ; 4
K-SUICIDE-MSG ; 4
K-THEFT-MSG ; 4
TH-GROWLER-CAB-AUX1 ; 2
TH-HANSOM-CAB-AUX1 ; 2
TH-PHIAL-AUX1 ; 2
TH-SAPPHIRE-AUX1 ; 2
GL-DAY-NAME ; 3
GL-HOLES ; 3
GL-NO-POINT-TXT ; 3
GL-WIGGINS-DESC-TXT ; 3
K-BULLET-MSG ; 3
K-DO-IT-YOURSELF-MSG ; 3
K-FOUGHT-WELL-MSG ; 3
K-GOOD-LOOK-MSG ; 3
K-HEAVY-ARMOUR-MSG ; 3
K-ILL-HOLD-IT-MSG ; 3
K-MUST-BE-IN-BOAT-MSG ; 3
K-NO-RESTING-MSG ; 3
K-SEEMS-TO-HEAR-MSG ; 3
K-SIGN-HERE-MSG ; 3
K-SIMPLE-TOMB-MSG ; 3
K-SORRY-MATE-MSG ; 3
K-SPECIFY-MSG ; 3
K-WELL-WORN-MSG ; 3
GL-ALW-LIT? ; 1
GL-CLOCK-FMT ; 1
GL-HOLMES-HOUSE-LOOK-TXT ; 2
GL-HOLMES-INDOORS-LOOK-TXT ; 2
GL-HOLMES-OUTDOORS-LOOK-TXT ; 2
GL-LOC-TRAIL ; 2
GL-NOT-LIKELY-TXT ; 2
GL-P-AADJ ; 1
GL-P-DIR ; 1
GL-P-RIBUF ; 2
GL-P-T-LEX ; 2
GL-TIME-UPDT-DEF ; 2
GL-WIGGINS-LOOK-TXT ; 2
GL-YES-IBUF ; 2
K-AFTER-YOU-MSG ; 2
K-AMBULATORY-MSG ; 2
K-ANCHOR-ALREADY-OUT-MSG ; 2
K-ANOTHER-PHIAL-MSG ; 2
K-BETTER-SUCCESS-MSG ; 2
K-BRAND-MSG ; 2
K-BRAVO-MSG ; 2
K-BREATH-TAKING-MSG ; 2
K-BRIGHTENS-UP-MSG ; 2
K-BUTLER-ACCEPTS-MSG ; 2
K-CAB-HERE-MSG ; 2
K-CANT-LEAVE-MSG ; 2
K-CANT-WAIT-MSG ; 2
K-CLOSED-AND-LOCKED-MSG ; 2
K-CONFUSED-MSG ; 2
K-CUSTOMARILY-KEEP-MSG ; 2
K-DIZZY-MSG ; 2
K-DROP-IT-FIRST-MSG ; 2
K-EAU-DE-MSG ; 2
K-ENJOYING-RIDE-MSG ; 2
K-ENOUGH-ROOM-MSG ; 2
K-EVERYONE-OUT-MSG ; 2
K-EYES-HINGED-MSG ; 2
K-FIDGETING-MSG ; 2
K-GET-OUT-FIRST-MSG ; 2
)(
K-GLINT-MSG ; 2
K-GNAWS-MSG ; 2
K-GOOD-HEALTH-MSG ; 2
K-GUARD-IGNORES-MSG ; 2
K-HOLMES-DISTRACTION-MSG ; 2
K-HOLMES-LICKS-MSG ; 2
K-HOT-MSG ; 2
K-HUDSON-WORRIED-MSG ; 2
K-LESTRADE-ARRESTS-MSG ; 2
K-MORE-VALUABLE-MSG ; 2
K-MUST-WEIGH-MSG ; 2
K-NELSON-STATUE-MSG ; 2
K-NEVER-THEORIZE-MSG ; 2
K-NOT-SEE-HERE-MSG ; 2
K-NOTHING-INSIDE-MSG ; 2
K-ON-DUTY-MSG ; 2
K-OUTRAGED-CROWD-MSG ; 2
K-PLEASE-KEEP-IT-MSG ; 2
K-PLUG-HIM-MYSELF-MSG ; 2
K-REFERRING-MSG ; 2
K-SAPPHIRE-MSG ; 2
K-SEASICK-MSG ; 2
K-SECURELY-BOUND-MSG ; 2
K-SHAFT-OF-LIGHT-MSG ; 2
K-SITTING-QUIETLY-MSG ; 2
K-TAKE-CAB-MSG ; 2
K-TIPSY-MSG ; 2
K-TOO-HAUGHTY-MSG ; 2
K-TRANSEPT-MSG ; 2
K-TWINKLE-MSG ; 2
K-URCHIN-MSG ; 2
K-WAKE-UP-MSG ; 2
K-WILD-RIDE-MSG ; 2
K-WONT-HELP-MSG ; 2
K-WORK-OUT-YOURSELF-MSG ; 2
K-WOUNDED-PRIDE-MSG ; 2
K-YUCK-MSG ; 2
GL-ALARM-STOP ; 1
GL-BLANKS ; 1
GL-CAB-DIST-TBL ; 1
GL-FOG-TXT ; 1
GL-HOLMES-DESPAIR-TXT ; 1
GL-HOLMES-HOUSE-ENTER-TXT ; 1
GL-HOLMES-IMPOSSIBLE-TXT ; 1
GL-HOLMES-INDOORS-ENTER-TXT ; 1
GL-HOLMES-OUTDOORS-ENTER-TXT ; 1
GL-IMPOSSIBLE-TXT ; 1
GL-LIBRARIAN-TXT1 ; 1
GL-LIBRARIAN-TXT2 ; 1
GL-LOOKS-TXT ; 1
GL-PUZZLED-TXT ; 1
GL-WIGGINS-ENTER-TXT ; 1
GL-WIGGINS-IMPOSSIBLE-TXT ; 1
K-BE-SPECIFIC-MSG ; 1
K-HINT-COUNTS ; 1
K-NO-SWIM-MSG ; 1
K-PROFANITY-MSG ; 1
MASS-TABLE ; 1
Q-MAIN-MENU ; 1
RETURN-SEE-HINT ; 1
SIZE-TABLE ; 1
FIND-NO-LOCS ; 0
GL-GAME-VERBS ; 0
GL-QUOTES ; 0
GL-SEE-VERBS ; 0
GL-TALK-VERBS ; 0
GL-TOUCH-VERBS ; 0
K-CAPS ; 0
K-TO-COMPLETE-MSG ; 0
TH-EVENT-NAMES ; 0
)

2622
gamesoundpur.zap Normal file

File diff suppressed because it is too large Load Diff

878
gamesoundstr.zap Normal file
View File

@ -0,0 +1,878 @@
; STRINGS ARE DEFINED HERE
STRBEG::
.GSTR STR?1,"Holmes"
.GSTR STR?2,"Your friend"
.GSTR STR?3,"The detective"
.GSTR STR?4,"Your companion"
.GSTR STR?5,"grimly"
.GSTR STR?6,"sharply"
.GSTR STR?7,"in despair"
.GSTR STR?8,"severely"
.GSTR STR?9,"for a moment"
.GSTR STR?10,"I thought you had more sense than that, Watson"
.GSTR STR?11,"That can't be done, Watson"
.GSTR STR?12,"That's impossible, Doctor"
.GSTR STR?13,"You can't do that, Watson"
.GSTR STR?14,"You should know better, Doctor"
.GSTR STR?15,"Impossible"
.GSTR STR?16,"Don't be ridiculous, Watson"
.GSTR STR?17,"Wiggins"
.GSTR STR?18,"The boy"
.GSTR STR?19,"The urchin"
.GSTR STR?20,"Your assistant"
.GSTR STR?21,"You must be out of your bleedin' mind"
.GSTR STR?22,"That's ruddy impossible"
.GSTR STR?23,"Not bloody likely"
.GSTR STR?24,"For a toff, you're not too bright"
.GSTR STR?25,"Nice try, Guv"
.GSTR STR?26,"I thought doctors was smart"
.GSTR STR?27,"That's impossible"
.GSTR STR?28,"You can't do that"
.GSTR STR?29,"That can't be done"
.GSTR STR?30,"That won't work"
.GSTR STR?31,"You try, but fail"
.GSTR STR?32," is not likely"
.GSTR STR?33," seems doubtful"
.GSTR STR?34," seems unlikely"
.GSTR STR?35,"looks"
.GSTR STR?36,"appears"
.GSTR STR?37,"seem to be"
.GSTR STR?38,"puzzled"
.GSTR STR?39,"bewildered"
.GSTR STR?40,"confused"
.GSTR STR?41,"perplexed"
.GSTR STR?42,"unusual"
.GSTR STR?43,"interesting"
.GSTR STR?44,"extraordinary"
.GSTR STR?45,"special"
.GSTR STR?46," not do anything useful"
.GSTR STR?47," accomplish nothing"
.GSTR STR?48," have no desirable effect"
.GSTR STR?49," not be very productive"
.GSTR STR?50," serve no purpose"
.GSTR STR?51," be pointless"
.GSTR STR?52,"The fog swirls around you"
.GSTR STR?53,"You can barely see through the thick fog"
.GSTR STR?54,"The fog turns everything into an indistinct blur"
.GSTR STR?55,"Wisps of fog creep along the ground"
.GSTR STR?56,"The fog clings to everything like a shroud"
.GSTR STR?57,"Fog blankets everything around you"
.GSTR STR?58,"It is too dark to see."
.GSTR STR?59,"[Please try to express that another way.]"
.GSTR STR?60,"[You must be more specific.]"
.GSTR STR?61,"[Be specific: what do you want to "
K-BE-SPECIFIC-MSG=STR?61
.GSTR STR?62," to complete this story.]"
K-TO-COMPLETE-MSG=STR?62
.GSTR STR?63,"There is a cab here already."
.GSTR STR?64,"[To take a cab, get in and tell the cabbie to drive to your destination.]"
K-TAKE-CAB-MSG=STR?64
.GSTR STR?65,"'s brow is furrowed in intense concentration"
.GSTR STR?66," is pacing back and forth nervously"
.GSTR STR?67,"'s eyes are half-closed, but they miss nothing"
.GSTR STR?68," is looking around with interest"
.GSTR STR?69," appears lost in deep thought"
.GSTR STR?70,"'s lean, severe face gives away none of his thoughts"
.GSTR STR?71," is here, awaiting your next move"
.GSTR STR?72," trails along after you"
.GSTR STR?73," walks into the room alongside you"
.GSTR STR?74," enters and begins pacing back and forth nervously"
.GSTR STR?75," follows you"
.GSTR STR?76," joins you and starts looking around with interest"
.GSTR STR?77," drifts in after you, apparently lost in thought"
.GSTR STR?78," appears lost in thought"
.GSTR STR?79," is staring at the sky, as if he might find a clue there"
.GSTR STR?80," is here"
.GSTR STR?81," walks alongside you"
.GSTR STR?82," follows you and begins pacing back and forth nervously"
.GSTR STR?83," drifts along after you, apparently lost in thought"
.GSTR STR?84," is shifting his weight from one foot to the other"
.GSTR STR?85," appears eager to help"
.GSTR STR?86," is standing around, waiting for you to do something"
.GSTR STR?87," appears fascinated by everything"
.GSTR STR?88," drifts along after you"
.GSTR STR?89,"The butler accepts the item and asks you to wait while he takes it to Mr Mycroft Holmes."
.GSTR STR?90," must weigh twice what you do. You won't be able to lift him."
K-MUST-WEIGH-MSG=STR?90
.GSTR STR?91,"the box with the key. You rummage around inside for a few moments but discover nothing that would help you, so"
K-NOTHING-INSIDE-MSG=STR?91
.GSTR STR?92," is fidgeting nervously on the seat next to you"
.GSTR STR?93,"You must specify a particular "
.GSTR STR?94,"""Sorry, mate. I've me own plans, you know."""
.GSTR STR?95," looks like he is enjoying the boat ride"
.GSTR STR?96,"""Don't worry. I'll hold it for you."""
.GSTR STR?97,"It is already closed and locked."
.GSTR STR?98,"""If you expect me to let you in there, you'll have to offer me something a lot more valuable than that."""
K-MORE-VALUABLE-MSG=STR?98
.GSTR STR?99,"The bullet ricochets wildly."
.GSTR STR?100,"Mmmmmm. Eau de malmsey."
.GSTR STR?101,"""After you, guv."""
.GSTR STR?102,"Wiggins sidles up next to you and whispers, ""I'd like to, guv. But Mr 'Olmes done give me clear instructions not to leave this spot. Is there anyfing else I can do for you?"""
.GSTR STR?103," says with wounded pride, ""Sorry, guv. Me and Mr 'Olmes has a deal. One shilling's me price. Nothing more. Nothing less."""
K-WOUNDED-PRIDE-MSG=STR?103
.GSTR STR?104,"The guard ignores you."
K-GUARD-IGNORES-MSG=STR?104
.GSTR STR?105,"Holmes absentmindedly licks his fingers and then wipes his hands on his smoking jacket. His "
K-HOLMES-LICKS-MSG=STR?105
.GSTR STR?106,"Holmes takes another phial out of his pocket and stares at it in the same way as before."
.GSTR STR?107,"Yeeeeeeeeeeeeeeeeeeeouch!!! Hot, hot, hot, hot..."
K-HOT-MSG=STR?107
.GSTR STR?108,"The anchor is already out of the water."
.GSTR STR?109,"You would have to be in the boat to "
.GSTR STR?110,"You do not see that here."
K-NOT-SEE-HERE-MSG=STR?110
.GSTR STR?111,"This is no time for resting."
.GSTR STR?112,"You begin to feel a little dizzy."
.GSTR STR?113,"Lestrade arrests you and puts you in handcuffs. You will spend the rest of your life in Dartmoor, trying to understand where you went wrong."
K-LESTRADE-ARRESTS-MSG=STR?113
.GSTR STR?114," ""I don't blame you a bit, Dr Watson. Said ""Elementary"" one too many times did 'e? Many's the time I've wanted to plug him myself. Still, I've got to take you away. Come along now."""
K-PLUG-HIM-MYSELF-MSG=STR?114
.GSTR STR?115,"Who do you think you are, Annie Oakley?"
.GSTR STR?116," shatters and disappears."
.GSTR STR?117,"""Have you looked in your hat, old fellow? That is where you customarily keep it."""
.GSTR STR?118,"""Please keep it, dear fellow. You may need it."""
K-PLEASE-KEEP-IT-MSG=STR?118
.GSTR STR?119," seems to hear you, but he does not respond."
.GSTR STR?120,"Don't you think you should drop it first?"
.GSTR STR?121," gnaws on your leg briefly in response."
K-GNAWS-MSG=STR?121
.GSTR STR?122,"""I'm afraid you'll have to work that out yourself, old boy."""
K-WORK-OUT-YOURSELF-MSG=STR?122
.GSTR STR?123,"""Never theorize in advance of the facts, Watson."""
K-NEVER-THEORIZE-MSG=STR?123
.GSTR STR?124,"The guard says, ""Sorry, sir. On duty, you know."""
K-ON-DUTY-MSG=STR?124
.GSTR STR?125,"The pigeon looks at you with a confused expression."
.GSTR STR?126,"The nannies are too haughty to acknowledge your presence."
K-TOO-HAUGHTY-MSG=STR?126
.GSTR STR?127,"You'd have better success if you launched the boat first."
.GSTR STR?128,"[To what are you referring?]"
K-REFERRING-MSG=STR?128
.GSTR STR?129,"You will have to do that yourself."
.GSTR STR?130,"That would hardly be an appropriate thing to do."
.GSTR STR?131,"How do you intend to do that?"
.GSTR STR?132,"There is no place to swim here."
K-NO-SWIM-MSG=STR?132
.GSTR STR?133,"A proper Victorian would never use such a vulgar word."
K-PROFANITY-MSG=STR?133
.GSTR STR?134,"Suicide is frowned upon in medical circles."
.GSTR STR?135,"Thievery, outside of established limits, is frowned upon by the medical profession."
.GSTR STR?136,"[You must specify a direction.]"
.GSTR STR?137," is not likely to help matters."
K-WONT-HELP-MSG=STR?137
.GSTR STR?138,"""Good show!"""
.GSTR STR?139,"""Pity."""
.GSTR STR?140,"""Be more decisive!"""
.GSTR STR?141,"It's a simple tomb, with a brief inscription written on it."
.GSTR STR?142,"The ceiling is breathtakingly beautiful."
.GSTR STR?143,"Now that you know what to look for, you see a glint coming from Nelson's blind eye."
K-GLINT-MSG=STR?143
.GSTR STR?144," a statue of Nelson on the top and a bronze relief on the pedestal at the bottom."
K-NELSON-STATUE-MSG=STR?144
.GSTR STR?145,"You cannot take another step in that heavy suit of armour."
.GSTR STR?146,"The door to the parlour is to the north, and a flight of well-worn stairs leads up to the first floor."
.GSTR STR?147,"One of the urchins looks strangely familiar to you."
K-URCHIN-MSG=STR?147
.GSTR STR?148,"The vases of the fourth dynasty of the ancient Sumerians differed significantly from those of the third dynasty. The most pronounced change involved a slight flaring of the handles from one dynasty to the next. Most experts agree that this symbolized a drastic change in the Sumerians' perception of the goddess Ashtoreth. Others however, believe it made the vases easier to carry"
.GSTR STR?149,"Monocotyledonous plants produce an embryo with a single cotyledon, which functions primarily to make available the food which is stored in the endosperm, as opposed to the more common dicotyledons, which include most of the woody, deciduous plants of the temperate climates"
.GSTR STR?150,"The Beaker People of prehistoric Britain are remembered primarily for the reddish-brown pottery from which they take their name, and for interring their dead in single graves under round barrows. This culture disappeared in the Middle Bronze Age (circa 1800 B.C.) and has been annoying British schoolchildren ever since"
.GSTR STR?151,"Perhaps you would be interested in something on the Punic Wars? I believe I have a nineteen-volume history of them here somewhere"
.GSTR STR?152,"Stanislaw Leszczynski was crowned king of Poland in 1704, but was deposed only five years later because no one could pronounce his name"
.GSTR STR?153,"The yin and yang philosophy of nature was developed around 2800 B.C. by the Chinese emperor Fu Hsi. According to Fu, health and tranquility require a harmonious balance among all the body's elements. This theory has always been ridiculed by the British, whose ancestors at this time were still painting themselves blue and naming their children Og"
.GSTR STR?154,"Louis I, son of Charlemagne, ascended France's throne in 814 A.D. He was the first to implement that country's secret policy of naming all their kings Louis in order to confuse enemy agents, historians, and their own peasants."
.GSTR STR?155,"The first workers' strike on record took place in Egypt in 1170 B.C., when labourers building a new pyramid in Thebes learned that their payroll had been delayed. They organized a protest, stopped working, and picketed the construction site carrying papyrus signs that read, 'Cash on the line, or you don't get your shrine.' Tradition also has it that the slogan they chanted was 'Stuff the crypt...We've been gypped...Ra Ra Ra.'"
.GSTR STR?156,"The confusion between the usage of the present subjunctive and the past subjunctive is easily resolved as long as one remembers that the terms refer not to different times, but to differing sorts of uncertainty. Reference to time itself is only implied by the use of the past perfect subjunctive. While no deaths have as yet resulted from incorrect usage, it would be prudent not to take chances."
.GSTR STR?157,"While uncovering one's head is a symbol of respect in many cultures, in others the opposite is true. Some Indian religions, for example, require that a man's head remain covered at all times, giving rise to the use of the turban, or 'imamah.' The tabu against removing one's turban eventually became so strong that thieves who thought nothing of stealing a victim's clothes would nevertheless leave his turban undisturbed."
.GSTR STR?158,"Most historians ascribe Catherine de Medicis's poor reputation among the French to her ordering the wholesale massacre of French citizens in 1572. Recent research, however, has revealed that years before, in 1533, she brought into the country such vegetables as broccoli, artichokes, cabbage and haricot beans - and it is now widely accepted that this alone was sufficient to make the French hate her."
.GSTR STR?159,"Are you sure I can't get you something on the Punic Wars?"
.GSTR STR?160," looks a little green from the motion of the boat"
K-SEASICK-MSG=STR?160
.GSTR STR?161," is sitting quietly on the seat next to you"
K-SITTING-QUIETLY-MSG=STR?161
.GSTR STR?162," is securely bound to a chair with a thick rope"
K-SECURELY-BOUND-MSG=STR?162
.GSTR STR?163,"There is a sign on the wall."
.GSTR STR?164,"Yuck! Have you looked at that stuff?"
K-YUCK-MSG=STR?164
.GSTR STR?165,", and it brightens up an otherwise gloomy interior"
.GSTR STR?166,"A shaft of sunlight comes through the stained-glass window, lighting up one of the tombs, and relieving the general gloom of the Abbey's dark interior."
K-SHAFT-OF-LIGHT-MSG=STR?166
.GSTR STR?167," apologetically stands in front of the closed door. ""I'm terribly worried about Mr Holmes, Doctor. Won't you please attend to him right away?"""
K-HUDSON-WORRIED-MSG=STR?167
.GSTR STR?168," **********"
.GSTR STR?169,"Twinkle, twinkle, son of Mars,"
K-TWINKLE-MSG=STR?169
.GSTR STR?170,"Transept of the Abbey, which is dominated by a beautiful rose window set high into the wall."
K-TRANSEPT-MSG=STR?170
.GSTR STR?171,"Your eyes must be hinged a very interesting way if you think you can do that."
.GSTR STR?172,"This is a narrow corridor lined with tombs."
.GSTR STR?173,"Everyone here has been knocked out by the etherium, although it's hard to tell."
.GSTR STR?174,", to which is glued a beautiful, deep-blue sapphire."
K-SAPPHIRE-MSG=STR?174
.GSTR STR?175,"Holmes looks at you approvingly and says, ""Bravo, Watson. Well done, old chap."""
.GSTR STR?176," to get a really good look at it."
.GSTR STR?177,"""You fought well, Doctor. But you have lost."""
.GSTR STR?178,"Sometime later you awaken and stumble back to your feet."
K-WAKE-UP-MSG=STR?178
.GSTR STR?179,"You would have to get out of the boat first."
.GSTR STR?180,"It's not your brand, but it's pleasant nonetheless."
.GSTR STR?181,"smoulders for a few seconds, then goes out."
.GSTR STR?182,"The crowd is outraged that you would try to rob the ailing girl, and they beat you about the head and shoulders with their shopping bags."
K-OUTRAGED-CROWD-MSG=STR?182
.GSTR STR?183," He looks suprised that you didn't try to haggle with him, says, ""Thank you, guv'nor. Enjoy it in good 'ealth,"""
K-GOOD-HEALTH-MSG=STR?183
.GSTR STR?184,"You start to drink the wine and get a little tipsy. But even in your altered state of consciousness you soon realize you'll never be able to drink all of it."
K-TIPSY-MSG=STR?184
.GSTR STR?185,"The bullet knocks out the bung, which"
.GSTR STR?186,"can't wait for that."
.GSTR STR?187,"There isn't enough room in the cab to do that."
.GSTR STR?188,"Holmes ignores the distraction and continues staring at the phial."
K-HOLMES-DISTRACTION-MSG=STR?188
.GSTR STR?189,"After a wild ride through the streets of London, the cab finally careens to a halt and the cabbie says brightly, ""Here we are!"""
K-WILD-RIDE-MSG=STR?189
.GSTR STR?190,"Jubilee"
.GSTR STR?191,"Henry IV"
.GSTR STR?192,"Duke of Wellington"
.GSTR STR?193,"Toby"
.GSTR STR?194,"Mycroft Holmes"
.GSTR STR?195,"Agra treasure"
.GSTR STR?196,"Lestrade"
.GSTR STR?197,"Sunday"
.GSTR STR?198,"Monday"
.GSTR STR?199,"Tuesday"
.GSTR STR?200,"Wednesday"
.GSTR STR?201,"Thursday"
.GSTR STR?202,"Friday"
.GSTR STR?203,"Saturday"
.GSTR STR?204,"Sun"
.GSTR STR?205,"Mon"
.GSTR STR?206,"Tue"
.GSTR STR?207,"Wed"
.GSTR STR?208,"Thu"
.GSTR STR?209,"Fri"
.GSTR STR?210,"Sat"
.GSTR STR?211,"Sunday "
.GSTR STR?212,"Monday "
.GSTR STR?213,"Tuesday "
.GSTR STR?214,"Thursday "
.GSTR STR?215,"Friday "
.GSTR STR?216,"Saturday "
.GSTR STR?217,"0"
.GSTR STR?218," "
.GSTR STR?219," AM"
.GSTR STR?220," a.m."
.GSTR STR?221," PM"
.GSTR STR?222," p.m."
.GSTR STR?223,"notice"
.GSTR STR?224,"notices"
.GSTR STR?225,"any verbs"
.GSTR STR?226,"enough nouns"
.GSTR STR?227,"open"
.GSTR STR?228,"are"
.GSTR STR?229,"is"
.GSTR STR?230,"would respond"
.GSTR STR?231,"Chief Superintendent of Scotland Yard"
.GSTR STR?232,"Inspector"
.GSTR STR?233,"Detective"
.GSTR STR?234,"Lieutenant"
.GSTR STR?235,"Sergeant"
.GSTR STR?236,"Private"
.GSTR STR?237,"Patrolman"
.GSTR STR?238,"Consulting Detective"
.GSTR STR?239,"Visiting Hours: 7:00 a.m - 6:00 p.m."
.GSTR STR?240,"""Quiet, please."""
.GSTR STR?241," CHAMBER OF HORRORS "
.GSTR STR?242,"ABANDON HOPE ALL YE WHO ENTER HERE"
.GSTR STR?243,"MUSEUM HOURS: 8 a.m. - 6 p.m."
.GSTR STR?244,"""1666"""
.GSTR STR?245,"This a replica of the rowboat in "
.GSTR STR?246,"which Captain Bligh was set adrift "
.GSTR STR?247,"after the infamous Mutiny on the "
.GSTR STR?248,"Bounty. Bligh and his men rowed 3600"
.GSTR STR?249,"miles in 45 days, and lived to see "
.GSTR STR?250,"the mutineers brought to justice. "
.GSTR STR?251,"For your convenience, the Bank shall"
.GSTR STR?252,"be closed for the entire Jubilee "
.GSTR STR?253,"weekend. Thank you for your "
.GSTR STR?254,"patronage. "
.GSTR STR?255," THE TOWER IS CLOSED. "
.GSTR STR?256," WE REGRET ANY INCONVENIENCE. "
.GSTR STR?257," HAVE A NICE DAY. "
.GSTR STR?258,"During the battle of Copenhagen, "
.GSTR STR?259,"Lord Nelson's commander-in-chief ran"
.GSTR STR?260,"the signal to ""discontinue action"" "
.GSTR STR?261,"up his mast. Knowing the battle "
.GSTR STR?262,"could yet be won, Nelson clapped his"
.GSTR STR?263,"telescope to his blind eye and said,"
.GSTR STR?264,"""I do not see the signal."" His "
.GSTR STR?265,"subsequent attack led to victory and"
.GSTR STR?266,"a secure place for Nelson in British"
.GSTR STR?267,"history. "
.GSTR STR?268," No Loitering. "
.GSTR STR?269,"This means YOU!"
.GSTR STR?270,"BAR OF GOLD"
.GSTR STR?271,"""Many monarchs are buried in "
.GSTR STR?272,"Westminster. But only one died here."
.GSTR STR?273,"It happened on March 20th, 1413, and"
.GSTR STR?274,"the event was later made famous in a"
.GSTR STR?275,"scene written by Shakespeare:"" "
.GSTR STR?276,"""It hath been prophesied to me many "
.GSTR STR?277," years "
.GSTR STR?278,"I should not die but in Jerusalem, "
.GSTR STR?279,"Which vainly I supposed the Holy "
.GSTR STR?280," Land. "
.GSTR STR?281,"But bear me to that chamber, there "
.GSTR STR?282," I'll lie, "
.GSTR STR?283,"In that Jerusalem shall Harry die."" "
.GSTR STR?284,"""Henry IV, Part II, Act V"" "
.GSTR STR?285," HELD OVER "
.GSTR STR?286,"SIXTH BIG WEEK!"
.GSTR STR?287,"THE MOUSETRAP!!"
.GSTR STR?288,"This sign unintentionally left blank."
.GSTR STR?289," RETURN = see hint"
RETURN-SEE-HINT=STR?289
.GSTR STR?290,"Q = main menu"
Q-MAIN-MENU=STR?290
.GSTR STR?291,"How do I get into the house?"
.GSTR STR?292,"Mrs Hudson is expecting you, so you shouldn't have to do anything too unusual."
.GSTR STR?293,"Have you tried kicking down the door?"
.GSTR STR?294,"KNOCK ON THE DOOR."
.GSTR STR?295,"How do I get into the parlour?"
.GSTR STR?296,"Mrs Hudson wants you to attend to something first."
.GSTR STR?297,"Get Holmes's mind off the drug."
.GSTR STR?298,"How do I get into the kitchen?"
.GSTR STR?299,"Don't look at the next clue until you have opened the trap door in the hall."
.GSTR STR?300,"You're cheating, aren't you?"
.GSTR STR?301,"There is no trap door."
.GSTR STR?302,"There is no kitchen."
.GSTR STR?303,"Don't let the existence of these questions influence your playing of the game."
.GSTR STR?304,"How do I get into the bedroom?"
.GSTR STR?305,"Only Holmes can open that door."
.GSTR STR?306,"When the visitor leaves, Holmes will open it."
.GSTR STR?307,"How do I get onto the roof?"
.GSTR STR?308,"The same way you got into the kitchen."
.GSTR STR?309,"Will Mrs Hudson do anything for me?"
.GSTR STR?310,"Have you tried kissing her?"
.GSTR STR?311,"Have you tried bribing her?"
.GSTR STR?312,"The sad fact is that she won't do anything for you."
.GSTR STR?313,"Can I get Holmes out of his stupor?"
.GSTR STR?314,"Holmes is bored with the commonplace events of everyday life."
.GSTR STR?315,"He needs some mental excitement."
.GSTR STR?316,"Newspapers generally contain interesting items."
.GSTR STR?317,"For a doctor, you're not too bright. Read him the newspaper. (Or tell him about the visitor)."
.GSTR STR?318,"Why does the clue paper exist?"
.GSTR STR?319,"It looks like the thief is challenging Sherlock Holmes to a duel of wits."
.GSTR STR?320,"Unlike yourself, Sherlock is not unarmed for such a duel."
.GSTR STR?321,"The thief is laying down a trail of clues for Holmes to follow."
.GSTR STR?322,"What's the answer to the 1st riddle?"
.GSTR STR?323,"The verse refers to a particular place."
.GSTR STR?324,"The place is the spot where most English royalty is buried."
.GSTR STR?325,"Westminster Abbey."
.GSTR STR?326,"What's the answer to the 2nd riddle?"
.GSTR STR?327,"The verse refers to the last of the Tudor monarchs."
.GSTR STR?328,"She was called the ""Virgin Queen."""
.GSTR STR?329,"Elizabeth I."
.GSTR STR?330,"What's the answer to the 3rd riddle?"
.GSTR STR?331,"The discoverer of the law of gravity."
.GSTR STR?332,"Sir Isaac Newton."
.GSTR STR?333,"What's the answer to the 4th riddle?"
.GSTR STR?334,"Don't read the next clue until you have thoroughly explored Westminster Abbey."
.GSTR STR?335,"Have you looked around in the Jerusalem Chamber?"
.GSTR STR?336,"The fourth verse refers to Henry V."
.GSTR STR?337,"Where is the lamp?"
.GSTR STR?338,"It's in Holmes's bedroom."
.GSTR STR?339,"Who is the thief?"
.GSTR STR?340,"Who do you think?"
.GSTR STR?341,"How do I hail a cab?"
.GSTR STR?342,"Consult the sample transcript in your game manual."
.GSTR STR?343,"Why does the growler cab get lost?"
.GSTR STR?344,"The driver is friendly, but stupid."
.GSTR STR?345,"The driver is stupid, but friendly."
.GSTR STR?346,"Give up. He'll never take you where you want to go."
.GSTR STR?347,"Are the tombs important?"
.GSTR STR?348,"They are to the people buried in them."
.GSTR STR?349,"Yes."
.GSTR STR?350,"How do I make a brass rubbing?"
.GSTR STR?351,"Take a piece of paper from the pacquet of paper, put it on the tomb of your choice, and then rub it with the crayon."
.GSTR STR?352,"What should I make rubbings of?"
.GSTR STR?353,"Do not read the next clue until you have solved the verses on the thief's clue paper."
.GSTR STR?354,"The tombs of Queen Elizabeth, Sir Isaac Newton and Henry V."
.GSTR STR?355,"Why am I making brass rubbings?"
.GSTR STR?356,"The thief is trying to send messages to Sherlock."
.GSTR STR?357,"He wouldn't want his messages to be visible to everyone, now would he?"
.GSTR STR?358,"Have you visited the British Museum yet?"
.GSTR STR?359,"The book on the table in the British Museum contains a clue that will help you."
.GSTR STR?360,"There is some invisible writing on some of the tombs."
.GSTR STR?361,"When you make a rubbing, the invisible ink is transferred onto the back of the paper."
.GSTR STR?362,"Invisible ink usually becomes visible when heated."
.GSTR STR?363,"Heat the paper over the candles in the Evangelist Chapel."
.GSTR STR?364,"Turn the paper over."
.GSTR STR?365,"Where is the Stone of Scone?"
.GSTR STR?366,"It belongs under the Coronation Chair in Edward the Confessor's Chapel - but we knew it was going to be stolen in 1950 and then returned several months later. We figured that was enough excitement for any one rock, so we left it out of the game, safe from your grubby paws."
.GSTR STR?367,"What's the Son of Mars answer?"
.GSTR STR?368,"Admiral Lord Nelson."
.GSTR STR?369,"What's the Chopper answer?"
.GSTR STR?370,"Charles I."
.GSTR STR?371,"What's the London Bridge answer?"
.GSTR STR?372,"Under London Bridge."
.GSTR STR?373,"What's the answer to life's riddle?"
.GSTR STR?374,"If we knew that, do you think we'd be sitting around writing games?"
.GSTR STR?375,"What's the Pussycat answer?"
.GSTR STR?376,"Go to the Tower of London."
.GSTR STR?377,"What's the Number answer?"
.GSTR STR?378,"Have you looked at the statue of William the Conqueror?"
.GSTR STR?379,"Have you read the sign on the Monument?"
.GSTR STR?380,"Have you ever read the Charge of the Light Brigade?"
.GSTR STR?381,"600."
.GSTR STR?382,"How about Hickory Dickory Dock?"
.GSTR STR?383,"Big Ben."
.GSTR STR?384,"How do I get past the librarian?"
.GSTR STR?385,"Think of the room not as a museum, but as a library."
.GSTR STR?386,"Have you read the sign on the librarian's desk?"
.GSTR STR?387,"Has it occurred to you that he's doing an awful lot of talking?"
.GSTR STR?388,"Tell him to be quiet."
.GSTR STR?389,"What is a Whispering Gallery?"
.GSTR STR?390,"It is a place where you can eavesdrop on other people from far away."
.GSTR STR?391,"How do I get up there?"
.GSTR STR?392,"Take the stairs up from the clerestory."
.GSTR STR?393,"How do I get to the clerestory?"
.GSTR STR?394,"You can't. St Paul's isn't even in the game."
.GSTR STR?395,"We just like the word clerestory."
.GSTR STR?396,"Are the pigeons important?"
.GSTR STR?397,"Only to other pigeons."
.GSTR STR?398,"Is the statue important?"
.GSTR STR?399,"Have you looked at it?"
.GSTR STR?400,"Have you looked at it closely?"
.GSTR STR?401,"Have you looked at it through a telescope?"
.GSTR STR?402,"Is the column important?"
.GSTR STR?403,"If it wasn't there, we'd have to come up with some other way of keeping the statue out of your reach."
.GSTR STR?404,"Is anything important?"
.GSTR STR?405,"Like, wow, man. Heavy question!"
.GSTR STR?406,"How do I stop rowing in circles?"
.GSTR STR?407,"Has anyone told you you're not playing with a full deck?"
.GSTR STR?408,"Has anyone told you you're not rowing with both oars in the water?"
.GSTR STR?409,"You need two oars to steer the boat."
.GSTR STR?410,"Don't read the next two clues unless you want to know where the other oar is."
.GSTR STR?411,"The other oar is in another boat."
.GSTR STR?412,"It's in Captain Bligh's boat in the Black Museum."
.GSTR STR?413,"How do I stop the boat?"
.GSTR STR?414,"Type, 'Whoa, Boat!'"
.GSTR STR?415,"Just kidding. Drop the anchor."
.GSTR STR?416,"How do I launch the boat?"
.GSTR STR?417,"Got any rocket fuel?"
.GSTR STR?418,"Type, 'Launch boat.'"
.GSTR STR?419,"(Make sure you're in the boat and the anchor's up first.)"
.GSTR STR?420,"How do I land the boat?"
.GSTR STR?421,"You can only land the boat at the Embankment or outside Traitor's Gate."
.GSTR STR?422,"Type: N or LAND BOAT."
.GSTR STR?423,"How do I get the paddle?"
.GSTR STR?424,"You can't get the paddle when you're outside Traitor's Gate."
.GSTR STR?425,"If you don't have the paddle, you need two oars to row back up the river."
.GSTR STR?426,"If you're on the river without a paddle or both oars, you're making a big mistake."
.GSTR STR?427,"You can only take the paddle after you've entered the Tower."
.GSTR STR?428,"Can I stop the man taking the boat?"
.GSTR STR?429,"No, you can't. But after all, it's his boat."
.GSTR STR?430,"What time does the last train leave?"
.GSTR STR?431,"The timetable is posted on the wall."
.GSTR STR?432,"9:15 p.m."
.GSTR STR?433,"What track does it leave from?"
.GSTR STR?434,"Track 29."
.GSTR STR?435,"How much is a round-trip ticket?"
.GSTR STR?436,"Why are you reading clues about a place that isn't even in the game?"
.GSTR STR?437,"What is the matter with the girl?"
.GSTR STR?438,"She has a bad heart."
.GSTR STR?439,"Perhaps some medicine...."
.GSTR STR?440,"Be careful. Drugs are dangerous."
.GSTR STR?441,"How do I revive her?"
.GSTR STR?442,"Have you made a positive diagnosis?"
.GSTR STR?443,"Listen to the girl with your stethoscope."
.GSTR STR?444,"If her heart is abnormally fast, give her something to slow it down."
.GSTR STR?445,"An unusually fast heartbeat is known as tachycardia."
.GSTR STR?446,"If her heart is abnormally slow, give her something to speed it up."
.GSTR STR?447,"An unusually slow heartbeat is know as bradycardia."
.GSTR STR?448,"Belladonna will speed up a slow heart."
.GSTR STR?449,"Digitalis will slow down a fast heart."
.GSTR STR?450,"The drugs are in your medicine bag."
.GSTR STR?451,"Where is the stethoscope?"
.GSTR STR?452,"Where do most doctors carry their stethoscopes?"
.GSTR STR?453,"You are not most doctors."
.GSTR STR?454,"You have it when you start the game."
.GSTR STR?455,"Sorry about this. It turns out that Watson always carries his stethoscope in his hat. Really. (Read ""A Scandal in Bohemia."")"
.GSTR STR?456,"How do I get past the guard dog?"
.GSTR STR?457,"He won't let you carry any matches inside."
.GSTR STR?458,"OK. So you already knew that."
.GSTR STR?459,"He won't let you carry in any flames that he can see."
.GSTR STR?460,"Alright, so you knew that too. How about flames that he can't see?"
.GSTR STR?461,"Something that burns without a flame, for example."
.GSTR STR?462,"Like tobacco maybe."
.GSTR STR?463,"Light the pipe, drop the match, and go on in."
.GSTR STR?464,"What do I do with the axe?"
.GSTR STR?465,"The axe doesn't do much except cut down on the number of other things you can carry."
.GSTR STR?466,"How can I light the torch?"
.GSTR STR?467,"Light it from something that's already burning."
.GSTR STR?468,"Light it from a burning piece of paper."
.GSTR STR?469,"Light a piece of paper from the pipe, and then use it to light the torch."
.GSTR STR?470,"Will Lestrade talk to me in his office?"
.GSTR STR?471,"He doesn't like you."
.GSTR STR?472,"He really doesn't like you."
.GSTR STR?473,"What office?"
.GSTR STR?474,"How do I get inside the bank?"
.GSTR STR?475,"Despite the guard's assertions to the contrary, he can be bribed."
.GSTR STR?476,"Give him something valuable."
.GSTR STR?477,"Some gems might do the trick."
.GSTR STR?478,"Give him the ruby, the sapphire, the emerald and the opal."
.GSTR STR?479,"How do I get inside the vault?"
.GSTR STR?480,"The door has a combination lock on it."
.GSTR STR?481,"The tumblers turn too quietly for you to hear without amplification."
.GSTR STR?482,"Listen to the door with the stethoscope, and then turn the dial left or right."
.GSTR STR?483,"A 'clunk' means you're going the wrong way."
.GSTR STR?484,"A 'whirr' means you're going the right way."
.GSTR STR?485,"A 'click' means you should reverse directions."
.GSTR STR?486,"The combination is right twice, left once, right twice."
.GSTR STR?487,"Which box should I open?"
.GSTR STR?488,"Have you solved the second clue on Sir Isaac Newton's tomb?"
.GSTR STR?489,"Open box 600."
.GSTR STR?490,"How do I open safety deposit boxes?"
.GSTR STR?491,"Do you have any dynamite?"
.GSTR STR?492,"Try using a key."
.GSTR STR?493,"The bank guard has it."
.GSTR STR?494,"It's in his pocket."
.GSTR STR?495,"How good a pickpocket are you?"
.GSTR STR?496,"How good a pickpocket are the people you know?"
.GSTR STR?497,"Ask Wiggins to steal it."
.GSTR STR?498,"How can I stop the kidnapping?"
.GSTR STR?499,"Hire bodyguards."
.GSTR STR?500,"Put Holmes in your medical bag."
.GSTR STR?501,"You can't."
.GSTR STR?502,"What does Mycroft want from me?"
.GSTR STR?503,"Your blood?"
.GSTR STR?504,"Your first-born male child?"
.GSTR STR?505,"Sherlock's ring."
.GSTR STR?506,"How do I get the token?"
.GSTR STR?507,"Show any of the gems you have found to Sherlock."
.GSTR STR?508,"How do I get into the Tower?"
.GSTR STR?509,"Give the password to the beefeater."
.GSTR STR?510,"You must get the password from someone who has government connections."
.GSTR STR?511,"Mycroft Holmes knows the password."
.GSTR STR?512,"Don't continue unless Sherlock Holmes has been kidnapped."
.GSTR STR?513,"Go to the Diogenes Club and ask for Mycroft. The butler will ask you for a token. Give him the token. Mycroft will appear and give you the password."
.GSTR STR?514,"Return to the Tower and give the guard the password."
.GSTR STR?515,"Just type GUARD, [PASSWORD]."
.GSTR STR?516,"How do I get out of the Tower?"
.GSTR STR?517,"The beefeater won't let you out. You must find another exit."
.GSTR STR?518,"The only other way out is through Traitor's Gate."
.GSTR STR?519,"The portcullis is operated by the chain above it."
.GSTR STR?520,"You do not weigh enough to pull down the chain."
.GSTR STR?521,"Put on the suit of armour in the dungeon of the White Tower and then pull on the chain."
.GSTR STR?522,"Where is the diamond?"
.GSTR STR?523,"What diamond?"
.GSTR STR?524,"How do I get the diamond?"
.GSTR STR?525,"See previous hint."
.GSTR STR?526,"Where is the sapphire?"
.GSTR STR?527,"Did you solve the Hickory Dickory Dock riddle?"
.GSTR STR?528,"It's stuck to the clapper of Big Ben."
.GSTR STR?529,"How do I get the sapphire?"
.GSTR STR?530,"Have you tried driving a hook into the ceiling, throwing a rope over the hook, climbing up onto the rail, swinging across the hollow shaft while screaming like Tarzan, and grabbing the sapphire as you swing by?"
.GSTR STR?531,"Just asking."
.GSTR STR?532,"Wait until the hour strikes. The clapper will swing your way."
.GSTR STR?533,"You need to use your hands while the bell is ringing."
.GSTR STR?534,"Put the cotton balls in your ears before the bell starts to ring."
.GSTR STR?535,"The cotton balls are in the blue pill bottle."
.GSTR STR?536,"Where is the ruby?"
.GSTR STR?537,"Did you solve the Son of Mars riddle?"
.GSTR STR?538,"It's somewhere in Trafalgar Square."
.GSTR STR?539,"It's on the statue in Trafalgar Square."
.GSTR STR?540,"It's in Nelson's blind eye."
.GSTR STR?541,"You can discover it only by looking through the telescope."
.GSTR STR?542,"How do I get the ruby?"
.GSTR STR?543,"You can't get up there."
.GSTR STR?544,"Someone - or something - else will have to get it for you."
.GSTR STR?545,"Some kind of trained bird might do it."
.GSTR STR?546,"Old Sherman, who lives in Pinchin Lane, trains animals."
.GSTR STR?547,"Get the bird from Sherman. Take it to Trafalgar Square. Show the ruby to the pigeon, ask him to get it, and then let him go."
.GSTR STR?548,"Do not read the next clue until you have done all of the above."
.GSTR STR?549,"Did we mention that it's a homing pigeon?"
.GSTR STR?550,"Return to Sherman's shop and ask him about the bird."
.GSTR STR?551,"Where is the emerald?"
.GSTR STR?552,"Did you solve the Chopper riddle?"
.GSTR STR?553,"It's in the Chamber of Horrors."
.GSTR STR?554,"It's hidden in one of the statues."
.GSTR STR?555,"It's in the wax head of Charles I."
.GSTR STR?556,"How do I get the emerald?"
.GSTR STR?557,"It's encased in wax. What springs to mind?"
.GSTR STR?558,"You need to melt the head."
.GSTR STR?559,"You can't melt the head unless you remove it from the statue."
.GSTR STR?560,"You need something that puts out enough heat to melt a big gob of wax."
.GSTR STR?561,"The torch will melt the wax head."
.GSTR STR?562,"Where is the sceptre?"
.GSTR STR?563,"In the sceptre tank?"
.GSTR STR?564,"Sorry about that."
.GSTR STR?565,"There is no sceptre."
.GSTR STR?566,"How do I get the sceptre?"
.GSTR STR?567,"Dive into the sceptre tank."
.GSTR STR?568,"Don't blame us. You're the one who keeps reading these bogus clues."
.GSTR STR?569,"Where is the opal?"
.GSTR STR?570,"Have you solved the London Bridge riddle?"
.GSTR STR?571,"It's in the clump of moss under London Bridge."
.GSTR STR?572,"How do I get the opal?"
.GSTR STR?573,"Can you lower the bridge?"
.GSTR STR?574,"Can you raise the water?"
.GSTR STR?575,"Wait for high tide."
.GSTR STR?576,"The newspaper that came with your game contains the tide tables for the weekend."
.GSTR STR?577,"Where is the zorkmid?"
.GSTR STR?578,"It's in the... oops. Sorry. Wrong game."
.GSTR STR?579,"How do I get the zorkmid?"
.GSTR STR?580,"Buy Zork I."
.GSTR STR?581,"Buy Enchanter."
.GSTR STR?582,"Buy Sorcerer."
.GSTR STR?583,"You get the idea."
.GSTR STR?584,"Where is the topaz?"
.GSTR STR?585,"In a safety deposit box in the Bank of England."
.GSTR STR?586,"Have you solved the number riddle?"
.GSTR STR?587,"It's in box 600."
.GSTR STR?588,"How do I get the topaz?"
.GSTR STR?589,"See the clues for the Bank of England."
.GSTR STR?590,"Where is the garnet?"
.GSTR STR?591,"Did you solve the Tower of London riddle?"
.GSTR STR?592,"It's in the butt of malmsey in the Bowyer Tower."
.GSTR STR?593,"How do I get the garnet?"
.GSTR STR?594,"Have you tried drinking the wine?"
.GSTR STR?595,"Pretty tasty stuff, isn't it?"
.GSTR STR?596,"You need to drain the keg somehow."
.GSTR STR?597,"You need to remove the bung."
.GSTR STR?598,"Knock out the bung with the mace."
.GSTR STR?599,"Don't read the next clue until you have done all of the above."
.GSTR STR?600,"Ask Wiggins to get the garnet for you."
.GSTR STR?601,"Why are the gems important?"
.GSTR STR?602,"You don't think the thief has been hiding gems all over London just for the fun of it, do you?"
.GSTR STR?603,"Perhaps he is trying to send Sherlock yet another message."
.GSTR STR?604,"Have you looked at any of the gems?"
.GSTR STR?605,"Have you looked at any of them closely?"
.GSTR STR?606,"Look at each of the gems through the magnifying glass."
.GSTR STR?607,"Can I stop Akbar's knocking me out?"
.GSTR STR?608,"Knock him out first."
.GSTR STR?609,"Perhaps you could smuggle something in."
.GSTR STR?610,"Have you noticed the henchman's religion?"
.GSTR STR?611,"He probably won't disturb your hat."
.GSTR STR?612,"Perhaps the etherium ampoule...."
.GSTR STR?613,"Can I stop Moriarty when I wake up?"
.GSTR STR?614,"If he is free to move around, he will always win."
.GSTR STR?615,"Tie him up."
.GSTR STR?616,"Don't forget to tie up the henchman, too."
.GSTR STR?617,"Why do I finish without 100 points?"
.GSTR STR?618,"If you play the game from start to finish and solve all the puzzles, you will end up with 100 points. If, however, you start the game and play through it using information you acquired in a previous session, you may have neglected to perform a few actions for which you received points. This should not be of concern to anyone who is content with failing to discover the highest ranking available to the game player."
.GSTR STR?619,"Can I abbreviate ""stethoscope""?"
.GSTR STR?620,"Yes. It can be abbreviated to STETH or SS."
.GSTR STR?621,"What is the square root of 64?"
.GSTR STR?622,"Eight."
.GSTR STR?623,"STARTERS"
.GSTR STR?624,"CABS"
.GSTR STR?625,"WESTMINSTER ABBEY"
.GSTR STR?626,"BRITISH MUSEUM"
.GSTR STR?627,"ST PAUL'S"
.GSTR STR?628,"TRAFALGAR SQUARE"
.GSTR STR?629,"ON THE THAMES"
.GSTR STR?630,"VICTORIA STATION"
.GSTR STR?631,"COVENT GARDEN"
.GSTR STR?632,"MADAME TUSSAUD'S"
.GSTR STR?633,"SCOTLAND YARD"
.GSTR STR?634,"BANK OF ENGLAND"
.GSTR STR?635,"DIOGENES CLUB"
.GSTR STR?636,"TOWER OF LONDON"
.GSTR STR?637,"GEMS"
.GSTR STR?638,"MORE GEMS"
.GSTR STR?639,"THE LAIR"
.GSTR STR?640,"MISCELLANEOUS"
.GSTR STR?641,"INVISICLUES (tm)"
.GSTR STR?642,"RETURN = see new hint"
.GSTR STR?643,"Q = see hint menu"
.GSTR STR?644," N = Next"
.GSTR STR?645,"P = Previous"
.GSTR STR?646," RETURN = See hint"
.GSTR STR?647,"Q = Resume story"
.GSTR STR?648,"wave"
.GSTR STR?649,"waves"
.GSTR STR?650,"shout"
.GSTR STR?651,"shouts"
.GSTR STR?652,"would fit very well"
.GSTR STR?653,"do not"
.GSTR STR?654,"does not"
.GSTR STR?655,"do"
.GSTR STR?656,"does"
.GSTR STR?657,"Blowing"
.GSTR STR?658,"Paying respect to"
.GSTR STR?659,"could not"
.GSTR STR?660,"cannot"
.GSTR STR?661,"is looking for a fight"
.GSTR STR?662,"closed"
.GSTR STR?663,"become"
.GSTR STR?664,"becomes"
.GSTR STR?665,"see"
.GSTR STR?666,"sees"
.GSTR STR?667,"would agree with you"
.GSTR STR?668,"inhale first.
"
.GSTR STR?669,"Flipping"
.GSTR STR?670,"Folding"
.GSTR STR?671,"would accept your offer"
.GSTR STR?672,"Heating"
.GSTR STR?673,"Kicking"
.GSTR STR?674,"close"
.GSTR STR?675,"surgeon"
.GSTR STR?676,"veterinarian"
.GSTR STR?677,"Trying to destroy"
.GSTR STR?678,"locksmith"
.GSTR STR?679,"Playing with"
.GSTR STR?680,"Pointing at"
.GSTR STR?681,"Pointing"
.GSTR STR?682,"take off"
.GSTR STR?683,"Pulling on"
.GSTR STR?684,"Pushing around"
.GSTR STR?685,"put"
.GSTR STR?686,"puts"
.GSTR STR?687,"ask about"
.GSTR STR?688,"ASK CHARACTER ABOUT"
.GSTR STR?689,"Toying in this way with"
.GSTR STR?690,"would appreciate your reading"
.GSTR STR?691,"wants to play piggyback"
.GSTR STR?692,"Rubbing"
.GSTR STR?693,"is interested in selling anything"
.GSTR STR?694,"would buy anything"
.GSTR STR?695,"salesperson"
.GSTR STR?696,"Shaking"
.GSTR STR?697,"take"
.GSTR STR?698,"takes"
.GSTR STR?699,"whisper"
.GSTR STR?700,"whispers"
.GSTR STR?701,"Fiddling with"
.GSTR STR?702,"Turning"
.GSTR STR?703,"drop"
.GSTR STR?704,"drops"
.GSTR STR?705,"already have"
.GSTR STR?706,"already has"
.GSTR STR?707,"opens"
.GSTR STR?708,"closes"
.GSTR STR?709,"ON"
.GSTR STR?710,"OFF"
.GSTR STR?711,"give"
.GSTR STR?712,"gives"
.GSTR STR?713,"shoot"
.GSTR STR?714,"shoots"
.GSTR STR?715,"take things"
.GSTR STR?716,"asking"
.GSTR STR?717,"let"
.GSTR STR?718,"lets"
.GSTR STR?719,"will do you any favours"
.GSTR STR?720,"untie"
.GSTR STR?721,"unties"
.GSTR STR?722,"tie"
.GSTR STR?723,"ties"
.GSTR STR?724,"The fireplace is in the way."
.GSTR STR?725,"You would fly out the bow window."
.GSTR STR?726,"You were thinking maybe you had wings?"
.GSTR STR?727,"take out"
.GSTR STR?728,"feel"
.GSTR STR?729,"feels"
.GSTR STR?730,"Wiggins's"
.GSTR STR?731,"Holmes's"
.GSTR STR?732,"Mrs Hudson"
.GSTR STR?733,"Mrs Hudson's"
.GSTR STR?734,"the girl"
.GSTR STR?735,"the girl's"
.GSTR STR?736,"yourself"
.GSTR STR?737,"your"
.GSTR STR?738,"be holding"
.GSTR STR?739,"make"
.GSTR STR?740,"makes"
.GSTR STR?741,"statue of Sir Isaac Newton"
.GSTR STR?742,"cherubs"
.GSTR STR?743,"diagram"
.GSTR STR?744,"Newton's tomb"
.GSTR STR?745,"any"
.GSTR STR?746,"the"
.GSTR STR?747,"some"
.GSTR STR?748,"an"
.GSTR STR?749,"a"
.GSTR STR?750,"knights"
.GSTR STR?751,"armour"
.GSTR STR?752,"Sir Francis Vere's tomb"
.GSTR STR?753,"get"
.GSTR STR?754,"gets"
.GSTR STR?755,"try"
.GSTR STR?756,"tries"
.GSTR STR?757,"struggle"
.GSTR STR?758,"struggles"
.GSTR STR?759,"remove"
.GSTR STR?760,"removes"
.GSTR STR?761,"tug"
.GSTR STR?762,"tugs"
.GSTR STR?763,"knock"
.GSTR STR?764,"knocks"
.GSTR STR?765,"hit"
.GSTR STR?766,"hits"
.GSTR STR?767,"touch"
.GSTR STR?768,"touches"
.GSTR STR?769,"reach"
.GSTR STR?770,"reaches"
.GSTR STR?771,"recall"
.GSTR STR?772,"recalls"
.GSTR STR?773,"quickly withdraw"
.GSTR STR?774,"quickly withdraws"
.GSTR STR?775,"release"
.GSTR STR?776,"releases"
.GSTR STR?777,"cut"
.GSTR STR?778,"cuts"
.GSTR STR?779,"strutting around"
.GSTR STR?780,"pictures"
.GSTR STR?781,"open it first."
.GSTR STR?782,"triumphal arch"
.GSTR STR?783,"fireplace"
.GSTR STR?784,"gas light"
.GSTR STR?785,"chariot"
.GSTR STR?786,"marquees"
.GSTR STR?787,"supports"
.GSTR STR?788,"lower"
.GSTR STR?789,"lowers"
.GSTR STR?790,"raise"
.GSTR STR?791,"raises"
.GSTR STR?792,"that part of the statue"
.GSTR STR?793,"things in the library"
.GSTR STR?794,"produce"
.GSTR STR?795,"walls"
.GSTR STR?796,"instruments of torture"
.GSTR STR?797,"get out of"
.GSTR STR?798,"stick"
.GSTR STR?799,"sticks"
.GSTR STR?800,"come"
.GSTR STR?801,"comes"
.GSTR STR?802,"blow"
.GSTR STR?803,"blows"
.GSTR STR?804,"turn"
.GSTR STR?805,"turns"
.GSTR STR?806,"them"
.GSTR STR?807,"it"
.GSTR STR?808,"lock"
.GSTR STR?809,"locks"
.GSTR STR?810,"close and lock"
.GSTR STR?811,"closes and locks"
.GSTR STR?812,"accept your offer"
.GSTR STR?813,"jump"
.GSTR STR?814,"jumps"
.GSTR STR?815,"pull"
.GSTR STR?816,"pulls"
.GSTR STR?817,"row"
.GSTR STR?818,"rows"
.GSTR STR?819,"paddle"
.GSTR STR?820,"paddles"
.GSTR STR?821,"unlock"
.GSTR STR?822,"unlocks"
.GSTR STR?823,"water"
.GSTR STR?824,"statues"
.GSTR STR?825,"staring at you"
.GSTR STR?826,"pedestal"
.ENDI

14
generic.zabstr Normal file
View File

@ -0,0 +1,14 @@
<DEFINE-ROUTINE RT-GN-PAPER>
<DEFINE-ROUTINE RT-GN-GEM>
<DEFINE-ROUTINE RT-GN-PIGEON>
<DEFINE-ROUTINE RT-GN-OAR>
<DEFINE-ROUTINE RT-GN-BOX>
<DEFINE-ROUTINE RT-GN-DOOR>
<DEFINE-ROUTINE RT-GN-BOTTLE>
<DEFINE-ROUTINE RT-GN-PILL>
<DEFINE-ROUTINE RT-GN-TH-CLOTHES>
<DEFINE-ROUTINE RT-GN-BODY>
<DEFINE-ROUTINE RT-GN-INTNUM>
<DEFINE-ROUTINE RT-GN-ETHERIUM>
<DEFINE-ROUTINE RT-GN-TOWER>

301
generic.zap Normal file
View File

@ -0,0 +1,301 @@
.FUNCT RT-GN-PAPER,TBL,LEN,PTR,OBJ,PAPER,CONT,C-PAPER,HELD,H-PAPER,GND,G-PAPER
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
INTBL? GL-P-IT-OBJECT,PTR,LEN \?PRG6
PRINTC 91
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
PRINTC 93
CRLF
RETURN GL-P-IT-OBJECT
?PRG6: MUL LEN,2
ADD TBL,STACK
GRTR? PTR,STACK /?REP7
GET PTR,0 >OBJ
LOC OBJ
FSET? STACK,FL-SURFACE /?REP7
LOC OBJ
EQUAL? STACK,CH-PLAYER \?CCL15
ZERO? HELD \?CCL18
SET 'HELD,TRUE-VALUE
SET 'H-PAPER,OBJ
JUMP ?CND11
?CCL18: SET 'H-PAPER,FALSE-VALUE
JUMP ?CND11
?CCL15: LOC OBJ
EQUAL? STACK,GL-PLACE-CUR \?CCL20
ZERO? GND \?CCL23
SET 'GND,TRUE-VALUE
SET 'G-PAPER,OBJ
JUMP ?CND11
?CCL23: SET 'G-PAPER,FALSE-VALUE
JUMP ?CND11
?CCL20: ZERO? CONT \?CCL25
LOC OBJ
FSET? STACK,FL-CONTAINER \?CCL25
LOC OBJ >CONT
SET 'C-PAPER,OBJ
JUMP ?CND11
?CCL25: LOC OBJ
FSET? STACK,FL-CONTAINER \?CND11
ZERO? CONT /?CND11
LOC OBJ
EQUAL? STACK,CONT /?CND11
SET 'C-PAPER,FALSE-VALUE
?CND11: ADD PTR,2 >PTR
JUMP ?PRG6
?REP7: ZERO? OBJ /?CCL34
LOC OBJ
FSET? STACK,FL-SURFACE \?CCL34
SET 'PAPER,OBJ
JUMP ?CND32
?CCL34: ZERO? H-PAPER /?CCL38
SET 'PAPER,H-PAPER
JUMP ?CND32
?CCL38: ZERO? G-PAPER /?CCL40
SET 'PAPER,G-PAPER
JUMP ?CND32
?CCL40: ZERO? C-PAPER /FALSE
SET 'PAPER,C-PAPER
?CND32: PRINTC 91
ICALL2 RT-CTHEO-PRINT,PAPER
PRINTC 93
CRLF
CRLF
RETURN PAPER
.FUNCT RT-GN-GEM,TBL,LEN,PTR,OBJ,GEM,CONT,C-GEM,HELD,H-GEM,GND,G-GEM
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
INTBL? GL-P-IT-OBJECT,PTR,LEN \?CCL5
PRINTC 91
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
PRINTC 93
CRLF
CRLF
RETURN GL-P-IT-OBJECT
?CCL5: EQUAL? GL-PLACE-CUR,RM-CLOCK-TOWER \?PRG10
IN? TH-SAPPHIRE,TH-CLAPPER \?PRG10
RETURN TH-SAPPHIRE
?PRG10: MUL LEN,2
ADD TBL,STACK
GRTR? PTR,STACK /?REP11
GET PTR,0 >OBJ
LOC OBJ
EQUAL? STACK,CH-PLAYER \?CCL17
ZERO? HELD \?CCL20
SET 'HELD,TRUE-VALUE
SET 'H-GEM,OBJ
JUMP ?CND15
?CCL20: SET 'H-GEM,FALSE-VALUE
JUMP ?CND15
?CCL17: LOC OBJ
EQUAL? STACK,GL-PLACE-CUR \?CCL22
ZERO? GND \?CCL25
SET 'GND,TRUE-VALUE
SET 'G-GEM,OBJ
JUMP ?CND15
?CCL25: SET 'G-GEM,FALSE-VALUE
JUMP ?CND15
?CCL22: LOC OBJ
ZERO? STACK /?CCL27
ZERO? CONT \?CCL27
LOC OBJ
FSET? STACK,FL-CONTAINER \?CCL27
LOC OBJ >CONT
SET 'C-GEM,OBJ
JUMP ?CND15
?CCL27: LOC OBJ
ZERO? STACK /?CND15
LOC OBJ
FSET? STACK,FL-CONTAINER \?CND15
ZERO? CONT /?CND15
LOC OBJ
EQUAL? STACK,CONT /?CND15
SET 'C-GEM,FALSE-VALUE
?CND15: ADD PTR,2 >PTR
JUMP ?PRG10
?REP11: ZERO? H-GEM /?CCL38
SET 'GEM,H-GEM
JUMP ?CND36
?CCL38: ZERO? G-GEM /?CCL40
SET 'GEM,G-GEM
JUMP ?CND36
?CCL40: ZERO? C-GEM /FALSE
SET 'GEM,C-GEM
?CND36: PRINTC 91
ICALL2 RT-CTHEO-PRINT,GEM
PRINTC 93
CRLF
CRLF
RETURN GEM
.FUNCT RT-GN-PIGEON,TBL,LEN
FSET? CH-TRAINED-PIGEON,FL-ALIVE /?CCL3
PRINTC 91
ICALL2 RT-CTHEO-PRINT,TH-DEAD-PIGEON
PRINTC 93
CRLF
CRLF
RETURN TH-DEAD-PIGEON
?CCL3: PRINTC 91
ICALL2 RT-CTHEO-PRINT,CH-TRAINED-PIGEON
PRINTC 93
CRLF
CRLF
RETURN CH-TRAINED-PIGEON
.FUNCT RT-GN-OAR,TBL,LEN
EQUAL? GL-P-IT-OBJECT,TH-OAR-1,TH-OAR-2 \?CCL3
PRINTC 91
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
PRINTC 93
CRLF
CRLF
RETURN GL-P-IT-OBJECT
?CCL3: PRINTC 91
ICALL2 RT-CTHEO-PRINT,TH-OAR-2
PRINTC 93
CRLF
CRLF
RETURN TH-OAR-2
.FUNCT RT-GN-BOX,TBL,LEN,PTR
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
INTBL? GL-P-IT-OBJECT,PTR,LEN \FALSE
PRINTC 91
ICALL2 RT-CTHEO-PRINT,GL-P-IT-OBJECT
PRINTC 93
CRLF
CRLF
RETURN GL-P-IT-OBJECT
.FUNCT RT-GN-DOOR,TBL,LEN,PTR,OBJ,DOOR
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
?PRG3: MUL LEN,2
ADD TBL,STACK
GRTR? PTR,STACK /?REP4
GET PTR,0 >OBJ
EQUAL? GL-PRSA,V?OPEN \?CCL10
FSET? OBJ,FL-OPENED /?CND8
ZERO? DOOR \FALSE
SET 'DOOR,OBJ
JUMP ?CND8
?CCL10: EQUAL? GL-PRSA,V?CLOSE \?CND8
FSET? OBJ,FL-OPENED \?CND8
ZERO? DOOR \FALSE
SET 'DOOR,OBJ
?CND8: ADD PTR,2 >PTR
JUMP ?PRG3
?REP4: ZERO? DOOR /?CND22
PRINTC 91
ICALL2 RT-CTHEO-PRINT,DOOR
PRINTC 93
CRLF
CRLF
?CND22: RETURN DOOR
.FUNCT RT-GN-BOTTLE,TBL,LEN,PTR,OBJ,BOTTLE
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
?PRG3: MUL LEN,2
ADD TBL,STACK
GRTR? PTR,STACK /?REP4
GET PTR,0 >OBJ
EQUAL? GL-PRSA,V?OPEN \?PRD11
ZERO? GL-NOW-PRSI? \?PRD11
FSET? OBJ,FL-OPENED \?CCL9
?PRD11: EQUAL? GL-PRSA,V?CLOSE \?PRD15
ZERO? GL-NOW-PRSI? \?PRD15
FSET? OBJ,FL-OPENED /?CCL9
?PRD15: EQUAL? GL-PRSA,V?PUT \?CND8
ZERO? GL-NOW-PRSI? /?CND8
FSET? OBJ,FL-OPENED \?CND8
?CCL9: ZERO? BOTTLE \FALSE
SET 'BOTTLE,OBJ
?CND8: ADD PTR,2 >PTR
JUMP ?PRG3
?REP4: ZERO? BOTTLE /?CND25
PRINTC 91
ICALL2 RT-CTHEO-PRINT,BOTTLE
PRINTC 93
CRLF
CRLF
?CND25: RETURN BOTTLE
.FUNCT RT-GN-PILL,TBL,LEN,PTR,OBJ,PILL
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
CALL1 RT-TOUCH-VERB?
ZERO? STACK /?CND3
?PRG5: MUL LEN,2
ADD TBL,STACK
GRTR? PTR,STACK /?CND3
GET PTR,0 >OBJ
CALL2 RT-ACCESSIBLE?,OBJ
ZERO? STACK /?CND10
ZERO? PILL \FALSE
SET 'PILL,OBJ
?CND10: ADD PTR,2 >PTR
JUMP ?PRG5
?CND3: ZERO? PILL /?CND15
PRINTC 91
ICALL2 RT-CTHEO-PRINT,PILL
PRINTC 93
CRLF
CRLF
?CND15: RETURN PILL
.FUNCT RT-GN-TH-CLOTHES,TBL,LEN
RETURN TH-CLOTHES
.FUNCT RT-GN-BODY,TBL,LEN,PTR,OBJ
ZERO? LEN \?CND1
GET TBL,0 >LEN
?CND1: ADD TBL,2 >PTR
INTBL? TH-CLOTHES,PTR,LEN \?PRG5
RETURN TH-CLOTHES
?PRG5: ZERO? LEN /FALSE
GET PTR,0 >OBJ
FSET? OBJ,FL-BODYPART \?CND7
RETURN OBJ
?CND7: ADD PTR,2 >PTR
DEC 'LEN
JUMP ?PRG5
.FUNCT RT-GN-INTNUM,TBL,LEN
EQUAL? GL-PRSA,V?WAIT,V?WAIT-FOR /?CTR2
RETURN TH-SAFETY-DEPOSIT-BOX
?CTR2: RETURN TH-INTNUM
.FUNCT RT-GN-ETHERIUM,TBL,LEN
EQUAL? GL-PRSA,V?SMELL,V?INHALE \?CCL3
RETURN TH-ETHERIUM-GAS
?CCL3: EQUAL? GL-PRSA,V?MUNG,V?OPEN,V?LOOK-INSIDE \FALSE
RETURN TH-ETHERIUM-AMPOULE
.FUNCT RT-GN-TOWER,TBL,LEN
RETURN LG-TOWER
.ENDI

253
generic.zil Normal file
View File

@ -0,0 +1,253 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : GENERIC.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 28 Oct 1987 15:50:50 $"
; "rev : $Revision: 1.25 $"
; "vers : 1.00"
;*****************************************************************************
<ROUTINE RT-GN-PAPER
(TBL "OPTIONAL" (LEN 0) "AUX" PTR OBJ PAPER
(CONT <>) (C-PAPER <>)
(HELD <>) (H-PAPER <>)
(GND <>) (G-PAPER <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<COND (<INTBL? ,GL-P-IT-OBJECT .PTR .LEN>
<TELL "[" CTHE ,GL-P-IT-OBJECT "]" CR ;CR>
<RETURN ,GL-P-IT-OBJECT>)
(T
<REPEAT ()
<COND (<G? .PTR <REST .TBL <* .LEN 2>>>
<RETURN>)
(T
<SET OBJ <GET .PTR 0>>)>
; "If the paper is on a surface (i.e. tomb), use it."
<COND (<MC-IS? <LOC .OBJ> ,FL-SURFACE>
<RETURN>)
; "Check for single held paper."
(<EQUAL? <LOC .OBJ> ,CH-PLAYER>
<COND (<MC-F? .HELD>
<SET HELD T>
<SET H-PAPER .OBJ>)
(T
<SET H-PAPER <>>)>)
; "Check for single paper on ground/floor."
(<EQUAL? <LOC .OBJ> ,GL-PLACE-CUR>
<COND (<MC-F? .GND>
<SET GND T>
<SET G-PAPER .OBJ>)
(T
<SET G-PAPER <>>)>)
; "Find first contained paper."
(<AND <MC-F? .CONT>
<MC-IS? <LOC .OBJ> ,FL-CONTAINER>>
<SET CONT <LOC .OBJ>>
<SET C-PAPER .OBJ>)
; "Check for paper in a different container."
(<AND <MC-IS? <LOC .OBJ> ,FL-CONTAINER>
<MC-T? .CONT>
<NOT <EQUAL? <LOC .OBJ> .CONT>>>
<SET C-PAPER <>>)>
<SET PTR <REST .PTR 2>>>
<COND (<AND <MC-T? .OBJ>
<MC-IS? <LOC .OBJ> ,FL-SURFACE>>
<SET PAPER .OBJ>)
(<MC-T? .H-PAPER>
<SET PAPER .H-PAPER>)
(<MC-T? .G-PAPER>
<SET PAPER .G-PAPER>)
(<MC-T? .C-PAPER>
<SET PAPER .C-PAPER>)
(T
<RFALSE>)>
<TELL "[" CTHE .PAPER "]" CR CR>
<RETURN .PAPER>)>
<RFALSE>>
<ROUTINE RT-GN-GEM (TBL "OPTIONAL" (LEN 0) "AUX" PTR OBJ GEM (CONT <>)
(C-GEM <>) (HELD <>) (H-GEM <>)(GND <>) (G-GEM <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<COND (<INTBL? ,GL-P-IT-OBJECT .PTR .LEN>
<TELL "[" CTHE ,GL-P-IT-OBJECT "]" CR CR>
<RETURN ,GL-P-IT-OBJECT>)
(<AND <MC-HERE? RM-CLOCK-TOWER>
<IN? ,TH-SAPPHIRE ,TH-CLAPPER>>
<RETURN ,TH-SAPPHIRE>)
(T
<REPEAT ()
<COND (<G? .PTR <REST .TBL <* .LEN 2>>>
<RETURN>)
(T
<SET OBJ <GET .PTR 0>>)>
; "Check for single held gem."
<COND (<EQUAL? <LOC .OBJ> ,CH-PLAYER>
<COND (<MC-F? .HELD>
<SET HELD T>
<SET H-GEM .OBJ>)
(T
<SET H-GEM <>>)>)
; "Check for single gem on ground/floor."
(<EQUAL? <LOC .OBJ> ,GL-PLACE-CUR>
<COND (<MC-F? .GND>
<SET GND T>
<SET G-GEM .OBJ>)
(T
<SET G-GEM <>>)>)
; "Find first contained gem."
(<AND <MC-T? <LOC .OBJ>>
<MC-F? .CONT>
<MC-IS? <LOC .OBJ> ,FL-CONTAINER>>
<SET CONT <LOC .OBJ>>
<SET C-GEM .OBJ>)
; "Check for gem in a different container."
(<AND <MC-T? <LOC .OBJ>>
<MC-IS? <LOC .OBJ> ,FL-CONTAINER>
<MC-T? .CONT>
<NOT <EQUAL? <LOC .OBJ> .CONT>>>
<SET C-GEM <>>)>
<SET PTR <REST .PTR 2>>>
<COND (<MC-T? .H-GEM> ; "Return single held gem."
<SET GEM .H-GEM>)
(<MC-T? .G-GEM> ; "Return single gem on ground/floor."
<SET GEM .G-GEM>)
(<MC-T? .C-GEM> ; "Return first gem in container."
<SET GEM .C-GEM>)
(T
<RFALSE>)>
<TELL "[" CTHE .GEM "]" CR CR>
<RETURN .GEM>)>
<RFALSE>>
<ROUTINE RT-GN-PIGEON (TBL "OPTIONAL" (LEN 0))
<COND (<MC-ISNOT? ,CH-TRAINED-PIGEON ,FL-ALIVE>
<TELL "[" CTHE ,TH-DEAD-PIGEON "]" CR CR>
<RETURN ,TH-DEAD-PIGEON>)
(T
<TELL "[" CTHE ,CH-TRAINED-PIGEON "]" CR CR>
<RETURN ,CH-TRAINED-PIGEON>)>>
<ROUTINE RT-GN-OAR (TBL "OPTIONAL" (LEN 0))
<COND (<EQUAL? ,GL-P-IT-OBJECT ,TH-OAR-1 ,TH-OAR-2>
<TELL "[" CTHE ,GL-P-IT-OBJECT "]" CR CR>
<RETURN ,GL-P-IT-OBJECT>)
(T
<TELL "[" CTHE ,TH-OAR-2 "]" CR CR>
<RETURN ,TH-OAR-2>)>>
<ROUTINE RT-GN-BOX (TBL "OPTIONAL" (LEN 0) "AUX" PTR)
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<COND (<INTBL? ,GL-P-IT-OBJECT .PTR .LEN>
<TELL "[" CTHE ,GL-P-IT-OBJECT "]" CR CR>
<RETURN ,GL-P-IT-OBJECT>)
(T
<RFALSE>)>>
<ROUTINE RT-GN-DOOR (TBL "OPTIONAL" (LEN 0) "AUX" PTR (OBJ <>) (DOOR <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<REPEAT ()
<COND (<G? .PTR <REST .TBL <* .LEN 2>>>
<RETURN>)
(T
<SET OBJ <GET .PTR 0>>)>
<COND (<MC-VERB? OPEN>
<COND (<MC-ISNOT? .OBJ ,FL-OPENED>
<COND (<MC-F? .DOOR>
<SET DOOR .OBJ>)
(T
<RFALSE>)>)>)
(<MC-VERB? CLOSE>
<COND (<MC-IS? .OBJ ,FL-OPENED>
<COND (<MC-F? .DOOR>
<SET DOOR .OBJ>)
(T
<RFALSE>)>)>)>
<SET PTR <REST .PTR 2>>>
<COND (<MC-T? .DOOR>
<TELL "[" CTHE .DOOR "]" CR CR>)>
<RETURN .DOOR>>
<ROUTINE RT-GN-BOTTLE (TBL "OPTIONAL" (LEN 0) "AUX" PTR OBJ (BOTTLE <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<REPEAT ()
<COND (<G? .PTR <REST .TBL <* .LEN 2>>>
<RETURN>)
(T
<SET OBJ <GET .PTR 0>>)>
<COND (<OR <AND <MC-VERB? OPEN>
<MC-THIS-PRSO?>
<MC-ISNOT? .OBJ ,FL-OPENED>>
<AND <MC-VERB? CLOSE>
<MC-THIS-PRSO?>
<MC-IS? .OBJ ,FL-OPENED>>
<AND <MC-VERB? PUT>
<MC-THIS-PRSI?>
<MC-IS? .OBJ ,FL-OPENED>>>
<COND (<MC-F? .BOTTLE>
<SET BOTTLE .OBJ>)
(T
<RFALSE>)>)>
<SET PTR <REST .PTR 2>>>
<COND (<MC-T? .BOTTLE>
<TELL "[" CTHE .BOTTLE "]" CR CR>)>
<RETURN .BOTTLE>>
<ROUTINE RT-GN-PILL (TBL "OPTIONAL" (LEN 0) "AUX" PTR OBJ (PILL <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<COND (<RT-TOUCH-VERB?>
<REPEAT ()
<COND (<G? .PTR <REST .TBL <* .LEN 2>>>
<RETURN>)
(T
<SET OBJ <GET .PTR 0>>)>
<COND (<RT-ACCESSIBLE? .OBJ>
<COND (<MC-F? .PILL>
<SET PILL .OBJ>)
(T
<RFALSE>)>)>
<SET PTR <REST .PTR 2>>>)>
<COND (<MC-T? .PILL>
<TELL "[" CTHE .PILL "]" CR CR>)>
<RETURN .PILL>>
<ROUTINE RT-GN-TH-CLOTHES (TBL "OPTIONAL" (LEN 0))
,TH-CLOTHES>
<ROUTINE RT-GN-BODY (TBL "OPTIONAL" (LEN 0) "AUX" PTR (OBJ <>))
<COND (<ZERO? .LEN>
<SET LEN <GET .TBL 0>>)>
<SET PTR <REST .TBL 2>>
<COND (<INTBL? ,TH-CLOTHES .PTR .LEN>
<RETURN ,TH-CLOTHES>)>
<REPEAT ()
<COND (<ZERO? .LEN>
<RETURN <>>)
(<MC-IS? <SET OBJ <GET .PTR 0>> ,FL-BODYPART>
<RETURN .OBJ>)>
<SET PTR <REST .PTR 2>>
<DEC LEN>>>
<ROUTINE RT-GN-INTNUM (TBL "OPTIONAL" (LEN 0))
<COND (<MC-VERB? WAIT WAIT-FOR>
<RETURN ,TH-INTNUM>)
(T
<RETURN ,TH-SAFETY-DEPOSIT-BOX>)>>
<ROUTINE RT-GN-ETHERIUM (TBL "OPT" (LEN 0))
<COND (<MC-VERB? SMELL INHALE> ,TH-ETHERIUM-GAS)
(<MC-VERB? MUNG OPEN LOOK-INSIDE> ,TH-ETHERIUM-AMPOULE)>>
<ROUTINE RT-GN-TOWER (TBL "OPTIONAL" (LEN 0))
,LG-TOWER>

BIN
growl Normal file

Binary file not shown.

BIN
growl-ss1 Normal file

Binary file not shown.

BIN
growl.was-mid Normal file

Binary file not shown.

BIN
heart Normal file

Binary file not shown.

BIN
heart-ss1 Normal file

Binary file not shown.

BIN
heart1.was-mid Normal file

Binary file not shown.

BIN
heart3.was-mid Normal file

Binary file not shown.

298
hints.zabstr Normal file
View File

@ -0,0 +1,298 @@
<FILE-FLAGS CLEAN-STACK?>
<GLOBAL GL-HINT-WARNING <> %<> WORD>
<GLOBAL GL-HINTS-OFF <> %<> WORD>
<DEFINE-ROUTINE V-HINTS-NO>
<CONSTANT RETURN-SEE-HINT " RETURN = see hint">
<CONSTANT RETURN-SEE-HINT-LEN <LENGTH " RETURN = see hint">>
<CONSTANT Q-MAIN-MENU "Q = main menu">
<CONSTANT Q-MAIN-MENU-LEN <LENGTH "Q = main menu">>
<GLOBAL GL-LINE-TABLE <PTABLE 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22>
%<> WORD>
<CONSTANT GL-COLUMN-TABLE <PTABLE 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4>>
<DEFINE20 CONSTRUCT-HINTS (COUNT-NAME "TUPLE" STUFF "AUX" (SS <>) (HL (T)) (HLL
.HL) V (CL (T)) (CLL .CL) TCL TCLL) <REPEAT ((CT 0)) <COND (<OR <EMPTY? .STUFF>
<TYPE? <1 .STUFF> STRING>> <COND (<NOT .SS> <SET SS .STUFF> <SET TCL (T)> <SET
TCLL .TCL> <SET CT 0>) (T <SET V <SUBSTRUC .SS 0 <- <LENGTH .SS> <LENGTH .STUFF
>>>> <SET HLL <REST <PUTREST .HLL (<EVAL <FORM PLTABLE !.V>>)>>> <COND (.
COUNT-NAME <SET CLL <REST <PUTREST .CLL (<EVAL <FORM TABLE (BYTE) !<REST .TCL!>
>>)>>> <SET TCL (T)> <SET TCLL .TCL> <SET CT 0>)> <SET SS .STUFF>)> <COND (<
EMPTY? .STUFF> <RETURN>)> <SET STUFF <REST .STUFF>>) (T <COND (.COUNT-NAME <
COND (<1? <MOD <SET CT <+ .CT 1>> 2>> <SET TCLL <REST <PUTREST .TCLL (0)>>>)>)>
<SET STUFF <REST .STUFF>>)>> <COND (.COUNT-NAME <EVAL <FORM CONSTANT .
COUNT-NAME <EVAL <FORM PTABLE !<REST .CL!>>>>>)> <EVAL <FORM PLTABLE !<REST .HL
!>>>>
<CONSTANT K-HINTS <CONSTRUCT-HINTS K-HINT-COUNTS "STARTERS" <PLTABLE
"How do I get into the house?"
"Mrs Hudson is expecting you, so you shouldn't have to do
anything too unusual." "Have you tried kicking down the door?"
"KNOCK ON THE DOOR."> <PLTABLE "How do I get into the parlour?"
"Mrs Hudson wants you to attend to something first."
"Get Holmes's mind off the drug."> <PLTABLE "How do I get into the kitchen?"
"Don't look at the next clue until you have opened the trap door in the hall."
"You're cheating, aren't you?" "There is no trap door." "There is no kitchen."
"Don't let the existence of these questions influence your playing of the game."
> <PLTABLE "How do I get into the bedroom?" "Only Holmes can open that door."
"When the visitor leaves, Holmes will open it."> <PLTABLE
"How do I get onto the roof?" "The same way you got into the kitchen."> <
PLTABLE "Will Mrs Hudson do anything for me?" "Have you tried kissing her?"
"Have you tried bribing her?"
"The sad fact is that she won't do anything for you."> <PLTABLE
"Can I get Holmes out of his stupor?"
"Holmes is bored with the commonplace events of everyday life."
"He needs some mental excitement."
"Newspapers generally contain interesting items."
"For a doctor, you're not too bright. Read him the newspaper. (Or tell him about the visitor)."
> <PLTABLE "Why does the clue paper exist?"
"It looks like the thief is challenging Sherlock Holmes to a duel of wits."
"Unlike yourself, Sherlock is not unarmed for such a duel."
"The thief is laying down a trail of clues for Holmes to follow."> <PLTABLE
"What's the answer to the 1st riddle?"
"The verse refers to a particular place."
"The place is the spot where most English royalty is buried."
"Westminster Abbey."> <PLTABLE "What's the answer to the 2nd riddle?"
"The verse refers to the last of the Tudor monarchs."
"She was called the \"Virgin Queen.\"" "Elizabeth I."> <PLTABLE
"What's the answer to the 3rd riddle?" "The discoverer of the law of gravity."
"Sir Isaac Newton."> <PLTABLE "What's the answer to the 4th riddle?"
"Don't read the next clue until you have thoroughly explored Westminster Abbey."
"Have you looked around in the Jerusalem Chamber?"
"The fourth verse refers to Henry V."> <PLTABLE "Where is the lamp?"
"It's in Holmes's bedroom."> <PLTABLE "Who is the thief?" "Who do you think?">
"CABS" <PLTABLE "How do I hail a cab?"
"Consult the sample transcript in your game manual."> <PLTABLE
"Why does the growler cab get lost?" "The driver is friendly, but stupid."
"The driver is stupid, but friendly."
"Give up. He'll never take you where you want to go."> "WESTMINSTER ABBEY" <
PLTABLE "Are the tombs important?" "They are to the people buried in them."
"Yes."> <PLTABLE "How do I make a brass rubbing?"
"Take a piece of paper from the pacquet of paper, put it on the
tomb of your choice, and then rub it with the crayon."> <PLTABLE
"What should I make rubbings of?"
"Do not read the next clue until you have solved the verses on
the thief's clue paper."
"The tombs of Queen Elizabeth, Sir Isaac Newton and Henry V."> <PLTABLE
"Why am I making brass rubbings?"
"The thief is trying to send messages to Sherlock."
"He wouldn't want his messages to be visible to everyone, now would he?"
"Have you visited the British Museum yet?"
"The book on the table in the British Museum contains a clue
that will help you." "There is some invisible writing on some of the tombs."
"When you make a rubbing, the invisible ink is transferred
onto the back of the paper."
"Invisible ink usually becomes visible when heated."
"Heat the paper over the candles in the Evangelist Chapel."
"Turn the paper over."> <PLTABLE "Where is the Stone of Scone?"
"It belongs under the Coronation Chair in Edward the Confessor's
Chapel - but we knew it was going to be stolen in 1950 and then returned
several months later. We figured that was enough excitement for any one rock,
so we left it out of the game, safe from your grubby paws."> <PLTABLE
"What's the Son of Mars answer?" "Admiral Lord Nelson."> <PLTABLE
"What's the Chopper answer?" "Charles I."> <PLTABLE
"What's the London Bridge answer?" "Under London Bridge."> <PLTABLE
"What's the answer to life's riddle?"
"If we knew that, do you think we'd be sitting around writing games?"> <PLTABLE
"What's the Pussycat answer?" "Go to the Tower of London."> <PLTABLE
"What's the Number answer?"
"Have you looked at the statue of William the Conqueror?"
"Have you read the sign on the Monument?"
"Have you ever read the Charge of the Light Brigade?" "600."> <PLTABLE
"How about Hickory Dickory Dock?" "Big Ben."> "BRITISH MUSEUM" <PLTABLE
"How do I get past the librarian?"
"Think of the room not as a museum, but as a library."
"Have you read the sign on the librarian's desk?"
"Has it occurred to you that he's doing an awful lot of talking?"
"Tell him to be quiet."> "ST PAUL'S" <PLTABLE "What is a Whispering Gallery?"
"It is a place where you can eavesdrop on other people from
far away."> <PLTABLE "How do I get up there?"
"Take the stairs up from the clerestory."> <PLTABLE
"How do I get to the clerestory?"
"You can't. St Paul's isn't even in the game."
"We just like the word clerestory."> "TRAFALGAR SQUARE" <PLTABLE
"Are the pigeons important?" "Only to other pigeons."> <PLTABLE
"Is the statue important?" "Yes." "Have you looked at it?"
"Have you looked at it closely?" "Have you looked at it through a telescope?">
<PLTABLE "Is the column important?" "Yes."
"If it wasn't there, we'd have to come up with some other way
of keeping the statue out of your reach."> <PLTABLE "Is anything important?"
"Like, wow, man. Heavy question!"> "ON THE THAMES" <PLTABLE
"How do I stop rowing in circles?"
"Has anyone told you you're not playing with a full deck?"
"Has anyone told you you're not rowing with both oars in the water?"
"You need two oars to steer the boat."
"Don't read the next two clues unless you want to know where the other oar is."
"The other oar is in another boat."
"It's in Captain Bligh's boat in the Black Museum."> <PLTABLE
"How do I stop the boat?" "Type, 'Whoa, Boat!'"
"Just kidding. Drop the anchor."> <PLTABLE "How do I launch the boat?"
"Got any rocket fuel?" "Type, 'Launch boat.'"
"(Make sure you're in the boat and the anchor's up first.)"> <PLTABLE
"How do I land the boat?"
"You can only land the boat at the Embankment or outside Traitor's Gate."
"Type: N or LAND BOAT."> <PLTABLE "How do I get the paddle?"
"You can't get the paddle when you're outside Traitor's Gate."
"If you don't have the paddle, you need two oars to row back up the river."
"If you're on the river without a paddle or both oars, you're making a big mistake."
"You can only take the paddle after you've entered the Tower."> <PLTABLE
"Can I stop the man taking the boat?"
"No, you can't. But after all, it's his boat."> "VICTORIA STATION" <PLTABLE
"What time does the last train leave?" "The timetable is posted on the wall."
"9:15 p.m."> <PLTABLE "What track does it leave from?" "Track 29."> <PLTABLE
"How much is a round-trip ticket?"
"Why are you reading clues about a place that isn't even in the game?">
"COVENT GARDEN" <PLTABLE "What is the matter with the girl?"
"She has a bad heart." "Perhaps some medicine...."
"Be careful. Drugs are dangerous."> <PLTABLE "How do I revive her?"
"Have you made a positive diagnosis?"
"Listen to the girl with your stethoscope."
"If her heart is abnormally fast, give her something to slow it down."
"An unusually fast heartbeat is known as tachycardia."
"If her heart is abnormally slow, give her something to speed it up."
"An unusually slow heartbeat is know as bradycardia."
"Belladonna will speed up a slow heart."
"Digitalis will slow down a fast heart." "The drugs are in your medicine bag.">
<PLTABLE "Where is the stethoscope?"
"Where do most doctors carry their stethoscopes?" "You are not most doctors."
"You have it when you start the game."
"Sorry about this. It turns out that Watson always carries his
stethoscope in his hat. Really. (Read \"A Scandal in Bohemia.\")">
"MADAME TUSSAUD'S" <PLTABLE "How do I get past the guard dog?"
"He won't let you carry any matches inside." "OK. So you already knew that."
"He won't let you carry in any flames that he can see."
"Alright, so you knew that too. How about flames that he can't see?"
"Something that burns without a flame, for example." "Like tobacco maybe."
"Light the pipe, drop the match, and go on in."> <PLTABLE
"What do I do with the axe?"
"The axe doesn't do much except cut down on the number of other things you can carry."
> <PLTABLE "How can I light the torch?"
"Light it from something that's already burning."
"Light it from a burning piece of paper."
"Light a piece of paper from the pipe, and then use it to light the torch.">
"SCOTLAND YARD" <PLTABLE "Will Lestrade talk to me in his office?"
"He doesn't like you." "He really doesn't like you." "What office?">
"BANK OF ENGLAND" <PLTABLE "How do I get inside the bank?"
"Despite the guard's assertions to the contrary, he can be bribed."
"Give him something valuable." "Some gems might do the trick."
"Give him the ruby, the sapphire, the emerald and the opal."> <PLTABLE
"How do I get inside the vault?" "The door has a combination lock on it."
"The tumblers turn too quietly for you to hear without amplification."
"Listen to the door with the stethoscope, and then turn the dial left or right."
"A 'clunk' means you're going the wrong way."
"A 'whirr' means you're going the right way."
"A 'click' means you should reverse directions."
"The combination is right twice, left once, right twice."> <PLTABLE
"Which box should I open?"
"Have you solved the second clue on Sir Isaac Newton's tomb?" "Open box 600.">
<PLTABLE "How do I open safety deposit boxes?" "Do you have any dynamite?"
"Try using a key." "The bank guard has it." "It's in his pocket."
"How good a pickpocket are you?"
"How good a pickpocket are the people you know?" "Ask Wiggins to steal it."> <
PLTABLE "How can I stop the kidnapping?" "Hire bodyguards."
"Put Holmes in your medical bag." "You can't."> "DIOGENES CLUB" <PLTABLE
"What does Mycroft want from me?" "Your blood?" "Your first-born male child?"
"Sherlock's ring."> <PLTABLE "How do I get the token?"
"Show any of the gems you have found to Sherlock."> "TOWER OF LONDON" <PLTABLE
"How do I get into the Tower?" "Give the password to the beefeater."
"You must get the password from someone who has government connections."
"Mycroft Holmes knows the password."
"Don't continue unless Sherlock Holmes has been kidnapped."
"Go to the Diogenes Club and ask for Mycroft. The butler will
ask you for a token. Give him the token. Mycroft will appear and give
you the password." "Return to the Tower and give the guard the password."
"Just type GUARD, [PASSWORD]."> <PLTABLE "How do I get out of the Tower?"
"The beefeater won't let you out. You must find another exit."
"The only other way out is through Traitor's Gate."
"The portcullis is operated by the chain above it."
"You do not weigh enough to pull down the chain."
"Put on the suit of armour in the dungeon of the White Tower and then pull on the chain."
> "GEMS" <PLTABLE "Where is the diamond?" "What diamond?"> <PLTABLE
"How do I get the diamond?" "See previous hint."> <PLTABLE
"Where is the sapphire?" "Did you solve the Hickory Dickory Dock riddle?"
"It's stuck to the clapper of Big Ben."> <PLTABLE "How do I get the sapphire?"
"Have you tried driving a hook into the ceiling, throwing a rope
over the hook, climbing up onto the rail, swinging across the hollow shaft
while screaming like Tarzan, and grabbing the sapphire as you swing by?"
"Just asking." "Wait until the hour strikes. The clapper will swing your way."
"You need to use your hands while the bell is ringing."
"Put the cotton balls in your ears before the bell starts to ring."
"The cotton balls are in the blue pill bottle."> <PLTABLE "Where is the ruby?"
"Did you solve the Son of Mars riddle?" "It's somewhere in Trafalgar Square."
"It's on the statue in Trafalgar Square." "It's in Nelson's blind eye."
"You can discover it only by looking through the telescope."> <PLTABLE
"How do I get the ruby?" "You can't get up there."
"Someone - or something - else will have to get it for you."
"Some kind of trained bird might do it."
"Old Sherman, who lives in Pinchin Lane, trains animals."
"Get the bird from Sherman. Take it to Trafalgar Square. Show
the ruby to the pigeon, ask him to get it, and then let him go."
"Do not read the next clue until you have done all of the above."
"Did we mention that it's a homing pigeon?"
"Return to Sherman's shop and ask him about the bird."> <PLTABLE
"Where is the emerald?" "Did you solve the Chopper riddle?"
"It's in the Chamber of Horrors." "It's hidden in one of the statues."
"It's in the wax head of Charles I."> <PLTABLE "How do I get the emerald?"
"It's encased in wax. What springs to mind?" "You need to melt the head."
"You can't melt the head unless you remove it from the statue."
"You need something that puts out enough heat to melt a big gob of wax."
"The torch will melt the wax head."> <PLTABLE "Where is the sceptre?"
"In the sceptre tank?" "Sorry about that." "There is no sceptre."> <PLTABLE
"How do I get the sceptre?" "Dive into the sceptre tank."
"Don't blame us. You're the one who keeps reading these bogus clues.">
"MORE GEMS" <PLTABLE "Where is the opal?"
"Have you solved the London Bridge riddle?"
"It's in the clump of moss under London Bridge."> <PLTABLE
"How do I get the opal?" "Can you lower the bridge?" "Can you raise the water?"
"Wait for high tide."
"The newspaper that came with your game contains the tide tables for the weekend."
> <PLTABLE "Where is the zorkmid?" "It's in the... oops. Sorry. Wrong game.">
<PLTABLE "How do I get the zorkmid?" "Buy Zork I." "Buy Enchanter."
"Buy Sorcerer." "You get the idea."> <PLTABLE "Where is the topaz?"
"In a safety deposit box in the Bank of England."
"Have you solved the number riddle?" "It's in box 600."> <PLTABLE
"How do I get the topaz?" "See the clues for the Bank of England."> <PLTABLE
"Where is the garnet?" "Did you solve the Tower of London riddle?"
"It's in the butt of malmsey in the Bowyer Tower."> <PLTABLE
"How do I get the garnet?" "Have you tried drinking the wine?"
"Pretty tasty stuff, isn't it?" "You need to drain the keg somehow."
"You need to remove the bung." "Knock out the bung with the mace."
"Don't read the next clue until you have done all of the above."
"Ask Wiggins to get the garnet for you."> <PLTABLE
"Why are the gems important?"
"You don't think the thief has been hiding gems all over London just for the fun of it, do you?"
"Perhaps he is trying to send Sherlock yet another message."
"Have you looked at any of the gems?" "Have you looked at any of them closely?"
"Look at each of the gems through the magnifying glass."> "THE LAIR" <PLTABLE
"Can I stop Akbar's knocking me out?" "Knock him out first."
"Perhaps you could smuggle something in."
"Have you noticed the henchman's religion?"
"He probably won't disturb your hat." "Perhaps the etherium ampoule...."> <
PLTABLE "Can I stop Moriarty when I wake up?"
"If he is free to move around, he will always win." "Tie him up."
"Don't forget to tie up the henchman, too."> "MISCELLANEOUS" <PLTABLE
"Why do I finish without 100 points?"
"If you play the game from start to finish and solve all
the puzzles, you will end up with 100 points. If, however, you start the
game and play through it using information you acquired in a previous
session, you may have neglected to perform a few actions for which you
received points. This should not be of concern to anyone who is content
with failing to discover the highest ranking available to the game player."> <
PLTABLE "Can I abbreviate \"stethoscope\"?"
"Yes. It can be abbreviated to STETH or SS."> <PLTABLE
"What is the square root of 64?" "Eight.">>>
<GLOBAL GL-CUR-POS 0 %<> WORD>
<GLOBAL GL-QUEST-NUM 1 %<> WORD>
<GLOBAL GL-CHAPT-NUM 1 %<> WORD>
<CONSTANT GL-DIROUT-TBL <TABLE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>>
<DEFINE-ROUTINE V-HINT>
<DEFINE-ROUTINE RT-PICK-QUESTION>
<DEFINE-ROUTINE RT-ERASE-CURSOR>
<DEFINE-ROUTINE RT-NEW-CURSOR>
<DEFINE-ROUTINE RT-INVERSE-LINE>
<DEFINE-ROUTINE RT-DISPLAY-HINT>
<DEFINE-ROUTINE RT-PUT-UP-QUESTIONS>
<DEFINE-ROUTINE RT-PUT-UP-CHAPTERS>
<DEFINE-ROUTINE RT-INIT-HINT-SCREEN>
<DEFINE-ROUTINE RT-CENTER-LINE>
<DEFINE-ROUTINE RT-LEFT-LINE>
<DEFINE-ROUTINE RT-RIGHT-LINE>

368
hints.zap Normal file
View File

@ -0,0 +1,368 @@
.FUNCT V-HINTS-NO
EQUAL? GL-PRSO,ROOMS /?CCL3
PRINT K-DONT-UNDERSTAND-MSG
CRLF
RETURN 2
?CCL3: SET 'GL-HINTS-OFF,TRUE-VALUE
PRINTI "[Hints have been disallowed for this session.]"
CRLF
RETURN 2
.FUNCT V-HINT,CHR,MAXC,C,Q,WHO
?FCN: ZERO? GL-HINTS-OFF /?CCL3
ICALL RT-PERFORM,V?HINTS-NO,ROOMS
RETURN 2
?CCL3: ZERO? GL-HINT-WARNING \?CCL5
SET 'GL-HINT-WARNING,TRUE-VALUE
PRINTI "[Warning: It is recognized that the temptation for help may at times be so exceedingly strong that you might fetch hints prematurely. Therefore, you may at any time during the story type HINTS OFF, and this will disallow the seeking out of help for the present session of the story. If you still want a hint now, indicate HINT.]"
CRLF
RETURN 2
?CCL5: ZERO? WHO \?CND1
CALL1 RT-WHO-SAYS? >WHO
EQUAL? WHO,CH-HOLMES,CH-WIGGINS \?CND1
EQUAL? WHO,CH-HOLMES \?CCL11
PRINTI "Holmes looks at you impatiently and sighs, ""Very well, Watson. If you must."""
JUMP ?CND9
?CCL11: PRINTI "Wiggins looks up at you with relief and says, ""Good idea, guv. We'll never work this out on our own."""
?CND9: CRLF
CRLF
PRINTI "[Press any key to continue.]"
CRLF
INPUT 1
?CND1: SET 'SOUND-QUEUED?,FALSE-VALUE
ICALL1 KILL-SOUNDS
SET 'MAXC,18
ICALL1 RT-INIT-HINT-SCREEN
CURSET 5,1
ICALL1 RT-PUT-UP-CHAPTERS
SUB GL-CHAPT-NUM,1 >GL-CUR-POS
ICALL1 RT-NEW-CURSOR
?PRG12: INPUT 1 >CHR
EQUAL? CHR,81,113 \?CCL16
SET 'Q,TRUE-VALUE
JUMP ?REP13
?CCL16: EQUAL? CHR,78,110 \?CCL18
ICALL1 RT-ERASE-CURSOR
EQUAL? GL-CHAPT-NUM,MAXC \?CCL21
SET 'GL-CUR-POS,0
SET 'GL-CHAPT-NUM,1
SET 'GL-QUEST-NUM,1
JUMP ?CND19
?CCL21: INC 'GL-CUR-POS
INC 'GL-CHAPT-NUM
SET 'GL-QUEST-NUM,1
?CND19: ICALL1 RT-NEW-CURSOR
JUMP ?PRG12
?CCL18: EQUAL? CHR,80,112 \?CCL23
ICALL1 RT-ERASE-CURSOR
EQUAL? GL-CHAPT-NUM,1 \?CCL26
SET 'GL-CHAPT-NUM,MAXC
SUB MAXC,1 >GL-CUR-POS
JUMP ?CND24
?CCL26: DEC 'GL-CUR-POS
DEC 'GL-CHAPT-NUM
?CND24: SET 'GL-QUEST-NUM,1
ICALL1 RT-NEW-CURSOR
JUMP ?PRG12
?CCL23: EQUAL? CHR,13,10 \?PRG12
ICALL1 RT-PICK-QUESTION
?REP13: ZERO? Q /?FCN
CLEAR -1
ICALL1 V-REFRESH
CALL1 RT-WHO-SAYS? >WHO
EQUAL? WHO,CH-HOLMES \?CCL32
CRLF
PRINTI "Holmes barely glances at you and snaps, ""At last. Now may we proceed?"""
CRLF
JUMP ?CND30
?CCL32: EQUAL? WHO,CH-WIGGINS \?CCL34
CRLF
PRINTI "Wiggins tugs your sleeve and asks hopefully, ""Learn anything?"""
CRLF
JUMP ?CND30
?CCL34: CRLF
PRINTI "Back to the story..."
CRLF
?CND30: ZERO? SOUND-ON? \?CCL36
RETURN 2
?CCL36: ICALL1 CHECK-LOOPING
RETURN 2
.FUNCT RT-PICK-QUESTION,CHR,MAXQ,Q
?FCN: ICALL2 RT-INIT-HINT-SCREEN,FALSE-VALUE
ICALL RT-LEFT-LINE,3,RETURN-SEE-HINT,RETURN-SEE-HINT-LEN
ICALL RT-RIGHT-LINE,3,Q-MAIN-MENU,Q-MAIN-MENU-LEN
GET K-HINTS,GL-CHAPT-NUM
GET STACK,0
SUB STACK,1 >MAXQ
CURSET 5,1
ICALL1 RT-PUT-UP-QUESTIONS
SUB GL-QUEST-NUM,1 >GL-CUR-POS
ICALL1 RT-NEW-CURSOR
?PRG1: INPUT 1 >CHR
EQUAL? CHR,81,113 \?CCL5
SET 'Q,TRUE-VALUE
JUMP ?REP2
?CCL5: EQUAL? CHR,78,110 \?CCL7
ICALL1 RT-ERASE-CURSOR
EQUAL? GL-QUEST-NUM,MAXQ \?CCL10
SET 'GL-CUR-POS,0
SET 'GL-QUEST-NUM,1
JUMP ?CND8
?CCL10: INC 'GL-CUR-POS
INC 'GL-QUEST-NUM
?CND8: ICALL1 RT-NEW-CURSOR
JUMP ?PRG1
?CCL7: EQUAL? CHR,80,112 \?CCL12
ICALL1 RT-ERASE-CURSOR
EQUAL? GL-QUEST-NUM,1 \?CCL15
SET 'GL-QUEST-NUM,MAXQ
SUB MAXQ,1 >GL-CUR-POS
JUMP ?CND13
?CCL15: DEC 'GL-CUR-POS
DEC 'GL-QUEST-NUM
?CND13: ICALL1 RT-NEW-CURSOR
JUMP ?PRG1
?CCL12: EQUAL? CHR,13,10 \?PRG1
ICALL1 RT-DISPLAY-HINT
?REP2: ZERO? Q /?FCN
RFALSE
.FUNCT RT-ERASE-CURSOR,?TMP1
GET GL-LINE-TABLE,GL-CUR-POS >?TMP1
GET GL-COLUMN-TABLE,GL-CUR-POS
SUB STACK,2
CURSET ?TMP1,STACK
PRINTC 32
RTRUE
.FUNCT RT-NEW-CURSOR,?TMP1
GET GL-LINE-TABLE,GL-CUR-POS >?TMP1
GET GL-COLUMN-TABLE,GL-CUR-POS
SUB STACK,2
CURSET ?TMP1,STACK
PRINTC 62
RTRUE
.FUNCT RT-INVERSE-LINE,CENTER-HALF
HLIGHT K-H-INV
GETB 0,33
ICALL2 RT-PRINT-SPACES,STACK
HLIGHT K-H-NRM
RTRUE
.FUNCT RT-DISPLAY-HINT,H,MX,CNT,CHR,FLG,N,CV,SHIFT?,COUNT-OFFS,CURCX,CURC,?TMP1
SET 'CNT,2
SET 'FLG,TRUE-VALUE
CLEAR -1
SPLIT 3
SCREEN K-S-WIN
CURSET 1,1
ICALL1 RT-INVERSE-LINE
ICALL RT-CENTER-LINE,1,STR?641,16
CURSET 3,1
ICALL1 RT-INVERSE-LINE
ICALL RT-LEFT-LINE,3,STR?642
ICALL RT-RIGHT-LINE,3,STR?643,17
CURSET 2,1
ICALL1 RT-INVERSE-LINE
HLIGHT K-H-BLD
GET K-HINTS,GL-CHAPT-NUM >?TMP1
ADD GL-QUEST-NUM,1
GET ?TMP1,STACK >H
SUB GL-CHAPT-NUM,1
GET K-HINT-COUNTS,STACK >CV
GET H,1
ICALL RT-CENTER-LINE,2,STACK
HLIGHT K-H-NRM
GET H,0 >MX
SCREEN K-S-NOR
CRLF
MOD GL-QUEST-NUM,2 >SHIFT?
SUB GL-QUEST-NUM,1
DIV STACK,2 >COUNT-OFFS
GETB CV,COUNT-OFFS >CURCX
ZERO? SHIFT? /?CCL3
SHIFT CURCX,-4
JUMP ?CND1
?CCL3: PUSH CURCX
?CND1: BAND STACK,15
ADD 2,STACK >CURC
?PRG4: EQUAL? CNT,CURC /?PRG9
GET H,CNT
PRINT STACK
CRLF
INC 'CNT
JUMP ?PRG4
?PRG9: ZERO? FLG /?CCL13
GRTR? CNT,MX \?CCL13
SET 'FLG,FALSE-VALUE
PRINTI "[That's all.]"
CRLF
JUMP ?CND11
?CCL13: ZERO? FLG /?CND11
SUB MX,CNT
ADD STACK,1 >N
PRINTC 91
PRINTN N
PRINTI " hint"
EQUAL? N,1 /?CND17
PRINTC 115
?CND17: PRINTI " left.]"
PRINTI " -> "
SET 'FLG,FALSE-VALUE
?CND11: INPUT 1 >CHR
EQUAL? CHR,81,113 \?CCL21
ZERO? SHIFT? /?CCL24
GETB CV,COUNT-OFFS
BAND STACK,15 >?TMP1
SUB CNT,2
SHIFT STACK,4
BOR ?TMP1,STACK
PUTB CV,COUNT-OFFS,STACK
RTRUE
?CCL24: GETB CV,COUNT-OFFS
BAND STACK,240 >?TMP1
SUB CNT,2
BOR ?TMP1,STACK
PUTB CV,COUNT-OFFS,STACK
RTRUE
?CCL21: EQUAL? CHR,13,10 \?PRG9
GRTR? CNT,MX /?PRG9
SET 'FLG,TRUE-VALUE
GET H,CNT
PRINT STACK
CRLF
IGRTR? 'CNT,MX \?PRG9
SET 'FLG,FALSE-VALUE
PRINTI "[Final hint]"
CRLF
JUMP ?PRG9
.FUNCT RT-PUT-UP-QUESTIONS,ST,MXQ,MXL,?TMP1
SET 'ST,1
GET K-HINTS,GL-CHAPT-NUM
GET STACK,0
SUB STACK,1 >MXQ
GETB 0,32
SUB STACK,1 >MXL
?PRG1: GRTR? ST,MXQ /TRUE
SUB ST,1
GET GL-LINE-TABLE,STACK >?TMP1
SUB ST,1
GET GL-COLUMN-TABLE,STACK
SUB STACK,1
CURSET ?TMP1,STACK
PRINTC 32
GET K-HINTS,GL-CHAPT-NUM >?TMP1
ADD ST,1
GET ?TMP1,STACK
GET STACK,1
PRINT STACK
INC 'ST
JUMP ?PRG1
.FUNCT RT-PUT-UP-CHAPTERS,ST,MXC,MXL,?TMP1
SET 'ST,1
SET 'MXC,18
GETB 0,32
SUB STACK,1 >MXL
?PRG1: GRTR? ST,MXC /TRUE
SUB ST,1
GET GL-LINE-TABLE,STACK >?TMP1
SUB ST,1
GET GL-COLUMN-TABLE,STACK
SUB STACK,1
CURSET ?TMP1,STACK
PRINTC 32
GET K-HINTS,ST
GET STACK,1
PRINT STACK
INC 'ST
JUMP ?PRG1
.FUNCT RT-INIT-HINT-SCREEN,THIRD
ASSIGNED? 'THIRD /?CND1
SET 'THIRD,TRUE-VALUE
?CND1: CLEAR -1
GETB 0,32
SUB STACK,1
SPLIT STACK
SCREEN K-S-WIN
CURSET 1,1
ICALL1 RT-INVERSE-LINE
CURSET 2,1
ICALL1 RT-INVERSE-LINE
CURSET 3,1
ICALL1 RT-INVERSE-LINE
ICALL RT-CENTER-LINE,1,STR?641,16
ICALL RT-LEFT-LINE,2,STR?644
ICALL RT-RIGHT-LINE,2,STR?645,12
ZERO? THIRD /FALSE
ICALL RT-LEFT-LINE,3,STR?646
CALL RT-RIGHT-LINE,3,STR?647,16
RSTACK
.FUNCT RT-CENTER-LINE,LN,STR,LEN,INV
ASSIGNED? 'INV /?CND1
SET 'INV,TRUE-VALUE
?CND1: ZERO? LEN \?CND3
DIROUT K-D-TBL-ON,GL-DIROUT-TBL
PRINT STR
DIROUT K-D-TBL-OFF
GET GL-DIROUT-TBL,0 >LEN
?CND3: GETB 0,33
SUB STACK,LEN
DIV STACK,2
CURSET LN,STACK
ZERO? INV /?CND5
HLIGHT K-H-INV
?CND5: PRINT STR
ZERO? INV /FALSE
HLIGHT K-H-NRM
RTRUE
.FUNCT RT-LEFT-LINE,LN,STR,INV
ASSIGNED? 'INV /?CND1
SET 'INV,TRUE-VALUE
?CND1: CURSET LN,1
ZERO? INV /?CND3
HLIGHT K-H-INV
?CND3: PRINT STR
ZERO? INV /FALSE
HLIGHT K-H-NRM
RTRUE
.FUNCT RT-RIGHT-LINE,LN,STR,LEN,INV
ASSIGNED? 'INV /?CND1
SET 'INV,TRUE-VALUE
?CND1: ZERO? LEN \?CND3
DIROUT 3,GL-DIROUT-TBL
PRINT STR
DIROUT -3
GET GL-DIROUT-TBL,0 >LEN
?CND3: GETB 0,33
SUB STACK,LEN
CURSET LN,STACK
ZERO? INV /?CND5
HLIGHT K-H-INV
?CND5: PRINT STR
ZERO? INV /FALSE
HLIGHT K-H-NRM
RTRUE
.ENDI

747
hints.zil Normal file
View File

@ -0,0 +1,747 @@
;"HINTS for SHERLOCK"
<FILE-FLAGS CLEAN-STACK?>
<GLOBAL GL-HINT-WARNING <>>
<GLOBAL GL-HINTS-OFF <>>
<ROUTINE V-HINTS-NO ()
<COND (<NOT <MC-PRSO? ,ROOMS>>
<TELL ,K-DONT-UNDERSTAND-MSG CR>)
(T
<SETG GL-HINTS-OFF T>
<TELL "[Hints have been disallowed for this session.]" CR>)>
<RFATAL>>
<CONSTANT RETURN-SEE-HINT " RETURN = see hint">
<CONSTANT RETURN-SEE-HINT-LEN <LENGTH " RETURN = see hint">>
<CONSTANT Q-MAIN-MENU "Q = main menu">
<CONSTANT Q-MAIN-MENU-LEN <LENGTH "Q = main menu">>
;"zeroth (first) element is 5"
<GLOBAL GL-LINE-TABLE
<PTABLE
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22>>
;"zeroth (first) element is 4"
<CONSTANT GL-COLUMN-TABLE
<PTABLE
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4>>
; "If the first argument is non-false, build a parallel impure table
for storing the count of answers already seen; make it a constant
under the given name."
<DEFINE20 CONSTRUCT-HINTS (COUNT-NAME "TUPLE" STUFF "AUX" (SS <>)
(HL (T)) (HLL .HL) V
(CL (T)) (CLL .CL)
TCL TCLL)
<REPEAT ((CT 0))
<COND (<OR <EMPTY? .STUFF>
<TYPE? <1 .STUFF> STRING>>
; "Chapter break"
<COND
(<NOT .SS>
; "First one, just do setup"
<SET SS .STUFF>
<SET TCL (T)>
<SET TCLL .TCL>
<SET CT 0>)
(T
<SET V <SUBSTRUC .SS 0 <- <LENGTH .SS> <LENGTH .STUFF>>>>
; "One chapter's worth"
<SET HLL <REST <PUTREST .HLL (<EVAL <FORM PLTABLE !.V>>)>>>
<COND (.COUNT-NAME
<SET CLL <REST <PUTREST .CLL
(<EVAL <FORM TABLE (BYTE)
!<REST .TCL>>>)>>>
<SET TCL (T)>
<SET TCLL .TCL>
<SET CT 0>)>
<SET SS .STUFF>)>
<COND (<EMPTY? .STUFF> <RETURN>)>
<SET STUFF <REST .STUFF>>)
(T
<COND (.COUNT-NAME
<COND (<1? <MOD <SET CT <+ .CT 1>> 2>>
<SET TCLL <REST <PUTREST .TCLL
(0)>>>)>)>
<SET STUFF <REST .STUFF>>)>>
<COND (.COUNT-NAME
<EVAL <FORM CONSTANT .COUNT-NAME
<EVAL <FORM PTABLE !<REST .CL>>>>>)>
<EVAL <FORM PLTABLE !<REST .HL>>>>
;"longest hint topic can be 17 chars"
<CONSTANT K-HINTS
<CONSTRUCT-HINTS K-HINT-COUNTS
"STARTERS"
<PLTABLE "How do I get into the house?"
"Mrs Hudson is expecting you, so you shouldn't have to do
anything too unusual."
"Have you tried kicking down the door?"
"KNOCK ON THE DOOR.">
<PLTABLE "How do I get into the parlour?"
"Mrs Hudson wants you to attend to something first."
"Get Holmes's mind off the drug.">
<PLTABLE "How do I get into the kitchen?"
"Don't look at the next clue until you have opened the trap door in the hall."
"You're cheating, aren't you?"
"There is no trap door."
"There is no kitchen."
"Don't let the existence of these questions influence your playing of the game.">
<PLTABLE "How do I get into the bedroom?"
"Only Holmes can open that door."
"When the visitor leaves, Holmes will open it.">
<PLTABLE "How do I get onto the roof?"
"The same way you got into the kitchen.">
<PLTABLE "Will Mrs Hudson do anything for me?"
"Have you tried kissing her?"
"Have you tried bribing her?"
"The sad fact is that she won't do anything for you.">
<PLTABLE "Can I get Holmes out of his stupor?"
"Holmes is bored with the commonplace events of everyday life."
"He needs some mental excitement."
"Newspapers generally contain interesting items."
"For a doctor, you're not too bright. Read him the newspaper. (Or tell him about the visitor).">
<PLTABLE "Why does the clue paper exist?"
"It looks like the thief is challenging Sherlock Holmes to a duel of wits."
"Unlike yourself, Sherlock is not unarmed for such a duel."
"The thief is laying down a trail of clues for Holmes to follow.">
<PLTABLE "What's the answer to the 1st riddle?"
"The verse refers to a particular place."
"The place is the spot where most English royalty is buried."
"Westminster Abbey.">
<PLTABLE "What's the answer to the 2nd riddle?"
"The verse refers to the last of the Tudor monarchs."
"She was called the \"Virgin Queen.\""
"Elizabeth I.">
<PLTABLE "What's the answer to the 3rd riddle?"
"The discoverer of the law of gravity."
"Sir Isaac Newton.">
<PLTABLE "What's the answer to the 4th riddle?"
"Don't read the next clue until you have thoroughly explored Westminster Abbey."
"Have you looked around in the Jerusalem Chamber?"
"The fourth verse refers to Henry V.">
<PLTABLE "Where is the lamp?"
"It's in Holmes's bedroom.">
<PLTABLE "Who is the thief?"
"Who do you think?">
"CABS"
<PLTABLE "How do I hail a cab?"
"Consult the sample transcript in your game manual.">
<PLTABLE "Why does the growler cab get lost?"
"The driver is friendly, but stupid."
"The driver is stupid, but friendly."
"Give up. He'll never take you where you want to go.">
"WESTMINSTER ABBEY"
<PLTABLE "Are the tombs important?"
"They are to the people buried in them."
"Yes.">
<PLTABLE "How do I make a brass rubbing?"
"Take a piece of paper from the pacquet of paper, put it on the
tomb of your choice, and then rub it with the crayon.">
<PLTABLE "What should I make rubbings of?"
"Do not read the next clue until you have solved the verses on
the thief's clue paper."
"The tombs of Queen Elizabeth, Sir Isaac Newton and Henry V.">
<PLTABLE "Why am I making brass rubbings?"
"The thief is trying to send messages to Sherlock."
"He wouldn't want his messages to be visible to everyone, now would he?"
"Have you visited the British Museum yet?"
"The book on the table in the British Museum contains a clue
that will help you."
"There is some invisible writing on some of the tombs."
"When you make a rubbing, the invisible ink is transferred
onto the back of the paper."
"Invisible ink usually becomes visible when heated."
"Heat the paper over the candles in the Evangelist Chapel."
"Turn the paper over.">
<PLTABLE "Where is the Stone of Scone?"
"It belongs under the Coronation Chair in Edward the Confessor's
Chapel - but we knew it was going to be stolen in 1950 and then returned
several months later. We figured that was enough excitement for any one rock,
so we left it out of the game, safe from your grubby paws.">
<PLTABLE "What's the Son of Mars answer?"
"Admiral Lord Nelson.">
<PLTABLE "What's the Chopper answer?"
"Charles I.">
<PLTABLE "What's the London Bridge answer?"
"Under London Bridge.">
<PLTABLE "What's the answer to life's riddle?"
"If we knew that, do you think we'd be sitting around writing games?">
<PLTABLE "What's the Pussycat answer?"
"Go to the Tower of London.">
<PLTABLE "What's the Number answer?"
"Have you looked at the statue of William the Conqueror?"
"Have you read the sign on the Monument?"
"Have you ever read the Charge of the Light Brigade?"
"600.">
<PLTABLE "How about Hickory Dickory Dock?"
"Big Ben.">
"BRITISH MUSEUM"
<PLTABLE "How do I get past the librarian?"
"Think of the room not as a museum, but as a library."
"Have you read the sign on the librarian's desk?"
"Has it occurred to you that he's doing an awful lot of talking?"
"Tell him to be quiet.">
"ST PAUL'S"
<PLTABLE "What is a Whispering Gallery?"
"It is a place where you can eavesdrop on other people from
far away.">
<PLTABLE "How do I get up there?"
"Take the stairs up from the clerestory.">
<PLTABLE "How do I get to the clerestory?"
"You can't. St Paul's isn't even in the game."
"We just like the word clerestory.">
"TRAFALGAR SQUARE"
<PLTABLE "Are the pigeons important?"
"Only to other pigeons.">
<PLTABLE "Is the statue important?"
"Yes."
"Have you looked at it?"
"Have you looked at it closely?"
"Have you looked at it through a telescope?">
<PLTABLE "Is the column important?"
"Yes."
"If it wasn't there, we'd have to come up with some other way
of keeping the statue out of your reach.">
<PLTABLE "Is anything important?"
"Like, wow, man. Heavy question!">
"ON THE THAMES"
<PLTABLE "How do I stop rowing in circles?"
"Has anyone told you you're not playing with a full deck?"
"Has anyone told you you're not rowing with both oars in the water?"
"You need two oars to steer the boat."
"Don't read the next two clues unless you want to know where the other oar is."
"The other oar is in another boat."
"It's in Captain Bligh's boat in the Black Museum.">
<PLTABLE "How do I stop the boat?"
"Type, 'Whoa, Boat!'"
"Just kidding. Drop the anchor.">
<PLTABLE "How do I launch the boat?"
"Got any rocket fuel?"
"Type, 'Launch boat.'"
"(Make sure you're in the boat and the anchor's up first.)">
<PLTABLE "How do I land the boat?"
"You can only land the boat at the Embankment or outside Traitor's Gate."
"Type: N or LAND BOAT.">
<PLTABLE "How do I get the paddle?"
"You can't get the paddle when you're outside Traitor's Gate."
"If you don't have the paddle, you need two oars to row back up the river."
"If you're on the river without a paddle or both oars, you're making a big mistake."
"You can only take the paddle after you've entered the Tower.">
<PLTABLE "Can I stop the man taking the boat?"
"No, you can't. But after all, it's his boat.">
"VICTORIA STATION"
<PLTABLE "What time does the last train leave?"
"The timetable is posted on the wall."
"9:15 p.m.">
<PLTABLE "What track does it leave from?"
"Track 29.">
<PLTABLE "How much is a round-trip ticket?"
"Why are you reading clues about a place that isn't even in the game?">
"COVENT GARDEN"
<PLTABLE "What is the matter with the girl?"
"She has a bad heart."
"Perhaps some medicine...."
"Be careful. Drugs are dangerous.">
<PLTABLE "How do I revive her?"
"Have you made a positive diagnosis?"
"Listen to the girl with your stethoscope."
"If her heart is abnormally fast, give her something to slow it down."
"An unusually fast heartbeat is known as tachycardia."
"If her heart is abnormally slow, give her something to speed it up."
"An unusually slow heartbeat is know as bradycardia."
"Belladonna will speed up a slow heart."
"Digitalis will slow down a fast heart."
"The drugs are in your medicine bag.">
<PLTABLE "Where is the stethoscope?"
"Where do most doctors carry their stethoscopes?"
"You are not most doctors."
"You have it when you start the game."
"Sorry about this. It turns out that Watson always carries his
stethoscope in his hat. Really. (Read \"A Scandal in Bohemia.\")">
"MADAME TUSSAUD'S"
<PLTABLE "How do I get past the guard dog?"
"He won't let you carry any matches inside."
"OK. So you already knew that."
"He won't let you carry in any flames that he can see."
"Alright, so you knew that too. How about flames that he can't see?"
"Something that burns without a flame, for example."
"Like tobacco maybe."
"Light the pipe, drop the match, and go on in.">
<PLTABLE "What do I do with the axe?"
"The axe doesn't do much except cut down on the number of other things you can carry.">
<PLTABLE "How can I light the torch?"
"Light it from something that's already burning."
"Light it from a burning piece of paper."
"Light a piece of paper from the pipe, and then use it to light the torch.">
"SCOTLAND YARD"
<PLTABLE "Will Lestrade talk to me in his office?"
"He doesn't like you."
"He really doesn't like you."
"What office?">
"BANK OF ENGLAND"
<PLTABLE "How do I get inside the bank?"
"Despite the guard's assertions to the contrary, he can be bribed."
"Give him something valuable."
"Some gems might do the trick."
"Give him the ruby, the sapphire, the emerald and the opal.">
<PLTABLE "How do I get inside the vault?"
"The door has a combination lock on it."
"The tumblers turn too quietly for you to hear without amplification."
"Listen to the door with the stethoscope, and then turn the dial left or right."
"A 'clunk' means you're going the wrong way."
"A 'whirr' means you're going the right way."
"A 'click' means you should reverse directions."
"The combination is right twice, left once, right twice.">
<PLTABLE "Which box should I open?"
"Have you solved the second clue on Sir Isaac Newton's tomb?"
"Open box 600.">
<PLTABLE "How do I open safety deposit boxes?"
"Do you have any dynamite?"
"Try using a key."
"The bank guard has it."
"It's in his pocket."
"How good a pickpocket are you?"
"How good a pickpocket are the people you know?"
"Ask Wiggins to steal it.">
<PLTABLE "How can I stop the kidnapping?"
"Hire bodyguards."
"Put Holmes in your medical bag."
"You can't.">
"DIOGENES CLUB"
<PLTABLE "What does Mycroft want from me?"
"Your blood?"
"Your first-born male child?"
"Sherlock's ring.">
<PLTABLE "How do I get the token?"
"Show any of the gems you have found to Sherlock.">
"TOWER OF LONDON"
<PLTABLE "How do I get into the Tower?"
"Give the password to the beefeater."
"You must get the password from someone who has government connections."
"Mycroft Holmes knows the password."
"Don't continue unless Sherlock Holmes has been kidnapped."
"Go to the Diogenes Club and ask for Mycroft. The butler will
ask you for a token. Give him the token. Mycroft will appear and give
you the password."
"Return to the Tower and give the guard the password."
"Just type GUARD, [PASSWORD].">
<PLTABLE "How do I get out of the Tower?"
"The beefeater won't let you out. You must find another exit."
"The only other way out is through Traitor's Gate."
"The portcullis is operated by the chain above it."
"You do not weigh enough to pull down the chain."
"Put on the suit of armour in the dungeon of the White Tower and then pull on the chain.">
"GEMS"
<PLTABLE "Where is the diamond?"
"What diamond?">
<PLTABLE "How do I get the diamond?"
"See previous hint.">
<PLTABLE "Where is the sapphire?"
"Did you solve the Hickory Dickory Dock riddle?"
"It's stuck to the clapper of Big Ben.">
<PLTABLE "How do I get the sapphire?"
"Have you tried driving a hook into the ceiling, throwing a rope
over the hook, climbing up onto the rail, swinging across the hollow shaft
while screaming like Tarzan, and grabbing the sapphire as you swing by?"
"Just asking."
"Wait until the hour strikes. The clapper will swing your way."
"You need to use your hands while the bell is ringing."
"Put the cotton balls in your ears before the bell starts to ring."
"The cotton balls are in the blue pill bottle.">
<PLTABLE "Where is the ruby?"
"Did you solve the Son of Mars riddle?"
"It's somewhere in Trafalgar Square."
"It's on the statue in Trafalgar Square."
"It's in Nelson's blind eye."
"You can discover it only by looking through the telescope.">
<PLTABLE "How do I get the ruby?"
"You can't get up there."
"Someone - or something - else will have to get it for you."
"Some kind of trained bird might do it."
"Old Sherman, who lives in Pinchin Lane, trains animals."
"Get the bird from Sherman. Take it to Trafalgar Square. Show
the ruby to the pigeon, ask him to get it, and then let him go."
"Do not read the next clue until you have done all of the above."
"Did we mention that it's a homing pigeon?"
"Return to Sherman's shop and ask him about the bird.">
<PLTABLE "Where is the emerald?"
"Did you solve the Chopper riddle?"
"It's in the Chamber of Horrors."
"It's hidden in one of the statues."
"It's in the wax head of Charles I.">
<PLTABLE "How do I get the emerald?"
"It's encased in wax. What springs to mind?"
"You need to melt the head."
"You can't melt the head unless you remove it from the statue."
"You need something that puts out enough heat to melt a big gob of wax."
"The torch will melt the wax head.">
<PLTABLE "Where is the sceptre?"
"In the sceptre tank?"
"Sorry about that."
"There is no sceptre.">
<PLTABLE "How do I get the sceptre?"
"Dive into the sceptre tank."
"Don't blame us. You're the one who keeps reading these bogus clues.">
"MORE GEMS"
<PLTABLE "Where is the opal?"
"Have you solved the London Bridge riddle?"
"It's in the clump of moss under London Bridge.">
<PLTABLE "How do I get the opal?"
"Can you lower the bridge?"
"Can you raise the water?"
"Wait for high tide."
"The newspaper that came with your game contains the tide tables for the weekend.">
<PLTABLE "Where is the zorkmid?"
"It's in the... oops. Sorry. Wrong game.">
<PLTABLE "How do I get the zorkmid?"
"Buy Zork I."
"Buy Enchanter."
"Buy Sorcerer."
"You get the idea.">
<PLTABLE "Where is the topaz?"
"In a safety deposit box in the Bank of England."
"Have you solved the number riddle?"
"It's in box 600.">
<PLTABLE "How do I get the topaz?"
"See the clues for the Bank of England.">
<PLTABLE "Where is the garnet?"
"Did you solve the Tower of London riddle?"
"It's in the butt of malmsey in the Bowyer Tower.">
<PLTABLE "How do I get the garnet?"
"Have you tried drinking the wine?"
"Pretty tasty stuff, isn't it?"
"You need to drain the keg somehow."
"You need to remove the bung."
"Knock out the bung with the mace."
"Don't read the next clue until you have done all of the above."
"Ask Wiggins to get the garnet for you.">
<PLTABLE "Why are the gems important?"
"You don't think the thief has been hiding gems all over London just for the fun of it, do you?"
"Perhaps he is trying to send Sherlock yet another message."
"Have you looked at any of the gems?"
"Have you looked at any of them closely?"
"Look at each of the gems through the magnifying glass.">
"THE LAIR"
<PLTABLE "Can I stop Akbar's knocking me out?"
"Knock him out first."
"Perhaps you could smuggle something in."
"Have you noticed the henchman's religion?"
"He probably won't disturb your hat."
"Perhaps the etherium ampoule....">
<PLTABLE "Can I stop Moriarty when I wake up?"
"If he is free to move around, he will always win."
"Tie him up."
"Don't forget to tie up the henchman, too.">
"MISCELLANEOUS"
<PLTABLE "Why do I finish without 100 points?"
"If you play the game from start to finish and solve all
the puzzles, you will end up with 100 points. If, however, you start the
game and play through it using information you acquired in a previous
session, you may have neglected to perform a few actions for which you
received points. This should not be of concern to anyone who is content
with failing to discover the highest ranking available to the game player.">
<PLTABLE "Can I abbreviate \"stethoscope\"?"
"Yes. It can be abbreviated to STETH or SS.">
<PLTABLE "What is the square root of 64?"
"Eight.">>>
<GLOBAL GL-CUR-POS 0> ;"determines where to place the highlight cursor
Can go up to 17 Questions"
<GLOBAL GL-QUEST-NUM 1> ;"shows in HINT-TBL ltable which QUESTION it's on"
<GLOBAL GL-CHAPT-NUM 1> ;"shows in HINT-TBL ltable which CHAPTER it's on"
<CONSTANT GL-DIROUT-TBL
<TABLE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >>
<ROUTINE V-HINT ("AUX" CHR MAXC (C <>) Q (WHO <>))
<COND (,GL-HINTS-OFF
<RT-PERFORM ,V?HINTS-NO ,ROOMS>
<RFATAL>)
(<NOT ,GL-HINT-WARNING>
<SETG GL-HINT-WARNING T>
<TELL
"[Warning: It is recognized that the temptation for help may at times be so
exceedingly strong that you might fetch hints prematurely. Therefore, you may
at any time during the story type HINTS OFF, and this will disallow the
seeking out of help for the present session of the story. If you still want a
hint now, indicate HINT.]" CR>
<RFATAL>)
(<NOT .WHO>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES ,CH-WIGGINS>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL
"Holmes looks at you impatiently and sighs, \"Very well, Watson. If you
must.\"">)
(T
<TELL
"Wiggins looks up at you with relief and says, \"Good idea, guv. We'll never
work this out on our own.\"">)>
<TELL CR CR "[Press any key to continue.]" CR>
<INPUT 1>)>)>
<IFSOUND ;<SET X <GET ,SOUND-FLAG 0>>
<SETG SOUND-QUEUED? <>>
<KILL-SOUNDS>>
;<BUFOUT <>>
<SET MAXC <GET ,K-HINTS 0>>
<RT-INIT-HINT-SCREEN>
<CURSET 5 1>
<RT-PUT-UP-CHAPTERS>
<SETG GL-CUR-POS <- ,GL-CHAPT-NUM 1>>
<RT-NEW-CURSOR>
<REPEAT ()
<SET CHR <INPUT 1>>
<COND (<EQUAL? .CHR !\Q !\q>
<SET Q T>
<RETURN>)
(<EQUAL? .CHR !\N !\n>
<RT-ERASE-CURSOR>
<COND (<EQUAL? ,GL-CHAPT-NUM .MAXC>
<SETG GL-CUR-POS 0>
<SETG GL-CHAPT-NUM 1>
<SETG GL-QUEST-NUM 1>)
(T
<SETG GL-CUR-POS <+ ,GL-CUR-POS 1>>
<SETG GL-CHAPT-NUM <+ ,GL-CHAPT-NUM 1>>
<SETG GL-QUEST-NUM 1>)>
<RT-NEW-CURSOR>)
(<EQUAL? .CHR !\P !\p>
<RT-ERASE-CURSOR>
<COND (<EQUAL? ,GL-CHAPT-NUM 1>
<SETG GL-CHAPT-NUM .MAXC>
<SETG GL-CUR-POS <- .MAXC 1>>)
(T
<SETG GL-CUR-POS <- ,GL-CUR-POS 1>>
<SETG GL-CHAPT-NUM <- ,GL-CHAPT-NUM 1>>)>
<SETG GL-QUEST-NUM 1>
<RT-NEW-CURSOR>)
(<EQUAL? .CHR 13 10>
<RT-PICK-QUESTION>
<RETURN>)>>
<COND (<NOT .Q>
<AGAIN> ;"AGAIN does whole routine?")>
<CLEAR -1>
<V-REFRESH>
<SET WHO <RT-WHO-SAYS?>>
<COND (<EQUAL? .WHO ,CH-HOLMES>
<TELL CR
"Holmes barely glances at you and snaps, \"At last. Now may we proceed?\"" CR>)
(<EQUAL? .WHO ,CH-WIGGINS>
<TELL CR
"Wiggins tugs your sleeve and asks hopefully, \"Learn anything?\"" CR>)
(T
<TELL CR "Back to the story..." CR>)>
<IFSOUND <COND (,SOUND-ON?
<CHECK-LOOPING>)>>
;<IFSOUND <COND (<G? .X 1>
<SOUNDS </ .X 16> ,S-START <MOD .X 16>>)>>
<RFATAL>>
<ROUTINE RT-PICK-QUESTION ("AUX" CHR MAXQ (Q <>))
<RT-INIT-HINT-SCREEN <>>
<RT-LEFT-LINE 3 ,RETURN-SEE-HINT ,RETURN-SEE-HINT-LEN>
<RT-RIGHT-LINE 3 ,Q-MAIN-MENU ,Q-MAIN-MENU-LEN>
<SET MAXQ <- <GET <GET ,K-HINTS ,GL-CHAPT-NUM> 0> 1>>
<CURSET 5 1>
<RT-PUT-UP-QUESTIONS>
<SETG GL-CUR-POS <- ,GL-QUEST-NUM 1>>
<RT-NEW-CURSOR>
<REPEAT ()
<SET CHR <INPUT 1>>
<COND (<EQUAL? .CHR !\Q !\q>
<SET Q T>
<RETURN>)
(<EQUAL? .CHR !\N !\n>
<RT-ERASE-CURSOR>
<COND (<EQUAL? ,GL-QUEST-NUM .MAXQ> ; "Wrap around on N"
<SETG GL-CUR-POS 0>
<SETG GL-QUEST-NUM 1>)
(T
<SETG GL-CUR-POS <+ ,GL-CUR-POS 1>>
<SETG GL-QUEST-NUM <+ ,GL-QUEST-NUM 1>>)>
<RT-NEW-CURSOR>)
(<EQUAL? .CHR !\P !\p>
<RT-ERASE-CURSOR>
<COND (<EQUAL? ,GL-QUEST-NUM 1>
<SETG GL-QUEST-NUM .MAXQ>
<SETG GL-CUR-POS <- .MAXQ 1>>)
(T
<SETG GL-CUR-POS <- ,GL-CUR-POS 1>>
<SETG GL-QUEST-NUM <- ,GL-QUEST-NUM 1>>)>
<RT-NEW-CURSOR>)
(<EQUAL? .CHR 13 10>
<RT-DISPLAY-HINT>
<RETURN>)>>
<COND (<NOT .Q>
<AGAIN>)>>
<ROUTINE RT-ERASE-CURSOR ()
<CURSET <GET ,GL-LINE-TABLE ,GL-CUR-POS>
<- <GET ,GL-COLUMN-TABLE ,GL-CUR-POS> 2>>
<TELL " "> ;"erase previous highlight cursor">
;"go back 2 spaces from question text, print cursor and flash is between
the cursor and text"
<ROUTINE RT-NEW-CURSOR ()
<CURSET <GET ,GL-LINE-TABLE ,GL-CUR-POS>
<- <GET ,GL-COLUMN-TABLE ,GL-CUR-POS> 2 ;1>>
<TELL ">"> ;"print the new cursor">
<ROUTINE RT-INVERSE-LINE ("AUX" (CENTER-HALF <>))
<HLIGHT ,K-H-INV>
<RT-PRINT-SPACES <LOWCORE SCRH>>
<HLIGHT ,K-H-NRM>>
<ROUTINE RT-DISPLAY-HINT ("AUX" H MX (CNT 2) CHR (FLG T) N CV
SHIFT? COUNT-OFFS)
<CLEAR -1>
<SPLIT 3>
<SCREEN ,K-S-WIN>
<CURSET 1 1>
<RT-INVERSE-LINE>
<RT-CENTER-LINE 1 "INVISICLUES (tm)" <STRLENGTH "INVISICLUES (tm)">>
<CURSET 3 1>
<RT-INVERSE-LINE>
<RT-LEFT-LINE 3 "RETURN = see new hint">
<RT-RIGHT-LINE 3 "Q = see hint menu" <STRLENGTH "Q = see hint menu">>
<CURSET 2 1>
<RT-INVERSE-LINE>
<HLIGHT ,K-H-BLD>
<SET H <GET <GET ,K-HINTS ,GL-CHAPT-NUM> <+ ,GL-QUEST-NUM 1>>>
; "Byte table to use for showing questions already seen"
; "Actually a nibble table. The high four bits of each byte are for
quest-num odd; the low for bits are for quest-num even. See SHIFT?
and COUNT-OFFS."
<SET CV <GET ,K-HINT-COUNTS <- ,GL-CHAPT-NUM 1>>>
<RT-CENTER-LINE 2 <GET .H 1 ;,K-HINT-QUESTION>>
<HLIGHT ,K-H-NRM>
<SET MX <GET .H 0>>
<SCREEN ,K-S-NOR>
<CRLF>
<SET SHIFT? <MOD ,GL-QUEST-NUM 2>>
<SET COUNT-OFFS </ <- ,GL-QUEST-NUM 1> 2>>
<REPEAT ((CURCX <GETB .CV .COUNT-OFFS>)
(CURC <+ 2 <ANDB <COND (.SHIFT? <LSH .CURCX -4>)
(T .CURCX)> *17*>>))
<COND (<==? .CNT .CURC>
<RETURN>)
(T
<TELL <GET .H .CNT> CR ;CR>
<SET CNT <+ .CNT 1>>)>>
<REPEAT ()
<COND (<AND .FLG <G? .CNT .MX>>
<SET FLG <>>
<TELL "[That's all.]" CR>)
(.FLG
<SET N <+ <- .MX .CNT> 1>>
<TELL "[" N .N " hint">
<COND (<NOT <EQUAL? .N 1>>
<TELL "s">)>
<TELL " left.]" ;CR ;CR " -> ">
<SET FLG <>>)>
<SET CHR <INPUT 1>>
<COND (<EQUAL? .CHR !\Q !\q>
<COND (.SHIFT?
<PUTB .CV .COUNT-OFFS
<ORB <ANDB <GETB .CV .COUNT-OFFS> *17*>
<LSH <- .CNT 2> 4>>>)
(T
<PUTB .CV .COUNT-OFFS
<ORB <ANDB <GETB .CV .COUNT-OFFS> *360*>
<- .CNT 2>>>)>
<RETURN>)
(<EQUAL? .CHR 13 10>
<COND (<L=? .CNT .MX>
<SET FLG T> ;".cnt starts as 2"
<TELL <GET .H .CNT> ;CR CR>
; "3rd = line 7, 4th = line 9, ect"
<COND (<G? <SET CNT <+ .CNT 1>> .MX>
<SET FLG <>>
<TELL "[Final hint]" CR>)>)>)>>>
<ROUTINE RT-PUT-UP-QUESTIONS ("AUX" (ST 1) MXQ MXL)
<SET MXQ <- <GET <GET ,K-HINTS ,GL-CHAPT-NUM> 0> 1>>
<SET MXL <- <LOWCORE SCRV> 1>>
<REPEAT ()
<COND (<G? .ST .MXQ>
<RETURN>)
(T ;"zeroth"
<CURSET <GET ,GL-LINE-TABLE <- .ST 1>>
<- <GET ,GL-COLUMN-TABLE <- .ST 1>> 1>>)>
<TELL " " <GET <GET <GET ,K-HINTS ,GL-CHAPT-NUM> <+ .ST 1>> 1>>
<SET ST <+ .ST 1>>>>
<ROUTINE RT-PUT-UP-CHAPTERS ("AUX" (ST 1) MXC MXL)
<SET MXC <GET ,K-HINTS 0>>
<SET MXL <- <LOWCORE SCRV> 1>>
<REPEAT ()
<COND (<G? .ST .MXC>
<RETURN>)
(T ;"zeroth"
<CURSET
<GET ,GL-LINE-TABLE <- .ST 1>>
<- <GET ,GL-COLUMN-TABLE <- .ST 1>> 1>>)>
<TELL " " <GET <GET ,K-HINTS .ST> 1 ;,GL-HINT-QUEST>>
<SET ST <+ .ST 1>>>>
<ROUTINE RT-INIT-HINT-SCREEN ("OPTIONAL" (THIRD T))
<CLEAR -1>
<SPLIT <- <LOWCORE SCRV> 1>>
<SCREEN ,K-S-WIN>
<CURSET 1 1>
<RT-INVERSE-LINE>
<CURSET 2 1>
<RT-INVERSE-LINE>
<CURSET 3 1>
<RT-INVERSE-LINE>
<RT-CENTER-LINE 1 "INVISICLUES (tm)" <STRLENGTH "INVISICLUES (tm)">>
<RT-LEFT-LINE 2 " N = Next">
<RT-RIGHT-LINE 2 "P = Previous" <STRLENGTH "P = Previous">>
<COND (<MC-T? .THIRD>
<RT-LEFT-LINE 3 " RETURN = See hint">
<RT-RIGHT-LINE 3 "Q = Resume story" <STRLENGTH "Q = Resume story">>)>>
<ROUTINE RT-CENTER-LINE (LN STR "OPTIONAL" (LEN 0) (INV T))
<COND (<ZERO? .LEN>
<DIROUT ,K-D-TBL-ON ,GL-DIROUT-TBL ;,SLINE>
<TELL .STR>
<DIROUT ,K-D-TBL-OFF>
<SET LEN <GET ,GL-DIROUT-TBL ;,SLINE 0>>)>
<CURSET .LN </ <- <LOWCORE SCRH> .LEN> 2>>
<COND (.INV
<HLIGHT ,K-H-INV>)>
<TELL .STR>
<COND (.INV
<HLIGHT ,K-H-NRM>)>>
<ROUTINE RT-LEFT-LINE (LN STR "OPTIONAL" (INV T))
<CURSET .LN 1>
<COND (.INV
<HLIGHT ,K-H-INV>)>
<TELL .STR>
<COND (.INV
<HLIGHT ,K-H-NRM>)>>
<ROUTINE RT-RIGHT-LINE (LN STR "OPTIONAL" (LEN 0) (INV T))
<COND (<ZERO? .LEN>
<DIROUT 3 ,GL-DIROUT-TBL ;,SLINE>
<TELL .STR>
<DIROUT -3>
<SET LEN <GET ,GL-DIROUT-TBL ;,SLINE 0>>)>
<CURSET .LN <- <LOWCORE SCRH> .LEN>>
<COND (.INV
<HLIGHT ,K-H-INV>)>
<TELL .STR>
<COND (.INV
<HLIGHT ,K-H-NRM>)>>

BIN
horse Normal file

Binary file not shown.

BIN
horse-ss1 Normal file

Binary file not shown.

BIN
horse.was-mid Normal file

Binary file not shown.

98
locals.zabstr Normal file
View File

@ -0,0 +1,98 @@
<OBJECT LG-BAKER-ST-DOOR (LOC LOCAL-GLOBALS) (DESC "front door") (FLAGS FL-DOOR
FL-OPENABLE FL-LOCKED) (SYNONYM DOOR) (ADJECTIVE FRONT HOLMES\' HOLMES\'S
SHERLOCK) (GENERIC RT-GN-DOOR) (ACTION RT-AC-LG-BAKER-ST-DOOR)>
<OBJECT LG-PARLOUR-DOOR (LOC LOCAL-GLOBALS) (DESC "parlour door") (FLAGS
FL-DOOR FL-OPENABLE) (SYNONYM DOOR) (ADJECTIVE PARLOUR PARLOR) (GENERIC
RT-GN-DOOR) (ACTION RT-AC-LG-PARLOUR-DOOR)>
<OBJECT LG-HOLMES-STUDY-DOOR (LOC LOCAL-GLOBALS) (DESC "study door") (FLAGS
FL-DOOR FL-OPENABLE FL-OPENED) (SYNONYM DOOR) (ADJECTIVE STUDY HOLMES\'S
HOLMES\' SHERLOCK) (GENERIC RT-GN-DOOR) (ACTION RT-AC-LG-HOLMES-STUDY-DOOR)>
<OBJECT LG-HOLMES-BEDROOM-DOOR (LOC LOCAL-GLOBALS) (DESC "bedroom door") (FLAGS
FL-DOOR FL-OPENABLE FL-LOCKED) (SYNONYM DOOR) (ADJECTIVE BEDROOM HOLMES\'S
HOLMES\' SHERLOCK) (GENERIC RT-GN-DOOR) (ACTION RT-AC-LG-HOLMES-BEDROOM-DOOR)>
<OBJECT LG-BANK-VAULT-DOOR (LOC LOCAL-GLOBALS) (DESC "vault door") (FLAGS
FL-DOOR FL-OPENABLE FL-LOCKED FL-HAS-DESCFCN) (SYNONYM DOOR) (ADJECTIVE VAULT)
(VALUE 3) (GENERIC RT-GN-DOOR) (ACTION RT-AC-LG-BANK-VAULT-DOOR)>
<OBJECT LG-BAR-OF-GOLD-DOOR (LOC LOCAL-GLOBALS) (DESC "door") (FLAGS FL-DOOR
FL-OPENABLE FL-OPENED) (SYNONYM DOOR) (GENERIC RT-GN-DOOR) (ACTION
RT-AC-LG-BAR-OF-GOLD-DOOR)>
<OBJECT LG-LAIR-DOOR (LOC LOCAL-GLOBALS) (DESC "door") (FLAGS FL-DOOR
FL-OPENABLE FL-LOCKED) (SYNONYM DOOR) (GENERIC RT-GN-DOOR) (ACTION
RT-AC-LG-LAIR-DOOR)>
<OBJECT LG-JERICHO-PARLOUR-DOOR (LOC LOCAL-GLOBALS) (DESC
"door to the Jericho Parlour") (FLAGS FL-DOOR FL-OPENABLE) (SYNONYM DOOR) (
ADJECTIVE JERICHO PARLOUR PARLOR) (GENERIC RT-GN-DOOR) (ACTION
RT-AC-LG-JERICHO-PARLOUR-DOOR)>
<OBJECT LG-BRITISH-MUSEUM-DOOR (LOC LOCAL-GLOBALS) (DESC "door") (FLAGS FL-DOOR
FL-LOCKED FL-OPENABLE) (SYNONYM DOOR) (GENERIC RT-GN-DOOR) (ACTION
RT-AC-LG-BRITISH-MUSEUM-DOOR)>
<OBJECT LG-WESTMINSTER-DOOR (LOC LOCAL-GLOBALS) (DESC "Abbey door") (FLAGS
FL-DOOR FL-LOCKED FL-OPENABLE) (SYNONYM DOOR) (GENERIC RT-GN-DOOR) (ACTION
RT-AC-LG-WESTMINSTER-DOOR)>
<OBJECT LG-SHOPS (LOC LOCAL-GLOBALS) (DESC "shops") (FLAGS FL-PLURAL
FL-HAS-DESCFCN) (SYNONYM SHOPS STORES EMPORIUMS WINDOWS WINDOW SHOP STORE) (
ACTION RT-AC-LG-SHOPS)>
<OBJECT LG-WATER (LOC LOCAL-GLOBALS) (FLAGS FL-NODESC FL-CONTAINER FL-OPENED
FL-SURFACE FL-HAS-SDESC FL-NOARTC) (SYNONYM WATER RIVER THAMES) (SIZE 0
CAPACITY 100) (ACTION RT-AC-LG-WATER)>
<OBJECT LG-UP-DOWN-STREAM (LOC LOCAL-GLOBALS) (FLAGS FL-NODESC FL-HAS-SDESC
FL-NEEDS-IDENTITY) (OBJ-NOUN 0) (OBJ-ADJ 0) (SYNONYM UPSTREAM DOWNSTREAM) (
ACTION RT-AC-LG-UP-DOWN-STREAM)>
<OBJECT LG-PLAQUES (LOC LOCAL-GLOBALS) (DESC "sign") (FLAGS FL-TRYTAKE FL-NOALL
FL-SURFACE FL-HAS-DESCFCN) (SYNONYM PLAQUE PLATE SIGN RELIEF) (SIZE 0 CAPACITY
999) (ACTION RT-AC-LG-PLAQUES)>
<OBJECT LG-WINDOW (LOC LOCAL-GLOBALS) (DESC "window") (FLAGS FL-TRYTAKE
FL-NOALL FL-HAS-DESCFCN FL-OPENABLE FL-TRANSPARENT) (SYNONYM WINDOW) (ADJECTIVE
BOW) (ACTION RT-AC-LG-WINDOW)>
<OBJECT LG-TOMBS-ABBEY (LOC LOCAL-GLOBALS) (FLAGS FL-TRYTAKE FL-PLURAL FL-NOALL
FL-HAS-DESCFCN FL-HAS-SDESC FL-NEEDS-IDENTITY) (OBJ-ADJ 0) (OBJ-NOUN 0) (
ADJECTIVE WESTMINSTER) (SYNONYM TOMBS SCULPTURES STATUES TOMB ABBEY) (ACTION
RT-AC-LG-TOMBS-ABBEY)>
<OBJECT LG-STREETLIGHT (LOC LOCAL-GLOBALS) (DESC "streetlight") (FLAGS
FL-TRYTAKE FL-NOALL FL-TRANSPARENT) (SYNONYM LIGHT LAMP STREETLIGHT STREETLAMP
STREET-LIGHT GASLIGHT GAS-LIGHT) (ADJECTIVE GAS) (ACTION RT-AC-LG-STREETLIGHT)>
<OBJECT LG-STAIRWAY (LOC LOCAL-GLOBALS) (DESC "stairway") (FLAGS FL-TRYTAKE
FL-NOALL) (SYNONYM STAIRWAY STAIR STAIRS STEP STEPS) (ACTION RT-AC-LG-STAIRWAY)
>
<OBJECT LG-SHAFT-OF-LIGHT (LOC LOCAL-GLOBALS) (DESC "shaft of light") (FLAGS
FL-NODESC FL-HAS-DESCFCN) (SYNONYM SHAFT LIGHT SUNLIGHT) (ADJECTIVE SHAFT LIGHT
SUNLIGHT) (ACTION RT-AC-LG-SHAFT-OF-LIGHT)>
<OBJECT LG-MARBLE (LOC LOCAL-GLOBALS) (DESC "marble") (FLAGS FL-NODESC) (
SYNONYM MARBLE)>
<OBJECT LG-COLUMNS (LOC LOCAL-GLOBALS) (DESC "columns") (FLAGS FL-TRYTAKE
FL-PLURAL FL-NOALL) (SYNONYM COLUMNS COLUMN) (ADJECTIVE PURBECK)>
<OBJECT LG-RAVENS (LOC LOCAL-GLOBALS) (DESC "ravens") (FLAGS FL-NODESC
FL-PLURAL FL-ALIVE FL-TRYTAKE FL-HAS-DESCFCN) (SYNONYM RAVENS BIRDS ROOKS RAVEN
ROOK BIRD) (ADJECTIVE FLOCK GROUP BUNCH GAGGLE) (SIZE 50 MASS 250) (ACTION
RT-AC-LG-RAVENS)>
<OBJECT LG-BOATS (LOC LOCAL-GLOBALS) (DESC "boats") (FLAGS FL-NODESC
FL-HAS-DESCFCN) (SYNONYM BOATS SHIPS) (ADJECTIVE PLEASURE) (ACTION
RT-DF-LG-BOATS)>
<OBJECT LG-TOWER (LOC LOCAL-GLOBALS) (DESC "Tower") (SYNONYM TOWER LONDON) (
ADJECTIVE TOWER LONDON) (GENERIC RT-GN-TOWER) (ACTION RT-AC-LG-TOWER)>
<DEFINE-ROUTINE RT-AC-LG-BAKER-ST-DOOR>
<DEFINE-ROUTINE RT-AC-LG-PARLOUR-DOOR>
<DEFINE-ROUTINE RT-AC-LG-HOLMES-STUDY-DOOR>
<DEFINE-ROUTINE RT-AC-LG-HOLMES-BEDROOM-DOOR>
<DEFINE-ROUTINE RT-AC-LG-BAR-OF-GOLD-DOOR>
<DEFINE-ROUTINE RT-AC-LG-LAIR-DOOR>
<DEFINE-ROUTINE RT-AC-LG-JERICHO-PARLOUR-DOOR>
<DEFINE-ROUTINE RT-AC-LG-SHOPS>
<DEFINE-ROUTINE RT-AC-LG-WATER>
<DEFINE-ROUTINE RT-AC-LG-UP-DOWN-STREAM>
<DEFINE-ROUTINE RT-AC-LG-BRITISH-MUSEUM-DOOR>
<DEFINE-ROUTINE RT-AC-LG-WESTMINSTER-DOOR>
<DEFINE-ROUTINE RT-AC-LG-PLAQUES>
<DEFINE-ROUTINE RT-DF-LG-WAX-STATUES>
<DEFINE-ROUTINE RT-AC-LG-WINDOW>
<DEFINE-ROUTINE RT-AC-LG-TOMBS-ABBEY>
<DEFINE-ROUTINE RT-AC-LG-STREETLIGHT>
<DEFINE-ROUTINE RT-AC-LG-STAIRWAY>
<DEFINE-ROUTINE RT-AC-LG-SHAFT-OF-LIGHT>
<DEFINE-ROUTINE RT-AC-LG-RAVENS>
<DEFINE-ROUTINE RT-DF-LG-BOATS>
<DEFINE-ROUTINE RT-AC-LG-HOLMES-HOUSE>
<DEFINE-ROUTINE RT-AC-LG-PEDESTAL>
<DEFINE-ROUTINE RT-AC-LG-TOWER>

524
locals.zap Normal file
View File

@ -0,0 +1,524 @@
.FUNCT RT-AC-LG-BAKER-ST-DOOR
EQUAL? GL-PRSA,V?KNOCK \?CCL3
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL \?CCL6
PRINTR "You are already inside."
?CCL6: FSET? LG-BAKER-ST-DOOR,FL-OPENED \?CCL8
PRINTR "The door is already open."
?CCL8: FSET? CH-HUDSON,FL-ASLEEP \?CCL10
PRINTR "There is no answer."
?CCL10: FSET? LG-BAKER-ST-DOOR,FL-LOCKED /?CCL12
FSET LG-BAKER-ST-DOOR,FL-OPENED
MOVE CH-HUDSON,RM-ENTRY-HALL
ICALL2 RT-THIS-IS-IT,CH-HUDSON
PRINTR "Mrs Hudson appears and says, ""Please come in Dr Watson."" She steps back into the hall to allow room for you to pass."
?CCL12: FCLEAR LG-BAKER-ST-DOOR,FL-LOCKED
SET 'GL-PLACE-CUR,RM-ENTRY-HALL
MOVE CH-HUDSON,GL-PLACE-CUR
MOVE CH-PLAYER,GL-PLACE-CUR
ICALL2 RT-THIS-IS-IT,CH-HUDSON
PRINTI "You hear a bolt sliding back and the door opens to reveal a worried Mrs Hudson."
CRLF
CRLF
PRINTI """Oh Doctor Watson, I'm so glad to see you. It's Mr Holmes, sir. Three days have come and gone since he's been out of his rooms. He won't eat and I know he hasn't slept. Now there's a visitor who says he's here about some important government business. I tried to send him away, but he insisted on waiting in the parlour. That's when I sent for you. Thank God you've come."""
CRLF
ICALL RT-EXEC-RM-DESCFCN,RM-ENTRY-HALL,K-M-DESC-1
CRLF
RTRUE
?CCL3: EQUAL? GL-PRSA,V?KICK,V?HIT,V?MUNG \?CCL14
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL /FALSE
FSET? LG-BAKER-ST-DOOR,FL-OPENED /FALSE
PRINTR "Mrs Hudson pokes her head out the door and says, ""I'm not opening the door until you knock like a proper gentleman."" She slams the door in your face."
?CCL14: EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-221B-BAKER-ST \?CCL24
CALL2 RT-DO-WALK,P?WEST
RSTACK
?CCL24: EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL \FALSE
CALL2 RT-DO-WALK,P?EAST
RSTACK
.FUNCT RT-AC-LG-PARLOUR-DOOR
EQUAL? GL-PRSA,V?OPEN \?CCL3
FSET? CH-HOLMES,FL-ASLEEP \FALSE
ICALL2 RT-CTHEO-PRINT,CH-HUDSON
PRINT K-HUDSON-WORRIED-MSG
CRLF
RTRUE
?CCL3: EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-PARLOUR \?CCL11
CALL2 RT-DO-WALK,P?SOUTH
RSTACK
?CCL11: EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL \FALSE
CALL2 RT-DO-WALK,P?NORTH
RSTACK
.FUNCT RT-AC-LG-HOLMES-STUDY-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-VESTIBULE \?CCL6
CALL2 RT-DO-WALK,P?NORTH
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY \FALSE
CALL2 RT-DO-WALK,P?SOUTH
RSTACK
.FUNCT RT-AC-LG-HOLMES-BEDROOM-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY \?CCL6
CALL2 RT-DO-WALK,P?WEST
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-HOLMES-BEDROOM \FALSE
CALL2 RT-DO-WALK,P?EAST
RSTACK
.FUNCT RT-AC-LG-BAR-OF-GOLD-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-BAR-OF-GOLD \?CCL6
CALL2 RT-DO-WALK,P?EAST
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-SWAN-LANE \FALSE
CALL2 RT-DO-WALK,P?WEST
RSTACK
.FUNCT RT-AC-LG-LAIR-DOOR
ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?ENTER,V?THROUGH,V?OPEN /?PRD8
EQUAL? GL-PRSA,V?CLOSE,V?UNLOCK,V?LOCK \?CCL6
?PRD8: FSET? CH-AKBAR,FL-LOCKED /?CCL6
FSET? CH-AKBAR,FL-ASLEEP /?CCL6
PRINTI "Akbar"
FSET? TH-WATSONS-HAT,FL-WORN \?CND12
PRINTI " says, ""Forgive me, sir,"" and"
?CND12: PRINTR " stops you as you move toward the door."
?CCL6: EQUAL? GL-PRSA,V?OPEN \?CCL15
FSET? CH-HOLMES,FL-LOCKED \?CCL15
PRINTR "Holmes calls out, ""Watson! I'm still tied up!"" You pause and look back, torn by indecision."
?CCL15: EQUAL? GL-PRSA,V?ENTER,V?THROUGH \?CCL19
EQUAL? GL-PLACE-CUR,RM-LAIR \FALSE
CALL2 RT-DO-WALK,P?OUT
RSTACK
?CCL19: EQUAL? GL-PRSA,V?UNLOCK \?CCL24
EQUAL? GL-PRSI,TH-LAIR-KEY \?CCL24
FSET? LG-LAIR-DOOR,FL-LOCKED \?CCL24
FCLEAR LG-LAIR-DOOR,FL-LOCKED
ICALL RT-CYOU-MSG,STR?821,STR?822
ICALL2 RT-THEO-PRINT,LG-LAIR-DOOR
PRINTR "."
?CCL24: EQUAL? GL-PRSA,V?LOCK \FALSE
EQUAL? GL-PRSI,TH-LAIR-KEY \FALSE
FSET? LG-LAIR-DOOR,FL-OPENED /FALSE
FSET? LG-LAIR-DOOR,FL-LOCKED /FALSE
FSET LG-LAIR-DOOR,FL-LOCKED
ICALL RT-CYOU-MSG,STR?808,STR?809
ICALL2 RT-THEO-PRINT,LG-LAIR-DOOR
PRINTR "."
.FUNCT RT-AC-LG-JERICHO-PARLOUR-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-SOUTH-AISLE \?CCL6
CALL2 RT-DO-WALK,P?SOUTH
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-JERICHO-PARLOUR \FALSE
CALL2 RT-DO-WALK,P?NORTH
RSTACK
.FUNCT RT-AC-LG-SHOPS,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "The shops are closed for the Jubilee."
?CCL3: EQUAL? GL-PRSA,V?LOOK-INSIDE,V?SEARCH \FALSE
PRINTR "The shops are all closed for the Jubilee."
.FUNCT RT-AC-LG-WATER,CONTEXT,CLASS,CAP?
EQUAL? CONTEXT,K-M-SDESC \?CCL3
EQUAL? CLASS,K-DESC-A \?CCL6
PUSH TRUE-VALUE
JUMP ?CND4
?CCL6: PUSH FALSE-VALUE
?CND4: ICALL PRINT-SDESC,STR?823,CLASS,STACK,FALSE-VALUE
RTRUE
?CCL3: ZERO? CONTEXT \FALSE
ZERO? GL-NOW-PRSI? \?CCL10
EQUAL? GL-PRSA,V?ENTER,V?LEAP \?CCL13
EQUAL? GL-WINNER,CH-PLAYER \?CCL16
PRINTR "You may not remember this, but you can't swim."
?CCL16: PRINTR "That's not very polite."
?CCL13: EQUAL? GL-PRSA,V?DRINK \?CCL18
PRINT K-YUCK-MSG
CRLF
RTRUE
?CCL18: EQUAL? GL-PRSA,V?EXAMINE \?CCL20
PRINTR "The water is black, oily, slimy, dirty, and otherwise unwholesome-looking."
?CCL20: EQUAL? GL-PRSA,V?LOOK-INSIDE,V?SEARCH \?CCL22
PRINTR "The water is so black and oily that you can't see a thing."
?CCL22: EQUAL? GL-PRSA,V?REACH-IN,V?SEARCH \?CCL24
PRINTR "Slimy things brush up against your hand, so you quickly pull it back."
?CCL24: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
?CCL10: ZERO? GL-NOW-PRSI? /FALSE
EQUAL? GL-PRSA,V?PUT,V?PUT-ON \FALSE
FSET? GL-PRSO,FL-BODYPART /?CTR33
EQUAL? GL-PRSO,CH-ME,CH-PLAYER \?CCL34
?CTR33: PRINT K-YUCK-MSG
CRLF
RTRUE
?CCL34: EQUAL? GL-PRSO,TH-ANCHOR,PSEUDO-OBJECT /?CTR38
LOC GL-PRSO
EQUAL? STACK,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CCL39
?CTR38: ICALL RT-PERFORM,V?DROP,GL-PRSO
RTRUE
?CCL39: EQUAL? GL-PRSO,CH-TRAINED-PIGEON \?CCL43
REMOVE GL-PRSO
ICALL1 RT-KILL-PIGEON
PRINTI "The pigeon struggles briefly, its feathers too wet to fly, then sinks below the water."
RTRUE
?CCL43: REMOVE GL-PRSO
FCLEAR GL-PRSO,FL-WORN
PRINTR "Plop."
.FUNCT RT-AC-LG-UP-DOWN-STREAM,CONTEXT
EQUAL? CONTEXT,K-M-SDESC \?CCL3
GETP LG-UP-DOWN-STREAM,P?OBJ-NOUN
PRINTB STACK
RTRUE
?CCL3: EQUAL? GL-PRSA,V?SHOOT \FALSE
ICALL1 RT-IMPOSSIBLE-MSG
RTRUE
.FUNCT RT-AC-LG-BRITISH-MUSEUM-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-GREAT-RUSSELL-ST \?CCL6
CALL2 RT-DO-WALK,P?NORTH
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-BRITISH-MUSEUM \FALSE
CALL2 RT-DO-WALK,P?SOUTH
RSTACK
.FUNCT RT-AC-LG-WESTMINSTER-DOOR
EQUAL? GL-PRSA,V?ENTER,V?THROUGH \FALSE
EQUAL? GL-PLACE-CUR,RM-BROAD-SANCTUARY \?CCL6
CALL2 RT-DO-WALK,P?EAST
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-NAVE \FALSE
CALL2 RT-DO-WALK,P?WEST
RSTACK
.FUNCT RT-AC-LG-PLAQUES,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "It looks mighty like a plaque."
?CCL3: EQUAL? GL-PRSA,V?TAKE \?CCL5
PRINTI "The plaque is firmly attached to the "
EQUAL? GL-PLACE-CUR,RM-MANUSCRIPT-ROOM \?CCL8
PRINTI "desk"
JUMP ?CND6
?CCL8: PRINTI "wall"
?CND6: PRINTR ". You can't remove it."
?CCL5: EQUAL? GL-PRSA,V?READ,V?EXAMINE \?CCL10
EQUAL? GL-PLACE-CUR,RM-BROAD-SANCTUARY \?CCL13
SET 'GL-WINDOW,PT?307
JUMP ?CND11
?CCL13: EQUAL? GL-PLACE-CUR,RM-MANUSCRIPT-ROOM \?CCL15
SET 'GL-WINDOW,PT?407
JUMP ?CND11
?CCL15: EQUAL? GL-PLACE-CUR,RM-MADAME-TUSSAUDS \?CCL17
SET 'GL-WINDOW,PT?507
JUMP ?CND11
?CCL17: EQUAL? GL-PLACE-CUR,RM-GREAT-RUSSELL-ST \?CCL19
SET 'GL-WINDOW,PT?607
JUMP ?CND11
?CCL19: EQUAL? GL-PLACE-CUR,RM-MONUMENT \?CCL21
SET 'GL-WINDOW,PT?707
JUMP ?CND11
?CCL21: EQUAL? GL-PLACE-CUR,RM-THE-BLACK-MUSEUM \?CCL23
SET 'GL-WINDOW,PT?807
JUMP ?CND11
?CCL23: EQUAL? GL-PLACE-CUR,RM-THREADNEEDLE-ST \?CCL25
SET 'GL-WINDOW,PT?907
JUMP ?CND11
?CCL25: EQUAL? GL-PLACE-CUR,RM-TOWER-ENTRANCE \?CCL27
SET 'GL-WINDOW,PT?1007
JUMP ?CND11
?CCL27: EQUAL? GL-PLACE-CUR,RM-TRAFALGAR-SQUARE \?CCL29
SET 'GL-WINDOW,PT?1107
JUMP ?CND11
?CCL29: EQUAL? GL-PLACE-CUR,RM-VICTORIA-STREET \?CCL31
SET 'GL-WINDOW,PT?1207
JUMP ?CND11
?CCL31: EQUAL? GL-PLACE-CUR,RM-SWAN-LANE \?CCL33
SET 'GL-WINDOW,PT?1307
JUMP ?CND11
?CCL33: EQUAL? GL-PLACE-CUR,RM-JERUSALEM-CHAMBER \?CCL35
SET 'GL-WINDOW,PT?1407
JUMP ?CND11
?CCL35: SET 'GL-WINDOW,PT?1607
?CND11: ICALL2 RT-WINDOW,GL-WINDOW
SET 'GL-WINDOW,FALSE-VALUE
RTRUE
?CCL10: EQUAL? GL-PRSA,V?PUT,V?PUT-ON \FALSE
ZERO? GL-NOW-PRSI? /FALSE
PRINTI "Putting anything on "
ICALL2 RT-THEO-PRINT,LG-PLAQUES
PRINTI " would"
CALL1 RT-WASTE-OF-TIME-MSG
RSTACK
.FUNCT RT-DF-LG-WAX-STATUES,CONTEXT,CLASS
EQUAL? CONTEXT,K-M-SDESC \?CCL3
ICALL PRINT-SDESC,STR?824,CLASS,FALSE-VALUE,TRUE-VALUE
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \FALSE
EQUAL? GL-PLACE-CUR,RM-MADAME-TUSSAUDS \?CCL8
PRINTR "The statues are of King John, Sir Francis Drake, Sir Walter Raleigh, and William the Conqueror."
?CCL8: EQUAL? GL-PLACE-CUR,RM-CHAMBER-OF-HORRORS \FALSE
PRINTR "The statues are of Guy Fawkes, Charles I, and Saint Thomas Becket."
.FUNCT RT-AC-LG-WINDOW,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
EQUAL? GL-PLACE-CUR,RM-221B-BAKER-ST \?CCL6
PRINTR "It is a bow window, far above your head."
?CCL6: EQUAL? GL-PLACE-CUR,RM-SOUTH-TRANSEPT \?CCL8
PRINTI "It is the largest rose window in all England"
CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2,3 \?CND9
PRINT K-BRIGHTENS-UP-MSG
?CND9: PRINTR "."
?CCL8: EQUAL? GL-PLACE-CUR,RM-NORTH-TRANSEPT \FALSE
PRINTI "It is set high in the north wall of the Abbey"
CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2,3 \?CND13
PRINT K-BRIGHTENS-UP-MSG
?CND13: PRINTR "."
?CCL3: EQUAL? GL-PRSA,V?SHOOT \?CCL16
ZERO? GL-NOW-PRSI? \?CCL16
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
?CCL16: IN? GL-WINNER,RM-SOUTH-TRANSEPT /?CTR19
IN? GL-WINNER,RM-NORTH-TRANSEPT \?CCL20
?CTR19: EQUAL? GL-PRSA,V?LOOK-INSIDE,V?SEARCH,V?LOOK-OUTSIDE \?CCL25
PRINTR "You cannot see through the stained-glass window."
?CCL25: CALL1 RT-TOUCH-VERB?
ZERO? STACK /FALSE
ICALL2 RT-CTHEO-PRINT,LG-WINDOW
PRINTR " is too high."
?CCL20: IN? GL-WINNER,RM-221B-BAKER-ST \?CCL29
CALL1 RT-TOUCH-VERB?
ZERO? STACK /?CCL32
ICALL2 RT-CTHEO-PRINT,LG-WINDOW
PRINTR " is too high."
?CCL32: EQUAL? GL-PRSA,V?LOOK-INSIDE,V?LOOK-OUTSIDE,V?SEARCH \FALSE
ICALL2 RT-CTHEO-PRINT,LG-WINDOW
PRINTR " is too high to see in."
?CCL29: IN? GL-WINNER,RM-HOLMES-STUDY \FALSE
EQUAL? GL-PRSA,V?LOOK-INSIDE,V?LOOK-OUTSIDE,V?SEARCH \?CCL39
PRINTI "You look down into Baker Street."
CRLF
CALL2 RT-DESCRIBE-PLACE-CONTENTS,RM-221B-BAKER-ST
RSTACK
?CCL39: EQUAL? GL-PRSA,V?MUNG \?CCL41
ICALL2 RT-CTHEO-PRINT,LG-WINDOW
PRINTR " is made of reinforced glass. It can't be broken."
?CCL41: EQUAL? GL-PRSA,V?OPEN \FALSE
ICALL2 RT-CTHEO-PRINT,LG-WINDOW
PRINTR " is jammed shut. It can't be opened."
.FUNCT RT-AC-LG-TOMBS-ABBEY,CONTEXT
GETP LG-TOMBS-ABBEY,P?OBJ-NOUN
EQUAL? STACK,W?ABBEY \?CCL3
EQUAL? CONTEXT,K-M-SDESC \?CCL6
PRINTI "Abbey"
RTRUE
?CCL6: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \?CCL10
EQUAL? GL-PLACE-CUR,RM-NAVE \?CCL13
CALL1 RT-ALREADY-IN-ROOM-MSG
RSTACK
?CCL13: EQUAL? GL-PLACE-CUR,RM-BROAD-SANCTUARY \FALSE
CALL2 RT-DO-WALK,P?EAST
RSTACK
?CCL10: EQUAL? GL-PRSA,V?EXIT \?CCL17
EQUAL? GL-PLACE-CUR,RM-NAVE \?CCL20
CALL2 RT-DO-WALK,P?WEST
RSTACK
?CCL20: CALL1 RT-NOT-IN-ROOM-MSG
RSTACK
?CCL17: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-IMPOSSIBLE-MSG
RSTACK
?CCL3: EQUAL? CONTEXT,K-M-SDESC \?CCL25
PRINTI "tombs"
RTRUE
?CCL25: FSET? GL-PLACE-CUR,FL-INDOORS \?CTR26
EQUAL? GL-PLACE-CUR,RM-JERICHO-PARLOUR,RM-JERUSALEM-CHAMBER,RM-NORTH-CLOISTER \?CCL27
?CTR26: ICALL2 RT-CANT-SEE-ANY-MSG,LG-TOMBS-ABBEY
RTRUE
?CCL27: EQUAL? CONTEXT,K-M-DESCFCN \?CCL31
EQUAL? GL-PLACE-CUR,RM-SOUTH-AMBULATORY,RM-NORTH-AMBULATORY \?CCL34
PRINTR "There are so many of them! None stands out in particular."
?CCL34: EQUAL? GL-PLACE-CUR,RM-CONFESSOR-CHAPEL \?CCL36
PRINTR "Two of them are especially interesting. One is the tomb of Edward the Confessor. The other is of Henry V."
?CCL36: PRINTR "One tomb in particular catches your eye."
?CCL31: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-SHOOT-DEAD-MSG
RSTACK
.FUNCT RT-AC-LG-STREETLIGHT
CALL1 RT-TOUCH-VERB?
ZERO? STACK /?CCL3
ICALL2 RT-CTHEO-PRINT,LG-STREETLIGHT
PRINTR " is too high."
?CCL3: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
.FUNCT RT-AC-LG-STAIRWAY
EQUAL? GL-PRSA,V?CLIMB-UP \?CCL3
CALL2 RT-DO-WALK,P?UP
RSTACK
?CCL3: EQUAL? GL-PRSA,V?CLIMB-DOWN \FALSE
CALL2 RT-DO-WALK,P?DOWN
RSTACK
.FUNCT RT-AC-LG-SHAFT-OF-LIGHT,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "Well, it's not really a shaft of light. It's more like a diffused murkiness. But any light that penetrates an English church from the outside counts as a shaft."
?CCL3: ZERO? GL-NOW-PRSI? \?CCL5
EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-WASTE-OF-BULLETS-MSG
RSTACK
?CCL5: ZERO? GL-NOW-PRSI? /FALSE
EQUAL? GL-PRSA,V?PUT \FALSE
EQUAL? GL-PRSO,TH-MAGNIFYING-GLASS \?CCL16
CALL1 RT-WHO-SAYS?
EQUAL? STACK,CH-HOLMES \?CCL19
PRINTR """Your Afghan experience is showing, Watson. The hot sun there would surely produce rays capable, when focused, of producing a flame. Alas, our English sun is too weak to produce such an effect."""
?CCL19: PRINTR "The rays from England's sun are too weak to focus."
?CCL16: EQUAL? GL-PRSO,TH-GREEN-PAPER,TH-WHITE-PAPER,TH-BLUE-PAPER /FALSE
EQUAL? GL-PRSO,TH-ORANGE-PAPER,TH-YELLOW-PAPER,TH-BROWN-PAPER /FALSE
PRINTI "Putting "
ICALL1 RT-THEO-PRINT
PRINTI " in "
ICALL1 RT-THEI-PRINT
CALL1 RT-WASTE-OF-TIME-MSG
RSTACK
.FUNCT RT-AC-LG-RAVENS,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \?CCL3
PRINTR "The ravens stare at you with baleful eyes."
?CCL3: EQUAL? CONTEXT,K-M-WINNER \?CCL5
ICALL2 RT-CTHEO-PRINT,LG-RAVENS
PRINTR " caw raucously in response."
?CCL5: ZERO? GL-NOW-PRSI? \FALSE
EQUAL? GL-PRSA,V?TAKE \?CCL10
ICALL2 RT-CTHEO-PRINT,LG-RAVENS
PRINTR " fly out of reach."
?CCL10: EQUAL? GL-PRSA,V?SHOOT \?CCL12
ICALL RT-SHOOT-BIRDS,LG-RAVENS,STR?825
RTRUE
?CCL12: EQUAL? GL-PRSA,V?LISTEN \FALSE
PRINTR "None of the ravens is quothing ""Nevermore."""
.FUNCT RT-DF-LG-BOATS,CONTEXT
EQUAL? CONTEXT,K-M-DESCFCN \FALSE
CALL1 RT-TIME-OF-DAY
ZERO? STACK \?CCL5
ICALL2 RT-CTHEO-PRINT,LG-BOATS
PRINTR " are shrouded in fog."
?CCL5: ICALL2 RT-CTHEO-PRINT,LG-BOATS
PRINTR " bob merrily on the river."
.FUNCT RT-AC-LG-HOLMES-HOUSE
EQUAL? GL-PRSA,V?ENTER \?CCL3
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL,RM-PARLOUR,RM-VESTIBULE /?CTR5
EQUAL? GL-PLACE-CUR,RM-HOLMES-STUDY,RM-HOLMES-BEDROOM \?CCL6
?CTR5: ICALL1 RT-ALREADY-IN-ROOM-MSG
RTRUE
?CCL6: EQUAL? GL-PLACE-CUR,RM-221B-BAKER-ST \FALSE
ICALL2 RT-DO-WALK,P?WEST
RTRUE
?CCL3: EQUAL? GL-PRSA,V?EXIT \FALSE
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL \?CCL15
ICALL2 RT-DO-WALK,P?EAST
RTRUE
?CCL15: EQUAL? GL-PLACE-CUR,RM-PARLOUR,RM-VESTIBULE,RM-HOLMES-STUDY /?CTR16
EQUAL? GL-PLACE-CUR,RM-HOLMES-BEDROOM \?CCL17
?CTR16: PRINT K-SPECIFY-DIR-MSG
CRLF
RTRUE
?CCL17: ICALL1 RT-NOT-IN-ROOM-MSG
RTRUE
.FUNCT RT-AC-LG-PEDESTAL,CONTEXT,CLASS
EQUAL? CONTEXT,K-M-SDESC \?CCL3
ICALL PRINT-SDESC,STR?826,CLASS,FALSE-VALUE,FALSE-VALUE
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-DESCFCN \FALSE
EQUAL? GL-PLACE-CUR,RM-TRAFALGAR-SQUARE \FALSE
PRINTR "On the pedestal you see a bronze relief."
.FUNCT RT-AC-LG-TOWER
EQUAL? GL-PRSA,V?ENTER \?CCL3
EQUAL? GL-PLACE-CUR,RM-BYWARD-TOWER,RM-BLOODY-TOWER,RM-WAKEFIELD-TOWER /?CTR5
EQUAL? GL-PLACE-CUR,RM-JEWEL-ROOM,RM-DUNGEON,RM-TORTURE-ROOM /?CTR5
EQUAL? GL-PLACE-CUR,RM-WHITE-TOWER,RM-BOWYER-TOWER \?CCL6
?CTR5: CALL1 RT-ALREADY-IN-ROOM-MSG
RSTACK
?CCL6: EQUAL? GL-PLACE-CUR,RM-OUTER-WARD,RM-TOWER-GREEN \?CCL11
PRINT K-SPECIFY-DIR-MSG
CRLF
RTRUE
?CCL11: EQUAL? GL-PLACE-CUR,RM-OUTSIDE-TRAITORS-GATE \?CCL13
CALL2 RT-DO-WALK,P?NORTH
RSTACK
?CCL13: EQUAL? GL-PLACE-CUR,RM-DRAWBRIDGE,RM-TOWER-ENTRANCE \FALSE
CALL2 RT-DO-WALK,P?EAST
RSTACK
?CCL3: EQUAL? GL-PRSA,V?EXIT \?CCL17
EQUAL? GL-PLACE-CUR,RM-BLOODY-TOWER,RM-WAKEFIELD-TOWER,RM-WHITE-TOWER /?CTR19
EQUAL? GL-PLACE-CUR,RM-BOWYER-TOWER,RM-BYWARD-TOWER \?CCL20
?CTR19: CALL2 RT-DO-WALK,P?OUT
RSTACK
?CCL20: EQUAL? GL-PLACE-CUR,RM-DUNGEON,RM-TORTURE-ROOM \?CCL24
CALL2 RT-DO-WALK,P?UP
RSTACK
?CCL24: EQUAL? GL-PLACE-CUR,RM-JEWEL-ROOM \?CCL26
CALL2 RT-DO-WALK,P?DOWN
RSTACK
?CCL26: EQUAL? GL-PLACE-CUR,RM-INSIDE-TRAITORS-GATE \?CCL28
CALL2 RT-DO-WALK,P?SOUTH
RSTACK
?CCL28: EQUAL? GL-PLACE-CUR,RM-OUTER-WARD,RM-TOWER-GREEN \?CCL30
PRINT K-SPECIFY-DIR-MSG
CRLF
RTRUE
?CCL30: CALL1 RT-NOT-IN-ROOM-MSG
RSTACK
?CCL17: EQUAL? GL-PRSA,V?SHOOT \FALSE
CALL1 RT-IMPOSSIBLE-MSG
RSTACK
.ENDI

691
locals.zil Normal file
View File

@ -0,0 +1,691 @@
;******************************************************************************
; "game : SHERLOCK!"
; "file : LOCALS.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 26 Oct 1987 7:15:02 $"
; "rev : $Revision: 1.51 $"
; "vers : 1.00"
;******************************************************************************
<OBJECT LG-BAKER-ST-DOOR
(LOC LOCAL-GLOBALS)
(DESC "front door")
(FLAGS FL-DOOR FL-OPENABLE FL-LOCKED)
(SYNONYM DOOR)
(ADJECTIVE FRONT HOLMES\' HOLMES\'S SHERLOCK)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-BAKER-ST-DOOR)>
<OBJECT LG-PARLOUR-DOOR
(LOC LOCAL-GLOBALS)
(DESC "parlour door")
(FLAGS FL-DOOR FL-OPENABLE)
(SYNONYM DOOR)
(ADJECTIVE PARLOUR PARLOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-PARLOUR-DOOR)>
<OBJECT LG-HOLMES-STUDY-DOOR
(LOC LOCAL-GLOBALS)
(DESC "study door")
(FLAGS FL-DOOR FL-OPENABLE FL-OPENED)
(SYNONYM DOOR)
(ADJECTIVE STUDY HOLMES\'S HOLMES\' SHERLOCK)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-HOLMES-STUDY-DOOR)>
<OBJECT LG-HOLMES-BEDROOM-DOOR
(LOC LOCAL-GLOBALS)
(DESC "bedroom door")
(FLAGS FL-DOOR FL-OPENABLE FL-LOCKED)
(SYNONYM DOOR)
(ADJECTIVE BEDROOM HOLMES\'S HOLMES\' SHERLOCK)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-HOLMES-BEDROOM-DOOR)>
<OBJECT LG-BANK-VAULT-DOOR
(LOC LOCAL-GLOBALS)
(DESC "vault door")
(FLAGS FL-DOOR FL-OPENABLE FL-LOCKED FL-HAS-DESCFCN)
(SYNONYM DOOR)
(ADJECTIVE VAULT)
(VALUE 3)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-BANK-VAULT-DOOR)>
<OBJECT LG-BAR-OF-GOLD-DOOR
(LOC LOCAL-GLOBALS)
(DESC "door")
(FLAGS FL-DOOR FL-OPENABLE FL-OPENED)
(SYNONYM DOOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-BAR-OF-GOLD-DOOR)>
<OBJECT LG-LAIR-DOOR
(LOC LOCAL-GLOBALS)
(DESC "door")
(FLAGS FL-DOOR FL-OPENABLE FL-LOCKED)
(SYNONYM DOOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-LAIR-DOOR)>
<OBJECT LG-JERICHO-PARLOUR-DOOR
(LOC LOCAL-GLOBALS)
(DESC "door to the Jericho Parlour")
(FLAGS FL-DOOR FL-OPENABLE)
(SYNONYM DOOR)
(ADJECTIVE JERICHO PARLOUR PARLOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-JERICHO-PARLOUR-DOOR)>
<OBJECT LG-BRITISH-MUSEUM-DOOR
(LOC LOCAL-GLOBALS)
(DESC "door")
(FLAGS FL-DOOR FL-LOCKED FL-OPENABLE)
(SYNONYM DOOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-BRITISH-MUSEUM-DOOR)>
<OBJECT LG-WESTMINSTER-DOOR
(LOC LOCAL-GLOBALS)
(DESC "Abbey door")
(FLAGS FL-DOOR FL-LOCKED FL-OPENABLE)
(SYNONYM DOOR)
(GENERIC RT-GN-DOOR)
(ACTION RT-AC-LG-WESTMINSTER-DOOR)>
<OBJECT LG-SHOPS
(LOC LOCAL-GLOBALS)
(DESC "shops")
(FLAGS FL-PLURAL FL-HAS-DESCFCN)
(SYNONYM SHOPS STORES EMPORIUMS WINDOWS WINDOW SHOP STORE)
(ACTION RT-AC-LG-SHOPS)>
<OBJECT LG-WATER
(LOC LOCAL-GLOBALS)
(FLAGS FL-NODESC FL-CONTAINER FL-OPENED FL-SURFACE FL-HAS-SDESC
FL-NOARTC)
(SYNONYM WATER RIVER THAMES)
(SIZE 0 CAPACITY 100)
(ACTION RT-AC-LG-WATER)>
<OBJECT LG-UP-DOWN-STREAM
(LOC LOCAL-GLOBALS)
(FLAGS FL-NODESC FL-HAS-SDESC FL-NEEDS-IDENTITY)
(OBJ-NOUN 0)
(OBJ-ADJ 0)
(SYNONYM UPSTREAM DOWNSTREAM)
(ACTION RT-AC-LG-UP-DOWN-STREAM)>
<OBJECT LG-PLAQUES
(LOC LOCAL-GLOBALS)
(DESC "sign")
(FLAGS FL-TRYTAKE FL-NOALL FL-SURFACE FL-HAS-DESCFCN)
(SYNONYM PLAQUE PLATE SIGN RELIEF)
(SIZE 0 CAPACITY 999)
(ACTION RT-AC-LG-PLAQUES)>
<OBJECT LG-WINDOW
(LOC LOCAL-GLOBALS)
(DESC "window")
(FLAGS FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN FL-OPENABLE FL-TRANSPARENT)
(SYNONYM WINDOW)
(ADJECTIVE BOW)
(ACTION RT-AC-LG-WINDOW)>
<OBJECT LG-TOMBS-ABBEY
(LOC LOCAL-GLOBALS)
(FLAGS FL-TRYTAKE FL-PLURAL FL-NOALL FL-HAS-DESCFCN
FL-HAS-SDESC FL-NEEDS-IDENTITY)
(OBJ-ADJ 0)
(OBJ-NOUN 0)
(ADJECTIVE WESTMINSTER)
(SYNONYM TOMBS SCULPTURES STATUES TOMB ABBEY)
(ACTION RT-AC-LG-TOMBS-ABBEY)>
<OBJECT LG-STREETLIGHT
(LOC LOCAL-GLOBALS)
(DESC "streetlight")
(FLAGS FL-TRYTAKE FL-NOALL FL-TRANSPARENT)
(SYNONYM LIGHT LAMP STREETLIGHT STREETLAMP STREET-LIGHT GASLIGHT GAS-LIGHT)
(ADJECTIVE GAS)
(ACTION RT-AC-LG-STREETLIGHT)>
<OBJECT LG-STAIRWAY
(LOC LOCAL-GLOBALS)
(DESC "stairway")
(FLAGS FL-TRYTAKE FL-NOALL)
(SYNONYM STAIRWAY STAIR STAIRS STEP STEPS)
(ACTION RT-AC-LG-STAIRWAY)>
<OBJECT LG-SHAFT-OF-LIGHT
(LOC LOCAL-GLOBALS)
(DESC "shaft of light")
(FLAGS FL-NODESC FL-HAS-DESCFCN)
(SYNONYM SHAFT LIGHT SUNLIGHT)
(ADJECTIVE SHAFT LIGHT SUNLIGHT)
(ACTION RT-AC-LG-SHAFT-OF-LIGHT)>
<OBJECT LG-MARBLE
(LOC LOCAL-GLOBALS)
(DESC "marble")
(FLAGS FL-NODESC)
(SYNONYM MARBLE)>
<OBJECT LG-COLUMNS
(LOC LOCAL-GLOBALS)
(DESC "columns")
(FLAGS FL-TRYTAKE FL-PLURAL FL-NOALL)
(SYNONYM COLUMNS COLUMN)
(ADJECTIVE PURBECK)>
<OBJECT LG-RAVENS
(LOC LOCAL-GLOBALS)
(DESC "ravens")
(FLAGS FL-NODESC FL-PLURAL FL-ALIVE FL-TRYTAKE FL-HAS-DESCFCN)
(SYNONYM RAVENS BIRDS ROOKS RAVEN ROOK BIRD)
(ADJECTIVE FLOCK GROUP BUNCH GAGGLE)
(SIZE 50 MASS 250)
(ACTION RT-AC-LG-RAVENS)>
<OBJECT LG-BOATS
(LOC LOCAL-GLOBALS)
(DESC "boats")
(FLAGS FL-NODESC FL-HAS-DESCFCN)
(SYNONYM BOATS SHIPS)
(ADJECTIVE PLEASURE)
(ACTION RT-DF-LG-BOATS)>
<OBJECT LG-TOWER
(LOC LOCAL-GLOBALS)
(DESC "Tower")
(SYNONYM TOWER LONDON)
(ADJECTIVE TOWER LONDON)
(GENERIC RT-GN-TOWER)
(ACTION RT-AC-LG-TOWER)>
<ROUTINE RT-AC-LG-BAKER-ST-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-BAKER-ST-DOOR">>
<COND (<MC-VERB? KNOCK>
<COND (<MC-HERE? ,RM-ENTRY-HALL>
<TELL "You are already inside." CR>)
(<MC-IS? ,LG-BAKER-ST-DOOR ,FL-OPENED>
<TELL "The door is already open." CR>)
(<MC-IS? ,CH-HUDSON ,FL-ASLEEP>
<TELL "There is no answer." CR>)
(<MC-ISNOT? ,LG-BAKER-ST-DOOR ,FL-LOCKED>
<MC-MAKE ,LG-BAKER-ST-DOOR ,FL-OPENED>
<MOVE ,CH-HUDSON ,RM-ENTRY-HALL>
<RT-THIS-IS-IT ,CH-HUDSON>
<TELL
"Mrs Hudson appears and says, \"Please come in Dr Watson.\" She
steps back into the hall to allow room for you to pass." CR>)
(T
<MC-UNMAKE ,LG-BAKER-ST-DOOR ,FL-LOCKED>
<SETG GL-PLACE-CUR ,RM-ENTRY-HALL>
<MOVE ,CH-HUDSON ,GL-PLACE-CUR>
<MOVE ,CH-PLAYER ,GL-PLACE-CUR>
<RT-THIS-IS-IT ,CH-HUDSON>
<TELL
"You hear a bolt sliding back and the door opens to reveal a worried
Mrs Hudson." CR CR
"\"Oh Doctor Watson, I'm so glad to see you. It's Mr
Holmes, sir. Three days have come and gone since he's been out of his
rooms. He won't eat and I know he hasn't slept. Now there's a visitor
who says he's here about some important government business. I tried
to send him away, but he insisted on waiting in the parlour. That's
when I sent for you. Thank God you've come.\"" CR>
<RT-EXEC-RM-DESCFCN ,RM-ENTRY-HALL ,K-M-DESC-1>
<CRLF>)>)
(<MC-VERB? KICK HIT MUNG>
<COND (<MC-HERE? ,RM-ENTRY-HALL>
<RFALSE>)
(<MC-ISNOT? ,LG-BAKER-ST-DOOR ,FL-OPENED>
<TELL
"Mrs Hudson pokes her head out the door and says, \"I'm not opening the door
until you knock like a proper gentleman.\" She slams the door in your
face." CR>)>)
(<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-221B-BAKER-ST>
<RT-DO-WALK ,P?WEST>)
(<MC-HERE? ,RM-ENTRY-HALL>
<RT-DO-WALK ,P?EAST>)>)>>
<ROUTINE RT-AC-LG-PARLOUR-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-PARLOUR-DOOR">>
<COND (<MC-VERB? OPEN>
<COND (<MC-IS? ,CH-HOLMES ,FL-ASLEEP>
<TELL CTHE ,CH-HUDSON ,K-HUDSON-WORRIED-MSG CR>)>)
(<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-PARLOUR>
<RT-DO-WALK ,P?SOUTH>)
(<MC-HERE? ,RM-ENTRY-HALL>
<RT-DO-WALK ,P?NORTH>)>)>>
<ROUTINE RT-AC-LG-HOLMES-STUDY-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-HOLMES-STUDY-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-VESTIBULE>
<RT-DO-WALK ,P?NORTH>)
(<MC-HERE? ,RM-HOLMES-STUDY>
<RT-DO-WALK ,P?SOUTH>)>)>>
<ROUTINE RT-AC-LG-HOLMES-BEDROOM-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-HOLMES-BEDROOM-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-HOLMES-STUDY>
<RT-DO-WALK ,P?WEST>)
(<MC-HERE? ,RM-HOLMES-BEDROOM>
<RT-DO-WALK ,P?EAST>)>)>>
<ROUTINE RT-AC-LG-BAR-OF-GOLD-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-BAR-OF-GOLD-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-BAR-OF-GOLD>
<RT-DO-WALK ,P?EAST>)
(<MC-HERE? ,RM-SWAN-LANE>
<RT-DO-WALK ,P?WEST>)>)>>
<ROUTINE RT-AC-LG-LAIR-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-LAIR-DOOR">>
<COND (<MC-THIS-PRSO?>
<COND (<AND <MC-VERB? ENTER THROUGH OPEN CLOSE UNLOCK LOCK>
<MC-ISNOT? ,CH-AKBAR ,FL-LOCKED>
<MC-ISNOT? ,CH-AKBAR ,FL-ASLEEP>>
<TELL "Akbar">
<COND (<MC-IS? ,TH-WATSONS-HAT ,FL-WORN>
<TELL " says, \"Forgive me, sir,\" and">)>
<TELL " stops you as you move toward the door." CR>)
(<AND <MC-VERB? OPEN>
<MC-IS? ,CH-HOLMES ,FL-LOCKED>>
<TELL
"Holmes calls out, \"Watson! I'm still tied up!\" You pause and look back,
torn by indecision." CR>)
(<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-LAIR>
<RT-DO-WALK ,P?OUT>)>)
(<AND <MC-VERB? UNLOCK>
<MC-PRSI? ,TH-LAIR-KEY>
<MC-IS? ,LG-LAIR-DOOR ,FL-LOCKED>>
<MC-UNMAKE ,LG-LAIR-DOOR ,FL-LOCKED>
<RT-CYOU-MSG "unlock" "unlocks">
<TELL THE ,LG-LAIR-DOOR "." CR>)
(<AND <MC-VERB? LOCK>
<MC-PRSI? ,TH-LAIR-KEY>
<MC-ISNOT? ,LG-LAIR-DOOR ,FL-OPENED>
<MC-ISNOT? ,LG-LAIR-DOOR ,FL-LOCKED>>
<MC-MAKE ,LG-LAIR-DOOR ,FL-LOCKED>
<RT-CYOU-MSG "lock" "locks">
<TELL THE ,LG-LAIR-DOOR "." CR>)>)>>
<ROUTINE RT-AC-LG-JERICHO-PARLOUR-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-JERICHO-PARLOUR-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-SOUTH-AISLE>
<RT-DO-WALK ,P?SOUTH>)
(<MC-HERE? ,RM-JERICHO-PARLOUR>
<RT-DO-WALK ,P?NORTH>)>)>>
<ROUTINE RT-AC-LG-SHOPS ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-SHOPS">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL "The shops are closed for the Jubilee." CR>)
(<MC-VERB? LOOK-INSIDE SEARCH>
<TELL "The shops are all closed for the Jubilee." CR>)>>
<ROUTINE RT-AC-LG-WATER ("OPT" (CONTEXT <>) (CLASS <>) (CAP? <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-WATER">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<PRINT-SDESC "water" .CLASS
<COND (<==? .CLASS ,K-DESC-A> T)
(T <>)>
<>>
<RTRUE>)
(<T? .CONTEXT> <RFALSE>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? ENTER LEAP>
<COND (<EQUAL? ,GL-WINNER ,CH-PLAYER>
<TELL "You may not remember this, but you can't swim." CR>)
(T
<TELL "That's not very polite." CR>)>)
(<MC-VERB? DRINK>
<TELL ,K-YUCK-MSG CR>)
(<MC-VERB? EXAMINE>
<TELL "The water is black, oily, slimy, dirty, and
otherwise unwholesome-looking." CR>)
(<MC-VERB? LOOK-INSIDE SEARCH>
<TELL
"The water is so black and oily that you can't see a thing." CR>)
(<MC-VERB? REACH-IN SEARCH>
<TELL
"Slimy things brush up against your hand, so you quickly pull it back." CR>)
(<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>)
(<MC-THIS-PRSI?>
<COND (<MC-VERB? PUT PUT-ON>
<COND (<OR <MC-IS? ,GL-PRSO ,FL-BODYPART>
<MC-PRSO? ,CH-ME ,CH-PLAYER>>
<TELL ,K-YUCK-MSG CR>)
(T
<COND (<OR <MC-PRSO? ,TH-ANCHOR ,PSEUDO-OBJECT>
<EQUAL? <LOC ,GL-PRSO>
,GLOBAL-OBJECTS
,LOCAL-GLOBALS>>
<RT-PERFORM ,V?DROP ,GL-PRSO>
<RTRUE>)
(<MC-PRSO? ,CH-TRAINED-PIGEON>
<REMOVE ,GL-PRSO>
<RT-KILL-PIGEON>
<TELL "The pigeon struggles briefly,
its feathers too wet to fly, then sinks below the water.">
<RTRUE>)
(T
<REMOVE ,GL-PRSO>
<FCLEAR ,GL-PRSO ,FL-WORN>
<TELL "Plop." CR>
<RTRUE>)>)>)>)>>
<ROUTINE RT-AC-LG-UP-DOWN-STREAM ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-UPSTREAM">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<PRINTB <GETP ,LG-UP-DOWN-STREAM ,P?OBJ-NOUN>>)
(<MC-VERB? SHOOT>
<RT-IMPOSSIBLE-MSG>
<RTRUE>)>>
<ROUTINE RT-AC-LG-BRITISH-MUSEUM-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-BRITISH-MUSEUM-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-GREAT-RUSSELL-ST>
<RT-DO-WALK ,P?NORTH>)
(<MC-HERE? ,RM-BRITISH-MUSEUM>
<RT-DO-WALK ,P?SOUTH>)>)>>
<ROUTINE RT-AC-LG-WESTMINSTER-DOOR ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-WESTMINSTER-DOOR">>
<COND (<MC-VERB? ENTER THROUGH>
<COND (<MC-HERE? ,RM-BROAD-SANCTUARY>
<RT-DO-WALK ,P?EAST>)
(<MC-HERE? ,RM-NAVE>
<RT-DO-WALK ,P?WEST>)>)>>
<ROUTINE RT-AC-LG-PLAQUES ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-PLAQUES">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL "It looks mighty like a plaque." CR>)
(<MC-VERB? TAKE>
<TELL "The plaque is firmly attached to the ">
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-MANUSCRIPT-ROOM>
<TELL "desk">)
(T
<TELL "wall">)>
<TELL ". You can't remove it." CR>)
(<MC-VERB? READ EXAMINE>
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-BROAD-SANCTUARY>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-ABBEY>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-MANUSCRIPT-ROOM>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-QUIET>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-MADAME-TUSSAUDS>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-HORRORS>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-GREAT-RUSSELL-ST>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-MUSEUM>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-MONUMENT>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-MONUMENT>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-THE-BLACK-MUSEUM>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-BLIGH>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-THREADNEEDLE-ST>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-BANK>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-TOWER-ENTRANCE>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-TOWER>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-TRAFALGAR-SQUARE>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-NELSON>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-VICTORIA-STREET>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-LOITER>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-SWAN-LANE>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-GOLDBAR>>)
(<EQUAL? ,GL-PLACE-CUR ,RM-JERUSALEM-CHAMBER>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-HENRY>>)
;(<EQUAL? ,GL-PLACE-CUR ,RM-BLIND-ALLEY>
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-HERRING>>)
(T
<SETG GL-WINDOW <GET ,GL-QUOTES ,K-SIGN-BLANK>>)>
<RT-WINDOW ,GL-WINDOW>
<SETG GL-WINDOW <>>
<RTRUE>)
(<AND <MC-VERB? PUT PUT-ON>
<MC-THIS-PRSI?>>
<TELL "Putting anything on " THE ,LG-PLAQUES " would">
<RT-WASTE-OF-TIME-MSG>)>>
<ROUTINE RT-DF-LG-WAX-STATUES ("OPT" (CONTEXT <>) (CLASS <>))
<DEBUGGING? <RT-DEBUG-LG-DF "LG-WAX-STATUES">>
<COND (<==? .CONTEXT ,K-M-SDESC>
<PRINT-SDESC "statues" .CLASS <> T>
<RTRUE>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-MADAME-TUSSAUDS>
<TELL "The statues are of King John, Sir Francis Drake,
Sir Walter Raleigh, and William the Conqueror." CR>)
(<EQUAL? ,GL-PLACE-CUR ,RM-CHAMBER-OF-HORRORS>
<TELL "The statues are of Guy Fawkes, Charles I, and
Saint Thomas Becket." CR>)>)>>
<ROUTINE RT-AC-LG-WINDOW ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-WINDOW">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-221B-BAKER-ST>
<TELL "It is a bow window, far above your head." CR>)
(<EQUAL? ,GL-PLACE-CUR ,RM-SOUTH-TRANSEPT>
<TELL "It is the largest rose window in all England">
<COND (<EQUAL? <RT-TIME-OF-DAY> 1 2 3>
<TELL ,K-BRIGHTENS-UP-MSG>)>
<TELL "." CR>)
(<EQUAL? ,GL-PLACE-CUR ,RM-NORTH-TRANSEPT>
<TELL "It is set high in the north wall of the Abbey">
<COND (<EQUAL? <RT-TIME-OF-DAY> 1 2 3>
<TELL ,K-BRIGHTENS-UP-MSG>)>
<TELL "." CR>)>)
(<AND <MC-VERB? SHOOT>
<MC-THIS-PRSO?>>
<RT-WASTE-OF-BULLETS-MSG>)
(<OR <IN? ,GL-WINNER ,RM-SOUTH-TRANSEPT>
<IN? ,GL-WINNER ,RM-NORTH-TRANSEPT>>
<COND (<MC-VERB? LOOK-INSIDE SEARCH LOOK-OUTSIDE>
<TELL "You cannot see through the stained-glass window." CR>)
(<RT-TOUCH-VERB?>
<TELL CTHE ,LG-WINDOW " is too high." CR>)>)
(<IN? ,GL-WINNER ,RM-221B-BAKER-ST>
<COND (<RT-TOUCH-VERB?>
<TELL CTHE ,LG-WINDOW " is too high." CR>)
(<MC-VERB? LOOK-INSIDE LOOK-OUTSIDE SEARCH>
<TELL CTHE ,LG-WINDOW " is too high to see in." CR>)>)
(<IN? ,GL-WINNER ,RM-HOLMES-STUDY>
<COND (<MC-VERB? LOOK-INSIDE LOOK-OUTSIDE SEARCH>
<TELL "You look down into Baker Street." CR>
<RT-DESCRIBE-PLACE-CONTENTS ,RM-221B-BAKER-ST>)
(<MC-VERB? MUNG>
<TELL CTHE ,LG-WINDOW
" is made of reinforced glass. It can't be broken." CR>)
(<MC-VERB? OPEN>
<TELL CTHE ,LG-WINDOW
" is jammed shut. It can't be opened." CR>)>)>>
<ROUTINE RT-AC-LG-TOMBS-ABBEY ("OPT" (CONTEXT <>))
<COND (<==? <GETP ,LG-TOMBS-ABBEY ,P?OBJ-NOUN> ,W?ABBEY>
<COND (<==? .CONTEXT ,K-M-SDESC>
<TELL "Abbey">)
(<T? .CONTEXT> <RFALSE>)
(<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-NAVE>
<RT-ALREADY-IN-ROOM-MSG>)
(<MC-HERE? ,RM-BROAD-SANCTUARY>
<RT-DO-WALK ,P?EAST>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-NAVE>
<RT-DO-WALK ,P?WEST>)
(T
<RT-NOT-IN-ROOM-MSG>)>)
(<MC-VERB? SHOOT>
<RT-IMPOSSIBLE-MSG>)>)
(T
<COND (<==? .CONTEXT ,K-M-SDESC>
<TELL "tombs">)
(<OR <NOT <FSET? ,GL-PLACE-CUR ,FL-INDOORS>>
<EQUAL? ,GL-PLACE-CUR ,RM-JERICHO-PARLOUR
,RM-JERUSALEM-CHAMBER
,RM-NORTH-CLOISTER>>
<RT-CANT-SEE-ANY-MSG ,LG-TOMBS-ABBEY>
<RTRUE>)
(<==? .CONTEXT ,K-M-DESCFCN>
<COND
(<EQUAL? ,GL-PLACE-CUR ,RM-SOUTH-AMBULATORY
,RM-NORTH-AMBULATORY>
<TELL
"There are so many of them! None stands out in particular." CR>)
(<EQUAL? ,GL-PLACE-CUR ,RM-CONFESSOR-CHAPEL>
<TELL
"Two of them are especially interesting. One is the tomb of Edward
the Confessor. The other is of Henry V." CR>)
(T
<TELL "One tomb in particular catches your eye." CR>)>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? SHOOT>
<RT-SHOOT-DEAD-MSG>)>)>)>>
<ROUTINE RT-AC-LG-STREETLIGHT ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-STREETLIGHT">>
<COND (<RT-TOUCH-VERB?>
<TELL CTHE ,LG-STREETLIGHT " is too high." CR>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>)>>
<ROUTINE RT-AC-LG-STAIRWAY ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-STAIRWAY">>
<COND (<MC-VERB? CLIMB-UP>
<RT-DO-WALK ,P?UP>)
(<MC-VERB? CLIMB-DOWN>
<RT-DO-WALK ,P?DOWN>)>>
<ROUTINE RT-AC-LG-SHAFT-OF-LIGHT ("OPT" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-LG-AC "LG-SHAFT-OF-LIGHT">>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL
"Well, it's not really a shaft of light. It's more like a diffused
murkiness. But any light that penetrates an English church from the outside
counts as a shaft." CR>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? SHOOT>
<RT-WASTE-OF-BULLETS-MSG>)>)
(<MC-THIS-PRSI?>
<COND (<MC-VERB? PUT>
<COND (<MC-PRSO? ,TH-MAGNIFYING-GLASS>
<COND (<EQUAL? <RT-WHO-SAYS?> ,CH-HOLMES>
<TELL
"\"Your Afghan experience is showing, Watson. The hot sun there would surely
produce rays capable, when focused, of producing a flame. Alas, our English
sun is too weak to produce such an effect.\"">)
(T
<TELL
"The rays from England's sun are too weak to focus.">)>
<CRLF>)
(<MC-PRSO? ,TH-GREEN-PAPER
,TH-WHITE-PAPER
,TH-BLUE-PAPER
,TH-ORANGE-PAPER
,TH-YELLOW-PAPER
,TH-BROWN-PAPER>
<RFALSE>)
(T
<TELL "Putting " THEO " in " THEI>
<RT-WASTE-OF-TIME-MSG>)>)>)>>
<ROUTINE RT-AC-LG-RAVENS ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-AC "LG-RAVENS" .CONTEXT>>
<COND (<==? .CONTEXT ,K-M-DESCFCN>
<TELL "The ravens stare at you with baleful eyes." CR>)
(<MC-THIS-WINNER?>
<TELL CTHE ,LG-RAVENS " caw raucously in response." CR>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? TAKE>
<TELL CTHE ,LG-RAVENS " fly out of reach." CR>)
(<MC-VERB? SHOOT>
<RT-SHOOT-BIRDS ,LG-RAVENS "staring at you">
<RTRUE>)
(<MC-VERB? LISTEN>
<TELL "None of the ravens is quothing \"Nevermore.\"" CR>)>)>>
<ROUTINE RT-DF-LG-BOATS ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-OB-DF "LG-BOATS" .CONTEXT>>
<COND (<N==? .CONTEXT ,K-M-DESCFCN> <RFALSE>)>
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL CTHE ,LG-BOATS " are shrouded in fog." CR>
<RTRUE>)
(T
<TELL CTHE ,LG-BOATS " bob merrily on the river." CR>)>>
<ROUTINE RT-AC-LG-HOLMES-HOUSE ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-HOLMES-HOUSE">>
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-ENTRY-HALL ,RM-PARLOUR
,RM-VESTIBULE ,RM-HOLMES-STUDY
,RM-HOLMES-BEDROOM>
<RT-ALREADY-IN-ROOM-MSG>
<RTRUE>)
(<MC-HERE? ,RM-221B-BAKER-ST>
<RT-DO-WALK ,P?WEST>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-ENTRY-HALL>
<RT-DO-WALK ,P?EAST>
<RTRUE>)
(<MC-HERE? ,RM-PARLOUR ,RM-VESTIBULE
,RM-HOLMES-STUDY ,RM-HOLMES-BEDROOM>
<TELL ,K-SPECIFY-DIR-MSG CR>
<RTRUE>)
(T
<RT-NOT-IN-ROOM-MSG>
<RTRUE>)>)>>
<ROUTINE RT-AC-LG-PEDESTAL ("OPT" (CONTEXT <>) (CLASS <>))
<COND (<==? .CONTEXT ,K-M-SDESC>
<PRINT-SDESC "pedestal" .CLASS <> <>>
<RTRUE>)
(<N==? .CONTEXT ,K-M-DESCFCN> <RFALSE>)
(<EQUAL? ,GL-PLACE-CUR ,RM-TRAFALGAR-SQUARE>
<TELL "On the pedestal you see a bronze relief." CR>)>>
<ROUTINE RT-AC-LG-TOWER ()
<DEBUGGING? <RT-DEBUG-LG-AC "LG-TOWER">>
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-BYWARD-TOWER ,RM-BLOODY-TOWER
,RM-WAKEFIELD-TOWER ,RM-JEWEL-ROOM
,RM-DUNGEON ,RM-TORTURE-ROOM ,RM-WHITE-TOWER
,RM-BOWYER-TOWER>
<RT-ALREADY-IN-ROOM-MSG>)
(<MC-HERE? ,RM-OUTER-WARD ,RM-TOWER-GREEN>
<TELL ,K-SPECIFY-DIR-MSG CR>)
(<MC-HERE? ,RM-OUTSIDE-TRAITORS-GATE>
<RT-DO-WALK ,P?NORTH>)
(<MC-HERE? ,RM-DRAWBRIDGE ,RM-TOWER-ENTRANCE>
<RT-DO-WALK ,P?EAST>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-BLOODY-TOWER ,RM-WAKEFIELD-TOWER
,RM-WHITE-TOWER ,RM-BOWYER-TOWER
,RM-BYWARD-TOWER>
<RT-DO-WALK ,P?OUT>)
(<MC-HERE? ,RM-DUNGEON ,RM-TORTURE-ROOM>
<RT-DO-WALK ,P?UP>)
(<MC-HERE? ,RM-JEWEL-ROOM>
<RT-DO-WALK ,P?DOWN>)
(<MC-HERE? ,RM-INSIDE-TRAITORS-GATE>
<RT-DO-WALK ,P?SOUTH>)
(<MC-HERE? ,RM-OUTER-WARD RM-TOWER-GREEN>
<TELL ,K-SPECIFY-DIR-MSG CR>)
(T
<RT-NOT-IN-ROOM-MSG>)>)
(<MC-VERB? SHOOT>
<RT-IMPOSSIBLE-MSG>)>>

409
macros.zil Normal file
View File

@ -0,0 +1,409 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : MACROS.ZIL"
; "auth : $Author: DEB $"
; "date : $Date: 24 Sep 1987 21:15:56 $"
; "rev : $Revision: 1.4 $"
; "vers : 1.00"
;*****************************************************************************
;-----------------------------------------------------------------------------
; "default property values"
;-----------------------------------------------------------------------------
<PROPDEF VALUE 0>
<PROPDEF SIZE 0>
<PROPDEF STRENGTH 10>
<PROPDEF DEXTERITY 10>
;*****************************************************************************
; "tell-tokens"
;*****************************************************************************
<TELL-TOKENS
CR <CRLF>
N * <PRINTN .X>
C * <PRINTC .X>
D * <DPRINT .X>
A * <RT-A-PRINT .X>
CA * <RT-THEO-PRINT .X T ,K-DESC-A>
AO <RT-A-PRINT>
ANY * <RT-THEO-PRINT .X <> ,K-DESC-ANY>
THE * <RT-THEO-PRINT .X>
THEO <RT-THEO-PRINT>
THEI <RT-THEI-PRINT>
CTHE * <RT-CTHEO-PRINT .X>
CTHEO <RT-CTHEO-PRINT>
CTHEI <RT-CTHEI-PRINT>
VW <RT-VW-PRINT>
INDENT <RT-INDENT-PRINT>
WRAP <RT-WRAP-PRINT>
>
<DEFINE MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (LL (T)) (L .LL) ATM)
<REPEAT ()
<COND
(<EMPTY? .ATMS>
<RETURN!-
<COND
(<LENGTH? .OO 1>
<ERROR .X>
)
(<LENGTH? .OO 2>
<NTH .OO 2>
)
(ELSE
<CHTYPE .OO FORM>
)
>
>
)
>
<REPEAT ()
<COND
(<EMPTY? .ATMS>
<RETURN!->
)
>
<SET ATM <NTH .ATMS 1>>
<SET L <REST <PUTREST .L
(<COND
(<TYPE? .ATM ATOM>
<CHTYPE
<COND
(<==? .X GL-PRSA>
<PARSE <STRING "V?" <SPNAME .ATM>>>
)
(<==? .X GL-P-PRSA-WORD>
<PARSE <STRING "W?" <SPNAME .ATM>>>
)
(T
.ATM
)
>
GVAL
>
)
(ELSE
.ATM
)
>)
>>>
<SET ATMS <REST .ATMS>>
<COND
(<==? <LENGTH .LL> 4>
<RETURN!->
)
>
>
<SET O <REST <PUTREST .O
(<FORM EQUAL? <CHTYPE .X GVAL> !<REST .LL>>)
>>>
<SET LL (T)>
<SET L .LL>
>
>
;*****************************************************************************
; "macro definitions"
;*****************************************************************************
;-----------------------------------------------------------------------------
; "MC-VERB?"
;-----------------------------------------------------------------------------
<DEFMAC MC-VERB? ("ARGS" ATMS)
<MULTIFROB GL-PRSA .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-VERB-WORD?"
;-----------------------------------------------------------------------------
<DEFMAC MC-VERB-WORD? ("ARGS" ATMS)
<MULTIFROB GL-P-PRSA-WORD .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-PRSO?"
;-----------------------------------------------------------------------------
<DEFMAC MC-PRSO? ("ARGS" ATMS)
<MULTIFROB GL-PRSO .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-PRSI?"
;-----------------------------------------------------------------------------
<DEFMAC MC-PRSI? ("ARGS" ATMS)
<MULTIFROB GL-PRSI .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-THIS-PRSO?"
;-----------------------------------------------------------------------------
<DEFMAC MC-THIS-PRSO? ()
<FORM ZERO? <CHTYPE GL-NOW-PRSI? GVAL>>
>
;-----------------------------------------------------------------------------
; "MC-THIS-PRSI?"
;-----------------------------------------------------------------------------
<DEFMAC MC-THIS-PRSI? ()
<FORM NOT <FORM ZERO? <CHTYPE GL-NOW-PRSI? GVAL>>>
>
;-----------------------------------------------------------------------------
; "MC-HERE?"
;-----------------------------------------------------------------------------
<DEFMAC MC-HERE? ("ARGS" ATMS)
<MULTIFROB GL-PLACE-CUR .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-LISTEN?"
;-----------------------------------------------------------------------------
<DEFMAC MC-LISTEN? ("ARGS" ATMS)
<MULTIFROB GL-LISTEN-OBJ .ATMS>
>
;-----------------------------------------------------------------------------
; "MC-PROB"
;-----------------------------------------------------------------------------
<DEFMAC MC-PROB ('BASE?)
<FORM NOT <FORM L? .BASE? '<RANDOM 100>>>
>
;-----------------------------------------------------------------------------
; "MC-GET/B"
;-----------------------------------------------------------------------------
<DEFMAC MC-GET/B ('TBL 'PTR)
<FORM GET .TBL .PTR>
>
;-----------------------------------------------------------------------------
; "MC-ABS"
;-----------------------------------------------------------------------------
<DEFMAC MC-ABS ('NUM)
<FORM COND
(<FORM L? .NUM 0>
<FORM - 0 .NUM>
)
(T
.NUM
)
>
>
;-----------------------------------------------------------------------------
; "MC-SPACE"
;-----------------------------------------------------------------------------
<DEFMAC MC-SPACE ()
<FORM PRINTC 32>
>
;-----------------------------------------------------------------------------
; "MC-QUOTE?"
;-----------------------------------------------------------------------------
<DEFMAC MC-QUOTE? ()
<FORM
COND
(<FORM NOT <FORM EQUAL?
<CHTYPE GL-WINNER GVAL>
<CHTYPE CH-PLAYER GVAL>>
>
<FORM PRINTC 34>
)
>
>
;-----------------------------------------------------------------------------
; "MC-MAKE"
;-----------------------------------------------------------------------------
<DEFMAC MC-MAKE ('OBJ 'FLAG)
<FORM FSET .OBJ .FLAG>
>
;-----------------------------------------------------------------------------
; "MC-UNMAKE"
;-----------------------------------------------------------------------------
<DEFMAC MC-UNMAKE ('OBJ 'FLAG)
<FORM FCLEAR .OBJ .FLAG>
>
;-----------------------------------------------------------------------------
; "MC-IS?"
;-----------------------------------------------------------------------------
<DEFMAC MC-IS? ('OBJ 'FLAG)
<FORM FSET? .OBJ .FLAG>
>
;-----------------------------------------------------------------------------
; "MC-ISNOT?"
;-----------------------------------------------------------------------------
<DEFMAC MC-ISNOT? ('OBJ 'FLAG)
<FORM NOT <FORM FSET? .OBJ .FLAG>>
>
;-----------------------------------------------------------------------------
; "MC-NOTZERO?"
;-----------------------------------------------------------------------------
<DEFMAC MC-NOTZERO? ('TERM)
<FORM NOT <FORM ZERO? .TERM>>
>
;-----------------------------------------------------------------------------
; "MC-T?"
;-----------------------------------------------------------------------------
<DEFMAC MC-T? ('TERM)
<FORM NOT <FORM ZERO? .TERM>>
>
;-----------------------------------------------------------------------------
; "MC-THIS-WINNER?"
;-----------------------------------------------------------------------------
<DEFMAC MC-THIS-WINNER? ()
<FORM EQUAL? '.CONTEXT ',K-M-WINNER>
>
;-----------------------------------------------------------------------------
; "MC-F?"
;-----------------------------------------------------------------------------
<DEFMAC MC-F? ('TERM)
<FORM ZERO? .TERM>
>
;-----------------------------------------------------------------------------
; "MC-GET-RM-EXIT-DEST"
;-----------------------------------------------------------------------------
<DEFMAC MC-GET-RM-EXIT-DEST ('PT)
<FORM GETB .PT ',K-REXIT>
>
;-----------------------------------------------------------------------------
; "MC-GET-RM-EXIT-DOOR"
;-----------------------------------------------------------------------------
<DEFMAC MC-GET-RM-EXIT-DOOR ('PT)
<FORM GET <FORM REST .PT> '<- ,K-DEXITOBJ 1>>>
<DEFMAC DEBUGGING? ('X "OPT" 'Y)
<COND (,GL-DEBUG?
<COND (<TYPE? .X LIST>
<CHTYPE .X SPLICE>)
(T .X)>)
(T
<COND (<ASSIGNED? Y>
<COND (<TYPE? .Y LIST>
<CHTYPE .Y SPLICE>)
(T .Y)>)
(T #SPLICE ())>)>>
<DEFMAC STRLENGTH (X)
<LENGTH .X>>
<DEFMAC RT-VW-PRINT ()
<FORM PRINTB ',GL-P-PRSA-WORD>>
<DEFMAC RT-CLOCK-INC-SET ("ARGS" STUFF)
<FORM RT-DO-CLOCK-SET ',GL-TIME-UPDT-INC !.STUFF>>
<DEFMAC RT-CLOCK-DEF-SET ("ARGS" STUFF)
<FORM RT-DO-CLOCK-SET ',GL-TIME-UPDT-DEF !.STUFF>>
<DEFMAC RT-CLOCK-SET ("ARGS" STUFF)
<FORM RT-DO-CLOCK-SET ',GL-TIME !.STUFF>>
<DEFMAC RT-PARM-SET ("ARGS" STUFF)
<FORM RT-DO-CLOCK-SET ',GL-TIME-PARM !.STUFF>>
; "Generate an appropriate BTST to test the part of speech in cases where
we can get away with it. Otherwise, call RT-WT?.
EXTRA-BIT is used to test two parts of speech at the same time. Note
that all arguments after the first are evaluated at compile time, so had
better be PS? or P1? type constants."
<DEFMAC WT? ('PTR BIT "OPT" (B1:<OR FIX FALSE> 5) EXTRA-BIT)
<COND (<OR <NOT .B1>
<G? .B1 4>>
<COND (<ASSIGNED? EXTRA-BIT>
; "Handle an OR test of two parts of speech"
<FORM NOT <FORM 0? <FORM ANDB <FORM GETB .PTR ,K-P-PSOFF>
<+ .BIT .EXTRA-BIT>>>>)
(T
<FORM BTST <FORM GETB .PTR ,K-P-PSOFF> .BIT>)>)
(<ASSIGNED? EXTRA-BIT>
<ERROR CANT-TEST-FOR-TWO-PARTS-OF-SPEECH-WITH-VALUE!-ERRORS
.BIT .EXTRA-BIT WT?>)
(T
<FORM RT-WT? .PTR .BIT .B1>)>>
;"Structures created by eliminating the AUXn properties."
<GLOBAL TH-ROPE-AUX1 -1> ; "First person tied up"
<GLOBAL TH-ROPE-AUX2 -1> ; "Second person tied up"
<GLOBAL CH-BANK-GUARD-AUX1 0 <> BYTE> ; "Number of gems used to bribe him"
<GLOBAL CH-HOLMES-AUX1 0 <> BYTE> ; "Seems to be flags for holmes"
<GLOBAL CH-TRAINED-PIGEON-AUX1 0 <> BYTE> ; "Flags"
<GLOBAL CH-TRAINED-PIGEON-AUX2 0 <> BYTE>
<GLOBAL CH-TRAINED-PIGEON-AUX3 0> ; "An object"
<GLOBAL RM-HOLMES-STUDY-AUX1 0 <> BYTE> ; "Minutes out of study after
waking holmes"
<GLOBAL TH-BELL-AUX1 0 <> BYTE> ; "Number of times to ring Ben"
<GLOBAL TH-BELL-AUX2 0 <> BYTE> ; "Bell position?"
<GLOBAL TH-PACKET-OF-PAPER-AUX1 0 <> BYTE>
<GLOBAL TH-BOX-KEY-AUX1 0> ; "Box the key is in (number)"
<GLOBAL TH-SAFETY-DEPOSIT-BOX-AUX1 0> ; "Box number"
<GLOBAL TH-BOX-LOCK-AUX1 0>
<GLOBAL TH-DIAL-AUX1 0> ;"Direction being turned, or some such"
<GLOBAL TH-DIAL-AUX2 0>
<GLOBAL CH-WIGGINS-AUX1 0 <> BYTE> ; "True if `activated'"
<GLOBAL CH-ELIZA-DOOLITTLE-AUX1 0 <> BYTE>
<GLOBAL CH-VENDOR-AUX1 0 <> BYTE> ; "Number of haggles"
<GLOBAL TH-CAB-WHISTLE-AUX1 0 <> BYTE> ; "Number of whistles"
<GLOBAL TH-CAB-WHISTLE-AUX2 0 <> BYTE> ; "Where"
<GLOBAL TH-HANSOM-CAB-AUX1 0 <> BYTE> ; "Called before?"
<GLOBAL TH-HANSOM-CAB-AUX2 0 <> BYTE> ; "Waiting?"
<GLOBAL TH-GROWLER-CAB-AUX1 0 <> BYTE>
<GLOBAL TH-GUN-AUX1 6 <> BYTE> ; "Bullets left"
<GLOBAL TH-PHIAL-AUX1 0 <> BYTE>
<GLOBAL TH-BOAT-AUX1 0 <> BYTE>
<GLOBAL TH-SAPPHIRE-AUX1 2> ; "Number of grabs left"ct

22
misc.zil Normal file
View File

@ -0,0 +1,22 @@
;<REPLACE-DEFINITION DEBUGGING-CODE T>
;<REPLACE-DEFINITION TRADEMARK-MSG
<CONSTANT GAMMA-TESTERS
<PLTABLE "Steve Barone"
"Geoff Cohen"
"Robby Kumar"
"Joshua Mandel"
"Kelly Marold"
"Michael Milgram"
"Martin Rubenstein"
"John Schappert"
"Ron Tison"
"Steve Watkins"
"Jeff Bailey"
"Michael Stein">>
<ROUTINE RT-TRADEMARK-MSG ()
<COND (<AND <G? ,SERIAL 0>
<L? ,SERIAL <ZGET ,GAMMA-TESTERS 0>>>
<TELL "Gamma test copy for "
<ZGET ,GAMMA-TESTERS ,SERIAL>
CR>)>>>

1073
other-misc.zap Normal file

File diff suppressed because it is too large Load Diff

1049
other-misc.zil Normal file

File diff suppressed because it is too large Load Diff

120
parser.zabstr Normal file
View File

@ -0,0 +1,120 @@
<GLOBAL INHIBIT-ROOMS <> %<> WORD>
<GLOBAL GL-FUNNY-CLAUSE? <> %<> WORD>
<CONSTANT SH 128>
<CONSTANT SC 64>
<CONSTANT SIR 32>
<CONSTANT SOG 16>
<CONSTANT STAKE 8>
<CONSTANT SMANY 4>
<CONSTANT SHAVE 2>
<CONSTANT LAST-OBJECT 0>
<CONSTANT K-M-BEG 1>
<CONSTANT K-M-ENTERING 2>
<CONSTANT K-M-ENTERED 3>
<CONSTANT K-M-EXIT 4>
<CONSTANT K-M-END 5>
<CONSTANT K-M-FLOOK 6>
<CONSTANT K-M-NLOOK 7>
<CONSTANT K-M-WINNER 8>
<CONSTANT K-M-CONT 9>
<CONSTANT K-M-OBJDESC 10>
<CONSTANT K-M-CANT 11>
<CONSTANT K-M-DESCFCN 12>
<CONSTANT K-M-SDESC 13>
<CONSTANT K-M-DESC-1 14>
<CONSTANT K-M-DESC-2 15>
<CONSTANT K-M-DESC-3 16>
<CONSTANT K-P-LEXWORDS 1>
<CONSTANT K-P-LEXSTART 1>
<CONSTANT K-P-LEXELEN 2>
<CONSTANT K-P-WORDLEN 4>
<CONSTANT K-P-PSOFF 6>
<CONSTANT K-P-P1OFF 7>
<CONSTANT K-P-P1BITS 3>
<CONSTANT K-P-ITBLLEN 9>
<CONSTANT K-P-VERB 0>
<CONSTANT K-P-VERBN 1>
<CONSTANT K-P-PREP1 2>
<CONSTANT K-P-PREP1N 3>
<CONSTANT K-P-PREP2 4>
<CONSTANT K-P-NC1 6>
<CONSTANT K-P-NC1L 7>
<CONSTANT K-P-NC2 8>
<CONSTANT K-P-NC2L 9>
<CONSTANT K-O-PTR 0>
<CONSTANT K-O-START 1>
<CONSTANT K-O-LENGTH 2>
<CONSTANT K-O-END 3>
<CONSTANT K-P-MATCHLEN 0>
<CONSTANT K-P-ALL 1>
<CONSTANT K-P-ONE 2>
<CONSTANT K-P-INHIBIT 4>
<CONSTANT K-P-SRCBOT 2>
<CONSTANT K-P-SRCTOP 0>
<CONSTANT K-P-SRCALL 1>
<DEFINE-ROUTINE RT-CAPITALIZE>
<DEFINE-ROUTINE RT-WORD-PRINT>
<DEFINE-ROUTINE RT-VERB-PRINT>
<DEFINE-ROUTINE RT-PREP-PRINT>
<DEFINE-ROUTINE RT-CLAUSE-PRINT>
<DEFINE-ROUTINE RT-BUFFER-PRINT>
<GLOBAL GL-LONG-OOPS 3 %<> WORD>
<DEFINE-ROUTINE RT-DONT-KNOW-WORD-MSG>
<DEFINE-ROUTINE RT-DONT-KNOW-WORD-USE-MSG>
<DEFINE-ROUTINE RT-CANT-SEE-ANY-MSG>
<DEFINE-ROUTINE RT-TH-NOT-HERE-OBJECT>
<DEFINE-ROUTINE RT-FAKE-ORPHAN-MSG>
<DEFINE-ROUTINE RT-TIME-OF-DAY-MSG>
<DEFINE-ROUTINE RT-TIME-OF-DAY>
<DEFINE-ROUTINE RT-SPOKEN-TO-MSG>
<DEFINE-ROUTINE RT-GET-PREP>
<DEFINE-ROUTINE RT-SYNTAX-CHECK>
<DEFINE-ROUTINE RT-CLAUSE>
<DEFINE-ROUTINE RT-GET-WHAT-I-MEAN>
<DEFINE-ROUTINE RT-P-CLEAR>
<DEFINE-ROUTINE RT-PICK-NEXT>
<DEFINE-ROUTINE RT-QCONTEXT-GOOD?>
<DEFINE-ROUTINE RT-FIND-PERSON>
<DEFINE-ROUTINE RT-ANYONE-HERE?>
<DEFINE-ROUTINE RT-MOVE-ALL>
<DEFINE-ROUTINE RT-GOT?>
<DEFINE-ROUTINE RT-HELD?>
<DEFINE-ROUTINE RT-THIS-IS-IT>
<DEFINE-ROUTINE RT-CHANGE-LEXV>
<DEFINE-ROUTINE RT-WT?>
<DEFINE-ROUTINE RT-VERB-DIR-ONLY?>
<DEFINE-ROUTINE RT-STUFF>
<DEFINE-ROUTINE RT-INBUF-ADD>
<DEFINE-ROUTINE RT-ACLAUSE-WIN>
<DEFINE-ROUTINE RT-NCLAUSE-WIN>
<DEFINE-ROUTINE RT-ORPHAN-VERB>
<DEFINE-ROUTINE RT-ORPHAN>
<DEFINE-ROUTINE RT-ORPHAN-MERGE>
<DEFINE-ROUTINE RT-ADJ-CHECK>
<DEFINE-ROUTINE RT-CLAUSE-COPY>
<DEFINE-ROUTINE RT-CLAUSE-ADD>
<DEFINE-ROUTINE RT-PREP-FIND>
<DEFINE-ROUTINE RT-SYNTAX-FOUND>
<DEFINE-ROUTINE RT-BUT-MERGE>
<DEFINE-ROUTINE RT-SNARF-OBJECTS>
<DEFINE-ROUTINE RT-SNARF>
<DEFINE-ROUTINE RT-GET-OBJECT>
<DEFINE-ROUTINE RT-MOBY-FIND>
<DEFINE-ROUTINE RT-MATCH-PSEUDO>
<DEFINE-ROUTINE RT-GLOBAL-CHECK>
<DEFINE-ROUTINE RT-DO-SL>
<DEFINE-ROUTINE RT-SEARCH-LIST>
<DEFINE-ROUTINE RT-THIS-IT?>
<DEFINE-ROUTINE RT-OBJ-FOUND>
<DEFINE-ROUTINE RT-ITAKE>
<DEFINE-ROUTINE RT-ITAKE-CHECK>
<DEFINE-ROUTINE RT-MANY-CHECK>
<DEFINE-ROUTINE RT-IS-LIT?>
<GLOBAL WINNER-IS-WIGGINS <> %<> WORD>
<DEFINE-ROUTINE RT-PERFORM>
<DEFINE-ROUTINE RT-SET-GL-PLACE-CUR>
<DEFINE-ROUTINE RT-PARSER>
<DEFINE-ROUTINE RT-WHICH-PRINT>
<DEFINE-ROUTINE RT-FIND-NOT-HERE>
<DEFINE-ROUTINE RT-NOT-HERE-PRINT>

2588
parser.zap Normal file

File diff suppressed because it is too large Load Diff

2559
parser.zil Normal file

File diff suppressed because it is too large Load Diff

112
people.zabstr Normal file
View File

@ -0,0 +1,112 @@
<OBJECT CH-THEM (LOC GLOBAL-OBJECTS) (DESC "them") (FLAGS FL-NOARTC FL-PLURAL)
(SYNONYM THEM THEMSELVES)>
<OBJECT CH-ME (LOC GLOBAL-OBJECTS) (DESC "yourself") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON) (SYNONYM I ME MYSELF BODY SELF) (ADJECTIVE MY)>
<OBJECT CH-YOU (LOC GLOBAL-OBJECTS) (DESC "myself") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON) (SYNONYM YOU YOURSELF)>
<OBJECT CH-HIM (LOC GLOBAL-OBJECTS) (DESC "him") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON) (SYNONYM HIM HIMSELF)>
<OBJECT CH-HER (LOC GLOBAL-OBJECTS) (DESC "her") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON FL-FEMALE) (SYNONYM HER HERSELF)>
<OBJECT CH-PLAYER (DESC "you") (FLAGS FL-NOARTC FL-NODESC FL-ALIVE FL-PERSON) (
SYNONYM DOCTOR WATSON) (ADJECTIVE DOCTOR) (SIZE 99 MASS 0 CAPACITY 60) (
STRENGTH 999) (DEXTERITY 15) (ACTION RT-AC-CH-PLAYER)>
<OBJECT CH-HOLMES (LOC TH-SOFA) (DESC "Holmes") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON FL-TRYTAKE FL-NOALL FL-ASLEEP FL-HAS-DESCFCN) (SYNONYM HOLMES
SHERLOCK DETECTIVE FRIEND COMPANION) (ADJECTIVE SHERLOCK) (SIZE 99 CAPACITY 60)
(STRENGTH 999) (DEXTERITY 10) (ACTION RT-AC-CH-HOLMES)>
<OBJECT CH-MATCH-SNIFFING-DOG (LOC RM-MARYLEBONE-RD) (DESC "dog") (FLAGS
FL-NODESC FL-ALIVE FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM DOG) (ADJECTIVE
TRAINED) (SIZE 15 CAPACITY 15) (ACTION RT-AC-CH-MATCH-SNIFFING-DOG)>
<OBJECT CH-TUSSAUDS-GUARD (LOC RM-MARYLEBONE-RD) (DESC "guard") (FLAGS
FL-NODESC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM GUARD
) (ADJECTIVE TUSSAUDS) (SIZE 99 CAPACITY 60) (ACTION RT-AC-CH-TUSSAUDS-GUARD)>
<OBJECT CH-TRAINED-PIGEON (LOC CH-SHERMAN) (DESC "pigeon") (FLAGS FL-ALIVE
FL-TAKEABLE FL-HAS-DESCFCN) (SYNONYM PIGEON BIRD) (ADJECTIVE TRAINED) (SIZE 10
CAPACITY 5 MASS 5) (VALUE 1) (GENERIC RT-GN-PIGEON) (ACTION
RT-AC-CH-TRAINED-PIGEON)>
<OBJECT CH-SHERMAN (LOC RM-SHERMANS-HOUSE) (DESC "Sherman") (FLAGS FL-NODESC
FL-NOARTC FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM
SHERMAN TRAINER) (ADJECTIVE OLD) (SIZE 99 CAPACITY 60) (ACTION RT-AC-CH-SHERMAN
)>
<OBJECT CH-BANK-GUARD (LOC RM-THREADNEEDLE-ST) (DESC "guard") (FLAGS FL-ALIVE
FL-PERSON FL-TRYTAKE FL-NOALL FL-NODESC FL-HAS-DESCFCN) (SYNONYM GUARD) (
ADJECTIVE BANK) (SIZE 99 CAPACITY 60) (ACTION RT-AC-CH-BANK-GUARD)>
<OBJECT CH-WIGGINS (LOC RM-THREADNEEDLE-ST) (DESC "Wiggins") (FLAGS FL-NOARTC
FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-NODESC FL-BROKEN FL-HAS-DESCFCN) (
SYNONYM WIGGINS URCHIN BOY COMPANION) (SIZE 20 CAPACITY 15) (STRENGTH 999) (
DEXTERITY 10) (CONTFCN RT-AC-CH-WIGGINS) (ACTION RT-AC-CH-WIGGINS)>
<OBJECT CH-ELIZA-DOOLITTLE (LOC RM-COVENT-GARDEN) (FLAGS FL-ALIVE FL-PERSON
FL-FEMALE FL-TRYTAKE FL-NOALL FL-NEEDS-IDENTITY FL-LOSE-IDENTITY FL-ASLEEP
FL-NODESC FL-HAS-DESCFCN FL-HAS-SDESC) (OBJ-ADJ 0) (OBJ-NOUN 0) (ADJECTIVE HER
ELIZA\'S GIRL\'S) (SYNONYM ELIZA DOOLITTLE GIRL HEART HEARTBEAT) (SIZE 99
CAPACITY 10) (VALUE 5) (ACTION RT-AC-CH-ELIZA-DOOLITTLE)>
<OBJECT CH-PRIME-MINISTER (DESC "Prime Minister") (FLAGS FL-ALIVE FL-PERSON
FL-TRYTAKE FL-NOALL FL-NODESC FL-HAS-DESCFCN) (SYNONYM MINISTER OFFICIAL
VISITOR MAN) (ADJECTIVE PRIME) (SIZE 15) (CONTFCN RT-AC-CH-PRIME-MINISTER) (
ACTION RT-AC-CH-PRIME-MINISTER)>
<OBJECT CH-AKBAR (LOC RM-LAIR) (DESC "Akbar") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM AKBAR) (SIZE 99 CAPACITY
20) (VALUE 1) (ACTION RT-AC-CH-AKBAR)>
<OBJECT CH-MORIARTY (LOC RM-LAIR) (DESC "Moriarty") (FLAGS FL-NOARTC FL-ALIVE
FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM PROFESSOR PROF MORIARTY)
(ADJECTIVE JAMES PROFESSOR PROF) (SIZE 99 CAPACITY 20) (VALUE 1) (ACTION
RT-AC-CH-MORIARTY)>
<OBJECT CH-HUDSON (LOC RM-ENTRY-HALL) (DESC "Mrs Hudson") (FLAGS FL-NOARTC
FL-ALIVE FL-PERSON FL-FEMALE FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM MRS
HUDSON HOUSEKEEPER) (ADJECTIVE MRS) (SIZE 99 CAPACITY 99) (CONTFCN
RT-AC-CH-HUDSON) (ACTION RT-AC-CH-HUDSON)>
<OBJECT CH-DENKEEPER (LOC RM-BAR-OF-GOLD) (DESC "denkeeper") (FLAGS FL-ALIVE
FL-PERSON FL-TRYTAKE FL-NOALL FL-NODESC FL-HAS-DESCFCN) (SYNONYM DENKEEPER
PROPRIETOR MAN) (SIZE 99 CAPACITY 20) (ACTION RT-AC-CH-DENKEEPER)>
<OBJECT CH-LIBRARIAN (LOC RM-MANUSCRIPT-ROOM) (DESC "lonely librarian") (FLAGS
FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-NODESC) (SYNONYM LIBRARIAN MAN) (
ADJECTIVE LONELY) (SIZE 99 CAPACITY 99) (ACTION RT-AC-CH-LIBRARIAN)>
<OBJECT CH-BUTLER (LOC RM-DIOGENES-CLUB) (DESC "butler") (FLAGS FL-NODESC
FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL) (SYNONYM BUTLER MAN) (SIZE 99 CAPACITY
99) (ACTION RT-AC-CH-BUTLER)>
<OBJECT CH-NANNIES (LOC RM-KENSINGTON-GARDENS) (DESC "nannies") (FLAGS
FL-NODESC FL-PLURAL FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL) (SYNONYM NANNIES) (
SIZE 99 CAPACITY 99) (ACTION RT-AC-CH-NANNIES)>
<OBJECT CH-QUEEN (LOC RM-BUCKINGHAM-PALACE) (DESC "Queen Victoria") (FLAGS
FL-NOARTC FL-PERSON FL-ALIVE FL-TRYTAKE FL-NOALL FL-FEMALE) (SYNONYM QUEEN
VICTORIA) (ADJECTIVE QUEEN) (SIZE 99 CAPACITY 99)>
<OBJECT CH-HOUSEWIVES (LOC RM-COVENT-GARDEN) (DESC "women") (FLAGS FL-NODESC
FL-PLURAL FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM
HOUSEWIVES WIVES WOMEN PEOPLE CROWDS CROWD SHOPPERS) (SIZE 99 CAPACITY 99) (
ACTION RT-AC-CH-HOUSEWIVES)>
<OBJECT CH-PALACE-GUARD (LOC RM-QUEENS-GARDENS) (DESC "Palace guard") (FLAGS
FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM GUARD) (
ADJECTIVE PALACE) (SIZE 99 CAPACITY 20) (ACTION RT-AC-CH-PALACE-GUARD)>
<OBJECT CH-URCHINS (LOC RM-THREADNEEDLE-ST) (DESC "urchins") (FLAGS FL-NODESC
FL-PLURAL FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM
URCHINS) (SIZE 99 CAPACITY 99) (ACTION RT-AC-CH-URCHINS)>
<OBJECT CH-MEMBERS (LOC RM-DIOGENES-CLUB) (DESC "members") (FLAGS FL-NODESC
FL-PLURAL FL-ALIVE FL-PERSON FL-TRYTAKE FL-NOALL FL-HAS-DESCFCN) (SYNONYM
MEMBERS) (ADJECTIVE CLUB AGING) (SIZE 99 CAPACITY 99) (ACTION RT-AC-CH-MEMBERS)
>
<DEFINE-ROUTINE RT-LIBRARIAN-SAYS-MSG>
<DEFINE-ROUTINE RT-TELL-ABOUT?>
<DEFINE-ROUTINE RT-WHO-WHAT-FAIL?>
<DEFINE-ROUTINE RT-NO-CONDITION-MSG>
<DEFINE-ROUTINE RT-AC-CH-HOLMES>
<DEFINE-ROUTINE RT-HOLMES-SAYS-AGRA-MSG>
<DEFINE-ROUTINE RT-HOLMES-DESCRIBE-MSG?>
<DEFINE-ROUTINE RT-AC-CH-MATCH-SNIFFING-DOG>
<DEFINE-ROUTINE RT-AC-CH-TUSSAUDS-GUARD>
<DEFINE-ROUTINE RT-PIGEON-PANIC>
<DEFINE-ROUTINE RT-PIGEON-FLY>
<DEFINE-ROUTINE RT-AC-CH-TRAINED-PIGEON>
<DEFINE-ROUTINE RT-AC-CH-SHERMAN>
<DEFINE-ROUTINE RT-AC-CH-PRIME-MINISTER>
<DEFINE-ROUTINE RT-AC-CH-AKBAR>
<DEFINE-ROUTINE RT-AC-CH-MORIARTY>
<DEFINE-ROUTINE RT-AC-CH-HUDSON>
<DEFINE-ROUTINE RT-AC-CH-DENKEEPER>
<DEFINE-ROUTINE RT-AC-CH-LIBRARIAN>
<DEFINE-ROUTINE RT-AC-CH-NANNIES>
<DEFINE-ROUTINE RT-AC-CH-HOUSEWIVES>
<DEFINE-ROUTINE RT-AC-CH-PALACE-GUARD>
<DEFINE-ROUTINE RT-AC-CH-URCHINS>
<DEFINE-ROUTINE RT-AC-CH-MEMBERS>

1475
people.zap Normal file

File diff suppressed because it is too large Load Diff

1782
people.zil Normal file

File diff suppressed because it is too large Load Diff

1101
places1.zil Normal file

File diff suppressed because it is too large Load Diff

28
places2.zabstr Normal file
View File

@ -0,0 +1,28 @@
<DEFINE-ROUTINE RT-SURGE>
<DEFINE-ROUTINE RT-AC-RM-MADAME-TUSSAUDS>
<DEFINE-ROUTINE RT-AC-RM-MANUSCRIPT-ROOM>
<DEFINE-ROUTINE RT-AC-RM-VICTORIA-STREET>
<DEFINE-ROUTINE RT-AC-RM-CLOCK-TOWER>
<DEFINE-ROUTINE RT-AC-RM-THAMES-ONE>
<DEFINE-ROUTINE RT-AC-RM-THAMES-TWO>
<DEFINE-ROUTINE RT-AC-RM-THAMES-THREE>
<DEFINE-ROUTINE RT-AC-RM-THAMES-FOUR>
<DEFINE-ROUTINE RT-AC-RM-THAMES-FIVE>
<DEFINE-ROUTINE RT-AC-RM-SHERMANS-HOUSE>
<DEFINE-ROUTINE RT-AC-RM-THREADNEEDLE-ST>
<DEFINE-ROUTINE RT-AC-RM-LONDON-BRIDGE>
<DEFINE-ROUTINE RT-AC-RM-SWAN-LANE>
<DEFINE-ROUTINE RT-AC-RM-BAR-OF-GOLD>
<DEFINE-ROUTINE RT-AC-RM-LAIR>
<DEFINE-ROUTINE RT-AC-RM-NAVE>
<DEFINE-ROUTINE RT-AC-RM-EVANGELIST-CHAPEL>
<DEFINE-ROUTINE RT-AC-RM-HENRY-VII-CHAPEL>
<DEFINE-ROUTINE RT-EX-ENTER-BANK-OF-ENGLAND>
<DEFINE-ROUTINE RT-AC-RM-BUCKINGHAM-PALACE>
<DEFINE-ROUTINE RT-EX-RM-ENTER-BUCKINGHAM-PALACE>
<DEFINE-ROUTINE RT-EX-RM-STEER-BOAT>
<DEFINE-ROUTINE RT-EX-RM-LAND-BOAT>
<DEFINE-ROUTINE RT-EX-RM-LAUNCH-BOAT>
<DEFINE-ROUTINE RT-EX-PARLOUR-ENTRY>
<DEFINE-ROUTINE RT-EX-LEAVE-EMBANKMENT>

855
places2.zap Normal file
View File

@ -0,0 +1,855 @@
.FUNCT RT-SURGE
CALL1 RT-TIME-OF-DAY
ZERO? STACK \?CCL3
PRINTI "The fog is so thick that even your light cannot penetrate it, so you retrace your steps."
CRLF
RFALSE
?CCL3: PRINTI "Surging crowds of "
EQUAL? GL-PLACE-CUR,RM-KENSINGTON-GARDENS \?CCL6
PRINTI "haughty nannies"
JUMP ?CND4
?CCL6: EQUAL? GL-PLACE-CUR,RM-COVENT-GARDEN \?CCL8
PRINTI "housewives intent on a bargain"
JUMP ?CND4
?CCL8: PRINTI "tourists"
?CND4: PRINTI " block your path."
CRLF
RFALSE
.FUNCT RT-AC-RM-MADAME-TUSSAUDS,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CND4
FSET TH-ASH,FL-SEEN
FSET TH-WILLIAM-STATUE,FL-SEEN
FSET TH-WALTER-STATUE,FL-SEEN
FSET TH-ELIZABETH-STATUE,FL-SEEN
FSET TH-DRAKE-STATUE,FL-SEEN
FSET TH-JOHN-STATUE,FL-SEEN
?CND4: EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL8
EQUAL? GL-PLACE-PRV,RM-MARYLEBONE-RD \?CCL11
PRINTI "You come in off the street and are now standing in"
JUMP ?CND6
?CCL11: PRINTI "You leave the Chamber of Horrors and go back into"
JUMP ?CND6
?CCL8: PRINTI "You are in"
?CND6: PRINTI " the lobby."
CRLF
CRLF
PRINTI "All around you are wax statues of famous people. To the west is a dark and ominous-looking doorway with a sign over it. The exit to the street is to the south."
CRLF
FSET? TH-ASH,FL-ASLEEP \FALSE
IN? CH-HOLMES,GL-PLACE-CUR \FALSE
FSET TH-ASH,FL-SEEN
FCLEAR TH-ASH,FL-ASLEEP
FCLEAR TH-ASH,FL-NODESC
CRLF
ICALL2 RT-CTHEO-PRINT,CH-HOLMES
PRINTI " drops to his hands and knees and begins a minute examination of the floor. After a few moments he cries, ""Aha! Look here, Watson."" He points to a miniscule speck of ash on the floor."
CRLF
SET 'GL-PUPPY-MSG?,FALSE-VALUE
RTRUE
?CCL3: EQUAL? CONTEXT,K-M-ENTERED \?CCL18
FSET? TH-TOBACCO,FL-ASLEEP /?CCL18
FSET? TH-TOBACCO,FL-LIGHTED \?CCL18
ICALL2 RT-UPDATE-SCORE,1
FSET TH-TOBACCO,FL-ASLEEP
RFALSE
?CCL18: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \FALSE
EQUAL? GL-PLACE-CUR,RM-MARYLEBONE-RD \?CCL27
ICALL2 RT-DO-WALK,P?NORTH
RTRUE
?CCL27: EQUAL? GL-PLACE-CUR,RM-CHAMBER-OF-HORRORS \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
.FUNCT RT-AC-RM-MANUSCRIPT-ROOM,CONTEXT,VALUE
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL6
PRINTI "The deserted corridor leads to"
JUMP ?CND4
?CCL6: PRINTI "You are in"
?CND4: PRINTI " the manuscript room, which contains a dusty collection of old books on obscure subjects. "
IN? CH-LIBRARIAN,RM-MANUSCRIPT-ROOM \?CND7
PRINTI "There is an old librarian here, on whose desk sits a handwritten sign that reads ""Quiet, please."" "
?CND7: PRINTI "There are thousands of books behind glass cases"
EQUAL? CONTEXT,K-M-DESC-1 \?CND9
PRINTI ", but one is lying unattended on a table"
?CND9: PRINTI ". The only exit is to the west."
CRLF
EQUAL? CONTEXT,K-M-DESC-1 \FALSE
FSET CH-LIBRARIAN,FL-SEEN
FSET TH-CLUE-BOOK,FL-SEEN
FSET TH-LIBRARY-TABLE,FL-SEEN
CRLF
PRINTI "The librarian - who is as dusty as the books - looks up in surprise as you come in. He "
FSET? TH-COTTON-BALLS,FL-WORN \?CCL16
PRINTI "whispers"
JUMP ?CND14
?CCL16: PRINTI "says loudly"
?CND14: PRINTI ", ""Oh, I say! Hello! I don't get many visitors here. Is there something I can help you with? Some information about the Jubilee, perhaps? It's quite rare, you know, for a British ruler to celebrate 50 years on the throne. Unique, in fact. The closest anyone else came was Elizabeth, who ruled 45 years - although our records are somewhat vague before the year 900. The Anglo-Saxon chronicles do get rather sketchy, what? Still, they're the best we have. I think I can find a copy for you somewhere here."""
CRLF
CRLF
PRINTR "The librarian's voice trails off as he bustles from shelf to shelf, squinting at the books to find the one he thinks you want."
?CCL3: ZERO? CONTEXT /?CCL18
IN? CH-LIBRARIAN,RM-MANUSCRIPT-ROOM \?CCL18
FSET? CH-LIBRARIAN,FL-ASLEEP /?CCL18
EQUAL? CONTEXT,K-M-ENTERED \?CCL24
FSET? CH-LIBRARIAN,FL-OPENED \?CCL24
CRLF
ICALL2 RT-CTHEO-PRINT,CH-LIBRARIAN
PRINTR " says, ""Welcome back! I have more interesting things to tell you!"""
?CCL24: EQUAL? CONTEXT,K-M-EXIT \?CCL28
PRINTI "As you leave, the librarian calls out, ""Must you be going? I have so many other interesting things to tell you."""
CRLF
CRLF
FSET CH-LIBRARIAN,FL-OPENED
RTRUE
?CCL28: EQUAL? CONTEXT,K-M-BEG \FALSE
EQUAL? GL-PRSA,V?WALK,V?EXIT /FALSE
INTBL? GL-PRSA,GL-GAME-VERBS+2,10 /FALSE
EQUAL? GL-PRSA,V?WAIT,V?LISTEN \?CCL37
PRINTI "The librarian says "
FSET? TH-COTTON-BALLS,FL-WORN \?CCL40
PRINTI "softly"
JUMP ?CND38
?CCL40: PRINTI "loudly"
?CND38: PRINTI ", "
ICALL1 RT-LIBRARIAN-SAYS-MSG
RTRUE
?CCL37: EQUAL? GL-PRSA,V?HUSH \?CCL42
PRINTI "The librarian stops in midsentence and gets an embarrassed look on his face. ""Oh, I say. I'm sorry to have rambled on like this, but I do so enjoy speaking with visitors. I get them so seldom, you know. Thank you for listening."""
CRLF
CRLF
PRINTI "He leaves the room, mumbling something to himself about the articulation of the third joint of the hind leg of an extinct species of dung beetle."
CRLF
REMOVE CH-LIBRARIAN
RTRUE
?CCL42: EQUAL? GL-PRSA,V?LOOK \?CCL44
ICALL RT-DESC-ALL,FALSE-VALUE,TRUE-VALUE
CRLF
PRINTI "As you look around, the librarian says "
FSET? TH-COTTON-BALLS,FL-WORN \?CCL47
PRINTI "softly"
JUMP ?CND45
?CCL47: PRINTI "loudly"
?CND45: PRINTI ", "
ICALL1 RT-LIBRARIAN-SAYS-MSG
RTRUE
?CCL44: EQUAL? GL-PRSA,V?TELL \?CCL49
EQUAL? GL-PRSO,CH-LIBRARIAN /FALSE
?CCL49: CALL1 RT-TALK-VERB?
ZERO? STACK /?CCL53
PRINTI "The librarian interrupts you as you attempt to speak, and "
FSET? TH-COTTON-BALLS,FL-WORN \?CCL56
PRINTI "whispers"
JUMP ?CND54
?CCL56: PRINTI "says"
?CND54: PRINTI ", "
ICALL1 RT-LIBRARIAN-SAYS-MSG
RETURN 2
?CCL53: PRINTI "The librarian launches off into another speech, and it distracts you from what you wanted to do. "
ICALL1 RT-LIBRARIAN-SAYS-MSG
RTRUE
?CCL18: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \?CCL61
EQUAL? GL-PLACE-CUR,RM-BRITISH-MUSEUM \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
?CCL61: EQUAL? GL-PRSA,V?EXIT \FALSE
EQUAL? GL-PLACE-CUR,RM-MANUSCRIPT-ROOM \FALSE
ICALL2 RT-DO-WALK,P?WEST
RTRUE
.FUNCT RT-AC-RM-VICTORIA-STREET,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL6
PRINTI "You enter"
JUMP ?CND4
?CCL6: PRINTI "You are loitering in"
?CND4: PRINTI " Victoria Street, which runs east and west between Victoria Square and Broad Sanctuary."
CRLF
CRLF
PRINTI "You see a sign outside one of the shops."
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-BEG \?CCL8
EQUAL? GL-PRSA,V?WAIT \?CCL8
FSET? RM-VICTORIA-STREET,FL-ASLEEP /?CCL13
FSET RM-VICTORIA-STREET,FL-ASLEEP
PRINTR "After a few moments, a constable strolls by, bops you on the head with his billy club, and says, ""Move along, you."""
?CCL13: PRINTI "The same constable as before walks by and says, ""You again? That's it, mate. Come along with me."" He bops you on the head again and arrests you on a charge of vagrancy."
CRLF
CRLF
PRINTI "You spend the night in gaol, and in the morning Inspector Lestrade drops by to tell you that there has been a mix-up in the paperwork and you are to be deported to Australia the following day. He gives you a letter to deliver to his sister in Melbourne and wishes you luck."
CRLF
CRLF
CALL1 RT-QSR
RSTACK
?CCL8: ZERO? CONTEXT \FALSE
RFALSE
.FUNCT RT-AC-RM-CLOCK-TOWER,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL6
PRINTI "The stairs seem to wind up forever. Finally, you emerge into"
JUMP ?CND4
?CCL6: PRINTI "You are in"
?CND4: PRINTI " the interior of the clock tower, high above the Houses of Parliament."
CRLF
CRLF
PRINTI "The immense bell known as Big Ben is hanging from the ceiling, suspended over a hollow shaft that is so deep it might as well be bottomless. A wooden railing runs around the shaft for safety."
CRLF
CRLF
PRINTI "Inside the bell, you see an enormous clapper"
EQUAL? CONTEXT,K-M-DESC-1 \?CCL9
FSET TH-BELL,FL-SEEN
FSET TH-SAPPHIRE,FL-SEEN
FSET TH-CLAPPER,FL-SEEN
FSET TH-SHAFT,FL-SEEN
FSET TH-RAILING,FL-SEEN
PRINT K-SAPPHIRE-MSG
CRLF
RTRUE
?CCL9: IN? TH-SAPPHIRE,TH-CLAPPER \?CCL12
PRINT K-SAPPHIRE-MSG
CRLF
RFALSE
?CCL12: PRINTC 46
CRLF
RFALSE
?CCL3: CALL2 RT-ALARM-SET?,RT-I-SWING-BELL
ZERO? STACK \FALSE
ICALL1 RT-ZERO-SECONDS
RFALSE
.FUNCT RT-AC-RM-THAMES-ONE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "on the Thames, just south of the Embankment."
CRLF
RFALSE
?CCL3: CALL1 RT-PROCESS-BOAT-ON-THAMES
RSTACK
.FUNCT RT-AC-RM-THAMES-TWO,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "on the Thames. Downstream you can see London Bridge."
CRLF
RFALSE
?CCL3: CALL1 RT-PROCESS-BOAT-ON-THAMES
RSTACK
.FUNCT RT-AC-RM-THAMES-THREE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "underneath London Bridge."
CRLF
RFALSE
?CCL3: EQUAL? GL-PRSA,V?EXAMINE,V?LOOK-UNDER \?PRD7
EQUAL? GL-PRSO,RM-LONDON-BRIDGE /?CTR4
?PRD7: EQUAL? GL-PRSA,V?LOOK-UP \?CCL5
EQUAL? GL-PRSO,ROOMS,RM-LONDON-BRIDGE \?CCL5
?CTR4: PRINTI "You see nothing of interest"
IN? TH-CLUMP-OF-MOSS,RM-THAMES-THREE \?CCL14
FSET TH-CLUMP-OF-MOSS,FL-SEEN
PRINTI ", other than a clump of moss lodged among the supports overhead."
CRLF
JUMP ?CND12
?CCL14: PRINTC 46
CRLF
?CND12: ICALL1 RT-PROCESS-BOAT-ON-THAMES
RTRUE
?CCL5: CALL1 RT-PROCESS-BOAT-ON-THAMES
RSTACK
.FUNCT RT-AC-RM-THAMES-FOUR,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "on the Thames, just south of Traitor's Gate."
CRLF
RFALSE
?CCL3: CALL1 RT-PROCESS-BOAT-ON-THAMES
RSTACK
.FUNCT RT-AC-RM-THAMES-FIVE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "on the Thames, in danger of drifting out to sea."
CRLF
RFALSE
?CCL3: CALL1 RT-PROCESS-BOAT-ON-THAMES
RSTACK
.FUNCT RT-AC-RM-SHERMANS-HOUSE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CCL6
ICALL2 RT-THIS-IS-IT,CH-SHERMAN
FSET CH-SHERMAN,FL-SEEN
FSET RM-SHERMANS-HOUSE,FL-SEEN
PRINTI "You enter the cramped quarters of Sherman's shop. The old animal-trainer's eyes brighten up when he sees you."
CRLF
CRLF
PRINTR """You've probably come looking for Toby,"" he says. ""But I'm afraid I won't be able to help you this time. Toby's not feeling too well, and all my other animals are already out on loan. All I have left is a half-trained pigeon."""
?CCL6: EQUAL? CONTEXT,K-M-DESC-2,K-M-DESC-3 \FALSE
PRINTI "Sherman's shop is dingy and cramped. Dozens of empty cages are stacked up against the walls."
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-ENTERED \?CCL10
FSET? RM-SHERMANS-HOUSE,FL-ASLEEP \?CCL13
FCLEAR RM-SHERMANS-HOUSE,FL-ASLEEP
RFALSE
?CCL13: FSET? CH-SHERMAN,FL-ASLEEP /FALSE
FSET? CH-TRAINED-PIGEON,FL-ALIVE \?CCL17
CRLF
PRINTI "Sherman says, ""Welcome back. It's a pleasure to see you again."""
CRLF
CALL2 RT-THIS-IS-IT,CH-SHERMAN
RSTACK
?CCL17: CALL2 RT-SHERMAN-RAGE,TRUE-VALUE
RSTACK
?CCL10: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \?CCL21
EQUAL? GL-PLACE-CUR,RM-PINCHIN-LANE \FALSE
ICALL2 RT-DO-WALK,P?WEST
RTRUE
?CCL21: EQUAL? GL-PRSA,V?EXIT \FALSE
EQUAL? GL-PLACE-CUR,RM-SHERMANS-HOUSE \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
.FUNCT RT-AC-RM-THREADNEEDLE-ST,CONTEXT
ZERO? CONTEXT \?CND1
EQUAL? GL-PRSA,V?ENTER \FALSE
EQUAL? GL-PLACE-CUR,RM-BANK-OF-ENGLAND \FALSE
ICALL2 RT-DO-WALK,P?SOUTH
RTRUE
?CND1: CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL9
FSET CH-BANK-GUARD,FL-SEEN
FSET CH-URCHINS,FL-SEEN
FSET TH-GUARDS-POCKET,FL-SEEN
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL12
EQUAL? GL-PLACE-PRV,RM-BANK-OF-ENGLAND \?CCL15
PRINTI "You emerge into"
JUMP ?CND13
?CCL15: PRINTI "You enter"
?CND13: PRINTI " Threadneedle Street and are now"
JUMP ?CND10
?CCL12: PRINTI "You are"
?CND10: PRINTI " in front of the Bank of England. The entrance to the bank is to the north, Cheapside leads off to the west, and King William Street "
CALL1 RT-TIME-OF-DAY
ZERO? STACK \?CCL18
PRINTI "disappears off into the darkness"
JUMP ?CND16
?CCL18: PRINTI "continues"
?CND16: PRINTI " to the southeast. On the wall is a small sign."
CRLF
EQUAL? CONTEXT,K-M-DESC-1 /?CTR20
IN? CH-BANK-GUARD,RM-THREADNEEDLE-ST \?CCL21
?CTR20: CRLF
PRINTI "A bank guard is lounging up against the wall, idly jangling some keys in his pocket while he watches a group of urchins playing in the street."
CRLF
FSET? CH-WIGGINS,FL-BROKEN \FALSE
CRLF
PRINT K-URCHIN-MSG
CRLF
RTRUE
?CCL21: CRLF
PRINTI "A group of urchins is playing in the street."
CRLF
RFALSE
?CCL9: EQUAL? CONTEXT,K-M-BEG \?CCL27
IN? CH-HOLMES,RM-LAIR \?CCL27
FSET? TH-TOPAZ,FL-LOCKED /?CCL27
ICALL1 RT-WIGGINS-HELP-MSG
CRLF
FSET TH-TOPAZ,FL-LOCKED
RFALSE
?CCL27: EQUAL? CONTEXT,K-M-ENTERED \FALSE
EQUAL? GL-PLACE-PRV,RM-BANK-OF-ENGLAND \FALSE
FSET? TH-TOPAZ,FL-ASLEEP /FALSE
ICALL1 RT-KIDNAP
FSET TH-TOPAZ,FL-ASLEEP
RFALSE
.FUNCT RT-AC-RM-LONDON-BRIDGE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL6
EQUAL? GL-PLACE-PRV,RM-LAIR \?CCL9
PRINTR "When you emerge from the lair you are momentarily disoriented, blinking your eyes in the bright sunlight. After a few moments, you realize you are standing on London bridge, but you have no idea from which direction you came."
?CCL9: PRINTI "You"
ICALL1 RT-DRIVE-WALK-MSG?
PRINTI "up onto"
JUMP ?CND4
?CCL6: PRINTI "You are"
ICALL1 RT-IN-VEHICLE-MSG
PRINTI "on"
?CND4: PRINTI " London Bridge. "
CALL1 RT-TIME-OF-DAY
EQUAL? STACK,1,2,3 \?CCL12
PRINTI "The view of the river from here is spectacular, and hoards of sightseers are here with you to share the view."
CRLF
RFALSE
?CCL12: PRINTI "The fog is so dense you can barely see the river from here."
CRLF
RFALSE
?CCL3: ZERO? CONTEXT \?PRD16
EQUAL? GL-PRSA,V?LOOK-UNDER,V?LOOK-DOWN \?PRD16
EQUAL? GL-PRSO,RM-LONDON-BRIDGE /?CTR13
?PRD16: EQUAL? CONTEXT,K-M-BEG \?CCL14
EQUAL? GL-PRSA,V?LOOK-DOWN \?CCL14
EQUAL? GL-PRSO,ROOMS \?CCL14
?CTR13: PRINTR "You see the Thames flowing slowly by, just as it has done for centuries past."
?CCL14: ZERO? CONTEXT \FALSE
ZERO? GL-NOW-PRSI? \?CCL26
EQUAL? GL-PRSA,V?ENTER \?CCL29
EQUAL? GL-PLACE-CUR,RM-LOWER-THAMES-ST \?CCL32
ICALL2 RT-DO-WALK,P?SOUTH
RTRUE
?CCL32: EQUAL? GL-PLACE-CUR,RM-THAMES-THREE \FALSE
PRINTR "You can't climb onto the bridge."
?CCL29: EQUAL? GL-PRSA,V?EXIT \?CCL36
EQUAL? GL-PLACE-CUR,RM-LONDON-BRIDGE \FALSE
ICALL2 RT-DO-WALK,P?NORTH
RTRUE
?CCL36: EQUAL? GL-PRSA,V?SHOOT \FALSE
PRINT K-RICOCHET-MSG
CRLF
RTRUE
?CCL26: ZERO? GL-NOW-PRSI? /FALSE
IN? CH-PLAYER,TH-BOAT \FALSE
EQUAL? GL-PRSA,V?PUT,V?PUT-ON \FALSE
PRINTR "You can't attach anything to the bridge."
.FUNCT RT-AC-RM-SWAN-LANE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL6
EQUAL? GL-PLACE-PRV,RM-LOWER-THAMES-ST \?CCL9
PRINTI "With increasing apprehension, you descend"
JUMP ?CND7
?CCL9: PRINTI "With considerable relief, you emerge"
?CND7: PRINTI " into"
JUMP ?CND4
?CCL6: PRINTI "With increasing apprehension, you are standing in"
?CND4: PRINTI " Swan Lane, which runs along the waterfront of the Thames."
CRLF
CRLF
EQUAL? CONTEXT,K-M-DESC-1 \?CND10
PRINTI "It is a seedy, disreputable, run-down part of town that normally you wouldn't be caught dead in. After a moment's reflection, you wish you hadn't thought of it in quite those terms."
CRLF
CRLF
?CND10: PRINTI "To the west is the entrance to one of the least savory buildings you have ever seen. There is a faded sign above the door that informs you that the establishment was, in better days, known as the Bar of Gold."
CRLF
CRLF
PRINTI "Fortunately, it is only a short walk back up the stairs to Lower Thames Street."
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-ENTERED \?CCL13
EQUAL? GL-PLACE-PRV,RM-BAR-OF-GOLD \?CCL13
IN? CH-WIGGINS,RM-SWAN-LANE \?CCL13
CRLF
ICALL2 RT-CTHEO-PRINT,CH-WIGGINS
PRINTI " says, ""Blimey!! I didn't think you would make it out of there alive."""
CRLF
SET 'GL-PUPPY,CH-WIGGINS
RETURN GL-PUPPY
?CCL13: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \FALSE
EQUAL? GL-PLACE-CUR,RM-BAR-OF-GOLD \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
.FUNCT RT-AC-RM-BAR-OF-GOLD,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CND4
FSET CH-DENKEEPER,FL-SEEN
FSET TH-OPIUM-GAS,FL-SEEN
?CND4: EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL8
PRINTI "After fighting the urge to turn and run, you enter and find yourself "
JUMP ?CND6
?CCL8: PRINTI "You are standing - rather nervously - "
?CND6: PRINTI "in the Bar of Gold, the most infamous opium den in London. The proprietor is a most unsavory character who "
EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL11
PRINTI "gives you a sidelong glance as you enter and then ignores you"
JUMP ?CND9
?CCL11: PRINTI "hasn't given you a second look since you came in"
?CND9: PRINTC 46
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-ENTERING \?CCL13
EQUAL? GL-PUPPY,CH-WIGGINS \?CCL13
ICALL2 RT-THEO-PRINT,CH-WIGGINS
PRINTI " says, ""You must be stark raving bonkers. That's the most dangerous place in London. I'll wait out here, thank you very much!"""
CRLF
CRLF
SET 'GL-PUPPY,FALSE-VALUE
RETURN GL-PUPPY
?CCL13: ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \?CCL19
EQUAL? GL-PLACE-CUR,RM-SWAN-LANE \FALSE
ICALL2 RT-DO-WALK,P?WEST
RTRUE
?CCL19: EQUAL? GL-PRSA,V?EXIT \FALSE
EQUAL? GL-PLACE-CUR,RM-BAR-OF-GOLD \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
.FUNCT RT-AC-RM-LAIR,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CCL6
FSET CH-MORIARTY,FL-SEEN
FSET TH-LAIR-KEY,FL-SEEN
FSET TH-CROWN-JEWELS,FL-SEEN
FSET TH-MORIARTY-DESK,FL-SEEN
FSET TH-ROPE,FL-SEEN
PRINTI "At last you come face to face with the evil Professor. He is sitting placidly behind his desk, looking at you as if you were some botanical specimen."
CRLF
CRLF
PRINTI "As you look around the room, you see Sherlock Holmes tied to a chair. He is only inches away from the Crown Jewels, which Moriarty has spread out on his desk, the better to taunt Holmes."
CRLF
CRLF
PRINTI "Holmes looks up and says, ""Ah, there you are Watson."" He turns his head towards Moriarty and says, ""You see, Professor, you grossly underestimate the intelligence and determination of your fellow countrymen."""
CRLF
CRLF
PRINTR """Watson,"" he continues. ""The Professor and I have just been chatting about why he led us on this merry chase. If you care to ask him, I'm sure he would be happy to fill you in as well."""
?CCL6: EQUAL? CONTEXT,K-M-DESC-3 \FALSE
PRINTI "The room is simply, but elegantly, furnished."
FSET? CH-HOLMES,FL-LOCKED \?CND8
SET 'GL-PUPPY-MSG?,FALSE-VALUE
PRINTC 32
CALL2 RT-PICK-NEXT,GL-HOLMES-DESC-TXT
PRINT STACK
PRINT K-SECURELY-BOUND-MSG
PRINTC 46
?CND8: CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-ENTERED \?CND1
SET 'GL-PUPPY,CH-HOLMES
?CND1: EQUAL? CONTEXT,K-M-BEG \FALSE
EQUAL? GL-PRSA,V?TAKE,V?SHOW \?CCL16
EQUAL? GL-PRSO,TH-BREATH /FALSE
FSET? GL-PRSO,FL-BODYPART /FALSE
FSET? GL-PRSO,FL-WORN /FALSE
FSET? CH-MORIARTY,FL-LOCKED /FALSE
FSET? CH-MORIARTY,FL-ASLEEP /FALSE
CALL RT-META-IN?,GL-PRSO,GL-WINNER
ZERO? STACK /?CCL30
CALL RT-DO-CLOCK-SET,GL-TIME-PARM,0,1,0
ICALL RT-ALARM-SET-REL,RT-I-TAKE-WATSONS-STUFF,STACK
MOVE GL-PRSO,GL-WINNER
PRINTI "Moriarty's normally emotionless features dissolve in rage. He shouts at Akbar, ""Why didn't you take that from him when you brought him in?"""
CRLF
CRLF
PRINTR "The outburst startles Akbar into momentary inaction, but he quickly recovers and starts to come towards you with a violent look in his eyes."
?CCL30: PRINTI "Akbar steps in your way"
FSET? TH-WATSONS-HAT,FL-WORN \?CND31
PRINTI ", says, ""Pardon me, honourable sir,"""
?CND31: PRINTI " and stops you from taking "
ICALL1 RT-THEO-PRINT
PRINTR "."
?CCL16: EQUAL? GL-PRSA,V?RELEASE \?CCL34
EQUAL? GL-PRSO,TH-BREATH /FALSE
?CCL34: EQUAL? GL-PRSA,V?UNTIE,V?RELEASE \?CCL38
EQUAL? GL-PRSO,TH-ROPE /FALSE
FSET? GL-PRSO,FL-LOCKED \?CCL43
FSET? CH-AKBAR,FL-ASLEEP /?CTR45
FSET? CH-AKBAR,FL-LOCKED \?CCL46
?CTR45: FCLEAR GL-PRSO,FL-LOCKED
ICALL RT-CYOU-MSG,STR?720,STR?721
ICALL1 RT-THEO-PRINT
EQUAL? GL-PRSO,TH-ROPE-AUX1 \?CCL51
SET 'TH-ROPE-AUX1,TH-ROPE-AUX2
SET 'TH-ROPE-AUX2,-1
EQUAL? TH-ROPE-AUX1,-1 \?CND49
MOVE TH-ROPE,CH-PLAYER
FCLEAR TH-ROPE,FL-NODESC
PRINTI ", keeping "
ICALL2 RT-THEO-PRINT,TH-ROPE
JUMP ?CND49
?CCL51: EQUAL? GL-PRSO,TH-ROPE-AUX2 \?CND49
SET 'TH-ROPE-AUX2,-1
?CND49: PRINTC 46
CRLF
EQUAL? GL-PRSO,CH-MORIARTY,CH-AKBAR \TRUE
FSET? CH-AKBAR,FL-ASLEEP /TRUE
CRLF
EQUAL? GL-PRSO,CH-MORIARTY \?CCL61
PRINTI "Bad move. As soon as he is free, Moriarty"
JUMP ?CND59
?CCL61: PRINTI "Akbar immediately unties Moriarty, who"
?CND59: PRINTI " unlocks his desk and pulls out a pistol. ""Thank you for releasing me, gentlemen,"" he says, waving the gun at you. ""Very sporting of you."" He glances at his pocketwatch. ""We shouldn't have too long to wait."" Minutes later you hear newsboys running through the streets shouting about the resignation of the Prime Minister."
CRLF
ICALL1 RT-QSR
RTRUE
?CCL46: CALL1 RT-ROPE-MSG
RSTACK
?CCL43: EQUAL? GL-PRSA,V?RELEASE /FALSE
ICALL1 RT-CTHEO-PRINT
ICALL2 RT-ISNT-ARENT-MSG,GL-PRSO
PRINTR "tied up."
?CCL38: EQUAL? GL-PRSA,V?TIE-UP \?CCL65
EQUAL? GL-PRSI,TH-ROPE,ROOMS /?CCL65
CALL1 RT-IMPOSSIBLE-MSG
RSTACK
?CCL65: EQUAL? GL-PRSA,V?TIE,V?TIE-UP \?CCL69
EQUAL? GL-PRSO,CH-PLAYER,CH-ME /?CTR68
EQUAL? GL-PRSI,CH-PLAYER,CH-ME \?CCL69
?CTR68: PRINTR "We'll assume you're joking."
?CCL69: EQUAL? GL-PRSA,V?TIE,V?TIE-UP \FALSE
CALL2 RT-VISIBLE?,TH-ROPE
ZERO? STACK /?CCL78
FSET? CH-AKBAR,FL-ASLEEP /?CTR80
FSET? CH-AKBAR,FL-LOCKED \?CCL81
?CTR80: EQUAL? CH-HOLMES,GL-PRSI,GL-PRSO \?CND84
PRINTR "Surely you jest."
?CND84: EQUAL? TH-ROPE-AUX1,-1 \?CCL88
SET 'TH-ROPE-AUX1,GL-PRSO
JUMP ?CND86
?CCL88: EQUAL? TH-ROPE-AUX2,-1 \?CCL90
SET 'TH-ROPE-AUX2,GL-PRSO
?CND86: EQUAL? GL-PRSI,ROOMS \?CND91
SET 'GL-PRSI,FALSE-VALUE
?CND91: MOVE TH-ROPE,GL-PLACE-CUR
FSET TH-ROPE,FL-NODESC
FSET GL-PRSO,FL-LOCKED
EQUAL? GL-PRSI,FALSE-VALUE,TH-ROPE \?CCL95
ICALL RT-CYOU-MSG,STR?722,STR?723
PRINTI "up "
ICALL1 RT-THEO-PRINT
PRINTR "."
?CCL90: ICALL2 RT-CTHEO-PRINT,TH-ROPE
PRINTR " is not long enough."
?CCL95: EQUAL? TH-ROPE-AUX2,-1 /?CCL97
ICALL RT-CYOU-MSG,STR?722,STR?723
PRINTI "up "
ICALL1 RT-THEO-PRINT
PRINTI ", but "
ICALL2 RT-THEO-PRINT,TH-ROPE
PRINTI " is not long enough to tie up "
ICALL1 RT-THEI-PRINT
PRINTR " as well."
?CCL97: FSET GL-PRSI,FL-LOCKED
PRINTI "You tie "
ICALL1 RT-THEO-PRINT
PRINTI " to "
ICALL1 RT-THEI-PRINT
PRINTR "."
?CCL81: CALL1 RT-ROPE-MSG
RSTACK
?CCL78: PRINTI "You don't have "
ICALL2 RT-A-PRINT,TH-ROPE
PRINTR "."
.FUNCT RT-AC-RM-NAVE,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CCL6
FSET TH-NEWTON-TOMB,FL-SEEN
PRINTI "You enter the Abbey and pause in the Nave, struck by the sheer magnificence of the building. Massive Purbeck columns march the length of the Nave, and they rise in perfect proportion to meet each other in a series of pointed arches that are the hallmark of the Gothic style."
CRLF
CRLF
PRINTR "The interior of the Abbey is dark, cold, and gloomy - but after a few moments your eyes adjust and you can make out a tomb at the far end of the room."
?CCL6: EQUAL? CONTEXT,K-M-DESC-2,K-M-DESC-3 \FALSE
EQUAL? CONTEXT,K-M-DESC-2 \?CCL10
EQUAL? GL-PLACE-PRV,RM-BROAD-SANCTUARY \?CCL13
PRINTI "You walk through the massive door and find yourself once again in"
JUMP ?CND8
?CCL13: PRINTI "You return to"
JUMP ?CND8
?CCL10: EQUAL? CONTEXT,K-M-DESC-3 \?CND8
PRINTI "You are standing in"
?CND8: PRINTI " the Nave. Amidst the massive columns, one tomb in particular catches your attention."
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-ENTERED \?CCL16
SET 'PLAYER-IN-ABBEY,TRUE-VALUE
RFALSE
?CCL16: EQUAL? CONTEXT,K-M-EXIT \FALSE
EQUAL? GL-P-WALK-DIR,P?OUT,P?WEST \FALSE
SET 'PLAYER-IN-ABBEY,FALSE-VALUE
RFALSE
.FUNCT RT-AC-RM-EVANGELIST-CHAPEL,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CCL6
FSET TH-BANK-OF-CANDLES,FL-SEEN
FSET TH-VERE-TOMB,FL-SEEN
PRINTI "You enter the Evangelist Chapel and wonder what it is about this room that makes you feel it is somehow different from the rest of the Abbey."
CRLF
RFALSE
?CCL6: EQUAL? CONTEXT,K-M-DESC-2 \?CCL8
PRINTI "You return to the welcome warmth provided by the array of candles in the Evangelist Chapel."
CRLF
RFALSE
?CCL8: PRINTI "Light! Warmth! There is a bank of candles here lit by devoted worshippers. The candles warm the room so effectively that after a few moments you actually become uncomfortable."
CRLF
CRLF
PRINTI "One of the most unusual tombs in the Abbey is here."
CRLF
RFALSE
?CCL3: EQUAL? CONTEXT,K-M-BEG \FALSE
ICALL2 RT-PAPER-WARMING,TH-WHITE-PAPER
ICALL2 RT-PAPER-WARMING,TH-BLUE-PAPER
ICALL2 RT-PAPER-WARMING,TH-ORANGE-PAPER
ICALL2 RT-PAPER-WARMING,TH-YELLOW-PAPER
ICALL2 RT-PAPER-WARMING,TH-BROWN-PAPER
ICALL2 RT-PAPER-WARMING,TH-GREEN-PAPER
RFALSE
.FUNCT RT-AC-RM-HENRY-VII-CHAPEL,CONTEXT
CALL2 RT-DESCFCN-CONTEXT,CONTEXT
ZERO? STACK /?CCL3
EQUAL? CONTEXT,K-M-DESC-1 \?CND4
FSET TH-HENRY-VII-TOMB,FL-SEEN
?CND4: EQUAL? CONTEXT,K-M-DESC-1,K-M-DESC-2 \?CCL8
PRINTI "You enter"
JUMP ?CND6
?CCL8: PRINTI "You are in"
?CND6: PRINTI " Henry VII's chapel, which is one of the most beautiful chapels in the world. The ceiling is a masterpiece of delicate fan vaulting, and the Renaissance gilt-bronze tomb is obviously the work of one of the Italian masters."
CRLF
RFALSE
?CCL3: EQUAL? GL-PRSA,V?LOOK-UP \FALSE
PRINT K-BREATH-TAKING-MSG
CRLF
RTRUE
.FUNCT RT-EX-ENTER-BANK-OF-ENGLAND
LESS? CH-BANK-GUARD-AUX1,4 \?CCL3
PRINTI "The guard stops you as you try to enter. ""Excuse me, sir. You can't go in there. And don't even THINK about trying to bribe me."""
CRLF
ICALL2 RT-THIS-IS-IT,CH-BANK-GUARD
RFALSE
?CCL3: IN? TH-BOX-KEY,TH-GUARDS-POCKET \?CCL5
PRINTI "Holmes takes you to one side and whispers, ""It is obvious, dear fellow, that it would be pointless to enter the bank with no means of unlocking anything we may find inside."""
CRLF
RFALSE
?CCL5: IN? CH-BANK-GUARD,RM-THREADNEEDLE-ST /?CCL7
RETURN RM-BANK-OF-ENGLAND
?CCL7: PRINTI "As soon as you enter, the guard leaves."
CRLF
CRLF
REMOVE CH-BANK-GUARD
RETURN RM-BANK-OF-ENGLAND
.FUNCT RT-AC-RM-BUCKINGHAM-PALACE,CONTEXT
ZERO? CONTEXT \FALSE
EQUAL? GL-PRSA,V?ENTER \?CCL5
EQUAL? GL-PLACE-CUR,RM-QUEENS-GARDENS \FALSE
ICALL2 RT-DO-WALK,P?WEST
RTRUE
?CCL5: EQUAL? GL-PRSA,V?EXIT \FALSE
EQUAL? GL-PLACE-CUR,RM-BUCKINGHAM-PALACE \FALSE
ICALL2 RT-DO-WALK,P?EAST
RTRUE
.FUNCT RT-EX-RM-ENTER-BUCKINGHAM-PALACE
EQUAL? GL-PRSO,P?WEST,P?IN \FALSE
EQUAL? GL-PLACE-CUR,RM-QUEENS-GARDENS \FALSE
ICALL2 RT-CTHEO-PRINT,CH-PALACE-GUARD
PRINTI " steps into your path and says, ""I'm sorry, but I've been instructed to let no one into the Palace unless I receive certain items of interest to the Crown."""
CRLF
RFALSE
.FUNCT RT-EX-RM-STEER-BOAT
ICALL2 RT-ALARM-CLR,RT-I-MOVE-DOWNSTREAM
PRINTI "[To move the boat, ROW or PADDLE in a given direction, or LAND it.]"
CRLF
RFALSE
.FUNCT RT-EX-RM-LAND-BOAT
PRINTI "[Land the Boat.]"
CRLF
ICALL1 RT-LAND-BOAT
RFALSE
.FUNCT RT-EX-RM-LAUNCH-BOAT
IN? CH-PLAYER,TH-BOAT \?CCL3
PRINTI "[Launch the Boat.]"
CRLF
ICALL1 RT-LAUNCH-BOAT
RFALSE
?CCL3: PRINTI "The last man who walked on water was killed by a bunch of Romans. Why don't you play it safe and use a boat?"
CRLF
RFALSE
.FUNCT RT-EX-PARLOUR-ENTRY
FSET? CH-HOLMES,FL-ASLEEP \?CCL3
ICALL2 RT-CTHEO-PRINT,CH-HUDSON
PRINT K-HUDSON-WORRIED-MSG
CRLF
RFALSE
?CCL3: FSET? LG-PARLOUR-DOOR,FL-OPENED /?CCL5
ICALL2 RT-CTHEO-PRINT,LG-PARLOUR-DOOR
PRINTI " is closed."
CRLF
RFALSE
?CCL5: EQUAL? GL-PRSO,P?NORTH,P?IN \FALSE
EQUAL? GL-PLACE-CUR,RM-ENTRY-HALL \FALSE
RETURN RM-PARLOUR
.FUNCT RT-EX-LEAVE-EMBANKMENT
FSET? TH-SUIT-OF-ARMOUR,FL-WORN \?CND1
PRINT K-HEAVY-ARMOUR-MSG
CRLF
RFALSE
?CND1: IN? GL-WINNER,TH-BOAT \?CND3
ICALL RT-PERFORM,V?EXIT,TH-BOAT
IN? GL-WINNER,RM-THE-EMBANKMENT \FALSE
?CND3: EQUAL? GL-PRSO,P?NORTH \?CCL9
EQUAL? GL-PLACE-CUR,RM-THE-EMBANKMENT \?CCL9
RETURN RM-FLEET-STREET
?CCL9: EQUAL? GL-PRSO,P?EAST \FALSE
EQUAL? GL-PLACE-CUR,RM-THE-EMBANKMENT \FALSE
RETURN RM-UPPER-THAMES-ST
.ENDI

901
places2.zil Normal file
View File

@ -0,0 +1,901 @@
;*****************************************************************************
; "game : SHERLOCK!"
; "file : PLACES2.ZIL"
; "auth : $Author: RAB $"
; "date : $Date: 28 Oct 1987 4:31:22 $"
; "rev : $Revision: 1.72 $"
; "vers : 1.00"
;*****************************************************************************
<ROUTINE RT-SURGE ()
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL
"The fog is so thick that even your light cannot penetrate it,
so you retrace your steps." CR>
<RFALSE>)
(T
<TELL "Surging crowds of ">
<COND (<EQUAL? ,GL-PLACE-CUR ,RM-KENSINGTON-GARDENS>
<TELL "haughty nannies">)
(<EQUAL? ,GL-PLACE-CUR ,RM-COVENT-GARDEN>
<TELL "housewives intent on a bargain">)
(T
<TELL "tourists">)>
<TELL " block your path." CR>
<RFALSE>)>>
<ROUTINE RT-AC-RM-MADAME-TUSSAUDS ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-MADAME-TUSSAUDS" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,TH-ASH ,FL-SEEN>
<MC-MAKE ,TH-WILLIAM-STATUE ,FL-SEEN>
<MC-MAKE ,TH-WALTER-STATUE ,FL-SEEN>
<MC-MAKE ,TH-ELIZABETH-STATUE ,FL-SEEN>
<MC-MAKE ,TH-DRAKE-STATUE ,FL-SEEN>
<MC-MAKE ,TH-JOHN-STATUE ,FL-SEEN>)>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<COND (<EQUAL? ,GL-PLACE-PRV ,RM-MARYLEBONE-RD>
<TELL "You come in off the street and are now standing in">)
(T
<TELL "You leave the Chamber of Horrors and go back into">)>)
(T
<TELL "You are in">)>
<TELL " the lobby." CR CR "All around you are wax statues of
famous people. To the west is a dark and ominous-looking doorway with a sign
over it. The exit to the street is to the south." CR>
<COND (<AND <MC-IS? ,TH-ASH ,FL-ASLEEP>
<IN? ,CH-HOLMES ,GL-PLACE-CUR>>
<MC-MAKE ,TH-ASH ,FL-SEEN>
<MC-UNMAKE ,TH-ASH ,FL-ASLEEP>
<MC-UNMAKE ,TH-ASH ,FL-NODESC>
<TELL CR CTHE ,CH-HOLMES
" drops to his hands and knees and begins a minute examination of the floor.
After a few moments he cries, \"Aha! Look here, Watson.\" He points to a
miniscule speck of ash on the floor." CR>
<SETG GL-PUPPY-MSG? <>>
<RTRUE>)
(T
<RFALSE>)>)
(<AND <EQUAL? .CONTEXT ,K-M-ENTERED>
<MC-ISNOT? ,TH-TOBACCO ,FL-ASLEEP>
<MC-IS? ,TH-TOBACCO ,FL-LIGHTED>>
<RT-UPDATE-SCORE 1>
<MC-MAKE ,TH-TOBACCO ,FL-ASLEEP>)
(<F? .CONTEXT>
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-MARYLEBONE-RD>
<RT-DO-WALK ,P?NORTH>
<RTRUE>)
(<MC-HERE? ,RM-CHAMBER-OF-HORRORS>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)>)>
<RFALSE>>
; "FL-OPENED = player exited room while librarian was talking to him"
<ROUTINE RT-AC-RM-MANUSCRIPT-ROOM ("OPTIONAL" (CONTEXT <>) "AUX" VALUE)
<DEBUGGING? <RT-DEBUG-RM-AC "RM-MANUSCRIPT-ROOM" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL "The deserted corridor leads to">)
(T
<TELL "You are in">)>
<TELL
" the manuscript room, which contains a dusty collection of
old books on obscure subjects. ">
<COND (<IN? ,CH-LIBRARIAN ,RM-MANUSCRIPT-ROOM>
<TELL
"There is an old librarian here, on whose desk sits a handwritten sign that
reads \"Quiet, please.\" ">)>
<TELL "There are thousands of books behind glass cases">
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<TELL ", but one is lying unattended on a table">)>
<TELL ". The only exit is to the west." CR>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,CH-LIBRARIAN ,FL-SEEN>
<MC-MAKE ,TH-CLUE-BOOK ,FL-SEEN>
;<MC-MAKE ,TH-LIBRARY-OBJ ,FL-SEEN>
<MC-MAKE ,TH-LIBRARY-TABLE ,FL-SEEN>
<TELL
CR "The librarian - who is as dusty as the books - looks up in surprise as
you come in. He ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<TELL "whispers">)
(T
<TELL "says loudly">)>
<TELL
", \"Oh, I say! Hello! I don't get many visitors here. Is there
something I can help you with? Some information about the Jubilee,
perhaps? It's quite rare, you know, for a British ruler to
celebrate 50 years on the throne. Unique, in fact. The closest anyone
else came was Elizabeth, who ruled 45 years - although our records are
somewhat vague before the year 900. The Anglo-Saxon chronicles do get rather
sketchy, what? Still, they're the best we have. I think I can find a copy
for you somewhere here.\"" CR CR
"The librarian's voice trails off as he bustles from shelf to shelf,
squinting at the books to find the one he thinks you want." CR>
<RTRUE>)
(T
<RFALSE>)>)
(<AND .CONTEXT
<IN? ,CH-LIBRARIAN ,RM-MANUSCRIPT-ROOM>
<MC-ISNOT? ,CH-LIBRARIAN ,FL-ASLEEP>>
<COND (<AND <EQUAL? .CONTEXT ,K-M-ENTERED>
<MC-IS? ,CH-LIBRARIAN ,FL-OPENED>>
<TELL CR
CTHE ,CH-LIBRARIAN " says, \"Welcome back! I have more interesting things to
tell you!\"" CR>
<RTRUE>)
(<EQUAL? .CONTEXT ,K-M-EXIT>
<TELL
"As you leave, the librarian calls out, \"Must you be going? I have
so many other interesting things to tell you.\"" CR CR>
<MC-MAKE ,CH-LIBRARIAN ,FL-OPENED>)
(<EQUAL? .CONTEXT ,K-M-BEG>
<COND (<OR <MC-VERB? WALK EXIT>
<INTBL? ,GL-PRSA <REST ,GL-GAME-VERBS 2> <GET ,GL-GAME-VERBS 0>>>
<RFALSE>)
(<MC-VERB? WAIT LISTEN>
<TELL "The librarian says ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<TELL "softly">)
(T
<TELL "loudly">)>
<TELL ", ">
<RT-LIBRARIAN-SAYS-MSG>
<RTRUE>)
(<MC-VERB? HUSH>
<TELL
"The librarian stops in midsentence and gets an embarrassed look on
his face. \"Oh, I say. I'm sorry to have rambled on like this, but I do
so enjoy speaking with visitors. I get them so seldom, you know. Thank
you for listening.\"" CR CR
"He leaves the room, mumbling something to himself about the articulation of
the third joint of the hind leg of an extinct species of dung beetle." CR>
<REMOVE ,CH-LIBRARIAN>
<RTRUE>)
(<MC-VERB? LOOK>
<RT-DESC-ALL <> T>
<TELL CR "As you look around, the librarian says ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<TELL "softly">)
(T
<TELL "loudly">)>
<TELL ", ">
<RT-LIBRARIAN-SAYS-MSG>
<RTRUE>)
(<AND <MC-VERB? TELL>
<MC-PRSO? ,CH-LIBRARIAN>>
<RFALSE>)
;(<EQUAL? ,GL-P-PRSA-WORD ,W?ECHO>
<TELL
"The librarian pauses for a second as if he is finally going to stop
talking...but then he continues ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<TELL "quietly">)
(T
<TELL "noisily">)>
<TELL " and says, ">
<RT-LIBRARIAN-SAYS-MSG>
<RTRUE>)
(<RT-TALK-VERB?>
<TELL
"The librarian interrupts you as you attempt to speak, and ">
<COND (<MC-IS? ,TH-COTTON-BALLS ,FL-WORN>
<TELL "whispers">)
(T
<TELL "says">)>
<TELL ", ">
<RT-LIBRARIAN-SAYS-MSG>
<RFATAL>)
(T
<TELL "The librarian launches off into another
speech, and it distracts you from what you wanted to do. ">
<RT-LIBRARIAN-SAYS-MSG>
<RTRUE>)>)>)
(.CONTEXT <RFALSE>)
(T
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-BRITISH-MUSEUM>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-MANUSCRIPT-ROOM>
<RT-DO-WALK ,P?WEST>
<RTRUE>)>)>
<RFALSE>)>>
<ROUTINE RT-AC-RM-VICTORIA-STREET ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-VICTORIA-STREET" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL "You enter">)
(T
<TELL "You are loitering in">)>
<TELL
" Victoria Street, which runs east and west between Victoria Square
and Broad Sanctuary." CR CR
"You see a sign outside one of the shops." CR>
<RFALSE>)
(<AND <==? .CONTEXT ,K-M-BEG>
<MC-VERB? WAIT>>
<COND (<MC-ISNOT? ,RM-VICTORIA-STREET ,FL-ASLEEP>
<MC-MAKE ,RM-VICTORIA-STREET ,FL-ASLEEP>
<TELL
"After a few moments, a constable strolls by, bops you on the head
with his billy club, and says, \"Move along, you.\"" CR>
<RTRUE>)
(T
<TELL
"The same constable as before walks by and says, \"You again? That's it,
mate. Come along with me.\" He bops you on the head again and arrests you
on a charge of vagrancy." CR CR
"You spend the night in gaol, and in the morning Inspector Lestrade drops
by to tell you that there has been a mix-up in the paperwork and you are
to be deported to Australia the following day. He gives you a letter to
deliver to his sister in Melbourne and wishes you luck." CR CR>
<RT-QSR>)>)
(<T? .CONTEXT> <RFALSE>)>>
<ROUTINE RT-AC-RM-CLOCK-TOWER ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-CLOCK-TOWER" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL
"The stairs seem to wind up forever. Finally, you emerge into">)
(T
<TELL "You are in">)>
<TELL " the interior of the clock tower, high above the Houses
of Parliament." CR CR
"The immense bell known as Big Ben is hanging from the
ceiling, suspended over a hollow shaft that is so deep it might as
well be bottomless. A wooden railing runs around the shaft
for safety." CR CR
"Inside the bell, you see an enormous clapper">
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,TH-BELL ,FL-SEEN>
<MC-MAKE ,TH-SAPPHIRE ,FL-SEEN>
<MC-MAKE ,TH-CLAPPER ,FL-SEEN>
<MC-MAKE ,TH-SHAFT ,FL-SEEN>
<MC-MAKE ,TH-RAILING ,FL-SEEN>
<TELL ,K-SAPPHIRE-MSG CR>
<RTRUE>)
(T
<COND (<IN? ,TH-SAPPHIRE ,TH-CLAPPER>
<TELL ,K-SAPPHIRE-MSG CR>)
(T
<TELL "." CR>)>
<RFALSE>)>)
(<NOT <RT-ALARM-SET? ,RT-I-SWING-BELL>>
<RT-ZERO-SECONDS>)>
<RFALSE>>
<ROUTINE RT-AC-RM-THAMES-ONE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THAMES-ONE" .CONTEXT>>
;<IFSOUND <COND (<==? .CONTEXT ,K-M-BEG>
<SOUNDS ,S-BOATING ,S-START>)>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "on the Thames, just south of the Embankment." CR>
<RFALSE>)
(T
<RT-PROCESS-BOAT-ON-THAMES>)>>
<ROUTINE RT-AC-RM-THAMES-TWO ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THAMES-TWO" .CONTEXT>>
;<IFSOUND <COND (<==? .CONTEXT ,K-M-BEG>
<SOUNDS ,S-BOATING ,S-START>)>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "on the Thames. Downstream you can see London Bridge." CR>
<RFALSE>)
(T
<RT-PROCESS-BOAT-ON-THAMES>)>>
<ROUTINE RT-AC-RM-THAMES-THREE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THAMES-THREE" .CONTEXT>>
;<IFSOUND <COND (<==? .CONTEXT ,K-M-BEG>
<SOUNDS ,S-BOATING ,S-START>)>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "underneath London Bridge." CR>
<RFALSE>)
(<OR <AND <MC-VERB? EXAMINE LOOK-UNDER>
<MC-PRSO? ,RM-LONDON-BRIDGE>>
<AND <MC-VERB? LOOK-UP>
<MC-PRSO? ,ROOMS ,RM-LONDON-BRIDGE>>>
<TELL "You see nothing of interest">
<COND (<IN? ,TH-CLUMP-OF-MOSS ,RM-THAMES-THREE>
<MC-MAKE ,TH-CLUMP-OF-MOSS ,FL-SEEN>
<TELL
", other than a clump of moss lodged among the supports overhead." CR>)
(T
<TELL "." CR>)>
<RT-PROCESS-BOAT-ON-THAMES>
<RTRUE>)
(T
<RT-PROCESS-BOAT-ON-THAMES>)>>
<ROUTINE RT-AC-RM-THAMES-FOUR ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THAMES-FOUR" .CONTEXT>>
;<IFSOUND <COND (<==? .CONTEXT ,K-M-BEG>
<SOUNDS ,S-BOATING ,S-START>)>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "on the Thames, just south of Traitor's Gate." CR>
<RFALSE>)
(T
<RT-PROCESS-BOAT-ON-THAMES>)>>
<ROUTINE RT-AC-RM-THAMES-FIVE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THAMES-FIVE" .CONTEXT>>
;<IFSOUND <COND (<==? .CONTEXT ,K-M-BEG>
<SOUNDS ,S-BOATING ,S-START>)>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "on the Thames, in danger of drifting out to sea." CR>
<RFALSE>)
(T
<RT-PROCESS-BOAT-ON-THAMES>)>>
<ROUTINE RT-AC-RM-SHERMANS-HOUSE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-SHERMANS-HOUSE" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<RT-THIS-IS-IT ,CH-SHERMAN>
<MC-MAKE ,CH-SHERMAN ,FL-SEEN>
<MC-MAKE ,RM-SHERMANS-HOUSE ,FL-SEEN>
<TELL "You enter the cramped quarters of Sherman's
shop. The old animal-trainer's eyes brighten up when he sees you." CR CR
"\"You've probably come looking for Toby,\" he says. \"But I'm afraid I
won't be able to help you this time. Toby's not feeling too well, and all my
other animals are already out on loan. All I have left is a half-trained
pigeon.\"" CR>
<RTRUE>)
(<EQUAL? .CONTEXT ,K-M-DESC-2 ,K-M-DESC-3>
<TELL "Sherman's shop is dingy and cramped. Dozens of
empty cages are stacked up against the walls." CR>
<RFALSE>)>)
(<EQUAL? .CONTEXT ,K-M-ENTERED>
; "If the house is asleep, then the player has entered it for the first time,
and Sherman should not act -- DEB"
<COND (<MC-IS? ,RM-SHERMANS-HOUSE ,FL-ASLEEP>
<MC-UNMAKE ,RM-SHERMANS-HOUSE ,FL-ASLEEP>
<RFALSE>)
; "If the house is not asleep, then the player has entered it more than once,
and Sherman should act based on whether or not the trained pigeon is alive
-- DEB"
(<MC-IS? ,CH-SHERMAN ,FL-ASLEEP>
<RFALSE>)
(<MC-IS? ,CH-TRAINED-PIGEON ,FL-ALIVE>
<TELL CR
"Sherman says, \"Welcome back. It's a pleasure to see you again.\"" CR>
<RT-THIS-IS-IT ,CH-SHERMAN>)
(T
<RT-SHERMAN-RAGE T>)>)
(<T? .CONTEXT> <RFALSE>)
(<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-PINCHIN-LANE>
<RT-DO-WALK ,P?WEST>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-SHERMANS-HOUSE>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)>>
<ROUTINE RT-AC-RM-THREADNEEDLE-ST ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-THREADNEEDLE-ST" .CONTEXT>>
<COND (<F? .CONTEXT>
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-BANK-OF-ENGLAND>
<RT-DO-WALK ,P?SOUTH>
<RTRUE>)>)>
<RFALSE>)>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<MC-MAKE ,CH-BANK-GUARD ,FL-SEEN>
<MC-MAKE ,CH-URCHINS ,FL-SEEN>
<MC-MAKE ,TH-GUARDS-POCKET ,FL-SEEN>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<COND (<EQUAL? ,GL-PLACE-PRV ,RM-BANK-OF-ENGLAND>
<TELL "You emerge into">)
(T
<TELL "You enter">)>
<TELL " Threadneedle Street and are now">)
(T
<TELL "You are">)>
<TELL " in front of the Bank of England. The entrance to
the bank is to the north, Cheapside leads off to the west, and King
William Street ">
<COND (<EQUAL? <RT-TIME-OF-DAY> 0>
<TELL "disappears off into the darkness">)
(T
<TELL "continues">)>
<TELL " to the southeast. On the wall is a small sign." CR>
<COND (<OR <EQUAL? .CONTEXT ,K-M-DESC-1>
<IN? ,CH-BANK-GUARD ,RM-THREADNEEDLE-ST>>
<TELL
CR "A bank guard is lounging up against the wall, idly jangling some keys
in his pocket while he watches a group of urchins playing in the street." CR>
<COND (<MC-IS? ,CH-WIGGINS ,FL-BROKEN>
<TELL CR ,K-URCHIN-MSG CR>
<RTRUE>)>)
(T
<TELL CR "A group of urchins is playing in the street." CR>)>
<RFALSE>)
(<AND <EQUAL? .CONTEXT ,K-M-BEG>
<IN? ,CH-HOLMES ,RM-LAIR>
<MC-ISNOT? ,TH-TOPAZ ,FL-LOCKED>>
<RT-WIGGINS-HELP-MSG>
<CRLF>
<MC-MAKE ,TH-TOPAZ ,FL-LOCKED>)
(<AND <EQUAL? .CONTEXT ,K-M-ENTERED>
<EQUAL? ,GL-PLACE-PRV ,RM-BANK-OF-ENGLAND>
<MC-ISNOT? ,TH-TOPAZ ,FL-ASLEEP>>
<RT-KIDNAP>
<MC-MAKE ,TH-TOPAZ ,FL-ASLEEP>)>
<RFALSE>>
<ROUTINE RT-AC-RM-LONDON-BRIDGE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-LONDON-BRIDGE" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<COND (<EQUAL? ,GL-PLACE-PRV ,RM-LAIR>
<TELL
"When you emerge from the lair you are momentarily disoriented, blinking
your eyes in the bright sunlight. After a few moments, you realize you
are standing on London bridge, but you have no idea from which direction
you came." CR>
<RTRUE>)
(T
<TELL "You">
<RT-DRIVE-WALK-MSG?>
<TELL "up onto">)>)
(T
<TELL "You are">
<RT-IN-VEHICLE-MSG>
<TELL "on">)>
<TELL " London Bridge. ">
<COND (<EQUAL? <RT-TIME-OF-DAY> 1 2 3>
<TELL "The view of the river from here is spectacular,
and hoards of sightseers are here with you to share the view." CR>)
(T
<TELL
"The fog is so dense you can barely see the river from here." CR>)>
<RFALSE>)
(<OR <AND <F? .CONTEXT>
<MC-VERB? LOOK-UNDER LOOK-DOWN>
<MC-PRSO? ,RM-LONDON-BRIDGE>>
<AND <==? .CONTEXT ,K-M-BEG>
<MC-VERB? LOOK-DOWN>
<MC-PRSO? ,ROOMS>>>
<TELL "You see the Thames flowing slowly by, just as it has
done for centuries past." CR>
<RTRUE>)
(<T? .CONTEXT> <RFALSE>)
(<MC-THIS-PRSO?>
<COND (<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-LOWER-THAMES-ST>
<RT-DO-WALK ,P?SOUTH>
<RTRUE>)
(<MC-HERE? ,RM-THAMES-THREE>
<TELL "You can't climb onto the bridge." CR>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-LONDON-BRIDGE>
<RT-DO-WALK ,P?NORTH>
<RTRUE>)>)
(<MC-VERB? SHOOT>
<TELL ,K-RICOCHET-MSG CR>
<RTRUE>)>)
(<MC-THIS-PRSI?>
<COND (<AND <IN? ,CH-PLAYER ,TH-BOAT>
<MC-VERB? PUT PUT-ON>>
<TELL "You can't attach anything to the bridge." CR>
<RTRUE>)>)>>
<ROUTINE RT-AC-RM-SWAN-LANE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-SWAN-LANE" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<COND (<EQUAL? ,GL-PLACE-PRV ,RM-LOWER-THAMES-ST>
<TELL "With increasing apprehension, you descend">)
(T
<TELL "With considerable relief, you emerge">)>
<TELL " into">)
(T
<TELL "With increasing apprehension, you are standing in">)>
<TELL " Swan Lane, which runs along the waterfront of the Thames." CR CR>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<TELL "It is a seedy, disreputable, run-down part of town
that normally you wouldn't be caught dead in. After a moment's reflection,
you wish you hadn't thought of it in quite those terms." CR CR>)>
<TELL
"To the west is the entrance to one of the least savory buildings
you have ever seen. There is a faded sign above the door that informs
you that the establishment was, in better days, known as the Bar
of Gold." CR CR
"Fortunately, it is only a short walk back up the stairs to Lower
Thames Street." CR>
<RFALSE>)
(<AND <EQUAL? .CONTEXT ,K-M-ENTERED>
<EQUAL? ,GL-PLACE-PRV ,RM-BAR-OF-GOLD>
<IN? ,CH-WIGGINS ,RM-SWAN-LANE>>
<TELL CR
CTHE ,CH-WIGGINS " says, \"Blimey!! I didn't think you would make it
out of there alive.\"" CR>
<SETG GL-PUPPY ,CH-WIGGINS>
;<MC-UNMAKE ,CH-WIGGINS ,FL-NODESC> ;"FLAGS NEVER SET"
;<MC-UNMAKE ,CH-WIGGINS ,FL-BROKEN>)
(<T? .CONTEXT> <RFALSE>)
(<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-BAR-OF-GOLD>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)>>
<ROUTINE RT-AC-RM-BAR-OF-GOLD ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-BAR-OF-GOLD" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,CH-DENKEEPER ,FL-SEEN>
<MC-MAKE ,TH-OPIUM-GAS ,FL-SEEN>)>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL
"After fighting the urge to turn and run, you enter and find yourself ">)
(T
<TELL "You are standing - rather nervously - ">)>
<TELL
"in the Bar of Gold, the most infamous opium den in London. The
proprietor is a most unsavory character who ">
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL
"gives you a sidelong glance as you enter and then ignores you">)
(T
<TELL "hasn't given you a second look since you came in">)>
<TELL "." CR>
<RFALSE>)
(<AND <EQUAL? .CONTEXT ,K-M-ENTERING>
<EQUAL? ,GL-PUPPY ,CH-WIGGINS>>
<TELL THE ,CH-WIGGINS " says, \"You must be stark raving
bonkers. That's the most dangerous place in London. I'll wait
out here, thank you very much!\"" CR CR>
<SETG GL-PUPPY <>>)
(<T? .CONTEXT> <RFALSE>)
(<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-SWAN-LANE>
<RT-DO-WALK ,P?WEST>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-BAR-OF-GOLD>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)>>
<ROUTINE RT-AC-RM-LAIR ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-LAIR" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,CH-MORIARTY ,FL-SEEN>
<MC-MAKE ,TH-LAIR-KEY ,FL-SEEN>
<MC-MAKE ,TH-CROWN-JEWELS ,FL-SEEN>
<MC-MAKE ,TH-MORIARTY-DESK ,FL-SEEN>
<MC-MAKE ,TH-ROPE ,FL-SEEN>
<TELL "At last you come face to face with the evil
Professor. He is sitting placidly behind his desk, looking at you as if
you were some botanical specimen." CR CR
"As you look around the room, you see Sherlock Holmes tied to a
chair. He is only inches away from the Crown Jewels, which Moriarty has
spread out on his desk, the better to taunt Holmes." CR CR
"Holmes looks up and says, \"Ah, there you are Watson.\" He turns his head
towards Moriarty and says, \"You see, Professor, you grossly underestimate
the intelligence and determination of your fellow countrymen.\"" CR CR
"\"Watson,\" he continues. \"The Professor and I have just been chatting about
why he led us on this merry chase. If you care to ask him, I'm sure he would
be happy to fill you in as well.\"" CR>
<RTRUE>)
(<EQUAL? .CONTEXT ,K-M-DESC-3>
<TELL "The room is simply, but elegantly, furnished.">
<COND (<MC-IS? ,CH-HOLMES ,FL-LOCKED>
<SETG GL-PUPPY-MSG? <>>
<TELL " " <RT-PICK-NEXT ,GL-HOLMES-DESC-TXT>
,K-SECURELY-BOUND-MSG ".">)>
<CRLF>)>
<RFALSE>)
(<EQUAL? .CONTEXT ,K-M-ENTERED>
<SETG GL-PUPPY ,CH-HOLMES>)>
<COND (<==? .CONTEXT ,K-M-BEG>
<COND (<MC-VERB? TAKE SHOW>
<COND (<MC-PRSO? ,TH-BREATH>
<RFALSE>)
(<MC-IS? ,GL-PRSO ,FL-BODYPART>
<RFALSE>)
(<MC-IS? ,GL-PRSO ,FL-WORN>
<RFALSE>)
(<AND <MC-ISNOT? ,CH-MORIARTY ,FL-LOCKED>
<MC-ISNOT? ,CH-MORIARTY ,FL-ASLEEP>>
<COND (<RT-META-IN? ,GL-PRSO ,GL-WINNER>
<RT-ALARM-SET-REL ,RT-I-TAKE-WATSONS-STUFF
<RT-PARM-SET 0 1 0>>
<MOVE ,GL-PRSO ,GL-WINNER>
<TELL
"Moriarty's normally emotionless features dissolve in rage. He shouts at
Akbar, \"Why didn't you take that from him when you brought him
in?\"" CR CR
"The outburst startles Akbar into momentary inaction, but he quickly recovers
and starts to come towards you with a violent look in his eyes." CR>)
(T
<TELL "Akbar steps in your way">
<COND (<MC-IS? ,TH-WATSONS-HAT ,FL-WORN>
<TELL ", says, \"Pardon me, honourable sir,\"">)>
<TELL " and stops you from taking " THEO "." CR>)>)>)
(<AND <MC-VERB? RELEASE>
<MC-PRSO? ,TH-BREATH>>
<RFALSE>)
(<MC-VERB? UNTIE RELEASE>
<COND (<==? ,GL-PRSO ,TH-ROPE>
<RFALSE>)
(<MC-IS? ,GL-PRSO ,FL-LOCKED>
<COND (<OR <MC-IS? ,CH-AKBAR ,FL-ASLEEP>
<MC-IS? ,CH-AKBAR ,FL-LOCKED>>
<MC-UNMAKE ,GL-PRSO ,FL-LOCKED>
<RT-CYOU-MSG "untie" "unties">
<TELL THEO>
<COND (<EQUAL? ,GL-PRSO ,TH-ROPE-AUX1>
<SETG TH-ROPE-AUX1 ,TH-ROPE-AUX2>
<SETG TH-ROPE-AUX2 -1>
<COND (<EQUAL? ,TH-ROPE-AUX1 -1>
<MOVE ,TH-ROPE ,CH-PLAYER>
<MC-UNMAKE ,TH-ROPE ,FL-NODESC>
<TELL ", keeping " THE ,TH-ROPE>)>)
(<EQUAL? ,GL-PRSO ,TH-ROPE-AUX2>
<SETG TH-ROPE-AUX2 -1>)>
<TELL "." CR>
<COND (<AND <MC-PRSO? ,CH-MORIARTY ,CH-AKBAR>
<MC-ISNOT? ,CH-AKBAR ,FL-ASLEEP>>
<CRLF>
<COND (<EQUAL? ,GL-PRSO ,CH-MORIARTY>
<TELL
"Bad move. As soon as he is free, Moriarty">)
(T
<TELL
"Akbar immediately unties Moriarty, who">)>
<TELL
" unlocks his desk and pulls out a pistol. \"Thank you for releasing
me, gentlemen,\" he says, waving the gun at you. \"Very sporting of
you.\" He glances at his pocketwatch. \"We shouldn't have too long to
wait.\" Minutes later you hear newsboys running through the
streets shouting about the resignation of the Prime Minister." CR>
<RT-QSR>)>
<RTRUE>)
(T
<RT-ROPE-MSG>)>)
(<MC-VERB? RELEASE>
<RFALSE>)
(T
<TELL CTHEO>
<RT-ISNT-ARENT-MSG ,GL-PRSO>
<TELL "tied up." CR>)>)
(<AND <MC-VERB? TIE-UP>
<NOT <MC-PRSI? ,TH-ROPE ROOMS>>>
<RT-IMPOSSIBLE-MSG>)
(<AND <MC-VERB? TIE TIE-UP>
<OR <MC-PRSO? ,CH-PLAYER ,CH-ME>
<MC-PRSI? ,CH-PLAYER ,CH-ME>>>
<TELL "We'll assume you're joking." CR>
<RTRUE>)
(<MC-VERB? TIE TIE-UP>
<COND (<RT-VISIBLE? ,TH-ROPE>
<COND (<OR <MC-IS? ,CH-AKBAR ,FL-ASLEEP>
<MC-IS? ,CH-AKBAR ,FL-LOCKED>>
<COND (<EQUAL? ,CH-HOLMES ,GL-PRSI ,GL-PRSO>
<TELL "Surely you jest." CR>
<RTRUE>)>
<COND (<EQUAL? ,TH-ROPE-AUX1 -1>
<SETG TH-ROPE-AUX1 ,GL-PRSO>)
(<EQUAL? ,TH-ROPE-AUX2 -1>
<SETG TH-ROPE-AUX2 ,GL-PRSO>)
(T
<TELL CTHE ,TH-ROPE " is not long enough." CR>
<RTRUE>)>
<COND (<EQUAL? ,GL-PRSI ,ROOMS>
<SETG GL-PRSI <>>)>
<MOVE ,TH-ROPE ,GL-PLACE-CUR>
<MC-MAKE ,TH-ROPE ,FL-NODESC>
<MC-MAKE ,GL-PRSO ,FL-LOCKED>
<COND (<MC-PRSI? <> ,TH-ROPE>
<RT-CYOU-MSG "tie" "ties">
<TELL "up " THEO "." CR>)
(<NOT <EQUAL? ,TH-ROPE-AUX2 -1>>
<RT-CYOU-MSG "tie" "ties">
<TELL "up " THEO ", but "
THE ,TH-ROPE " is not long enough to tie up " THEI " as well." CR>)
(T
<MC-MAKE ,GL-PRSI ,FL-LOCKED>
<TELL "You tie " THEO " to " THEI "." CR>)>)
(T
<RT-ROPE-MSG>)>)
(T
<TELL "You don't have " A ,TH-ROPE "." CR>)>)>)>>
<ROUTINE RT-AC-RM-NAVE ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-NAVE" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,TH-NEWTON-TOMB ,FL-SEEN>
<TELL
"You enter the Abbey and pause in the Nave, struck by the sheer magnificence
of the building. Massive Purbeck columns march the length of the Nave, and
they rise in perfect proportion to meet each other in a series of pointed
arches that are the hallmark of the Gothic style." CR CR
"The interior of the Abbey is dark, cold, and gloomy - but after a few
moments your eyes adjust and you can make out a tomb at the far end of
the room." CR>
<RTRUE>)
(<EQUAL? .CONTEXT ,K-M-DESC-2 ,K-M-DESC-3>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-2>
<COND (<EQUAL? ,GL-PLACE-PRV ,RM-BROAD-SANCTUARY>
<TELL
"You walk through the massive door and find yourself once again in">)
(T
<TELL "You return to">)>)
(<EQUAL? .CONTEXT ,K-M-DESC-3>
<TELL "You are standing in">)>
<TELL
" the Nave. Amidst the massive columns, one tomb in particular catches your
attention." CR>
<RFALSE>)>)
(<EQUAL? .CONTEXT ,K-M-ENTERED>
<SETG PLAYER-IN-ABBEY T>)
(<AND <EQUAL? .CONTEXT ,K-M-EXIT>
<EQUAL? ,GL-P-WALK-DIR ,P?OUT ,P?WEST>>
<SETG PLAYER-IN-ABBEY <>>)>
<RFALSE>>
<ROUTINE RT-AC-RM-EVANGELIST-CHAPEL ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-EVANGELIST-CHAPEL" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,TH-BANK-OF-CANDLES ,FL-SEEN>
<MC-MAKE ,TH-VERE-TOMB ,FL-SEEN>
<TELL
"You enter the Evangelist Chapel and wonder what it is
about this room that makes you feel it is somehow different from the
rest of the Abbey." CR>)
(<EQUAL? .CONTEXT ,K-M-DESC-2>
<TELL "You return to the welcome warmth provided by
the array of candles in the Evangelist Chapel." CR>)
(T
<TELL "Light! Warmth! There is a bank of candles
here lit by devoted worshippers. The candles warm the room so effectively
that after a few moments you actually become uncomfortable." CR CR
"One of the most unusual tombs in the Abbey is here." CR>)>
<RFALSE>)
(<EQUAL? .CONTEXT ,K-M-BEG>
<RT-PAPER-WARMING ,TH-WHITE-PAPER>
<RT-PAPER-WARMING ,TH-BLUE-PAPER>
<RT-PAPER-WARMING ,TH-ORANGE-PAPER>
<RT-PAPER-WARMING ,TH-YELLOW-PAPER>
<RT-PAPER-WARMING ,TH-BROWN-PAPER>
<RT-PAPER-WARMING ,TH-GREEN-PAPER>
<RFALSE>)>>
<ROUTINE RT-AC-RM-HENRY-VII-CHAPEL ("OPTIONAL" (CONTEXT <>))
<DEBUGGING? <RT-DEBUG-RM-AC "RM-HENRY-VII-CHAPEL" .CONTEXT>>
<COND (<RT-DESCFCN-CONTEXT .CONTEXT>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1>
<MC-MAKE ,TH-HENRY-VII-TOMB ,FL-SEEN>)>
<COND (<EQUAL? .CONTEXT ,K-M-DESC-1 ,K-M-DESC-2>
<TELL "You enter">)
(T
<TELL "You are in">)>
<TELL
" Henry VII's chapel, which is one of the most beautiful chapels
in the world. The ceiling is a masterpiece of delicate fan vaulting, and
the Renaissance gilt-bronze tomb is obviously the work of one of the
Italian masters." CR>
<RFALSE>)
(<MC-VERB? LOOK-UP>
<TELL ,K-BREATH-TAKING-MSG CR>)>>
<ROUTINE RT-EX-ENTER-BANK-OF-ENGLAND ()
<COND (<L? ,CH-BANK-GUARD-AUX1 4>
<TELL
"The guard stops you as you try to enter. \"Excuse me, sir. You can't go
in there. And don't even THINK about trying to bribe me.\"" CR>
<RT-THIS-IS-IT ,CH-BANK-GUARD>
<RFALSE>)
(<IN? ,TH-BOX-KEY ,TH-GUARDS-POCKET>
<TELL
"Holmes takes you to one side and whispers, \"It is obvious, dear fellow, that
it would be pointless to enter the bank with no means of unlocking anything we
may find inside.\"" CR>
<RFALSE>)
(T
<COND (<IN? ,CH-BANK-GUARD ,RM-THREADNEEDLE-ST>
<TELL "As soon as you enter, the guard leaves." CR CR>
<REMOVE ,CH-BANK-GUARD>)>
<RETURN ,RM-BANK-OF-ENGLAND>)>>
<ROUTINE RT-AC-RM-BUCKINGHAM-PALACE ("OPT" (CONTEXT <>))
<COND (<T? .CONTEXT> <RFALSE>)
(<MC-VERB? ENTER>
<COND (<MC-HERE? ,RM-QUEENS-GARDENS>
<RT-DO-WALK ,P?WEST>
<RTRUE>)>)
(<MC-VERB? EXIT>
<COND (<MC-HERE? ,RM-BUCKINGHAM-PALACE>
<RT-DO-WALK ,P?EAST>
<RTRUE>)>)>>
<ROUTINE RT-EX-RM-ENTER-BUCKINGHAM-PALACE ()
<COND (<AND <EQUAL? ,GL-PRSO ,P?WEST ,P?IN>
<MC-HERE? ,RM-QUEENS-GARDENS>>
<TELL CTHE ,CH-PALACE-GUARD
" steps into your path and says, \"I'm sorry, but I've
been instructed to let no one into the Palace unless I receive certain items
of interest to the Crown.\"" CR>
<RFALSE>)>>
<ROUTINE RT-EX-RM-STEER-BOAT ()
<RT-ALARM-CLR ,RT-I-MOVE-DOWNSTREAM>
<TELL
"[To move the boat, ROW or PADDLE in a given direction, or LAND it.]" CR>
<RFALSE>>
<ROUTINE RT-EX-RM-LAND-BOAT ()
<TELL "[Land the Boat.]" CR>
<RT-LAND-BOAT>
<RFALSE>>
<ROUTINE RT-EX-RM-LAUNCH-BOAT ()
<COND (<IN? ,CH-PLAYER ,TH-BOAT>
<TELL "[Launch the Boat.]" CR>
<RT-LAUNCH-BOAT>)
(T
<TELL
"The last man who walked on water was killed by a bunch of Romans. Why
don't you play it safe and use a boat?" CR>)>
<RFALSE>>
<ROUTINE RT-EX-PARLOUR-ENTRY ()
<COND (<MC-IS? ,CH-HOLMES ,FL-ASLEEP>
<TELL CTHE ,CH-HUDSON ,K-HUDSON-WORRIED-MSG CR>
<RFALSE>)
(<MC-ISNOT? ,LG-PARLOUR-DOOR ,FL-OPENED>
<TELL CTHE ,LG-PARLOUR-DOOR " is closed." CR>
<RFALSE>)
(<AND <MC-PRSO? ,P?NORTH ,P?IN>
<MC-HERE? ,RM-ENTRY-HALL>>
<RETURN ,RM-PARLOUR>)>>
<ROUTINE RT-EX-LEAVE-EMBANKMENT ()
<COND (<MC-IS? ,TH-SUIT-OF-ARMOUR ,FL-WORN>
<TELL ,K-HEAVY-ARMOUR-MSG CR>
<RFALSE>)>
<COND (<IN? ,GL-WINNER ,TH-BOAT>
<RT-PERFORM ,V?EXIT ,TH-BOAT>
<COND (<NOT <IN? ,GL-WINNER ,RM-THE-EMBANKMENT>>
<RFALSE>)>)>
<COND (<AND <EQUAL? ,GL-PRSO ,P?NORTH>
<MC-HERE? ,RM-THE-EMBANKMENT>>
<RETURN ,RM-FLEET-STREET>)
(<AND <EQUAL? ,GL-PRSO ,P?EAST>
<MC-HERE? ,RM-THE-EMBANKMENT>>
<RETURN ,RM-UPPER-THAMES-ST>)>>

74
places3.zabstr Normal file
View File

@ -0,0 +1,74 @@
<DEFINE-ROUTINE RT-AC-RM-221B-BAKER-ST>
<DEFINE-ROUTINE RT-AC-RM-ENTRY-HALL>
<DEFINE-ROUTINE RT-AC-RM-PARLOUR>
<DEFINE-ROUTINE RT-AC-RM-VESTIBULE>
<DEFINE-ROUTINE RT-AC-RM-HOLMES-STUDY>
<DEFINE-ROUTINE RT-AC-RM-HOLMES-BEDROOM>
<DEFINE-ROUTINE RT-AC-RM-YORK-PLACE>
<DEFINE-ROUTINE RT-AC-RM-MARYLEBONE-RD>
<DEFINE-ROUTINE RT-AC-RM-CHAMBER-OF-HORRORS>
<DEFINE-ROUTINE RT-AC-RM-TOTTENHAM-COURT-RD>
<DEFINE-ROUTINE RT-AC-RM-ST-GILES-CIRCUS>
<DEFINE-ROUTINE RT-AC-RM-OXFORD-ST>
<DEFINE-ROUTINE RT-AC-RM-ORCHARD-ST>
<DEFINE-ROUTINE RT-AC-RM-AUDLEY-ST>
<DEFINE-ROUTINE RT-AC-RM-HYDE-PARK-CORNER>
<DEFINE-ROUTINE RT-AC-RM-KENSINGTON-GARDENS>
<DEFINE-ROUTINE RT-AC-RM-TRAFALGAR-SQUARE>
<DEFINE-ROUTINE RT-AC-RM-DIOGENES-CLUB>
<DEFINE-ROUTINE RT-AC-RM-GREAT-RUSSELL-ST>
<DEFINE-ROUTINE RT-AC-RM-BRITISH-MUSEUM>
<DEFINE-ROUTINE RT-AC-RM-GROSVENOR-PLACE>
<DEFINE-ROUTINE RT-AC-RM-VICTORIA-SQUARE>
<DEFINE-ROUTINE RT-AC-RM-BROAD-SANCTUARY>
<DEFINE-ROUTINE RT-AC-RM-PARLIAMENT-SQUARE>
<DEFINE-ROUTINE RT-AC-RM-PARLIAMENT>
<DEFINE-ROUTINE RT-AC-RM-BUCKINGHAM-PALACE-RD>
<DEFINE-ROUTINE RT-AC-RM-QUEENS-GARDENS>
<DEFINE-ROUTINE RT-AC-RM-BIRDCAGE-WALK>
<DEFINE-ROUTINE RT-AC-RM-THE-MALL>
<DEFINE-ROUTINE RT-AC-RM-WHITEHALL>
<DEFINE-ROUTINE RT-AC-RM-SCOTLAND-YARD>
<DEFINE-ROUTINE RT-AC-RM-THE-BLACK-MUSEUM>
<DEFINE-ROUTINE RT-AC-RM-NEW-OXFORD-ST>
<DEFINE-ROUTINE RT-AC-RM-COVENT-GARDEN>
<DEFINE-ROUTINE RT-AC-RM-THE-STRAND>
<DEFINE-ROUTINE RT-AC-RM-FLEET-STREET>
<DEFINE-ROUTINE RT-AC-RM-THE-EMBANKMENT>
<DEFINE-ROUTINE RT-AC-RM-UPPER-THAMES-ST>
<DEFINE-ROUTINE RT-AC-RM-PINCHIN-LANE>
<DEFINE-ROUTINE RT-AC-RM-CHEAPSIDE>
<DEFINE-ROUTINE RT-AC-RM-BANK-OF-ENGLAND>
<DEFINE-ROUTINE RT-AC-RM-BANK-VAULT>
<DEFINE-ROUTINE RT-AC-RM-KING-WILLIAM-ST>
<DEFINE-ROUTINE RT-AC-RM-MONUMENT>
<DEFINE-ROUTINE RT-AC-RM-LOWER-THAMES-ST>
<DEFINE-ROUTINE RT-AC-RM-TOWER-ENTRANCE>
<DEFINE-ROUTINE RT-DF-RM-SOUTH-AISLE>
<DEFINE-ROUTINE RT-DF-RM-JERICHO-PARLOUR>
<DEFINE-ROUTINE RT-DF-RM-JERUSALEM-CHAMBER>
<DEFINE-ROUTINE RT-DF-RM-NORTH-CLOISTER>
<DEFINE-ROUTINE RT-DF-RM-SOUTH-TRANSEPT>
<DEFINE-ROUTINE RT-DF-RM-NORTH-TRANSEPT>
<DEFINE-ROUTINE RT-DF-RM-POETS-CORNER>
<DEFINE-ROUTINE RT-DF-RM-SOUTH-AMBULATORY>
<DEFINE-ROUTINE RT-DF-RM-SANCTUARY>
<DEFINE-ROUTINE RT-DF-RM-NORTH-AMBULATORY>
<DEFINE-ROUTINE RT-DF-RM-CONFESSOR-CHAPEL>
<DEFINE-ROUTINE RT-DF-RM-SOUTH-CHAPEL-AISLE>
<DEFINE-ROUTINE RT-DF-RM-NORTH-CHAPEL-AISLE>
<DEFINE-ROUTINE RT-DF-RM-INNOCENTS-CORNER>
<DEFINE-ROUTINE RT-AC-RM-DRAWBRIDGE>
<DEFINE-ROUTINE RT-DF-RM-BYWARD-TOWER>
<DEFINE-ROUTINE RT-DF-RM-OUTER-WARD>
<DEFINE-ROUTINE RT-DF-RM-BLOODY-TOWER>
<DEFINE-ROUTINE RT-DF-RM-WAKEFIELD-TOWER>
<DEFINE-ROUTINE RT-DF-RM-JEWEL-ROOM>
<DEFINE-ROUTINE RT-DF-RM-DUNGEON>
<DEFINE-ROUTINE RT-DF-RM-TORTURE-ROOM>
<DEFINE-ROUTINE RT-DF-RM-WHITE-TOWER>
<DEFINE-ROUTINE RT-DF-RM-TOWER-GREEN>
<DEFINE-ROUTINE RT-DF-RM-BOWYER-TOWER>
<DEFINE-ROUTINE RT-DF-RM-INSIDE-TRAITORS-GATE>
<DEFINE-ROUTINE RT-DF-RM-OUTSIDE-TRAITORS-GATE>

1704
places3.zap Normal file

File diff suppressed because it is too large Load Diff

1733
places3.zil Normal file

File diff suppressed because it is too large Load Diff

75
puzzles.zabstr Normal file
View File

@ -0,0 +1,75 @@
<DEFINE-ROUTINE RT-EXAMINE-GEM>
<DEFINE-ROUTINE RT-HANDLE-SCRATCH>
<CONSTANT GL-HOLES:TABLE <TABLE 0 0 0 0 0 0 0 0 0 0 0 0 0>>
<DEFINE-ROUTINE RT-HOLE?>
<DEFINE-ROUTINE RT-WASTE-OF-BULLETS-MSG>
<DEFINE-ROUTINE RT-SHOOT-DEAD-MSG>
<DEFINE-ROUTINE RT-READ-NEWSPAPER>
<DEFINE-ROUTINE RT-WAKE-UP-HOLMES>
<DEFINE-ROUTINE RT-I-PM-HALL>
<DEFINE-ROUTINE RT-I-PM-VESTIBULE>
<DEFINE-ROUTINE RT-I-HUDSON>
<DEFINE-ROUTINE RT-I-PM-LEAVE>
<DEFINE-ROUTINE RT-I-PM-QUITS>
<CONSTANT K-PIGEON-SHOWN-RUBY 1>
<CONSTANT K-PIGEON-GET-RUBY 2>
<CONSTANT K-PIGEON-TIRED 4>
<DEFINE-ROUTINE RT-GET-PIGEON>
<DEFINE-ROUTINE RT-PIGEON-INTEREST>
<DEFINE-ROUTINE RT-KILL-PIGEON>
<DEFINE-ROUTINE RT-PIGEON-OBJ>
<DEFINE-ROUTINE RT-SHERMAN-RAGE>
<DEFINE-ROUTINE RT-I-PIGEON-LOSE-INTEREST>
<DEFINE-ROUTINE RT-I-PIGEON-IMPATIENT>
<DEFINE-ROUTINE RT-I-PIGEON-CIRCLE>
<DEFINE-ROUTINE RT-I-SHERMANS-REVENGE>
<DEFINE-ROUTINE RT-IMPOLITE-MSG>
<CONSTANT K-BELL-AWAY 0>
<CONSTANT K-BELL-TOWARDS 1>
<GLOBAL GL-WAIT-BELL:FLAG <> %<> WORD>
<DEFINE-ROUTINE RT-I-BIGBEN>
<GLOBAL HEARD-SWING? <> %<> WORD>
<DEFINE-ROUTINE RT-I-SWING-BELL>
<DEFINE-ROUTINE RT-RELIEF>
<DEFINE-ROUTINE RT-ZERO-SECONDS>
<DEFINE-ROUTINE RT-I-EXHALE>
<DEFINE-ROUTINE RT-I-INHALE>
<DEFINE-ROUTINE RT-I-TAKE-WATSONS-STUFF>
<DEFINE-ROUTINE RT-I-OUT-OF-TIME>
<DEFINE-ROUTINE RT-ETHERIUM-EFFECT>
<DEFINE-ROUTINE RT-I-WAKE-UP>
<DEFINE-ROUTINE RT-SMELL-ETHERIUM?>
<DEFINE-ROUTINE RT-FIND-FLAME>
<DEFINE-ROUTINE RT-DOES-MORIARTY-WIN>
<DEFINE-ROUTINE RT-PROCESS-PASSWORD>
<DEFINE-ROUTINE V-SWORDFISH>
<DEFINE-ROUTINE RT-ROPE-MSG>
<DEFINE-ROUTINE RT-INSCRIPTION-APPEARS-MSG>
<DEFINE-ROUTINE RT-PROCESS-TOMB>
<DEFINE-ROUTINE RT-READ-INSCRIPTION>
<DEFINE-ROUTINE RT-READ-PAPER>
<DEFINE-ROUTINE RT-PROCESS-PAPER>
<DEFINE-ROUTINE RT-PAPER-WARMING>
<DEFINE-ROUTINE RT-I-FLASH-WESTMINSTER-LIGHTS>
<DEFINE-ROUTINE RT-I-WESTMINSTER-LIGHTS-ON>
<DEFINE-ROUTINE RT-I-WESTMINSTER-LIGHTS-OFF>
<DEFINE-ROUTINE RT-I-LOCKED-IN-END-GAME>
<DEFINE-ROUTINE RT-I-OPEN-WESTMINSTER-DOOR>
<DEFINE-ROUTINE RT-I-CLOSE-WESTMINSTER-DOOR>
<DEFINE-ROUTINE RT-CF-TH-BOAT>
<DEFINE-ROUTINE RT-PROCESS-BOAT-ON-THAMES>
<DEFINE-ROUTINE RT-I-MOVE-DOWNSTREAM>
<DEFINE-ROUTINE RT-MOVE-UPSTREAM>
<DEFINE-ROUTINE RT-THAMES-TIDE>
<DEFINE-ROUTINE RT-TOWER-PASSWORD>
<DEFINE-ROUTINE V-BOLEYN>
<DEFINE-ROUTINE V-CLEVES>
<DEFINE-ROUTINE V-HOWARD>
<DEFINE-ROUTINE V-PARR>
<DEFINE-ROUTINE V-ARAGON>
<DEFINE-ROUTINE V-SEYMOUR>
<DEFINE-ROUTINE RT-I-OPEN-MUSEUM-DOOR>
<DEFINE-ROUTINE RT-I-CLOSE-MUSEUM-DOOR>
<DEFINE-ROUTINE RT-INDENT-PRINT>
<DEFINE-ROUTINE RT-WRAP-PRINT>

1800
puzzles.zap Normal file

File diff suppressed because it is too large Load Diff

1663
puzzles.zil Normal file

File diff suppressed because it is too large Load Diff

BIN
s10.nam Normal file

Binary file not shown.

BIN
s11.nam Normal file

Binary file not shown.

BIN
s12.nam Normal file

Binary file not shown.

BIN
s13.nam Normal file

Binary file not shown.

BIN
s14.nam Normal file

Binary file not shown.

BIN
s15.nam Normal file

Binary file not shown.

BIN
s16.nam Normal file

Binary file not shown.

BIN
s17.nam Normal file

Binary file not shown.

BIN
s3.nam Normal file

Binary file not shown.

BIN
s4.nam Normal file

Binary file not shown.

BIN
s5.nam Normal file

Binary file not shown.

BIN
s6.nam Normal file

Binary file not shown.

BIN
s7.nam Normal file

Binary file not shown.

BIN
s8.nam Normal file

Binary file not shown.

BIN
s9.nam Normal file

Binary file not shown.

39
sched.zabstr Normal file
View File

@ -0,0 +1,39 @@
<CONSTANT K-SEC 0>
<CONSTANT K-MIN 1>
<CONSTANT K-HRS 2>
<CONSTANT K-DAY 3>
<CONSTANT K-DOW-BASE 12>
<CONSTANT K-A-RSIZE 30>
<CONSTANT K-A-TWDTH 4>
<CONSTANT K-A-TSIZE <* ,K-A-TWDTH 30>>
<GLOBAL GL-CLOCK-WAIT:FLAG <> %<> WORD>
<GLOBAL GL-CLOCK-STOP:FLAG <> %<> WORD>
<CONSTANT GL-TIME:TABLE <TABLE (BYTE) 0 0 0 0>>
<CONSTANT GL-TEMP-TIME:TABLE <ITABLE ,K-A-TWDTH (BYTE) 0>>
<CONSTANT GL-TIME-PARM:TABLE <ITABLE ,K-A-TWDTH (BYTE) 0>>
<CONSTANT GL-TIME-UPDT-INC:TABLE <TABLE (BYTE) 0 0 0 0>>
<CONSTANT GL-TIME-UPDT-DEF:TABLE <TABLE (BYTE) 0 0 0 0>>
<CONSTANT GL-DAY-NAME:TABLE <PTABLE "Sunday" "Monday" "Tuesday" "Wednesday"
"Thursday" "Friday" "Saturday" "Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"
"Sunday " "Monday " "Tuesday " "Wednesday" "Thursday " "Friday "
"Saturday ">>
<GLOBAL GL-ALARM-WAIT:FLAG <> %<> WORD>
<GLOBAL GL-ALARM-STOP:FLAG <> %<> WORD>
<GLOBAL GL-ALARM-EXEC:FLAG <> %<> WORD>
<CONSTANT GL-A-ROUT:TABLE <ITABLE ,K-A-RSIZE 0>>
<CONSTANT GL-A-TIME:TABLE <ITABLE ,K-A-TSIZE (BYTE) 0>>
<DEFINE-ROUTINE RT-COPY-TIME>
<DEFINE-ROUTINE RT-NORM-TIME>
<DEFINE-ROUTINE RT-DO-CLOCK-SET>
<DEFINE-ROUTINE RT-CLOCK-INC>
<DEFINE-ROUTINE RT-CLOCK-CMP>
<DEFINE-ROUTINE RT-CLOCK-JMP>
<DEFINE-ROUTINE RT-CLK-NTI-MSG>
<DEFINE-ROUTINE RT-CLK-DOW-MSG>
<DEFINE-ROUTINE RT-ALARM-SET?>
<DEFINE-ROUTINE RT-ALARM-SET-REL>
<DEFINE-ROUTINE RT-ALARM-SET-ABS>
<DEFINE-ROUTINE RT-ALARM-CLR>
<GLOBAL RUN-SMELL-ETHERIUM? <> %<> WORD>
<DEFINE-ROUTINE RT-ALARM-CHK>

324
sched.zap Normal file
View File

@ -0,0 +1,324 @@
.FUNCT RT-COPY-TIME,TBL1,TBL2
COPYT TBL1,TBL2,K-A-TWDTH
RTRUE
.FUNCT RT-NORM-TIME,TIME-TABLE,TEMP,M-LEN,?TMP1
GETB TIME-TABLE,K-SEC >TEMP
MOD TEMP,60
PUTB TIME-TABLE,K-SEC,STACK
GETB TIME-TABLE,K-MIN >?TMP1
DIV TEMP,60
ADD ?TMP1,STACK >TEMP
MOD TEMP,60
PUTB TIME-TABLE,K-MIN,STACK
GETB TIME-TABLE,K-HRS >?TMP1
DIV TEMP,60
ADD ?TMP1,STACK >TEMP
MOD TEMP,24
PUTB TIME-TABLE,K-HRS,STACK
GETB TIME-TABLE,K-DAY >?TMP1
DIV TEMP,24 >TEMP
ADD ?TMP1,TEMP
PUTB TIME-TABLE,K-DAY,STACK
RTRUE
.FUNCT RT-DO-CLOCK-SET,TBL,HRS,MIN,SEC,DAY
PUTB TBL,K-SEC,SEC
PUTB TBL,K-MIN,MIN
PUTB TBL,K-HRS,HRS
PUTB TBL,K-DAY,DAY
RETURN TBL
.FUNCT RT-CLOCK-INC,N,?TMP1
ZERO? GL-CLOCK-WAIT /?CCL3
SET 'GL-CLOCK-WAIT,FALSE-VALUE
RFALSE
?CCL3: ZERO? GL-CLOCK-STOP \FALSE
?PRG5: GETB GL-TIME,N >?TMP1
GETB GL-TIME-UPDT-INC,N
ADD ?TMP1,STACK
PUTB GL-TIME,N,STACK
IGRTR? 'N,3 \?PRG5
COPYT GL-TIME-UPDT-DEF,GL-TIME-UPDT-INC,K-A-TWDTH
CALL2 RT-NORM-TIME,GL-TIME
RSTACK
.FUNCT RT-CLOCK-CMP,HRS,MIN,SEC,DAY,TMP
ZERO? DAY /?CND1
GETB GL-TIME,K-DAY >TMP
GRTR? DAY,TMP /TRUE
LESS? DAY,TMP \?CND1
RETURN -1
?CND1: GETB GL-TIME,K-HRS >TMP
GRTR? HRS,TMP /TRUE
LESS? HRS,TMP \?CCL11
RETURN -1
?CCL11: GETB GL-TIME,K-MIN >TMP
GRTR? MIN,TMP /TRUE
LESS? MIN,TMP \?CCL15
RETURN -1
?CCL15: GETB GL-TIME,K-SEC >TMP
GRTR? SEC,TMP /TRUE
LESS? SEC,TMP \FALSE
RETURN -1
.FUNCT RT-CLOCK-JMP,HRS,MIN,SEC,DAY
ICALL RT-DO-CLOCK-SET,GL-TIME-UPDT-INC,HRS,MIN,SEC,DAY
ICALL1 RT-CLOCK-INC
EQUAL? GL-PRSA,V?WAIT,V?WAIT-FOR \?CCL3
PUSH 2
JUMP ?CND1
?CCL3: PUSH 1
?CND1: ICALL2 RT-ALARM-CHK,STACK
SET 'GL-CLOCK-WAIT,TRUE-VALUE
RETURN GL-CLOCK-WAIT
.FUNCT RT-CLK-NTI-MSG,FMT,HRS,MIN,SEC,MSD,MER,AM-PM?
ASSIGNED? 'FMT /?CND1
SET 'FMT,7
?CND1: GETB GL-TIME,K-HRS >HRS
GETB GL-TIME,K-MIN >MIN
GETB GL-TIME,K-SEC >SEC
BTST FMT,4 \?CND3
BTST FMT,8 \?CCL7
SET 'MSD,STR?217
JUMP ?CND5
?CCL7: ZERO? HRS \?CCL9
ADD HRS,12 >HRS
SET 'MSD,STR?218
SET 'AM-PM?,1
JUMP ?CND5
?CCL9: LESS? HRS,12 \?CCL11
SET 'MSD,STR?218
SET 'AM-PM?,1
JUMP ?CND5
?CCL11: EQUAL? HRS,12 \?CCL13
SET 'MSD,STR?218
SET 'AM-PM?,2
JUMP ?CND5
?CCL13: SUB HRS,12 >HRS
SET 'MSD,STR?218
SET 'AM-PM?,2
?CND5: EQUAL? AM-PM?,1 \?CCL16
BTST FMT,16 \?CCL19
SET 'MER,STR?219
JUMP ?CND14
?CCL19: SET 'MER,STR?220
JUMP ?CND14
?CCL16: EQUAL? AM-PM?,2 \?CCL21
BTST FMT,16 \?CCL24
SET 'MER,STR?221
JUMP ?CND14
?CCL24: SET 'MER,STR?222
JUMP ?CND14
?CCL21: SET 'MER,STR?218
?CND14: LESS? HRS,10 \?CND25
PRINT MSD
?CND25: PRINTN HRS
?CND3: BTST FMT,2 \?CND27
BTST FMT,4 \?CND29
PRINTC 58
?CND29: LESS? MIN,10 \?CND31
PRINTC 48
?CND31: PRINTN MIN
?CND27: BTST FMT,1 \?CND33
BTST FMT,4 /?CCL36
BTST FMT,2 \?CND35
?CCL36: PRINTC 58
?CND35: LESS? SEC,10 \?CND39
PRINTC 48
?CND39: PRINTN SEC
?CND33: BTST FMT,4 \FALSE
PRINT MER
RTRUE
.FUNCT RT-CLK-DOW-MSG,FMT,DOW,WDOW
ASSIGNED? 'FMT /?CND1
SET 'FMT,1
?CND1: GETB GL-TIME,K-DAY
SUB STACK,K-DOW-BASE
MOD STACK,7 >DOW
BTST FMT,1 \FALSE
BTST FMT,4 \?CCL8
ADD DOW,14
GET GL-DAY-NAME,STACK >WDOW
JUMP ?CND6
?CCL8: BTST FMT,2 \?CCL10
ADD DOW,7
GET GL-DAY-NAME,STACK >WDOW
JUMP ?CND6
?CCL10: GET GL-DAY-NAME,DOW >WDOW
?CND6: PRINT WDOW
RTRUE
.FUNCT RT-ALARM-SET?,RTN,R-PTR,T-PTR
?PRG1: EQUAL? R-PTR,K-A-RSIZE /FALSE
GET GL-A-ROUT,R-PTR
EQUAL? RTN,STACK \?CCL7
MUL R-PTR,K-A-TWDTH >T-PTR
ADD GL-A-TIME,T-PTR
ICALL RT-COPY-TIME,STACK,GL-TIME-PARM
RTRUE
?CCL7: INC 'R-PTR
JUMP ?PRG1
.FUNCT RT-ALARM-SET-REL,RTN,TIME,R-PTR,T-PTR,N,?TMP3,?TMP2,?TMP1
?PRG1: EQUAL? R-PTR,K-A-RSIZE \?CND3
CRLF
PRINTI "*** TOO MANY ALARMS (REL) ***"
CRLF
CRLF
RFALSE
?CND3: GET GL-A-ROUT,R-PTR
ZERO? STACK \?CCL7
PUT GL-A-ROUT,R-PTR,RTN
MUL R-PTR,K-A-TWDTH >T-PTR
ZERO? GL-ALARM-EXEC /?CCL10
SET 'N,0
?PRG11: ADD T-PTR,N >?TMP1
GETB GL-TIME,N >?TMP2
GETB TIME,N
ADD ?TMP2,STACK
PUTB GL-A-TIME,?TMP1,STACK
IGRTR? 'N,3 /?CND8
JUMP ?PRG11
?CCL10: SET 'N,0
?PRG15: ADD T-PTR,N >?TMP1
GETB GL-TIME,N >?TMP3
GETB TIME,N
ADD ?TMP3,STACK >?TMP2
GETB GL-TIME-UPDT-INC,N
ADD ?TMP2,STACK
PUTB GL-A-TIME,?TMP1,STACK
IGRTR? 'N,3 \?PRG15
?CND8: ADD GL-A-TIME,T-PTR
ICALL2 RT-NORM-TIME,STACK
RTRUE
?CCL7: INC 'R-PTR
JUMP ?PRG1
.FUNCT RT-ALARM-SET-ABS,RTN,TIME,R-PTR,T-PTR
?PRG1: EQUAL? R-PTR,K-A-RSIZE \?CND3
CRLF
PRINTI "*** TOO MANY (ABS) ALARMS ***"
CRLF
CRLF
RFALSE
?CND3: GET GL-A-ROUT,R-PTR
ZERO? STACK \?CCL7
PUT GL-A-ROUT,R-PTR,RTN
MUL R-PTR,K-A-TWDTH >T-PTR
ADD GL-A-TIME,T-PTR
COPYT TIME,STACK,K-A-TWDTH
RTRUE
?CCL7: INC 'R-PTR
JUMP ?PRG1
.FUNCT RT-ALARM-CLR,RTN,R-PTR,T-PTR
?PRG1: EQUAL? R-PTR,K-A-RSIZE /FALSE
GET GL-A-ROUT,R-PTR
EQUAL? RTN,STACK \?CND3
PUT GL-A-ROUT,R-PTR,0
MUL R-PTR,K-A-TWDTH >T-PTR
ADD GL-A-TIME,T-PTR
COPYT STACK,0,K-A-TWDTH
?CND3: INC 'R-PTR
JUMP ?PRG1
.FUNCT RT-ALARM-CHK,PARM,VAL,RTN,R-PTR,R-CNT,T-PTR,HRS,MIN,SEC,DAY,T-TIME
SET 'RTN,-1
SET 'RUN-SMELL-ETHERIUM?,FALSE-VALUE
ZERO? GL-ALARM-WAIT /?CCL3
SET 'GL-ALARM-WAIT,FALSE-VALUE
RFALSE
?CCL3: GET GLOBAL-VARS-TABLE,0
ZERO? STACK \FALSE
ICALL RT-COPY-TIME,GL-TIME,GL-TEMP-TIME
?PRG5: EQUAL? R-PTR,K-A-RSIZE \?CND7
EQUAL? RTN,-1 \?CCL11
ZERO? RUN-SMELL-ETHERIUM? \?REP6
RETURN R-CNT
?CCL11: SET 'R-PTR,RTN
GET GL-A-ROUT,R-PTR >RTN
MUL R-PTR,K-A-TWDTH >T-PTR
PUT GL-A-ROUT,R-PTR,0
ADD GL-A-TIME,T-PTR >T-TIME
GETB T-TIME,K-SEC >SEC
GETB T-TIME,K-MIN >MIN
GETB T-TIME,K-HRS >HRS
GETB T-TIME,K-DAY >DAY
COPYT T-TIME,0,K-A-TWDTH
FSET? CH-PLAYER,FL-ASLEEP /?CND14
ICALL1 RT-UPDATE-STATUS-LINE
?CND14: SET 'GL-ALARM-EXEC,TRUE-VALUE
CALL RTN >VAL
ZERO? RUN-SMELL-ETHERIUM? \?REP6
SET 'GL-ALARM-EXEC,FALSE-VALUE
ICALL RT-COPY-TIME,GL-TEMP-TIME,GL-TIME
INC 'R-CNT
ZERO? VAL /?CND18
CALL RT-CLOCK-CMP,HRS,MIN,SEC,DAY
EQUAL? STACK,-1 \?CND18
EQUAL? PARM,1 \?CCL24
PRINTI "[Press any key to continue.]"
CRLF
INPUT 1
JUMP ?CND18
?CCL24: EQUAL? PARM,2 \?CND18
?PRG26: CRLF
PRINTI "Do you want to continue waiting?"
CRLF
PRINTI "Please press Y or N > "
INPUT 1 >VAL
PRINTC VAL
CRLF
EQUAL? VAL,78,110 \?CCL30
SET 'RTN,-1
SET 'R-PTR,K-A-RSIZE
ICALL RT-DO-CLOCK-SET,GL-TIME,HRS,MIN,SEC,DAY
JUMP ?CND18
?CCL30: EQUAL? VAL,89,121 \?PRG26
?CND18: EQUAL? RTN,-1 /?PRG5
SET 'RTN,-1
SET 'R-PTR,0
JUMP ?PRG5
?CND7: GET GL-A-ROUT,R-PTR
ZERO? STACK /?CND34
MUL R-PTR,K-A-TWDTH >T-PTR
ADD T-PTR,K-SEC
GETB GL-A-TIME,STACK >SEC
ADD T-PTR,K-MIN
GETB GL-A-TIME,STACK >MIN
ADD T-PTR,K-HRS
GETB GL-A-TIME,STACK >HRS
ADD T-PTR,K-DAY
GETB GL-A-TIME,STACK >DAY
ZERO? PARM /?PRD39
CALL RT-CLOCK-CMP,HRS,MIN,SEC,DAY
EQUAL? STACK,-1 /?CCL37
?PRD39: ZERO? PARM \?CND34
CALL RT-CLOCK-CMP,HRS,MIN,SEC,DAY
EQUAL? STACK,-1,0 \?CND34
?CCL37: ICALL RT-DO-CLOCK-SET,GL-TIME,HRS,MIN,SEC,DAY
SET 'RTN,R-PTR
?CND34: INC 'R-PTR
JUMP ?PRG5
?REP6: ZERO? RUN-SMELL-ETHERIUM? /FALSE
ICALL1 RT-SMELL-ETHERIUM?
RETURN R-CNT
.ENDI

447
sched.zil Normal file
View File

@ -0,0 +1,447 @@
; "clock constants"
; "offsets into time tables"
<CONSTANT K-SEC 0> ; "sec"
<CONSTANT K-MIN 1> ; "min"
<CONSTANT K-HRS 2> ; "hrs"
<CONSTANT K-DAY 3> ; "day"
<CONSTANT K-DOW-BASE 12> ; "Known to be Sunday (dow = 0)"
; "alarm constants"
<CONSTANT K-A-RSIZE 30> ; "size of alarm routine table in words"
<CONSTANT K-A-TWDTH 4> ; "size of alarm time table entry in bytes"
<CONSTANT K-A-TSIZE <* ,K-A-TWDTH 30>> ; "size of alarm time table in bytes"
; "event constants"
; "clock globals"
<GLOBAL GL-CLOCK-WAIT:FLAG <>> ; "flag to inhibit clock update"
<GLOBAL GL-CLOCK-STOP:FLAG <>> ; "flag to stop clock update"
<CONSTANT GL-TIME:TABLE ; "pri game time table"
<TABLE (BYTE)
0 ; "sec 00-59"
0 ; "min 00-59"
0 ; "hrs 00-23"
0 ; "day 01-31">>
<CONSTANT GL-TEMP-TIME:TABLE <ITABLE ,K-A-TWDTH (BYTE) 0>>
; "table to hold time temporarily"
<CONSTANT GL-TIME-PARM:TABLE <ITABLE ,K-A-TWDTH (BYTE) 0>>
; "Parameter table to all time routines"
<CONSTANT GL-TIME-UPDT-INC:TABLE ; "next time inc is kept here"
<TABLE (BYTE)
0 ; "sec"
0 ; "min"
0 ; "hrs"
0 ; "day">>
<CONSTANT GL-TIME-UPDT-DEF:TABLE ; "default time inc is kept here"
<TABLE (BYTE)
0 ; "sec"
0 ; "min"
0 ; "hrs"
0 ; "day">>
<CONSTANT GL-DAY-NAME:TABLE ; "long and short day names"
<PTABLE
"Sunday" ; "offset of 0"
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
"Saturday"
"Sun" ; "offset of 7"
"Mon"
"Tue"
"Wed"
"Thu"
"Fri"
"Sat"
"Sunday " ; "offset of 14"
"Monday "
"Tuesday "
"Wednesday"
"Thursday "
"Friday "
"Saturday "
>
>
; "alarm globals"
<GLOBAL GL-ALARM-WAIT:FLAG <>> ; "flag to inhibit alarm check"
<GLOBAL GL-ALARM-STOP:FLAG <>> ; "flag to stop alarm check"
<GLOBAL GL-ALARM-EXEC:FLAG <>> ; "flag to show an alarm is executing"
<CONSTANT GL-A-ROUT:TABLE <ITABLE ,K-A-RSIZE 0>> ; "table of routines"
<CONSTANT GL-A-TIME:TABLE <ITABLE ,K-A-TSIZE (BYTE) 0>>
; "table of times (6 words)"
; "event globals"
; "support routines use by clock/event/alarm"
; "RT-COPY-TIME"
; "Copy time table 1 to time table 2"
<ROUTINE RT-COPY-TIME (TBL1 TBL2)
<COPYT .TBL1 .TBL2 ,K-A-TWDTH>>
; "RT-NORM-TIME"
<ROUTINE RT-NORM-TIME (TIME-TABLE "AUX" TEMP M-LEN)
; "normalize seconds"
<SET TEMP <GETB .TIME-TABLE ,K-SEC>>
<PUTB .TIME-TABLE ,K-SEC <MOD .TEMP 60>>
; "This is the new minutes value"
<SET TEMP <+ <GETB .TIME-TABLE ,K-MIN> </ .TEMP 60>>>
; "normalize minutes"
<PUTB .TIME-TABLE ,K-MIN <MOD .TEMP 60>>
<SET TEMP <+ <GETB .TIME-TABLE ,K-HRS> </ .TEMP 60>>>
; "normalize hours"
<PUTB .TIME-TABLE ,K-HRS <MOD .TEMP 24>>
; "Update day of month"
<PUTB .TIME-TABLE ,K-DAY <+ <GETB .TIME-TABLE ,K-DAY>
<SET TEMP </ .TEMP 24>>>>
; "normalize day, month, and year (including leap years)"
; "Given that the game takes place in the middle of June in 1887,
this is a complete waste of time..."
;<REPEAT ()
<SET M-LEN <GETB ,GL-MONTH-LEN <GETB .TIME-TABLE ,K-MON>>>
<COND (<NOT <EQUAL? <GETB .TIME-TABLE ,K-MON> 2>>
T)
(<ZERO? <MOD <GETB .TIME-TABLE ,K-YRS> 100>>
T)
(<ZERO? <MOD <GETB .TIME-TABLE ,K-YRS> 4>>
<INC M-LEN>)>
<SET TEMP <GETB .TIME-TABLE ,K-DAY>>
<COND (<G? .TEMP .M-LEN>
<PUTB .TIME-TABLE ,K-DAY <- .TEMP .M-LEN>>
<PUTB .TIME-TABLE ,K-MON <+ <GETB .TIME-TABLE ,K-MON> 1>>
<SET TEMP <GETB .TIME-TABLE ,K-MON>>
<COND (<G? .TEMP 12>
<PUTB .TIME-TABLE ,K-MON <- .TEMP 12>>
<PUTB .TIME-TABLE ,K-YRS
<+ <GETB .TIME-TABLE ,K-YRS> 1>>)>)
(T <RETURN>)>>>
; "clock routines"
; "RT-CLOCK-INC-SET. Made a macro that calls RT-DO-CLOCK-SET"
<ROUTINE RT-DO-CLOCK-SET (TBL HRS MIN SEC
"OPTIONAL" (DAY 0))
<PUTB .TBL ,K-SEC .SEC>
<PUTB .TBL ,K-MIN .MIN>
<PUTB .TBL ,K-HRS .HRS>
<PUTB .TBL ,K-DAY .DAY>
.TBL>
; "RT-CLOCK-DEF-SET. Moved to MACROS"
; "RT-CLOCK-SET. MOVED TO MACROS"
; "RT-CLOCK-INC"
<ROUTINE RT-CLOCK-INC ()
<COND (<MC-T? ,GL-CLOCK-WAIT>
<SETG GL-CLOCK-WAIT <>>
<RFALSE>)
(<MC-T? ,GL-CLOCK-STOP>
<RFALSE>)>
; "add gl-time-updt-inc to gl-time"
<REPEAT ((N 0))
<PUTB ,GL-TIME .N
<+ <GETB ,GL-TIME .N>
<GETB ,GL-TIME-UPDT-INC .N>>>
<COND (<G? <SET N <+ .N 1>>
<- ,K-A-TWDTH 1>> <RETURN>)>>
; "copy gl-time-updt-def into gl-time-updt-inc"
<COPYT ,GL-TIME-UPDT-DEF ,GL-TIME-UPDT-INC ,K-A-TWDTH>
; "normalize the time in gl-time"
<RT-NORM-TIME ,GL-TIME>>
; "RT-PARM-SET MOVED TO MACROS"
; "RT-CLOCK-CMP"
; "Returns -1 if arg time < current time."
; "Returns 0 if arg time = current time."
; "Returns 1 if arg time > current time."
<ROUTINE RT-CLOCK-CMP (HRS MIN SEC "OPTIONAL" (DAY 0)
"AUX" TMP)
<COND (<ZERO? .DAY>
T)
(<G? .DAY <SET TMP <GETB ,GL-TIME ,K-DAY>>>
<RETURN 1>)
(<L? .DAY .TMP>
<RETURN -1>)>
<COND (<G? .HRS <SET TMP <GETB ,GL-TIME ,K-HRS>>>
<RETURN 1>)
(<L? .HRS .TMP>
<RETURN -1>)
(<G? .MIN <SET TMP <GETB ,GL-TIME ,K-MIN>>>
<RETURN 1>)
(<L? .MIN .TMP>
<RETURN -1>)
(<G? .SEC <SET TMP <GETB ,GL-TIME ,K-SEC>>>
<RETURN 1>)
(<L? .SEC .TMP>
<RETURN -1>)
(T
<RETURN 0>)>>
; "RT-CLOCK-JMP"
<ROUTINE RT-CLOCK-JMP (HRS MIN SEC "OPTIONAL" (DAY 0))
<RT-CLOCK-INC-SET .HRS .MIN .SEC .DAY>
<RT-CLOCK-INC>
<RT-ALARM-CHK
<COND (<MC-VERB? WAIT WAIT-FOR>
2)
(T 1)>>
<SETG GL-CLOCK-WAIT T>>
; "RT-CLK-NTI-MSG"
<ROUTINE RT-CLK-NTI-MSG ("OPTIONAL" (FMT 7) "AUX" HRS MIN SEC MSD MER
(AM-PM? 0))
<SET HRS <GETB ,GL-TIME ,K-HRS>>
<SET MIN <GETB ,GL-TIME ,K-MIN>>
<SET SEC <GETB ,GL-TIME ,K-SEC>>
<COND (<BAND .FMT ,K-NTI-HH>
<COND (<BAND .FMT ,K-NTI-MT>
<SET MSD "0">)
(<EQUAL? .HRS 0>
<SET HRS <+ .HRS 12>>
<SET MSD " ">
<SET AM-PM? 1>)
(<L? .HRS 12>
<SET MSD " ">
<SET AM-PM? 1>)
(<EQUAL? .HRS 12>
<SET MSD " ">
<SET AM-PM? 2>)
(T
<SET HRS <- .HRS 12>>
<SET MSD " ">
<SET AM-PM? 2>)>
<COND (<==? .AM-PM? 1>
<COND (<BAND .FMT ,K-NTI-SM>
<SET MER " AM">)
(T
<SET MER " a.m.">)>)
(<==? .AM-PM? 2>
<COND (<BAND .FMT ,K-NTI-SM>
<SET MER " PM">)
(T
<SET MER " p.m.">)>)
(T
<SET MER " ">)>
<COND (<L? .HRS 10>
<TELL .MSD>)>
<TELL N .HRS>)>
<COND (<BAND .FMT ,K-NTI-MM>
<COND (<BAND .FMT ,K-NTI-HH>
<TELL ":">)>
<COND (<L? .MIN 10>
<TELL "0">)>
<TELL N .MIN>)>
<COND (<BAND .FMT ,K-NTI-SS>
<COND (<OR <BAND .FMT ,K-NTI-HH>
<BAND .FMT ,K-NTI-MM>>
<TELL ":">)>
<COND (<L? .SEC 10>
<TELL "0">)>
<TELL N .SEC>)>
<COND (<BAND .FMT ,K-NTI-HH>
<TELL .MER>)>>
; "RT-CLK-DOW-MSG"
<ROUTINE RT-CLK-DOW-MSG ("OPTIONAL" (FMT 1) "AUX" DOW WDOW)
<SET DOW <MOD <- <GETB ,GL-TIME ,K-DAY> ,K-DOW-BASE> 7>>
<COND (<BAND .FMT ,K-DOW-DW>
<COND (<BAND .FMT ,K-DOW-EN>
<SET WDOW <GET ,GL-DAY-NAME <+ .DOW 14>>>)
(<BAND .FMT ,K-DOW-SN>
<SET WDOW <GET ,GL-DAY-NAME <+ .DOW 7>>>)
(T
<SET WDOW <GET ,GL-DAY-NAME .DOW>>)>
<TELL .WDOW>)>>
; "alarm routines"
; "RT-ALARM-SET?"
<ROUTINE RT-ALARM-SET? (RTN "AUX" (R-PTR 0) T-PTR)
<REPEAT ()
<COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<RFALSE>)
(<EQUAL? .RTN <GET ,GL-A-ROUT .R-PTR>>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<RT-COPY-TIME <REST ,GL-A-TIME .T-PTR> ,GL-TIME-PARM>
<RTRUE>)
(T
<INC R-PTR>)>>>
; "RT-ALARM-SET-REL"
<ROUTINE RT-ALARM-SET-REL (RTN TIME "AUX" (R-PTR 0) T-PTR)
<REPEAT ()
<COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<TELL CR "*** TOO MANY ALARMS (REL) ***" CR CR>
<RFALSE>)>
;<DEBUGGING? <COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<TELL CR "*** TOO MANY ALARMS (REL) ***" CR CR>
<RFALSE>)>>
<COND (<ZERO? <GET ,GL-A-ROUT .R-PTR>>
<PUT ,GL-A-ROUT .R-PTR .RTN>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<COND (<MC-T? ,GL-ALARM-EXEC>
<REPEAT ((N 0))
<PUTB ,GL-A-TIME <+ .T-PTR .N>
<+ <GETB ,GL-TIME .N>
<GETB .TIME .N>>>
<COND (<G? <SET N <+ .N 1>>
<- ,K-A-TWDTH 1>>
<RETURN>)>>)
(T
<REPEAT ((N 0))
<PUTB ,GL-A-TIME <+ .T-PTR .N>
<+ <GETB ,GL-TIME .N>
<GETB .TIME .N>
<GETB ,GL-TIME-UPDT-INC .N>>>
<COND (<G? <SET N <+ .N 1>>
<- ,K-A-TWDTH 1>>
<RETURN>)>>)>
<RT-NORM-TIME <REST ,GL-A-TIME .T-PTR>>
<RTRUE>)
(T
<INC R-PTR>)>>>
; "RT-ALARM-SET-ABS"
<ROUTINE RT-ALARM-SET-ABS (RTN TIME "AUX" (R-PTR 0) T-PTR)
<REPEAT ()
<COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<TELL CR "*** TOO MANY (ABS) ALARMS ***" CR CR>
<RFALSE>)>
;<DEBUGGING? <COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<TELL CR "*** TOO MANY (ABS) ALARMS ***" CR CR>
<RFALSE>)>>
<COND (<ZERO? <GET ,GL-A-ROUT .R-PTR>>
<PUT ,GL-A-ROUT .R-PTR .RTN>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<COPYT .TIME <REST ,GL-A-TIME .T-PTR> ,K-A-TWDTH>
<RTRUE>)
(T
<INC R-PTR>)>>>
; "RT-ALARM-CLR"
<ROUTINE RT-ALARM-CLR (RTN "AUX" (R-PTR 0) T-PTR)
<REPEAT ()
<COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<RFALSE>)
(<EQUAL? .RTN <GET ,GL-A-ROUT .R-PTR>>
<PUT ,GL-A-ROUT .R-PTR 0>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<COPYT <REST ,GL-A-TIME .T-PTR> 0 ,K-A-TWDTH>)>
<INC R-PTR>>>
; "RT-ALARM-CHK"
<GLOBAL RUN-SMELL-ETHERIUM? <>>
<ROUTINE RT-ALARM-CHK ("OPTIONAL" (PARM 0)
"AUX" VAL (RTN -1) (R-PTR 0) (R-CNT 0)
T-PTR HRS MIN SEC DAY T-TIME)
<SETG RUN-SMELL-ETHERIUM? <>>
<COND (<MC-T? ,GL-ALARM-WAIT>
<SETG GL-ALARM-WAIT <>>
<RFALSE>)
(<MC-T? ,GL-ALARM-STOP>
<RFALSE>)>
<RT-COPY-TIME ,GL-TIME ,GL-TEMP-TIME>
<REPEAT ()
<COND (<EQUAL? .R-PTR ,K-A-RSIZE>
<COND (<EQUAL? .RTN -1>
<COND (,RUN-SMELL-ETHERIUM? <RETURN>)>
<RETURN .R-CNT>)
(T
; "Time to run it"
<SET R-PTR .RTN> ; "Get the offset stored in RTN"
<SET RTN <GET ,GL-A-ROUT .R-PTR>>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<PUT ,GL-A-ROUT .R-PTR 0>
<SET T-TIME <ZREST ,GL-A-TIME .T-PTR>>
<SET SEC <GETB .T-TIME ,K-SEC>>
<SET MIN <GETB .T-TIME ,K-MIN>>
<SET HRS <GETB .T-TIME ,K-HRS>>
<SET DAY <GETB .T-TIME ,K-DAY>>
<COPYT .T-TIME 0 ,K-A-TWDTH>
<COND (<MC-ISNOT? ,CH-PLAYER ,FL-ASLEEP>
<RT-UPDATE-STATUS-LINE>)>
<SETG GL-ALARM-EXEC T>
<SET VAL <APPLY .RTN>>
<COND (,RUN-SMELL-ETHERIUM? <RETURN>)>
<SETG GL-ALARM-EXEC <>>
<RT-COPY-TIME ,GL-TEMP-TIME ,GL-TIME>
<INC R-CNT>
; "If alarm time != new time, ask for key to cont."
<COND (<AND <MC-T? .VAL>
<EQUAL? <RT-CLOCK-CMP .HRS .MIN .SEC
.DAY> -1>>
<COND (<EQUAL? .PARM 1>
<TELL "[Press any key to continue.]" CR>
<INPUT 1>)
(<EQUAL? .PARM 2>
<REPEAT ()
<TELL CR
"Do you want to continue waiting?" CR
"Please press Y or N > ">
<SET VAL <INPUT 1>>
<PRINTC .VAL>
<CRLF>
<COND
(<EQUAL? .VAL !\N !\n>
<SET RTN -1>
<SET R-PTR ,K-A-RSIZE>
<RT-CLOCK-SET .HRS .MIN .SEC
.DAY>
<RETURN>)
(<EQUAL? .VAL !\Y !\y>
<RETURN>)>>)>)>
; "Reset and start loop again."
<COND (<EQUAL? .RTN -1>
<AGAIN>)>
<SET RTN -1>
<SET R-PTR 0>
<AGAIN>)>)>
<COND (<MC-T? <GET ,GL-A-ROUT .R-PTR>>
<SET T-PTR <* .R-PTR ,K-A-TWDTH>>
<SET SEC <GETB ,GL-A-TIME <+ .T-PTR ,K-SEC>>>
<SET MIN <GETB ,GL-A-TIME <+ .T-PTR ,K-MIN>>>
<SET HRS <GETB ,GL-A-TIME <+ .T-PTR ,K-HRS>>>
<SET DAY <GETB ,GL-A-TIME <+ .T-PTR ,K-DAY>>>
<COND (<OR <AND <MC-T? .PARM>
<EQUAL? <RT-CLOCK-CMP .HRS .MIN .SEC
.DAY> -1>>
<AND <MC-F? .PARM>
<EQUAL? <RT-CLOCK-CMP .HRS .MIN .SEC
.DAY> -1 0>>>
<RT-CLOCK-SET .HRS .MIN .SEC .DAY>
<SET RTN .R-PTR>)>)>
<INC R-PTR>>
<COND (,RUN-SMELL-ETHERIUM?
<RT-SMELL-ETHERIUM?>
.R-CNT)>>

Some files were not shown because too many files have changed in this diff Show More