enchanter/verbs.zap

2320 lines
45 KiB
Plaintext

.FUNCT V-VERBOSE
SET 'VERBOSE,TRUE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
PRINTR "Maximum verbosity."
.FUNCT V-BRIEF
SET 'VERBOSE,FALSE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
PRINTR "Brief descriptions."
.FUNCT V-SUPER-BRIEF
SET 'SUPER-BRIEF,TRUE-VALUE
PRINTR "Super-brief descriptions."
.FUNCT V-LOOK
ZERO? PRSO /?CND1
EQUAL? PRSO,ROOMS /?CND1
CALL PERFORM,V?EXAMINE,PRSO
RTRUE
?CND1: CALL DESCRIBE-ROOM,TRUE-VALUE
ZERO? STACK /FALSE
CALL DESCRIBE-OBJECTS,TRUE-VALUE
RSTACK
.FUNCT V-FIRST-LOOK
CALL DESCRIBE-ROOM
ZERO? STACK /FALSE
ZERO? SUPER-BRIEF \FALSE
CALL DESCRIBE-OBJECTS
RSTACK
.FUNCT V-EXAMINE
GETP PRSO,P?TEXT
ZERO? STACK /?ELS5
GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
?ELS5: FSET? PRSO,CONTBIT /?THN10
FSET? PRSO,DOORBIT \?ELS9
?THN10: CALL V-LOOK-INSIDE
RSTACK
?ELS9: PRINTI "You see nothing special about the "
PRINTD PRSO
PRINTR "."
.FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,AV
ZERO? LOOK? /?ORP4
PUSH LOOK?
JUMP ?THN1
?ORP4: PUSH VERBOSE
?THN1: POP 'V?
ZERO? LIT \?CND5
PRINTI "It is pitch black and there is evil in the darkness."
CRLF
RETURN FALSE-VALUE
?CND5: FSET? HERE,TOUCHBIT /?CND10
FSET HERE,TOUCHBIT
SET 'V?,TRUE-VALUE
?CND10: IN? HERE,ROOMS \?CND13
PRINTD HERE
CRLF
?CND13: ZERO? LOOK? \?THN21
ZERO? SUPER-BRIEF \TRUE
?THN21: LOC WINNER >AV
FSET? AV,VEHBIT \?CND23
PRINTI "(You are in the "
PRINTD AV
PRINTI ".)"
CRLF
?CND23: ZERO? V? /?ELS30
GETP HERE,P?ACTION
CALL STACK,M-LOOK
ZERO? STACK \TRUE
?ELS30: ZERO? V? /?ELS34
FSET? HERE,RMUNGBIT \?ELS34
GETP HERE,P?MUNGDESC >STR
ZERO? STR /?ELS34
PRINT STR
CRLF
JUMP ?CND28
?ELS34: ZERO? V? /?ELS40
GETP HERE,P?LDESC >STR
ZERO? STR /?ELS40
FSET? HERE,RMUNGBIT \?CND43
EQUAL? HERE,ALTAR,JUNCTION /?CND43
PRINTI "Everything you see is grey and lifeless, as though covered with a veil of ash. Sound is muted and there is a faint acrid odor."
CRLF
?CND43: PRINT STR
CRLF
JUMP ?CND28
?ELS40: GETP HERE,P?ACTION
CALL STACK,M-FLASH
?CND28: EQUAL? HERE,AV /?CND54
FSET AV,VEHBIT
GETP AV,P?ACTION
CALL STACK,M-LOOK
?CND54: FSET? HERE,LIGHTBIT \TRUE
GRTR? TOD,NIGHTFALL \?ELS63
PRINTR "The stars shine down on you from a clear, dark sky."
?ELS63: GRTR? TOD,DUSK \?ELS67
PRINTR "The darkening sky is lit by a waning moon."
?ELS67: LESS? TOD,DAWN /TRUE
ADD DAWN,3
LESS? TOD,STACK \TRUE
PRINTI "The sun is rising over the lands to the east."
CRLF
RTRUE
.FUNCT DESCRIBE-OBJECTS,V?=0
ZERO? LIT /?ELS5
FIRST? HERE \FALSE
ZERO? V? /?ORP15
PUSH V?
JUMP ?THN12
?ORP15: PUSH VERBOSE
?THN12: POP 'V?
CALL PRINT-CONT,HERE,V?,-1
RSTACK
?ELS5: PRINTR "You can't see anything in the dark."
.FUNCT LIGHTED?,OBJ
FSET? OBJ,LIGHTBIT \FALSE
FSET? OBJ,ONBIT \FALSE
PRINTI " (providing light)"
RTRUE
.FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
SET 'DESC-OBJECT,OBJ
ZERO? LEVEL \?ELS3
GETP OBJ,P?DESCFCN
CALL STACK,M-OBJDESC
ZERO? STACK \TRUE
?ELS3: ZERO? LEVEL \?ELS7
FSET? OBJ,TOUCHBIT /?ELS13
GETP OBJ,P?FDESC >STR
ZERO? STR \?THN10
?ELS13: GETP OBJ,P?LDESC >STR
ZERO? STR /?ELS7
?THN10: PRINT STR
CALL LIGHTED?,OBJ
JUMP ?CND1
?ELS7: ZERO? LEVEL \?ELS17
PRINTI "There is "
CALL PRINTA,OBJ
PRINTI " here"
CALL LIGHTED?,OBJ
PRINTI "."
JUMP ?CND1
?ELS17: GET INDENTS,LEVEL
PRINT STACK
PRINTI "A"
FSET? OBJ,VOWELBIT \?CND28
PRINTI "n"
?CND28: EQUAL? OBJ,BREAD \?ELS35
GETP OBJ,P?SIZE
LESS? STACK,8 \?CND33
PRINTI " partially eaten"
JUMP ?CND33
?ELS35: EQUAL? OBJ,WATER \?CND33
GETP OBJ,P?SIZE
LESS? STACK,2 \?CND43
PRINTI " very"
?CND43: GETP OBJ,P?SIZE
LESS? STACK,3 \?CND33
PRINTI " small"
?CND33: PRINTI " "
PRINTD OBJ
CALL LIGHTED?,OBJ
?CND1: ZERO? LEVEL \?CND55
LOC WINNER >AV
ZERO? AV /?CND55
FSET? AV,VEHBIT \?CND55
PRINTI " (outside the "
PRINTD AV
PRINTI ")"
?CND55: CRLF
CALL SEE-INSIDE?,OBJ
ZERO? STACK /FALSE
FIRST? OBJ \FALSE
CALL PRINT-CONT,OBJ,V?,LEVEL
RSTACK
.FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,AV,STR,PV?=0,INV?=0
FIRST? OBJ >Y \TRUE
LOC WINNER >AV
ZERO? AV /?ELS6
FSET? AV,VEHBIT \?ELS6
JUMP ?CND4
?ELS6: SET 'AV,FALSE-VALUE
?CND4: SET '1ST?,TRUE-VALUE
LOC OBJ
EQUAL? WINNER,OBJ,STACK \?ELS13
SET 'INV?,TRUE-VALUE
JUMP ?CND11
?ELS13:
?PRG16: ZERO? Y \?ELS20
JUMP ?CND11
?ELS20: EQUAL? Y,AV \?ELS22
SET 'PV?,TRUE-VALUE
JUMP ?CND18
?ELS22: EQUAL? Y,WINNER \?ELS24
JUMP ?CND18
?ELS24: FSET? Y,INVISIBLE /?CND18
FSET? Y,TOUCHBIT /?CND18
GETP Y,P?FDESC >STR
ZERO? STR /?CND18
FSET? Y,NDESCBIT /?CND29
PRINT STR
CALL LIGHTED?,Y
CRLF
?CND29: CALL SEE-INSIDE?,Y
ZERO? STACK /?CND18
LOC Y
GETP STACK,P?DESCFCN
ZERO? STACK \?CND18
FIRST? Y \?CND18
CALL PRINT-CONT,Y,V?,0
?CND18: NEXT? Y >Y /?KLU76
?KLU76: JUMP ?PRG16
?CND11: FIRST? OBJ >Y /?KLU77
?KLU77:
?PRG39: ZERO? Y \?ELS43
ZERO? PV? /?CND44
ZERO? AV /?CND44
FIRST? AV \?CND44
CALL PRINT-CONT,AV,V?,LEVEL
?CND44: ZERO? 1ST? \FALSE
RTRUE
?ELS43: EQUAL? Y,AV,PLAYER \?ELS52
JUMP ?CND41
?ELS52: FSET? Y,INVISIBLE /?CND41
ZERO? INV? \?THN57
FSET? Y,TOUCHBIT /?THN57
GETP Y,P?FDESC
ZERO? STACK \?CND41
?THN57: FSET? Y,NDESCBIT /?ELS61
ZERO? 1ST? /?CND62
CALL FIRSTER,OBJ,LEVEL
ZERO? STACK /?CND66
LESS? LEVEL,0 \?CND66
SET 'LEVEL,0
?CND66: INC 'LEVEL
SET '1ST?,FALSE-VALUE
?CND62: CALL DESCRIBE-OBJECT,Y,V?,LEVEL
JUMP ?CND41
?ELS61: FIRST? Y \?CND41
CALL SEE-INSIDE?,Y
ZERO? STACK /?CND41
CALL PRINT-CONT,Y,V?,LEVEL
?CND41: NEXT? Y >Y /?KLU78
?KLU78: JUMP ?PRG39
.FUNCT FIRSTER,OBJ,LEVEL
EQUAL? OBJ,WINNER \?ELS5
PRINTR "You are carrying:"
?ELS5: IN? OBJ,ROOMS /FALSE
GRTR? LEVEL,0 \?CND10
GET INDENTS,LEVEL
PRINT STACK
?CND10: EQUAL? OBJ,ADVENTURER \?ELS19
PRINTR "The adventurer is carrying:"
?ELS19: FSET? OBJ,SURFACEBIT \?ELS23
PRINTI "Sitting on the "
PRINTD OBJ
PRINTR " is:"
?ELS23: PRINTI "The "
PRINTD OBJ
PRINTR " contains:"
.FUNCT V-SCORE,ASK?=1
PRINTI "Your score is "
PRINTN SCORE
PRINTI " of a possible "
PRINTN SCORE-MAX
PRINTI ", in "
PRINTN MOVES
EQUAL? MOVES,1 \?ELS9
PRINTI " move."
JUMP ?CND7
?ELS9: PRINTI " moves."
?CND7: CRLF
LESS? SCORE,0 \?ELS18
PRINTI "This gives you the rank of Menace to Society."
CRLF
RETURN SCORE
?ELS18: PRINTI "This puts you in the class of "
DIV SCORE,50
GET RANKINGS,STACK
PRINT STACK
PRINTI "."
CRLF
RETURN SCORE
.FUNCT FINISH,REPEATING=0
CRLF
ZERO? REPEATING \?CND1
CALL V-SCORE
CRLF
?CND1: PRINTI "Would you like to restart the game from the beginning, restore a saved game position, or end this session of the game?
(Type RESTART, RESTORE, or QUIT):
>"
READ P-INBUF,P-LEXV
GET P-LEXV,1
EQUAL? STACK,W?RESTART \?ELS10
RESTART
PRINTI "Failed."
CRLF
CALL FINISH,TRUE-VALUE
RSTACK
?ELS10: GET P-LEXV,1
EQUAL? STACK,W?RESTORE \?ELS14
RESTORE \?ELS19
PRINTR "Okay."
?ELS19: PRINTI "Failed."
CRLF
CALL FINISH,TRUE-VALUE
RSTACK
?ELS14: QUIT
RTRUE
.FUNCT V-QUIT,ASK?=1,SCOR
CALL V-SCORE
ZERO? ASK? /?ELS9
PRINTI "Do you wish to leave the game? (Y is affirmative): "
CALL YES?
ZERO? STACK \?THN6
?ELS9: ZERO? ASK? \?ELS5
?THN6: QUIT
RTRUE
?ELS5: PRINTR "Ok."
.FUNCT YES?
PRINTI ">"
READ P-INBUF,P-LEXV
GET P-LEXV,1
EQUAL? STACK,W?YES,W?Y \FALSE
RTRUE
.FUNCT V-VERSION,CNT=17
PRINTI "ENCHANTER
Infocom interactive fiction - a fantasy story
Copyright (C) 1983, 1984, 1986 by Infocom, Inc. All rights reserved.
ENCHANTER is a trademark of Infocom, Inc.
Release "
GET 0,1
BAND STACK,2047
PRINTN STACK
PRINTI " / Serial number "
?PRG5: IGRTR? 'CNT,23 \?ELS9
JUMP ?REP6
?ELS9: GETB 0,CNT
PRINTC STACK
JUMP ?PRG5
?REP6: CRLF
RTRUE
.FUNCT JIGS-UP,DESC,SURVIVE?=1,BOTH=0,OZMOOD?=0,CHEATED?=0
EQUAL? DEATH-CHEATED,WINNER,ME /?PRD1
PUSH 0
JUMP ?PRD2
?PRD1: PUSH 1
?PRD2: SET 'CHEATED?,STACK
ZERO? SURVIVE? /?ELS4
SET 'OZMOOD?,CHEATED?
JUMP ?PRD5
?ELS4: SET 'OZMOOD?,0
?PRD5: SET 'DEATH-CHEATED,FALSE-VALUE
ZERO? DESC /?CND6
PRINT DESC
CRLF
?CND6: EQUAL? PLAYER,WINNER /?CND12
PRINTI "
*** The "
PRINTD WINNER
PRINTI " has died ***
"
ZERO? OZMOOD? /?ELS19
PRINTI "Fortunately the "
PRINTD WINNER
PRINTI " has been magically protected from violent death and appears to be none the worse for his horrible experience."
CRLF
JUMP ?CND17
?ELS19: ZERO? CHEATED? /?CND25
PRINTI "Unfortunately, even the ozmoo spell was not enough to protect the "
PRINTD WINNER
PRINTI " from this eventuality."
CRLF
?CND25: REMOVE WINNER
?CND17: SET 'WINNER,PLAYER
LOC WINNER >HERE
CALL LIT?,HERE >LIT
RETURN 2
?CND12: CALL FORGET-ALL
PRINTI "
**** You have died ****
"
ZERO? OZMOOD? /?ELS37
PRINTI "Fortunately, you had the foresight to protect yourself against this eventuality by a judicious use of the ozmoo spell. You survive this horrible experience none the worse for wear, if somewhat chastened."
CRLF
JUMP ?CND35
?ELS37: ZERO? CHEATED? /?CND43
PRINTI "Unfortunately, even the ozmoo spell was not enough to protect you from this eventuality."
CRLF
?CND43: IGRTR? 'DEATHS,3 \?ELS51
PRINTI "You awaken among the members of the Circle. Belboz the Necromancer is exhausted, and the other members of the Circle are disgusted. ""I told you Krill was too powerful for such as this,"" says one. ""We must send someone who has a chance to defeat a warlock of Krill's experience and guile."" Acrimonious discussion begins, as you are waved away to join the apprentices in the scullery. A long acquaintance with potatoes and dirty pots is about to begin."
CRLF
CALL FINISH
JUMP ?CND35
?ELS51: PRINTI "You awaken among the members of the Circle. Belboz the Necromancer looks tired, and scattered about are the remains of the components of a spell of great healing power. The other members of the Circle are pleased to see you revived, but worried by the setback. ""I think Krill is too powerful,"" says one. ""This inexperienced wizard will never defeat one so puissant as he."" Quiet discussion ensues, with well-concealed acrimony beneath the surface."
CRLF
CALL HELD?,DISPEL-SCROLL
ZERO? STACK \?THN61
CALL HELD?,BANISH-SCROLL
ZERO? STACK /?CND58
?THN61: CALL HELD?,DISPEL-SCROLL
ZERO? STACK /?CND63
CALL HELD?,BANISH-SCROLL
ZERO? STACK /?CND63
SET 'BOTH,TRUE-VALUE
?CND63: PRINTI "Belboz tilts his head, as if sensing something amiss. He examines your possessions and is taken aback: ""You have acquired "
ZERO? BOTH /?ELS72
PRINTI "scrolls"
JUMP ?CND70
?ELS72: PRINTI "a scroll"
?CND70: PRINTI " of great power. Using spells of this kind requires surpassing wisdom."" With a wave of his hand, the scroll"
ZERO? BOTH /?ELS84
PRINTI "s disappear"
JUMP ?CND82
?ELS84: PRINTI " disappears"
?CND82: PRINTI "."
CRLF
CALL HELD?,DISPEL-SCROLL
ZERO? STACK /?CND94
REMOVE DISPEL-SCROLL
?CND94: CALL HELD?,BANISH-SCROLL
ZERO? STACK /?CND58
REMOVE BANISH-SCROLL
?CND58: MOVE SPELL-BOOK,WINNER
FCLEAR SPELL-BOOK,NDESCBIT
FSET SPELL-BOOK,TAKEBIT
FSET? JUG,TOUCHBIT \?CND100
MOVE JUG,EAST-FORK
?CND100: FSET? BREAD,TOUCHBIT \?CND103
GETP BREAD,P?SIZE
GRTR? STACK,0 \?CND103
MOVE BREAD,EAST-FORK
?CND103: PRINTI "Debate ensues, with Belboz returning frequently to the contents of the ancient manuscript. His wishes prevail, and it is agreed to send you back...."
CRLF
SET 'THIRST-COUNT,0
SET 'HUNGER-COUNT,0
SET 'LOCKED-IN-TOWER,FALSE-VALUE
?CND35: CRLF
CALL RANDOMIZE-OBJECTS
ZERO? OZMOOD? \?CND110
CALL KILL-INTERRUPTS
CALL GOTO,EAST-FORK
?CND110: SET 'P-CONT,FALSE-VALUE
RETURN 2
.FUNCT RANDOMIZE-OBJECTS,F,N
FIRST? WINNER >F /?KLU12
?KLU12:
?PRG1: ZERO? F /TRUE
NEXT? F >N /?KLU13
?KLU13: FSET? F,SCROLLBIT \?CND7
MOVE F,HERE
?CND7: SET 'F,N
JUMP ?PRG1
.FUNCT KILL-INTERRUPTS
SET 'ADVENTURER-CHARMED,FALSE-VALUE
CALL STOP-FLYING
CALL QUEUE,I-TURTLE,0
CALL QUEUE,I-TAKE-TO-ALTAR,0
CALL QUEUE,I-GANG,0
CALL QUEUE,I-GUARDS-ARRIVE,0
RTRUE
.FUNCT V-RESTORE
RESTORE \?ELS5
PRINTI "Ok."
CRLF
CALL V-FIRST-LOOK
RSTACK
?ELS5: PRINTR "Failed."
.FUNCT V-SAVE
SAVE \?ELS5
PRINTR "Ok."
?ELS5: PRINTR "Failed."
.FUNCT V-RESTART
CALL V-SCORE,TRUE-VALUE
PRINTI "Do you wish to restart? (Y is affirmative): "
CALL YES?
ZERO? STACK /FALSE
PRINTI "Restarting."
CRLF
RESTART
PRINTR "Failed."
.FUNCT V-WALK-AROUND
CALL USE-DIRECTIONS
RSTACK
.FUNCT USE-DIRECTIONS
PRINTR "You should use compass directions if you wish to move."
.FUNCT V-LAUNCH
FSET? PRSO,VEHBIT \?ELS5
PRINTR "You can't launch that by saying ""launch""!"
?ELS5: PRINTR "How in blazes does one launch that?"
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
ZERO? TRY-FLY /?CND1
CALL PRE-FLY
ZERO? STACK \TRUE
?CND1: ZERO? P-WALK-DIR \?ELS10
CALL PERFORM,V?WALK-TO,PRSO
RTRUE
?ELS10: GETPT HERE,PRSO >PT
ZERO? PT /?ELS12
PTSIZE PT >PTS
EQUAL? PTS,UEXIT \?ELS17
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS17: EQUAL? PTS,NEXIT \?ELS19
GET PT,NEXITSTR
PRINT STACK
CRLF
RETURN 2
?ELS19: EQUAL? PTS,FEXIT \?ELS25
GET PT,FEXITFCN
CALL STACK >RM
ZERO? RM /?ELS30
CALL GOTO,RM
RSTACK
?ELS30: RETURN 2
?ELS25: EQUAL? PTS,CEXIT \?ELS36
GETB PT,CEXITFLAG
VALUE STACK
ZERO? STACK /?ELS41
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS41: GET PT,CEXITSTR >STR
ZERO? STR /?ELS43
PRINT STR
CRLF
RETURN 2
?ELS43: EQUAL? WINNER,TURTLE \?ELS49
LOC PLAYER
IN? TURTLE,STACK \?ELS52
PRINTI """I can't go that way."""
CRLF
RETURN 2
?ELS52: CALL NO-RESPONSE
RETURN 2
?ELS49: CALL OUTSIDE?,HERE
ZERO? STACK /?ELS60
PRINTI "There's no path in that direction."
CRLF
RETURN 2
?ELS60: PRINTI "You can't go that way."
CRLF
RETURN 2
?ELS36: EQUAL? PTS,DEXIT \FALSE
GETB PT,DEXITOBJ >OBJ
FSET? OBJ,OPENBIT \?ELS77
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS77: GET PT,DEXITSTR >STR
ZERO? STR /?ELS79
PRINT STR
CRLF
CALL THIS-IS-IT,OBJ
RETURN 2
?ELS79: PRINTI "The "
PRINTD OBJ
PRINTI " is closed."
CRLF
CALL THIS-IS-IT,OBJ
RETURN 2
?ELS12: EQUAL? WINNER,PLAYER \?ELS91
ZERO? LIT \?ELS91
RANDOM 100
GRTR? 90,STACK \?ELS91
CALL JIGS-UP,STR?12
RETURN 2
?ELS91: EQUAL? WINNER,TURTLE \?ELS97
LOC PLAYER
IN? TURTLE,STACK \?ELS100
PRINTI """I can't go that way."""
CRLF
RETURN 2
?ELS100: CALL NO-RESPONSE
RETURN 2
?ELS97: PRINTI "You can't go that way."
CRLF
RETURN 2
.FUNCT THIS-IS-IT,OBJ
SET 'P-IT-OBJECT,OBJ
RETURN P-IT-OBJECT
.FUNCT V-INVENTORY
FIRST? WINNER \?ELS5
CALL PRINT-CONT,WINNER
RSTACK
?ELS5: PRINTR "You are empty-handed."
.FUNCT PRE-TAKE
IN? PRSO,WINNER \?ELS5
PRINTR "You already have it."
?ELS5: LOC PRSO
ZERO? STACK /?ELS14
LOC PRSO
FSET? STACK,CONTBIT \?ELS14
LOC PRSO
FSET? STACK,OPENBIT /?ELS14
PRINTR "You can't reach that."
?ELS14: ZERO? PRSI /?ELS20
EQUAL? PRSO,ME \?ELS26
CALL PERFORM,V?DROP,PRSI
RTRUE
?ELS26: LOC PRSO
EQUAL? PRSI,STACK /?ELS28
PRINTI "The "
PRINTD PRSO
PRINTI " isn't in the "
PRINTD PRSI
PRINTR "."
?ELS28: SET 'PRSI,FALSE-VALUE
RFALSE
?ELS20: LOC WINNER
EQUAL? PRSO,STACK \FALSE
PRINTR "You are in it!"
.FUNCT V-TAKE
CALL ITAKE
EQUAL? STACK,TRUE-VALUE \FALSE
PRINTR "Taken."
.FUNCT ITAKE,VB=1,CNT,OBJ,?TMP1
FSET? PRSO,TAKEBIT /?ELS5
ZERO? VB /FALSE
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RFALSE
?ELS5: LOC PRSO
IN? STACK,WINNER /?ELS13
CALL WEIGHT,PRSO >?TMP1
CALL WEIGHT,WINNER
ADD ?TMP1,STACK
GRTR? STACK,LOAD-ALLOWED \?ELS13
ZERO? VB /?CND16
PRINTI "Your load is too heavy"
LESS? LOAD-ALLOWED,LOAD-MAX \?ELS24
PRINTI ", especially in light of your exhaustion."
JUMP ?CND22
?ELS24: PRINTI "."
?CND22: CRLF
?CND16: RETURN 2
?ELS13: CALL CCOUNT,WINNER >CNT
GRTR? CNT,FUMBLE-NUMBER \?ELS34
MUL CNT,FUMBLE-PROB >?TMP1
RANDOM 100
GRTR? ?TMP1,STACK \?ELS34
PRINTI "You're holding too many things already."
CRLF
RETURN 2
?ELS34: MOVE PRSO,WINNER
FSET PRSO,TOUCHBIT
RTRUE
.FUNCT V-PUT-ON
FSET? PRSI,SURFACEBIT \?ELS5
CALL V-PUT
RSTACK
?ELS5: PRINTI "There's no good surface on the "
PRINTD PRSI
PRINTR "."
.FUNCT PRE-PUT
IN? PRSO,GLOBAL-OBJECTS /?THN6
FSET? PRSO,TAKEBIT /FALSE
?THN6: PRINTR "Nice try."
.FUNCT V-PUT,?TMP1
FSET? PRSI,OPENBIT /?CND1
FSET? PRSI,DOORBIT /?CND1
FSET? PRSI,CONTBIT /?CND1
FSET? PRSI,VEHBIT \?ELS3
JUMP ?CND1
?ELS3: PRINTR "I can't do that."
?CND1: FSET? PRSI,OPENBIT /?ELS14
PRINTI "The "
PRINTD PRSI
PRINTR " isn't open."
?ELS14: EQUAL? PRSI,PRSO \?ELS18
PRINTR "How can you do that?"
?ELS18: IN? PRSO,PRSI \?ELS22
PRINTI "The "
PRINTD PRSO
PRINTI " is already in the "
PRINTD PRSI
PRINTR "."
?ELS22: CALL WEIGHT,PRSI >?TMP1
CALL WEIGHT,PRSO
ADD ?TMP1,STACK >?TMP1
GETP PRSI,P?SIZE
SUB ?TMP1,STACK >?TMP1
GETP PRSI,P?CAPACITY
GRTR? ?TMP1,STACK \?ELS26
PRINTR "There's no room."
?ELS26: CALL HELD?,PRSO
ZERO? STACK \?ELS30
CALL ITAKE
EQUAL? STACK,M-FATAL,FALSE-VALUE /TRUE
?ELS30: MOVE PRSO,PRSI
FSET PRSO,TOUCHBIT
PRINTR "Done."
.FUNCT PRE-GIVE
CALL HELD?,PRSO
ZERO? STACK \FALSE
PRINTR "That's easy for you to say since you don't even have it."
.FUNCT PRE-SGIVE
CALL PERFORM,V?GIVE,PRSI,PRSO
RTRUE
.FUNCT HELD?,OBJ
ZERO? OBJ /FALSE
IN? OBJ,WINNER /TRUE
IN? OBJ,ROOMS /FALSE
IN? OBJ,GLOBAL-OBJECTS /FALSE
LOC OBJ
CALL HELD?,STACK
RSTACK
.FUNCT V-GIVE
FSET? PRSI,VICBIT /?ELS5
PRINTI "You can't give "
CALL PRINTA,PRSO
PRINTI " to "
CALL PRINTA,PRSI
PRINTR "!"
?ELS5: PRINTI "The "
PRINTD PRSI
PRINTR " refuses it politely."
.FUNCT V-SGIVE
PRINTR "**Bug"
.FUNCT V-DROP
CALL IDROP
ZERO? STACK /FALSE
PRINTR "Dropped."
.FUNCT V-THROW
CALL IDROP
ZERO? STACK /FALSE
PRINTR "Thrown."
.FUNCT IDROP
IN? PRSO,WINNER /?ELS5
LOC PRSO
IN? STACK,WINNER /?ELS5
PRINTI "You're not carrying the "
PRINTD PRSO
PRINTI "."
CRLF
RFALSE
?ELS5: IN? PRSO,WINNER /?ELS11
LOC PRSO
FSET? STACK,OPENBIT /?ELS11
PRINTI "The "
PRINTD PRSO
PRINTI " is closed."
CRLF
RFALSE
?ELS11: LOC WINNER
MOVE PRSO,STACK
RTRUE
.FUNCT V-OPEN,F,STR
FSET? PRSO,CONTBIT /?ELS5
PRINTI "You must tell me how to do that to "
CALL PRINTA,PRSO
PRINTR "."
?ELS5: GETP PRSO,P?CAPACITY
ZERO? STACK /?ELS9
FSET? PRSO,OPENBIT \?ELS14
PRINTR "It is already open."
?ELS14: FSET PRSO,OPENBIT
FIRST? PRSO \?THN24
FSET? PRSO,TRANSBIT \?ELS23
?THN24: PRINTR "Opened."
?ELS23: FIRST? PRSO >F \?ELS29
NEXT? F /?ELS29
GETP F,P?FDESC >STR
ZERO? STR /?ELS29
PRINTI "The "
PRINTD PRSO
PRINTI " opens."
CRLF
PRINT STR
CRLF
RTRUE
?ELS29: PRINTI "Opening the "
PRINTD PRSO
PRINTI " reveals "
CALL PRINT-CONTENTS,PRSO
PRINTR "."
?ELS9: FSET? PRSO,DOORBIT \?ELS43
FSET? PRSO,OPENBIT \?ELS48
PRINTR "It is already open."
?ELS48: PRINTI "The "
PRINTD PRSO
PRINTI " opens."
CRLF
FSET PRSO,OPENBIT
RTRUE
?ELS43: PRINTI "The "
PRINTD PRSO
PRINTR " fails to open."
.FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1
FIRST? OBJ >F \FALSE
?PRG6: NEXT? F >N /?KLU26
?KLU26: ZERO? 1ST? /?ELS10
SET '1ST?,FALSE-VALUE
JUMP ?CND8
?ELS10: PRINTI ", "
ZERO? N \?CND8
PRINTI "and "
?CND8: CALL PRINTA,F
SET 'F,N
ZERO? F \?PRG6
RTRUE
.FUNCT V-CLOSE
FSET? PRSO,CONTBIT /?ELS5
PRINTI "You must tell me how to do that to "
CALL PRINTA,PRSO
PRINTR "."
?ELS5: FSET? PRSO,SURFACEBIT /?ELS9
GETP PRSO,P?CAPACITY
ZERO? STACK /?ELS9
FSET? PRSO,OPENBIT \?ELS16
FCLEAR PRSO,OPENBIT
PRINTR "Closed."
?ELS16: PRINTR "It is already closed."
?ELS9: FSET? PRSO,DOORBIT \?ELS24
FSET? PRSO,OPENBIT \?ELS29
PRINTI "The "
PRINTD PRSO
PRINTI " is now closed."
CRLF
FCLEAR PRSO,OPENBIT
RTRUE
?ELS29: PRINTR "It is already closed."
?ELS24: PRINTR "You cannot close that."
.FUNCT CCOUNT,OBJ,CNT=0,X
FIRST? OBJ >X \?CND1
?PRG4: INC 'CNT
NEXT? X >X /?PRG4
?CND1: RETURN CNT
.FUNCT WEIGHT,OBJ,CONT,WT=0
FIRST? OBJ >CONT \?CND1
?PRG4: CALL WEIGHT,CONT
ADD WT,STACK >WT
NEXT? CONT >CONT /?PRG4
?CND1: GETP OBJ,P?SIZE
ADD WT,STACK
RSTACK
.FUNCT V-SCRIPT
GET 0,8
BOR STACK,1
PUT 0,8,STACK
PRINTI "Here begins"
PRINT COPR-NOTICE
CRLF
RTRUE
.FUNCT V-UNSCRIPT
PRINTI "Here ends"
PRINT COPR-NOTICE
CRLF
GET 0,8
BAND STACK,-2
PUT 0,8,STACK
RTRUE
.FUNCT PRE-MOVE
EQUAL? PRSO,EGG-KNOB-1,EGG-KNOB-2,EGG-KNOB-3 /FALSE
EQUAL? PRSO,EGG-KNOB-4,EGG-KNOB-5 /FALSE
CALL HELD?,PRSO
ZERO? STACK /FALSE
PRINTR "I don't juggle objects!"
.FUNCT V-MOVE
FSET? PRSO,TAKEBIT \?ELS5
PRINTI "Moving the "
PRINTD PRSO
PRINTR " reveals nothing."
?ELS5: PRINTI "You can't move the "
PRINTD PRSO
PRINTR "."
.FUNCT V-LAMP-ON
FSET? PRSO,LIGHTBIT \?ELS3
FSET? PRSO,ONBIT \?ELS6
PRINTR "It is already on."
?ELS6: FSET PRSO,ONBIT
PRINTI "The "
PRINTD PRSO
PRINTI " is now on."
CRLF
ZERO? LIT \TRUE
CALL LIT?,HERE >LIT
CRLF
CALL V-LOOK
RTRUE
?ELS3: PRINTR "You can't turn that on."
.FUNCT V-LAMP-OFF
FSET? PRSO,LIGHTBIT \?ELS3
FSET? PRSO,ONBIT /?ELS6
PRINTR "It is already off."
?ELS6: FCLEAR PRSO,ONBIT
EQUAL? ETERNAL-FLAME,LANTERN /?CND11
FCLEAR PRSO,LIGHTBIT
?CND11: ZERO? LIT /?CND14
CALL LIT?,HERE >LIT
?CND14: PRINTI "The "
PRINTD PRSO
PRINTI " is now off."
CRLF
CALL LIT?,HERE >LIT
CALL LIT?,HERE,FALSE-VALUE
ZERO? STACK \TRUE
EQUAL? HERE,GALLERY \?THN26
CALL DESCRIBE-PORTRAIT-GALLERY
ZERO? STACK \TRUE
?THN26: PRINTI "It is now pitch black."
CRLF
RTRUE
?ELS3: FSET? PRSO,ONBIT \?ELS31
PRINTR "It's not easy to see how. It's glowing by magic."
?ELS31: PRINTR "You can't turn that off."
.FUNCT V-WAIT,NUM=3
PRINTI "Time passes..."
CRLF
?PRG3: DLESS? 'NUM,0 \?ELS7
JUMP ?REP4
?ELS7: CALL CLOCKER
ZERO? STACK /?PRG3
?REP4: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
.FUNCT V-WAIT-FOR
LOC PRSO
EQUAL? STACK,HERE,WINNER \?ELS5
PRINTR "It's already here!"
?ELS5: PRINTR "You will probably be waiting quite a while."
.FUNCT PRE-BOARD,AV
LOC WINNER >AV
FSET? PRSO,VEHBIT \?ELS3
FSET? AV,VEHBIT \FALSE
PRINTI "You are already in the "
PRINTD AV
PRINTI ", cretin!"
CRLF
RETURN 2
?ELS3: PRINTI "You can't get into the "
PRINTD PRSO
PRINTI "!"
CRLF
RETURN 2
.FUNCT V-BOARD,AV
PRINTI "You are now in the "
PRINTD PRSO
PRINTI "."
CRLF
MOVE WINNER,PRSO
GETP PRSO,P?ACTION
CALL STACK,M-ENTER
RTRUE
.FUNCT V-DISEMBARK
LOC WINNER
EQUAL? STACK,PRSO /?ELS5
PRINTI "You're not in that!"
CRLF
RETURN 2
?ELS5: PRINTI "You are on your feet again."
CRLF
MOVE WINNER,HERE
RTRUE
.FUNCT GOTO,RM,V?=1,OLIT,OHERE
SET 'OHERE,HERE
SET 'OLIT,LIT
MOVE WINNER,RM
SET 'HERE,RM
CALL LIT?,HERE >LIT
EQUAL? WINNER,PLAYER \?CND1
ZERO? OLIT \?CND1
ZERO? LIT \?CND1
RANDOM 100
GRTR? 85,STACK \?CND1
CALL JIGS-UP,STR?19
RTRUE
?CND1: GETP HERE,P?ACTION
CALL STACK,M-ENTER
EQUAL? WINNER,PLAYER \?CND6
SET 'ADV-OLD-LOC,FALSE-VALUE
IN? ADVENTURER,OHERE \?CND6
ZERO? ADVENTURER-CHARMED /?CND6
CALL WINNER-HAS-TREASURE?
ZERO? STACK /?CND6
EQUAL? HERE,T-A,TEMPLE,CLOSET /?CND6
EQUAL? HERE,WEST-CASTLE /?CND6
PRINTI "The adventurer, proceeding cautiously, follows you. He seems to be paying particular attention to your possessions."
CRLF
CRLF
MOVE ADVENTURER,HERE
SET 'ADVENTURER-STAY,TRUE-VALUE
?CND6: EQUAL? HERE,RM \TRUE
EQUAL? PLAYER,WINNER /?ELS20
EQUAL? HERE,CLOSET,ENGINE-ROOM /?ELS23
IN? PLAYER,OHERE \?ELS23
PRINTI "The "
PRINTD WINNER
PRINTR ", ever the good friend, leaves you."
?ELS23: EQUAL? HERE,CLOSET,ENGINE-ROOM /TRUE
IN? PLAYER,HERE \TRUE
PRINTI "The "
PRINTD WINNER
PRINTR " returns to you."
?ELS20: ZERO? V? /TRUE
CALL V-FIRST-LOOK
RTRUE
.FUNCT WINNER-HAS-TREASURE?
IN? EGG,WINNER /TRUE
IN? MAGIC-KNIFE,WINNER /TRUE
IN? JEWELLED-BOX,WINNER /TRUE
IN? SILVER-SPOON,WINNER /TRUE
RFALSE
.FUNCT V-BACK
CALL USE-DIRECTIONS
RSTACK
.FUNCT V-POUR-ON
PRINTR "You can't pour that on anything!"
.FUNCT V-SPRAY
CALL V-SQUEEZE
RSTACK
.FUNCT V-SSPRAY
CALL PERFORM,V?SPRAY,PRSI,PRSO
RSTACK
.FUNCT V-SQUEEZE
FSET? PRSO,VILLAIN \?ELS3
PRINTI "The "
PRINTD PRSO
PRINTI " does not understand this."
JUMP ?CND1
?ELS3: PRINTI "How singularly useless."
?CND1: CRLF
RTRUE
.FUNCT PRE-OIL
PRINTR "You probably put spinach in your gas tank, too."
.FUNCT V-OIL
PRINTR "That's not very useful."
.FUNCT V-ADVENT
PRINTR "A hollow voice says ""Fool."""
.FUNCT V-DRINK,S
EQUAL? PRSO,WATER \?ELS5
FSET? PRSO,RMUNGBIT \?ELS5
PRINTR "Ooh! The water tastes terrible, and even the slightest amount makes you ill."
?ELS5: EQUAL? PRSO,GLOBAL-WATER \?ELS11
EQUAL? HERE,BEACH,FOREST-2 \?ELS11
PRINTR "Ooh! That tastes terrible!"
?ELS11: EQUAL? PRSO,WATER,GLOBAL-WATER /?ELS17
PRINTR "You can't drink that!"
?ELS17: CALL INT,I-THIRST
GET STACK,C-TICK >S
GRTR? S,60 \?CND22
PRINTR "You aren't the least bit thirsty."
?CND22: ADD S,39
CALL QUEUE,I-THIRST,STACK
SET 'THIRST-COUNT,0
ADD SCORE,DRINK-POINT >SCORE
SET 'DRINK-POINT,0
PRINTI "The delicious spring water tasted great"
EQUAL? HERE,SHADY-BROOK \?ELS33
PRINTR "."
?ELS33: EQUAL? PRSO,WATER \?ELS37
GETP PRSO,P?SIZE
SUB STACK,1 >S
PUTP PRSO,P?SIZE,S
ZERO? S \?CND38
REMOVE WATER
?CND38: GET JUG-FILLS,S
PRINT STACK
CRLF
RTRUE
?ELS37: PRINTR "."
.FUNCT V-EAT
PRINTR "Did they teach you to eat that in survival school?"
.FUNCT V-CURSES
ZERO? PRSO /?ELS5
FSET? PRSO,VILLAIN \?ELS11
PRINTR "Insults of this nature won't help you."
?ELS11: PRINTR "What a loony!"
?ELS5: PRINTR "Such language from an enchanter!"
.FUNCT V-LISTEN
PRINTI "The "
PRINTD PRSO
PRINTR " makes no sound."
.FUNCT V-FOLLOW
PRINTR "You're nuts!"
.FUNCT V-STAY
PRINTR "You will be lost without me!"
.FUNCT V-PRAY
PRINTR "If you pray enough, your prayers may be answered."
.FUNCT V-LEAP,TX,S
ZERO? PRSO /?ELS5
IN? PRSO,HERE \?ELS11
FSET? PRSO,VILLAIN \?ELS16
PRINTI "The "
PRINTD PRSO
PRINTR " is too big to jump over."
?ELS16: CALL V-SKIP
RSTACK
?ELS11: PRINTR "That would be a good trick."
?ELS5: GETPT HERE,P?DOWN >TX
ZERO? TX /?ELS26
PTSIZE TX >S
EQUAL? S,2 /?THN32
EQUAL? S,4 \?ELS31
GETB TX,1
VALUE STACK
ZERO? STACK \?ELS31
?THN32: PRINTI "This was not a very safe place to try jumping."
CRLF
CALL PICK-ONE,JUMPLOSS
CALL JIGS-UP,STACK
RSTACK
?ELS31: CALL V-SKIP
RSTACK
?ELS26: CALL V-SKIP
RSTACK
.FUNCT V-SKIP
PRINTR "Wasn't that fun?"
.FUNCT V-LEAVE
CALL DO-WALK,P?OUT
RSTACK
.FUNCT V-HELLO
ZERO? PRSO /?ELS5
FSET? PRSO,VILLAIN \?ELS11
PRINTI "The "
PRINTD PRSO
PRINTR " bows his head to you in greeting."
?ELS11: PRINTI "I think that only schizophrenics say ""Hello"" to a "
PRINTD PRSO
PRINTR "."
?ELS5: CALL PICK-ONE,HELLOS
PRINT STACK
CRLF
RTRUE
.FUNCT PRE-READ
EQUAL? PRSO,SPELL-BOOK /FALSE
ZERO? LIT \?ELS7
PRINTR "It is impossible to read in the dark."
?ELS7: ZERO? PRSI /FALSE
FSET? PRSI,TRANSBIT /FALSE
PRINTI "How does one look through "
CALL PRINTA,PRSI
PRINTR "?"
.FUNCT V-READ
FSET? PRSO,READBIT /?ELS5
PRINTI "How can I read "
CALL PRINTA,PRSO
PRINTR "?"
?ELS5: GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
.FUNCT V-LOOK-UNDER
PRINTR "There is nothing but dust there."
.FUNCT V-LOOK-BEHIND
PRINTI "There is nothing behind the "
PRINTD PRSO
PRINTR "."
.FUNCT V-LOOK-INSIDE
FSET? PRSO,DOORBIT \?ELS5
FSET? PRSO,OPENBIT \?ELS8
PRINTI "The "
PRINTD PRSO
PRINTI " is open."
JUMP ?CND6
?ELS8: PRINTI "The "
PRINTD PRSO
PRINTI " is closed."
?CND6: CRLF
RTRUE
?ELS5: FSET? PRSO,CONTBIT \?ELS16
FSET? PRSO,VICBIT \?ELS21
PRINTR "There is nothing special to be seen."
?ELS21: CALL SEE-INSIDE?,PRSO
ZERO? STACK /?ELS25
FIRST? PRSO \?ELS30
CALL PRINT-CONT,PRSO
ZERO? STACK \TRUE
?ELS30: FSET? PRSO,SURFACEBIT \?ELS34
PRINTI "There is nothing on the "
PRINTD PRSO
PRINTR "."
?ELS34: PRINTI "The "
PRINTD PRSO
PRINTR " is empty."
?ELS25: PRINTI "The "
PRINTD PRSO
PRINTR " is closed."
?ELS16: PRINTI "You can't look inside "
CALL PRINTA,PRSO
PRINTR "."
.FUNCT SEE-INSIDE?,OBJ
FSET? OBJ,INVISIBLE /FALSE
FSET? OBJ,TRANSBIT /TRUE
FSET? OBJ,OPENBIT /TRUE
RFALSE
.FUNCT V-REPENT
PRINTR "It could very well be too late!"
.FUNCT PRE-BURN
ZERO? PRSI \?ELS5
PRINTR "Your blazing gaze is insufficient."
?ELS5: EQUAL? PRSI,ETERNAL-FLAME /FALSE
PRINTI "With "
CALL PRINTA,PRSI
PRINTR "??!?"
.FUNCT V-BURN
FSET? PRSO,BURNBIT \?ELS5
IN? PRSO,WINNER \?ELS10
REMOVE PRSO
PRINTI "The "
PRINTD PRSO
PRINTI " catches fire."
CRLF
CALL JIGS-UP,STR?31
RSTACK
?ELS10: REMOVE PRSO
PRINTI "The "
PRINTD PRSO
PRINTR " catches fire and is consumed."
?ELS5: PRINTI "I don't think you can burn "
CALL PRINTA,PRSO
PRINTR "."
.FUNCT V-TURN
PRINTR "This has no effect."
.FUNCT V-PUMP
PRINTR "It's not clear how."
.FUNCT V-INFLATE
PRINTR "How can you inflate that?"
.FUNCT V-DEFLATE
PRINTR "Come on, now!"
.FUNCT V-LOCK
PRINTR "It doesn't seem to work."
.FUNCT V-PICK
PRINTR "You can't pick that."
.FUNCT V-UNLOCK
CALL V-LOCK
RSTACK
.FUNCT V-CUT
FSET? PRSO,VILLAIN \?ELS5
CALL PERFORM,V?KILL,PRSO,PRSI
RSTACK
?ELS5: FSET? PRSO,BURNBIT \?ELS7
FSET? PRSI,WEAPONBIT \?ELS7
REMOVE PRSO
PRINTI "Your skillful "
PRINTD PRSI
PRINTI "smanship slices the "
PRINTD PRSO
PRINTR " into innumerable slivers which evaporate instantaneously."
?ELS7: FSET? PRSI,WEAPONBIT /?ELS13
PRINTI "I doubt that the ""cutting edge"" of "
CALL PRINTA,PRSI
PRINTR " is adequate."
?ELS13: PRINTI "Strange concept, cutting the "
PRINTD PRSO
PRINTR "...."
.FUNCT PRE-HIT
ZERO? PRSI /FALSE
IN? PRSI,WINNER /FALSE
PRINTI "You don't have the "
PRINTD PRSI
PRINTR "."
.FUNCT V-KILL
CALL IKILL,STR?32
RSTACK
.FUNCT IKILL,STR
ZERO? PRSO \?ELS5
PRINTI "There is nothing here to "
PRINT STR
PRINTR "."
?ELS5: FSET? PRSO,VILLAIN /?ELS9
FSET? PRSO,VICBIT /?ELS9
PRINTI "I've known strange people, but fighting a "
PRINTD PRSO
PRINTR "?"
?ELS9: ZERO? PRSI /?THN16
EQUAL? PRSI,HANDS \?ELS15
?THN16: PRINTI "Trying to "
PRINT STR
PRINTI " a "
PRINTD PRSO
PRINTR " with your bare hands is suicidal."
?ELS15: IN? PRSI,WINNER /?ELS21
PRINTI "You aren't even holding the "
PRINTD PRSI
PRINTR "."
?ELS21: FSET? PRSI,WEAPONBIT /?ELS25
PRINTI "Trying to "
PRINT STR
PRINTI " the "
PRINTD PRSO
PRINTI " with a "
PRINTD PRSI
PRINTR " is suicidal."
?ELS25: PRINTR "You'd never survive the attack."
.FUNCT V-ATTACK
CALL IKILL,STR?33
RSTACK
.FUNCT V-SWING
ZERO? PRSI \?ELS5
PRINTR "Whoosh!"
?ELS5: CALL PERFORM,V?ATTACK,PRSI,PRSO
RSTACK
.FUNCT V-KICK
CALL HACK-HACK,STR?34
RSTACK
.FUNCT V-WAVE
CALL HACK-HACK,STR?35
RSTACK
.FUNCT V-WAVE-AT
PRINTI "Despite your friendly nature, the "
PRINTD PRSO
PRINTR " isn't likely to respond."
.FUNCT V-RAISE
CALL HACK-HACK,STR?36
RSTACK
.FUNCT V-LOWER
CALL HACK-HACK,STR?36
RSTACK
.FUNCT V-RUB
CALL HACK-HACK,STR?37
RSTACK
.FUNCT V-PUSH
CALL HACK-HACK,STR?38
RSTACK
.FUNCT V-PUSH-TO
PRINTR "You can't push things to that."
.FUNCT V-MUNG
FSET? PRSO,VICBIT /?ELS5
CALL HACK-HACK,STR?39
RSTACK
?ELS5: ZERO? PRSI \?ELS7
PRINTI "Trying to break the "
PRINTD PRSO
PRINTR " with your bare hands is suicidal."
?ELS7: FSET? PRSI,WEAPONBIT /?ELS11
PRINTI "Trying to destroy the "
PRINTD PRSO
PRINTI " with a "
PRINTD PRSI
PRINTR " is quite self-destructive."
?ELS11: PRINTR "You can't."
.FUNCT HACK-HACK,STR
IN? PRSO,GLOBAL-OBJECTS \?ELS5
EQUAL? PRSA,V?LOWER,V?RAISE,V?WAVE \?ELS5
PRINTI "The "
PRINTD PRSO
PRINTR " isn't here!"
?ELS5: PRINT STR
PRINTD PRSO
CALL PICK-ONE,HO-HUM
PRINT STACK
CRLF
RTRUE
.FUNCT WORD-TYPE,OBJ,WORD,SYNS,?TMP1
GETPT OBJ,P?SYNONYM >SYNS
PTSIZE SYNS
DIV STACK,2
SUB STACK,1
CALL ZMEMQ,WORD,SYNS,STACK
RSTACK
.FUNCT V-KNOCK
CALL WORD-TYPE,PRSO,W?DOOR
ZERO? STACK /?ELS5
PRINTR "I don't think that anybody's home."
?ELS5: PRINTI "Why knock on "
CALL PRINTA,PRSO
PRINTR "?"
.FUNCT V-YELL
PRINTR "Aarrrrrgggggggghhhhhhhhhhh!"
.FUNCT V-PLUG
PRINTR "This has no effect."
.FUNCT V-EXORCISE
PRINTR "You can't do that with mere words!"
.FUNCT V-SHAKE,X
FSET? PRSO,VILLAIN \?ELS5
PRINTR "Be real."
?ELS5: FSET? PRSO,TAKEBIT /?ELS9
PRINTR "You can't take it; thus, you can't shake it!"
?ELS9: PRINTR "There's no point in shaking that."
.FUNCT PRE-DIG
ZERO? PRSI \?CND1
SET 'PRSI,HANDS
?CND1: FSET? PRSO,TOOLBIT \?CND4
SET 'PRSI,PRSO
SET 'PRSO,GROUND
?CND4: FSET? PRSI,TOOLBIT /FALSE
PRINTI "Digging with the "
PRINTD PRSI
PRINTR " is very silly."
.FUNCT V-DIG
PRINTR "The ground is unsuitable for digging here."
.FUNCT V-SMELL
PRINTI "It smells just like "
CALL PRINTA,PRSO
PRINTR "."
.FUNCT GLOBAL-IN?,OBJ1,OBJ2,TX
GETPT OBJ2,P?GLOBAL >TX
ZERO? TX /FALSE
PTSIZE TX
SUB STACK,1
CALL ZMEMQB,OBJ1,TX,STACK
RSTACK
.FUNCT V-SWIM
ZERO? PRSO \?CND1
CALL GLOBAL-IN?,GLOBAL-WATER,HERE
ZERO? STACK /?CND1
SET 'PRSO,GLOBAL-WATER
?CND1: EQUAL? PRSO,GLOBAL-WATER,SEA \?ELS10
PRINTR "You'd probably drown."
?ELS10: EQUAL? PRSO,WATER \?ELS14
PRINTR "This is a very small brook. Forget it."
?ELS14: PRINTR "There's nothing to swim in!"
.FUNCT V-UNTIE
PRINTR "This cannot be tied, so it cannot be untied!"
.FUNCT PRE-TIE
EQUAL? PRSI,WINNER \FALSE
PRINTR "You can't tie it to yourself."
.FUNCT V-TIE
PRINTI "You can't tie the "
PRINTD PRSO
PRINTR " to that."
.FUNCT V-TIE-UP
PRINTR "You could certainly never tie it with that!"
.FUNCT V-MELT
PRINTI "I'm not sure that "
CALL PRINTA,PRSO
PRINTR " can be melted."
.FUNCT V-MUMBLE
PRINTR "You'll have to speak up if you expect me to hear you!"
.FUNCT V-ALARM
PRINTI "The "
PRINTD PRSO
PRINTR " isn't sleeping."
.FUNCT V-ZORK
PRINTR "ZORK (R) - A trilogy of fantasy classics from INFOCOM. "
.FUNCT V-CLIMB-ON
FSET? PRSO,VEHBIT \?ELS5
CALL V-CLIMB-UP,P?UP,TRUE-VALUE
RSTACK
?ELS5: PRINTI "You can't climb onto the "
PRINTD PRSO
PRINTR "."
.FUNCT V-CLIMB-FOO
CALL V-CLIMB-UP,P?UP,TRUE-VALUE
RSTACK
.FUNCT V-CLIMB-UP,DIR=P?UP,OBJ=0,X,?TMP1
GETPT HERE,DIR
ZERO? STACK /?ELS5
CALL DO-WALK,DIR
RTRUE
?ELS5: ZERO? OBJ \?ELS7
PRINTR "You can't go that way."
?ELS7: ZERO? OBJ /?ELS11
GETPT PRSO,P?SYNONYM >X
PTSIZE X
CALL ZMEMQ,W?WALL,X,STACK
ZERO? STACK /?ELS11
PRINTR "Climbing the walls is to no avail."
?ELS11: PRINTR "Bizarre!"
.FUNCT V-LIE-DOWN
EQUAL? HERE,BEDROOM \?ELS5
CALL PERFORM,V?BOARD,BED
RTRUE
?ELS5: CALL PERFORM,V?SLEEP
RTRUE
.FUNCT V-CLIMB-DOWN
CALL V-CLIMB-UP,P?DOWN
RSTACK
.FUNCT V-SEND
FSET? PRSO,VILLAIN \?ELS5
PRINTI "Why would you send for the "
PRINTD PRSO
PRINTR "?"
?ELS5: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-WIND
PRINTI "You cannot wind up "
CALL PRINTA,PRSO
PRINTR "."
.FUNCT V-COUNT
PRINTR "You have lost your mind."
.FUNCT V-PUT-UNDER
PRINTR "You can't put anything under that."
.FUNCT V-PLAY
EQUAL? PRSO,KRILL,GLOBAL-KRILL \?ELS5
PRINTI "You are so engrossed in the role of the "
PRINTD PRSO
PRINTI " that you kill yourself, just as he would have done!"
CRLF
CALL JIGS-UP,FALSE-VALUE
RSTACK
?ELS5: PRINTR "How peculiar!"
.FUNCT V-ENTER
CALL DO-WALK,P?IN
RSTACK
.FUNCT V-EXIT
CALL DO-WALK,P?OUT
RSTACK
.FUNCT V-CROSS
PRINTR "You can't cross that!"
.FUNCT V-SEARCH
PRINTR "You find nothing unusual."
.FUNCT V-FIND,L
LOC PRSO >L
EQUAL? PRSO,HANDS \?ELS5
PRINTR "Within six feet of your head, assuming you haven't left that somewhere."
?ELS5: EQUAL? PRSO,ME \?ELS9
PRINTR "You're around here somewhere..."
?ELS9: IN? PRSO,WINNER \?ELS13
PRINTR "You have it!"
?ELS13: IN? PRSO,HERE /?THN18
IN? PRSO,LOCAL-GLOBALS /?THN18
EQUAL? PRSO,PSEUDO-OBJECT,ROAD \?ELS17
?THN18: PRINTR "It's right in front of you."
?ELS17: FSET? L,VILLAIN \?ELS23
PRINTI "The "
PRINTD L
PRINTR " has it."
?ELS23: FSET? L,CONTBIT \?ELS27
PRINTI "It's in the "
PRINTD L
PRINTR "."
?ELS27: PRINTR "Beats me, but it's not here."
.FUNCT V-TELL
EQUAL? PRSO,TURTLE,ADVENTURER,FROG \?ELS5
ZERO? P-CONT /?ELS10
SET 'WINNER,PRSO
LOC WINNER >HERE
RETURN HERE
?ELS10: PRINTI "The "
PRINTD PRSO
PRINTR " looks at you expectantly, as though he thought you were about to talk."
?ELS5: PRINTI "You can't talk to the "
PRINTD PRSO
PRINTI "!"
CRLF
SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
RETURN 2
.FUNCT V-ANSWER
PRINTI "Nobody seems to be awaiting your answer."
CRLF
SET 'P-CONT,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
.FUNCT V-REPLY
PRINTI "It is hardly likely that the "
PRINTD PRSO
PRINTI " is interested."
CRLF
SET 'P-CONT,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
.FUNCT V-KISS
PRINTR "I'd sooner kiss a pig."
.FUNCT V-RAPE
PRINTR "What a (ahem!) strange idea."
.FUNCT FIND-IN,WHERE,WHAT,W
FIRST? WHERE >W /?KLU11
?KLU11: ZERO? W /FALSE
?PRG4: FSET? W,WHAT \?ELS8
RETURN W
?ELS8: NEXT? W >W /?PRG4
RFALSE
.FUNCT V-SAY,V
CALL FIND-IN,HERE,VICBIT >V
ZERO? V /?ELS5
PRINTI "You must address the "
PRINTD V
PRINTR " directly."
?ELS5: GET P-LEXV,P-CONT
EQUAL? STACK,W?HELLO \?ELS9
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
?ELS9: SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
PRINTR "Talking to yourself is said to be a sign of impending mental collapse."
.FUNCT V-SPIN
PRINTR "You can't spin that!"
.FUNCT V-THROUGH,M
FSET? PRSO,DOORBIT \?ELS5
CALL OTHER-SIDE,PRSO
CALL DO-WALK,STACK
RTRUE
?ELS5: FSET? PRSO,VEHBIT \?ELS7
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS7: FSET? PRSO,TAKEBIT /?ELS9
PRINTI "You hit your head against the "
PRINTD PRSO
PRINTR " as you attempt this feat."
?ELS9: IN? PRSO,WINNER \?ELS13
PRINTR "That would involve quite a contortion!"
?ELS13: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-WEAR
PRINTI "You can't wear the "
PRINTD PRSO
PRINTR "."
.FUNCT V-THROW-OFF
PRINTR "You can't throw anything off that!"
.FUNCT V-$VERIFY
EQUAL? PRSO,INTNUM \?ELS5
EQUAL? P-NUMBER,4338 \?ELS5
PRINTN SERIAL
CRLF
RTRUE
?ELS5: ZERO? PRSO /?ELS11
PRINTR "I don't understand that sentence."
?ELS11: PRINTI "Verifying disk..."
CRLF
VERIFY \?ELS23
PRINTR "The disk is correct."
?ELS23: CRLF
PRINTR "** Disk Failure **"
.FUNCT V-STAND
LOC WINNER
FSET? STACK,VEHBIT \?ELS5
LOC WINNER
CALL PERFORM,V?DISEMBARK,STACK
RTRUE
?ELS5: PRINTR "You are already standing, I think."
.FUNCT V-PUT-BEHIND
PRINTR "That hiding place is too obvious."
.FUNCT DO-WALK,DIR
SET 'P-WALK-DIR,DIR
CALL PERFORM,V?WALK,DIR
RSTACK
.FUNCT V-WALK-TO
IN? PRSO,HERE /?THN6
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK /?ELS5
?THN6: PRINTR "It's here!"
?ELS5: PRINTR "You should supply a direction!"
.FUNCT OTHER-SIDE,DOBJ,P=0,TX
?PRG1: NEXTP HERE,P >P
LESS? P,LOW-DIRECTION /FALSE
GETPT HERE,P >TX
PTSIZE TX
EQUAL? STACK,DEXIT \?PRG1
GETB TX,DEXITOBJ
EQUAL? STACK,DOBJ \?PRG1
RETURN P
.FUNCT V-DRINK-FROM
EQUAL? PRSO,GLOBAL-WATER \?ELS5
CALL PERFORM,V?DRINK,PRSO
RTRUE
?ELS5: EQUAL? PRSO,JUG \?ELS7
IN? WATER,JUG \?ELS7
CALL PERFORM,V?DRINK,WATER
RTRUE
?ELS7: PRINTR "How peculiar!"
.FUNCT V-LEAN-ON
PRINTR "Are you so very tired, then?"
.FUNCT V-MAKE-LINE-TO,?TMP1
FSET? PRSO,POINTBIT \?ELS5
FSET? PRSI,POINTBIT \?ELS5
IN? PENCIL,WINNER /?ELS12
PRINTR "You're not holding anything you can make it with."
?ELS12: ZERO? PENCIL-COUNT \?ELS16
PRINTR "There's not enough left of the pencil to make a line with."
?ELS16: GETP PRSO,P?POINT
GET TMAZE-ROOMS,STACK >?TMP1
GETP PRSI,P?POINT
GET TMAZE-ROOMS,STACK
CALL CONNECT,?TMP1,STACK
RSTACK
?ELS5: PRINTR "That's silly."
.FUNCT V-MAKE-LINE,?TMP1
ZERO? PRSI /?ELS5
FSET? PRSI,POINTBIT \?ELS5
CALL PERFORM,V?MAKE-LINE-TO,PRSO,PRSI
RETURN 2
?ELS5: ZERO? PRSI /?ELS11
EQUAL? PRSI,PENCIL /?ELS11
PRINTR "You won't write anything with that!"
?ELS11: CALL 2OBJS?
ZERO? STACK \?ELS17
RETURN 2
?ELS17: GET P-PRSO,1 >?TMP1
GET P-PRSO,2
CALL PERFORM,V?MAKE-LINE-TO,?TMP1,STACK
RETURN 2
.FUNCT V-ERASE-LINE-TO,?TMP1
FSET? PRSO,POINTBIT \?ELS5
FSET? PRSI,POINTBIT \?ELS5
IN? PENCIL,WINNER /?ELS12
PRINTR "You're not holding anything you can erase it with."
?ELS12: ZERO? ERASER-COUNT \?ELS16
PRINTR "There's not enough left of the eraser."
?ELS16: GETP PRSO,P?POINT
GET TMAZE-ROOMS,STACK >?TMP1
GETP PRSI,P?POINT
GET TMAZE-ROOMS,STACK
CALL DISCONNECT,?TMP1,STACK
RSTACK
?ELS5: PRINTR "That's silly."
.FUNCT V-ERASE-LINE,?TMP1
ZERO? PRSI /?ELS5
EQUAL? PRSI,PENCIL /?ELS5
PRINTR "You won't erase anything with that!"
?ELS5: GET P-PRSO,0
EQUAL? STACK,1 \?ELS11
GET P-PRSO,1
EQUAL? STACK,PENCIL \?ELS16
PRINTR "If you want to erase one of the pencil lines, you should specify the line. For example, ""ERASE THE LINE BETWEEN X AND Z."""
?ELS16: GET P-PRSO,1
FSET? STACK,POINTBIT \?ELS20
PRINTR "You can't seem to erase the marking."
?ELS20: PRINTR "You can't erase that!"
?ELS11: CALL 2OBJS?
ZERO? STACK \?ELS28
RETURN 2
?ELS28: GET P-PRSO,1 >?TMP1
GET P-PRSO,2
CALL PERFORM,V?ERASE-LINE-TO,?TMP1,STACK
RETURN 2
.FUNCT 2OBJS?
GET P-PRSO,0
EQUAL? STACK,2 /TRUE
PUT P-PRSO,0,1
PRINTI "That sentence doesn't make sense."
CRLF
RFALSE
.FUNCT V-REACH-IN,OBJ
FSET? PRSO,CONTBIT \?THN6
FSET? PRSO,VILLAIN \?ELS5
?THN6: PRINTR "What a maroon!"
?ELS5: FSET? PRSO,OPENBIT /?ELS11
PRINTR "It's not open."
?ELS11: FIRST? PRSO >OBJ \?THN16
FSET? OBJ,INVISIBLE /?THN16
FSET? OBJ,TAKEBIT /?ELS15
?THN16: PRINTR "It's empty."
?ELS15: PRINTI "You reach into the "
PRINTD PRSO
PRINTR " and feel something."
.FUNCT ROB,WHO,WHERE=0,HIDE?=0,N,X,ROBBED?=0
FIRST? WHO >X /?KLU13
?KLU13:
?PRG1: ZERO? X \?CND3
RETURN ROBBED?
?CND3: NEXT? X >N /?KLU14
?KLU14: CALL RIPOFF,X,WHERE
ZERO? STACK /?CND6
ZERO? HIDE? /?CND9
FSET X,NDESCBIT
?CND9: SET 'ROBBED?,X
?CND6: SET 'X,N
JUMP ?PRG1
.FUNCT BLT,WHO,WHERE,N,X,CNT=0
FIRST? WHO >X /?KLU6
?KLU6:
?PRG1: ZERO? X \?CND3
RETURN CNT
?CND3: NEXT? X >N /?KLU7
?KLU7: MOVE X,WHERE
INC 'CNT
SET 'X,N
JUMP ?PRG1
.FUNCT RIPOFF,X,WHERE
FSET? X,INVISIBLE /FALSE
FSET? X,SCROLLBIT /FALSE
EQUAL? X,BREAD,JUG /FALSE
FSET? X,TOUCHBIT \FALSE
FSET? X,TAKEBIT \FALSE
EQUAL? X,STRONG-BOX /FALSE
ZERO? WHERE /?ELS12
IN? X,WHERE /FALSE
?ELS12: ZERO? WHERE /?ELS16
MOVE X,WHERE
RTRUE
?ELS16: REMOVE X
RTRUE
.FUNCT V-POINT
IN? ADVENTURER,HERE \?ELS5
IN? PRSO,ADVENTURER \?ELS10
CALL PERFORM,V?ASK-FOR,ADVENTURER,PRSO
RTRUE
?ELS10: ZERO? ADVENTURER-CHARMED /?ELS12
PRINTI "The adventurer nods as if in approval of the "
PRINTD PRSO
PRINTR "."
?ELS12: PRINTI "The adventurer backs off from the "
PRINTD PRSO
PRINTR "."
?ELS5: PRINTR "Not much use in that...."
.FUNCT V-ASK-FOR
EQUAL? PRSO,ADVENTURER \?ELS5
IN? PRSI,PRSO /?ELS10
PRINTR "He's not holding that!"
?ELS10: ZERO? ADVENTURER-CHARMED /?ELS14
FSET? PRSI,TREASURE \?ELS20
PRINTR "The adventurer politely refuses, indicating its great beauty and value."
?ELS20: EQUAL? PRSI,LANTERN,SWORD \?ELS24
PRINTR "The adventurer refuses, indicating its utter necessity in his travels."
?ELS24: MOVE PRSI,WINNER
PRINTI "The adventurer, not seeing any use in keeping the "
PRINTD PRSI
PRINTR " anyway, hands it to you gladly."
?ELS14: PRINTR "The adventurer waves you off with an aggressive gesture."
?ELS5: PRINTI "The "
PRINTD PRSO
PRINTR " is not likely to oblige."
.FUNCT V-THANK
ZERO? PRSO /?ELS5
FSET? PRSO,VILLAIN \?ELS5
PRINTI "The "
PRINTD PRSO
PRINTR " seems less than overjoyed."
?ELS5: PRINTR "The Circle will revoke your certificate if you keep this up."
.FUNCT V-FILL
ZERO? PRSI \?ELS5
CALL GLOBAL-IN?,GLOBAL-WATER,HERE
ZERO? STACK /?ELS10
CALL PERFORM,V?FILL,PRSO,GLOBAL-WATER
RSTACK
?ELS10: PRINTR "There's nothing to fill it with."
?ELS5: PRINTR "I don't see how you propose to do that."
.FUNCT V-ESCAPE
PRINTI "There is no escape from the "
PRINTD PRSO
PRINTR "!"
.FUNCT V-WRITE-WITH
EQUAL? PRSO,PENCIL \?ELS5
IN? TMAP,WINNER \?ELS10
CALL WRITE-HINT
RTRUE
?ELS10: PRINTR "There's nothing good to write on."
?ELS5: PRINTR "You can't write with that!"
.FUNCT WRITE-HINT
PRINTR "You can't draw on it arbitrarily. Rather, the pencil seems to home in on various points on the map, daring you to draw a line between them."
.FUNCT V-WRITE-ON,SPELL
EQUAL? PRSI,PENCIL /?THN6
ZERO? PRSI \?ELS5
IN? PENCIL,WINNER \?ELS5
?THN6: EQUAL? PRSO,TMAP \?ELS12
CALL WRITE-HINT
RTRUE
?ELS12: FSET? PRSO,SCROLLBIT \?ELS14
FIRST? PRSO \?ELS14
FIRST? PRSO >SPELL /?KLU32
?KLU32: FSET SPELL,RMUNGBIT
PRINTR "You've written on the scroll all right, but you've also defaced the spell written on it."
?ELS14: PRINTR "You can't write on that!"
?ELS5: ZERO? PRSI /?ELS24
PRINTR "You can't write with that!"
?ELS24: PRINTR "You have nothing to write with!"
.FUNCT V-AVOID
PRINTR "Perhaps that is unavoidable."
.FUNCT V-SHOW
PRINTI "I doubt the "
PRINTD PRSI
PRINTR " is interested."
.FUNCT PRE-SSHOW
CALL PERFORM,V?SHOW,PRSI,PRSO
RTRUE
.FUNCT V-SSHOW
CALL V-SGIVE
RSTACK
.FUNCT PRE-BRING
EQUAL? PRSO,ME /FALSE
PRINTR "I don't understand that sentence."
.FUNCT V-BRING
EQUAL? WINNER,PLAYER \?ELS5
PRINTR "Are you talking to yourself again?"
?ELS5: PRINTR """You can get it yourself!"""
.FUNCT V-DRAW-ON
FSET? PRSO,SCROLLBIT \?ELS5
CALL PERFORM,V?WRITE-ON,PRSO
RTRUE
?ELS5: PRINTR "You can't draw on that!"
.FUNCT V-SHARPEN
EQUAL? PRSI,MAGIC-KNIFE,SWORD \?ELS5
EQUAL? PRSO,MAGIC-KNIFE,SWORD \?ELS10
PRINTR "It's plenty sharp already."
?ELS10: EQUAL? PRSO,PENCIL \?ELS14
PRINTR "The pencil can't be sharpened. Perhaps it is magical."
?ELS14: PRINTR "You can't sharpen that."
?ELS5: PRINTR "You'll never sharpen anything with that!"
.FUNCT V-FORGET
PRINTR "You might also try not thinking about a purple hippopotamus!"
.FUNCT PRE-FLY
ZERO? FLYING? \FALSE
ZERO? PRSO /?ELS8
PRINTR "What a loon!"
?ELS8: PRINTR "You are probably a loon, although you can't fly."
.FUNCT V-HIDE
ZERO? PRSO \?ELS5
PRINTI "You'll have to say which direction you want to go."
CRLF
RETURN 2
?ELS5: EQUAL? PRSI,ADVENTURER /?THN12
ZERO? PRSI \?ELS11
IN? ADVENTURER,HERE \?ELS11
?THN12: FSET? PRSO,TREASURE \?ELS20
PRINTI "Too late. The adventurer has already noticed the "
PRINTD PRSO
PRINTR "."
?ELS20: PRINTR "He isn't interested in that anyway."
?ELS11: ZERO? PRSI /?ELS28
FSET? PRSI,VICBIT \?ELS28
PRINTI "Why? The "
PRINTD PRSI
PRINTR " isn't interested in it."
?ELS28: ZERO? PRSI \FALSE
PRINTR "From what? From whom? Why?"
.FUNCT V-CHASTISE
PRINTR "Use prepositions to indicate precisely what you want to do: LOOK AT THE OBJECT, LOOK INSIDE THE OBJECT, LOOK FOR THE OBJECT, etc."
.FUNCT V-GAG
EQUAL? PRSO,ME /?ELS5
PRINTR "What a concept!"
?ELS5: EQUAL? PRSI,SILVER-SPOON /?ELS9
PRINTI "With a "
PRINTD PRSO
PRINTR "?"
?ELS9: PRINTR "Grody to the max! Like, totally!"
.FUNCT V-GROSS-OUT
FSET? PRSO,VILLAIN \?ELS5
PRINTR "Let's not be disgusting!"
?ELS5: PRINTR "Gag me with a spoon!"
.FUNCT V-WHO
FSET? PRSO,VILLAIN \?ELS5
CALL PERFORM,V?EXAMINE,PRSO
RTRUE
?ELS5: PRINTR "That's not a person!"
.ENDI