2320 lines
45 KiB
Plaintext
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
|