.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