minizork-1987/verbs.zil

1488 lines
38 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"VERBS for
Mini-Zork '87
(c) Copyright 1987 Infocom, Inc. All Rights Reserved"
;"game commands"
<GLOBAL VERBOSITY 1> ;"0 = superbrief, 1 = brief, 2 = verbose"
<ROUTINE V-VERBOSE ()
<SETG VERBOSITY 2>
<TELL "Maximum verbosity." CR>>
<ROUTINE V-BRIEF ()
<SETG VERBOSITY 1>
<TELL "Brief descriptions." CR>>
<ROUTINE V-SUPER-BRIEF ()
<SETG VERBOSITY 0>
<TELL "Superbrief descriptions." CR>>
<ROUTINE V-DIAGNOSE ("AUX" ADV-STR X)
<SET ADV-STR <GETP ,ADVENTURER ,P?STRENGTH>>
<TELL "You are ">
<COND (<EQUAL? .ADV-STR 6>
<TELL "in perfect health">)
(<EQUAL? .ADV-STR 5>
<TELL "slightly wounded">)
(<EQUAL? .ADV-STR 3 4>
<TELL "somewhat wounded">)
(T
<TELL "seriously wounded">)>
<COND (<NOT <EQUAL? .ADV-STR 6>>
<TELL ", but will be cured after ">
<SET X <+ <* <- 5 .ADV-STR> 10> ,CURE-COUNT>>
<TELL N .X " move">
<COND (<NOT <EQUAL? .X 1>>
<TELL "s">)>)>
<COND (<NOT <0? ,DEATHS>>
<TELL ". You have been killed ">
<COND (<1? ,DEATHS>
<TELL "once">)
(T
<TELL "twice">)>)>
<TELL ,PERIOD-CR>>
<ROUTINE V-INVENTORY ()
<COND (<FIRST? ,WINNER>
<PRINT-CONT ,WINNER>)
(T
<TELL "You are empty-handed." CR>)>>
<ROUTINE FINISH ("AUX" WRD)
<V-SCORE>
<REPEAT ()
<TELL
"|Would you like to restart from the beginning, restore a saved position,
or end this session of the game?|
(Type RESTART, RESTORE, or QUIT):| >">
<READ ,P-INBUF ,P-LEXV>
<SET WRD <GET ,P-LEXV 1>>
<COND (<EQUAL? .WRD ,W?RESTART>
<RESTART>
<TELL ,FAILED>)
(<EQUAL? .WRD ,W?RESTORE>
<COND (<RESTORE>
<TELL "Ok." CR>)
(T
<TELL ,FAILED>)>)
(<EQUAL? .WRD ,W?QUIT ,W?Q>
<QUIT>)>>>
<ROUTINE V-QUIT ()
<COND (<DO-YOU-WISH "leave the game">
<QUIT>)>>
<ROUTINE V-RESTART ()
<COND (<DO-YOU-WISH "restart">
<RESTART>
<TELL ,FAILED>)>>
<ROUTINE DO-YOU-WISH (STRING)
<V-SCORE>
<TELL CR "Do you wish to " .STRING "? (Y is affirmative): ">
<COND (<YES?>
<RTRUE>)
(T
<TELL "Ok." CR>
<RFALSE>)>>
<ROUTINE YES? ()
<PRINTI ">">
<READ ,P-INBUF ,P-LEXV>
<COND (<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE>
<TELL "Ok." CR>)
(T
<TELL ,FAILED>)>>
<ROUTINE V-SAVE ()
<COND (<SAVE>
<TELL "Ok." CR>)
(T
<TELL ,FAILED>)>>
<ROUTINE V-SCORE ()
<TELL
"Your score is " N ,SCORE " (of 350 points), in " N ,MOVES " move">
<COND (<NOT <1? ,MOVES>>
<TELL "s">)>
<TELL ". This gives you the rank of ">
<COND (<EQUAL? ,SCORE 350>
<TELL "Master">)
(<G? ,SCORE 250>
<TELL "Senior">)
(<G? ,SCORE 150>
<TELL "Junior">)
(<G? ,SCORE 75>
<TELL "Novice">)
(T
<TELL "Beginning">)>
<TELL " Adventurer." CR>>
<GLOBAL MOVES 0>
<GLOBAL SCORE 0>
<ROUTINE SCORE-OBJ (OBJ "AUX" TEMP)
<COND (<G? <SET TEMP <GETP .OBJ ,P?VALUE>> 0>
<SETG SCORE <+ ,SCORE .TEMP>>
<PUTP .OBJ ,P?VALUE 0>)>>
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<TRANSCRIPT-MESSAGE "begin">>
<ROUTINE V-UNSCRIPT ()
<TRANSCRIPT-MESSAGE "end">
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<ROUTINE TRANSCRIPT-MESSAGE (STRING)
<TELL "Here " .STRING "s a transcript of interation with" CR>
<V-VERSION>>
<ROUTINE V-VERSION ("AUX" (CNT 17))
<TELL
"MINI-ZORK I: " ,GUE-NAME CR
"Copyright (c) 1988 Infocom, Inc. All rights reserved.|
ZORK is a registered trademark of Infocom, Inc.|
Release ">
<PRINTN <BAND <GET 0 1> *3777*>>
<TELL " / Serial number ">
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> 23>
<RETURN>)
(T
<PRINTC <GETB 0 .CNT>>)>>
<CRLF>>
<ROUTINE V-VERIFY ()
<TELL "Verifying..." CR>
<COND (<VERIFY>
<TELL "Correct." CR>)
(T
<TELL CR "***" ,FAILED>)>>
<ROUTINE V-COMMAND-FILE ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "Bad call to #RND." CR>)
(T
<RANDOM <- 0 ,P-NUMBER>>
<RTRUE>)>>
<ROUTINE V-RECORD ()
<DIROUT 4>
<RTRUE>>
<ROUTINE V-UNRECORD ()
<DIROUT -4>
<RTRUE>>
^L
"Real Verb Functions"
<ROUTINE V-ALARM ()
<TELL "The " D ,PRSO " isn't sleeping." CR>>
<ROUTINE V-ATTACK ()
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL "Fighting a " D ,PRSO "!?!" CR>)
(<OR <NOT ,PRSI>
<PRSI? ,HANDS>>
<SUICIDAL "your bare hands">)
(<NOT <IN? ,PRSI ,WINNER>>
<TELL ,YNH "the " D ,PRSI ,PERIOD-CR>)
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
<SUICIDAL>)
(T
<HERO-BLOW>)>>
<ROUTINE SUICIDAL ("OPTIONAL" (STRING <>))
<TELL "Trying to attack a " D ,PRSO " with ">
<COND (.STRING
<TELL .STRING>)
(T
<TELL "a " D ,PRSI>)>
<TELL " is suicidal." CR>>
<ROUTINE PRE-BOARD ()
<COND (<PRSO? ,INFLATED-BOAT>
<COND (<NOT <IN? ,PRSO ,HERE>>
<TELL "The " D ,PRSO " isn't on the ground!" CR>)
(<IN? ,ADVENTURER ,INFLATED-BOAT>
<TELL ,LOOK-AROUND>)
(T
<RFALSE>)>)
(<PRSO? ,WATER ,GLOBAL-WATER>
<PERFORM ,V?SWIM ,PRSO>
<RTRUE>)
(T
<TELL
"You have a theory on how to board a " D ,PRSO ", perhaps?" CR>)>
<RFATAL>>
<ROUTINE V-BOARD ("AUX" AV)
<TELL "You are now in the " D ,PRSO ,PERIOD-CR>
<MOVE ,WINNER ,PRSO>
<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
<RTRUE>>
<ROUTINE V-BREATHE ()
<PERFORM ,V?INFLATE ,PRSO ,LUNGS>>
<ROUTINE PRE-BURN ()
<COND (<NOT ,PRSI>
<TELL "You didn't say with what!" CR>)
(<FLAMING? ,PRSI>
<RFALSE>)
(T
<TELL "With a " D ,PRSI "??!?" CR>)>>
<ROUTINE V-BURN ()
<COND (<FSET? ,PRSO ,BURNBIT>
<COND (<OR <IN? ,PRSO ,WINNER>
<IN? ,WINNER ,PRSO>>
<TELL "The " D ,PRSO>
<TELL " catches fire. Unfortunately, you were ">
<COND (<IN? ,WINNER ,PRSO>
<TELL "in">)
(T
<TELL "holding">)>
<JIGS-UP " it at the time.">)
(T
<TELL "The " D ,PRSO " is consumed by fire." CR>)>
<REMOVE-CAREFULLY ,PRSO>)
(T
<TELL ,YOU-CANT "burn a " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-CLIMB ()
<COND (<PRSO? ,WALL>
<TELL "Climbing the walls is to no avail." CR>)
(<OR <PRSO? ,ROOMS <> ,TREE>
<FSET? ,PRSO ,CLIMBBIT>>
<DO-WALK ,P?UP>)
(T
<TELL ,YOU-CANT "do that." CR>)>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<OR <PRSO? ,ROOMS <> ,TREE>
<FSET? ,PRSO ,CLIMBBIT>>
<DO-WALK ,P?DOWN>)
(T
<TELL ,YOU-CANT "do that." CR>)>>
<ROUTINE V-CLIMB-ON ()
<TELL ,YOU-CANT "climb onto the " D ,PRSO ,PERIOD-CR>>
<ROUTINE V-CLOSE ()
<COND (<AND <NOT <FSET? ,PRSO ,CONTBIT>>
<NOT <FSET? ,PRSO ,DOORBIT>>>
<TELL
"You must tell me how to do that to a " D ,PRSO ,PERIOD-CR>)
(<AND <NOT <FSET? ,PRSO ,SURFACEBIT>>
<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Closed." CR>
<NOW-DARK?>)
(T
<TELL ,LOOK-AROUND>)>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " is now closed." CR>)
(T
<TELL ,LOOK-AROUND>)>)
(T
<TELL "You cannot close that." CR>)>>
<ROUTINE V-COUNT ()
<TELL "You have lost your mind." CR>>
<ROUTINE V-CROSS ()
<TELL ,YOU-CANT "cross that!" CR>>
<ROUTINE V-CURSES ()
<TELL "Such language in a high-class establishment like this!" CR>>
<ROUTINE V-CUT ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?ATTACK ,PRSO ,PRSI>)
(<AND <FSET? ,PRSO ,BURNBIT>
<FSET? ,PRSI ,WEAPONBIT>>
<COND (<IN? ,WINNER ,PRSO>
<TELL "Not a bright idea, since you're in it." CR>)
(T
<TELL
"Your skillful " D ,PRSI "smanship slices the " D ,PRSO
" into innumerable slivers which blow away." CR>
<REMOVE-CAREFULLY ,PRSO>)>)
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
<TELL
"The \"cutting edge\" of a " D ,PRSI " is hardly adequate." CR>)
(T
<TELL "Strange concept, cutting the " D ,PRSO "..." CR>)>>
<ROUTINE V-DEFLATE ()
<TELL "Come on, now!" CR>>
<ROUTINE V-DIG ()
<COND (<NOT ,PRSI>
<SETG PRSI ,HANDS>)>
<COND (<PRSI? ,SHOVEL>
<TELL "There's no reason to be digging here." CR>)
(<FSET? ,PRSI ,TOOLBIT>
<TELL "Digging with the " D ,PRSI " is slow and tedious." CR>)
(T
<TELL "Digging with a " D ,PRSI " is silly." CR>)>>
<ROUTINE V-DRINK ()
<V-EAT>>
<ROUTINE V-DRINK-FROM ()
<TELL "How peculiar!" CR>>
<ROUTINE PRE-DROP ()
<COND (<IN? ,ADVENTURER ,PRSO>
<PERFORM ,V?EXIT ,PRSO>
<RTRUE>)>>
<ROUTINE V-DROP ()
<COND (<IDROP>
<TELL "Dropped." CR>)>>
<ROUTINE V-EAT ("AUX" (L <>))
<COND (<FSET? ,PRSO ,FOODBIT>
<COND (<NOT <HELD? ,PRSO>>
<TELL ,YNH "that." CR>)
(<VERB? DRINK>
<TELL "How can you drink that?" CR>)
(T
<HIT-SPOT>)>)
(<FSET? ,PRSO ,DRINKBIT>
<SET L <LOC ,PRSO>>
<COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<GLOBAL-IN? ,GLOBAL-WATER>
<PRSO? ,PSEUDO-OBJECT>>
<HIT-SPOT>)
(<AND <ACCESSIBLE? .L>
<NOT <IN? .L ,WINNER>>>
<TELL ,YNH "the " D .L ,PERIOD-CR>)
(<NOT <FSET? .L ,OPENBIT>>
<TELL "You'll have to open the " D .L " first." CR>)
(T
<HIT-SPOT>)>)
(T
<TELL
"It's unlikely that the " D ,PRSO " would agree with you." CR>)>>
<ROUTINE HIT-SPOT ()
<COND (<AND <PRSO? ,WATER>
<NOT <GLOBAL-IN? ,GLOBAL-WATER>>>
<REMOVE-CAREFULLY ,PRSO>)>
<TELL "That really hit the spot." CR>>
<ROUTINE V-ENTER ()
<DO-WALK ,P?IN>>
<ROUTINE V-EXAMINE ()
<COND (<GETP ,PRSO ,P?TEXT>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(<AND <OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>>
<NOT <PRSO? ,CHALICE>>>
<V-LOOK-INSIDE>)
(T
<TELL
,THERES-NOTHING "special about the " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-EXIT ()
<COND (<AND <PRSO? <> ,ROOMS>
<IN? ,ADVENTURER ,INFLATED-BOAT>>
<SETG PRSO ,INFLATED-BOAT>)>
<COND (<NOT ,PRSO>
<DO-WALK ,P?OUT>)
(<NOT <IN? ,ADVENTURER ,PRSO>>
<TELL ,LOOK-AROUND>)
(<FSET? ,HERE ,RLANDBIT>
<MOVE ,WINNER ,HERE>
<TELL "You are on your own feet again." CR>)
(T
<TELL "Getting out here would be fatal." CR>
<RFATAL>)>>
<ROUTINE V-EXORCISE ()
<TELL "What a bizarre concept!" CR>>
<ROUTINE PRE-FILL ()
<COND (<NOT ,PRSI>
<COND (<GLOBAL-IN? ,GLOBAL-WATER>
<PERFORM ,V?FILL ,PRSO ,GLOBAL-WATER>
<RTRUE>)
(<IN? ,WATER <LOC ,WINNER>>
<PERFORM ,V?FILL ,PRSO ,WATER>
<RTRUE>)
(T
<TELL ,NOTHING-TO-FILL-WITH>)>)
(<NOT <PRSI? ,WATER ,GLOBAL-WATER>>
<PERFORM ,V?PUT ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-FILL ()
<TELL "You may know how to do that, but I don't." CR>>
<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
<COND (<PRSO? ,HANDS ,LUNGS>
<TELL "Within six feet of your head, hopefully." CR>)
(<PRSO? ,ME>
<TELL "You're around here somewhere..." CR>)
(<EQUAL? .L ,GLOBAL-OBJECTS>
<TELL "You find it." CR>)
(<IN? ,PRSO ,WINNER>
<TELL "You have it." CR>)
(<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO>
<PRSO? ,PSEUDO-OBJECT>>
<TELL "It's right here." CR>)
(<FSET? .L ,ACTORBIT>
<TELL "The " D .L " has it." CR>)
(<FSET? .L ,SURFACEBIT>
<TELL "It's on the " D .L ,PERIOD-CR>)
(<FSET? .L ,CONTBIT>
<TELL "It's in the " D .L ,PERIOD-CR>)
(T
<TELL "Beats me." CR>)>>
<ROUTINE V-FOLLOW ()
<TELL "You're nuts!" CR>>
<ROUTINE PRE-GIVE ()
<COND (<NOT <HELD? ,PRSO>>
<TELL
"That's easy for you to say since you don't even have the "
D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-GIVE ()
<COND (<NOT <FSET? ,PRSI ,ACTORBIT>>
<TELL ,YOU-CANT "give a " D ,PRSO " to a " D ,PRSI "!" CR>)
(T
<TELL "The " D ,PRSI " refuses it politely." CR>)>>
<ROUTINE V-HATCH ()
<TELL "Bizarre!" CR>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "The " D ,PRSO " bows his head in greeting." CR>)
(T
<TELL
"Only schizophrenics say \"Hello\" to a " D ,PRSO ,PERIOD-CR>)>)
(T
<TELL "Good day." CR>)>>
<ROUTINE V-INFLATE ()
<TELL "How can you inflate that?" CR>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking the ">>
<ROUTINE V-KISS ()
<TELL "I'd sooner kiss a pig." CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "Nobody's home." CR>)
(T
<TELL "Why knock on a " D ,PRSO "?" CR>)>>
<ROUTINE V-LAMP-OFF ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<NOT <FSET? ,PRSO ,ONBIT>>
<TELL "It's already off." CR>)
(T
<FCLEAR ,PRSO ,ONBIT>
<TELL "The " D ,PRSO " is now off." CR>
<NOW-DARK?>)>)
(T
<TELL ,YOU-CANT "turn that off." CR>)>>
<ROUTINE V-LAMP-ON ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<TELL "It is already on." CR>)
(T
<FSET ,PRSO ,ONBIT>
<TELL "The " D ,PRSO " is now on." CR>
<COND (<NOT ,LIT>
<SETG LIT <LIT? ,HERE>>
<CRLF>
<V-LOOK>)>)>)
(<FSET? ,PRSO ,BURNBIT>
<TELL "If you wish to burn the " D ,PRSO ", say so." CR>)
(T
<TELL ,YOU-CANT "turn that on." CR>)>>
<ROUTINE V-LAUNCH ()
<TELL "That's pretty weird." CR>>
<ROUTINE V-LEAP ("AUX" TX S)
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "The " D ,PRSO " is too big to jump over." CR>)
(<IN? ,PRSO ,HERE>
<V-SKIP>)
(T
<TELL ,GOOD-TRICK>)>)
(<SET TX <GETPT ,HERE ,P?DOWN>>
<SET S <PTSIZE .TX>>
<COND (<OR <EQUAL? .S 2> ;NEXIT
<AND <EQUAL? .S 4> ;CEXIT
<NOT <VALUE <GETB .TX 1>>>>>
<TELL "This was not a very safe place to try jumping. ">
<JIGS-UP "You should have looked before you leaped.">)
(T
<V-SKIP>)>)
(T
<V-SKIP>)>>
<ROUTINE V-LISTEN ()
<TELL "The " D ,PRSO " makes no sound." CR>>
<ROUTINE V-LOCK ()
<TELL "It" <PICK-ONE ,HO-HUM> ,PERIOD-CR>>
<ROUTINE V-LOOK ()
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS T>)>>
<ROUTINE V-LOOK-BEHIND ()
<TELL ,THERES-NOTHING "behind the " D ,PRSO ,PERIOD-CR>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "It's open, but you can't see what's beyond.">)
(T
<TELL "The " D ,PRSO " is closed.">)>
<CRLF>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL ,THERES-NOTHING "special to be seen." CR>)
(<SEE-INSIDE? ,PRSO>
<COND (<AND <FIRST? ,PRSO>
<PRINT-CONT ,PRSO>>
<RTRUE>)
(T
<TELL "The " D ,PRSO " is empty." CR>)>)
(T
<TELL "The " D ,PRSO " is closed." CR>)>)
(T
<TELL ,YOU-CANT "look inside a " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-LOOK-UNDER ()
<TELL ,THERES-NOTHING "but dust there." CR>>
<ROUTINE V-LOWER ()
<HACK-HACK "Playing in this way with the ">>
<ROUTINE V-MAKE ()
<TELL ,YOU-CANT "do that." CR>>
<ROUTINE PRE-MOVE ()
<COND (<HELD? ,PRSO>
<TELL "Moved." CR>)>>
<ROUTINE V-MOVE ()
<COND (<FSET? ,PRSO ,TAKEBIT>
<TELL "Moving the " D ,PRSO " reveals nothing." CR>)
(T
<TELL ,YOU-CANT "move the " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE PRE-MUNG ()
<COND (<OR <NOT ,PRSI>
<NOT <FSET? ,PRSI ,WEAPONBIT>>>
<TELL "Trying to destroy the " D ,PRSO " with ">
<COND (<NOT ,PRSI>
<TELL "your bare hands">)
(T
<TELL "a " D ,PRSI>)>
<TELL " is futile." CR>)>>
<ROUTINE V-MUNG ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?ATTACK ,PRSO>
<RTRUE>)
(T
<TELL "Nice try." CR>)>>
<ROUTINE V-ODYSSEUS ()
<COND (<AND <EQUAL? ,HERE ,CYCLOPS-ROOM>
<IN? ,CYCLOPS ,HERE>
<NOT ,CYCLOPS-FLAG>>
<DISABLE <INT I-CYCLOPS>>
<SETG CYCLOPS-FLAG T>
<SETG MAGIC-FLAG T>
<REMOVE ,CYCLOPS>
<TELL
"The cyclops, hearing the name of his father's deadly nemesis, flees by
crashing through the east wall." CR>)
(T
<TELL "Wasn't he a sailor?" CR>)>>
<ROUTINE V-OPEN ("AUX" F STR)
<COND (<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,SURFACEBIT>>
<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "It is already open." CR>)
(T
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<COND (<OR <NOT <FIRST? ,PRSO>> <FSET? ,PRSO ,TRANSBIT>>
<TELL "Opened." CR>)
(<AND <SET F <FIRST? ,PRSO>>
<NOT <NEXT? .F>>
<NOT <FSET? .F ,TOUCHBIT>>
<SET STR <GETP .F ,P?FDESC>>>
<TELL "The " D ,PRSO " opens." CR>
<TELL .STR CR>)
(T
<TELL "Opening the " D ,PRSO " reveals ">
<PRINT-CONTENTS ,PRSO>
<TELL ,PERIOD-CR>)>)>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "It is already open." CR>)
(T
<TELL "The " D ,PRSO " opens." CR>
<FSET ,PRSO ,OPENBIT>)>)
(T
<TELL
"You must tell me how to do that to a " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-PICK ()
<TELL ,YOU-CANT "pick that." CR>>
<ROUTINE V-POUR-ON ()
<COND (<PRSO? ,WATER>
<COND (<FLAMING? ,PRSI>
<TELL "The " D ,PRSI " is extinguished." CR>
<FCLEAR ,PRSI ,ONBIT>
<FCLEAR ,PRSI ,FLAMEBIT>)
(T
<TELL
"The water spills over the " D ,PRSI ", to the floor, and evaporates." CR>)>
<REMOVE-CAREFULLY ,PRSO>
<NOW-DARK?>)
(T
<TELL ,YOU-CANT "pour that." CR>)>>
<GLOBAL ALTAR-SCORE 15>
<ROUTINE V-PRAY ()
<COND (<EQUAL? ,HERE ,ALTAR>
<SETG SCORE <+ ,SCORE ,ALTAR-SCORE>>
<SETG ALTAR-SCORE 0>
<GOTO ,FOREST-EDGE>)
(T
<TELL
"If you pray enough, your prayers may be answered." CR>)>>
<ROUTINE V-PUMP ()
<COND (<AND ,PRSI
<NOT <PRSI? ,PUMP>>>
<TELL "With a " D ,PRSI "!?!" CR>)
(<IN? ,PUMP ,WINNER>
<PERFORM ,V?INFLATE ,PRSO ,PUMP>)
(T
<TELL "It's not clear how." CR>)>>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing the ">>
<ROUTINE PRE-PUT ()
<COND (<PRSO? ,WATER ,GLOBAL-WATER>
<RFALSE>)
(T
<PRE-GIVE>)>> ;"That's easy for you to say..."
<ROUTINE V-PUT ()
<COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <OPENABLE? ,PRSI>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<TELL ,YOU-CANT "do that." CR>)
(<NOT <FSET? ,PRSI ,OPENBIT>>
<SETG P-IT-OBJECT ,PRSI>
<TELL "The " D ,PRSI " isn't open." CR>)
(<PRSI? ,PRSO>
<TELL "How can you do that?" CR>)
(<IN? ,PRSO ,PRSI>
<TELL ,LOOK-AROUND>)
(<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<TELL "There's no room." CR>)
(<AND <NOT <HELD? ,PRSO>>
<FSET? ,PRSO ,TRYTAKEBIT>>
<TELL ,YNH "the " D ,PRSO ,PERIOD-CR>)
(<AND <NOT <HELD? ,PRSO>>
<NOT <ITAKE>>>
<RTRUE>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<SCORE-OBJ ,PRSO>
<TELL "Done." CR>)>>
<ROUTINE V-PUT-ON ()
<COND (<PRSI? ,GROUND>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(T
<TELL "There's no good surface on the " D ,PRSI ,PERIOD-CR>)>>
<ROUTINE V-RAISE ()
<V-LOWER>>
<ROUTINE PRE-READ ()
<COND (<NOT ,LIT>
<TELL ,TOO-DARK>)>>
<ROUTINE V-READ ()
<COND (<FSET? ,PRSO ,READBIT>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<TELL "How does one read a " D ,PRSO "?" CR>)>>
<ROUTINE V-READ-PAGE ()
<PERFORM ,V?READ ,PRSO>
<RTRUE>>
<ROUTINE V-REPENT ()
<TELL "It could very well be too late!" CR>>
<ROUTINE V-RING ()
<TELL "How, exactly, can you ring that?" CR>>
<ROUTINE V-RUB ()
<HACK-HACK "Fiddling with the ">>
<ROUTINE V-SAY ("AUX" V)
<COND (<NOT ,P-CONT>
<TELL "Say what?" CR>
<RTRUE>)>
<SETG QUOTE-FLAG <>>
<COND (<SET V <FIND-IN ,HERE ,ACTORBIT>>
<TELL "You must address the " D .V " directly." CR>
<SETG P-CONT <>>)
(<NOT <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?HELLO>>
<SETG P-CONT <>>
<TELL ,MENTAL-COLLAPSE>)>
<RTRUE>>
<ROUTINE V-SEARCH ()
<TELL "You find nothing unusual." CR>>
<ROUTINE V-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHAKE ()
<TELL "Shaken." CR>>
<ROUTINE V-SKIP ()
<TELL "Wheeeeeeeeee!!!!!" CR>>
<ROUTINE V-SMELL ()
<TELL "It smells like a " D ,PRSO ,PERIOD-CR>>
<ROUTINE V-STAB ("AUX" W)
<COND (<SET W <FIND-IN ,ADVENTURER ,WEAPONBIT>>
<PERFORM ,V?ATTACK ,PRSO .W>
<RTRUE>)
(T
<TELL
"Do you propose to stab the " D ,PRSO " with your pinky?" CR>)>>
<ROUTINE V-STRIKE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL
"You aren't versed in hand-to-hand combat; you'd better use a weapon." CR>)
(T
<PERFORM ,V?LAMP-ON ,PRSO>
<RTRUE>)>>
<ROUTINE V-SWIM ()
<TELL "Swimming isn't allowed in the ">
<COND (<AND ,PRSO
<NOT <PRSO? ,WATER ,GLOBAL-WATER>>>
<TELL D ,PRSO ".">)
(T
<TELL "dungeon.">)>
<CRLF>>Y
<ROUTINE V-SWING ()
<COND (<NOT ,PRSI>
<TELL "Whoosh!" CR>)
(T
<PERFORM ,V?ATTACK ,PRSI ,PRSO>)>>
<ROUTINE PRE-TAKE ()
<COND (<IN? ,PRSO ,WINNER>
<TELL ,ALREADY>)
(<AND <FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL ,YOU-CANT "reach inside a closed container." CR>)
(,PRSI
<COND (<PRSI? ,GROUND>
<SETG PRSI <>>
<RFALSE>)
(<NOT <PRSI? <LOC ,PRSO>>>
<TELL
"The " D ,PRSO " isn't in the " D ,PRSI ,PERIOD-CR>)
(T
<SETG PRSI <>>
<RFALSE>)>)
(<IN? ,ADVENTURER ,PRSO>
<TELL "You're in it!" CR>)>>
<ROUTINE V-TAKE ()
<COND (<EQUAL? <ITAKE> T>
<TELL "Taken." CR>)>>
<ROUTINE V-TELL ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (,P-CONT
<SETG WINNER ,PRSO>
<SETG HERE <LOC ,WINNER>>)
(T
<TELL
"The " D ,PRSO " suggests that you reread your manual." CR>)>)
(T
<TELL ,YOU-CANT "talk to the " D ,PRSO "!" CR>
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<RFATAL>)>>
<ROUTINE V-THROUGH ("AUX" M)
<COND (<AND <FSET? ,PRSO ,DOORBIT>
<SET M <OTHER-SIDE ,PRSO>>>
<DO-WALK .M>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL
"You hit your head against the " D ,PRSO " as you attempt this feat." CR>)
(<IN? ,PRSO ,WINNER>
<TELL "That would involve quite a contortion!" CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE V-THROW ()
<COND (<IDROP>
<COND (<PRSI? ,ME>
<TELL
"The " D ,PRSO " conks you in the head. Normally, this wouldn't do much
damage, but you fall over backwards trying to duck and break your neck,
justice being swift and merciful in " ,GUE-NAME>
<JIGS-UP ".">)
(<AND ,PRSI <FSET? ,PRSI ,ACTORBIT>>
<TELL
"The " D ,PRSI " ducks as the " D ,PRSO
" flies by and crashes to the ground." CR>)
(T
<TELL "Thrown." CR>)>)
(T
<TELL "Huh?" CR>)>>
<ROUTINE V-THROW-OFF ()
<TELL ,YOU-CANT "throw anything off of that!" CR>>
<ROUTINE V-TIE ()
<COND (<PRSI? ,WINNER>
<TELL ,YOU-CANT "tie anything to yourself." CR>)
(T
<TELL ,YOU-CANT "tie the " D ,PRSO " to that." CR>)>>
<ROUTINE V-TIE-UP ()
<TELL "With a " D ,PRSI "!?!" CR>>
<ROUTINE PRE-TURN ()
<COND (<AND <PRSI? <> ,ROOMS>
<NOT <PRSO? ,BLACK-BOOK>>>
<TELL "Your bare hands don't appear to be enough." CR>)
(<NOT <FSET? ,PRSO ,TURNBIT>>
<TELL ,YOU-CANT "turn that!" CR>)>>
<ROUTINE V-TURN ()
<TELL "This has no effect." CR>>
<ROUTINE V-UNLOCK ()
<V-LOCK>>
<ROUTINE V-UNTIE ()
<TELL "This cannot be tied, so it cannot be untied!" CR>>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 3))
<TELL "Time passes..." CR>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0>
<RETURN>)
(<CLOCKER>
<RETURN>)>>
<SETG CLOCK-WAIT T>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
<COND (<NOT ,P-WALK-DIR>
<V-WALK-AROUND>)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GETB .PT ,REXIT>>)
(<EQUAL? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<GOTO .RM>)
(T
<RFATAL>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<TELL ,CANT-GO>
<RFATAL>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,DEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<TELL "The " D .OBJ " is closed." CR>
<SETG P-IT-OBJECT .OBJ>
<RFATAL>)>)>)
(<AND <NOT ,LIT>
<PROB 80>
<EQUAL? ,WINNER ,ADVENTURER>
<NOT <FSET? ,HERE ,NONLANDBIT>>>
<JIGS-UP
"Oh, no! You have walked into the slavering fangs of a lurking grue!">)
(T
<TELL ,CANT-GO>
<RFATAL>)>>
<ROUTINE V-WALK-AROUND ()
<TELL "Use compass directions for movement." CR>>
<ROUTINE V-WAVE ()
<HACK-HACK "Waving the ">>
<ROUTINE V-YELL ()
<TELL "Aaarrrggghhh!" CR>>
<ROUTINE V-ZORK ()
<TELL "At your service!" CR>>
\
;"describers"
<GLOBAL INDENTS
<TABLE (PURE)
""
" "
" "
" "
" "
" ">>
<GLOBAL LIT <>>
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (VERB-IS-LOOK <>) "AUX" (V? <>) STR)
<COND (<OR .VERB-IS-LOOK
<EQUAL? ,VERBOSITY 2>>
<SET V? T>)>
<COND (<NOT ,LIT>
<TELL
"It is pitch black. You are likely to be eaten by a grue." CR>
<RFALSE>)
(<NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET ,HERE ,TOUCHBIT>
<SET V? T>)
(<FSET? ,HERE ,MAZEBIT>
<SET V? T>)>
<TELL D ,HERE>
<COND (<IN? ,ADVENTURER ,INFLATED-BOAT>
<TELL ", in the " D ,INFLATED-BOAT>)>
<CRLF>
<COND (<NOT .V?>
<RTRUE>)
(<SET STR <GETP ,HERE ,P?LDESC>>
<TELL .STR>)
(T
<APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>)>
<CRLF>>
<ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
<COND (,LIT
<COND (<FIRST? ,HERE>
<PRINT-CONT ,HERE
<SET V? <OR .V? <EQUAL? ,VERBOSITY 2>>>
-1>)>)
(T
<TELL ,TOO-DARK>)>>
<GLOBAL DESC-OBJECT <>>
;"DESCRIBE-OBJECT -- takes object and flag. if flag is true will print a
long description (fdesc or ldesc), otherwise will print short."
<ROUTINE DESCRIBE-OBJECT (OBJ V? LEVEL "AUX" (STR <>) AV)
<SETG DESC-OBJECT .OBJ>
<COND (<AND <0? .LEVEL>
<APPLY <GETP .OBJ ,P?DESCFCN> ,M-OBJDESC>>
<RTRUE>)
(<AND <0? .LEVEL>
<OR <AND <NOT <FSET? .OBJ ,TOUCHBIT>>
<SET STR <GETP .OBJ ,P?FDESC>>>
<SET STR <GETP .OBJ ,P?LDESC>>>>
<TELL .STR>)
(<0? .LEVEL>
<TELL "There is a " D .OBJ " here">
<COND (<FSET? .OBJ ,ONBIT>
<TELL " (providing light)">)>
<TELL ".">)
(T
<TELL <GET ,INDENTS .LEVEL>>
<TELL "A " D .OBJ>
<COND (<FSET? .OBJ ,ONBIT>
<TELL " (providing light)">)>)>
<CRLF>
<COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
<PRINT-CONT .OBJ .V? .LEVEL>)>>
<ROUTINE PRINT-CONTENTS (OBJ "AUX" F N (1ST? T) (IT? <>) (TWO? <>))
<COND (<SET F <FIRST? .OBJ>>
<REPEAT ()
<SET N <NEXT? .F>>
<COND (.1ST?
<SET 1ST? <>>)
(T
<TELL ", ">
<COND (<NOT .N>
<TELL "and ">)>)>
<TELL "a " D .F>
<COND (<AND <NOT .IT?>
<NOT .TWO?>>
<SET IT? .F>)
(T
<SET TWO? T>
<SET IT? <>>)>
<SET F .N>
<COND (<NOT .F>
<COND (<AND .IT?
<NOT .TWO?>>
<SETG P-IT-OBJECT .IT?>)>
<RTRUE>)>>)>>
<ROUTINE PRINT-CONT (OBJ "OPTIONAL" (V? <>) (LEVEL 0)
"AUX" Y 1ST? SHIT (AV <>) STR (PV? <>) (INV? <>))
<COND (<NOT <SET Y <FIRST? .OBJ>>>
<RTRUE>)
(<IN? ,ADVENTURER ,INFLATED-BOAT>
<SET AV <LOC ,WINNER>>)>
<SET 1ST? T>
<SET SHIT T>
<COND (<EQUAL? ,WINNER .OBJ <LOC .OBJ>>
<SET INV? T>)
(T
<REPEAT ()
<COND (<NOT .Y>
<RETURN>)
(<EQUAL? .Y .AV>
<SET PV? T>)
(<EQUAL? .Y ,WINNER>
T)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<NOT <FSET? .Y ,TOUCHBIT>>
<SET STR <GETP .Y ,P?FDESC>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<TELL .STR CR>
<SET SHIT <>>)>
<COND (<AND <SEE-INSIDE? .Y>
<NOT <GETP <LOC .Y> ,P?DESCFCN>>
<FIRST? .Y>>
<COND (<PRINT-CONT .Y .V? 0>
<SET 1ST? <>>)>)>)>
<SET Y <NEXT? .Y>>>)>
<SET Y <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .Y>
<COND (<AND .PV? .AV <FIRST? .AV>>
<SET LEVEL <+ .LEVEL 1>>
<PRINT-CONT .AV .V? .LEVEL>)>
<RETURN>)
(<EQUAL? .Y .AV ,ADVENTURER>
T)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<OR .INV?
<FSET? .Y ,TOUCHBIT>
<NOT <GETP .Y ,P?FDESC>>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<COND (.1ST?
<COND (<FIRSTER .OBJ .LEVEL>
<COND (<L? .LEVEL 0>
<SET LEVEL 0>)>)>
<SET LEVEL <+ 1 .LEVEL>>
<SET 1ST? <>>)>
<COND (<L? .LEVEL 0>
<SET LEVEL 0>)>
<DESCRIBE-OBJECT .Y .V? .LEVEL>)
(<AND <FIRST? .Y>
<SEE-INSIDE? .Y>>
<SET LEVEL <+ .LEVEL 1>>
<PRINT-CONT .Y .V? .LEVEL>
<SET LEVEL <- .LEVEL 1>>)>)>
<SET Y <NEXT? .Y>>>
<COND (<AND .1ST? .SHIT>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE FIRSTER (OBJ LEVEL)
<COND (<EQUAL? .OBJ ,TROPHY-CASE>
<TELL "Your treasures include:" CR>)
(<EQUAL? .OBJ ,WINNER>
<TELL "You have:" CR>)
(<NOT <IN? .OBJ ,ROOMS>>
<COND (<G? .LEVEL 0>
<TELL <GET ,INDENTS .LEVEL>>)>
<COND (<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on the " D .OBJ " is:" CR>)
(<FSET? .OBJ ,ACTORBIT>
<TELL "The " D .OBJ " is holding:" CR>)
(T
<TELL "The " D .OBJ " contains:" CR>)>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<AND <NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT> <FSET? .OBJ ,OPENBIT>>>>
\
;"death"
<GLOBAL DEAD <>>
<GLOBAL DEATHS 0>
<ROUTINE JIGS-UP (DESC)
<SETG WINNER ,ADVENTURER>
<TELL .DESC>
<COND (<NOT ,LUCKY>
<TELL " Bad luck, huh?">)>
<CRLF>
<COND (,DEAD
<TELL "|
Congratulations. It's not easy to be killed while already dead." CR>
<FINISH>)>
<PROG ()
<SETG SCORE <- ,SCORE 10>>
<TELL "
| **** You have died ****
|
|">
<MOVE ,WINNER ,HERE>
<COND (<NOT <L? ,DEATHS 2>>
<TELL
"You clearly are a suicidal maniac. Your remains will be put in Hades for your
fellow adventurers to gloat over." CR>
<FINISH>)
(T
<SETG DEATHS <+ ,DEATHS 1>>
<MOVE ,WINNER ,HERE>
<COND (<FSET? ,ALTAR ,TOUCHBIT>
<TELL
"You feel relieved of your burdens and find yourself before the gates of Hell">
<COND (<NOT ,HADES-FLAG>
<TELL
", where the spirits jeer and deny you entry">)>
<TELL
". Your senses are disturbed. Objects around you appear indistinct,
bleached of color, even unreal." CR CR>
<SETG DEAD T>
<SETG TROLL-FLAG T>
<PUTP ,WINNER ,P?ACTION DEAD-FUNCTION>
<GOTO ,ENTRANCE-TO-HADES>)
(T
<TELL
"Well, you probably deserve another chance. I can't quite fix you up
completely, but you can't have everything." CR CR>
<FCLEAR ,TRAP-DOOR ,TOUCHBIT>
<GOTO ,FOREST-EDGE>)>
<SETG P-CONT <>>
<RANDOMIZE-OBJECTS>
<KILL-INTERRUPTS>
<RFATAL>)>>>
<ROUTINE RANDOMIZE-OBJECTS ("AUX" (R <FIRST? ,ROOMS>) F N)
<COND (<IN? ,LAMP ,WINNER>
<MOVE ,LAMP ,LIVING-ROOM>)>
<COND (<IN? ,COFFIN ,WINNER>
<MOVE ,COFFIN ,EGYPTIAN-ROOM>)>
<SET N <FIRST? ,WINNER>>
<REPEAT ()
<SET F .N>
<COND (<NOT .F>
<RETURN>)>
<SET N <NEXT? .F>>
<COND (<FSET? .F ,TREASUREBIT>
<REPEAT ()
<COND (<AND <FSET? .R ,RLANDBIT>
<NOT <FSET? .R ,ONBIT>>
<PROB 50>>
<MOVE .F .R>
<RETURN>)
(T
<SET R <NEXT? .R>>)>>)
(T
<MOVE .F <GET ,ABOVE-GROUND-ROOMS <RANDOM 7>>>)>>>
<GLOBAL ABOVE-GROUND-ROOMS
<TABLE
<>
NORTH-OF-HOUSE
FOREST-PATH
BEHIND-HOUSE
FOREST-EDGE
FOREST-NORTH
FOREST-SOUTH
CANYON-VIEW>>
<ROUTINE KILL-INTERRUPTS ()
<DISABLE <INT I-XB>>
<DISABLE <INT I-XC>>
<DISABLE <INT I-CYCLOPS>>
<DISABLE <INT I-LANTERN>>
<DISABLE <INT I-CANDLES>>
<DISABLE <INT I-MATCH>>
<FCLEAR ,MATCH ,ONBIT>
<RTRUE>>
<ROUTINE DEAD-FUNCTION ("OPTIONAL" (FOO <>) "AUX" M)
<COND (<VERB? WALK>
<COND (<AND <EQUAL? ,HERE ,LADDER-ROOM>
<EQUAL? ,PRSO ,P?WEST>>
<TELL "The draft blows you back." CR>)>)
(<VERB? BRIEF VERBOSE SUPER-BRIEF VERSION SAVE RESTORE
QUIT RESTART>
<RFALSE>)
(<VERB? ATTACK MUNG ALARM SWING>
<TELL "Attacks are vain in your condition." CR>)
(<VERB? OPEN CLOSE EAT DRINK INFLATE DEFLATE TURN BURN
TIE UNTIE RUB>
<TELL "Such action is beyond your capabilities." CR>)
(<VERB? WAIT>
<TELL "Might as well. You've got an eternity." CR>)
(<VERB? LAMP-ON>
<TELL "You need no light to guide you." CR>)
(<VERB? SCORE>
<TELL "You're dead! How can you think of your score?" CR>)
(<VERB? TAKE RUB>
<TELL "Your hand passes through it." CR>)
(<VERB? DROP THROW INVENTORY>
<TELL "You have no possessions." CR>)
(<VERB? DIAGNOSE>
<TELL "You are dead." CR>)
(<VERB? LOOK>
<TELL "The room looks unearthly">
<COND (<NOT <FIRST? ,HERE>>
<TELL ".">)
(T
<TELL " and objects appear indistinct.">)>
<COND (<NOT <FSET? ,HERE ,ONBIT>>
<TELL
" Although there is no light, the room seems dimly illuminated.">)>
<CRLF> <CRLF>
<RFALSE>)
(<VERB? PRAY>
<COND (<EQUAL? ,HERE ,ALTAR>
<FCLEAR ,LAMP ,INVISIBLE>
<PUTP ,WINNER ,P?ACTION 0>
<SETG DEAD <>>
<COND (<IN? ,TROLL ,TROLL-ROOM>
<SETG TROLL-FLAG <>>)>
<TELL
"The sound of a distant trumpet is heard. You find yourself in the
woods, rising as if from a long sleep. A breeze rustles the treetops;
then, all is still." CR CR>
<GOTO ,FOREST-EDGE>)
(T
<TELL "Your prayers are not heard." CR>)>)
(T
<TELL ,YOU-CANT "even do that." CR>
<SETG P-CONT <>>
<RFATAL>)>>
\
;"object manipulation"
<CONSTANT FUMBLE-NUMBER 7>
<CONSTANT FUMBLE-PROB 8>
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" CNT OBJ LOAD-ALLOWED)
<SET LOAD-ALLOWED <- 100 <* <- 6 <GETP ,ADVENTURER ,P?STRENGTH>> 10>>>
<COND (,DEAD
<COND (.VB
<TELL "Your hand passes through it." CR>)>
<RFALSE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<TELL <PICK-ONE ,YUKS> CR>)>
<RFALSE>)
(<AND <EQUAL? ,HERE ,THIEFS-LAIR>
<IN? ,THIEF ,HERE>
<FSET? ,PRSO ,TREASUREBIT>>
<COND (.VB
<TELL "The thief doesn't let you near." CR>)>
<RFALSE>)
(<AND <FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
;"Kludge for parser calling itake"
<RFALSE>)
(<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> .LOAD-ALLOWED>>
<COND (.VB
<TELL "Your load is too heavy">
<COND (<L? .LOAD-ALLOWED 100>
<TELL", especially in light of your condition">)>
<TELL ,PERIOD-CR>)>
<RFATAL>)
(<AND <VERB? TAKE>
<G? <SET CNT <CCOUNT ,WINNER>> ,FUMBLE-NUMBER>
<PROB <* .CNT ,FUMBLE-PROB>>>
<TELL "You're holding too many things already!" CR>
<RFALSE>)
(T
<MOVE ,PRSO ,WINNER>
<FCLEAR ,PRSO ,NDESCBIT>
<FSET ,PRSO ,TOUCHBIT>
<SCORE-OBJ ,PRSO>
<RTRUE>)>>
<ROUTINE IDROP ()
<COND (<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <IN? <LOC ,PRSO> ,WINNER>>>
<TELL ,YNH "the " D ,PRSO ,PERIOD-CR>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL "The " D ,PRSO " is closed." CR>
<RFALSE>)
(T
<MOVE ,PRSO <LOC ,WINNER>>
<RTRUE>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<SET CNT <+ .CNT 1>>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
<ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<SET WT <+ .WT <WEIGHT .CONT>>>
<COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>>
\
;"movement stuff"
<CONSTANT REXIT 0>
<CONSTANT UEXIT 1>
<CONSTANT NEXIT 2>
<CONSTANT FEXIT 3>
<CONSTANT CEXIT 4>
<CONSTANT DEXIT 5>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT CEXITFLAG 1>
<CONSTANT CEXITSTR 1>
<CONSTANT DEXITOBJ 1>
<CONSTANT DEXITSTR 1>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" (WLOC <LOC ,WINNER>) OLIT OHERE)
<SET OLIT ,LIT>
<SET OHERE ,HERE>
<COND (<AND <FSET? .RM ,NONLANDBIT>
<NOT <IN? ,ADVENTURER ,INFLATED-BOAT>>>
<TELL ,YOU-CANT "go there without a boat." CR>
<RFALSE>)
(<AND <FSET? .RM ,RLANDBIT>
<FSET? ,HERE ,RLANDBIT>
<IN? ,ADVENTURER ,INFLATED-BOAT>>
<TELL "You'll have to get out of the raft first." CR>
<RFALSE>)
(T
<COND (<AND <IN? ,ADVENTURER ,INFLATED-BOAT>
<NOT <FSET? ,HERE ,RLANDBIT>>
<FSET? .RM ,RLANDBIT>
<NOT ,DEAD>>
<TELL
"The " D .WLOC " comes to a rest on the shore." CR CR>)>
<COND (<IN? ,ADVENTURER ,INFLATED-BOAT>
<MOVE .WLOC .RM>)
(T
<MOVE ,WINNER .RM>)>
<SETG HERE .RM>
<SETG LIT <LIT? ,HERE>>
<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<PROB 80>>
<TELL "Oh, no! A lurking grue slithered into the ">
<COND (<IN? ,ADVENTURER ,INFLATED-BOAT>
<TELL D <LOC ,WINNER>>)
(T
<TELL "room">)>
<JIGS-UP " and devoured you!">
<RTRUE>)>
<COND (<AND <NOT ,LIT>
<EQUAL? ,WINNER ,ADVENTURER>>
<TELL "You have moved into a dark place." CR>
<SETG P-CONT <>>)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<SCORE-OBJ .RM>
<COND (<NOT <EQUAL? ,HERE .RM>>
<RTRUE>)
;(<AND <NOT <EQUAL? ,ADVENTURER ,WINNER>>
<IN? ,ADVENTURER .OHERE>>
<TELL "The " D ,WINNER " leaves the room." CR>)
(<AND <EQUAL? ,HERE .OHERE> ;"no double description"
<EQUAL? ,HERE ,ENTRANCE-TO-HADES>>
<RTRUE>)
(<AND .V?
<EQUAL? ,WINNER ,ADVENTURER>
<DESCRIBE-ROOM>
<G? ,VERBOSITY 0>>
<DESCRIBE-OBJECTS>)>
<RTRUE>)>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>
<RTRUE>>