sorcerer/verbs.zil
2019-04-13 21:14:02 -04:00

3276 lines
88 KiB
Plaintext
Raw 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
SORCERER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
;"subtitle game commands"
<GLOBAL VERBOSE <>>
<GLOBAL SUPER-BRIEF <>>
<ROUTINE V-VERBOSE ()
<SETG VERBOSE T>
<SETG SUPER-BRIEF <>>
<TELL "Maximum verbosity." CR CR>
<V-LOOK>>
<ROUTINE V-BRIEF ()
<SETG VERBOSE <>>
<SETG SUPER-BRIEF <>>
<TELL "Brief descriptions." CR>>
<ROUTINE V-SUPER-BRIEF ()
<SETG SUPER-BRIEF T>
<TELL "Super-brief descriptions." CR>>
<ROUTINE V-DIAGNOSE ("AUX" (BOTH <>))
<COND (<L? ,AWAKE 0>
<TELL "You are wide awake">)
(T
<TELL "You are " <GET ,TIRED-TELL ,AWAKE>>)>
<TELL ", and you are in good health.">
<COND (<OR <G? ,HUNGER-LEVEL 0>
<G? ,THIRST-LEVEL 0>>
<TELL " You feel ">
<COND (<G? ,HUNGER-LEVEL 0>
<SET BOTH T>
<TELL <GET ,HUNGER-THIRST-TABLE ,HUNGER-LEVEL>>
<TELL " hungry">)>
<COND (<G? ,THIRST-LEVEL 0>
<COND (.BOTH
<TELL ", and ">)>
<TELL <GET ,HUNGER-THIRST-TABLE ,THIRST-LEVEL>>
<TELL " thirsty">)>
<TELL ".">)>
<COND (,BITTEN
<TELL
" You have a small bite on your hand which doesn't seem too serious.">)>
<CRLF>>
<GLOBAL TIRED-TELL
<PTABLE
"beginning to tire"
"feeling tired"
"getting more and more tired"
"worn out"
"dead tired"
"so tired you can barely concentrate"
"moving only on your last reserves of strength"
"practically asleep"
"unable to keep your eyes open for more than a few moments at a time"
"about to keel over from exhaustion">>
<ROUTINE V-INVENTORY ()
<COND (<FIRST? ,PROTAGONIST>
<PRINT-CONT ,PROTAGONIST>)
(T
<TELL "You are empty-">
<COND (,FWEEPED
<TELL "taloned">)
(T
<TELL "handed">)>
<TELL "." CR>)>>
<ROUTINE V-QUIT ()
<V-SCORE>
<DO-YOU-WISH "leave the game">
<COND (<YES?>
<QUIT>)
(T
<TELL "Ok." CR>)>>
<ROUTINE V-RESTART ()
<V-SCORE>
<DO-YOU-WISH "restart">
<COND (<YES?>
<TELL "Restarting." CR>
<RESTART>
<TELL "Failed." CR>)>>
<ROUTINE DO-YOU-WISH (STRING)
<TELL CR "Do you wish to " .STRING "? (Y is affirmative): ">>
<ROUTINE FINISH ("OPTIONAL" (REPEATING <>))
<CRLF>
<COND (<NOT .REPEATING>
<V-SCORE>
<CRLF>)>
<TELL
"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):|
|
>">
<PUTB ,P-INBUF 0 10> ;"so you can't input too many characters"
<READ ,P-INBUF ,P-LEXV>
<PUTB ,P-INBUF 0 60>
<COND (<EQUAL? <GET ,P-LEXV 1> ,W?RESTAR>
<RESTART>
<TELL "Failed." CR>
<FINISH T>)
(<EQUAL? <GET ,P-LEXV 1> ,W?RESTOR>
<V-RESTORE>
<FINISH T>)
(<EQUAL? <GET ,P-LEXV 1> ,W?QUIT ,W?Q>
<QUIT>)
(T
<FINISH T>)>>
<ROUTINE YES? ()
<PRINTI ">">
<PUTB ,P-INBUF 0 10> ;"so you can't input too many characters"
<READ ,P-INBUF ,P-LEXV>
<PUTB ,P-INBUF 0 60>
<COND (<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
<RTRUE>)
(<EQUAL? <GET ,P-LEXV 1> ,W?NO ,W?N>
<RFALSE>)
(T
<TELL "Please type YES or NO." CR CR>
<AGAIN>)>>
<ROUTINE V-RESTORE ()
<COND (<NOT <RESTORE>> ;"if successful, can't go beyond this point"
<TELL "Failed." CR>)>>
<ROUTINE V-SAVE ()
<COND (<SAVE>
<TELL "Ok." CR>)
(T
<TELL "Failed." CR>)>>
<ROUTINE V-SCORE ()
<COND (,POOFED
<TELL "If you still existed, your score would be ">)
(T
<TELL "Your score is ">)>
<TELL N ,SCORE " of a possible 400, in " N ,MOVES " move">
<COND (<NOT <1? ,MOVES>>
<TELL "s">)>
<TELL ". This puts you in the class of ">
<COND (<L? ,SCORE 0>
<TELL "Menace to Society">)
(T
<TELL <GET ,RANKINGS </ ,SCORE 50>>>)>
<TELL "." CR>>
<GLOBAL RANKINGS
<PTABLE
"Charlatan"
"Parlor Magician"
"Novice Enchanter"
"Intermediate Enchanter"
"Senior Enchanter"
"Expert Enchanter"
"Member of the Circle of Enchanters"
"Sorcerer"
"Leader of the Circle of Enchanters">>
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<TELL "Here begins" ,COPR-NOTICE CR>
<V-VERSION>>
<ROUTINE V-UNSCRIPT ()
<TELL "Here ends" ,COPR-NOTICE CR>
<V-VERSION>
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<GLOBAL COPR-NOTICE " a transcript of interaction with SORCERER.">
<ROUTINE V-VERSION ("AUX" (CNT 17))
<TELL
"SORCERER|
Infocom interactive fiction - a fantasy story|
Copyright (c) 1984 by Infocom, Inc. All rights reserved.|
SORCERER is a 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 ()
<COND (<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER 502>>
<TELL N ,SERIAL CR>)
(T
<TELL "Performing the VERIFY spell..." CR>
<COND (<VERIFY>
<TELL "Good." CR>)
(T
<TELL CR "** Bad **" CR>)>)>>
<CONSTANT SERIAL 0>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <EQUAL? ,PRSO ,INTNUM>>
<TELL "Illegal call to #RANDOM." CR>)
(T
<RANDOM <- 0 ,P-NUMBER>>
<RTRUE>)>>
<ROUTINE V-$RECORD ()
<DIROUT ,D-RECORD-ON> ;"all READS and INPUTS get sent to command file"
<RTRUE>>
<ROUTINE V-$UNRECORD ()
<DIROUT ,D-RECORD-OFF>
<RTRUE>>
;"subtitle real verbs"
<ROUTINE V-AGAIN ("AUX" OBJ)
<COND (<NOT ,L-PRSA>
<ANYMORE>)
(<AND <NOT <EQUAL? ,HERE ,LAST-PSEUDO-LOC>>
<EQUAL? ,PSEUDO-OBJECT ,L-PRSO ,L-PRSI>>
<SETG L-PRSA <>>
<ANYMORE>)
(<EQUAL? ,L-PRSA ,V?WALK>
<DO-WALK ,L-PRSO>)
(<OR <EQUAL? ,L-PRSA ,V?FIND ,V?FOLLOW ,V?AIMFIZ>
<EQUAL? ,L-PRSA ,V?WHAT ,V?WHERE ,V?WHO>
<EQUAL? ,L-PRSA ,V?WAIT-FOR ,V?SEND ,V?WALK-TO>
<EQUAL? ,L-PRSA ,V?RESEARCH>>
<TELL
"An adventure game nymph appears, sitting on your keyboard, and informs you
that the use of AGAIN is prohibited after that verb." CR>)
(T
<SET OBJ
<COND (<AND ,L-PRSO
<EQUAL? <LOC ,L-PRSO> ,DIAL>>
,L-PRSO)
(<AND ,L-PRSI
<EQUAL? <LOC ,L-PRSI> ,DIAL>>
,L-PRSI)>>
<COND (<AND .OBJ
<NOT <EQUAL? .OBJ ,PSEUDO-OBJECT ,ROOMS>>>
<TELL "You can't see">
<ARTICLE .OBJ T>
<TELL " anymore." CR>
<RFATAL>)
(T
<PERFORM ,L-PRSA ,L-PRSO ,L-PRSI>
<RTRUE>)>)>>
<ROUTINE V-ALARM ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<PERFORM ,V?ALARM ,ME>
<RTRUE>)
(T
<TELL "I don't think that">
<ARTICLE ,PRSO T>
<TELL " is sleeping." CR>)>>
<ROUTINE V-ANSWER ()
<TELL "Nobody seems to be awaiting your answer." CR>
<STOP>>
<ROUTINE V-ASK-ABOUT ()
<COND (<EQUAL? ,PRSO ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "After a moment's thought,">
<ARTICLE ,PRSO T>
<TELL " denies any knowledge of">
<ARTICLE ,PRSI T>
<TELL ".">
<COND (<EQUAL? ,PRSO ,PRSI>
<TELL " (Rather disingenuous, if you ask me.)">)>
<CRLF>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-FOR ()
<COND (<AND <EQUAL? ,PRSO ,YOUNGER-SELF>
<EQUAL? ,PRSI ,SPELL-BOOK>
<SPELL-BOOK-PASS-OFF-CHECK>>
<RTRUE>)>
<TELL "Unsurprisingly,">
<ARTICLE ,PRSO T>
<TELL " is not likely to oblige." CR>>
<ROUTINE V-ATTACK ()
<IKILL "attack">>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE PRE-BOARD ("AUX" AV)
<SET AV <LOC ,PROTAGONIST>>
<COND (<FSET? ,PRSO ,VEHBIT>
<COND (,FLYING
<WHILE-FLYING>)
(<FSET? .AV ,VEHBIT>
<TELL "You are already in">
<ARTICLE ,PRSO T>
<TELL "!" CR>)
(T
<RFALSE>)>)
(T
<TELL "You can't get into">
<ARTICLE ,PRSO T>
<TELL "!" CR>)>
<RFATAL>>
<ROUTINE V-BOARD ()
<MOVE ,PROTAGONIST ,PRSO>
<TELL "You are now in">
<ARTICLE ,PRSO T>
<TELL "." CR>
<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>>
<ROUTINE V-BURN ()
<COND (<NOT ,PRSI>
<TELL "Your blazing gaze is insufficient." CR>)
(T
<WITH???>)>>
<ROUTINE V-CHASTISE ()
<TELL
"Use prepositions to indicate precisely what you want to do: LOOK AT the
object, LOOK INSIDE it, LOOK UNDER it, etc." CR>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?DOWN>)
(T
<V-DEFLATE>)>>
<ROUTINE V-CLIMB-FOO ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?UP>)
(T
<V-DEFLATE>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(T
<TELL "You can't climb onto">
<ARTICLE ,PRSO T>
<TELL "." CR>)>>
<ROUTINE V-CLIMB-OVER ()
<TELL "You can't do that." CR>>
<ROUTINE V-CLIMB-UP ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?UP>)
(T
<V-DEFLATE>)>>
<ROUTINE V-CLOSE ()
<COND (<FSET? ,PRSO ,SCROLLBIT>
<TELL-ME-HOW>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "Huh?" CR>)
(<FSET? ,PRSO ,SURFACEBIT>
<TELL "There's no way to close">
<ARTICLE ,PRSO>
<TELL "." CR>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "Okay,">
<ARTICLE ,PRSO T>
<TELL " is now closed." CR>
<FCLEAR ,PRSO ,OPENBIT>)
(T
<ALREADY-CLOSED>)>)
(<OR <FSET? ,PRSO ,CONTBIT>
<EQUAL? ,PRSO ,JOURNAL>>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Closed.">
<SETG LIT <LIT? ,HERE>>
<COND (<AND <NOT ,LIT>
<NOT ,BLORTED>>
<TELL " ">
<NOW-BLACK>)>
<CRLF>)
(T
<ALREADY-CLOSED>)>)
(T
<TELL-ME-HOW>)>>
<ROUTINE V-COMBO ()
<COND (<AND <IN? ,YOUNGER-SELF ,HERE>
<EQUAL? ,PRSO ,INTNUM>>
<TELL
"Don't tell me. Talk to your confused twin over there." CR>)
(T
<TELL "What are you talking about?" CR>)>>
<ROUTINE V-COMPARE ()
<V-SIT>>
;<ROUTINE V-COMMAND ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Unfortunately,">
<ARTICLE ,PRSO T>
<TELL " pays no attention." CR>)
(T
<TELL "You cannot talk to that!" CR>)>>
<ROUTINE V-COUNT ()
<TELL "You have lost your mind." CR>>
<ROUTINE V-CROSS ()
<TELL "You can't cross that!" CR>>
<ROUTINE V-CURSE ()
<TELL "Such language from an Enchanter!" CR>>
<ROUTINE V-CUT ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?KILL ,PRSO ,PRSI>
<RTRUE>)
(<AND <FSET? ,PRSO ,SCROLLBIT>
<FSET? ,PRSI ,WEAPONBIT>>
<MOVE ,PRSO ,DIAL>
<TELL "Your skillful" D ,PRSI "smanship slices">
<ARTICLE ,PRSO T>
<TELL " into slivers, which vanish." CR>)
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
<TELL "I doubt that the \"cutting edge\" of">
<ARTICLE ,PRSI>
<TELL " is adequate." CR>)
(T
<TELL "Strange concept, cutting">
<ARTICLE ,PRSO T>
<TELL "...." CR>)>>
<ROUTINE V-DEFLATE ()
<TELL "Bizarre." CR>>
<ROUTINE V-DIG ()
<COND (,FLYING
<WHILE-FLYING>)
(T
<V-SIT>)>>
<ROUTINE V-DISEMBARK ()
<COND (<NOT <EQUAL? <LOC ,PROTAGONIST> ,PRSO>>
<LOOK-AROUND-YOU>
<RFATAL>)
(T
<TELL "You are now on your feet." CR>
<MOVE ,PROTAGONIST ,HERE>)>>
<ROUTINE V-DRINK ("AUX" S)
<TELL "You can't drink that!" CR>>
<ROUTINE V-DRINK-FROM ("AUX" X)
<COND (<EQUAL? ,PRSO ,WATER>
<PERFORM ,V?DRINK ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,VIALBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<COND (<FIRST? ,PRSO>
<SET X <FIRST? ,PRSO>>
<PERFORM ,V?DRINK .X>
<RTRUE>)
(T
<TELL "The vial is empty." CR>)>)
(T
<TELL "The vial is closed!" CR>)>)
(T
<TELL "How peculiar!" CR>)>>
;<ROUTINE PRE-DROP ()
<COND (<EQUAL? ,PRSO <LOC ,PROTAGONIST>>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)>>
<ROUTINE V-DROP ()
<COND (<IDROP>
<COND (<AND <EQUAL? ,HERE ,COAL-BIN-ROOM ,DIAL-ROOM>
<L? <GETP ,PRSO ,P?SIZE> 20>>
<BURIED-IN-COAL "drop">)
(T
<COND (<EQUAL? ,HERE ,HAUNTED-HOUSE>
<MOVE ,PRSO ,DIAL>)>
<TELL "Dropped." CR>)>)>>
<ROUTINE V-EAT ()
<TELL "Did they teach you to eat that in survival school?" CR>>
<ROUTINE V-ENTER ("AUX" VEHICLE)
<COND (<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<PERFORM ,V?BOARD .VEHICLE>
<RTRUE>)
(T
<DO-WALK ,P?IN>)>>
<ROUTINE PRE-EXAMINE ()
<COND (<AND <NOT ,LIT>
<NOT ,BLORTED>>
<TOO-DARK>)>>
<ROUTINE V-EXAMINE ()
<COND (<GETP ,PRSO ,P?TEXT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,DOORBIT>
<V-LOOK-INSIDE>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<V-LOOK-INSIDE>)
(T
<TELL "It's closed." CR>)>)
(<FSET? ,PRSO ,ONBIT>
<TELL "Someone must have cast the frotz spell on">
<ARTICLE ,PRSO T>
<TELL ", because it is glowing brightly." CR>)
(T
<TELL "You see nothing special about">
<ARTICLE ,PRSO T>
<TELL "." CR>)>>
<ROUTINE V-EXIT ()
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(T
<DO-WALK ,P?OUT>)>>
<ROUTINE V-EXORCISE ()
<TELL "You can't do that with mere words!" CR>>
<ROUTINE V-FILL ()
<COND (<NOT ,PRSI>
<COND (<GLOBAL-IN? ,WATER ,HERE>
<PERFORM ,V?FILL ,PRSO ,WATER>
<RTRUE>)
(T
<TELL "There's nothing to fill it with." CR>)>)
(T
<TELL "Huh?" CR>)>>
<ROUTINE V-FIND ("OPTIONAL" (WHERE <>) "AUX" (L <LOC ,PRSO>))
<COND (<EQUAL? ,PRSO ,HANDS>
<TELL
"Within six feet of your head, assuming you haven't left that somewhere." CR>)
(<EQUAL? ,PRSO ,ME>
<TELL "You're around here somewhere..." CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "You have it!" CR>)
(<OR <IN? ,PRSO ,HERE>
<EQUAL? ,PRSO ,PSEUDO-OBJECT>>
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "He's">)
(T
<TELL "It's">)>
<TELL " right in front of you." CR>)
(<IN? ,PRSO ,LOCAL-GLOBALS>
<TELL "You're the magician!" CR>)
(<AND <FSET? .L ,ACTORBIT>
<VISIBLE? .L>>
<TELL "As far as you can tell,">
<ARTICLE .L T>
<TELL " has it." CR>)
(<AND <FSET? .L ,CONTBIT>
<VISIBLE? .L>>
<TELL "It's in">
<ARTICLE .L T>
<TELL "." CR>)
(.WHERE
<TELL "Beats me." CR>)
(T
<TELL "You'll have to do that yourself." CR>)>>
<ROUTINE V-FIRST-LOOK ()
<COND (<DESCRIBE-ROOM>
<COND (<NOT ,SUPER-BRIEF>
<DESCRIBE-OBJECTS>)>)>>
<ROUTINE V-FLY ()
<COND (<OR <NOT ,PRSO>
<EQUAL? ,PRSO ,ME>>
<COND (,FLYING
<TELL "You are!" CR>)
(T
<TELL "Perhaps a spell would be useful..." CR>)>)
(<EQUAL? ,PRSO ,P-DIRECTION>
<PERFORM ,V?WALK ,PRSO>
<RTRUE>)
(T
<TELL "You can't make">
<ARTICLE ,PRSO T>
<TELL " fly!" CR>)>>
<ROUTINE V-FOLLOW ()
<COND (<IN? ,PRSO ,HERE>
<TELL "But">
<ARTICLE ,PRSO T>
<TELL " is right here!" CR>)
(<AND <EQUAL? ,PRSO ,TURRET>
,MAILMAN-FOLLOW>
<DO-WALK ,P?SOUTH>)
(T
<V-SIT>)>>
<ROUTINE V-FORGET ()
<TELL
"You might also try not thinking about a purple hippopotamus!" CR>>
<ROUTINE PRE-GIVE ()
<COND (<NOT <HELD? ,PRSO>>
<TELL
"That's easy for you to say since you don't even have it." CR>)
(<FSET? ,PRSO ,SPELLBIT>
<TELL
"The spell is permanently inscribed in your spell book!" CR>)>>
<ROUTINE V-GIVE ()
<COND (<NOT <FSET? ,PRSI ,ACTORBIT>>
<TELL "You can't give">
<ARTICLE ,PRSO>
<TELL " to">
<ARTICLE ,PRSI>
<TELL "!" CR>)
(T
<TELL "Politely,">
<ARTICLE ,PRSI T>
<TELL " refuses your offer." CR>)>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Silently,">
<ARTICLE ,PRSO T>
<TELL " bows his head to you in greeting." CR>)
(T
<TELL "Only schizophrenics say \"Hello\" to">
<ARTICLE ,PRSO>
<TELL "." CR>)>)
(T
<TELL <PICK-ONE ,HELLOS> CR>)>>
<GLOBAL HELLOS
<PLTABLE
"Hello."
"Good day."
"Nice weather we've been having lately."
"Good-bye.">>
<ROUTINE V-HELP ()
<TELL
"If you're really stuck, maps and InvisiClues hint booklets are available.
If you have misplaced the order form that came in your package, send us a
note at:|
P.O. Box 620|
Garden City, NY 11530|
Dept. Z5|
and we'll be happy to send you an order form." CR>>
<ROUTINE V-HIDE ()
<COND (<NOT ,PRSO>
<TELL "There's no place to hide here." CR>
<RFATAL>)
(<AND ,PRSI <FSET? ,PRSI ,ACTORBIT>>
<TELL "Why hide it when">
<ARTICLE ,PRSI T>
<TELL " isn't interested in it." CR>)
(<NOT ,PRSI>
<TELL "From what? From whom? Why?" CR>)>>
<ROUTINE V-INFLATE ()
<TELL "How can you inflate that?" CR>>
;<ROUTINE V-INCANT ()
<TELL
"The incantation echoes back faintly, but nothing else happens." CR>
<STOP>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking">>
<ROUTINE V-KILL ()
<IKILL "kill">>
<ROUTINE IKILL (STR)
<COND (<NOT ,PRSO>
<TELL "There is nothing here to " .STR "." CR>)
(<AND <NOT ,PRSI>
<HELD? ,KNIFE>>
<SETG PRSI ,KNIFE>
<TELL "(with the " D ,PRSI ")" CR>
<PERFORM ,V?KILL ,PRSO ,PRSI>
<RTRUE>)>
<COND (<AND <NOT <FSET? ,PRSO ,ACTORBIT>>
<NOT <EQUAL? ,PRSO ,BOA ,HELLHOUND ,DORN-BEAST>>>
<TELL "I've known strange people, but fighting">
<ARTICLE ,PRSO>
<TELL "?" CR>)
(<OR <NOT ,PRSI>
<EQUAL? ,PRSI ,HANDS>>
<TELL "Trying to " .STR>
<ARTICLE ,PRSO>
<TELL " with your bare hands is suicidal." CR>)
(<NOT <IN? ,PRSI ,PROTAGONIST>>
<TELL "You aren't even holding">
<ARTICLE ,PRSI T>
<TELL "." CR>)
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
<TELL "Trying to " .STR>
<ARTICLE ,PRSO T>
<TELL " with">
<ARTICLE ,PRSI>
<TELL " is suicidal." CR>)
(T
<TELL "You'd never survive the attack." CR>)>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "Nobody's home." CR>)
(T
<TELL "Why knock on">
<ARTICLE ,PRSO>
<TELL "?" CR>)>>
<ROUTINE V-KISS ()
<TELL "I'd sooner kiss a pig." CR>>
<ROUTINE V-LAMP-OFF ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<NOT <FSET? ,PRSO ,ONBIT>>
<TELL "It is already off." CR>)
(T
<FCLEAR ,PRSO ,ONBIT>
<COND (,LIT
<SETG LIT <LIT? ,HERE>>)>
<TELL "Okay,">
<ARTICLE ,PRSO T>
<TELL " is now off." CR>
<COND (<AND <NOT <SETG LIT <LIT? ,HERE>>>
<NOT ,BLORTED>>
<NOW-BLACK>
<CRLF>)>)>)
(<FSET? ,PRSO ,ONBIT>
<TELL "How? It's glowing by magic." CR>)
(T
<TELL "You can't turn that off." CR>)>
<RTRUE>>
<ROUTINE V-LAMP-ON ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<TELL "It is already on." CR>)
(T
<FSET ,PRSO ,ONBIT>
<TELL "Okay,">
<ARTICLE ,PRSO T>
<TELL " is now on." CR>
<COND (<AND <NOT ,LIT>
<NOT ,BLORTED>>
<SETG LIT <LIT? ,HERE>>
<CRLF>
<V-LOOK>)>)>)
(T
<TELL "You can't turn that on." CR>)>
<RTRUE>>
<ROUTINE V-LAND ()
<COND (,FLYING
<TELL "You'll have to wait for the spell to wear off." CR>)
(T
<LOOK-AROUND-YOU>)>>
<ROUTINE V-LAUNCH ()
<COND (<FSET? ,PRSO ,VEHBIT>
<TELL "You can't launch that by saying \"launch\"!" CR>)
(T
<TELL "Huh?" CR>)>>
<ROUTINE V-LEAN-ON ()
<TELL "Are you so very tired, then?" CR>>
<ROUTINE V-LEAP ()
<COND (,FLYING
<WHILE-FLYING>)
(,PRSO
<COND (<IN? ,PRSO ,HERE>
<V-SKIP>)
(T
<TELL "That would be a good trick." CR>)>)
(<OR <EQUAL? ,HERE ,RIVER-BANK ,DRAWBRIDGE ,TOP-OF-FALLS>
<EQUAL? ,HERE ,TURRET ,EDGE-OF-CHASM ,BARE-PASSAGE>
<EQUAL? ,HERE ,TREE-BRANCH ,GUN-EMPLACEMENT>
,RIDE-IN-PROGRESS>
<JIGS-UP
"This was not a safe place to try jumping. You should have looked
before you leaped.">)
(<OR <EQUAL? ,HERE ,LAGOON ,DRAWBRIDGE>
<EQUAL? ,HERE ,COAL-BIN-ROOM ,TOP-OF-CHUTE>>
<DO-WALK ,P?DOWN>)
(T
<V-SKIP>)>>
<ROUTINE V-LEAVE ()
<DO-WALK ,P?OUT>>
<ROUTINE V-LIE-DOWN ()
<PERFORM ,V?SLEEP>
<RTRUE>>
<ROUTINE V-LISTEN ()
<TELL "At the moment,">
<ARTICLE ,PRSO T>
<TELL " makes no sound." CR>>
<ROUTINE V-LOCK ()
<TELL <PICK-ONE ,YUKS> CR>>
<ROUTINE V-LOOK ()
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS T>)>>
<ROUTINE V-LOOK-BEHIND ()
<TELL "There is nothing behind">
<ARTICLE ,PRSO T>
<TELL "." CR>>
<ROUTINE V-LOOK-DOWN ()
<COND (<AND <NOT ,LIT>
<NOT ,BLORTED>>
<TOO-DARK>)
(<EQUAL? ,PRSO ,ROOMS>
<PERFORM ,V?EXAMINE ,GROUND>
<RTRUE>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "There is nothing special to be seen." CR>)
(<FSET? ,PRSO ,SURFACEBIT>
<COND (<FIRST? ,PRSO>
<PRINT-CONT ,PRSO>)
(T
<TELL "There is nothing on">
<ARTICLE ,PRSO T>
<TELL "." CR>)>)
(<FSET? ,PRSO ,DOORBIT>
<TELL "All you can tell is that">
<COND (<FSET? ,PRSO ,OPENBIT>
<ARTICLE ,PRSO T>
<TELL " is open.">)
(T
<ARTICLE ,PRSO T>
<TELL " is closed.">)>
<CRLF>)
(<FSET? ,PRSO ,SCROLLBIT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<EQUAL? ,PRSO <LOC ,PROTAGONIST>>
<MOVE ,PROTAGONIST ,ROOMS>
<COND (<FIRST? ,PRSO>
<PRINT-CONT ,PRSO>)
(T
<TELL "It's empty (not counting you)." CR>)>
<MOVE ,PROTAGONIST ,PRSO>)
(<SEE-INSIDE? ,PRSO>
<COND (<FIRST? ,PRSO>
<PRINT-CONT ,PRSO>)
(T
<TELL "It's empty." CR>)>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FIRST? ,PRSO>>
<PERFORM ,V?OPEN ,PRSO>
<RTRUE>)
(T
<TELL "It seems that">
<ARTICLE ,PRSO T>
<TELL " is closed." CR>)>)
(T
<TELL "You can't look inside">
<ARTICLE ,PRSO>
<TELL "." CR>)>>
<ROUTINE V-LOOK-UNDER ()
<COND (<HELD? ,PRSO>
<TELL "You're ">
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "wear">)
(T
<TELL "hold">)>
<TELL "ing it!" CR>)
(T
<TELL "There is nothing but ">
<COND (<EQUAL? ,HERE ,LAGOON-FLOOR>
<TELL "sand">)
(T
<TELL "dust">)>
<TELL " there." CR>)>>
<ROUTINE V-LOWER ()
<V-RAISE>>
<ROUTINE V-LOWER-INTO ()
<V-RAISE>>
<ROUTINE V-MELT ()
<TELL "I'm not sure that">
<ARTICLE ,PRSO>
<TELL " can be melted." CR>>
<ROUTINE V-MOVE ()
<COND (<HELD? ,PRSO>
<TELL "Why juggle objects?" CR>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL "Moving">
<ARTICLE ,PRSO T>
<TELL " reveals nothing." CR>)
(T
<TELL "You can't move">
<ARTICLE ,PRSO T>
<TELL "." CR>)>>
<ROUTINE V-MUNG ()
<HACK-HACK "Trying to break">>
<ROUTINE PRE-OPEN ()
<COND (,FWEEPED
<BATTY>)>>
<ROUTINE V-OPEN ("AUX" F STR)
<COND (<FSET? ,PRSO ,SCROLLBIT>
<TELL-ME-HOW>)
(<EQUAL? ,PRSO ,ACTORBIT>
<TELL "Huh?" CR>)
(<AND <FSET? ,PRSO ,VIALBIT>
<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
<FIRST? ,PRSO>>
<REMOVE <FIRST? ,PRSO>>
<TELL
"As you open the vial it fills with water, washing away the potion. A moment
later a fish swims by, acting very strangely." CR>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY-OPEN>)
(T
<FSET ,PRSO ,OPENBIT>
<TELL "Okay,">
<ARTICLE ,PRSO T>
<TELL " is now open." CR>)>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY-OPEN>)
(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>>
<SET STR <GETP .F ,P?FDESC>>>
<TELL "Okay,">
<ARTICLE ,PRSO T>
<TELL " is now open." CR>
<TELL .STR CR>)
(T
<TELL "Opening">
<ARTICLE ,PRSO T>
<TELL " reveals ">
<PRINT-CONTENTS ,PRSO>
<TELL "." CR>)>)>)
(T
<TELL-ME-HOW>)>>
<ROUTINE V-PAY ()
<COND (<NOT ,PRSI>
<COND (<EQUAL? ,PRSO ,ZORKMID>
<SETG PRSI <FIND-IN ,HERE ,ACTORBIT>>
<COND (,PRSI
<PERFORM ,V?GIVE ,PRSO ,PRSI>
<RTRUE>)
(T
<TELL "There's no one here to pay." CR>
<RTRUE>)>)
(<HELD? ,ZORKMID>
<SETG PRSI ,ZORKMID>)
(T
<TELL "Pay with what?" CR>
<RTRUE>)>)>
<COND (<EQUAL? ,PRSI ,ZORKMID>
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>)
(T
<WITH???>)>>
<ROUTINE V-PICK ()
<TELL "You can't pick that!" CR>>
<ROUTINE V-PLAY ()
<TELL "How peculiar!" CR>>
<ROUTINE V-PLUG ()
<TELL "This has no effect." CR>>
<ROUTINE V-POINT ()
<TELL "It's usually impolite to point." CR>>
<ROUTINE V-POUR ()
<TELL "You can't pour that!" CR>>
<ROUTINE V-PUMP ()
<TELL "It's not clear how." CR>>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing">>
<ROUTINE V-PUSH-TO ()
<TELL "You can't push things to that." CR>>
<ROUTINE PRE-PUT ()
<COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <FSET? ,PRSO ,TAKEBIT>>>
<TELL "Nice try." CR>)>>
<ROUTINE V-PUT ()
<COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,DOORBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<TELL "You can't do that." CR>
<RTRUE>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<THIS-IS-IT ,PRSI>
<TELL "Inspection reveals that">
<ARTICLE ,PRSI T>
<TELL " isn't open." CR>)
(<EQUAL? ,PRSI ,PRSO>
<TELL "How can you do that?" CR>)
(<IN? ,PRSO ,PRSI>
<TELL "I think">
<ARTICLE ,PRSO T>
<TELL " is already in">
<ARTICLE ,PRSI T>
<TELL "." CR>)
(<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<TELL "There's no room." CR>)
(<AND <NOT <HELD? ,PRSO>>
<EQUAL? <ITAKE> ,M-FATAL <>>>
<RTRUE>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>)>>
<ROUTINE V-PUT-BEHIND ()
<TELL "That hiding place is too obvious." CR>>
<ROUTINE V-PUT-ON ()
<COND (<EQUAL? ,PRSI ,ME>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(T
<TELL "There's no good surface on">
<ARTICLE ,PRSI T>
<TELL "." CR>)>>
<ROUTINE V-PUT-UNDER ()
<TELL "You can't put anything under that." CR>>
<ROUTINE V-RAPE ()
<TELL "What a (ahem!) strange idea." CR>>
<ROUTINE V-RAISE ()
<HACK-HACK "Playing in this way with">>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<COND (<OR <NOT <FSET? ,PRSO ,CONTBIT>>
<FSET? ,PRSO ,ACTORBIT>>
<TELL "What a maroon!" CR>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "It's not open." CR>)
(<OR <NOT <SET OBJ <FIRST? ,PRSO>>>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TAKEBIT>>>
<TELL "It's empty." CR>)
(T
<TELL "You reach into">
<ARTICLE ,PRSO T>
<TELL " and feel something." CR>)>>
<ROUTINE PRE-READ ()
<COND (,FWEEPED
<BATTY>)
(<EQUAL? ,PRSO ,SPELL-BOOK>
<RFALSE> ;"special case")
(<AND <FSET? ,PRSO ,SPELLBIT>
<IN? ,PRSO ,SPELL-BOOK>>
<RFALSE> ;"same special case")
(<AND <NOT ,LIT>
<NOT ,BLORTED>>
<TELL "It is impossible to read in the dark." CR>)
(<AND ,PRSI <NOT <FSET? ,PRSI ,TRANSBIT>>>
<TELL "How does one look through">
<ARTICLE ,PRSI>
<TELL "?" CR>)>>
<ROUTINE V-READ ()
<COND (<OR <FSET? ,PRSO ,READBIT>
<FSET? ,PRSO ,SPELLBIT>>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<TELL "How can you read">
<ARTICLE ,PRSO>
<TELL "?" CR>)>>
<ROUTINE V-REPLY ()
<TELL "It is hardly likely that">
<ARTICLE ,PRSO T>
<TELL " is interested." CR>
<STOP>>
<ROUTINE PRE-RESEARCH ()
<COND (<AND <NOT ,PRSI>
<EQUAL? ,HERE ,LIBRARY>>
<SETG PRSI ,ENCYCLOPEDIA>)>
<COND (<EQUAL? ,PRSO ,ROOMS>
<COND (<NOT <NOT ,LIT>
<NOT ,BLORTED>>
<TOO-DARK>
<RTRUE>)>
<COND (<EQUAL? ,HERE ,GLASS-MAZE>
<PERFORM ,V?EXAMINE ,MAZE>
<RTRUE>)
(<FSET? ,HERE ,INSIDEBIT>
<PERFORM ,V?EXAMINE ,CEILING>
<RTRUE>)
(T
<PERFORM ,V?EXAMINE ,SKY>
<RTRUE>)>)
(<AND <NOT ,PRSI>
<OR <EQUAL? ,PRSO ,LOWER-CHUTE ,UPPER-CHUTE ,STAIRS>
<EQUAL? ,PRSO ,CHIMNEY ,FIREPLACE ,FLAG-POLE>
<EQUAL? ,PRSO ,PSEUDO-OBJECT ,ZORKMID-TREE ,TREE>>>
<MAKE-OUT>)
(<AND <NOT ,LIT>
<NOT ,BLORTED>>
<PERFORM ,V?READ ,ENCYCLOPEDIA>
<RTRUE>)
(<NOT ,PRSI>
<TELL "There's no encyclopedia here to look it up in." CR>)
(<NOT <EQUAL? ,PRSI ,ENCYCLOPEDIA>>
<TELL "You can't read about things in">
<ARTICLE ,PRSI>
<TELL "." CR>)
(T
<SETG VOLUME-USED T>
<RFALSE>)>>
<ROUTINE V-RESEARCH ()
<COND (<EQUAL? ,PRSO ,LOBBY ,CELLAR ,STORE-ROOM>
<TELL
"The spot where the entry should be is blank, as though the text
were magically excised or transported to some other location." CR>)
(<EQUAL? ,PRSO ,COAL-MINE-1>
<TELL
"Entharion the Wise united many warring tribes to form the kingdom of
Quendor. He ruled from Largoneth Castle, near the ancient cities of
Galepath and Mareilon. Our current calendar dates from the first year
of his reign." CR>)
(<EQUAL? ,PRSO, COAL-MINE-2>
<TELL
"Duncanthrax was King of Quendor from 659 GUE through 688 GUE. Known
as the \"Bellicose King\", he extended Quendor's domain, even conquering
lands across the Great Sea (thus forming what his great-great-grandson,
Dimwit Flathead, named the Great Underground Empire). Duncanthrax was
quite eccentric, and his castle, Egreth, was reputed to be located
in the most dangerous and deadly territory in the known lands." CR>)
(<EQUAL? ,PRSO ,COAL-MINE-3>
<TELL
"Lord Dimwit Flathead the Excessive, a descendant of King Duncanthrax, ruled
the Great Underground Empire from 770 GUE until 789 GUE. His accomplishments,
achieved by overtaxing the kingdom, include Flood Control Dam #3 and the
Royal Museum. Extremely vain, he renamed the Great Sea the Flathead Ocean,
and preferred to spend his time in the strange lands that lay across it." CR>)
(<EQUAL? ,PRSO ,SLANTED-ROOM>
<TELL
"The Wizard of Frobozz was once a member of the influential Accardi
chapter of the Enchanter's Guild. He was exiled by Dimwit Flathead after
accidentally turning Flathead's castle into a mountain of fudge." CR>)
(<EQUAL? ,PRSO ,OCEAN-NORTH>
<TELL
"Flood Control Dam #3, a great engineering feat, is the source of the
Frigid River." CR>)
(<EQUAL? ,PRSO ,OCEAN-SOUTH>
<TELL
"The article describes the exhibits of the Royal Museum, which included
the crown jewels and a sandstone & marble maze." CR>)
(<EQUAL? ,PRSO ,SHAFT-BOTTOM>
<TELL
"Largoneth was the castle of Entharion the Wise." CR>)
(<EQUAL? ,PRSO ,END-OF-HIGHWAY>
<TELL
"A short article calls it an ancient city of Quendor." CR>)
(<EQUAL? ,PRSO ,STONE-HUT>
<TELL
"The entry says \"See GREAT UNDERGROUND EMPIRE.\"" CR>)
(<EQUAL? ,PRSO ,ENTRANCE-HALL>
<TELL
"Formerly known as Quendor, the Great Underground Empire reached its height
under King Duncanthrax, began declining under the excessive rule of Dimwit
Flathead, and finally fell in 883 GUE. The area is now called the Land of
Frobozz, after its largest province." CR>)
(<EQUAL? ,PRSO ,CRATER>
<TELL
"The entry says \"See FLATHEAD OCEAN.\"" CR>)
(<EQUAL? ,PRSO ,EDGE-OF-CHASM>
<TELL
"The tiniest of articles mentions that Accardi-By-The-Sea is a village
in the Land of Frobozz." CR>)
(<EQUAL? ,PRSO ,BELBOZ-HIDEOUT>
<TELL
"Miznia is a province in the southlands, mostly jungle." CR>)
(<EQUAL? ,PRSO ,SOOTY-ROOM>
<TELL
"The Frigid River, the mightiest in the Great Underground Empire, runs
from Flood Control Dam #3 to Aragain Falls." CR>)
(<EQUAL? ,PRSO ,DIAL-ROOM>
<TELL
"According to this article, Aragain Falls is the most breathtaking
and awesome waterfall in the known lands. It lies at the end of the
Frigid River, and was a favorite honeymoon spot during the 8th and
9th centuries." CR>)
(<EQUAL? ,PRSO ,BARE-PASSAGE>
<TELL
"Amathradonis was a terrible giant who terrorized Accardi-By-The-Sea for
many centuries. He was finally vanquished by Belboz the Necromancer in
952 GUE." CR>)
(<EQUAL? ,PRSO ,ELBOW-ROOM>
<TELL
"Nymphs are tiny, magical beings. They are known for their exuberance, fondness
for practical jokes, and willingness to perform small tasks. The leading
temporary nymph services agency is the venerable firm Nymph-O-Mania." CR>)
(<EQUAL? ,PRSO ,HALLWAY-2>
<TELL
"Zork is a classic folk myth about a treasure-hunting adventurer who
became a master of magic. It has been translated into novels, theatricals,
giant wall murals ... almost every imaginable medium." CR>)
(<EQUAL? ,PRSO ,TREE-ROOM>
<TELL
"The encyclopedia describes it as one of the southlands, known for its
fine artisans, and a popular vacation spot." CR>)
(<EQUAL? ,PRSO ,HOLLOW>
<TELL
"Antharia an island in the Flathead Ocean, is very prosperous thanks
to its rich marble quarries." CR>)
(<EQUAL? ,PRSO ,WINDING-TUNNEL>
<TELL
"A leading manufacturer of magic scrolls and potions." CR>)
(<EQUAL? ,PRSO ,BEND>
<TELL
"The Kovalli Desert lies beyond the mountains that formed the western
boundary of ancient Quendor. It is an uncrossable wasteland, believed
to stretch to the edge of the world." CR>)
(<EQUAL? ,PRSO ,FOREST-EDGE>
<TELL
"Lonely Mountain is a towering peak to the west of Largoneth Castle." CR>)
(<EQUAL? ,PRSO ,SLIMY-ROOM>
<TELL
"A long article tells that Krill was a powerful warlock who plotted to
overthrow the Circle of Enchanters and enslave this corner of the kingdom.
He almost achieved his goal, but was vanquished by a young Enchanter." CR>)
(<EQUAL? ,PRSO ,RIVER-BED>
<TELL
"The article points out that the Servants Guild is not the most respected
of trade guilds." CR>)
(<EQUAL? ,PRSO ,STAGNANT-POOL>
<TELL
"It is a corrupt and simplified form of Double Fannucci, popular in taverns,
and frequently played for stakes." CR>)
(<EQUAL? ,PRSO ,RUINS>
<TELL
"A complex, thinking man's version of Gabber Tumper, and probably the most
popular game in the world." CR>)
(<EQUAL? ,PRSO ,TOP-OF-FALLS>
<TELL
"The capital and biggest city in Frobozz, and the center of the spell
scroll and infotater industries. The port of Borphee is the busiest on
the Flathead Ocean." CR>)
(<EQUAL? ,PRSO ,TURRET>
<TELL
"The Messengers Guild is among the oldest guilds, and its members are
incredibly dedicated. Their motto is \"Not even really bad precipitation
or very early nightfall will prevent us from completing our route.\"" CR>)
(<EQUAL? ,PRSO ,DUNGEON>
<TELL
"Temporal travel technology, though in existence for many centuries,
is still considered to be experimental by the magic industry. Several
government agencies are currently looking into its potential long-term
effects." CR>)
(<EQUAL? ,PRSO ,HIGHWAY>
<TELL
"The Enchanter's Guild can date its roots to the reign of Entharion, over
900 years ago. Chapters are usually located in small villages, since the
bustle of city life interferes with an Enchanter's work (\"Excuse me, I
locked my keys in my house. Could you please rezrov my door?\"). The most
influential chapter is Accardi Chapter, home of the Circle of Enchanters." CR>)
(<EQUAL? ,PRSO ,STORE>
<TELL
"Gnomes are a race of short, furry people known for their greed and business
acumen. They are often employed as toll and fare collectors, bank tellers,
ticket sellers, and presidents of small software firms." CR>)
(<EQUAL? ,PRSO ,SHAFT-TOP>
<TELL
"Trolls are a race of ferocious, semi-intelligent creatures. They are often
employed as security guards and bouncers." CR>)
(<EQUAL? ,PRSO ,YOUR-QUARTERS>
<TELL
"The leading supplier of designer spell books." CR>)
(<EQUAL? ,PRSO ,FROBAR-QUARTERS>
<TELL
"The head of one chapter of the Enchanters Guild." CR>)
(<EQUAL? ,PRSO ,HELISTAR-QUARTERS>
<TELL
"A village in the northlands." CR>)
(<EQUAL? ,PRSO ,SERVANT-QUARTERS>
<TELL
"According to this article, there are two meanings for Sorcerer. In general,
it refers to a powerful magic-user. More specifically, the term is used
by the Enchanters Guild to denote a senior member of the Circle." CR>)
(<EQUAL? ,PRSO ,APPRENTICE-QUARTERS>
<TELL
"A famous chasm near Accardi-By-The-Sea." CR>)
(<EQUAL? ,PRSO ,OUTSIDE-GLASS-DOOR>
<TELL
"The most prestigious engineering school in the land." CR>)
(T
<TELL "You look in the encyclopedia but find no entry about">
<ARTICLE ,PRSO T>
<TELL "." CR>)>>
<ROUTINE V-RUB ()
<HACK-HACK "Fiddling with">>
<ROUTINE V-SAY ("AUX" V)
<COND (<SET V <FIND-IN ,HERE ,ACTORBIT>>
<TELL "You must address">
<ARTICLE .V T>
<TELL " directly." CR>
<STOP>)
(<EQUAL? <GET ,P-LEXV ,P-CONT> ,W?HELLO>
<SETG QUOTE-FLAG <>>
<RTRUE>)
(T
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<PERFORM ,V?TELL ,ME>
<RTRUE>)>>
<ROUTINE V-SEARCH ()
<COND (,FWEEPED
<BATTY>)
(T
<TELL "You find nothing unusual." CR>)>>
<ROUTINE V-SEND ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Why would you send for">
<ARTICLE ,PRSO T>
<TELL "?" CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE V-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHAKE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Be real." CR>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL "You can't take it; thus, you can't shake it!" CR>)
(T
<TELL "There's no point in shaking that." CR>)>>
<ROUTINE V-SHARPEN ()
<TELL "You'll never sharpen anything with that!" CR>>
<ROUTINE V-SHOOT ()
<TELL "Don't bother applying for a job as an armaments expert." CR>>
<ROUTINE V-SHOW ()
<TELL "I doubt">
<ARTICLE ,PRSI T>
<TELL " is interested." CR>>
<ROUTINE V-SIT ()
<TELL "That would be a waste of time." CR>>
<ROUTINE V-SKIP ()
<TELL "Wasn't that fun?" CR>>
<ROUTINE V-SLEEP ("OPTIONAL" (TOLD? <>))
<COND (,FLYING
<TELL
"You'd better settle down before thinking about settling down." CR>)
(<EQUAL? ,AWAKE -1>
<TELL
"You settle down to sleep, but you really aren't tired, so you
thrash around for a while and then give up." CR>)
(T
<SETG REAL-SPELL-MAX <+ ,REAL-SPELL-MAX 1>>
<SETG SPELL-MAX ,REAL-SPELL-MAX>
<SETG SPELL-ROOM ,SPELL-MAX>
<SETG MOVES <+ ,MOVES 50>>
<SETG LAST-SLEPT ,MOVES>
<SETG LOAD-ALLOWED ,LOAD-MAX>
<SETG FUMBLE-NUMBER 7>
<ENABLE <QUEUE I-TIRED 80>>
<SETG AWAKE -1>
<FORGET-ALL>
<WEAR-OFF-SPELLS>
<COND (<NOT <FSET? ,TWISTED-FOREST ,TOUCHBIT>>
<TELL
"You drift off to sleep and dream of the distant Kovalli Desert. Waves of
heat from the sand make breathing hard, and the bright sunlight burns
against your eyelids. Suddenly you awake -- the Guild Hall is on fire!
Through the thick smoke, you see Belboz standing before you. But no, this
could not be Belboz, his face an unrecognizable mask of hatred, his
outstretched arms dripping with blood.|
|
He who is not Belboz speaks, in a voice filled with malevolence. \"So, you
are the young Enchanter that Belboz thinks so highly of. That senile wizard
thought you would be the one to rescue him from my clutches. I wonder why I
bothered to come at all -- an insect like you poses no threat! Still...\" He
gestures and your surroundings change." CR CR>
<ROB ,PROTAGONIST>
<DISABLE <INT I-TIRED>>
<DISABLE <INT I-HUNGER>>
<DISABLE <INT I-THIRST>>
<WEAR-OFF-SPELLS>
<GOTO ,CHAMBER-OF-LIVING-DEATH>
<RTRUE>)>
<COND (<EQUAL? ,HERE ,RIVER-BED ,STAGNANT-POOL ,TOP-OF-FALLS>
<JIGS-UP
"Just as you doze off, a wall of water smashes over you!">
<RTRUE>)>
<COND (<AND <IN-COAL-MINE?>
,VILSTUED>
<JIGS-UP
"The vilstu potion wears off as you sleep, and you awaken clawing
frantically at your chest.">
<RTRUE>)>
<COND (<IN-COAL-MINE?>
<JIGS-UP
"Before you fall asleep you pass out from the bad air.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,TWISTED-FOREST>
<JIGS-UP
"You awake in the middle of the night to find a hellhound gnawing on you.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,TREE-BRANCH>
<JIGS-UP
"Your eyes are barely closed before the snake reaches you.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,SNAKE-PIT>
<JIGS-UP
"You awake to find snakes and beetles crawling all over you.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,MINE-FIELD>
<JIGS-UP
"Unfortunately, you roll over in the middle of the night. Kaboom!!">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,MEADOW>
<JIGS-UP
"Locusts pick your bones clean while you sleep.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,DRAWBRIDGE>
<TELL
"You are rudely awakened by the collapse of the rotting drawbridge. ">
<DO-WALK ,P?DOWN>
<RTRUE>)>
<COND (<EQUAL? ,HERE ,RIVER-BANK>
<JIGS-UP
"During the night the river bank collapses beneath you, throwing you
into the turbulent waters.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,HOLLOW>
<JIGS-UP
"You have a nightmare about a ferocious dorn beast. When it begins gnawing
on you, you realize that it isn't a dream at all.">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
<JIGS-UP
"Amazing how difficult it is to sleep while swimming (and vice versa).">
<RTRUE>)>
<COND (<EQUAL? ,HERE ,BELBOZ-HIDEOUT>
<TELL
"An unknown amount of time later you awake and look around. ">
<I-BELBOZ-AWAKES>
<RTRUE>)>
<COND (<AND <IN? ,PROTAGONIST ,BED>
<NOT .TOLD?>>
<TELL
"You're not all that tired, but the bed is very comfortable." CR>)
(,RIDE-IN-PROGRESS
<END-RIDE>
<TELL
"Hard to believe that you could fall asleep during such an exciting
ride, but you are pretty tired." CR>)
(T
<TELL
"Ah, sleep! It's been a long day and rest will do you good. You spread
your cloak on the floor and drift off, renewing your powers and
refreshing your mind. Time passes as you snore blissfully." CR>)>
<CRLF>
<MOVE ,PROTAGONIST ,HERE>
<COND (<PROB 50>
<TELL
"You sleep uneventfully, awake refreshed, and rise to your feet." CR>)
(T
<TELL <PICK-ONE ,DREAMS>>
<TELL " You awaken and stand." CR>)>)>>
<ROUTINE V-SMELL ()
<TELL "It smells just like">
<ARTICLE ,PRSO>
<TELL "." CR>>
<ROUTINE V-SPAY ()
<PERFORM ,V?PAY ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SPIN ()
<TELL "You can't spin that!" CR>>
<ROUTINE V-SPRAY ()
<COND (<NOT ,PRSI>
<COND (<EQUAL? ,PRSO ,GRUE-REPELLENT>
<TELL "Specify who or what you want to spray." CR>)
(<HELD? ,GRUE-REPELLENT>
<PERFORM ,V?SPRAY ,GRUE-REPELLENT ,PRSO>
<RTRUE>)
(T
<TELL "You don't have anything that sprays!" CR>)>)
(T
<V-SQUEEZE>)>>
<ROUTINE V-SQUEEZE ()
<TELL "How singularly useless." CR>>
<ROUTINE PRE-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW ()
<V-SGIVE>>
<ROUTINE V-SSPRAY ()
<PERFORM ,V?SPRAY ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-STAND ()
<COND (<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(,FLYING
<WHILE-FLYING>)
(T
<TELL "You are already standing." CR>)>>
<ROUTINE V-STAND-ON ()
<V-SIT>>
<ROUTINE V-STRIKE ()
<PERFORM ,V?ATTACK ,PRSO>
<RTRUE>>
<ROUTINE V-SWING ()
<COND (<NOT ,PRSI>
<TELL "Whoosh!" CR>)
(T
<PERFORM ,V?ATTACK ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-SWIM ()
<COND (,PRSO
<PERFORM ,V?THROUGH ,PRSO>
<RTRUE>)
(<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
<LOOK-AROUND-YOU>)
(<EQUAL? ,HERE ,COVE ,OCEAN-NORTH ,OCEAN-SOUTH>
<PERFORM ,V?THROUGH ,LAGOON-OBJECT>
<RTRUE>)
(<EQUAL? ,HERE ,RIVER-BANK>
<DO-WALK ,P?DOWN>)
(<EQUAL? ,HERE ,MOUTH-OF-RIVER>
<DO-WALK ,P?EAST>)
(<EQUAL? ,HERE ,HIDDEN-CAVE>
<DO-WALK ,P?OUT>)
(<EQUAL? ,HERE ,DRAWBRIDGE>
<DO-WALK ,P?DOWN>)
(<EQUAL? ,HERE ,STAGNANT-POOL>
<DO-WALK ,P?NW>)
(T
<TELL "There's nothing to swim in!" CR>)>>
<ROUTINE PRE-TAKE ()
<COND (,FWEEPED
<BATTY>)
(<IN? ,PRSO ,PROTAGONIST>
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "You are already wearing it." CR>)
(T
<TELL "You already have it." CR>)>)
(<AND <FSET? ,PRSO ,SPELLBIT>
<FSET? <LOC ,PRSO> ,SCROLLBIT>
<ACCESSIBLE? <LOC ,PRSO>>>
<PERFORM ,V?TAKE <LOC ,PRSO>>
<RTRUE>)
(<AND <FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL "You can't reach that." CR>
<RTRUE>)
(,PRSI
<COND (<EQUAL? ,PRSO ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<AND <NOT <EQUAL? ,PRSI <LOC ,PRSO>>>
<NOT <EQUAL? ,PRSI ,BELBOZ-DESK>>>
<TELL "But">
<ARTICLE ,PRSO T>
<TELL " isn't in">
<ARTICLE ,PRSI T>
<TELL "." CR>)
(T
<SETG PRSI <>>
<RFALSE>)>)
(<EQUAL? ,PRSO <LOC ,PROTAGONIST>>
<TELL "You are in it!" CR>)>>
<ROUTINE V-TAKE ()
<COND (<EQUAL? <ITAKE> T>
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "You are now wearing">
<ARTICLE ,PRSO T>
<TELL "." CR>)
(,FLYING
<TELL "You swoop low and pick it up." CR>)
(T
<COND (<AND <EQUAL? ,PRSO ,ROPE>
<OR ,ROPE-PLACED ,ROPE-IN-LOWER-CHUTE>>
<SETG ROPE-PLACED <>>
<SETG ROPE-IN-LOWER-CHUTE <>>
<FCLEAR ,BEAM ,TRYTAKEBIT>
<FCLEAR ,ROPE ,TRYTAKEBIT>)>
<TELL "Taken." CR>)>)>>
<ROUTINE V-TAKE-OFF ()
<COND (<EQUAL? ,PRSO <LOC ,PROTAGONIST>> ;"TAKE OFF also = GET OFF"
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(<AND <HELD? ,PRSO>
<FSET? ,PRSO ,WEARBIT>>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(T
<TELL "You're not wearing that!" CR>)>>
<ROUTINE V-TELL ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (,P-CONT
<SETG WINNER ,PRSO>
<SETG HERE <LOC ,WINNER>>)
(<AND <EQUAL? ,PRSO ,GNOME>
,GNOME-SLEEPING>
<POOR-LISTENERS>)
(T
<TELL "Hmmm...">
<ARTICLE ,PRSO T>
<TELL
" looks at you expectantly, as though he thought
you were about to talk." CR>)>)
(<EQUAL? ,PRSO ,PARROT>
<TELL
"Although the parrot is a marvelous imitator of human speech, it is
incapable of understanding or initiating any." CR>
<STOP>)
(T
<TELL "You can't talk to">
<ARTICLE ,PRSO>
<TELL "!" CR>
<STOP>)>>
<ROUTINE V-THANK ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "You do so, but">
<ARTICLE ,PRSO T>
<TELL " seems less than overjoyed." CR>)
(T
<TELL
"The Circle will revoke your certificate if you keep this up." CR>)>>
<ROUTINE V-THROUGH ()
<COND (<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>
<RTRUE>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL "You hit your head against">
<ARTICLE ,PRSO T>
<TELL " as you attempt this feat." CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "That would involve quite a contortion!" CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE V-THROW ()
<COND (<IDROP>
<COND (<AND <EQUAL? ,HERE ,COAL-BIN-ROOM ,DIAL-ROOM>
<L? <GETP ,PRSO ,P?SIZE> 20>>
<BURIED-IN-COAL "throw">)
(T
<COND (<EQUAL? ,HERE ,HAUNTED-HOUSE>
<MOVE ,PRSO ,DIAL>)>
<TELL "Thrown." CR>)>)>>
<ROUTINE V-THROW-OFF ()
<TELL "You can't throw anything off that!" CR>>
<ROUTINE V-TIE ()
<TELL "You can't tie">
<ARTICLE ,PRSO T>
<TELL " to that." CR>>
<ROUTINE V-TIE-UP ()
<TELL "You could certainly never tie it with that!" CR>>
<ROUTINE V-TIME ("AUX" X)
<SET X <- ,MOVES ,LAST-SLEPT>>
<TELL "It's ">
<COND (<L? .X 15>
<TELL "early morning">)
(<L? .X 30>
<TELL "mid-morning">)
(<L? .X 50>
<TELL "mid-day">)
(<L? .X 65>
<TELL "late afternoon">)
(<L? .X 80>
<TELL "early evening">)
(T
<TELL "late evening">)>
<TELL "." CR>>
<ROUTINE V-TORTURE ()
<COND (<NOT <EQUAL? ,HERE ,TORTURE-CHAMBER>>
<TELL "There are no torture devices here!" CR>)
(<EQUAL? ,PRSO ,ME>
<JIGS-UP "Ooops! You overdid it a little.">)
(T
<TELL "Despite your best effort,">
<ARTICLE ,PRSO T>
<TELL " fails to divulge any useful information." 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-WALK ("AUX" PT PTS STR OBJ RM)
;<COND (<AND ,TRY-FLY <PRE-FLY>>
<RTRUE>)>
<COND (<NOT ,P-WALK-DIR>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(<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
<COND (<OR <EQUAL? ,HERE ,GLASS-MAZE>
<EQUAL? ,HERE ,PARK-ENTRANCE>>
<RFALSE>)
(T
<RFATAL>)>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<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>
<THIS-IS-IT .OBJ>
<RFATAL>)
(T
<TELL "The " D .OBJ " is closed." CR>
<THIS-IS-IT .OBJ>
<RFATAL>)>)>)
(<AND ,FLYING
<EQUAL? ,PRSO ,P?UP>>
<TELL "You're already flying as high as you can." CR>
<RFATAL>)
(T
<CANT-GO>
<RFATAL>)>>
;<ROUTINE PRE-FLY ()
<COND (,FLYING
<RFALSE>)
(,PRSO
<TELL "What a loon!" CR>
<RTRUE>)
(T
<TELL "You are probably a loon, although you can't fly." CR>)>>
<ROUTINE V-WALK-AROUND ()
<TELL "Please use compass directions for movement." CR>>
<ROUTINE V-WALK-TO ()
<COND (<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<TELL "It's here!" CR>)
(T
<V-WALK-AROUND>)>>
<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-WAIT-FOR ()
<COND (<EQUAL? <LOC ,PRSO> ,HERE ,PROTAGONIST>
<TELL "It's already here!" CR>)
(T
<TELL "You will probably be waiting quite a while." CR>)>>
<ROUTINE V-WAVE ()
<HACK-HACK "Waving">>
<ROUTINE V-WAVE-AT ()
<TELL "Despite your friendly nature,">
<ARTICLE ,PRSO T>
<TELL " isn't likely to respond." CR>>
<ROUTINE V-WAX ()
<COND (<AND <NOT ,PRSI>
<VISIBLE? ,WAXER>>
<SETG PRSI ,WAXER>)
(<NOT ,PRSI>
<TELL "With what?" CR>
<RTRUE>)>
<COND (<AND <EQUAL? ,PRSI ,WAXER>
<EQUAL? ,PRSO ,GROUND>>
<PERFORM ,V?LAMP-ON ,WAXER>
<RTRUE>)
(T
<WITH???>)>>
<ROUTINE V-WEAR ()
<COND (<NOT <FSET? ,PRSO ,WEARBIT>>
<TELL "You can't wear">
<ARTICLE ,PRSO T>
<TELL "." CR>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-WHAT ()
<TELL "Try reading an encyclopedia." CR>>
<ROUTINE V-WHERE ()
<COND (<EQUAL? ,PRSO ,RIVER-BED>
<TELL "Out doing their daily errands, probably." CR>)
(T
<V-FIND T>)>>
<ROUTINE V-WHO ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?WHAT ,PRSO>
<RTRUE>)
(<OR <EQUAL? ,PRSO ,COAL-MINE-1 ,COAL-MINE-2 ,COAL-MINE-3>
<EQUAL? ,PRSO ,SLANTED-ROOM ,BARE-PASSAGE ,SLIMY-ROOM>
<EQUAL? ,PRSO ,RIVER-BED ,TURRET ,FROBAR-QUARTERS>>
<PERFORM ,V?WHAT ,PRSO>
<RTRUE>)
(T
<TELL "That's not a person!" CR>)>>
<ROUTINE V-YELL ()
<TELL "Aarrrrrgggggggghhhhhhhhhhh!" CR>
<COND (<AND <EQUAL? ,HERE ,TOLL-GATE>
,GNOME-SLEEPING
<OR ,LIT ,BLORTED>>
<CRLF>
<PERFORM ,V?ALARM ,GNOME>
<RTRUE>)>>
;"subtitle magic-related verbs"
<ROUTINE PRE-CAST ("AUX" MEM? SPELL SCROLL)
<SET SPELL
<COND (<VERB? GNUSTO> ,GNUSTO-SPELL)
(<VERB? FROTZ> ,FROTZ-SPELL)
(<VERB? REZROV> ,REZROV-SPELL)
(<VERB? IZYUK> ,IZYUK-SPELL)
(<VERB? AIMFIZ> ,AIMFIZ-SPELL)
(<VERB? FWEEP> ,FWEEP-SPELL)
(<VERB? SWANZO> ,SWANZO-SPELL)
(<VERB? GOLMAC> ,GOLMAC-SPELL)
(<VERB? VARDIK> ,VARDIK-SPELL)
(<VERB? PULVER> ,PULVER-SPELL)
(<VERB? MEEF> ,MEEF-SPELL)
(<VERB? VEZZA> ,VEZZA-SPELL)
(<VERB? GASPAR> ,GASPAR-SPELL)
(<VERB? YOMIN> ,YOMIN-SPELL)
(<VERB? YONK> ,YONK-SPELL)
(<VERB? MALYON> ,MALYON-SPELL)
(T
<TELL "Bug #55" CR>
<RTRUE>)>>
<COND (,PERFORMING-SPELL
<SETG PERFORMING-SPELL <>>
<RFALSE>)>
<COND (<OR <EQUAL? .SPELL ,PRSO>
<AND <EQUAL? <LOC .SPELL> ,PRSO>
<NOT <EQUAL? <LOC .SPELL> ,SPELL-BOOK>>>>
<TELL
"As you must remember from Thaumaturgy 101, you cannot cast a spell upon
itself, or upon the scroll it is written on." CR>
<RTRUE>)
(<FSET? <LOC .SPELL> ,MUNGBIT>
<TELL "The spell no longer readable." CR>
<RTRUE>)
(<FSET? <LOC .SPELL> ,SCROLLBIT>
<SET SCROLL <LOC .SPELL>>
<COND (<IN? .SCROLL ,PROTAGONIST>
<COND (<AND <EQUAL? .SPELL ,YONK-SPELL>
<NOT <VISIBLE? ,PRSO>>>
<RFALSE>)>
<MOVE .SCROLL ,DIAL> ;"in case moby-search wants it"
<TELL
"As you cast the spell, the " D .SCROLL " vanishes!" CR>
<PUTP .SPELL ,P?COUNT 1>)
(<OR <FSET? .SPELL ,TOUCHBIT>
<IN? .SCROLL ,HERE>>
<TELL
"You don't have the " D .SPELL " memorized, nor do you have the scroll
on which it is written." CR>
<RTRUE>)
(T
<TELL
"The " D .SPELL " is not committed to memory, and you haven't seen any scroll
on which it is written." CR>
<RTRUE>)>)>
<SET MEM? <GETP .SPELL ,P?COUNT>>
<COND (,FWEEPED
<TELL
"When you attempt to incant the " D .SPELL ", all that comes out is
a high-pitched squeak!" CR>)
(<EQUAL? .SPELL ,GNUSTO-SPELL ,REZROV-SPELL ,FROTZ-SPELL>
<RFALSE> ;"Always memorized")
(<EQUAL? .MEM? 0>
<TELL
"You don't have the " D .SPELL " committed to memory!" CR>
<THIS-IS-IT .SPELL>
<RTRUE>)
(T
<PUTP .SPELL ,P?COUNT <- .MEM? 1>>
<SETG SPELL-ROOM <+ ,SPELL-ROOM 1>>
<RFALSE>)>>
<GLOBAL PERFORMING-SPELL <>>
<ROUTINE V-CAST ("AUX" VRB)
<COND (<NOT <FSET? ,PRSO ,SPELLBIT>>
<TELL
"You might as well be casting with a fly rod, as to try to cast">
<ARTICLE ,PRSO>
<TELL "." CR>)
(T
<SET VRB
<COND (<EQUAL? ,PRSO ,GNUSTO-SPELL> ,V?GNUSTO)
(<EQUAL? ,PRSO ,FROTZ-SPELL> ,V?FROTZ)
(<EQUAL? ,PRSO ,REZROV-SPELL> ,V?REZROV)
(<EQUAL? ,PRSO ,IZYUK-SPELL> ,V?IZYUK)
(<EQUAL? ,PRSO ,AIMFIZ-SPELL> ,V?AIMFIZ)
(<EQUAL? ,PRSO ,FWEEP-SPELL> ,V?FWEEP)
(<EQUAL? ,PRSO ,SWANZO-SPELL> ,V?SWANZO)
(<EQUAL? ,PRSO ,GOLMAC-SPELL> ,V?GOLMAC)
(<EQUAL? ,PRSO ,VARDIK-SPELL> ,V?VARDIK)
(<EQUAL? ,PRSO ,PULVER-SPELL> ,V?PULVER)
(<EQUAL? ,PRSO ,MEEF-SPELL> ,V?MEEF)
(<EQUAL? ,PRSO ,VEZZA-SPELL> ,V?VEZZA)
(<EQUAL? ,PRSO ,GASPAR-SPELL> ,V?GASPAR)
(<EQUAL? ,PRSO ,YOMIN-SPELL> ,V?YOMIN)
(<EQUAL? ,PRSO ,YONK-SPELL> ,V?YONK)
(<EQUAL? ,PRSO ,MALYON-SPELL> ,V?MALYON)
(T
<TELL "Bug #90" CR>
<RTRUE>)>>
<COND (<NOT ,PRSI>
<TELL
"You might as well be casting it away as not cast it on something." CR>)
(T
<PERFORM .VRB ,PRSI>)>
<RTRUE>)>>
<GLOBAL ALL-SPELLS
<PLTABLE
GNUSTO-SPELL
FROTZ-SPELL
REZROV-SPELL
IZYUK-SPELL
AIMFIZ-SPELL
FWEEP-SPELL
SWANZO-SPELL
GOLMAC-SPELL
VARDIK-SPELL
PULVER-SPELL
MEEF-SPELL
VEZZA-SPELL
GASPAR-SPELL
YOMIN-SPELL
YONK-SPELL
MALYON-SPELL>>
<ROUTINE V-SPELLS ("AUX" (CNT <GET ,ALL-SPELLS 0>) S (ANY <>) (OS <>) TMP)
<TELL
"The gnusto, rezrov, and frotz spells are yours forever. Other than that,
you have ">
<REPEAT ()
<COND (<EQUAL? .CNT 0>
<COND (.OS
<SPELL-PRINT .OS .ANY T>
<SET ANY T>)>
<COND (<NOT .ANY>
<TELL "no spells memorized.">)
(T
<TELL " committed to memory.">)>
<CRLF>
<RTRUE>)>
<COND (<SET TMP <SPELL-TIMES <GET ,ALL-SPELLS .CNT>>>
<COND (.OS
<SPELL-PRINT .OS .ANY>
<SET ANY T>)>
<SET OS .TMP>)>
<SET CNT <- .CNT 1>>>>
<ROUTINE SPELL-PRINT (S ANY "OPTIONAL" (PAND? <>) "AUX" X)
<COND (.ANY
<COND (.PAND?
<TELL " and ">)
(T
<TELL ", ">)>)>
<TELL "the " D .S " ">
<SET X <- <GETP .S ,P?COUNT> 1>>
<COND (<G? .X 4>
<SET X 4>)> ;"prevents ,COUNTERS table overflow"
<TELL <GET ,COUNTERS .X>>
.S>
<ROUTINE SPELL-TIMES (S)
<COND (<G? <GETP .S ,P?COUNT> 0>
<COND (<IN? .S ,SPELL-BOOK> .S)
(<AND <==? .S ,AIMFIZ-SPELL>
<NOT <IN? ,AIMFIZ-SPELL ,AIMFIZ-SCROLL>>>
.S)
(<AND <==? .S ,YONK-SPELL>
<NOT <IN? ,YONK-SPELL ,YONK-SCROLL>>>
.S)>)>>
<GLOBAL COUNTERS ;"should be as many entries as ,SPELL-MAX"
<PTABLE "once"
"twice"
"thrice"
"four times"
"many times">>
<ROUTINE V-LEARN ()
<TELL "You don't have that spell, if indeed that is a spell." CR>>
<ROUTINE V-AIMFIZ ()
<COND (<EQUAL? ,PRSO ,COAL-MINE-1 ,COAL-MINE-2 ,COAL-MINE-3>
<JIGS-UP
"You materialize in a royal tomb somewhere. Before being devoured by rats,
you notice a well-decayed corpse nearby.">)
(<EQUAL? ,PRSO ,SLANTED-ROOM>
<JIGS-UP
"You appear in a strange room. Framed diplomas and wand racks adorn the
walls, and a stuffed owl is perched above a trophy case. An incredibly
old man with a long white beard spots you. \"Fertilize!\" he cries,
pointing a slightly bent wand at you. You turn into a pile of bat guano,
a fitting end for a trespasser.">)
(<EQUAL? ,PRSO ,SLIMY-ROOM>
<TELL "You join Krill in oblivion." CR>
<FINISH>)
(<EQUAL? ,PRSO ,RIVER-BED>
<JIGS-UP
"You appear in the woods behind the Guild Hall. The servants (who should
be doing their daily chores) are lazing about, drinking ale and betting
on games of Gabber Tumper. To prevent you from reporting their goofing off,
they cut your throat. You just can't get good help these days.">)
(<EQUAL? ,PRSO ,TURRET>
<JIGS-UP
"You appear on the lawn of a large estate. A domesticated wolf, foaming
saliva, is chasing the messenger across the lawn. With graceful agility, the
messenger jumps aside, and the wolf sinks its rabid teeth into you instead.">)
(<EQUAL? ,PRSO ,FROBAR-QUARTERS>
<JIGS-UP
"You materialize in the middle of a powerful thaumaturgical experiment. A
Guildmaster stands nearby, but before he can react you have turned into
a large and rather ugly mushroom.">)
(<EQUAL? ,PRSO ,SERVANT-QUARTERS>
<SETG PERFORMING-SPELL T>
<PERFORM ,V?AIMFIZ ,ME>
<RTRUE>)
(T
<V-SWANZO>)>>
<ROUTINE V-AIMFIZ-TO ()
<COND (<NOT <EQUAL? ,PRSO ,ME>>
<TELL "This spell only has an effect on the caster." CR>)
(T
<TELL "You should just say \"aimfiz " D ,PRSI "\"." CR>)>>
<ROUTINE V-GASPAR ()
<COND (<NOT ,PRSO>
<SETG PERFORMING-SPELL T>
<PERFORM ,V?GASPAR ,ME>
<RTRUE>)>
<TELL "How nice --">
<ARTICLE ,PRSO T>
<TELL " is now provided for in the event of ">
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "his">)
(T
<TELL "its">)>
<TELL " death." CR>>
<GLOBAL BOOK-GLOWS "Your spell book begins to glow softly. ">
<ROUTINE V-GNUSTO ("AUX" SCROLL)
<COND (<NOT <IN? ,SPELL-BOOK ,PROTAGONIST>>
<TELL
"The spell quests around in your hands, looking for your spell book, and
not finding it, fades reluctantly." CR>)
(<NOT <FSET? ,PRSO ,SPELLBIT>>
<TELL "You can't inscribe">
<ARTICLE ,PRSO>
<TELL " in your spell book!" CR>)
(<IN? ,PRSO ,SPELL-BOOK>
<TELL
"You already have that spell inscribed in your book!" CR>)
(<FSET? <LOC ,PRSO> ,MUNGBIT>
<TELL "The spell no longer readable." CR>)
(T
<SET SCROLL <LOC ,PRSO>>
<COND (<AND <FSET? .SCROLL ,SCROLLBIT>
<HELD? .SCROLL>>
<COND (<EQUAL? ,PRSO ,AIMFIZ-SPELL ,YONK-SPELL>
<TELL ,BOOK-GLOWS
"In a spectacular effort of magic, the powers of the gnusto spell
attempt to copy the " D ,PRSO " into your book, but the spell is
too long, too complicated, and too powerful. The glow fades, but
fortunately the " D .SCROLL " remains intact." CR>)
(T
<MOVE .SCROLL ,DIAL>
<MOVE ,PRSO ,SPELL-BOOK>
<PUTP ,PRSO ,P?COUNT 0>
<TELL ,BOOK-GLOWS
"Slowly, ornately, the words of the " D ,PRSO " are inscribed, glowing even
more brightly than the book itself. The book's brightness fades, ">
<COND (<FSET? ,SPELL-BOOK ,MUNGBIT>
<TELL
"and the spell is now illegible in the damp, ruined book. T">)
(T
<TELL
"but the spell remains! However, t">)>
<TELL
"he scroll on which it was written vanishes as the last word is copied." CR>)>)
(T
<TELL
"You must have a legible spell scroll in your hands before the gnusto spell
will work on it." CR>)>)>>
<ROUTINE V-FROTZ ("AUX" OLIT) ;"light"
<SET OLIT ,LIT>
<COND (<FSET? ,PRSO ,ONBIT>
<TELL "Have you forgotten that you already frotzed">
<ARTICLE ,PRSO T>
<TELL "?" CR>)
(<OR <FSET? ,PRSO ,TAKEBIT>
<FSET? ,PRSO ,ACTORBIT>>
<FSET ,PRSO ,ONBIT>
<COND (<NOT <EQUAL? ,PRSO ,BAT-GUANO ,FWEEP-SCROLL>>
<FSET ,PRSO ,TOUCHBIT>)>
<TELL "There is an almost blinding flash of light as">
<ARTICLE ,PRSO T>
<TELL
" begins to glow! It slowly fades to a less painful level, but">
<ARTICLE ,PRSO T>
<TELL " is now quite usable as a light source.">
<COND (<OR <EQUAL? ,PRSO ,PARK-GNOME>
<AND <EQUAL? ,PRSO ,GNOME>
<NOT ,GNOME-SLEEPING>>>
<JIGS-UP
" The gnome looks livid. \"Very funny! Have you seen this one?\" He incants
a brief spell, and you turn into a bowl of petunias (which eventually wilt).">
<RTRUE>)>
<CRLF>
<SETG LIT <LIT? ,HERE>>
<COND (<AND <NOT .OLIT> ,LIT>
<CRLF>
<V-LOOK>)>
<RTRUE>)
(T
<V-SWANZO>)>>
<ROUTINE V-FWEEP ("AUX" X N) ;"bat"
<COND (<OR <NOT ,PRSO>
<EQUAL? ,PRSO ,ME>>
<COND (,RIDE-IN-PROGRESS
<FLY-DURING-RIDE>
<RTRUE>)
(<EQUAL? ,HERE ,LAGOON ,LAGOON-FLOOR>
<JIGS-UP
"Unfortunately, bats make poor swimmers. Glug, glug.">
<RTRUE>)>
<SETG FWEEPED T>
<SETG FLYING T>
<ENABLE <QUEUE I-UNFWEEP 15>>
<DISABLE <INT I-FLY>>
<SET X <FIRST? ,PROTAGONIST>>
<TELL
"With keen disappointment, you note that nothing has changed. Then, you
slowly realize that you are black, have two wing-like appendages, and are
flying a few feet above the ground.">
<COND (.X
<TELL
" Understandably, you dropped everything you were carrying.">)>
<COND (<EQUAL? ,HERE ,GLASS-MAZE>
<RADAR-VIEW>)>
<CRLF>
<REPEAT ()
<COND (.X
<SET N <NEXT? .X>>
<MOVE .X ,HERE>
<SET X .N>)
(T
<RETURN>)>>)
(T
<TELL "The fweep spell can be cast only on yourself." CR>)>>
<ROUTINE V-IZYUK ()
<COND (<AND ,FLYING
<EQUAL? ,PRSO ,ME>>
<TELL "You are already flying." CR>)
(<OR <NOT ,PRSO>
<EQUAL? ,PRSO ,ME>>
<COND (,RIDE-IN-PROGRESS
<FLY-DURING-RIDE>
<RTRUE>)>
<COND (<EQUAL? ,HERE ,LAGOON-FLOOR>
<TELL "Gloooop! ">)>
<TELL "You are now floating serenely in midair." CR>
<COND (<EQUAL? ,HERE ,LAGOON-FLOOR>
<DO-WALK ,P?UP>)>
<SETG FLYING T>
<ENABLE <QUEUE I-FLY 3>>
<MOVE ,PROTAGONIST ,HERE>)
(<EQUAL? ,PRSO ,FLAG>
<V-FLY>)
(T
<PERFORM ,V?FLY ,PRSO>
<RTRUE>)>>
<ROUTINE FLY-DURING-RIDE ()
<TELL "You fly out of the ">
<COND (<EQUAL? ,HERE ,FLUME>
<TELL "log boat">)
(T
<TELL "car">)>
<TELL
", and immediately splat into one of the structural cross-beams of the ">
<COND (<EQUAL? ,HERE ,FLUME>
<TELL "flume">)
(T
<TELL "roller coaster">)>
<JIGS-UP ".">>
<ROUTINE V-MALYON ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Wow! It looks like">
<ARTICLE ,PRSO T>
<TELL " is now alive! What a magician you are!" CR>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL "As you complete the spell,">
<ARTICLE ,PRSO T>
<TELL
" comes alive! It blinks, dances a little jig,
and a moment later returns to normal." CR>)
(T
<V-SWANZO>)>>
<ROUTINE V-MEEF ()
<V-SWANZO>>
<ROUTINE V-PULVER () ;"evaporate"
<COND (<OR <EQUAL? ,PRSO ,FOOBLE-POTION ,FLAXO-POTION ,BLORT-POTION>
<EQUAL? ,PRSO ,VILSTU-POTION ,BERZIO-POTION>>
<MOVE ,PRSO ,DIAL>
<TELL "The potion vanishes." CR>)
(T
<TELL "After completing the spell,">
<ARTICLE ,PRSO T>
<TELL " remains unchanged. It must not be a liquid." CR>)>>
<ROUTINE V-REZROV () ;"open"
<COND (<OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>>
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY-OPEN>)
(<NOT <FSET? ,PRSO ,SCROLLBIT>>
<TELL "Silently,">
<ARTICLE ,PRSO T>
<TELL " swings open">
<COND (<FIRST? ,PRSO>
<TELL ", revealing ">
<PRINT-CONTENTS ,PRSO>)>
<TELL
". Like swatting a fly with a sledge hammer, if you ask me." CR>
<FSET ,PRSO ,OPENBIT>)
(T
<V-SWANZO>)>)
(T
<V-SWANZO>)>>
<ROUTINE V-SWANZO () ;"exorcise"
<TELL
"Although you complete the spell, nothing seems to have happened">
<COND (<VERB? AIMFIZ>
<TELL ". Perhaps this spell only works on people">)>
<TELL "." CRLF>>
<ROUTINE V-GOLMAC () ;"time travel"
<COND (<AND <FSET? ,PRSO ,ACTORBIT>
<NOT <EQUAL? ,PRSO ,BELBOZ ,JEEARR>>>
<MOVE ,PRSO ,DIAL>
<TELL "With a puff of smoke,">
<ARTICLE ,PRSO T>
<TELL " vanishes!" CR>)
(T
<TELL "There is a puff of smoke, but when it clears">
<ARTICLE ,PRSO T>
<TELL " is still there." CR>)>>
<ROUTINE V-VARDIK () ;"mind shield"
<TELL "The mind of">
<ARTICLE ,PRSO T>
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL " (if it has one)">)>
<TELL " is now shielded against evil spirits." CR>>
<ROUTINE V-VEZZA ("AUX" VISION) ;"clairvoyance"
<COND (<OR <NOT ,PRSO>
<EQUAL? ,PRSO ,ME>>
<TELL "You see ">
<REPEAT ()
<SET VISION <GET ,VEZZAS <RANDOM 10>>>
<COND (<NOT <EQUAL? .VISION 0>>
<RETURN>)>>
<TELL .VISION>
<TELL " A moment later, the vision fades." CR>)
(T
<TELL "Thanks to you,">
<ARTICLE ,PRSO T>
<TELL " is given a brilliant but momentary glimpse of ">
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "his">)
(T
<TELL "its">)>
<TELL " own future." CR>)>>
<GLOBAL VEZZAS
<TABLE
0
"a dried-up river bed, full of sharp rocks and muddy puddles.
A dark cave beckons."
"a field surrounded by fortified ramparts. A tattered flag flies
atop a tall pole."
"a brightly lit room. A tree fills the room, its branches twinkling
with gold and silver."
"a glittering midway filled with garish lights and honky-tonk music,
surrounded by a spidery wooden structure."
"a startling location of transparent walls, twinkling with reflected light."
"a small room with a slanted roof, covered with black dust. The room
is bathed in orange light."
"a door of the whitest wood, opening slowly to reveal the face of Belboz,
which quickly melts into a frightening visage of unspeakable malevolence."
"a heated debate among the Guildmasters of the land, in the ancient
Guild Hall at Borphee."
"a pile of pure-white blocks, engraved with runes of power. Each block
has a word written on it."
0>>
<ROUTINE V-YOMIN ()
<TELL "I'm afraid">
<ARTICLE ,PRSO T>
<TELL " doesn't have much of a mind for you to read." CR>>
<ROUTINE V-YONK ()
<COND (<NOT <FSET? ,PRSO ,SPELLBIT>>
<TELL
"Nothing happens. I think this spell is meant to be cast on other spells...">
<CRLF>)
(T
<TELL "The words of the spell glow brightly for a moment." CR>
<COND (<EQUAL? ,PRSO ,MALYON-SPELL>
<SETG MALYON-YONKED T>)>)>>
;"subtitle object manipulation"
<GLOBAL FUMBLE-NUMBER 7>
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" CNT OBJ)
<COND (,FWEEPED
<COND (.VB
<BATTY>)>
<RFALSE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<TELL <PICK-ONE ,YUKS> CR>)>
<RFALSE>)
(<AND <IN? ,PRSO ,YOUNGER-SELF>
<EQUAL? ,PRSO ,SPELL-BOOK>
<SPELL-BOOK-PASS-OFF-CHECK>>
<RFATAL>)
(<OR <IN? ,PRSO ,YOUNGER-SELF>
<IN? ,PRSO ,OLDER-SELF>>
<TELL "Your twin refuses to part with">
<ARTICLE ,PRSO T>
<TELL "." CR>
<RFATAL>)
(<AND
<NOT <IN? <LOC ,PRSO> ,PROTAGONIST>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,PROTAGONIST>> ,LOAD-ALLOWED>>
<COND (.VB
<COND (<FIRST? ,PROTAGONIST>
<TELL "Your load is too heavy">)
(T
<TELL "It's a little too heavy">)>
<COND (<L? ,LOAD-ALLOWED ,LOAD-MAX>
<TELL
", especially in light of your exhaustion">)>
<TELL "." CR>)>
<RFATAL>)
(<G? <SET CNT <CCOUNT ,PROTAGONIST>> ,FUMBLE-NUMBER>
<COND (.VB
<TELL "You're holding too many things already." CR>)>
<RFATAL>)
(T
<MOVE ,PRSO ,PROTAGONIST>
<SCORE-OBJECT>
<FSET ,PRSO ,TOUCHBIT>
<RTRUE>)>>
<GLOBAL SWANZO-POINT 25>
<ROUTINE SCORE-OBJECT ()
<COND (<AND <EQUAL? ,PRSO ,SWANZO-SCROLL>
<EQUAL? ,HERE ,STONE-HUT>>
<SETG SCORE <+ ,SCORE ,SWANZO-POINT>>
<SETG SWANZO-POINT 0>)
(<AND <EQUAL? ,PRSO ,VARDIK-SCROLL>
<NOT <FSET? ,VARDIK-SCROLL ,TOUCHBIT>>>
<SETG SCORE <+ ,SCORE 25>>)
(<AND <EQUAL? ,PRSO ,VILSTU-VIAL>
<NOT <FSET? ,VILSTU-VIAL ,TOUCHBIT>>>
<SETG SCORE <+ ,SCORE 10>>)
(<AND <EQUAL? ,PRSO ,MEEF-SCROLL>
<NOT <FSET? ,MEEF-SCROLL ,TOUCHBIT>>>
<SETG SCORE <+ ,SCORE 10>>)
(<AND <EQUAL? ,PRSO ,YONK-SCROLL>
<NOT <FSET? ,YONK-SCROLL ,TOUCHBIT>>>
<SETG SCORE <+ ,SCORE 10>>)>>
<ROUTINE IDROP ()
<COND (<PRSO? ,HANDS>
<V-LOCK>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<NOT <IN? <LOC ,PRSO> ,PROTAGONIST>>>
<TELL "You're not carrying">
<ARTICLE ,PRSO T>
<TELL "." CR>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL "Impossible since">
<ARTICLE ,PRSO T>
<TELL " is closed." CR>
<RFALSE>)
(<EQUAL? ,HERE ,TREE-BRANCH>
<MOVE ,PRSO ,TWISTED-FOREST>)
(<EQUAL? ,HERE ,LAGOON>
<MOVE ,PRSO ,LAGOON-FLOOR>)
(<AND <EQUAL? ,HERE ,GLASS-MAZE>
<NO-FLOOR?>>
<DROP-IN-MAZE>
<MOVE ,PRSO ,DIAL>
<TELL
"It drops into the shimmering light below you. A moment later, you
hear a gentle thud." CR>)
(T
<MOVE ,PRSO <LOC ,PROTAGONIST>>
<RTRUE>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT <FSET? .X ,WEARBIT>>
<SET CNT <+ .CNT 1>>)>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
;"WEIGHT: Gets sum of SIZEs of supplied object, recursing to nth level."
<ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<COND (<AND <EQUAL? .OBJ ,PLAYER>
<FSET? .CONT ,WEARBIT>>
<SET WT <+ .WT 1>>)
(T <SET WT <+ .WT <WEIGHT .CONT>>>)>
<COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>>
;"subtitle describers"
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? STR AV)
<SET V? <OR .LOOK? ,VERBOSE>>
<COND (<AND <NOT ,LIT>
<NOT ,BLORTED>>
<TELL "It is pitch black">
<COND (,FWEEPED
<TELL
", and your bat sonar-sense isn't much help in this terrain">)>
<TELL ".">
<COND (<EQUAL? ,HERE ,GRUE-LAIR>
<TELL
" Gurgling noises come from every direction!">)
(<NOT ,SPRAYED?>
<TELL
" Dangerous creatures, such as grues, probably abound in the darkness.">)>
<CRLF>
<RETURN <>>)>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET ,HERE ,TOUCHBIT>
<SET V? T>)>
<COND (<IN? ,HERE ,ROOMS>
<TELL D ,HERE>
<COND (,FLYING
<TELL " (you are flying)">)>
<COND (<NOT <FSET? <LOC ,PROTAGONIST> ,VEHBIT>>
<CRLF>)>)>
<COND (<OR .LOOK?
<NOT ,SUPER-BRIEF>
<EQUAL? ,HERE ,GLASS-MAZE>>
<SET AV <LOC ,PROTAGONIST>>
<COND (<FSET? .AV ,VEHBIT>
<TELL ", in the " D .AV CR>)>
<COND (<AND .V? <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
<RTRUE>)
(<AND .V? <SET STR <GETP ,HERE ,P?LDESC>>>
<TELL .STR CR>)
(T
<APPLY <GETP ,HERE ,P?ACTION> ,M-FLASH>)>
<COND (<AND <NOT <EQUAL? ,HERE .AV>>
<FSET? .AV ,VEHBIT>>
<APPLY <GETP .AV ,P?ACTION> ,M-LOOK>)>)>
T>
<ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
<COND (<OR ,LIT ,BLORTED>
<COND (<FIRST? ,HERE>
<PRINT-CONT ,HERE <SET V? <OR .V? ,VERBOSE>> -1>)>)
(T
<TOO-DARK>)>>
"DESCRIBE-OBJECT -- takes object and flag. if flag is true will print a
long description (fdesc or ldesc), otherwise will print short."
<GLOBAL DESC-OBJECT <>>
<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>
<COND (<AND <EQUAL? .OBJ ,OLDER-SELF>
<NOT ,OLDER-INTRODUCED>>
<RTRUE>)>
<TELL "There is">
<ARTICLE .OBJ>
<TELL " here">
<PARANTHETICAL-NOTES .OBJ>
<TELL ".">)
(T
<TELL <GET ,INDENTS .LEVEL>>
<SPACELESS-ARTICLE .OBJ>
<PARANTHETICAL-NOTES .OBJ>)>
<COND (<AND <0? .LEVEL>
<SET AV <LOC ,PROTAGONIST>>
<FSET? .AV ,VEHBIT>>
<TELL " (outside the " D .AV ")">)>
<CRLF>
<COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
<PRINT-CONT .OBJ .V? .LEVEL>)>>
<ROUTINE PARANTHETICAL-NOTES (OBJ)
<COND (<AND <EQUAL? .OBJ ,ROPE>
,ROPE-TO-BEAM>
<TELL " (tied to the beam)">)
(<AND <FSET? .OBJ ,WEARBIT>
<IN? .OBJ ,PROTAGONIST>>
<TELL " (being worn">
<COND (<FSET? .OBJ ,ONBIT>
<TELL " and providing light)">)
(T
<TELL ")">)>)
(<FSET? .OBJ ,ONBIT>
<TELL " (providing light)">)>>
<ROUTINE PRINT-CONT (OBJ "OPTIONAL" (V? <>) (LEVEL 0)
"AUX" Y 1ST? AV STR (PV? <>) (INV? <>))
<COND (<NOT <SET Y <FIRST? .OBJ>>>
<RTRUE>)>
<COND (<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<SET AV <LOC ,PROTAGONIST>>)
(T
<SET AV <>>)>
<SET 1ST? T>
<COND (<EQUAL? ,PROTAGONIST .OBJ <LOC .OBJ>>
<SET INV? T>)
(T
<REPEAT ()
<COND (<NOT .Y>
<RETURN <NOT .1ST?>>)
(<==? .Y .AV>
<SET PV? T>)
(<==? .Y ,PROTAGONIST>)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<NOT <FSET? .Y ,TOUCHBIT>>
<SET STR <GETP .Y ,P?FDESC>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<TELL .STR CR>)>
<COND (<AND <SEE-INSIDE? .Y>
<NOT <GETP <LOC .Y> ,P?DESCFCN>>
<FIRST? .Y>>
<PRINT-CONT .Y .V? 0>)>)>
<SET Y <NEXT? .Y>>>)>
<SET Y <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .Y>
<COND (<AND .PV? .AV <FIRST? .AV>>
<PRINT-CONT .AV .V? .LEVEL>)>
<RETURN <NOT .1ST?>>)
(<EQUAL? .Y .AV ,PROTAGONIST>)
(<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? <>>)>
<DESCRIBE-OBJECT .Y .V? .LEVEL>)
(<AND <FIRST? .Y> <SEE-INSIDE? .Y>>
<PRINT-CONT .Y .V? .LEVEL>)>)>
<SET Y <NEXT? .Y>>>>
<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 ">)>)>
<SPACELESS-ARTICLE .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?>>
<THIS-IS-IT .IT?>)>
<RTRUE>)>>)>>
<ROUTINE FIRSTER (OBJ LEVEL)
<COND (<EQUAL? .OBJ ,PROTAGONIST>
<TELL "You are carrying:" 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 "It looks like">
<ARTICLE .OBJ T>
<TELL " is holding:" CR>)
(T
<TELL "The " D .OBJ " contains:" CR>)>)>>
;"subtitle movement"
<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 GO-NEXT (TBL "AUX" VAL)
<COND (<SET VAL <LKP ,HERE .TBL>>
<GOTO .VAL>)>>
;<ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RFALSE>)
(<EQUAL? <GET .TBL .CNT> .ITM>
<COND (<EQUAL? .CNT .LEN> <RFALSE>)
(T
<RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" OLIT OHERE)
<SET OHERE ,HERE>
<SET OLIT ,LIT>
<MOVE ,PROTAGONIST .RM>
<SETG HERE .RM>
<SETG LIT <LIT? ,HERE>>
<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<NOT ,SPRAYED?>
<NOT ,RESURRECTING>
<NOT <EQUAL? ,HERE ,HAUNTED-HOUSE>>
<NOT <IN? ,GRUE-SUIT ,PROTAGONIST>>
<PROB 80>>
<COND (,BLORTED
<JIGS-UP
"A hideous creature with slavering fangs lurks up and, before
you can move, begins feasting!">)
(T
<JIGS-UP
"Oh, no! Something lurked up and devoured you!">)>
<RTRUE>)>
<SETG RESURRECTING <>>
<ROPE-BEAM-CHECK T>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<NOT <EQUAL? ,HERE .RM>>
<RTRUE>)
(.V?
<V-FIRST-LOOK>)>
<RTRUE>>
<ROUTINE ROPE-BEAM-CHECK ("OPTIONAL" (PRINT <>))
<COND (<AND <HELD? ,BEAM>
<NOT <HELD? ,ROPE>>
,ROPE-TO-BEAM>
<MOVE ,ROPE ,PROTAGONIST>
<SETG ROPE-PLACED <>>
<SETG ROPE-IN-LOWER-CHUTE <>>
<FCLEAR ,BEAM ,TRYTAKEBIT>
<FCLEAR ,ROPE ,TRYTAKEBIT>
<COND (.PRINT
<TELL "(taking the rope first)" CR>)>)
(<AND <HELD? ,ROPE>
<NOT <HELD? ,BEAM>>
,ROPE-TO-BEAM>
<MOVE ,BEAM ,PROTAGONIST>
<COND (.PRINT
<TELL "(taking the beam of wood first)" CR>)>)>>
;"subtitle death and stuff"
<ROUTINE JIGS-UP (DESC "OPTIONAL" (STARVED <>))
<COND (.DESC
<TELL .DESC CR>)>
<FORGET-ALL>
<KILL-INTERRUPTS>
<COND (,SLEEPING
<TELL
CR "...and a moment later you wake up in a cold sweat and realize you've
been dreaming." CR>
<SETG SLEEPING <>>
<FCLEAR ,TWISTED-FOREST ,TOUCHBIT>
<FCLEAR ,TREE-BRANCH ,TOUCHBIT>
<FCLEAR ,FOREST-EDGE ,TOUCHBIT>
<FCLEAR ,MINE-FIELD ,TOUCHBIT>
<FCLEAR ,SNAKE-PIT ,TOUCHBIT>
<FCLEAR ,MEADOW ,TOUCHBIT>
<FCLEAR ,RIVER-BANK ,TOUCHBIT>
<FCLEAR ,FORT-ENTRANCE ,TOUCHBIT>
<FCLEAR ,DRAWBRIDGE ,TOUCHBIT>
<FCLEAR ,RUINS ,TOUCHBIT>
<ENABLE <QUEUE I-PARROT -1>>
<ENABLE <QUEUE I-MAILMAN 25>>
<ENABLE <QUEUE I-TIRED 80>>
<ENABLE <QUEUE I-HUNGER 21>>
<ENABLE <QUEUE I-THIRST 18>>
<SETG LAST-SLEPT ,MOVES>
<SETG CODE-NUMBER <RANDOM 12>>
<SETG CURRENT-TLOC <* ,CODE-NUMBER 6>>
<SETG NEXT-NUMBER <GET ,NEXT-CODE-TABLE ,CURRENT-TLOC>>
<SETG SCORE <+ ,SCORE 5>>
<MOVE ,SPELL-BOOK ,PROTAGONIST>
<SETG HERE ,YOUR-QUARTERS>
<MOVE ,PROTAGONIST ,BED>
<CRLF>
<V-VERSION>
<CRLF>
<SETG PRSO <>>
<SETG LIT <>>
<TELL
"Your frotz spell seems to have worn off during the night, and it
is now pitch black." CR>)
(T
<TELL "
| **** You have died ****||">
<COND (,RESURRECTION-ROOM
<COND (<AND <IN? ,SWANZO-SCROLL ,PROTAGONIST>
<NOT <EQUAL? ,SWANZO-POINT 0>>>
<MOVE ,SWANZO-SCROLL ,HOLLOW>
<FCLEAR ,SWANZO-SCROLL ,TOUCHBIT>)>
<ROPE-BEAM-CHECK>
<RANDOMIZE-OBJECTS>
<WEAR-OFF-SPELLS>
<TELL
"Your guardian angel, draped in white, appears floating in the nothingness
before you. \"Gotten in a bit of a scrape, eh?\" he asks, writing frantically
in a notebook. \"I'd love to chat, but we're so busy this month.\" ">
<COND (<EQUAL? ,RESURRECTION-ROOM ,GLASS-MAZE>
<TELL
"The angel looks pained. \"I hate resurrections in these stupid glass mazes!
I can never tell one room from the next.\" A moment later, you appear in
the maze. Unfortunately, this is one of the floor-less rooms. This time,
your demise is permanent." CR>
<FINISH>)
(<AND <EQUAL? ,RESURRECTION-ROOM ,RIVER-BED
,STAGNANT-POOL ,TOP-OF-FALLS>
<NOT ,RIVER-EVAPORATED>>
<TELL
"A moment later you find yourself at the bottom of a river, between
a whirpool, some sharp rocks, and a school of river sharks. This time,
your death is terminal." CR>
<FINISH>)
(<AND <IN-GUILD-HALL? ,RESURRECTION-ROOM>
<FSET? ,TWISTED-FOREST ,TOUCHBIT>>
<TELL
"A look of consternation crosses the angel's face. \"According to the
records, you're to be resurrected in your local Guild Hall. But that's
quite far, and I've had a rough day. How about Egreth Castle instead,
hmmm?\" Being disembodied, you find it difficult to object, and a moment
later you are among the...">
<SETG RESURRECTION-ROOM ,RUINS>)
(T
<TELL
"The angel twitches his nose, and the nothingness is replaced by...">)>
<CRLF> <CRLF>
<SETG RESURRECTING T>
<GOTO ,RESURRECTION-ROOM>
<COND (<EQUAL? ,RESURRECTION-ROOM ,HOLLOW>
<SETG ROOM-NUMBER 24>
<COND (<NOT ,SPLATTERED>
<SETG DORN-BEAST-WARNING <>>
<SETG DORN-BEAST-ROOM 0>
<SETG LAST-DORN-ROOM 0>
<ENABLE <QUEUE I-DORN-BEAST 2>>)>)>
<COND (.STARVED
<TELL
"Unfortunately, you are still long overdue for a meal and immediately
drop dead again." CR>
<FINISH>)>
<COND (<IN-COAL-MINE?>
<ENABLE <QUEUE I-SUFFOCATE 2>>
<TELL
"The air here is almost unbreathable." CR>)>
<SETG RESURRECTION-ROOM <>>
<SETG P-CONT <>>
<RFATAL>)
(T
<TELL
"Unfortunately, you made no provisions for your untimely death." CR>
<FINISH>)>)>>
<GLOBAL RESURRECTING <>>
<ROUTINE RANDOMIZE-OBJECTS ("AUX" (F <FIRST? ,PROTAGONIST>) N)
<REPEAT ()
<COND (.F
<SET N <NEXT? .F>>
<COND (<FSET? .F ,SCROLLBIT>
<COND (<EQUAL? ,HERE ,HAUNTED-HOUSE
,COAL-BIN-ROOM ,DIAL-ROOM>
<MOVE .F ,DIAL>)
(T
<MOVE .F ,HERE>)>)>
<SET F .N>)
(T
<RETURN>)>>
<RTRUE>>
<ROUTINE KILL-INTERRUPTS ()
<DISABLE <INT I-WAKE-UP>>
<DISABLE <INT I-HELLHOUND>>
<SETG HELLHOUND-WARNING <>>
<DISABLE <INT I-BOA>>
<SETG BOA-WARNING <>>
<DISABLE <INT I-LOCUSTS>>
<SETG LOCUST-WARNING 0>
<DISABLE <INT I-SUFFOCATE>>
<DISABLE <INT I-FLUME-TRIP>>
<END-RIDE>
<SETG ROOM-NUMBER 13>
<SETG DORN-BEAST-ROOM 0>
<SETG LAST-DORN-ROOM 0>
<DISABLE <INT I-DORN-BEAST>>
<SETG DORN-BEAST-WARNING <>>
<FCLEAR ,DORN-BEAST ,NDESCBIT>
<MOVE ,DORN-BEAST ,DIAL>
<SETG FWEEPED <>>
<SETG SUFFOCATE-WARNING <>>
<DISABLE <INT I-UNFWEEP>>
<DISABLE <INT I-BELBOZ-AWAKES>>
<RTRUE>>
;"subtitle useful utility routines"
<ROUTINE THIS-IS-IT (OBJ)
<SETG P-IT-OBJECT .OBJ>
;<SETG P-IT-LOC ,HERE>>
<ROUTINE ACCESSIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player TOUCH object?"
;"revised 5/2/84 by SEM and SWG"
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? ,LAST-PSEUDO-LOC ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L>
<RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS>
<RTRUE>)
(<AND <EQUAL? .L ,LOCAL-GLOBALS>
<GLOBAL-IN? .OBJ ,HERE>>
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE>>
<RFALSE>)
(<EQUAL? .L ,PROTAGONIST ,HERE>
<RTRUE>)
(<AND <FSET? .L ,OPENBIT>
<ACCESSIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE VISIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player SEE object"
;"revised 5/2/84 by SEM and SWG"
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RETURN ,GLOBAL-OBJECTS>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(T
<SET OBJ <LOC .OBJ>>)>>>
<ROUTINE OTHER-SIDE (DOBJ "AUX" (P 0) TEE) ;"finds room on other side of door"
<REPEAT ()
<COND (<L? <SET P <NEXTP ,HERE .P>> ,LOW-DIRECTION>
<RETURN <>>)
(T
<SET TEE <GETPT ,HERE .P>>
<COND (<AND <EQUAL? <PTSIZE .TEE> ,DEXIT>
<EQUAL? <GETB .TEE ,DEXITOBJ> .DOBJ>>
<RETURN .P>)>)>>>
<ROUTINE NOTHING-HELD? ("AUX" X N) ;"is player empty-handed?"
<SET X <FIRST? ,PROTAGONIST>>
<REPEAT ()
<COND (.X
<COND (<NOT <FSET? .X ,WEARBIT>>
<RFALSE>)>
<SET X <NEXT? .X>>)
(T
<RTRUE>)>>>
<ROUTINE HELD? (OBJ) ;"is object carried, or in something carried, by player?"
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ ,PROTAGONIST>
<RTRUE>)
(<IN? .OBJ ,ROOMS>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<HELD? <LOC .OBJ>>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<AND <NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT>
<FSET? .OBJ ,OPENBIT>>>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TEE)
<COND (<SET TEE <GETPT .OBJ2 ,P?GLOBAL>>
<ZMEMQB .OBJ1 .TEE <- <PTSIZE .TEE> 1>>)>>
<ROUTINE FIND-IN (WHERE WHAT "AUX" W)
<SET W <FIRST? .WHERE>>
<COND (<NOT .W>
<RFALSE>)>
<REPEAT ()
<COND (<FSET? .W .WHAT>
<RETURN .W>)
(<NOT <SET W <NEXT? .W>>>
<RETURN <>>)>>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>>
;<ROUTINE 2OBJS? ()
<COND (<NOT <EQUAL? <GET ,P-PRSO 0> 2>>
<PUT ,P-PRSO 0 1>
<TELL "That sentence doesn't make sense." CR>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE ROB (WHO "AUX" N X)
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (<NOT .X>
<RETURN>)>
<SET N <NEXT? .X>>
<MOVE .X ,DIAL>
<SET X .N>>>
<ROUTINE STOP ()
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<RFATAL>>
<ROUTINE HACK-HACK (STR)
<TELL .STR>
<ARTICLE ,PRSO T>
<TELL <PICK-ONE ,HO-HUM> CR>>
<GLOBAL HO-HUM
<PLTABLE
" doesn't do anything."
" accomplishes nothing."
" has no desirable effect.">>
<GLOBAL YUKS
<PLTABLE
"No spell would help with that!"
"It would take more magic than you've got!"
"You can't be serious."
"You must have had a silliness spell cast upon you.">>
<ROUTINE OPEN-CLOSE ()
<COND (<AND <VERB? OPEN>
<FSET? ,PRSO ,OPENBIT>>
<ALREADY-OPEN>
<RTRUE>)
(<AND <VERB? CLOSE>
<NOT <FSET? ,PRSO ,OPENBIT>>>
<ALREADY-CLOSED>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE SPACELESS-ARTICLE (OBJ "OPTIONAL" (THE <>))
<COND (<FSET? .OBJ ,NARTICLEBIT>
T)
(.THE
<TELL "the ">)
(<FSET? .OBJ ,VOWELBIT>
<TELL "an ">)
(T
<TELL "a ">)>
<PRINTD .OBJ>>
<ROUTINE ARTICLE (OBJ "OPTIONAL" (THE <>))
<TELL " ">
<COND (.THE
<SPACELESS-ARTICLE .OBJ T>)
(T
<SPACELESS-ARTICLE .OBJ>)>>
<ROUTINE CANT-ENTER (LOC "OPTIONAL" (LEAVE <>))
<TELL "You can't ">
<COND (.LEAVE
<TELL "leave">)
(T
<TELL "enter">)>
<ARTICLE .LOC T>
<TELL " from here." CR>>
<ROUTINE YOU-CANT-SEE-ANY (STRING)
<TELL "You can't see any " .STRING " here!" CR>>
<ROUTINE WITH??? ()
<TELL "With">
<ARTICLE ,PRSI>
<TELL "??!?" CR>>
<ROUTINE TELL-ME-HOW ()
<TELL "You must tell me how to do that to">
<ARTICLE ,PRSO>
<TELL "." CR>>
<ROUTINE NOT-GOING-ANYWHERE (VEHICLE)
<TELL
"You're not going anywhere until you get out of the " D .VEHICLE "." CR>>
<ROUTINE SPLASH ()
<TELL "With a splash,">
<ARTICLE ,PRSO T>
<TELL " plunges into the water." CR>>
<ROUTINE BURIED-IN-COAL (STRING)
<MOVE ,PRSO ,DIAL>
<TELL "When you " .STRING>
<ARTICLE ,PRSO T>
<TELL " it falls between the lumps of coal and is buried." CR>>
<ROUTINE LOOK-AROUND-YOU ()
<TELL "Look around you." CR>>
<ROUTINE BATTY ()
<TELL "You're batty!" CR>>
<ROUTINE TOO-DARK ()
<TELL "It's too dark to see">
<COND (,FWEEPED
<TELL
", and your bat sonar-sense isn't of much help, either.">)
(T
<TELL "!">)>
<CRLF>>
<ROUTINE WHILE-FLYING ()
<TELL "While flying?" CR>>
<ROUTINE CANT-GO ()
<TELL "You can't go that way." CR>>
<ROUTINE NOW-BLACK ()
<TELL "It is now pitch black." CR>>
<ROUTINE ALREADY-OPEN ()
<TELL "It is already open." CR>>
<ROUTINE ALREADY-CLOSED ()
<TELL "It is already closed." CR>>
<ROUTINE MAKE-OUT ()
<TELL "You can't make out anything." CR>>
<ROUTINE BOOK-DAMP ()
<TELL "The book is damp and the writing unreadable." CR>>
<ROUTINE REFERRING ()
<TELL "I don't see what you're referring to." CR>>
<ROUTINE POOR-LISTENERS ()
<TELL "Sleeping gnomes make poor listeners." CR>>
<ROUTINE ANYMORE ()
<TELL "You can't see that anymore." CR>>
<ROUTINE SETTLE-ONTO-BRANCH ()
<TELL "You settle onto the branch." CR>>
<ROUTINE SPLASH-INTO-WATER ()
<TELL "You splash down into the water." CR>>
<GLOBAL YNH "You're not holding">