mirror of
https://github.com/historicalsource/restaurant
synced 2024-07-16 21:44:39 +03:00
3757 lines
72 KiB
Plaintext
3757 lines
72 KiB
Plaintext
|
|
|
|
.FUNCT TRANSCRIPT:ANY:1:1,STR
|
|
PRINTI "Here "
|
|
PRINT STR
|
|
PRINTR "s a transcript of interaction with"
|
|
|
|
|
|
.FUNCT V-SCRIPT:ANY:0:0
|
|
GET 0,8
|
|
BOR STACK,1
|
|
PUT 0,8,STACK
|
|
ICALL2 TRANSCRIPT,STR?68
|
|
ICALL1 V-VERSION
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-UNSCRIPT:ANY:0:0
|
|
ICALL2 TRANSCRIPT,STR?69
|
|
ICALL1 V-VERSION
|
|
GET 0,8
|
|
BAND STACK,-2
|
|
PUT 0,8,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-$ID:ANY:0:0
|
|
PRINTI "Interpreter "
|
|
GETB 0,30
|
|
PRINTN STACK
|
|
PRINTI " Version "
|
|
GETB 0,31
|
|
PRINTC STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-$VERIFY:ANY:0:0
|
|
ZERO? PRSO /?CCL3
|
|
EQUAL? PRSO,INTNUM \?CCL6
|
|
EQUAL? P-NUMBER,105 \?CCL6
|
|
PRINTN SERIAL
|
|
CRLF
|
|
RTRUE
|
|
?CCL6: CALL1 DONT-UNDERSTAND
|
|
RSTACK
|
|
?CCL3: PRINTI "Verifying disk..."
|
|
CRLF
|
|
VERIFY \?CCL11
|
|
PRINTR "The disk is correct."
|
|
?CCL11: PRINTR "Oh, oh! The disk seems to have a defect. Try verifying again. (If you've already done that, the disk surely has a defect.)"
|
|
|
|
|
|
.FUNCT V-$CHEAT:ANY:0:0,N,CH
|
|
EQUAL? PRSO,INTNUM \?CCL2
|
|
EQUAL? P-NUMBER,1,2,3 /?CND1
|
|
?CCL2: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "{Try $CHEAT 1, 2 or 3.}"
|
|
?CND1: ZERO? MOVES /FALSE
|
|
PRINTI "Don't you want to restart first?"
|
|
CALL1 YES?
|
|
ZERO? STACK /?CCL10
|
|
RESTART
|
|
RTRUE
|
|
?CCL10: PRINTR "Okay, but this may not work!"
|
|
|
|
|
|
.FUNCT V-$QUEUE:ANY:0:0,C,E,TICK
|
|
ADD C-TABLE,C-INTS >C
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
?PRG1: EQUAL? C,E /TRUE
|
|
GET C,C-ENABLED?
|
|
ZERO? STACK /?CND3
|
|
GET C,C-TICK >TICK
|
|
ZERO? TICK /?CND3
|
|
GET C,C-RTN
|
|
ICALL STACK,G-DEBUG
|
|
PRINTC 9
|
|
PRINTN TICK
|
|
CRLF
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT V-$COMMAND:ANY:0:0
|
|
DIRIN 1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-$RANDOM:ANY:0:0
|
|
EQUAL? PRSO,INTNUM /?CCL3
|
|
PRINTR "Illegal."
|
|
?CCL3: SUB 0,P-NUMBER
|
|
RANDOM STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-$RECORD:ANY:0:0
|
|
DIROUT D-RECORD-ON
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-$UNRECORD:ANY:0:0
|
|
DIROUT D-RECORD-OFF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT YOU-WILL-GET:ANY:1:1,STR
|
|
PRINTI "[Okay, you will get "
|
|
PRINT STR
|
|
PRINTR " descriptions.]"
|
|
|
|
|
|
.FUNCT V-SUPER-BRIEF:ANY:0:0
|
|
SET 'VERBOSITY,0
|
|
CALL2 YOU-WILL-GET,STR?70
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-BRIEF:ANY:0:0
|
|
SET 'VERBOSITY,1
|
|
CALL2 YOU-WILL-GET,STR?71
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-VERBOSE:ANY:0:0
|
|
SET 'VERBOSITY,2
|
|
ICALL2 YOU-WILL-GET,STR?72
|
|
CRLF
|
|
CALL1 V-LOOK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-INVENTORY:ANY:0:0
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " holding"
|
|
CALL2 PRINT-CONTENTS,WINNER
|
|
ZERO? STACK \?CND1
|
|
PRINTI " nothing"
|
|
?CND1: PRINTC 46
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-QUIT:ANY:0:1,ASK?
|
|
ASSIGNED? 'ASK? /?CND1
|
|
SET 'ASK?,TRUE-VALUE
|
|
?CND1: ICALL1 V-SCORE
|
|
ZERO? ASK? \?CND3
|
|
QUIT
|
|
?CND3: PRINTI "[If you want to continue from this point at another time, you must ""SAVE"" first. Do you want to stop the story now?]"
|
|
CALL1 YES?
|
|
ZERO? STACK /?CCL7
|
|
QUIT
|
|
RTRUE
|
|
?CCL7: PRINTR "Okay."
|
|
|
|
|
|
.FUNCT V-RESTART:ANY:0:0
|
|
ICALL1 V-SCORE
|
|
PRINTI "[Do you want to start over from the beginning?]"
|
|
CALL1 YES?
|
|
ZERO? STACK /?CCL3
|
|
RESTART
|
|
CALL1 TELL-FAILED
|
|
RSTACK
|
|
?CCL3: PRINTR "Okay."
|
|
|
|
|
|
.FUNCT TELL-FAILED:ANY:0:0
|
|
PRINTR "[Sorry, but it didn't work. Maybe your instruction manual or Reference Card can tell you why.]"
|
|
|
|
|
|
.FUNCT V-SAVE:ANY:0:0,X
|
|
PUTB G-INBUF,1,0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SAVE >X
|
|
EQUAL? X,2 /?CCL2
|
|
GET 0,8
|
|
BTST STACK,4 \?CND1
|
|
?CCL2: ICALL1 V-$REFRESH
|
|
?CND1: ZERO? X \?CCL7
|
|
ICALL1 TELL-FAILED
|
|
RETURN 2
|
|
?CCL7: PRINTI "[Okay.]"
|
|
CRLF
|
|
EQUAL? X,1 /TRUE
|
|
ICALL1 V-FIRST-LOOK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-RESTORE:ANY:0:0
|
|
RESTORE
|
|
ZERO? STACK \FALSE
|
|
ICALL1 TELL-FAILED
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-FIRST-LOOK:ANY:0:0
|
|
CALL1 DESCRIBE-ROOM
|
|
ZERO? STACK /FALSE
|
|
ZERO? VERBOSITY /FALSE
|
|
CALL1 DESCRIBE-OBJECTS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-VERSION:ANY:0:0,IDX
|
|
SET 'IDX,18
|
|
PRINTI "MILLIWAYS
|
|
Infocom interactive science fiction
|
|
Copyright (c) 1988 by Infocom, Inc. All rights reserved.
|
|
Release number "
|
|
GET 0,1
|
|
BAND STACK,2047
|
|
PRINTN STACK
|
|
PRINTI " / Serial number "
|
|
?PRG1: GETB 0,IDX
|
|
PRINTC STACK
|
|
IGRTR? 'IDX,23 \?PRG1
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SCORE:ANY:0:0
|
|
PRINTI "Your score is "
|
|
PRINTN SCORE
|
|
PRINTI " of a possible "
|
|
PRINTN SCORE-MAX
|
|
PRINTI ", in "
|
|
PRINTN MOVES
|
|
PRINTI " turn"
|
|
EQUAL? MOVES,1 \?CCL3
|
|
PRINTC 46
|
|
JUMP ?CND1
|
|
?CCL3: PRINTI "s."
|
|
?CND1: CRLF
|
|
RETURN SCORE
|
|
|
|
|
|
.FUNCT NO-NEED:ANY:0:2,STR,OBJ
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1,STR?65
|
|
PRINTI "n't need to "
|
|
ZERO? STR /?CCL3
|
|
PRINT STR
|
|
JUMP ?CND1
|
|
?CCL3: ICALL1 VERB-PRINT
|
|
?CND1: EQUAL? STR,STR?73,STR?74 \?CCL6
|
|
PRINTI " in that "
|
|
PRINTD INTDIR
|
|
JUMP ?CND4
|
|
?CCL6: ZERO? OBJ /?CCL8
|
|
ICALL2 PRINT-THE,OBJ
|
|
JUMP ?CND4
|
|
?CCL8: ICALL2 PRINT-THE,PRSO
|
|
?CND4: PRINTR ".)"
|
|
|
|
|
|
.FUNCT YOU-CANT:ANY:0:3,STR,WHILE,STR1
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1
|
|
PRINTI " can't "
|
|
ZERO? STR \?CCL3
|
|
ICALL1 VERB-PRINT
|
|
JUMP ?CND1
|
|
?CCL3: PRINT STR
|
|
?CND1: EQUAL? STR,STR?73,STR?74 \?CCL6
|
|
PRINTI " in that "
|
|
PRINTD INTDIR
|
|
JUMP ?CND4
|
|
?CCL6: EQUAL? PRSO,PSEUDO-OBJECT \?CCL9
|
|
PRINTI " it"
|
|
JUMP ?CND7
|
|
?CCL9: EQUAL? PRSO,FLOOR \?CCL11
|
|
CALL2 OUTSIDE?,HERE
|
|
ZERO? STACK /?CCL11
|
|
PRINTI " the ground"
|
|
JUMP ?CND7
|
|
?CCL11: ICALL2 PRINT-THE,PRSO
|
|
?CND7: ZERO? STR1 /?CND4
|
|
PRINTI " while"
|
|
ZERO? WHILE /?CCL18
|
|
ICALL HE-SHE-IT,WHILE,0,STR?61
|
|
JUMP ?CND16
|
|
?CCL18: ICALL HE-SHE-IT,PRSO,0,STR?61
|
|
?CND16: PRINTC 32
|
|
PRINT STR1
|
|
?CND4: PRINTR ".)"
|
|
|
|
|
|
.FUNCT TELL-BEING-WORN:ANY:1:1,OBJ
|
|
FSET? OBJ,WORNBIT \FALSE
|
|
PRINTI " (actually, wearing it)"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRINT-CONTENTS:ANY:1:1,CONT,OBJ,NXT,1ST?,VAL
|
|
SET '1ST?,TRUE-VALUE
|
|
FIRST? CONT >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ /?REP3
|
|
NEXT? OBJ >NXT /?BOGUS7
|
|
?BOGUS7: FSET? OBJ,INVISIBLE /?CCL9
|
|
FSET? OBJ,NDESCBIT /?CCL9
|
|
EQUAL? OBJ,WINNER \?CND8
|
|
?CCL9: MOVE OBJ,INTDIR
|
|
?CND8: SET 'OBJ,NXT
|
|
JUMP ?PRG2
|
|
?REP3: FIRST? CONT >OBJ /?BOGUS13
|
|
?BOGUS13: ZERO? OBJ \?PRG19
|
|
EQUAL? CONT,PLAYER /?CND14
|
|
PRINTI " nothing "
|
|
CALL2 PICK-ONE-NEW,YAWNS
|
|
PRINT STACK
|
|
?CND14: ICALL ROB,INTDIR,CONT
|
|
RETURN VAL
|
|
?PRG19: ZERO? OBJ /?CND14
|
|
NEXT? OBJ >NXT /?BOGUS24
|
|
?BOGUS24: ZERO? 1ST? /?CCL27
|
|
SET 'VAL,TRUE-VALUE
|
|
SET '1ST?,FALSE-VALUE
|
|
JUMP ?CND25
|
|
?CCL27: ZERO? NXT /?CCL30
|
|
PRINTC 44
|
|
JUMP ?CND25
|
|
?CCL30: PRINTI " and"
|
|
?CND25: ICALL2 PRINT-THE,OBJ
|
|
ICALL2 TELL-BEING-WORN,OBJ
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
FCLEAR OBJ,SECRETBIT
|
|
FSET OBJ,SEENBIT
|
|
SET 'OBJ,NXT
|
|
JUMP ?PRG19
|
|
|
|
|
|
.FUNCT DESCRIBE-OBJECTS:ANY:0:1,CONT,OBJ,NXT,STR,VAL,HE,SHE,FIRST,TWO?,IT?,ANY?
|
|
SET 'FIRST,TRUE-VALUE
|
|
ZERO? CONT \?CND1
|
|
SET 'CONT,HERE
|
|
?CND1: ZERO? LIT \?CND3
|
|
ICALL1 TOO-DARK
|
|
RTRUE
|
|
?CND3: FIRST? CONT >OBJ /?BOGUS5
|
|
?BOGUS5: ZERO? OBJ /FALSE
|
|
?PRG8: ZERO? OBJ /?REP9
|
|
NEXT? OBJ >NXT /?BOGUS13
|
|
?BOGUS13: FSET? OBJ,INVISIBLE /?CCL15
|
|
FSET? OBJ,NDESCBIT /?CCL15
|
|
EQUAL? OBJ,WINNER /?CCL15
|
|
FSET? OBJ,PERSONBIT \?PRD20
|
|
FSET? OBJ,RMUNGBIT /?CCL15
|
|
?PRD20: LOC PLAYER
|
|
EQUAL? OBJ,STACK \?CND14
|
|
?CCL15: FCLEAR OBJ,RMUNGBIT
|
|
MOVE OBJ,PSEUDO-OBJECT
|
|
?CND14: SET 'OBJ,NXT
|
|
JUMP ?PRG8
|
|
?REP9: EQUAL? CONT,HERE \?CND24
|
|
SET 'NXT,CHARACTER-MAX
|
|
?PRG26: PUT TOUCHED-LDESCS,NXT,0
|
|
DLESS? 'NXT,1 \?PRG26
|
|
SET 'NXT,0
|
|
?PRG30: IGRTR? 'NXT,CHARACTER-MAX /?REP31
|
|
GET CHARACTER-TABLE,NXT >OBJ
|
|
IN? OBJ,HERE \?PRG30
|
|
PUT FOLLOW-LOC,NXT,HERE
|
|
GETP OBJ,P?DESCFCN
|
|
CALL STACK,M-OBJDESC >VAL
|
|
FSET OBJ,SEENBIT
|
|
EQUAL? VAL,M-FATAL /?CCL37
|
|
ZERO? ANY? \?CND36
|
|
?CCL37: SET 'ANY?,VAL
|
|
?CND36: FSET? OBJ,FEMALEBIT \?CCL42
|
|
ZERO? SHE \?CCL45
|
|
SET 'SHE,OBJ
|
|
JUMP ?CND40
|
|
?CCL45: SET 'SHE,1
|
|
JUMP ?CND40
|
|
?CCL42: ZERO? HE \?CCL48
|
|
SET 'HE,OBJ
|
|
JUMP ?CND40
|
|
?CCL48: SET 'HE,1
|
|
?CND40: MOVE OBJ,PSEUDO-OBJECT
|
|
JUMP ?PRG30
|
|
?REP31: SET 'NXT,0
|
|
?PRG49: IGRTR? 'NXT,CHARACTER-MAX /?REP50
|
|
GET TOUCHED-LDESCS,NXT >OBJ
|
|
ZERO? OBJ /?PRG49
|
|
SET 'FIRST,TRUE-VALUE
|
|
GET CHARACTER-TABLE,NXT >STR
|
|
ICALL2 START-SENTENCE,STR
|
|
SET 'STR,NXT
|
|
?PRG55: IGRTR? 'STR,CHARACTER-MAX \?CCL59
|
|
ZERO? FIRST /?CCL62
|
|
PRINTI " is "
|
|
JUMP ?CND60
|
|
?CCL62: PRINTI " are "
|
|
?CND60: GET LDESC-STRINGS,OBJ
|
|
PRINT STACK
|
|
PRINTC 46
|
|
CRLF
|
|
JUMP ?PRG49
|
|
?CCL59: GET TOUCHED-LDESCS,STR
|
|
EQUAL? OBJ,STACK \?PRG55
|
|
PUT TOUCHED-LDESCS,STR,0
|
|
SET 'FIRST,FALSE-VALUE
|
|
PRINTI " and"
|
|
GET CHARACTER-TABLE,STR
|
|
ICALL2 PRINT-THE,STACK
|
|
JUMP ?PRG55
|
|
?REP50: EQUAL? SHE,0,1 /?CCL66
|
|
ICALL2 THIS-IS-IT,SHE
|
|
JUMP ?CND64
|
|
?CCL66: EQUAL? SHE,1 \?CND64
|
|
SET 'P-HER-OBJECT,FALSE-VALUE
|
|
?CND64: EQUAL? HE,0,1 /?CCL70
|
|
ICALL2 THIS-IS-IT,HE
|
|
JUMP ?CND68
|
|
?CCL70: EQUAL? HE,1 \?CND68
|
|
SET 'P-HIM-OBJECT,FALSE-VALUE
|
|
?CND68: SET 'FIRST,TRUE-VALUE
|
|
FIRST? CONT >OBJ /?PRG73
|
|
?PRG73: ZERO? OBJ /?REP74
|
|
NEXT? OBJ >NXT /?BOGUS78
|
|
?BOGUS78: GETP OBJ,P?DESCFCN >STR
|
|
ZERO? STR /?CND79
|
|
CALL STR,M-OBJDESC >VAL
|
|
EQUAL? VAL,M-FATAL /?CCL82
|
|
ZERO? ANY? \?CND81
|
|
?CCL82: SET 'ANY?,VAL
|
|
?CND81: ICALL2 THIS-IS-IT,OBJ
|
|
FSET OBJ,SEENBIT
|
|
MOVE OBJ,PSEUDO-OBJECT
|
|
?CND79: SET 'OBJ,NXT
|
|
JUMP ?PRG73
|
|
?REP74: FIRST? CONT >OBJ /?PRG86
|
|
?PRG86: ZERO? OBJ /?REP87
|
|
FSET? OBJ,TOUCHBIT /?REP87
|
|
NEXT? OBJ >NXT /?BOGUS93
|
|
?BOGUS93: GETP OBJ,P?FDESC >STR
|
|
ZERO? STR /?CND94
|
|
ZERO? ANY? \?CND96
|
|
SET 'ANY?,TRUE-VALUE
|
|
?CND96: PRINT STR
|
|
CRLF
|
|
FCLEAR OBJ,SECRETBIT
|
|
FSET OBJ,SEENBIT
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
MOVE OBJ,PSEUDO-OBJECT
|
|
?CND94: SET 'OBJ,NXT
|
|
JUMP ?PRG86
|
|
?REP87: FIRST? CONT >OBJ /?PRG99
|
|
?PRG99: ZERO? OBJ /?CND24
|
|
NEXT? OBJ >NXT /?BOGUS104
|
|
?BOGUS104: GETP OBJ,P?LDESC >STR
|
|
ZERO? STR /?CND105
|
|
ZERO? ANY? \?CND107
|
|
SET 'ANY?,TRUE-VALUE
|
|
?CND107: PRINT STR
|
|
CRLF
|
|
FCLEAR OBJ,SECRETBIT
|
|
FSET OBJ,SEENBIT
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
MOVE OBJ,PSEUDO-OBJECT
|
|
?CND105: SET 'OBJ,NXT
|
|
JUMP ?PRG99
|
|
?CND24: FIRST? HERE >OBJ /?BOGUS109
|
|
?BOGUS109: SET 'VAL,FALSE-VALUE
|
|
ZERO? OBJ /?CND110
|
|
?PRG112: ZERO? OBJ /?CCL116
|
|
NEXT? OBJ >NXT /?BOGUS117
|
|
?BOGUS117: SET 'VAL,TRUE-VALUE
|
|
ZERO? FIRST /?CCL120
|
|
SET 'FIRST,FALSE-VALUE
|
|
EQUAL? CONT,HERE \?CND118
|
|
CRLF
|
|
FSET? HERE,ONBIT \?CCL125
|
|
PRINTI "You see"
|
|
JUMP ?CND118
|
|
?CCL125: PRINTI "The light reveals"
|
|
JUMP ?CND118
|
|
?CCL120: ZERO? NXT /?CCL128
|
|
PRINTC 44
|
|
JUMP ?CND118
|
|
?CCL128: PRINTI " and"
|
|
?CND118: ICALL2 PRINT-THE,OBJ
|
|
FCLEAR OBJ,SECRETBIT
|
|
FSET OBJ,SEENBIT
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
ICALL2 TELL-BEING-WORN,OBJ
|
|
CALL2 SEE-INSIDE?,OBJ
|
|
ZERO? STACK /?CND129
|
|
CALL2 SEE-ANYTHING-IN?,OBJ
|
|
ZERO? STACK /?CND129
|
|
MOVE OBJ,INTNUM
|
|
?CND129: ZERO? IT? \?CCL135
|
|
ZERO? TWO? \?CCL135
|
|
SET 'IT?,OBJ
|
|
JUMP ?CND133
|
|
?CCL135: SET 'TWO?,TRUE-VALUE
|
|
SET 'IT?,FALSE-VALUE
|
|
?CND133: SET 'OBJ,NXT
|
|
JUMP ?PRG112
|
|
?CCL116: ZERO? IT? /?CND138
|
|
ZERO? TWO? \?CND138
|
|
SET 'P-IT-OBJECT,IT?
|
|
?CND138: EQUAL? CONT,HERE \?CND142
|
|
PRINTI " here"
|
|
?CND142: PRINTC 46
|
|
ZERO? ANY? \?CND110
|
|
SET 'ANY?,TRUE-VALUE
|
|
?CND110: FIRST? INTNUM >OBJ /?PRG147
|
|
?PRG147: ZERO? OBJ /?REP148
|
|
FSET? OBJ,SURFACEBIT \?CCL153
|
|
CRLF
|
|
PRINTI "On"
|
|
JUMP ?CND151
|
|
?CCL153: CRLF
|
|
PRINTI "Inside"
|
|
?CND151: SET 'VAL,TRUE-VALUE
|
|
ICALL2 PRINT-THE,OBJ
|
|
PRINTI " you see"
|
|
ICALL2 PRINT-CONTENTS,OBJ
|
|
PRINTC 46
|
|
NEXT? OBJ >OBJ /?PRG147
|
|
JUMP ?PRG147
|
|
?REP148: ZERO? VAL /?CND155
|
|
CRLF
|
|
?CND155: ICALL ROB,INTNUM,CONT
|
|
ICALL ROB,PSEUDO-OBJECT,CONT
|
|
RETURN ANY?
|
|
|
|
|
|
.FUNCT SEE-ANYTHING-IN?:ANY:1:1,CONT,OBJ,NXT,ANY?
|
|
FIRST? CONT >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ /?REP3
|
|
FSET? OBJ,INVISIBLE /?CND7
|
|
FSET? OBJ,NDESCBIT /?CND7
|
|
EQUAL? OBJ,WINNER /?CND7
|
|
SET 'ANY?,TRUE-VALUE
|
|
RETURN ANY?
|
|
?CND7: NEXT? OBJ >OBJ /?PRG2
|
|
JUMP ?PRG2
|
|
?REP3: RETURN ANY?
|
|
|
|
|
|
.FUNCT DESCRIBE-ROOM:ANY:0:1,LOOK?,V?,STR,L
|
|
ZERO? LOOK? /?CCL3
|
|
SET 'V?,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? 2,VERBOSITY \?CCL5
|
|
SET 'V?,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL5: ZERO? VERBOSITY \?CCL7
|
|
SET 'V?,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?CCL7: FSET? HERE,TOUCHBIT /?CND1
|
|
SET 'V?,TRUE-VALUE
|
|
?CND1: PRINTC 40
|
|
ZERO? VERBOSITY \?CCL12
|
|
PRINTD HERE
|
|
JUMP ?CND10
|
|
?CCL12: PRINTI "You are"
|
|
FSET? HERE,TOUCHBIT /?CND13
|
|
PRINTI " now"
|
|
?CND13: FSET? HERE,SURFACEBIT \?CCL17
|
|
PRINTI " on"
|
|
JUMP ?CND15
|
|
?CCL17: PRINTI " in"
|
|
?CND15: ICALL2 PRINT-THE,HERE
|
|
PRINTC 46
|
|
?CND10: PRINTI ")
|
|
"
|
|
ZERO? LIT \?CCL20
|
|
ICALL1 TOO-DARK
|
|
RFALSE
|
|
?CCL20: EQUAL? LIT,HERE /?CND18
|
|
PRINTI "Light comes from"
|
|
ICALL2 PRINT-THE,LIT
|
|
PRINTC 46
|
|
CRLF
|
|
?CND18: ZERO? V? /?CND22
|
|
LOC WINNER >L
|
|
FSET? L,VEHBIT \?CND24
|
|
PRINTI "(You're "
|
|
PRINTI "sitt"
|
|
PRINTI "ing on"
|
|
ICALL2 THIS-IS-IT,L
|
|
ICALL2 PRINT-THE,L
|
|
PRINTI ".)"
|
|
CRLF
|
|
?CND24: ZERO? V? /?CCL29
|
|
GETP HERE,P?ACTION
|
|
CALL STACK,M-LOOK
|
|
ZERO? STACK \?CND22
|
|
?CCL29: ZERO? V? /?CCL33
|
|
GETP HERE,P?FDESC >STR
|
|
ZERO? STR /?CCL33
|
|
PRINT STR
|
|
CRLF
|
|
JUMP ?CND22
|
|
?CCL33: ZERO? V? /?CCL37
|
|
GETP HERE,P?LDESC >STR
|
|
ZERO? STR /?CCL37
|
|
PRINT STR
|
|
CRLF
|
|
JUMP ?CND22
|
|
?CCL37: GETP HERE,P?ACTION
|
|
ICALL STACK,M-FLASH
|
|
?CND22: FSET HERE,SEENBIT
|
|
FSET HERE,TOUCHBIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT HAR-HAR:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
CALL2 PICK-ONE-NEW,YUKS
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT IMPOSSIBLE:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
CALL2 PICK-ONE-NEW,IMPOSSIBLES
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT WONT-HELP:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
CALL2 PICK-ONE-NEW,WASTES
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PICK-ONE-NEW:ANY:1:1,FROB,L,CNT,RND,MSG,RFROB
|
|
GET FROB,0
|
|
SUB STACK,1 >L
|
|
GET FROB,1 >CNT
|
|
ADD FROB,2 >FROB
|
|
MUL CNT,2
|
|
ADD FROB,STACK >RFROB
|
|
SUB L,CNT >RND
|
|
RANDOM RND >RND
|
|
GRTR? RND,0 /?CND1
|
|
PRINTI "{PICK-ONE-NEW: L="
|
|
PRINTN L
|
|
PRINTI " CNT="
|
|
PRINTN CNT
|
|
PRINTI " RND="
|
|
PRINTN RND
|
|
PRINTI " FROB="
|
|
PRINTN FROB
|
|
PRINTC 125
|
|
CRLF
|
|
?CND1: GET RFROB,RND >MSG
|
|
GET RFROB,1
|
|
PUT RFROB,RND,STACK
|
|
PUT RFROB,1,MSG
|
|
INC 'CNT
|
|
EQUAL? CNT,L \?CND3
|
|
SET 'CNT,0
|
|
?CND3: PUT FROB,0,CNT
|
|
RETURN MSG
|
|
|
|
|
|
.FUNCT PICK-ONE:ANY:1:1,FROB
|
|
GET FROB,0
|
|
RANDOM STACK
|
|
GET FROB,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NOT-HOLDING?:ANY:1:1,OBJ
|
|
IN? OBJ,WINNER /FALSE
|
|
LOC OBJ
|
|
IN? STACK,WINNER /FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " not holding"
|
|
ICALL2 HIM-HER-IT,OBJ
|
|
PRINTR ".)"
|
|
|
|
|
|
.FUNCT GOTO:ANY:1:3,RM,TEST,FOLLOW?,X
|
|
ASSIGNED? 'TEST /?CND1
|
|
SET 'TEST,TRUE-VALUE
|
|
?CND1: ASSIGNED? 'FOLLOW? /?CND3
|
|
SET 'FOLLOW?,TRUE-VALUE
|
|
?CND3: IN? WINNER,RM \?CND5
|
|
ICALL1 WALK-WITHIN-ROOM
|
|
RFALSE
|
|
?CND5: GETP HERE,P?ACTION
|
|
CALL STACK,M-LEAVE
|
|
ZERO? STACK \FALSE
|
|
EQUAL? WINNER,PLAYER \?CND7
|
|
ZERO? FOLLOW? /?CND7
|
|
ZERO? FOLLOWER /?CND7
|
|
ICALL2 FRIEND-FOLLOWS-YOU,RM
|
|
?CND7: ZERO? TEST /?CND15
|
|
EQUAL? WINNER,PLAYER \?CND15
|
|
CALL DIR-FROM,HERE,RM >X
|
|
ZERO? X /?CND15
|
|
GETP HERE,P?ACTION
|
|
CALL STACK,X
|
|
EQUAL? M-FATAL,STACK /FALSE
|
|
?CND15: GETP WINNER,P?CHARACTER
|
|
PUT FOLLOW-LOC,STACK,RM
|
|
MOVE WINNER,RM
|
|
EQUAL? WINNER,PLAYER \TRUE
|
|
SET 'OHERE,HERE
|
|
SET 'HERE,RM
|
|
ICALL2 MAKE-ALL-PEOPLE,-12
|
|
ICALL1 ENTER-ROOM
|
|
RTRUE
|
|
|
|
|
|
.FUNCT MAKE-ALL-PEOPLE:ANY:1:2,NUM,RM,P,NNUM
|
|
ZERO? RM \?CND1
|
|
SET 'RM,HERE
|
|
?CND1: LESS? NUM,0 \?CND3
|
|
SUB 0,NUM >NNUM
|
|
?CND3: FIRST? RM >P /?PRG6
|
|
?PRG6: ZERO? P /TRUE
|
|
FSET? P,PERSONBIT \?CND8
|
|
GRTR? NUM,0 \?CCL14
|
|
PUTP P,P?LDESC,NUM
|
|
JUMP ?CND8
|
|
?CCL14: GETP P,P?LDESC
|
|
EQUAL? NNUM,STACK \?CND8
|
|
PUTP P,P?LDESC,0
|
|
?CND8: NEXT? P >P /?PRG6
|
|
JUMP ?PRG6
|
|
|
|
|
|
.FUNCT FRIEND-FOLLOWS-YOU:ANY:1:1,RM,C
|
|
IN? FOLLOWER,RM /FALSE
|
|
MOVE FOLLOWER,RM
|
|
PUTP FOLLOWER,P?LDESC,23
|
|
PRINTD FOLLOWER
|
|
CALL2 PICK-ONE,TRAILS-ALONG
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DIR-FROM:ANY:2:2,HERE,THERE,V,P,D
|
|
CALL DIR-FROM-TEST,HERE,THERE,P?UP
|
|
ZERO? STACK /?CCL3
|
|
RETURN P?UP
|
|
?CCL3: CALL DIR-FROM-TEST,HERE,THERE,P?DOWN
|
|
ZERO? STACK /?CCL5
|
|
RETURN P?DOWN
|
|
?CCL5: CALL DIR-FROM-TEST,HERE,THERE,P?IN
|
|
ZERO? STACK /?CCL7
|
|
RETURN P?IN
|
|
?CCL7: CALL DIR-FROM-TEST,HERE,THERE,P?OUT
|
|
ZERO? STACK /?CND1
|
|
RETURN P?OUT
|
|
?CND1: SET 'P,0
|
|
?PRG9: NEXTP HERE,P >P
|
|
LESS? P,LOW-DIRECTION \?CCL13
|
|
RETURN V
|
|
?CCL13: CALL DIR-FROM-TEST,HERE,THERE,P >D
|
|
ZERO? D /?PRG9
|
|
LESS? D,LOW-DIRECTION /?PRD19
|
|
RETURN P
|
|
?PRD19: ZERO? V \?CCL17
|
|
SET 'V,P
|
|
JUMP ?PRG9
|
|
?CCL17: RETURN P
|
|
|
|
|
|
.FUNCT DIR-FROM-TEST:ANY:3:3,HERE,THERE,P,L,TBL
|
|
GETPT HERE,P >TBL
|
|
ZERO? TBL /FALSE
|
|
PTSIZE TBL >L
|
|
EQUAL? L,DEXIT,UEXIT,CEXIT \FALSE
|
|
GET TBL,REXIT
|
|
EQUAL? STACK,THERE \FALSE
|
|
RETURN P
|
|
|
|
|
|
.FUNCT HACK-HACK:ANY:1:1,STR
|
|
PRINT STR
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
CALL2 PICK-ONE,HO-HUM
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT HELD?:ANY:1:2,OBJ,CONT,L
|
|
ZERO? CONT \?PRG3
|
|
SET 'CONT,PLAYER
|
|
?PRG3: LOC OBJ >L
|
|
ZERO? L /FALSE
|
|
EQUAL? L,CONT /TRUE
|
|
EQUAL? CONT,PLAYER,WINNER \?CCL11
|
|
EQUAL? OBJ,HANDS,HEAD,EYES /TRUE
|
|
SET 'OBJ,L
|
|
JUMP ?PRG3
|
|
?CCL11: EQUAL? L,ROOMS,GLOBAL-OBJECTS /FALSE
|
|
SET 'OBJ,L
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT IDROP:ANY:0:0
|
|
CALL2 NOT-HOLDING?,PRSO
|
|
ZERO? STACK \FALSE
|
|
IN? PRSO,WINNER /?CCL5
|
|
LOC PRSO
|
|
FSET? STACK,OPENBIT /?CCL5
|
|
LOC PRSO
|
|
ICALL TOO-BAD-BUT,STACK,STR?98
|
|
RFALSE
|
|
?CCL5: MOVE PRSO,HERE
|
|
FCLEAR PRSO,WORNBIT
|
|
FCLEAR PRSO,NDESCBIT
|
|
FCLEAR PRSO,INVISIBLE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ITAKE:ANY:0:2,VB,OB,CNT,OBJ,L,?TMP1
|
|
ASSIGNED? 'VB /?CND1
|
|
SET 'VB,TRUE-VALUE
|
|
?CND1: ZERO? OB \?CND3
|
|
SET 'OB,PRSO
|
|
?CND3: LOC OB >L
|
|
ZERO? L /?CND5
|
|
FSET? L,PERSONBIT \?CND5
|
|
FSET? OB,TAKEBIT /?CCL11
|
|
FSET? L,MUNGBIT /?CCL11
|
|
ZERO? VB /FALSE
|
|
ICALL2 YOU-CANT,STR?99
|
|
RFALSE
|
|
?CCL11: FSET OB,TAKEBIT
|
|
?CND5: FSET? OB,TAKEBIT /?CCL18
|
|
ZERO? VB /FALSE
|
|
ICALL2 YOU-CANT,STR?99
|
|
RFALSE
|
|
?CCL18: CALL2 CCOUNT,WINNER >CNT
|
|
GRTR? CNT,FUMBLE-NUMBER \?CCL22
|
|
MUL CNT,FUMBLE-PROB >?TMP1
|
|
RANDOM 100
|
|
LESS? ?TMP1,STACK /?CCL22
|
|
CALL FIND-FLAG-NOT,WINNER,WORNBIT >OBJ
|
|
ZERO? OBJ /?CCL22
|
|
ICALL1 TOO-BAD-BUT
|
|
ICALL2 PRINT-THE,OBJ
|
|
PRINTI " slips from"
|
|
ICALL HIM-HER-IT,WINNER,0,TRUE-VALUE
|
|
PRINTI " arms while"
|
|
ICALL HE-SHE-IT,WINNER,0,STR?61
|
|
PRINTI " taking"
|
|
ICALL2 HIM-HER-IT,OB
|
|
PRINTI ", and both tumble "
|
|
CALL1 GROUND-DESC
|
|
PRINT STACK
|
|
PRINTI ". "
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " carrying too many things.
|
|
"
|
|
MOVE OBJ,HERE
|
|
MOVE OB,HERE
|
|
RETURN 2
|
|
?CCL22: MOVE OB,WINNER
|
|
FSET OB,SEENBIT
|
|
FSET OB,TOUCHBIT
|
|
FCLEAR OB,NDESCBIT
|
|
FCLEAR OB,INVISIBLE
|
|
FCLEAR OB,SECRETBIT
|
|
EQUAL? PRSA,V?TAKE /TRUE
|
|
EQUAL? L,WINNER /TRUE
|
|
FSET? L,PERSONBIT \TRUE
|
|
ICALL FIRST-YOU,STR?99,OB,L
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CCOUNT:ANY:1:1,OBJ,CNT,X
|
|
FIRST? OBJ >X /?PRG3
|
|
RETURN CNT
|
|
?PRG3: FSET? X,WORNBIT /?CND5
|
|
INC 'CNT
|
|
?CND5: NEXT? X >X /?PRG3
|
|
RETURN CNT
|
|
|
|
|
|
.FUNCT CHECK-DOOR:ANY:1:1,DR
|
|
ICALL2 START-SENTENCE,DR
|
|
PRINTI " is "
|
|
ICALL2 THIS-IS-IT,DR
|
|
FSET? DR,OPENBIT \?CCL3
|
|
PRINTI "open"
|
|
JUMP ?CND1
|
|
?CCL3: PRINTI "closed and "
|
|
FSET? DR,LOCKED /?CND4
|
|
PRINTI "un"
|
|
?CND4: PRINTI "locked"
|
|
?CND1: PRINTR "."
|
|
|
|
|
|
.FUNCT ROOM-CHECK:ANY:0:0,P,PA
|
|
SET 'P,PRSO
|
|
EQUAL? P,ROOMS /FALSE
|
|
IN? P,ROOMS \?CCL5
|
|
EQUAL? HERE,P /FALSE
|
|
CALL GLOBAL-IN?,P,HERE
|
|
ZERO? STACK /?CCL10
|
|
EQUAL? PRSA,V?SEARCH-FOR /?PRD16
|
|
EQUAL? PRSA,V?SEARCH,V?SIT,V?LIE \FALSE
|
|
?PRD16: CALL2 META-LOC,P >P
|
|
EQUAL? P,HERE /FALSE
|
|
ICALL FIRST-YOU,STR?100,P
|
|
SET 'PA,PRSA
|
|
CALL PERFORM,V?THROUGH,P >P
|
|
SET 'PRSA,PA
|
|
EQUAL? M-FATAL,P /TRUE
|
|
RFALSE
|
|
?CCL10: CALL2 SEE-INTO?,P
|
|
ZERO? STACK \FALSE
|
|
RTRUE
|
|
?CCL5: CALL2 META-LOC,P
|
|
EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE
|
|
CALL2 VISIBLE?,P
|
|
ZERO? STACK \FALSE
|
|
CALL2 NOT-HERE,P
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEE-INSIDE?:ANY:1:2,OBJ,ONLY-IN
|
|
FSET? OBJ,TRANSBIT /TRUE
|
|
FSET? OBJ,OPENBIT /TRUE
|
|
ZERO? ONLY-IN \FALSE
|
|
FSET? OBJ,SURFACEBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ARENT-TALKING:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You aren't talking to anyone!)"
|
|
|
|
|
|
.FUNCT ALREADY:ANY:1:2,OBJ,STR
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL2 START-SENTENCE,OBJ
|
|
EQUAL? OBJ,PLAYER \?CCL4
|
|
PRINTI " are"
|
|
JUMP ?CND2
|
|
?CCL4: PRINTI " is"
|
|
?CND2: PRINTI " already "
|
|
ZERO? STR /TRUE
|
|
PRINT STR
|
|
PRINTR "!)"
|
|
|
|
|
|
.FUNCT NOT-CLEAR-WHOM:ANY:0:0
|
|
SET 'P-CONT,FALSE-VALUE
|
|
PRINTR "[It's not clear whom you're talking to.]"
|
|
|
|
|
|
.FUNCT OKAY:ANY:0:2,OBJ,STR
|
|
EQUAL? WINNER,PLAYER \?CCL3
|
|
EQUAL? PRSA,V?WALK-TO,V?WALK,V?THROUGH \?CND1
|
|
RTRUE
|
|
?CCL3: PRINTC 34
|
|
?CND1: PRINTI "Okay"
|
|
ZERO? OBJ /?CND6
|
|
PRINTC 44
|
|
ICALL2 HE-SHE-IT,OBJ
|
|
ZERO? STR /?CND8
|
|
PRINTI " is now "
|
|
PRINT STR
|
|
?CND8: EQUAL? STR,STR?101 \?CCL12
|
|
FSET OBJ,ONBIT
|
|
JUMP ?CND6
|
|
?CCL12: EQUAL? STR,STR?102 \?CCL14
|
|
FCLEAR OBJ,ONBIT
|
|
JUMP ?CND6
|
|
?CCL14: EQUAL? STR,STR?103 \?CCL16
|
|
FSET OBJ,OPENBIT
|
|
JUMP ?CND6
|
|
?CCL16: EQUAL? STR,STR?98 \?CCL18
|
|
FCLEAR OBJ,OPENBIT
|
|
JUMP ?CND6
|
|
?CCL18: EQUAL? STR,STR?104 \?CCL20
|
|
FSET OBJ,LOCKED
|
|
JUMP ?CND6
|
|
?CCL20: EQUAL? STR,STR?105 \?CND6
|
|
FCLEAR OBJ,LOCKED
|
|
?CND6: ZERO? STR \?CCL23
|
|
ZERO? OBJ \?CND22
|
|
?CCL23: EQUAL? WINNER,PLAYER /?CND26
|
|
PRINTI ","" says "
|
|
PRINTD WINNER
|
|
PRINTI ". "
|
|
ICALL HE-SHE-IT,WINNER,1
|
|
PRINTR " does so."
|
|
?CND26: PRINTC 46
|
|
CRLF
|
|
?CND22: ZERO? LIT \TRUE
|
|
CALL1 LIT? >LIT
|
|
ZERO? LIT /TRUE
|
|
CRLF
|
|
ICALL1 V-LOOK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TOO-BAD-BUT:ANY:0:2,OBJ,STR
|
|
PRINTI "Too bad, but"
|
|
ZERO? OBJ /?CND1
|
|
ICALL2 HE-SHE-IT,OBJ
|
|
?CND1: ZERO? STR /TRUE
|
|
PRINTI " is "
|
|
PRINT STR
|
|
EQUAL? STR,STR?106,STR?107 \?CND5
|
|
PRINTI " with you"
|
|
?CND5: PRINTR "."
|
|
|
|
|
|
.FUNCT TOO-DARK:ANY:0:0
|
|
PRINTR "(It's too dark to see!)"
|
|
|
|
|
|
.FUNCT VISIBLE?:ANY:1:1,OBJ,L
|
|
ZERO? OBJ /FALSE
|
|
CALL2 ACCESSIBLE?,OBJ
|
|
ZERO? STACK \TRUE
|
|
LOC OBJ >L
|
|
CALL2 SEE-INSIDE?,L
|
|
ZERO? STACK /FALSE
|
|
CALL2 VISIBLE?,L
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ACCESSIBLE?:ANY:1:1,OBJ,L
|
|
ZERO? OBJ /FALSE
|
|
LOC OBJ >L
|
|
FSET? OBJ,INVISIBLE /FALSE
|
|
EQUAL? OBJ,PSEUDO-OBJECT \?CCL8
|
|
EQUAL? LAST-PSEUDO-LOC,HERE /TRUE
|
|
RFALSE
|
|
?CCL8: ZERO? L /FALSE
|
|
EQUAL? L,GLOBAL-OBJECTS /TRUE
|
|
EQUAL? L,LOCAL-GLOBALS \?CCL17
|
|
CALL GLOBAL-IN?,OBJ,HERE
|
|
RSTACK
|
|
?CCL17: CALL2 META-LOC,OBJ
|
|
EQUAL? STACK,HERE \FALSE
|
|
EQUAL? L,WINNER,HERE /TRUE
|
|
FSET? L,OPENBIT /?CTR22
|
|
FSET? L,SURFACEBIT /?CTR22
|
|
FSET? L,PERSONBIT \FALSE
|
|
?CTR22: CALL2 ACCESSIBLE?,L
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WHO-CARES:ANY:0:0,N
|
|
RANDOM WHO-CARES-LENGTH >N
|
|
GET WHO-CARES-VERB,N
|
|
ICALL HE-SHE-IT,PRSO,TRUE-VALUE,STACK
|
|
GET WHO-CARES-TBL,N
|
|
PRINT STACK
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT PRE-SAIM:ANY:0:0
|
|
ICALL PERFORM,V?AIM,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SAIM:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-AIM:ANY:0:0
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SANALYZE:ANY:0:0
|
|
ICALL PERFORM,V?ANALYZE,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SANALYZE:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-ANALYZE:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
ZERO? STACK \TRUE
|
|
FSET? PRSO,PERSONBIT \FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(Leave that to the police.)"
|
|
|
|
|
|
.FUNCT V-ANALYZE:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
PRINTR "How?"
|
|
?CCL3: FSET? PRSO,DOORBIT \?CCL5
|
|
CALL2 CHECK-DOOR,PRSO
|
|
RSTACK
|
|
?CCL5: ICALL HE-SHE-IT,PRSO,1,STR?114
|
|
PRINTR " normal."
|
|
|
|
|
|
.FUNCT V-ANSWER:ANY:0:0
|
|
ZERO? AWAITING-REPLY /?CCL3
|
|
GET P-LEXV,P-CONT
|
|
EQUAL? STACK,W?YES \?CCL6
|
|
ICALL2 PERFORM,V?YES
|
|
JUMP ?CND1
|
|
?CCL6: ICALL2 PERFORM,V?NO
|
|
JUMP ?CND1
|
|
?CCL3: ICALL1 NOT-CLEAR-WHOM
|
|
?CND1: SET 'P-CONT,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-REPLY:ANY:0:0
|
|
SET 'P-CONT,FALSE-VALUE
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
FSET? PRSO,MUNGBIT /?CCL3
|
|
CALL1 WAITING-FOR-YOU-TO-SPEAK
|
|
RSTACK
|
|
?CCL3: CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WAITING-FOR-YOU-TO-SPEAK:ANY:0:0
|
|
ICALL HE-SHE-IT,PRSO,1,STR?109
|
|
PRINTR " to be waiting for you to speak."
|
|
|
|
|
|
.FUNCT V-ASK:ANY:0:0
|
|
ZERO? P-CONT /?CCL3
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
FSET? PRSO,MUNGBIT /?CCL3
|
|
SET 'WINNER,PRSO
|
|
SET 'QCONTEXT,PRSO
|
|
RETURN QCONTEXT
|
|
?CCL3: CALL1 V-ASK-ABOUT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-ASK:ANY:0:0
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,HERE /?CCL3
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK \?CCL3
|
|
ICALL2 NOT-HERE,PRSO
|
|
RETURN 2
|
|
?CCL3: EQUAL? PRSO,PLAYER /?CTR8
|
|
FSET? PRSO,PERSONBIT /?CCL9
|
|
?CTR8: EQUAL? PRSA,V?$CALL \?CCL14
|
|
ZERO? P-CONT \?CCL14
|
|
ICALL2 MISSING,STR?56
|
|
RETURN 2
|
|
?CCL14: EQUAL? PRSA,V?LISTEN /FALSE
|
|
ICALL2 WONT-HELP-TO-TALK-TO,PRSO
|
|
RETURN 2
|
|
?CCL9: CALL GRAB-ATTENTION,PRSO,PRSI
|
|
ZERO? STACK \FALSE
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT GRAB-ATTENTION:ANY:1:2,PERSON,OBJ,N,GT,ATT
|
|
FSET? PERSON,MUNGBIT \?CND1
|
|
GETP PERSON,P?LDESC
|
|
EQUAL? STACK,14 \?CCL5
|
|
ICALL TOO-BAD-BUT,PERSON,STR?115
|
|
RFALSE
|
|
?CCL5: ICALL TOO-BAD-BUT,PERSON,STR?116
|
|
RFALSE
|
|
?CND1: SET 'QCONTEXT,PERSON
|
|
GETP PERSON,P?LDESC
|
|
EQUAL? STACK,21 /TRUE
|
|
PUTP PERSON,P?LDESC,12
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-ASK-ABOUT:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
EQUAL? PRSO,PLAYER /?CCL3
|
|
PRINTI "A long silence tells you that"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTI " isn't interested in talking about"
|
|
IN? PRSI,ROOMS \?CCL8
|
|
PRINTI " that"
|
|
JUMP ?CND6
|
|
?CCL8: ICALL2 PRINT-THE,PRSI
|
|
?CND6: PRINTR "."
|
|
?CCL3: ICALL PERFORM,V?TELL,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT WONT-HELP-TO-TALK-TO:ANY:1:1,OBJ
|
|
PRINTI "You talk to"
|
|
ICALL2 PRINT-THE,OBJ
|
|
PRINTI " for a minute before you realize that"
|
|
ICALL2 HE-SHE-IT,OBJ
|
|
PRINTR " won't respond."
|
|
|
|
|
|
.FUNCT PRE-ASK-CONTEXT-ABOUT:ANY:0:1,V,P
|
|
ZERO? V \?CND1
|
|
SET 'V,V?ASK-ABOUT
|
|
?CND1: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL5
|
|
ICALL PERFORM,V,QCONTEXT,PRSO
|
|
RTRUE
|
|
?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /FALSE
|
|
ICALL TELL-I-ASSUME,P,STR?117
|
|
ICALL PERFORM,V,P,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-ASK-CONTEXT-ABOUT:ANY:0:0
|
|
CALL1 ARENT-TALKING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-ASK-FOR:ANY:0:0
|
|
PRINTI "Unsurprisingly,"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " doesn't oblige."
|
|
|
|
|
|
.FUNCT PRE-ASK-CONTEXT-FOR:ANY:0:0,P
|
|
LOC PRSO >P
|
|
FSET? P,PERSONBIT \?CCL3
|
|
ICALL PERFORM,V?ASK-FOR,P,PRSO
|
|
RTRUE
|
|
?CCL3: CALL2 PRE-ASK-CONTEXT-ABOUT,V?ASK-FOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-ASK-CONTEXT-FOR:ANY:0:0
|
|
CALL1 ARENT-TALKING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-ATTACK:ANY:0:0
|
|
CALL2 IKILL,STR?118
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-BRUSH:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \FALSE
|
|
EQUAL? P-PRSA-WORD,W?SCRAPE,W?SCRATCH /FALSE
|
|
SET 'PRSO,WINNER
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-BRUSH:ANY:0:0
|
|
ZERO? PRSI \?CCL3
|
|
CALL2 HELD?,TOOTHBRUSH
|
|
ZERO? STACK /?CCL6
|
|
PRINTI "(with the "
|
|
PRINTD TOOTHBRUSH
|
|
PRINTC 41
|
|
CRLF
|
|
ICALL PERFORM,V?BRUSH,PRSO,TOOTHBRUSH
|
|
RTRUE
|
|
?CCL6: PRINTI "You have nothing to brush"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " with."
|
|
?CCL3: EQUAL? PRSI,TOOTHBRUSH /?CCL8
|
|
PRINTI "With "
|
|
ICALL2 PRINTA,PRSI
|
|
PRINTR "!"
|
|
?CCL8: EQUAL? PRSO,TEETH /?CCL10
|
|
PRINTI "In general, "
|
|
PRINTD TOOTHBRUSH
|
|
PRINTR "es are meant for teeth."
|
|
?CCL10: PRINTR "Congratulations on your fine dental hygiene."
|
|
|
|
|
|
.FUNCT V-BUY:ANY:0:0
|
|
PRINTI "Sorry,"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " isn't for sale."
|
|
|
|
|
|
.FUNCT V-$CALL:ANY:0:0
|
|
ICALL2 UNSNOOZE,PRSO
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,HERE \?CCL6
|
|
CALL2 GRAB-ATTENTION,PRSO
|
|
ZERO? STACK /?PRG11
|
|
PUTP PRSO,P?LDESC,12
|
|
ICALL2 START-SENTENCE,PRSO
|
|
PRINTI " is "
|
|
GET LDESC-STRINGS,12
|
|
PRINT STACK
|
|
PRINTR "."
|
|
?PRG11: RETURN 2
|
|
?CCL6: CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
CALL2 MISSING,STR?56
|
|
RSTACK
|
|
|
|
|
|
.FUNCT UNSNOOZE:ANY:1:2,PER,NO-TELL?,RM,GT,C
|
|
GETP PER,P?LDESC >C
|
|
EQUAL? C,14 \FALSE
|
|
PUTP PER,P?LDESC,25
|
|
FCLEAR PER,MUNGBIT
|
|
CALL2 META-LOC,PER >RM
|
|
IN? PER,HERE \?CND5
|
|
ZERO? NO-TELL? \?CND5
|
|
ICALL HE-SHE-IT,PER,1
|
|
PRINTI " wakes up first. "
|
|
FSET? RM,ONBIT /?CND5
|
|
ICALL HE-SHE-IT,PER,1
|
|
PRINTI " turns on the light. "
|
|
?CND5: FSET RM,ONBIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-CHASTISE:ANY:0:0
|
|
EQUAL? PRSO,INTDIR /?CND1
|
|
PRINT I-ASSUME
|
|
PRINTI " Look at"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI ", not look in"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " nor look for"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " nor any other preposition.]"
|
|
CRLF
|
|
?CND1: ICALL PERFORM,V?EXAMINE,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-BOARD:ANY:0:0
|
|
IN? PRSO,ROOMS /?CTR2
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
?CTR2: CALL1 V-THROUGH
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,VEHBIT \?CCL7
|
|
IN? WINNER,PRSO \?CCL10
|
|
ICALL2 ALREADY,PLAYER
|
|
PRINTI "in"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR ".)"
|
|
?CCL10: MOVE WINNER,PRSO
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " now "
|
|
FSET? PRSO,SURFACEBIT \?CCL13
|
|
PRINTI "on"
|
|
JUMP ?CND11
|
|
?CCL13: PRINTI "in"
|
|
?CND11: ICALL2 PRINT-THE,PRSO
|
|
PRINTR "."
|
|
?CCL7: CALL2 YOU-CANT,STR?119
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-CLIMB-ON:ANY:0:0
|
|
ICALL PERFORM,V?SIT,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-CLIMB-UP:ANY:0:2,DIR,OBJ,X
|
|
ASSIGNED? 'DIR /?CND1
|
|
SET 'DIR,P?UP
|
|
?CND1: IN? PRSO,ROOMS \?CCL5
|
|
ICALL PERFORM,V?WALK-TO,PRSO
|
|
RTRUE
|
|
?CCL5: GETPT HERE,DIR
|
|
ZERO? STACK /?CCL7
|
|
ICALL2 DO-WALK,DIR
|
|
RTRUE
|
|
?CCL7: ZERO? OBJ \?CCL9
|
|
CALL2 YOU-CANT,STR?73
|
|
RSTACK
|
|
?CCL9: CALL1 HAR-HAR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-CLIMB-DOWN:ANY:0:0
|
|
CALL2 V-CLIMB-UP,P?DOWN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-CLOSE:ANY:0:0
|
|
FSET? PRSO,CONTBIT /?CCL3
|
|
FSET? PRSO,DOORBIT /?CCL3
|
|
EQUAL? PRSO,WINDOW /?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,DOORBIT /?CTR7
|
|
EQUAL? PRSO,WINDOW \?CCL8
|
|
?CTR7: FSET? PRSO,OPENBIT \?CCL13
|
|
CALL OKAY,PRSO,STR?98
|
|
RSTACK
|
|
?CCL13: CALL ALREADY,PRSO,STR?98
|
|
RSTACK
|
|
?CCL8: FSET? PRSO,SURFACEBIT /?CCL16
|
|
GETP PRSO,P?CAPACITY
|
|
ZERO? STACK /?CCL16
|
|
FSET? PRSO,OPENBIT \?CCL21
|
|
CALL OKAY,PRSO,STR?98
|
|
RSTACK
|
|
?CCL21: CALL ALREADY,PRSO,STR?98
|
|
RSTACK
|
|
?CCL16: CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-COUNT:ANY:0:0
|
|
CALL1 IMPOSSIBLE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-DIAGNOSE:ANY:0:0
|
|
ZERO? PRSO /?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTR " wide awake and in good health."
|
|
|
|
|
|
.FUNCT TELL-NOT-IN:ANY:1:1,OBJ
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " not in"
|
|
ICALL2 HIM-HER-IT,OBJ
|
|
PRINTR "!)"
|
|
|
|
|
|
.FUNCT V-DRINK:ANY:0:0
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-DROP:ANY:0:0,L
|
|
CALL1 IDROP
|
|
ZERO? STACK /FALSE
|
|
CALL FIND-FLAG-HERE,VEHBIT,PRSO >L
|
|
ZERO? L /?CCL6
|
|
MOVE PRSO,L
|
|
ICALL2 OKAY,PRSO
|
|
PRINTI " is now on"
|
|
ICALL2 PRINT-THE,L
|
|
PRINTR "."
|
|
?CCL6: CALL1 GROUND-DESC
|
|
CALL OKAY,PRSO,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GROUND-DESC:ANY:0:0
|
|
CALL2 OUTSIDE?,HERE
|
|
ZERO? STACK \?CCL3
|
|
RETURN STR?120
|
|
?CCL3: RETURN STR?121
|
|
|
|
|
|
.FUNCT PRE-EAT:ANY:0:0
|
|
EQUAL? PRSO,FALSE-VALUE,ROOMS \FALSE
|
|
CALL2 META-LOC,DINNER
|
|
EQUAL? STACK,HERE \?CCL6
|
|
ICALL PERFORM,PRSA,DINNER
|
|
RTRUE
|
|
?CCL6: ICALL2 NOT-HERE,DINNER
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-EAT:ANY:0:0
|
|
PRINTI "Stuffing"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " in your mouth would do little to help at this point."
|
|
|
|
|
|
.FUNCT V-ENJOY:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
CALL1 V-KISS
|
|
RSTACK
|
|
?CCL3: PRINTI "Not difficult at all, considering how enjoyable"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " is."
|
|
|
|
|
|
.FUNCT PRE-THROUGH:ANY:0:0,VEH
|
|
EQUAL? PRSO,GLOBAL-HERE,ROOMS \FALSE
|
|
CALL FIND-IN,HERE,VEHBIT >VEH
|
|
ZERO? VEH /?CCL6
|
|
ICALL PERFORM,V?BOARD,VEH
|
|
RTRUE
|
|
?CCL6: ICALL2 DO-WALK,P?IN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-THROUGH:ANY:0:0,RM,DIR
|
|
CALL NOUN-USED?,PRSO,W?DOOR
|
|
ZERO? STACK /?CCL3
|
|
FSET? PRSO,OPENBIT /?CTR2
|
|
CALL WALK-THRU-DOOR?,FALSE-VALUE,PRSO,FALSE-VALUE
|
|
ZERO? STACK /?CCL3
|
|
?CTR2: CALL DOOR-ROOM,HERE,PRSO >RM
|
|
ZERO? RM /?CCL10
|
|
CALL2 GOTO,RM
|
|
ZERO? STACK \FALSE
|
|
?CCL10: CALL1 V-FOO
|
|
RSTACK
|
|
?CCL3: IN? PRSO,ROOMS \?CCL14
|
|
EQUAL? PRSO,HERE \?CCL17
|
|
ICALL1 WALK-WITHIN-ROOM
|
|
RTRUE
|
|
?CCL17: CALL SEE-INTO?,PRSO,FALSE-VALUE
|
|
ZERO? STACK /?CCL19
|
|
ICALL2 GOTO,PRSO
|
|
RTRUE
|
|
?CCL19: ICALL PERFORM,V?WALK-TO,PRSO
|
|
RTRUE
|
|
?CCL14: FSET? PRSO,VEHBIT \?CCL21
|
|
CALL PERFORM,V?BOARD,PRSO
|
|
RSTACK
|
|
?CCL21: FSET? PRSO,PERSONBIT \?CCL24
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL24: FSET? PRSO,TAKEBIT /?CCL26
|
|
ICALL HE-SHE-IT,WINNER,1,STR?122
|
|
PRINTI " into"
|
|
ICALL2 PRINT-THE,PRSO
|
|
ICALL2 THIS-IS-IT,PRSO
|
|
PRINTI " trying to go through"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL26: IN? PRSO,WINNER \?CCL28
|
|
ICALL PERFORM,V?EXAMINE,EYES
|
|
RTRUE
|
|
?CCL28: CALL1 HAR-HAR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-EXAMINE:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-EXAMINE:ANY:0:0,TXT
|
|
EQUAL? PRSO,PSEUDO-OBJECT /?CCL2
|
|
CALL NOUN-USED?,PRSO,W?DOOR
|
|
ZERO? STACK /?CND1
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK /?CND1
|
|
?CCL2: SET 'TXT,TRUE-VALUE
|
|
?CND1: EQUAL? PRSO,INTDIR \?CCL9
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(If you want to see what's there, go there!)"
|
|
?CCL9: EQUAL? PRSO,LIGHT-GLOBAL /?CTR10
|
|
EQUAL? PRSO,WALL,EARS,TEETH /?CTR10
|
|
EQUAL? PRSO,EYES,HEAD,HANDS \?CCL11
|
|
?CTR10: CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
?CCL11: IN? PRSO,GLOBAL-OBJECTS \?CCL16
|
|
ICALL2 NOT-HERE,PRSO
|
|
RTRUE
|
|
?CCL16: IN? PRSO,ROOMS \?CCL18
|
|
ZERO? TXT \?CCL18
|
|
CALL2 ROOM-PEEK,PRSO
|
|
RSTACK
|
|
?CCL18: CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,HERE /?CCL22
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK \?CCL22
|
|
ZERO? TXT \?CCL22
|
|
CALL TOO-BAD-BUT,PRSO,STR?123
|
|
RSTACK
|
|
?CCL22: GETP PRSO,P?TEXT >TXT
|
|
ZERO? TXT /?CCL27
|
|
PRINT TXT
|
|
CRLF
|
|
RTRUE
|
|
?CCL27: FSET? PRSO,DOORBIT \?CCL29
|
|
CALL2 CHECK-DOOR,PRSO
|
|
RSTACK
|
|
?CCL29: FSET? PRSO,CONTBIT /?CTR30
|
|
FSET? PRSO,SURFACEBIT \?CCL31
|
|
?CTR30: CALL1 V-LOOK-INSIDE
|
|
RSTACK
|
|
?CCL31: CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NOTHING-SPECIAL:ANY:0:0
|
|
PRINTI "You see nothing special about"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT GLOBAL-IN?:ANY:2:2,OBJ1,OBJ2,TEE
|
|
EQUAL? OBJ1,OBJ2 /TRUE
|
|
GETPT OBJ2,P?GLOBAL >TEE
|
|
ZERO? TEE /FALSE
|
|
PTSIZE TEE
|
|
DIV STACK,2
|
|
INTBL? OBJ1,TEE,STACK /?CND1
|
|
?CND1: RSTACK
|
|
|
|
|
|
.FUNCT V-FAINT:ANY:0:0
|
|
PRINTI "You doze for several minutes. "
|
|
CALL1 V-WAIT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-FILL:ANY:0:0
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-FIND:ANY:0:0,?TMP1
|
|
EQUAL? PRSO,PLAYER /FALSE
|
|
FSET? PRSO,SECRETBIT \?CCL5
|
|
FSET? PRSO,SEENBIT /?CCL5
|
|
CALL1 NO-FUN
|
|
RSTACK
|
|
?CCL5: IN? PRSO,ROOMS \?CCL9
|
|
EQUAL? PRSO,HERE \?CCL12
|
|
CALL ALREADY,WINNER,STR?124
|
|
RSTACK
|
|
?CCL12: ICALL PERFORM,V?WALK-TO,PRSO
|
|
RTRUE
|
|
?CCL9: FSET? PRSO,PERSONBIT \FALSE
|
|
CALL2 META-LOC,WINNER >?TMP1
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? ?TMP1,STACK \?CCL18
|
|
FSET? PRSO,NDESCBIT /?CCL18
|
|
ICALL1 BITE-YOU
|
|
RTRUE
|
|
?CCL18: CALL1 FOLLOW-LOC?
|
|
ZERO? STACK \TRUE
|
|
ICALL2 WHO-KNOWS?,PRSO
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT BITE-YOU:ANY:0:0
|
|
PRINTI "If"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTI " were any closer,"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTR "'d bite you!"
|
|
|
|
|
|
.FUNCT FAR-AWAY?:ANY:1:1,L
|
|
EQUAL? L,GLOBAL-OBJECTS /TRUE
|
|
FSET? L,SECRETBIT \?CND1
|
|
FSET? L,SEENBIT \TRUE
|
|
?CND1: FSET? HERE,SECRETBIT \?PRD10
|
|
FSET? L,SECRETBIT \?CCL8
|
|
?PRD10: FSET? HERE,SECRETBIT /FALSE
|
|
FSET? L,SECRETBIT \FALSE
|
|
?CCL8: CALL SEE-INTO?,L,FALSE-VALUE
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-FIND:ANY:0:0,L
|
|
LOC PRSO >L
|
|
EQUAL? PRSO,HANDS,HEAD,EARS /?CTR2
|
|
EQUAL? PRSO,TEETH,EYES \?CCL3
|
|
?CTR2: PRINTI "Are you sure"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " is lost?"
|
|
?CCL3: CALL2 HELD?,PRSO
|
|
ZERO? STACK /?CCL7
|
|
PRINTR "You have it!"
|
|
?CCL7: FSET? L,PERSONBIT \?CCL9
|
|
CALL2 VISIBLE?,L
|
|
ZERO? STACK /?CCL9
|
|
PRINTI "As far as you can tell,"
|
|
ICALL2 PRINT-THE,L
|
|
ICALL2 THIS-IS-IT,L
|
|
PRINTR " has it."
|
|
?CCL9: CALL2 VISIBLE?,PRSO
|
|
ZERO? STACK /?CCL13
|
|
PRINTR "Right in front of you."
|
|
?CCL13: FSET? PRSO,SEENBIT /?CCL16
|
|
CALL NOT-HERE,PRSO,TRUE-VALUE
|
|
RSTACK
|
|
?CCL16: EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CCL19
|
|
PRINTR "It's around somewhere."
|
|
?CCL19: CALL2 META-LOC,PRSO
|
|
CALL2 FAR-AWAY?,STACK
|
|
ZERO? STACK /?CCL22
|
|
PRINTR "It's far away from here."
|
|
?CCL22: FSET? L,SURFACEBIT /?CTR23
|
|
FSET? L,CONTBIT /?CTR23
|
|
IN? L,ROOMS \?CCL24
|
|
?CTR23: ICALL2 THIS-IS-IT,L
|
|
PRINTI "It's probably "
|
|
FSET? L,SURFACEBIT \?CCL30
|
|
PRINTI "on"
|
|
JUMP ?CND28
|
|
?CCL30: PRINTI "in"
|
|
?CND28: ICALL2 PRINT-THE,L
|
|
PRINTR "."
|
|
?CCL24: PRINTR "You'll have to do that yourself."
|
|
|
|
|
|
.FUNCT NO-FUN:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(If it's that easy, it spoils the fun!)"
|
|
|
|
|
|
.FUNCT TELL-LOCATION:ANY:0:0,DIR
|
|
IN? PLAYER,HERE /?CND1
|
|
PRINTI "sitting "
|
|
?CND1: FSET? HERE,SURFACEBIT \?CCL5
|
|
PRINTI "on"
|
|
JUMP ?CND3
|
|
?CCL5: PRINTI "in"
|
|
?CND3: ICALL2 PRINT-THE,HERE
|
|
PRINTC 46
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-FIX:ANY:0:0
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
|
|
|
|
.FUNCT FOLLOW-LOC?:ANY:0:0,L
|
|
GETP PRSO,P?CHARACTER >L
|
|
GET FOLLOW-LOC,L >L
|
|
ZERO? L /FALSE
|
|
PRINTI "The last you knew,"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTI " was "
|
|
FSET? L,SURFACEBIT \?CCL6
|
|
PRINTI "on"
|
|
JUMP ?CND4
|
|
?CCL6: PRINTI "in"
|
|
?CND4: ICALL2 PRINT-THE,L
|
|
PRINTI ".
|
|
"
|
|
RETURN L
|
|
|
|
|
|
.FUNCT V-FOLLOW:ANY:0:0,L
|
|
EQUAL? PRSO,WINNER \?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,PERSONBIT /?CCL5
|
|
CALL1 IMPOSSIBLE
|
|
RSTACK
|
|
?CCL5: CALL2 META-LOC,PRSO
|
|
EQUAL? HERE,STACK \?CCL8
|
|
PRINTI "You're in the same place as"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTR "!"
|
|
?CCL8: ICALL2 WHO-KNOWS?,PRSO
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-FOO:ANY:0:0
|
|
PRINTR "[Foo!! This is a bug!!]"
|
|
|
|
|
|
.FUNCT V-FOOTNOTE:ANY:0:0
|
|
EQUAL? PRSO,INTNUM /?CCL3
|
|
PRINTR "Specify a number, as in ""FOOTNOTE 6."""
|
|
?CCL3: EQUAL? P-NUMBER,11 \?CCL5
|
|
SET 'AWAITING-REPLY,14
|
|
ICALL QUEUE,I-REPLY,2
|
|
PRINTR "Isn't it fun reading through all the footnotes?"
|
|
?CCL5: EQUAL? P-NUMBER,12 \?CCL7
|
|
PRINTR "This is the famous recursive footnote (Footnote 12)."
|
|
?CCL7: EQUAL? P-NUMBER,14 \?CCL9
|
|
PRINT GUIDE-NAME
|
|
PRINTI " is also the name of a terrific work of interactive fiction by Douglas Adams and S. Eric Meretzky."
|
|
PRINT ALREADY-KNOW-THAT
|
|
CRLF
|
|
RTRUE
|
|
?CCL9: PRINTI "There is no Footnote "
|
|
PRINTN P-NUMBER
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT I-REPLY:ANY:0:0
|
|
SET 'AWAITING-REPLY,FALSE-VALUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PRE-GIVE:ANY:0:0
|
|
EQUAL? PRSI,PLAYER /FALSE
|
|
CALL2 NOT-HOLDING?,PRSO
|
|
ZERO? STACK \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-GIVE:ANY:0:0
|
|
ZERO? PRSI \?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: FSET? PRSI,PERSONBIT /?CCL5
|
|
ICALL HE-SHE-IT,WINNER,1
|
|
PRINTI " can't give "
|
|
ICALL2 PRINTA,PRSO
|
|
PRINTI " to "
|
|
ICALL2 PRINTA,PRSI
|
|
PRINTR "!"
|
|
?CCL5: EQUAL? PRSI,PLAYER \?CCL7
|
|
ICALL PERFORM,V?TAKE,PRSO
|
|
RTRUE
|
|
?CCL7: PRINTI "Politely,"
|
|
ICALL2 PRINT-THE,PRSI
|
|
PRINTR " refuses your offer."
|
|
|
|
|
|
.FUNCT PRE-SGIVE:ANY:0:0,X
|
|
ICALL PERFORM,V?GIVE,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SGIVE:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TELL-I-ASSUME:ANY:1:2,OBJ,PRON
|
|
FSET? PRON,TOUCHBIT /FALSE
|
|
EQUAL? OPRSO,OBJ /FALSE
|
|
FSET PRON,TOUCHBIT
|
|
PRINT I-ASSUME
|
|
PRINTC 32
|
|
ICALL2 TELL-THE,OBJ
|
|
PRINTR ".]"
|
|
|
|
|
|
.FUNCT PRE-HELLO:ANY:0:0,P,WORD
|
|
EQUAL? P-PRSA-WORD,W?HELLO,W?HI \?CND1
|
|
SET 'WORD,STR?126
|
|
?CND1: EQUAL? PRSO,ROOMS /?CCL5
|
|
FSET? PRSO,PERSONBIT /?CCL8
|
|
ICALL2 WONT-HELP-TO-TALK-TO,PRSO
|
|
RTRUE
|
|
?CCL8: FSET? PRSO,MUNGBIT \?CCL11
|
|
ICALL PERFORM,V?ALARM,PRSO
|
|
RTRUE
|
|
?CCL11: ZERO? WORD /FALSE
|
|
PRINT I-ASSUME
|
|
PRINT WORD
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI ".]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL5: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL15
|
|
PRINT I-ASSUME
|
|
PRINTC 32
|
|
PRINTD QCONTEXT
|
|
PRINTI ".]"
|
|
CRLF
|
|
ICALL PERFORM,PRSA,QCONTEXT
|
|
RTRUE
|
|
?CCL15: EQUAL? WINNER,PLAYER \?CCL17
|
|
CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /?CCL17
|
|
PRINT I-ASSUME
|
|
PRINTC 32
|
|
PRINTD P
|
|
PRINTI ".]"
|
|
CRLF
|
|
ICALL PERFORM,PRSA,P
|
|
RTRUE
|
|
?CCL17: CALL1 NOT-CLEAR-WHOM
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-HELLO:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
FSET? PRSO,MUNGBIT /?CCL6
|
|
PRINTR """Hello to you too."""
|
|
?CCL6: CALL2 WONT-HELP-TO-TALK-TO,PRSO
|
|
RSTACK
|
|
?CCL3: CALL1 NOT-CLEAR-WHOM
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-HELP:ANY:0:0
|
|
EQUAL? PRSO,FALSE-VALUE,PLAYER \?CCL3
|
|
CALL1 HELP-TEXT
|
|
RSTACK
|
|
?CCL3: CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
|
|
|
|
.FUNCT HELP-TEXT:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "[You'll find plenty of help in your "
|
|
PRINTD GAME
|
|
PRINTR " package.
|
|
If you're really stuck, you can order a complete map and InvisiClues (TM) hint booklet from your dealer or via mail with the form in your package.]"
|
|
|
|
|
|
.FUNCT V-HIDE:ANY:0:0
|
|
PRINTR "There's no place to hide here."
|
|
|
|
|
|
.FUNCT V-KILL:ANY:0:0
|
|
PRINTR "You are obviously letting things get to you. You should learn to relax a little."
|
|
|
|
|
|
.FUNCT IKILL:ANY:0:1,STR
|
|
ZERO? PRSO \?CCL3
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(There's nothing here to "
|
|
PRINT STR
|
|
PRINTR ".)"
|
|
?CCL3: ZERO? PRSI \?CCL5
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINT YOU-DIDNT-SAY-W
|
|
PRINTI "hat to "
|
|
PRINT STR
|
|
ICALL2 PRINT-THE,PRSO
|
|
FSET? PRSO,WEAPONBIT \?CCL8
|
|
PRINTI " at"
|
|
JUMP ?CND6
|
|
?CCL8: PRINTI " with"
|
|
?CND6: PRINTR ".]"
|
|
?CCL5: FSET? PRSO,PERSONBIT /?CCL10
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL10: PRINT NO-VIOLENCE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-KISS:ANY:0:0,X
|
|
EQUAL? PRSO,PLAYER \?CCL3
|
|
PRINTI "You kiss "
|
|
PRINTD PLAYER
|
|
PRINTR " for a minute. Yuk!"
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CCL5
|
|
FSET? PRSO,MUNGBIT /?CCL5
|
|
CALL1 FACE-RED
|
|
RSTACK
|
|
?CCL5: PRINTR "What a (ahem!) strange idea!"
|
|
|
|
|
|
.FUNCT V-KNOCK:ANY:0:0,P
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
FSET? PRSO,OPENBIT \?CCL7
|
|
PRINTR "It's open!"
|
|
?CCL7: PRINTR "Nobody's home."
|
|
?CCL3: CALL2 HACK-HACK,STR?129
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LAMP-OFF:ANY:0:0
|
|
FSET? PRSO,LIGHTBIT /?CCL3
|
|
CALL2 YOU-CANT,STR?130
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,ONBIT /?CCL5
|
|
CALL ALREADY,PRSO,STR?102
|
|
RSTACK
|
|
?CCL5: CALL OKAY,PRSO,STR?102
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LAMP-ON:ANY:0:0
|
|
FSET? PRSO,ONBIT \?CCL3
|
|
CALL ALREADY,PRSO,STR?101
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,LIGHTBIT \?CCL5
|
|
CALL OKAY,PRSO,STR?101
|
|
RSTACK
|
|
?CCL5: FSET? PRSO,PERSONBIT \?CCL7
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL7: CALL2 YOU-CANT,STR?131
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LEAP:ANY:0:0
|
|
ZERO? PRSO /?CCL3
|
|
EQUAL? PRSO,INTDIR /?CCL3
|
|
ICALL1 IMPOSSIBLE
|
|
RTRUE
|
|
?CCL3: CALL1 V-SKIP
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SKIP:ANY:0:0
|
|
CALL1 WHEE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WHEE:ANY:0:0,X
|
|
RANDOM 5 >X
|
|
EQUAL? 1,X \?CCL3
|
|
PRINTR "Very good. Now you can go to the second grade."
|
|
?CCL3: EQUAL? 2,X \?CCL5
|
|
PRINTR "I hope you enjoyed that more than I did."
|
|
?CCL5: EQUAL? 3,X \?CCL7
|
|
PRINTI "Are you enjoying "
|
|
PRINTD PLAYER
|
|
PRINTR "?"
|
|
?CCL7: EQUAL? 4,X \?CCL9
|
|
PRINTR "Wheeeeeeeeee!!!!!"
|
|
?CCL9: PRINTR "Do you expect someone to applaud?"
|
|
|
|
|
|
.FUNCT V-LEAVE:ANY:0:0,GT
|
|
EQUAL? WINNER,FOLLOWER \?CND1
|
|
SET 'FOLLOWER,0
|
|
?CND1: EQUAL? PRSO,FALSE-VALUE,ROOMS,HERE \?CCL5
|
|
ICALL2 DO-WALK,P?OUT
|
|
PUTP WINNER,P?LDESC,9
|
|
RTRUE
|
|
?CCL5: LOC PRSO
|
|
EQUAL? STACK,PLAYER \?CCL7
|
|
ICALL PERFORM,V?DROP,PRSO
|
|
RTRUE
|
|
?CCL7: LOC WINNER
|
|
EQUAL? STACK,PRSO \?CCL9
|
|
ICALL PERFORM,V?DISEMBARK,PRSO
|
|
RTRUE
|
|
?CCL9: ICALL2 TELL-NOT-IN,PRSO
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT PRE-LIE:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LIE:ANY:0:0
|
|
CALL2 V-SIT,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-LISTEN:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
GETP PRSO,P?LDESC
|
|
EQUAL? STACK,14 \?CCL3
|
|
PRINTR """Zzzzzzz..."""
|
|
?CCL3: CALL1 PRE-ASK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LISTEN:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
FSET? PRSO,MUNGBIT /?CCL3
|
|
ICALL1 WAITING-FOR-YOU-TO-SPEAK
|
|
RTRUE
|
|
?CCL3: PRINTI "At the moment,"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " makes no sound."
|
|
|
|
|
|
.FUNCT V-LOCK:ANY:0:0
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LOOK:ANY:0:0
|
|
CALL2 DESCRIBE-ROOM,TRUE-VALUE
|
|
ZERO? STACK /FALSE
|
|
CALL1 DESCRIBE-OBJECTS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LOOK-BEHIND:ANY:0:0
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
FSET? PRSO,OPENBIT /?CCL3
|
|
CALL TOO-BAD-BUT,PRSO,STR?98
|
|
RSTACK
|
|
?CCL3: PRINTI "There's nothing behind"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-LOOK-DOWN:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
ICALL PERFORM,V?EXAMINE,FLOOR
|
|
RTRUE
|
|
?CCL3: ICALL PERFORM,V?LOOK-INSIDE,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRE-LOOK-INSIDE:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LOOK-INSIDE:ANY:0:1,DIR,RM
|
|
ASSIGNED? 'DIR /?CND1
|
|
SET 'DIR,P?IN
|
|
?CND1: EQUAL? PRSO,ROOMS \?CND3
|
|
EQUAL? DIR,P?OUT \?CCL7
|
|
CALL GLOBAL-IN?,WINDOW,HERE
|
|
ZERO? STACK /?CND3
|
|
ICALL PERFORM,PRSA,WINDOW,PRSI
|
|
RTRUE
|
|
?CCL7: SET 'RM,P-IT-OBJECT
|
|
FSET? RM,CONTBIT /?CCL11
|
|
CALL FIND-FLAG-LG,HERE,CONTBIT >RM
|
|
ZERO? RM \?CCL11
|
|
SET 'RM,WINDOW
|
|
CALL GLOBAL-IN?,RM,HERE
|
|
ZERO? STACK \?CCL11
|
|
CALL FIND-FLAG-LG,HERE,DOORBIT >RM
|
|
ZERO? RM /?CND3
|
|
?CCL11: ICALL2 TELL-I-ASSUME,RM
|
|
ICALL PERFORM,PRSA,RM,PRSI
|
|
RTRUE
|
|
?CND3: EQUAL? PRSO,GLOBAL-HERE \?CCL18
|
|
ICALL2 PERFORM,V?LOOK
|
|
RTRUE
|
|
?CCL18: IN? PRSO,ROOMS \?CCL20
|
|
CALL NOUN-USED?,PRSO,W?DOOR
|
|
ZERO? STACK \?CCL20
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK \?CTR19
|
|
CALL SEE-INTO?,PRSO,FALSE-VALUE
|
|
ZERO? STACK /?CCL20
|
|
?CTR19: CALL2 ROOM-PEEK,PRSO
|
|
RSTACK
|
|
?CCL20: CALL2 V-LOOK-THROUGH,TRUE-VALUE
|
|
ZERO? STACK \TRUE
|
|
FSET? PRSO,CONTBIT /?CTR28
|
|
FSET? PRSO,SURFACEBIT \?CCL29
|
|
?CTR28: CALL SEE-INSIDE?,PRSO,TRUE-VALUE
|
|
ZERO? STACK \?CND32
|
|
ICALL FIRST-YOU,STR?103,PRSO
|
|
?CND32: FIRST? PRSO \?CCL36
|
|
PRINTI "You can see"
|
|
ICALL2 PRINT-CONTENTS,PRSO
|
|
FSET? PRSO,SURFACEBIT \?CCL39
|
|
PRINTI " on"
|
|
JUMP ?CND37
|
|
?CCL39: PRINTI " inside"
|
|
?CND37: ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL36: FSET? PRSO,SURFACEBIT \?CCL41
|
|
PRINTI "There's nothing on"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
IN? PLAYER,PRSO \?CND42
|
|
PRINTI " except you"
|
|
?CND42: PRINTR "."
|
|
?CCL41: CALL TOO-BAD-BUT,PRSO,STR?132
|
|
RSTACK
|
|
?CCL29: EQUAL? DIR,P?IN \?CCL45
|
|
CALL2 YOU-CANT,STR?133
|
|
RSTACK
|
|
?CCL45: CALL2 YOU-CANT,STR?134
|
|
RSTACK
|
|
|
|
|
|
.FUNCT FIRST-YOU:ANY:1:3,STR,OBJ,OBJ2
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,TRUE-VALUE,STR
|
|
ZERO? OBJ /?CND1
|
|
ICALL2 PRINT-THE,OBJ
|
|
EQUAL? STR,STR?103 \?CND3
|
|
FSET OBJ,OPENBIT
|
|
?CND3: ZERO? OBJ2 /?CND1
|
|
PRINTI " from"
|
|
ICALL2 PRINT-THE,OBJ2
|
|
?CND1: PRINTR " first.)"
|
|
|
|
|
|
.FUNCT V-LOOK-THROUGH:ANY:0:1,INSIDE,RM
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
FSET? PRSO,OPENBIT /?CTR5
|
|
FSET? PRSO,TRANSBIT \?CCL6
|
|
?CTR5: CALL DOOR-ROOM,HERE,PRSO >RM
|
|
ZERO? RM /?CCL11
|
|
CALL ROOM-PEEK,RM,TRUE-VALUE
|
|
RSTACK
|
|
?CCL11: CALL1 NO-BEYOND
|
|
RSTACK
|
|
?CCL6: CALL TOO-BAD-BUT,PRSO,STR?98
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSO,WINDOW \?CCL13
|
|
CALL1 NO-BEYOND
|
|
RSTACK
|
|
?CCL13: FSET? PRSO,PERSONBIT \?CCL16
|
|
PRINTR "You forgot to bring your X-ray glasses."
|
|
?CCL16: ZERO? INSIDE \FALSE
|
|
FSET? PRSO,TRANSBIT \?CCL20
|
|
PRINTR "Everything looks bigger."
|
|
?CCL20: CALL2 YOU-CANT,STR?135
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NO-BEYOND:ANY:0:0
|
|
PRINTI "You can't tell what's beyond"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT ROOM-PEEK:ANY:1:2,RM,SAFE,X,OHERE,OLIT,TXT
|
|
EQUAL? RM,HERE \?CCL3
|
|
ICALL1 V-LOOK
|
|
RTRUE
|
|
?CCL3: ZERO? SAFE \?CCL5
|
|
CALL2 SEE-INTO?,RM
|
|
ZERO? STACK /FALSE
|
|
?CCL5: SET 'OHERE,HERE
|
|
SET 'OLIT,LIT
|
|
SET 'HERE,RM
|
|
ICALL2 MAKE-ALL-PEOPLE,-12
|
|
CALL1 LIT? >LIT
|
|
PRINTI "You peer "
|
|
FSET? RM,SURFACEBIT \?CCL10
|
|
PRINTI "at"
|
|
JUMP ?CND8
|
|
?CCL10: PRINTI "into"
|
|
?CND8: ICALL2 HIM-HER-IT,RM
|
|
PRINTC 58
|
|
CRLF
|
|
CALL1 DESCRIBE-OBJECTS
|
|
ZERO? STACK /?CCL13
|
|
SET 'X,TRUE-VALUE
|
|
JUMP ?CND11
|
|
?CCL13: GETP RM,P?LDESC >TXT
|
|
ZERO? TXT /?CND11
|
|
SET 'X,TRUE-VALUE
|
|
PRINT TXT
|
|
CRLF
|
|
?CND11: ZERO? X \?CND15
|
|
PRINTI "You can't see anything suspicious."
|
|
CRLF
|
|
?CND15: SET 'HERE,OHERE
|
|
SET 'LIT,OLIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SEE-INTO?:ANY:1:3,THERE,TELL?,IGNORE-DOOR,P,L,TBL,O
|
|
ASSIGNED? 'TELL? /?CND1
|
|
SET 'TELL?,TRUE-VALUE
|
|
?CND1: SET 'P,0
|
|
?PRG3: NEXTP HERE,P >P
|
|
ZERO? P /?CCL6
|
|
LESS? P,LOW-DIRECTION \?CND5
|
|
?CCL6: ZERO? TELL? /FALSE
|
|
ICALL1 TELL-CANT-FIND
|
|
RFALSE
|
|
?CND5: GETPT HERE,P >TBL
|
|
PTSIZE TBL >L
|
|
EQUAL? L,UEXIT \?CCL13
|
|
GET TBL,REXIT
|
|
EQUAL? STACK,THERE \?PRG3
|
|
RTRUE
|
|
?CCL13: EQUAL? L,DEXIT \?CCL17
|
|
GET TBL,REXIT
|
|
EQUAL? STACK,THERE \?PRG3
|
|
GET TBL,DEXITOBJ
|
|
FSET? STACK,OPENBIT /TRUE
|
|
GET TBL,DEXITOBJ
|
|
CALL WALK-THRU-DOOR?,TBL,STACK,FALSE-VALUE
|
|
ZERO? STACK \TRUE
|
|
ZERO? IGNORE-DOOR \TRUE
|
|
ZERO? TELL? /FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(The door to that room is closed.)"
|
|
CRLF
|
|
RFALSE
|
|
?CCL17: EQUAL? L,CEXIT \?PRG3
|
|
GET TBL,REXIT
|
|
EQUAL? STACK,THERE \?PRG3
|
|
GETB TBL,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK \TRUE
|
|
ZERO? TELL? /FALSE
|
|
ICALL1 TELL-CANT-FIND
|
|
RFALSE
|
|
|
|
|
|
.FUNCT TELL-CANT-FIND:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(That place isn't close enough.)"
|
|
|
|
|
|
.FUNCT V-LOOK-ON:ANY:0:0
|
|
FSET? PRSO,SURFACEBIT \?CCL3
|
|
CALL1 V-LOOK-INSIDE
|
|
RSTACK
|
|
?CCL3: PRINTI "There's no good surface on"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-LOOK-OUTSIDE:ANY:0:0
|
|
CALL2 V-LOOK-INSIDE,P?OUT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-LOOK-UNDER:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LOOK-UNDER:ANY:0:0
|
|
EQUAL? PRSO,TEETH,EARS /?CTR2
|
|
EQUAL? PRSO,HEAD,HANDS,EYES \?CCL3
|
|
?CTR2: CALL1 WONT-HELP
|
|
RSTACK
|
|
?CCL3: CALL2 HELD?,PRSO
|
|
ZERO? STACK /?CCL7
|
|
PRINTI "You're "
|
|
FSET? PRSO,WORNBIT \?CCL10
|
|
PRINTI "wear"
|
|
JUMP ?CND8
|
|
?CCL10: PRINTI "hold"
|
|
?CND8: PRINTI "ing"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR "!"
|
|
?CCL7: FSET? PRSO,PERSONBIT \?CCL12
|
|
PRINTI "Nope. Nothing hiding under"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL12: LOC PRSO
|
|
EQUAL? STACK,HERE,LOCAL-GLOBALS \?CCL14
|
|
PRINTR "There's nothing there but dust."
|
|
?CCL14: PRINTR "That's not a bit useful."
|
|
|
|
|
|
.FUNCT V-LOOK-UP:ANY:0:0,HR
|
|
ZERO? PRSI /?CCL3
|
|
PRINTI "There's no information in"
|
|
ICALL2 PRINT-THE,PRSI
|
|
PRINTI " about"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR "."
|
|
?CCL3: EQUAL? PRSO,ROOMS \?CCL5
|
|
CALL2 OUTSIDE?,HERE
|
|
ZERO? STACK /?CCL8
|
|
ICALL PERFORM,V?EXAMINE,SKY
|
|
RTRUE
|
|
?CCL8: PRINTR "The ceiling is decorated with swirly lines and patterns."
|
|
?CCL5: CALL2 YOU-CANT,STR?136
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-MOVE:ANY:0:0
|
|
CALL2 HELD?,PRSO
|
|
ZERO? STACK /FALSE
|
|
PRINTR "Juggling isn't one of your talents."
|
|
|
|
|
|
.FUNCT V-MOVE:ANY:0:0
|
|
FSET? PRSO,TAKEBIT \?CCL3
|
|
PRINTI "Moving"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR " reveals nothing."
|
|
?CCL3: CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-MOVE-DIR:ANY:0:0
|
|
EQUAL? PRSI,INTDIR /FALSE
|
|
ICALL1 DONT-UNDERSTAND
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-MOVE-DIR:ANY:0:0
|
|
PRINTI "You can't move"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " in any particular "
|
|
PRINTD INTDIR
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-MUNG:ANY:0:0
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
ZERO? PRSI \?CCL3
|
|
FSET? PRSO,OPENBIT \?CCL8
|
|
PRINTR "You'd fly through the open door if you tried."
|
|
?CCL8: CALL2 UNLOCK-DOOR?,PRSO
|
|
ZERO? STACK /?CCL10
|
|
PRINTR "Why don't you just open it instead?"
|
|
?CCL10: CALL1 IF-SPY
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,PERSONBIT /?CCL12
|
|
CALL1 IF-SPY
|
|
RSTACK
|
|
?CCL12: CALL2 IKILL,STR?137
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-NOD:ANY:0:0
|
|
EQUAL? PRSO,ROOMS /?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: ZERO? AWAITING-REPLY /?CCL5
|
|
ICALL2 PERFORM,V?YES
|
|
RTRUE
|
|
?CCL5: ICALL PERFORM,V?HELLO,ROOMS
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-OPEN:ANY:0:0,F,STR
|
|
FSET? PRSO,CONTBIT /?CCL3
|
|
FSET? PRSO,DOORBIT /?CCL3
|
|
EQUAL? PRSO,WINDOW /?CCL3
|
|
CALL1 IMPOSSIBLE
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,DOORBIT /?CTR7
|
|
EQUAL? PRSO,WINDOW /?CTR7
|
|
GETP PRSO,P?CAPACITY
|
|
ZERO? STACK /?CCL8
|
|
?CTR7: FSET? PRSO,LOCKED \?CND12
|
|
CALL2 UNLOCK-DOOR?,PRSO
|
|
ZERO? STACK /?CCL16
|
|
FCLEAR PRSO,LOCKED
|
|
ICALL FIRST-YOU,STR?138,PRSO
|
|
?CND12: FSET? PRSO,OPENBIT \?CCL19
|
|
CALL ALREADY,PRSO,STR?103
|
|
RSTACK
|
|
?CCL16: ICALL TOO-BAD-BUT,PRSO,STR?104
|
|
RTRUE
|
|
?CCL19: FSET PRSO,OPENBIT
|
|
FSET? PRSO,DOORBIT /?CTR21
|
|
EQUAL? PRSO,WINDOW /?CTR21
|
|
FIRST? PRSO \?CTR21
|
|
FSET? PRSO,TRANSBIT \?CCL22
|
|
?CTR21: CALL OKAY,PRSO,STR?103
|
|
RSTACK
|
|
?CCL22: FIRST? PRSO >F \?CCL28
|
|
NEXT? F /?CCL28
|
|
GETP F,P?FDESC >STR
|
|
ZERO? STR /?CCL28
|
|
PRINTI "You open"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTC 46
|
|
CRLF
|
|
PRINT STR
|
|
CRLF
|
|
RTRUE
|
|
?CCL28: PRINTI "You open"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " and see"
|
|
ICALL2 PRINT-CONTENTS,PRSO
|
|
PRINTR "."
|
|
?CCL8: CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PANIC:ANY:0:0
|
|
PRINTR "Not surprised."
|
|
|
|
|
|
.FUNCT V-PLAY:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[Speaking of playing, you'd enjoy Infocom's other fictions, too!]"
|
|
|
|
|
|
.FUNCT V-POUR:ANY:0:0
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PULL-TOGETHER:ANY:0:0
|
|
CALL1 DONT-UNDERSTAND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUSH:ANY:0:0
|
|
CALL2 HACK-HACK,STR?139
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SPUT-ON:ANY:0:0
|
|
ICALL PERFORM,V?PUT,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRE-PUT:ANY:0:0
|
|
FCLEAR PRSO,WORNBIT
|
|
EQUAL? PRSO,HANDS,HEAD \?CCL3
|
|
ICALL1 WONT-HELP
|
|
RTRUE
|
|
?CCL3: IN? PRSO,GLOBAL-OBJECTS \?CCL5
|
|
ICALL2 NOT-HERE,PRSO
|
|
RTRUE
|
|
?CCL5: EQUAL? PRSI,FALSE-VALUE,GLOBAL-HERE,FLOOR /FALSE
|
|
IN? PRSI,GLOBAL-OBJECTS \?CCL9
|
|
ICALL2 NOT-HERE,PRSI
|
|
RTRUE
|
|
?CCL9: CALL HELD?,PRSI,PRSO
|
|
ZERO? STACK /FALSE
|
|
CALL YOU-CANT,STR?140,PRSI,STR?141
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUT:ANY:0:0
|
|
FSET? PRSI,SURFACEBIT /?CND1
|
|
FSET? PRSI,VEHBIT /?CND1
|
|
PRINTI "There's no good surface on"
|
|
ICALL2 HIM-HER-IT,PRSI
|
|
PRINTR "."
|
|
?CND1: CALL1 PUT-ON-OR-IN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TELL-FIND-NONE:ANY:1:2,STR,OBJ
|
|
PRINTI "You search for "
|
|
PRINT STR
|
|
ZERO? OBJ /?CND1
|
|
ICALL2 PRINT-THE,OBJ
|
|
?CND1: PRINTR " but find none."
|
|
|
|
|
|
.FUNCT PRE-PUT-IN:ANY:0:0
|
|
EQUAL? PRSI,PSEUDO-OBJECT \?CCL3
|
|
CALL1 PRE-PUT
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSI,HANDS,EYES \?CCL5
|
|
ICALL1 WONT-HELP
|
|
RETURN 2
|
|
?CCL5: FSET? PRSI,READBIT \?CCL9
|
|
ICALL1 WONT-HELP
|
|
RETURN 2
|
|
?CCL9: FSET? PRSI,CONTBIT /?CND1
|
|
ICALL TELL-FIND-NONE,STR?142,PRSI
|
|
RETURN 2
|
|
?CND1: FSET? PRSI,OPENBIT /?CND15
|
|
ICALL FIRST-YOU,STR?103,PRSI
|
|
?CND15: CALL1 PRE-PUT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUT-IN:ANY:0:0
|
|
FSET? PRSI,OPENBIT /?CND1
|
|
FSET? PRSI,VEHBIT /?CND1
|
|
FSET? PRSI,CONTBIT /?CTR6
|
|
FSET? PRSI,DOORBIT \?CCL7
|
|
?CTR6: ICALL TOO-BAD-BUT,PRSI,STR?98
|
|
RTRUE
|
|
?CCL7: PRINTI "You can't open"
|
|
ICALL2 HIM-HER-IT,PRSI
|
|
PRINTR "."
|
|
?CND1: CALL1 PUT-ON-OR-IN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PUT-ON-OR-IN:ANY:0:0,?TMP1,?TMP2
|
|
ZERO? PRSI \?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSI,PRSO \?CCL5
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL5: IN? PRSO,PRSI \?CCL7
|
|
ICALL2 TOO-BAD-BUT,PRSO
|
|
PRINTI " is already "
|
|
FSET? PRSI,SURFACEBIT \?CCL10
|
|
PUSH STR?101
|
|
JUMP ?CND8
|
|
?CCL10: PUSH STR?144
|
|
?CND8: PRINT STACK
|
|
ICALL2 HIM-HER-IT,PRSI
|
|
PRINTR "!"
|
|
?CCL7: CALL2 WEIGHT,PRSI >?TMP2
|
|
GETP PRSO,P?SIZE
|
|
ADD ?TMP2,STACK >?TMP1
|
|
GETP PRSI,P?CAPACITY
|
|
GRTR? ?TMP1,STACK \?CCL12
|
|
PRINT NOT-ENOUGH-ROOM
|
|
RTRUE
|
|
?CCL12: CALL2 HELD?,PRSO
|
|
ZERO? STACK \?CCL14
|
|
CALL1 ITAKE
|
|
ZERO? STACK /TRUE
|
|
?CCL14: MOVE PRSO,PRSI
|
|
FSET PRSO,TOUCHBIT
|
|
FSET? PRSI,PERSONBIT \?CND17
|
|
FSET? PRSO,WEARBIT \?CND17
|
|
FSET PRSO,WORNBIT
|
|
?CND17: PRINTR "Okay."
|
|
|
|
|
|
.FUNCT WEIGHT:ANY:1:1,OBJ,CONT,WT
|
|
FIRST? OBJ >CONT /?PRG3
|
|
RETURN WT
|
|
?PRG3: GETP CONT,P?SIZE
|
|
ADD WT,STACK >WT
|
|
NEXT? CONT >CONT /?PRG3
|
|
RETURN WT
|
|
|
|
|
|
.FUNCT V-PUT-UNDER:ANY:0:0
|
|
CALL1 WONT-HELP
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SREAD:ANY:0:0
|
|
ICALL PERFORM,V?READ,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SREAD:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-READ:ANY:0:0,VAL
|
|
IN? PRSO,GLOBAL-OBJECTS \FALSE
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-READ:ANY:0:0
|
|
FSET? PRSO,READBIT /?CCL3
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL3: GETP PRSO,P?TEXT
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-REFUSE:ANY:0:0
|
|
SET 'PRSA,V?TAKE
|
|
CALL1 DONT-F
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-RELAX:ANY:0:0
|
|
PRINT ZEN
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-REMOVE:ANY:0:0
|
|
FSET? PRSO,WORNBIT \?CCL3
|
|
ICALL PERFORM,V?TAKE-OFF,PRSO
|
|
RTRUE
|
|
?CCL3: ICALL PERFORM,V?TAKE,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-RING:ANY:0:0
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-RUB:ANY:0:0
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
FSET? PRSO,MUNGBIT /?CCL3
|
|
EQUAL? PRSO,PLAYER /?CCL3
|
|
CALL1 FACE-RED
|
|
RSTACK
|
|
?CCL3: CALL2 HACK-HACK,STR?146
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SAY:ANY:0:0,P
|
|
CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL3
|
|
ICALL PERFORM,V?TELL,QCONTEXT
|
|
RTRUE
|
|
?CCL3: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /?CCL5
|
|
ICALL TELL-I-ASSUME,P,STR?147
|
|
ICALL PERFORM,V?TELL,P
|
|
RTRUE
|
|
?CCL5: CALL1 NOT-CLEAR-WHOM
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SEARCH:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SEARCH:ANY:0:0,OBJ
|
|
IN? PRSO,ROOMS \?CCL3
|
|
ICALL PERFORM,PRSA,GLOBAL-HERE
|
|
RTRUE
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CCL5
|
|
FIRST? PRSO >OBJ \?CCL5
|
|
FSET OBJ,TAKEBIT
|
|
FCLEAR OBJ,NDESCBIT
|
|
FCLEAR OBJ,WORNBIT
|
|
FCLEAR OBJ,SECRETBIT
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
MOVE OBJ,PLAYER
|
|
PRINTI "You find "
|
|
ICALL2 PRINTA,OBJ
|
|
PRINTI " and take it. "
|
|
PRINTC 89
|
|
PRINT OU-STOP-SEARCHING
|
|
PRINTR "."
|
|
?CCL5: FSET? PRSO,DOORBIT \?CCL9
|
|
CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
?CCL9: FSET? PRSO,CONTBIT /?CTR10
|
|
FSET? PRSO,SURFACEBIT \?CCL11
|
|
?CTR10: ICALL PERFORM,V?LOOK-INSIDE,PRSO
|
|
RTRUE
|
|
?CCL11: CALL1 NOTHING-SPECIAL
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SSEARCH-FOR:ANY:0:0
|
|
ICALL PERFORM,V?SEARCH-FOR,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SSEARCH-FOR:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SEARCH-FOR:ANY:0:0,OBJ
|
|
CALL1 ROOM-CHECK
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SEARCH-FOR:ANY:0:0
|
|
IN? PRSO,ROOMS \?CCL3
|
|
ICALL PERFORM,PRSA,GLOBAL-HERE,PRSI
|
|
RTRUE
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CCL5
|
|
IN? PRSI,PRSO \?CCL8
|
|
PRINTI "Indeed,"
|
|
ICALL HE-SHE-IT,PRSO,0,STR?62
|
|
ICALL2 HIM-HER-IT,PRSI
|
|
PRINTR "."
|
|
?CCL8: ICALL2 START-SENTENCE,PRSO
|
|
PRINTI " doesn't have"
|
|
IN? PRSI,GLOBAL-OBJECTS \?CCL11
|
|
ICALL2 PRINT-THE,PRSI
|
|
PRINTR "."
|
|
?CCL11: ZERO? PRSI \?CCL13
|
|
PRINTR " that."
|
|
?CCL13: ICALL2 PRINT-THE,PRSI
|
|
PRINTI " hidden on"
|
|
ICALL HIM-HER-IT,PRSO,0,TRUE-VALUE
|
|
PRINTR " person."
|
|
?CCL5: FSET? PRSO,CONTBIT \?CCL15
|
|
FSET? PRSO,OPENBIT /?CCL15
|
|
PRINTI "You'll have to open"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR " first."
|
|
?CCL15: IN? PRSI,PRSO \?CCL19
|
|
PRINTI "How observant you are! There"
|
|
ICALL HE-SHE-IT,PRSI,0,STR?61
|
|
PRINTR "!"
|
|
?CCL19: ZERO? PRSI \?CCL22
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL22: PRINTI "You don't find"
|
|
FSET? PRSI,SECRETBIT \?CCL25
|
|
PRINTI " it"
|
|
JUMP ?CND23
|
|
?CCL25: ICALL2 HIM-HER-IT,PRSI
|
|
?CND23: PRINTR " there."
|
|
|
|
|
|
.FUNCT V-SHAKE:ANY:0:0,X
|
|
FSET? PRSO,PERSONBIT \?CCL3
|
|
PRINTR "Be real."
|
|
?CCL3: FSET? PRSO,TAKEBIT /?CCL5
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(You can't shake it if you can't take it!)"
|
|
?CCL5: FSET? PRSO,OPENBIT /?CCL7
|
|
FIRST? PRSO \?CCL7
|
|
PRINTI "It sounds as if there is something inside"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL7: FSET? PRSO,OPENBIT \?CCL11
|
|
FIRST? PRSO >X \?CCL11
|
|
PRINTI "Right "
|
|
CALL1 GROUND-DESC
|
|
PRINT STACK
|
|
PRINTI " spill"
|
|
NEXT? X /?CND14
|
|
PRINTC 115
|
|
?CND14: ICALL ROB,PRSO,HERE,TRUE-VALUE
|
|
CRLF
|
|
RTRUE
|
|
?CCL11: PRINTI "You hear nothing inside"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-SHOOT:ANY:0:0
|
|
ZERO? PRSI /?PRD5
|
|
LOC PRSI
|
|
EQUAL? STACK,WINNER /?CCL3
|
|
?PRD5: CALL FIND-IN,WINNER,WEAPONBIT
|
|
ZERO? STACK \?CCL3
|
|
PRINTR "You're not holding anything to shoot with."
|
|
?CCL3: CALL2 IKILL,STR?149
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SSHOOT:ANY:0:0
|
|
ICALL PERFORM,V?SHOOT,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SSHOOT:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SHOW:ANY:0:0
|
|
EQUAL? PRSO,PLAYER \?CCL3
|
|
SET 'WINNER,PLAYER
|
|
CALL2 VISIBLE?,PRSO
|
|
ZERO? STACK /?CCL6
|
|
ICALL PERFORM,V?EXAMINE,PRSI
|
|
RTRUE
|
|
?CCL6: ICALL PERFORM,V?FIND,PRSI
|
|
RTRUE
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CTR7
|
|
FSET? PRSO,MUNGBIT \?CCL8
|
|
?CTR7: PRINTI "Don't wait for"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR " to applaud."
|
|
?CCL8: CALL1 WHO-CARES
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SSHOW:ANY:0:0,P
|
|
ZERO? PRSI /?CCL3
|
|
IN? PRSI,ROOMS \?CND4
|
|
ICALL PERFORM,V?TAKE-TO,PRSO,PRSI
|
|
RTRUE
|
|
?CND4: ICALL PERFORM,V?SHOW,PRSI,PRSO
|
|
RTRUE
|
|
?CCL3: CALL2 HELD?,PRSO
|
|
ZERO? STACK \?CCL7
|
|
LOC PRSO
|
|
FSET? STACK,PERSONBIT \?CCL10
|
|
ICALL PERFORM,V?TAKE,PRSO
|
|
RTRUE
|
|
?CCL10: ICALL TELL-I-ASSUME,PRSO,STR?150
|
|
ICALL PERFORM,V?ASK-CONTEXT-ABOUT,PRSO
|
|
RTRUE
|
|
?CCL7: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL12
|
|
ICALL PERFORM,V?SHOW,QCONTEXT,PRSO
|
|
RTRUE
|
|
?CCL12: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /?CCL14
|
|
ICALL TELL-I-ASSUME,P,STR?151
|
|
ICALL PERFORM,V?SHOW,P,PRSO
|
|
RTRUE
|
|
?CCL14: ICALL TELL-I-ASSUME,PLAYER,STR?151
|
|
ICALL PERFORM,V?SHOW,PLAYER,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SSHOW:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-SIT:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SIT:ANY:0:1,LIE?
|
|
EQUAL? WINNER,PLAYER \?CCL3
|
|
FSET? PRSO,VEHBIT /?CTR2
|
|
EQUAL? PRSO,FLOOR,HERE,GLOBAL-HERE \?CCL3
|
|
?CTR2: PRINTI "You're now "
|
|
ZERO? LIE? \?CCL11
|
|
PRINTI "sitt"
|
|
JUMP ?CND9
|
|
?CCL11: PRINTI "ly"
|
|
?CND9: FSET? PRSO,VEHBIT \?CND12
|
|
MOVE PLAYER,PRSO
|
|
?CND12: PRINTI "ing "
|
|
FSET? PRSO,SURFACEBIT \?CCL16
|
|
PRINTI "on"
|
|
JUMP ?CND14
|
|
?CCL16: PRINTI "in"
|
|
?CND14: ICALL2 PRINT-THE,PRSO
|
|
PRINTR "."
|
|
?CCL3: CALL1 WONT-HELP
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SIT-AT:ANY:0:0
|
|
CALL1 V-SIT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SLAP:ANY:0:0
|
|
EQUAL? PRSI,ROOMS \?CND1
|
|
SET 'PRSI,FALSE-VALUE
|
|
?CND1: EQUAL? PRSO,PLAYER \?CCL5
|
|
PRINTR "That sounds like a sign you could wear on your back."
|
|
?CCL5: FSET? PRSO,PERSONBIT /?CCL7
|
|
CALL1 IF-SPY
|
|
RSTACK
|
|
?CCL7: FSET? PRSO,MUNGBIT \?CCL9
|
|
PRINTI "If"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTI " could,"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTR " would slap you right back."
|
|
?CCL9: CALL1 FACE-RED
|
|
RSTACK
|
|
|
|
|
|
.FUNCT IF-SPY:ANY:0:0
|
|
ZERO? PRSI \?CCL3
|
|
PRINTI "You give"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " a swift "
|
|
EQUAL? P-PRSA-WORD,W?KICK \?CCL6
|
|
PRINTI "kick"
|
|
JUMP ?CND1
|
|
?CCL6: PRINTI "hand chop"
|
|
JUMP ?CND1
|
|
?CCL3: PRINTI "You swing"
|
|
ICALL2 HIM-HER-IT,PRSI
|
|
PRINTI " at"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
?CND1: PRINTI ", but"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTR " seems indestructible."
|
|
|
|
|
|
.FUNCT FACE-RED:ANY:0:1,P,X
|
|
ZERO? P \?CND1
|
|
SET 'P,PRSO
|
|
?CND1: ICALL2 UNSNOOZE,P
|
|
EQUAL? FOLLOWER,P \?CND3
|
|
SET 'FOLLOWER,FALSE-VALUE
|
|
?CND3: GETP P,P?LDESC
|
|
EQUAL? STACK,4 /?CND5
|
|
PUTP P,P?LDESC,20
|
|
?CND5: ICALL HE-SHE-IT,P,1
|
|
PRINTR " gives you a good slap. It hurts, too!"
|
|
|
|
|
|
.FUNCT V-SMELL:ANY:0:0
|
|
ICALL HE-SHE-IT,PRSO,1,STR?152
|
|
PRINTI " just like "
|
|
ICALL2 PRINTA,PRSO
|
|
PRINTR "!"
|
|
|
|
|
|
.FUNCT V-SMILE:ANY:0:0
|
|
PRINTR "How nice."
|
|
|
|
|
|
.FUNCT V-SORRY:ANY:0:0
|
|
CALL2 GRAB-ATTENTION,PRSO
|
|
ZERO? STACK \?CCL3
|
|
RETURN 2
|
|
?CCL3: PUTP PRSO,P?LDESC,3
|
|
PRINTR """Apology accepted."""
|
|
|
|
|
|
.FUNCT V-STAND:ANY:0:0,P
|
|
LOC WINNER
|
|
FSET? STACK,VEHBIT \?CCL3
|
|
LOC WINNER
|
|
ICALL PERFORM,V?DISEMBARK,STACK
|
|
RTRUE
|
|
?CCL3: IN? WINNER,HERE /?CCL5
|
|
CALL1 OWN-FEET
|
|
RSTACK
|
|
?CCL5: ZERO? PRSO /?CCL8
|
|
FSET? PRSO,TAKEBIT \?CCL8
|
|
CALL1 WONT-HELP
|
|
RSTACK
|
|
?CCL8: CALL ALREADY,WINNER,STR?153
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-STOP:ANY:0:0
|
|
EQUAL? PRSO,FALSE-VALUE,GLOBAL-HERE \?CCL3
|
|
PRINTR "Hey, no problem."
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CCL5
|
|
ICALL PERFORM,V?$CALL,PRSO
|
|
RTRUE
|
|
?CCL5: ICALL PERFORM,V?LAMP-OFF,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-SWIM:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1
|
|
PRINTI " can't swim "
|
|
ZERO? PRSO /?CCL3
|
|
PRINTI "in"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
JUMP ?CND1
|
|
?CCL3: CALL1 GROUND-DESC
|
|
PRINT STACK
|
|
?CND1: PRINTR ".)"
|
|
|
|
|
|
.FUNCT PRE-TAKE:ANY:0:0,L
|
|
EQUAL? PRSO,WALL,FLOOR \?CCL3
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSO,YOU,HANDS /FALSE
|
|
LOC PRSO >L
|
|
EQUAL? L,GLOBAL-OBJECTS \?CCL7
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?CCL7: LOC WINNER
|
|
EQUAL? PRSO,STACK \?CCL9
|
|
PRINTR "You are in it!"
|
|
?CCL9: ZERO? L /?CCL11
|
|
FSET? L,CONTBIT \?CCL11
|
|
FSET? L,OPENBIT /?CCL11
|
|
ICALL TOO-BAD-BUT,L,STR?98
|
|
RTRUE
|
|
?CCL11: ZERO? PRSI /?CCL16
|
|
EQUAL? PRSI,WALL,L \?CCL19
|
|
SET 'PRSI,FALSE-VALUE
|
|
RFALSE
|
|
?CCL19: FSET? PRSI,SURFACEBIT /?CCL21
|
|
FSET? PRSI,OPENBIT /?CCL21
|
|
FSET? PRSI,PERSONBIT /?CCL21
|
|
ICALL TOO-BAD-BUT,PRSI,STR?98
|
|
RTRUE
|
|
?CCL21: EQUAL? PRSI,L /FALSE
|
|
ICALL HE-SHE-IT,PRSO,1,STR?61
|
|
PRINTI "n't "
|
|
FSET? PRSI,PERSONBIT \?CCL29
|
|
PRINTI "being held by"
|
|
JUMP ?CND27
|
|
?CCL29: FSET? PRSI,SURFACEBIT \?CCL32
|
|
PRINTI "on"
|
|
JUMP ?CND27
|
|
?CCL32: PRINTI "in"
|
|
?CND27: ICALL2 PRINT-THE,PRSI
|
|
PRINTR "."
|
|
?CCL16: CALL1 PRE-TAKE-WITH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-TAKE-WITH:ANY:0:0,X
|
|
EQUAL? PRSO,YOU /FALSE
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,GLOBAL-OBJECTS \?CCL5
|
|
CALL2 HELD?,PRSO
|
|
ZERO? STACK \FALSE
|
|
FSET? PRSO,PERSONBIT /FALSE
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?CCL5: IN? PRSO,WINNER \?CCL12
|
|
ICALL2 ALREADY,PLAYER
|
|
PRINTI "holding"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR "!)"
|
|
?CCL12: LOC PRSO
|
|
FSET? STACK,CONTBIT \?CCL14
|
|
LOC PRSO
|
|
FSET? STACK,OPENBIT /?CCL14
|
|
CALL2 YOU-CANT,STR?154
|
|
RSTACK
|
|
?CCL14: IN? WINNER,PRSO \FALSE
|
|
CALL NOUN-USED?,PRSO,W?DOOR
|
|
ZERO? STACK \FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " in"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR ", nitwit!)"
|
|
|
|
|
|
.FUNCT V-TAKE:ANY:0:0
|
|
CALL1 ITAKE
|
|
EQUAL? STACK,TRUE-VALUE \FALSE
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " now holding"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-TAKE-OFF:ANY:0:0
|
|
FSET? PRSO,WORNBIT \?CCL3
|
|
FCLEAR PRSO,WORNBIT
|
|
PRINTI "Okay,"
|
|
LOC PRSO
|
|
ICALL HE-SHE-IT,STACK,0,STR?61
|
|
PRINTI " no longer wearing"
|
|
MOVE PRSO,WINNER
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL3: LOC PRSO
|
|
ICALL HE-SHE-IT,STACK,1,STR?61
|
|
PRINTI "n't wearing"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "!"
|
|
|
|
|
|
.FUNCT V-TAKE-TO:ANY:0:0
|
|
ICALL PERFORM,V?WALK-TO,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-DISEMBARK:ANY:0:0
|
|
CALL1 ROOM-CHECK
|
|
ZERO? STACK \TRUE
|
|
EQUAL? PRSO,GLOBAL-HERE,HERE,ROOMS \?CCL5
|
|
EQUAL? WINNER,PLAYER \?CCL8
|
|
IN? PLAYER,HERE /?CCL8
|
|
CALL1 OWN-FEET
|
|
RSTACK
|
|
?CCL8: ICALL2 DO-WALK,P?OUT
|
|
RTRUE
|
|
?CCL5: LOC PRSO
|
|
EQUAL? STACK,WINNER \?CCL12
|
|
PRINTI "You don't need to take"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI " out to use"
|
|
ICALL2 HIM-HER-IT,PRSO
|
|
PRINTR "."
|
|
?CCL12: LOC WINNER
|
|
EQUAL? STACK,PRSO /?CCL14
|
|
IN? PLAYER,PRSO /?CCL14
|
|
PRINTI "You're not "
|
|
FSET? PRSO,SURFACEBIT \?CCL19
|
|
PRINTI "on"
|
|
JUMP ?CND17
|
|
?CCL19: PRINTI "in"
|
|
?CND17: ICALL2 HIM-HER-IT,PRSO
|
|
PRINTI "!
|
|
"
|
|
RETURN 2
|
|
?CCL14: CALL1 OWN-FEET
|
|
RSTACK
|
|
|
|
|
|
.FUNCT OWN-FEET:ANY:0:0
|
|
MOVE WINNER,HERE
|
|
ICALL HE-SHE-IT,WINNER,1,STR?61
|
|
PRINTI " on"
|
|
ICALL HIM-HER-IT,WINNER,0,TRUE-VALUE
|
|
PRINTR " own feet again."
|
|
|
|
|
|
.FUNCT V-HOLD-UP:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
ICALL2 PERFORM,V?STAND
|
|
RTRUE
|
|
?CCL3: CALL1 WONT-HELP
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-TELL:ANY:0:0,P
|
|
EQUAL? PRSO,PLAYER \?CCL3
|
|
EQUAL? WINNER,PLAYER /?CCL6
|
|
SET 'P,WINNER
|
|
SET 'WINNER,PLAYER
|
|
ICALL PERFORM,V?ASK,P
|
|
RTRUE
|
|
?CCL6: ZERO? QCONTEXT /?CCL8
|
|
SET 'QCONTEXT,FALSE-VALUE
|
|
ZERO? P-CONT /?CCL11
|
|
SET 'WINNER,PLAYER
|
|
RETURN WINNER
|
|
?CCL11: PRINTR "Okay, you're not talking to anyone else."
|
|
?CCL8: ICALL2 WONT-HELP-TO-TALK-TO,PLAYER
|
|
SET 'P-CONT,FALSE-VALUE
|
|
RETURN 2
|
|
?CCL3: FSET? PRSO,PERSONBIT \?CCL15
|
|
FSET? PRSO,MUNGBIT /?CCL15
|
|
ICALL2 UNSNOOZE,PRSO
|
|
SET 'QCONTEXT,PRSO
|
|
ZERO? P-CONT /?CCL20
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'WINNER,PRSO
|
|
RTRUE
|
|
?CCL20: PRINTI "Hmmm ..."
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " looks at you expectantly, as if you seemed to be about to talk."
|
|
?CCL15: ICALL2 WONT-HELP-TO-TALK-TO,PRSO
|
|
SET 'P-CONT,FALSE-VALUE
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT PRE-STELL-ABOUT:ANY:0:0
|
|
ICALL PERFORM,V?TELL-ABOUT,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-STELL-ABOUT:ANY:0:0
|
|
CALL1 V-FOO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-TELL-ABOUT:ANY:0:0,P
|
|
EQUAL? PRSO,PLAYER \?CCL3
|
|
CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL6
|
|
ICALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI
|
|
RTRUE
|
|
?CCL6: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /?CCL8
|
|
ICALL TELL-I-ASSUME,P,STR?117
|
|
ICALL PERFORM,V?ASK-ABOUT,P,PRSI
|
|
RTRUE
|
|
?CCL8: ICALL1 ARENT-TALKING
|
|
RTRUE
|
|
?CCL3: FSET? PRSI,SEENBIT /?CCL11
|
|
FSET? PRSI,TOUCHBIT /?CCL11
|
|
ICALL2 NOT-FOUND,PRSI
|
|
RTRUE
|
|
?CCL11: CALL1 PRE-ASK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-TELL-ABOUT:ANY:0:0,P
|
|
PRINTI "It doesn't look as if"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " is interested."
|
|
|
|
|
|
.FUNCT PRE-TALK-ABOUT:ANY:0:0,P
|
|
EQUAL? WINNER,PLAYER /?CCL3
|
|
SET 'P,WINNER
|
|
SET 'WINNER,PLAYER
|
|
ICALL PERFORM,V?ASK-ABOUT,P,PRSO
|
|
RTRUE
|
|
?CCL3: CALL1 QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL5
|
|
ICALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO
|
|
RTRUE
|
|
?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /FALSE
|
|
ICALL TELL-I-ASSUME,P,STR?155
|
|
ICALL PERFORM,V?ASK-ABOUT,P,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-TALK-ABOUT:ANY:0:0
|
|
CALL1 ARENT-TALKING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-THANK:ANY:0:0,P
|
|
ZERO? PRSO /?CCL3
|
|
FSET? PRSO,PERSONBIT \?CCL6
|
|
FSET? PRSO,MUNGBIT /?CCL6
|
|
PRINTI "You do so, but"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " seems less than overjoyed."
|
|
?CCL6: CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL3: CALL1 QCONTEXT-GOOD? >P
|
|
ZERO? P \?CTR10
|
|
CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P
|
|
ZERO? P /?CCL11
|
|
?CTR10: ICALL PERFORM,V?THANK,P
|
|
RTRUE
|
|
?CCL11: PRINTR "You're more than welcome."
|
|
|
|
|
|
.FUNCT V-THROW:ANY:0:0
|
|
CALL1 IDROP
|
|
ZERO? STACK /FALSE
|
|
PRINTR "Thrown."
|
|
|
|
|
|
.FUNCT V-THROW-AT:ANY:0:0
|
|
CALL1 IDROP
|
|
ZERO? STACK /TRUE
|
|
ICALL HE-SHE-IT,PRSI,1,STR?65
|
|
PRINTI "n't duck"
|
|
PRINTI " as"
|
|
ICALL2 HE-SHE-IT,PRSO
|
|
PRINTR " flies by."
|
|
|
|
|
|
.FUNCT V-THROW-IN-TOWEL:ANY:0:0
|
|
EQUAL? PRSO,TOWEL \?CCL3
|
|
CALL1 V-QUIT
|
|
RSTACK
|
|
?CCL3: CALL1 DONT-UNDERSTAND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-THROW-THROUGH:ANY:0:0
|
|
FCLEAR PRSO,WORNBIT
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-THROW-THROUGH:ANY:0:0
|
|
FSET? PRSO,PERSONBIT /?CCL3
|
|
PRINTR "Let's not resort to vandalism, please."
|
|
?CCL3: CALL1 V-THROW
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-TURN:ANY:0:0
|
|
FSET? PRSO,DOORBIT \?CCL3
|
|
FSET? PRSO,OPENBIT \?CCL3
|
|
ICALL PERFORM,V?CLOSE,PRSO
|
|
RTRUE
|
|
?CCL3: PRINTR "What do you want that to do?"
|
|
|
|
|
|
.FUNCT V-UNLOCK:ANY:0:0
|
|
FSET? PRSO,DOORBIT /?CTR2
|
|
FSET? PRSO,CONTBIT \?CCL3
|
|
GETP PRSO,P?CAPACITY
|
|
ZERO? STACK /?CCL3
|
|
?CTR2: FSET? PRSO,LOCKED /?CCL10
|
|
CALL ALREADY,PRSO,STR?105
|
|
RSTACK
|
|
?CCL10: CALL2 UNLOCK-DOOR?,PRSO
|
|
ZERO? STACK \?CCL12
|
|
CALL1 YOU-CANT
|
|
RSTACK
|
|
?CCL12: FCLEAR PRSO,LOCKED
|
|
CALL OKAY,PRSO,STR?105
|
|
RSTACK
|
|
?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
ICALL HE-SHE-IT,PRSO,1,STR?61
|
|
PRINTR "n't locked!)"
|
|
|
|
|
|
.FUNCT V-USE:ANY:0:0
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WAIT:ANY:0:3,NUM,WHO,INT,WHO-WAIT,VAL,HR,RESULT
|
|
ASSIGNED? 'NUM /?CND1
|
|
SET 'NUM,-1
|
|
?CND1: SET 'RESULT,TRUE-VALUE
|
|
EQUAL? -1,NUM \?CND3
|
|
SET 'NUM,10
|
|
?CND3: ZERO? INT \?CND5
|
|
FSET? PRSO,PERSONBIT /?CND5
|
|
EQUAL? PRSO,TURN,INTNUM /?CND5
|
|
PRINT I-ASSUME
|
|
PRINTI " Wait "
|
|
PRINTN NUM
|
|
PRINTI " minute"
|
|
EQUAL? NUM,1 /?CND10
|
|
PRINTC 115
|
|
?CND10: PRINTI ".]"
|
|
CRLF
|
|
?CND5: SET 'HR,HERE
|
|
ZERO? INT \?CND12
|
|
PRINTI "Time passes..."
|
|
CRLF
|
|
?CND12: DEC 'NUM
|
|
?PRG14: DLESS? 'NUM,0 \?CCL18
|
|
SET 'KEEP-WAITING,FALSE-VALUE
|
|
RETURN RESULT
|
|
?CCL18: CALL1 CLOCKER >VAL
|
|
ZERO? VAL /?CCL20
|
|
EQUAL? VAL,M-FATAL /?CTR22
|
|
EQUAL? HR,HERE /?CCL23
|
|
?CTR22: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'RESULT,M-FATAL
|
|
RETURN RESULT
|
|
?CCL23: ZERO? WHO /?CCL27
|
|
IN? WHO,HERE \?CCL27
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
ICALL2 NOT-IT,WHO
|
|
ICALL2 START-SENTENCE,WHO
|
|
PRINTI ", for wh"
|
|
FSET? WHO,PERSONBIT \?CCL32
|
|
PRINTI "om"
|
|
JUMP ?CND30
|
|
?CCL32: PRINTI "ich"
|
|
?CND30: PRINTI " you're waiting, has arrived."
|
|
CRLF
|
|
RETURN RESULT
|
|
?CCL27: INC 'WHO-WAIT
|
|
ZERO? KEEP-WAITING /?CND33
|
|
ICALL1 UPDATE-STATUS-LINE
|
|
JUMP ?PRG14
|
|
?CND33: PRINTI "Do you want to keep "
|
|
CALL2 VERB-PRINT,TRUE-VALUE >VAL
|
|
CALL1 YES?
|
|
ZERO? STACK /?CCL37
|
|
ICALL1 UPDATE-STATUS-LINE
|
|
JUMP ?PRG14
|
|
?CCL37: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'RESULT,M-FATAL
|
|
RETURN RESULT
|
|
?CCL20: ZERO? WHO /?CCL39
|
|
IGRTR? 'WHO-WAIT,30 \?CCL39
|
|
CALL2 START-SENTENCE,WHO >VAL
|
|
PRINTI " still hasn't arrived. Do you want to keep waiting?"
|
|
CALL1 YES?
|
|
ZERO? STACK \?CND42
|
|
RETURN RESULT
|
|
?CND42: SET 'WHO-WAIT,0
|
|
ICALL1 UPDATE-STATUS-LINE
|
|
JUMP ?PRG14
|
|
?CCL39: ICALL1 UPDATE-STATUS-LINE
|
|
JUMP ?PRG14
|
|
|
|
|
|
.FUNCT V-WAIT-FOR:ANY:0:0,WHO
|
|
EQUAL? -1,P-NUMBER /?CCL3
|
|
EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3
|
|
CALL2 V-WAIT,P-NUMBER
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSO,GLOBAL-HERE,TURN,ROOMS \?CCL8
|
|
CALL1 V-WAIT
|
|
RSTACK
|
|
?CCL8: EQUAL? PRSO,PLAYER \?CCL10
|
|
CALL ALREADY,PLAYER,STR?124
|
|
RSTACK
|
|
?CCL10: FSET? PRSO,PERSONBIT \?CCL12
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,HERE \?CCL16
|
|
CALL ALREADY,PRSO,STR?124
|
|
RSTACK
|
|
?CCL16: CALL V-WAIT,10000,PRSO
|
|
RSTACK
|
|
?CCL12: PRINTR "Not a good idea. You might wait forever."
|
|
|
|
|
|
.FUNCT V-WAIT-UNTIL:ANY:0:0,N
|
|
EQUAL? -1,P-NUMBER /?CCL3
|
|
EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3
|
|
SET 'N,P-NUMBER
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(It's already past that time!)"
|
|
?CCL3: CALL2 YOU-CANT,STR?156
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-ALARM:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
ICALL PERFORM,V?ALARM,WINNER
|
|
RTRUE
|
|
?CCL3: CALL TOO-BAD-BUT,PRSO,STR?157
|
|
RSTACK
|
|
|
|
|
|
.FUNCT DO-WALK:ANY:1:1,DIR,P
|
|
SET 'P-WALK-DIR,DIR
|
|
CALL PERFORM,V?WALK,DIR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WALK:ANY:0:0,PT,PTS,STR,RM
|
|
ZERO? P-WALK-DIR \?CND1
|
|
EQUAL? PRSO,P?IN \?CCL5
|
|
IN? P-IT-OBJECT,ROOMS /?CTR4
|
|
FSET? P-IT-OBJECT,VEHBIT /?CTR4
|
|
FSET? P-IT-OBJECT,CONTBIT \?CCL5
|
|
?CTR4: ICALL2 TELL-I-ASSUME,P-IT-OBJECT
|
|
ICALL PERFORM,V?THROUGH,P-IT-OBJECT
|
|
RTRUE
|
|
?CCL5: ICALL1 V-WALK-AROUND
|
|
RETURN 2
|
|
?CND1: LOC WINNER
|
|
GETPT STACK,PRSO >PT
|
|
ZERO? PT /?CCL15
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,UEXIT \?CCL18
|
|
GET PT,REXIT
|
|
CALL2 GOTO,STACK
|
|
ZERO? STACK /TRUE
|
|
ICALL1 OKAY
|
|
RTRUE
|
|
?CCL18: EQUAL? PTS,NEXIT \?CCL22
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
GET PT,NEXITSTR
|
|
PRINT STACK
|
|
PRINTC 41
|
|
CRLF
|
|
RETURN 2
|
|
?CCL22: EQUAL? PTS,FEXIT \?CCL26
|
|
GET PT,FEXITFCN
|
|
CALL STACK >RM
|
|
ZERO? RM /?PRG32
|
|
CALL2 GOTO,RM
|
|
ZERO? STACK /TRUE
|
|
ICALL1 OKAY
|
|
RTRUE
|
|
?PRG32: RETURN 2
|
|
?CCL26: EQUAL? PTS,CEXIT \?CCL35
|
|
GETB PT,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK /?CCL38
|
|
GET PT,REXIT
|
|
CALL2 GOTO,STACK
|
|
ZERO? STACK /TRUE
|
|
ICALL1 OKAY
|
|
RTRUE
|
|
?CCL38: GET PT,CEXITSTR >STR
|
|
ZERO? STR /?CCL42
|
|
PRINT STR
|
|
CRLF
|
|
RETURN 2
|
|
?CCL42: ICALL2 YOU-CANT,STR?73
|
|
RETURN 2
|
|
?CCL35: EQUAL? PTS,DEXIT \FALSE
|
|
CALL2 WALK-THRU-DOOR?,PT
|
|
ZERO? STACK /?PRG54
|
|
GET PT,REXIT
|
|
CALL2 GOTO,STACK
|
|
ZERO? STACK /TRUE
|
|
ICALL1 OKAY
|
|
RTRUE
|
|
?PRG54: RETURN 2
|
|
?CCL15: EQUAL? PRSO,P?IN,P?OUT \?CCL57
|
|
CALL1 V-WALK-AROUND
|
|
RSTACK
|
|
?CCL57: EQUAL? PRSO,P?UP \?CCL59
|
|
ICALL PERFORM,V?CLIMB-UP,STAIRS
|
|
RTRUE
|
|
?CCL59: EQUAL? PRSO,P?DOWN \?CCL61
|
|
ICALL PERFORM,V?CLIMB-DOWN,STAIRS
|
|
RTRUE
|
|
?CCL61: ICALL2 YOU-CANT,STR?73
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT UNLOCK-DOOR?:ANY:1:1,DR
|
|
EQUAL? HERE,DR /TRUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT WALK-THRU-DOOR?:ANY:1:3,PT,OBJ,TELL?,RM
|
|
ASSIGNED? 'TELL? /?CND1
|
|
SET 'TELL?,TRUE-VALUE
|
|
?CND1: ZERO? OBJ \?CND3
|
|
GET PT,DEXITOBJ >OBJ
|
|
?CND3: FSET? OBJ,OPENBIT /TRUE
|
|
FSET? OBJ,SECRETBIT \?CCL9
|
|
FSET? OBJ,TOUCHBIT /?CCL9
|
|
EQUAL? FALSE-VALUE,TELL?,VERBOSITY /FALSE
|
|
FSET? HERE,SECRETBIT /?CCL16
|
|
ICALL2 YOU-CANT,STR?73
|
|
RFALSE
|
|
?CCL16: ZERO? LIT \?CCL18
|
|
ICALL2 NOT-FOUND,OBJ
|
|
RFALSE
|
|
?CCL18: EQUAL? PRSA,V?WALK-TO /TRUE
|
|
ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ
|
|
RTRUE
|
|
?CCL9: FSET? OBJ,LOCKED /?CCL22
|
|
EQUAL? PRSA,V?WALK-TO /TRUE
|
|
FCLEAR OBJ,SECRETBIT
|
|
FSET OBJ,SEENBIT
|
|
EQUAL? FALSE-VALUE,TELL?,VERBOSITY /TRUE
|
|
ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ
|
|
RTRUE
|
|
?CCL22: ZERO? PT /?CCL28
|
|
GET PT,DEXITSTR >RM
|
|
ZERO? RM /?CCL28
|
|
ZERO? TELL? /FALSE
|
|
PRINT RM
|
|
CRLF
|
|
RFALSE
|
|
?CCL28: ZERO? TELL? /FALSE
|
|
CALL2 UNLOCK-DOOR?,OBJ
|
|
ZERO? STACK /?CCL37
|
|
EQUAL? PRSA,V?WALK-TO /TRUE
|
|
ZERO? VERBOSITY /TRUE
|
|
ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ
|
|
RTRUE
|
|
?CCL37: ICALL TOO-BAD-BUT,OBJ,STR?104
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
RFALSE
|
|
|
|
|
|
.FUNCT OPEN-DOOR-AND-CLOSE-IT-AGAIN:ANY:1:1,OBJ
|
|
FSET OBJ,SEENBIT
|
|
EQUAL? WINNER,PLAYER \TRUE
|
|
PRINTI "(You "
|
|
FSET? OBJ,LOCKED \?CND3
|
|
FCLEAR OBJ,LOCKED
|
|
PRINTI "unlock and "
|
|
?CND3: PRINTI "open the "
|
|
PRINTI "door"
|
|
FSET? OBJ,SECRETBIT \?CCL8
|
|
FSET OBJ,OPENBIT
|
|
JUMP ?CND6
|
|
?CCL8: PRINTI " and close it again"
|
|
?CND6: PRINTR ".)"
|
|
|
|
|
|
.FUNCT V-WALK-AROUND:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 91
|
|
PRINT WHICH-DIR
|
|
PRINTI "]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT WHO-KNOWS?:ANY:1:1,OBJ
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(You have no idea where"
|
|
ICALL2 PRINT-THE,PRSO
|
|
PRINTR " is.)"
|
|
|
|
|
|
.FUNCT WALK-WITHIN-ROOM:ANY:0:0
|
|
CALL NO-NEED,STR?159,HERE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WALK-TO:ANY:0:0
|
|
IN? PRSO,HERE /?CTR2
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK /?CCL3
|
|
?CTR2: ICALL HE-SHE-IT,PRSO,1
|
|
PRINTR "'s here!"
|
|
?CCL3: CALL1 V-WALK-AROUND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ENTER-ROOM:ANY:0:0,VAL
|
|
CALL1 LIT? >LIT
|
|
GETP HERE,P?ACTION
|
|
ICALL STACK,M-ENTER
|
|
CALL1 V-FIRST-LOOK >VAL
|
|
GETP HERE,P?ACTION
|
|
ICALL STACK,M-FLASH
|
|
RETURN VAL
|
|
|
|
|
|
.FUNCT V-RUN-OVER:ANY:0:0
|
|
PRINTR "That doesn't make much sense."
|
|
|
|
|
|
.FUNCT V-YELL:ANY:0:0
|
|
PRINTR "You begin to get a sore throat."
|
|
|
|
|
|
.FUNCT V-YES:ANY:0:1,NO?,PER
|
|
SET 'PER,WINNER
|
|
EQUAL? PER,PLAYER \?CTR2
|
|
CALL1 QCONTEXT-GOOD? >PER
|
|
ZERO? PER /?CCL3
|
|
?CTR2: GETP PER,P?ACTION
|
|
CALL D-APPLY,STR?160,STACK,M-WINNER
|
|
ZERO? STACK \TRUE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "(That was just a rhetorical question.)"
|
|
?CCL3: PRINTI "You sound rather "
|
|
ZERO? NO? /?CCL10
|
|
PRINTI "neg"
|
|
JUMP ?CND8
|
|
?CCL10: PRINTI "pos"
|
|
?CND8: PRINTR "ative."
|
|
|
|
|
|
.FUNCT V-NO:ANY:0:0
|
|
CALL2 V-YES,TRUE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT JIGS-UP:ANY:0:1,DESC
|
|
ASSIGNED? 'DESC \?CND1
|
|
PRINT DESC
|
|
?CND1: PRINTI "
|
|
|
|
**** You have died ****
|
|
|
|
"
|
|
CALL1 FINISH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT FINISH:ANY:0:2,REPEATING,VAL
|
|
ZERO? P-DBUG \TRUE
|
|
CRLF
|
|
CRLF
|
|
ZERO? REPEATING \?CND3
|
|
ICALL1 V-SCORE
|
|
CRLF
|
|
?CND3: PRINTI "Would you like to:
|
|
"
|
|
ZERO? P-CAN-UNDO /?CND5
|
|
PRINTI " UNDO your last action,
|
|
"
|
|
?CND5: PRINTI " RESTORE your place from where you saved it,
|
|
RESTART the story from the beginning, or
|
|
QUIT for now?"
|
|
CRLF
|
|
?PRG7: PRINTC 62
|
|
PUTB P-INBUF,1,0
|
|
READ P-INBUF,P-LEXV
|
|
GET P-LEXV,P-LEXSTART >VAL
|
|
ZERO? VAL /?CND9
|
|
GET VAL,3 >VAL
|
|
ZERO? VAL /?CND9
|
|
GET VAL,0 >VAL
|
|
GRTR? 0,VAL /?CND9
|
|
ZERO? P-CAN-UNDO /?CCL16
|
|
EQUAL? VAL,ACT?UNDO \?CCL16
|
|
ICALL1 V-UNDO
|
|
ICALL2 FINISH,TRUE-VALUE
|
|
JUMP ?CND9
|
|
?CCL16: EQUAL? VAL,ACT?RESTART \?CCL20
|
|
RESTART
|
|
ICALL2 FINISH,TRUE-VALUE
|
|
JUMP ?CND9
|
|
?CCL20: EQUAL? VAL,ACT?RESTORE \?CCL22
|
|
CALL1 V-RESTORE
|
|
ZERO? STACK \TRUE
|
|
ICALL2 FINISH,TRUE-VALUE
|
|
JUMP ?CND9
|
|
?CCL22: EQUAL? VAL,ACT?QUIT \?CND9
|
|
QUIT
|
|
?CND9: PRINTI "[Type "
|
|
ZERO? P-CAN-UNDO /?CND26
|
|
PRINTI "UNDO, "
|
|
?CND26: PRINTI "RESTORE, RESTART, or QUIT.] "
|
|
JUMP ?PRG7
|
|
|
|
|
|
.FUNCT V-UNDO:ANY:0:0
|
|
ZERO? P-CAN-UNDO /FALSE
|
|
SET 'OLD-HERE,FALSE-VALUE
|
|
IRESTORE
|
|
ZERO? STACK \?CCL6
|
|
PRINTR "[UNDO failed.]"
|
|
?CCL6: PRINTR "[UNDO is not available.]"
|
|
|
|
|
|
.FUNCT REMOTE-VERB?:ANY:0:0
|
|
EQUAL? PRSA,V?WALK-TO /TRUE
|
|
EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR,V?TELL-ABOUT /TRUE
|
|
EQUAL? PRSA,V?TALK-ABOUT,V?TAKE-TO,V?SSHOW /TRUE
|
|
EQUAL? PRSA,V?SHOW,V?SEARCH-FOR,V?SEARCH /TRUE
|
|
EQUAL? PRSA,V?LOOK-UP,V?LEAVE,V?FOLLOW /TRUE
|
|
EQUAL? PRSA,V?FIND,V?DISEMBARK,V?ASK-FOR /TRUE
|
|
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT /TRUE
|
|
RFALSE
|
|
|
|
.ENDI
|