1992 lines
36 KiB
Plaintext
1992 lines
36 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
|
|
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 "I 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."
|
|
ZERO? SPRAYED? \?CND10
|
|
PRINTI " You are likely to be eaten by a grue."
|
|
?CND10: CRLF
|
|
EQUAL? HERE,DARK-2 \?CND15
|
|
PRINTI "The ground continues to slope upwards away from the lake. You can barely detect a dim light from the east."
|
|
CRLF
|
|
RETURN FALSE-VALUE
|
|
?CND15: RETURN FALSE-VALUE
|
|
?CND5: FSET? HERE,TOUCHBIT /?CND20
|
|
FSET HERE,TOUCHBIT
|
|
SET 'V?,TRUE-VALUE
|
|
?CND20: IN? HERE,ROOMS \?CND23
|
|
PRINTD HERE
|
|
CRLF
|
|
?CND23: ZERO? LOOK? \?THN31
|
|
ZERO? SUPER-BRIEF \TRUE
|
|
?THN31: LOC WINNER >AV
|
|
FSET? AV,VEHBIT \?CND33
|
|
PRINTI "(You are in the "
|
|
PRINTD AV
|
|
PRINTI ".)"
|
|
CRLF
|
|
?CND33: ZERO? V? /?ELS40
|
|
GETP HERE,P?ACTION
|
|
CALL STACK,M-LOOK
|
|
ZERO? STACK \TRUE
|
|
?ELS40: ZERO? V? /?ELS44
|
|
GETP HERE,P?LDESC >STR
|
|
ZERO? STR /?ELS44
|
|
PRINT STR
|
|
CRLF
|
|
JUMP ?CND38
|
|
?ELS44: GETP HERE,P?ACTION
|
|
CALL STACK,M-FLASH
|
|
?CND38: EQUAL? HERE,AV /TRUE
|
|
FSET? AV,VEHBIT \TRUE
|
|
GETP AV,P?ACTION
|
|
CALL STACK,M-LOOK
|
|
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 "I can't see anything in the dark."
|
|
|
|
|
|
.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
|
|
JUMP ?CND1
|
|
?ELS7: ZERO? LEVEL \?ELS17
|
|
PRINTI "There is a "
|
|
PRINTD OBJ
|
|
PRINTI " here."
|
|
JUMP ?CND1
|
|
?ELS17: GET INDENTS,LEVEL
|
|
PRINT STACK
|
|
PRINTI "A "
|
|
PRINTD OBJ
|
|
FSET? OBJ,WEARBIT \?CND1
|
|
PRINTI " (being worn)"
|
|
?CND1: ZERO? LEVEL \?CND31
|
|
LOC WINNER >AV
|
|
ZERO? AV /?CND31
|
|
FSET? AV,VEHBIT \?CND31
|
|
PRINTI " (outside the "
|
|
PRINTD AV
|
|
PRINTI ")"
|
|
?CND31: 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
|
|
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? \?PRD49
|
|
PUSH 1
|
|
RETURN STACK
|
|
?PRD49: PUSH 0
|
|
RETURN STACK
|
|
?ELS43: EQUAL? Y,AV,ADVENTURER \?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: FSET? OBJ,SURFACEBIT \?ELS19
|
|
PRINTI "Sitting on the "
|
|
PRINTD OBJ
|
|
PRINTR " is:"
|
|
?ELS19: PRINTI "The "
|
|
PRINTD OBJ
|
|
PRINTR " contains:"
|
|
|
|
|
|
.FUNCT V-SCORE,ASK?=1
|
|
PRINTI "Your potential 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
|
|
RETURN SCORE
|
|
|
|
|
|
.FUNCT FINISH
|
|
CALL V-SCORE
|
|
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 "ZORK III: The Dungeon Master
|
|
Copyright 1982 by Infocom, Inc. All rights reserved.
|
|
ZORK 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 IN-HERE?,OBJ
|
|
IN? OBJ,HERE /TRUE
|
|
CALL GLOBAL-IN?,OBJ,HERE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-AGAIN,OBJ
|
|
EQUAL? L-PRSA,V?WALK \?ELS5
|
|
CALL PERFORM,L-PRSA,L-PRSO
|
|
RSTACK
|
|
?ELS5: ZERO? L-PRSO /?ELS12
|
|
LOC L-PRSO
|
|
ZERO? STACK \?ELS12
|
|
PUSH L-PRSO
|
|
JUMP ?CND8
|
|
?ELS12: ZERO? L-PRSI /?PRD10
|
|
LOC L-PRSO
|
|
ZERO? STACK \?PRD10
|
|
PUSH L-PRSI
|
|
JUMP ?CND8
|
|
?PRD10: PUSH 0
|
|
?CND8: SET 'OBJ,STACK
|
|
ZERO? OBJ /?ELS23
|
|
PRINTI "I can't see the "
|
|
PRINTD OBJ
|
|
PRINTI " anymore."
|
|
CRLF
|
|
RETURN 2
|
|
?ELS23: CALL PERFORM,L-PRSA,L-PRSO,L-PRSI
|
|
RSTACK
|
|
|
|
|
|
.FUNCT JIGS-UP,DESC,PLAYER?=0
|
|
SET 'SWORD-STATE,0
|
|
SET 'P-STRENGTH,5
|
|
SET 'S-STRENGTH,5
|
|
PRINT DESC
|
|
CRLF
|
|
EQUAL? YEAR,YEAR-PRESENT /?CND3
|
|
QUIT
|
|
?CND3: EQUAL? ADVENTURER,WINNER /?CND6
|
|
PRINTI "
|
|
**** The "
|
|
PRINTD WINNER
|
|
PRINTI " has died ****
|
|
|
|
"
|
|
REMOVE WINNER
|
|
SET 'WINNER,ADVENTURER
|
|
LOC WINNER >HERE
|
|
RETURN 2
|
|
?CND6: PRINTI "
|
|
**** You have died ****
|
|
|
|
"
|
|
IGRTR? 'DEATHS,3 \?ELS17
|
|
PRINTI "You feel yourself disembodied in a deep blackness. A voice from the void speaks: ""I have waited a long age for you, my friend, but perhaps it has been another that I have been seeking. Good night, oh worthy adventurer!"" It is the last you hear."
|
|
CRLF
|
|
QUIT
|
|
JUMP ?CND15
|
|
?ELS17: PRINTI "You find yourself deep within the earth in a barren prison cell. Outside the iron-barred window, you can see a great, fiery pit. Flames leap up and very nearly sear your flesh. After a while, footfalls can be heard in the distance, then closer and closer.... The door swings open, and in walks an old man.
|
|
|
|
He is dressed simply in a hood and cloak, wearing a few simple jewels, carrying something under one arm, and leaning on a wooden staff. A single key, as if to a massive prison cell, hangs from his belt.
|
|
|
|
He raises the staff toward you and you hear him speak, as if in a dream: ""I await you, though your journey be long and full of peril. Go then, and let me not wait long!"" You feel some great power well up inside you and you fall to the floor. The next moment, you are awakening, as if from a deep slumber."
|
|
CRLF
|
|
?CND15: MOVE CURRENT-LAMP,ZORK2-STAIR
|
|
IN? KEY,WINNER \?CND24
|
|
EQUAL? HERE,DARK-1,DARK-2,KEY-ROOM /?THN29
|
|
EQUAL? HERE,AQ-1,AQ-2 \?CND24
|
|
?THN29: MOVE KEY,KEY-ROOM
|
|
?CND24: CRLF
|
|
CALL GOTO,ZORK2-STAIR
|
|
SET 'P-CONT,FALSE-VALUE
|
|
CALL RANDOMIZE-OBJECTS
|
|
CALL KILL-INTERRUPTS
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT RANDOMIZE-OBJECTS,R=0,F,N,L
|
|
FIRST? WINNER >N /?KLU6
|
|
?KLU6:
|
|
?PRG1: SET 'F,N
|
|
ZERO? F /TRUE
|
|
NEXT? F >N /?KLU7
|
|
?KLU7: CALL PICK-ONE,DEAD-OBJ-LOCS
|
|
MOVE F,STACK
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT KILL-INTERRUPTS
|
|
CALL INT,I-MAN-LEAVES
|
|
PUT STACK,0,0
|
|
CALL INT,I-MAN-RETURNS
|
|
PUT STACK,0,0
|
|
CALL INT,I-VIEW-SNAP
|
|
PUT STACK,0,0
|
|
CALL INT,I-FOLIN
|
|
PUT STACK,0,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
|
|
PRINTR "Use directions for movement here."
|
|
|
|
|
|
.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 GO-NEXT,TBL,VAL
|
|
CALL LKP,HERE,TBL >VAL
|
|
ZERO? VAL /FALSE
|
|
CALL GOTO,VAL
|
|
RSTACK
|
|
|
|
|
|
.FUNCT LKP,ITM,TBL,CNT=0,LEN
|
|
GET TBL,0 >LEN
|
|
?PRG1: IGRTR? 'CNT,LEN /FALSE
|
|
GET TBL,CNT
|
|
EQUAL? STACK,ITM \?PRG1
|
|
EQUAL? CNT,LEN /FALSE
|
|
ADD CNT,1
|
|
GET TBL,STACK
|
|
RETURN STACK
|
|
|
|
|
|
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
|
|
ZERO? P-WALK-DIR \?ELS5
|
|
CALL PERFORM,V?WALK-TO,PRSO
|
|
RTRUE
|
|
?ELS5: GETPT HERE,PRSO >PT
|
|
ZERO? PT /?ELS7
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,UEXIT \?ELS12
|
|
GETB PT,REXIT
|
|
CALL GOTO,STACK
|
|
RSTACK
|
|
?ELS12: EQUAL? PTS,NEXIT \?ELS14
|
|
GET PT,NEXITSTR
|
|
PRINT STACK
|
|
CRLF
|
|
RETURN 2
|
|
?ELS14: EQUAL? PTS,FEXIT \?ELS20
|
|
GET PT,FEXITFCN
|
|
CALL STACK >RM
|
|
ZERO? RM /?ELS25
|
|
CALL GOTO,RM
|
|
RSTACK
|
|
?ELS25: EQUAL? HERE,CP \?ELS27
|
|
ZERO? CP-MOVED \TRUE
|
|
?ELS27: RETURN 2
|
|
?ELS20: EQUAL? PTS,CEXIT \?ELS35
|
|
GETB PT,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK /?ELS40
|
|
GETB PT,REXIT
|
|
CALL GOTO,STACK
|
|
RSTACK
|
|
?ELS40: GET PT,CEXITSTR >STR
|
|
ZERO? STR /?ELS42
|
|
PRINT STR
|
|
CRLF
|
|
RETURN 2
|
|
?ELS42: PRINTI "You can't go that way."
|
|
CRLF
|
|
RETURN 2
|
|
?ELS35: EQUAL? PTS,DEXIT \FALSE
|
|
GETB PT,DEXITOBJ >OBJ
|
|
FSET? OBJ,OPENBIT \?ELS59
|
|
GETB PT,REXIT
|
|
CALL GOTO,STACK
|
|
RSTACK
|
|
?ELS59: GET PT,DEXITSTR >STR
|
|
ZERO? STR /?ELS61
|
|
PRINT STR
|
|
CRLF
|
|
RETURN 2
|
|
?ELS61: PRINTI "The "
|
|
PRINTD OBJ
|
|
PRINTI " is closed."
|
|
CRLF
|
|
CALL THIS-IS-IT,OBJ
|
|
RETURN 2
|
|
?ELS7: ZERO? LIT \?ELS73
|
|
RANDOM 100
|
|
GRTR? 90,STACK \?ELS73
|
|
ZERO? SPRAYED? /?ELS80
|
|
PRINTI "There are odd noises in the darkness, and there is no exit in that direction."
|
|
CRLF
|
|
RETURN 2
|
|
?ELS80: EQUAL? HERE,DARK-1,DARK-2 \?ELS87
|
|
CALL JIGS-UP,STR?22
|
|
RSTACK
|
|
?ELS87: CALL JIGS-UP,STR?23
|
|
RSTACK
|
|
?ELS73: PRINTI "You can't go that way."
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT THIS-IS-IT,OBJ
|
|
SET 'P-IT-OBJECT,OBJ
|
|
SET 'P-IT-LOC,HERE
|
|
RETURN P-IT-LOC
|
|
|
|
|
|
.FUNCT V-INVENTORY
|
|
FIRST? WINNER \?ELS5
|
|
CALL PRINT-CONT,WINNER
|
|
RSTACK
|
|
?ELS5: PRINTR "You are empty handed."
|
|
|
|
|
|
.FUNCT PRE-TAKE
|
|
IN? PRSO,WINNER \?ELS5
|
|
FSET? PRSO,WEARBIT \?ELS10
|
|
PRINTR "You are already wearing it."
|
|
?ELS10: PRINTR "You already have it."
|
|
?ELS5: LOC PRSO
|
|
FSET? STACK,CONTBIT \?ELS18
|
|
LOC PRSO
|
|
FSET? STACK,OPENBIT /?ELS18
|
|
PRINTR "You can't reach that."
|
|
?ELS18: ZERO? PRSI /?ELS24
|
|
LOC PRSO
|
|
EQUAL? PRSI,STACK /?ELS30
|
|
PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTI " isn't in the "
|
|
PRINTD PRSI
|
|
PRINTR "."
|
|
?ELS30: SET 'PRSI,FALSE-VALUE
|
|
RFALSE
|
|
?ELS24: LOC WINNER
|
|
EQUAL? PRSO,STACK \FALSE
|
|
PRINTR "You are in it, loser!"
|
|
|
|
|
|
.FUNCT V-TAKE
|
|
CALL ITAKE
|
|
EQUAL? STACK,TRUE-VALUE \FALSE
|
|
FSET? PRSO,WEARBIT \?ELS10
|
|
PRINTI "You are now wearing the "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
?ELS10: 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 condition."
|
|
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
|
|
FIRST? WINNER >OBJ /?KLU48
|
|
?KLU48:
|
|
?PRG37: NEXT? OBJ >OBJ /?KLU49
|
|
?KLU49: FSET? OBJ,WEARBIT /?PRG37
|
|
PRINTI "Oh, no. The "
|
|
PRINTD OBJ
|
|
PRINTI " slips from your arms while taking the "
|
|
PRINTD PRSO
|
|
PRINTI " and both tumble to the ground."
|
|
CRLF
|
|
CALL PERFORM,V?DROP,OBJ
|
|
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
|
|
EQUAL? PRSO,SHORT-POLE /FALSE
|
|
IN? PRSO,GLOBAL-OBJECTS /?THN8
|
|
FSET? PRSO,TAKEBIT /FALSE
|
|
?THN8: PRINTR "Nice try."
|
|
|
|
|
|
.FUNCT V-PUT,?TMP1
|
|
FSET? PRSI,OPENBIT /?CND1
|
|
FSET? PRSI,DOORBIT /?THN6
|
|
FSET? PRSI,CONTBIT /?CND1
|
|
?THN6: FSET? PRSI,VEHBIT \?ELS3
|
|
JUMP ?CND1
|
|
?ELS3: PRINTR "I can't do that."
|
|
?CND1: FSET? PRSI,OPENBIT /?ELS16
|
|
PRINTI "The "
|
|
PRINTD PRSI
|
|
PRINTR " isn't open."
|
|
?ELS16: EQUAL? PRSI,PRSO \?ELS20
|
|
PRINTR "How can you do that?"
|
|
?ELS20: IN? PRSO,PRSI \?ELS24
|
|
PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTI " is already in the "
|
|
PRINTD PRSI
|
|
PRINTR "."
|
|
?ELS24: 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 \?ELS28
|
|
PRINTR "There's no room."
|
|
?ELS28: CALL HELD?,PRSO
|
|
ZERO? STACK \?ELS32
|
|
CALL ITAKE
|
|
ZERO? STACK /TRUE
|
|
?ELS32: MOVE PRSO,PRSI
|
|
FSET PRSO,TOUCHBIT
|
|
PRINTR "Done."
|
|
|
|
|
|
.FUNCT PRE-DROP
|
|
LOC WINNER
|
|
EQUAL? PRSO,STACK \FALSE
|
|
CALL PERFORM,V?DISEMBARK,PRSO
|
|
RTRUE
|
|
|
|
|
|
.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
|
|
IN? OBJ,WINNER /TRUE
|
|
IN? OBJ,ROOMS /FALSE
|
|
IN? OBJ,GLOBAL-OBJECTS /FALSE
|
|
ZERO? OBJ /FALSE
|
|
LOC OBJ
|
|
CALL HELD?,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-GIVE
|
|
FSET? PRSI,VICBIT /?ELS5
|
|
PRINTI "You can't give a "
|
|
PRINTD PRSO
|
|
PRINTI " to a "
|
|
PRINTD PRSI
|
|
PRINTR "!"
|
|
?ELS5: PRINTI "The "
|
|
PRINTD PRSI
|
|
PRINTR " refuses it politely."
|
|
|
|
|
|
.FUNCT V-SGIVE
|
|
PRINTR "FOOOO!!"
|
|
|
|
|
|
.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 a "
|
|
PRINTD 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: PRINTI "a "
|
|
PRINTD 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 a "
|
|
PRINTD 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: FSET? X,WEARBIT /?CND6
|
|
INC 'CNT
|
|
?CND6: NEXT? X >X /?PRG4
|
|
?CND1: RETURN CNT
|
|
|
|
|
|
.FUNCT WEIGHT,OBJ,CONT,WT=0
|
|
FIRST? OBJ >CONT \?CND1
|
|
?PRG4: EQUAL? OBJ,PLAYER \?ELS8
|
|
FSET? CONT,WEARBIT \?ELS8
|
|
INC 'WT
|
|
JUMP ?CND6
|
|
?ELS8: CALL WEIGHT,CONT
|
|
ADD WT,STACK >WT
|
|
?CND6: NEXT? CONT >CONT /?PRG4
|
|
?CND1: GETP OBJ,P?SIZE
|
|
ADD WT,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-BUG
|
|
PRINTR "If there is a problem here, it is unintentional. You may report your problem to the address provided in your documentation."
|
|
|
|
|
|
.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
|
|
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
|
|
ZERO? LIT /?CND11
|
|
CALL LIT?,HERE >LIT
|
|
?CND11: PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTI " is now off."
|
|
CRLF
|
|
CALL LIT?,HERE >LIT
|
|
ZERO? LIT \TRUE
|
|
PRINTI "It is now pitch black."
|
|
CRLF
|
|
RTRUE
|
|
?ELS3: 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 /?CND5
|
|
JUMP ?REP4
|
|
?CND5: INC 'MOVES
|
|
JUMP ?PRG3
|
|
?REP4: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
RETURN CLOCK-WAIT
|
|
|
|
|
|
.FUNCT PRE-BOARD,AV
|
|
LOC WINNER >AV
|
|
EQUAL? PRSO,WATER-CHANNEL /FALSE
|
|
FSET? PRSO,VEHBIT \?ELS5
|
|
FSET? AV,VEHBIT \FALSE
|
|
PRINTI "You are already in the "
|
|
PRINTD AV
|
|
PRINTI ", cretin!"
|
|
CRLF
|
|
RETURN 2
|
|
?ELS5: PRINTI "I suppose you have a theory on boarding a "
|
|
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: FSET? HERE,RLANDBIT \?ELS11
|
|
PRINTI "You are on your own feet again."
|
|
CRLF
|
|
MOVE WINNER,HERE
|
|
RTRUE
|
|
?ELS11: PRINTI "You realize, just in time, that getting out here would probably be fatal."
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-BLAST
|
|
PRINTR "You can't blast anything by using words."
|
|
|
|
|
|
.FUNCT GOTO,RM,V?=1,LB,WLOC,AV=0,OLIT
|
|
FSET? RM,RLANDBIT /?PRD1
|
|
PUSH 0
|
|
JUMP ?PRD2
|
|
?PRD1: PUSH 1
|
|
?PRD2: SET 'LB,STACK
|
|
LOC WINNER >WLOC
|
|
SET 'OLIT,LIT
|
|
FSET? WLOC,VEHBIT \?CND3
|
|
GETP WLOC,P?VTYPE >AV
|
|
?CND3: ZERO? LB \?THN15
|
|
ZERO? AV /?THN15
|
|
FSET? RM,AV \?THN11
|
|
?THN15: FSET? HERE,RLANDBIT \?ELS10
|
|
ZERO? LB /?ELS10
|
|
ZERO? AV /?ELS10
|
|
EQUAL? AV,RLANDBIT /?ELS10
|
|
FSET? RM,AV /?ELS10
|
|
?THN11: ZERO? AV /?ELS21
|
|
PRINTI "You can't go there in a "
|
|
PRINTD WLOC
|
|
PRINTI "."
|
|
JUMP ?CND19
|
|
?ELS21: PRINTI "You can't go there without a vehicle."
|
|
?CND19: CRLF
|
|
RFALSE
|
|
?ELS10: FSET? RM,RMUNGBIT \?ELS30
|
|
GETP RM,P?LDESC
|
|
PRINT STACK
|
|
CRLF
|
|
RFALSE
|
|
?ELS30: ZERO? AV /?ELS37
|
|
MOVE WLOC,RM
|
|
JUMP ?CND35
|
|
?ELS37: MOVE WINNER,RM
|
|
?CND35: SET 'HERE,RM
|
|
CALL LIT?,HERE >LIT
|
|
ZERO? OLIT \?CND41
|
|
ZERO? LIT \?CND41
|
|
RANDOM 100
|
|
GRTR? 85,STACK \?CND41
|
|
ZERO? SPRAYED? /?ELS48
|
|
PRINTI "There are sinister gurgling noises in the darkness all around you!"
|
|
CRLF
|
|
JUMP ?CND41
|
|
?ELS48: EQUAL? HERE,DARK-1,DARK-2 \?ELS53
|
|
CALL JIGS-UP,STR?30
|
|
JUMP ?CND41
|
|
?ELS53: CALL JIGS-UP,STR?31
|
|
RTRUE
|
|
?CND41: GETP HERE,P?ACTION
|
|
CALL STACK,M-ENTER
|
|
EQUAL? HERE,RM \TRUE
|
|
EQUAL? ADVENTURER,WINNER /?ELS60
|
|
PRINTI "The "
|
|
PRINTD WINNER
|
|
PRINTR " leaves the room."
|
|
?ELS60: ZERO? V? /TRUE
|
|
CALL V-FIRST-LOOK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-BACK
|
|
PRINTR "Sorry, my memory isn't that good. You'll have to give a direction."
|
|
|
|
|
|
.FUNCT PRE-POUR-ON
|
|
PRINTR "You can't pour that on anything."
|
|
|
|
|
|
.FUNCT V-POUR-ON
|
|
PRINTR "Foo!"
|
|
|
|
|
|
.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 PRE-FILL,T
|
|
ZERO? PRSI \?CND1
|
|
GETPT HERE,P?GLOBAL >T
|
|
ZERO? T /?CND1
|
|
PTSIZE T
|
|
CALL ZMEMQB,GLOBAL-WATER,T,STACK
|
|
ZERO? STACK /?ELS8
|
|
SET 'PRSI,GLOBAL-WATER
|
|
RFALSE
|
|
?ELS8: PRINTR "There is nothing to fill it with."
|
|
?CND1: EQUAL? PRSI,GLOBAL-WATER /FALSE
|
|
CALL PERFORM,V?PUT,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.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 "You may know how to do that, but I don't."
|
|
|
|
|
|
.FUNCT V-ADVENT
|
|
PRINTR "A hollow voice says ""Fool."""
|
|
|
|
|
|
.FUNCT V-DRINK
|
|
CALL V-EAT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-EAT,EAT?=0,DRINK?=0,NOBJ=0
|
|
FSET? PRSO,FOODBIT /?PRD8
|
|
PUSH 0
|
|
JUMP ?PRD9
|
|
?PRD8: PUSH 1
|
|
?PRD9: SET 'EAT?,STACK
|
|
ZERO? EAT? /?ELS5
|
|
IN? PRSO,WINNER \?ELS5
|
|
EQUAL? PRSA,V?DRINK \?ELS12
|
|
PRINTI "How can I drink that?"
|
|
JUMP ?CND10
|
|
?ELS12: PRINTI "Thank you very much. It really hit the spot."
|
|
REMOVE PRSO
|
|
?CND10: CRLF
|
|
RTRUE
|
|
?ELS5: FSET? PRSO,DRINKBIT /?PRD21
|
|
PUSH 0
|
|
JUMP ?PRD22
|
|
?PRD21: PUSH 1
|
|
?PRD22: SET 'DRINK?,STACK
|
|
ZERO? DRINK? /?ELS20
|
|
IN? PRSO,GLOBAL-OBJECTS /?THN28
|
|
LOC PRSO >NOBJ
|
|
ZERO? NOBJ /?ELS27
|
|
IN? NOBJ,WINNER \?ELS27
|
|
FSET? NOBJ,OPENBIT \?ELS27
|
|
?THN28: PRINTI "Thank you very much. I was rather thirsty (from all this talking, probably)."
|
|
CRLF
|
|
REMOVE PRSO
|
|
RTRUE
|
|
?ELS27: PRINTR "I'd like to, but it's in a closed container."
|
|
?ELS20: ZERO? EAT? \FALSE
|
|
ZERO? DRINK? \FALSE
|
|
PRINTI "I don't think that the "
|
|
PRINTD PRSO
|
|
PRINTR " would agree with you."
|
|
|
|
|
|
.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 in a high-class establishment like this!"
|
|
|
|
|
|
.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,T,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 >T
|
|
ZERO? T /?ELS26
|
|
PTSIZE T >S
|
|
EQUAL? S,2 /?THN32
|
|
EQUAL? S,4 \?ELS31
|
|
GETB T,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
|
|
CALL PICK-ONE,WHEEEEE
|
|
PRINT STACK
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.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
|
|
ZERO? LIT \?ELS5
|
|
PRINTR "It is impossible to read in the dark."
|
|
?ELS5: ZERO? PRSI /FALSE
|
|
FSET? PRSI,TRANSBIT /FALSE
|
|
PRINTI "How does one look through a "
|
|
PRINTD PRSI
|
|
PRINTR "?"
|
|
|
|
|
|
.FUNCT V-READ
|
|
FSET? PRSO,READBIT /?ELS5
|
|
PRINTI "How can I read a "
|
|
PRINTD 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 "I don't know how to look inside a "
|
|
PRINTD 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
|
|
FSET? PRSI,FLAMEBIT \?ELS5
|
|
FSET? PRSI,ONBIT /FALSE
|
|
?ELS5: PRINTI "With a "
|
|
PRINTD 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?45
|
|
RSTACK
|
|
?ELS10: REMOVE PRSO
|
|
PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTR " catches fire and is consumed."
|
|
?ELS5: PRINTI "I don't think you can burn a "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT PRE-TURN
|
|
FSET? PRSO,TURNBIT /FALSE
|
|
PRINTR "You can't turn that!"
|
|
|
|
|
|
.FUNCT V-TURN
|
|
PRINTR "This has no effect."
|
|
|
|
|
|
.FUNCT V-PUMP
|
|
PRINTR "I really don't see 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 a "
|
|
PRINTD PRSI
|
|
PRINTR " is adequate."
|
|
?ELS13: PRINTI "Strange concept, cutting the "
|
|
PRINTD PRSO
|
|
PRINTR "...."
|
|
|
|
|
|
.FUNCT V-KILL
|
|
CALL IKILL,STR?46
|
|
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 can't."
|
|
|
|
|
|
.FUNCT V-ATTACK
|
|
CALL IKILL,STR?47
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SWING
|
|
ZERO? PRSI \?ELS5
|
|
PRINTR "Whoosh!"
|
|
?ELS5: CALL PERFORM,V?ATTACK,PRSI,PRSO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-KICK
|
|
CALL HACK-HACK,STR?48
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WAVE
|
|
CALL HACK-HACK,STR?49
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-RAISE
|
|
CALL HACK-HACK,STR?50
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-LOWER
|
|
CALL HACK-HACK,STR?50
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-RUB
|
|
CALL HACK-HACK,STR?51
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUSH
|
|
CALL HACK-HACK,STR?52
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUSH-TO
|
|
PRINTR "You can't push things to that."
|
|
|
|
|
|
.FUNCT PRE-MUNG
|
|
EQUAL? PRSO,BEAM /FALSE
|
|
FSET? PRSO,VICBIT /?ELS7
|
|
CALL HACK-HACK,STR?53
|
|
RSTACK
|
|
?ELS7: ZERO? PRSI \?ELS9
|
|
PRINTI "Trying to destroy the "
|
|
PRINTD PRSO
|
|
PRINTR " with your bare hands is suicidal."
|
|
?ELS9: FSET? PRSI,WEAPONBIT /FALSE
|
|
PRINTI "Trying to destroy the "
|
|
PRINTD PRSO
|
|
PRINTI " with a "
|
|
PRINTD PRSI
|
|
PRINTR " is quite self-destructive."
|
|
|
|
|
|
.FUNCT V-MUNG
|
|
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 a "
|
|
PRINTD PRSO
|
|
PRINTR "?"
|
|
|
|
|
|
.FUNCT V-CHOMP
|
|
PRINTR "I don't know how to do that. I win in all cases!"
|
|
|
|
|
|
.FUNCT V-FROBOZZ
|
|
PRINTR "The FROBOZZ Corporation created, owns, and operates this dungeon."
|
|
|
|
|
|
.FUNCT V-WIN
|
|
PRINTR "Naturally!"
|
|
|
|
|
|
.FUNCT V-YELL
|
|
PRINTR "Aarrrrrgggggggghhhhhhhhhhh!"
|
|
|
|
|
|
.FUNCT V-PLUG
|
|
PRINTR "This has no effect."
|
|
|
|
|
|
.FUNCT V-EXORCISE
|
|
PRINTR "What a bizarre concept!"
|
|
|
|
|
|
.FUNCT V-SHAKE,X
|
|
FSET? PRSO,VILLAIN \?ELS5
|
|
PRINTR "This seems to have no effect."
|
|
?ELS5: FSET? PRSO,TAKEBIT /?ELS9
|
|
PRINTR "You can't take it; thus, you can't shake it!"
|
|
?ELS9: FSET? PRSO,OPENBIT /?ELS13
|
|
FIRST? PRSO \?ELS13
|
|
PRINTI "It sounds like there is something inside the "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
?ELS13: FSET? PRSO,OPENBIT \?ELS19
|
|
FIRST? PRSO \?ELS19
|
|
?PRG22: FIRST? PRSO >X \?REP23
|
|
MOVE X,HERE
|
|
JUMP ?PRG22
|
|
?REP23: PRINTR "All of the objects spill onto the floor."
|
|
?ELS19: PRINTI "There's nothing in the "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT PRE-DIG
|
|
ZERO? PRSI \?CND1
|
|
SET 'PRSI,HANDS
|
|
?CND1: FSET? PRSI,TOOLBIT /FALSE
|
|
PRINTI "Digging with the "
|
|
PRINTD PRSI
|
|
PRINTR " is very silly."
|
|
|
|
|
|
.FUNCT V-DIG
|
|
PRINTR "The ground is too hard here."
|
|
|
|
|
|
.FUNCT V-SMELL
|
|
PRINTI "It smells just like a "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT GLOBAL-IN?,OBJ1,OBJ2,T
|
|
GETPT OBJ2,P?GLOBAL >T
|
|
ZERO? T /FALSE
|
|
PTSIZE T
|
|
SUB STACK,1
|
|
CALL ZMEMQB,OBJ1,T,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SWIM
|
|
EQUAL? HERE,ON-LAKE,IN-LAKE \?ELS5
|
|
PRINTR "What do you think you're doing?"
|
|
?ELS5: EQUAL? HERE,FLATHEAD-OCEAN \?ELS9
|
|
PRINTR "Between the rocks, wind, and waves, you wouldn't last a minute!"
|
|
?ELS9: PRINTR "Go jump in a lake!"
|
|
|
|
|
|
.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 a "
|
|
PRINTD 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
|
|
FSET? PRSO,VILLAIN \?ELS5
|
|
PRINTR "He's wide awake, or haven't you noticed..."
|
|
?ELS5: PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTR " isn't sleeping."
|
|
|
|
|
|
.FUNCT V-ZORK
|
|
PRINTR "At your service!"
|
|
|
|
|
|
.FUNCT MUNG-ROOM,RM,STR
|
|
FSET RM,RMUNGBIT
|
|
PUTP RM,P?LDESC,STR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-COMMAND
|
|
FSET? PRSO,VICBIT \?ELS5
|
|
PRINTI "The "
|
|
PRINTD PRSO
|
|
PRINTR " pays no attention."
|
|
?ELS5: PRINTR "You cannot talk to that!"
|
|
|
|
|
|
.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
|
|
EQUAL? PRSO,ROPE,GLOBAL-ROPE \?ELS5
|
|
PUSH P?DOWN
|
|
JUMP ?CND1
|
|
?ELS5: PUSH P?UP
|
|
?CND1: CALL V-CLIMB-UP,STACK,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-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: PRINTR "That doesn't make sends."
|
|
|
|
|
|
.FUNCT V-WIND
|
|
PRINTI "You cannot wind up a "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-COUNT,OBJS,CNT
|
|
EQUAL? PRSO,BLESSINGS \?ELS5
|
|
PRINTR "Well, for one, you are playing ZORK...."
|
|
?ELS5: PRINTR "You have lost your mind."
|
|
|
|
|
|
.FUNCT V-PUT-UNDER
|
|
PRINTR "You can't do that."
|
|
|
|
|
|
.FUNCT V-PLAY
|
|
FSET? PRSO,VILLAIN \?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,STR?58
|
|
RSTACK
|
|
?ELS5: PRINTR "How peculiar!"
|
|
|
|
|
|
.FUNCT V-MAKE
|
|
PRINTR "You can't do that."
|
|
|
|
|
|
.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: EQUAL? L,GLOBAL-OBJECTS \?ELS13
|
|
PRINTR "You find it."
|
|
?ELS13: IN? PRSO,WINNER \?ELS17
|
|
PRINTR "You have it."
|
|
?ELS17: IN? PRSO,HERE /?THN22
|
|
EQUAL? PRSO,PSEUDO-OBJECT \?ELS21
|
|
?THN22: PRINTR "It's right here."
|
|
?ELS21: FSET? L,VILLAIN \?ELS27
|
|
PRINTI "The "
|
|
PRINTD L
|
|
PRINTR " has it."
|
|
?ELS27: FSET? L,CONTBIT \?ELS31
|
|
PRINTI "It's in the "
|
|
PRINTD L
|
|
PRINTR "."
|
|
?ELS31: PRINTR "Beats me."
|
|
|
|
|
|
.FUNCT V-TELL
|
|
FSET? PRSO,VICBIT \?ELS5
|
|
SET 'WINNER,PRSO
|
|
LOC WINNER >HERE
|
|
RETURN HERE
|
|
?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-IS-IN
|
|
IN? PRSO,PRSI \?ELS5
|
|
PRINTI "Yes, it is "
|
|
FSET? PRSI,SURFACEBIT \?ELS10
|
|
PRINTI "on"
|
|
JUMP ?CND8
|
|
?ELS10: PRINTI "in"
|
|
?CND8: PRINTI " the "
|
|
PRINTD PRSI
|
|
PRINTR "."
|
|
?ELS5: PRINTR "No, it isn't."
|
|
|
|
|
|
.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
|
|
FSET? FRONT-DOOR,TOUCHBIT \?ELS5
|
|
GET P-LEXV,P-CONT
|
|
EQUAL? STACK,W?FROTZ \?ELS5
|
|
ADD P-CONT,2
|
|
GET P-LEXV,STACK
|
|
EQUAL? STACK,W?OZMOO \?ELS5
|
|
SET 'P-CONT,FALSE-VALUE
|
|
EQUAL? HERE,MSTAIRS \?ELS12
|
|
CRLF
|
|
CALL GOTO,FRONT-DOOR
|
|
RSTACK
|
|
?ELS12: PRINTR "Nothing happens."
|
|
?ELS5: CALL FIND-IN,HERE,VICBIT >V
|
|
ZERO? V /?ELS18
|
|
PRINTI "You must address the "
|
|
PRINTD V
|
|
PRINTR " directly."
|
|
?ELS18: GET P-LEXV,P-CONT
|
|
EQUAL? STACK,W?HELLO \?ELS22
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
RTRUE
|
|
?ELS22: 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-INCANT
|
|
PRINTI "The incantation echoes back faintly, but nothing else happens."
|
|
CRLF
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
SET 'P-CONT,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.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
|
|
FSET? PRSO,WEARBIT /?ELS5
|
|
PRINTI "You can't wear the "
|
|
PRINTD PRSO
|
|
PRINTR "."
|
|
?ELS5: CALL PERFORM,V?TAKE,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-THROW-OFF
|
|
PRINTR "You can't throw anything off of that!"
|
|
|
|
|
|
.FUNCT V-$VERIFY
|
|
PRINTI "Verifying game..."
|
|
CRLF
|
|
VERIFY \?ELS7
|
|
PRINTR "Game correct."
|
|
?ELS7: CRLF
|
|
PRINTR "** Game File 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,T
|
|
?PRG1: NEXTP HERE,P >P
|
|
LESS? P,LOW-DIRECTION /FALSE
|
|
GETPT HERE,P >T
|
|
PTSIZE T
|
|
EQUAL? STACK,DEXIT \?PRG1
|
|
GETB T,DEXITOBJ
|
|
EQUAL? STACK,DOBJ \?PRG1
|
|
RETURN P
|
|
|
|
|
|
.FUNCT V-DRINK-FROM
|
|
PRINTR "How peculiar!"
|
|
|
|
|
|
.FUNCT V-LEAN-ON
|
|
PRINTR "Are you so very tired, then?"
|
|
|
|
.ENDI
|