zorkzero/verbs.zil

5346 lines
142 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
ZORK ZERO
(c) Copyright 1988 Infocom, Inc. All Rights Reserved."
<BEGIN-SEGMENT 0>
<DEFAULTS-DEFINED INIT-HINT-SCREEN>
;"subtitle game commands"
<GLOBAL VERBOSITY 1> ;"0 = superbrief, 1 = brief, 2 = verbose"
<ROUTINE V-VERBOSE ()
<SETG VERBOSITY 2>
<TELL "Maximum verbosity." CR CR>
<V-LOOK>>
<ROUTINE V-BRIEF ()
<SETG VERBOSITY 1>
<TELL "Brief descriptions." CR>>
<ROUTINE V-SUPERBRIEF ()
<SETG VERBOSITY 0>
<TELL "Superbrief descriptions." CR>>
<ROUTINE NOT-IN-DEMO ()
<TELL
"[Sorry, but that command is not available in this demonstration version.]"CR>>
<ROUTINE V-SAVE ("AUX" X WRD COLOR-SAME)
<COND (<SAVE-UNDO-CHECK>
<RTRUE>)>
<COND (,DEMO-VERSION?
<NOT-IN-DEMO>
<RFATAL>)>
<PUTB ,G-INBUF 2 0>
<SETG P-CONT <>> ;"flush anything on input line after SAVE"
<SET X <SAVE>>
<COND (<ZERO? .X>
<SETG P-CONT -1>
<TELL "SAVE failed!" CR>
<RFATAL>)
(<EQUAL? .X 1>
<RESTORE-ORPHAN>
<TELL "SAVE completed." CR>
<RFATAL>)>
<SET WRD <WINGET ,S-TEXT ,WCOLOR>>
<COND (<AND <EQUAL? <SHIFT .WRD -8> ,FG-COLOR>
<EQUAL? <BAND .WRD 255> ,BG-COLOR>>
<SET COLOR-SAME T>)
(T
<SET COLOR-SAME <>>)>
<COLOR ,FG-COLOR ,BG-COLOR>
<SETG OLD-HERE <>>
<SETUP-SCREEN>
<V-$REFRESH>
<RESTORE-ORPHAN>
<TELL "Okay, restored." CR CR>
<SETG P-CONT -1> ;<RFATAL>
<V-LOOK>>
<ROUTINE SAVE-UNDO-CHECK ()
<COND (<EQUAL? ,HERE ,ROOM-OF-THREE-DOORS>
<TELL
"[You can't SAVE or UNDO here. You'll have to solve the puzzle!]" CR>)>>
<ROUTINE RESTORE-ORPHAN ()
<COND (<AND <IN? ,JESTER ,HERE>
,LIT
<OR <AND <EQUAL? ,HERE ,ENTRANCE-HALL>
<NOT <FSET? ,PORTCULLIS ,OPENBIT>>>
<AND <EQUAL? ,HERE ,SOLAR>
<IN? ,EAST-KEY ,JESTER>>
<EQUAL? ,HERE ,OUBLIETTE>
<AND <EQUAL? ,HERE ,CAVE-IN>
<IN? ,PIT-BOMB ,LOCAL-GLOBALS>>
<AND <EQUAL? ,HERE ,TAX-OFFICE>
<IN? ,ZORKMID-COIN ,LOCAL-GLOBALS>>
<AND <EQUAL? ,HERE ,STREAM>
<FSET? ,DIPLOMA ,TRYTAKEBIT>>>>
<SETUP-ORPHAN "answer">)>>
<ROUTINE V-RESTORE ()
<COND (,DEMO-VERSION?
<NOT-IN-DEMO>
<RFATAL>)>
<COND (<NOT <RESTORE>>
<TELL ,FAILED>)>>
<ROUTINE V-UNDO ("AUX" X)
<SETG OLD-HERE <>>
<SETG OLD-REGION <>>
<COND (<NOT <SAVE-UNDO-CHECK>>
<SET X <IRESTORE>>
<COND (<EQUAL? .X -1>
<TELL "UNDO is unavailable on your computer system." CR>)
(T
<TELL ,FAILED>)>)>>
<ROUTINE V-SCRIPT ()
<COND (,DEMO-VERSION?
<NOT-IN-DEMO>
<RFATAL>)>
<TELL "[Transcript on.]" CR>
<DIROUT ,D-PRINTER-ON>
<CORP-NOTICE "begins">
<RTRUE>>
<ROUTINE V-UNSCRIPT ()
<COND (,DEMO-VERSION?
<NOT-IN-DEMO>
<RFATAL>)>
<CORP-NOTICE "ends">
<DIROUT ,D-PRINTER-OFF>
<TELL "[Transcript off.]" CR>
<DIROUT ,D-SCREEN-OFF>
<CRLF> ;"to transcript only"
<DIROUT ,D-SCREEN-ON>
<RTRUE>>
<ROUTINE CORP-NOTICE (STRING)
<DIROUT ,D-SCREEN-OFF>
<TELL
"Here " .STRING " a transcript of interaction with" ;" ZORK ZERO." CR>
<V-VERSION>
<DIROUT ,D-SCREEN-ON>
<RTRUE>>
<GLOBAL COLOR-NOTE <>>
<GLOBAL FG-COLOR 1>
<GLOBAL BG-COLOR 1>
<ROUTINE V-COLOR ("AUX" (DEFAULT <>))
<COND (<NOT ,COLOR-NOTE>
<SETG COLOR-NOTE T>
<TELL
"Aesthetically, we recommend not changing the standard setting, which
is black text on a white background. ">
<COND (<AND <EQUAL? <LOWCORE INTID> ,MACINTOSH>
<MAC-II?>>
<TELL
"Also, if your Mac II displays only 16 colors, you probably won't get
the color you ask for. ">)>
<TELL "Do you still want to go ahead?" CR "(Y or N) >">
<COND (<NOT <Y?>>
<RTRUE>)>)>
<CRLF>
<REPEAT ()
<DO-COLOR>
<TELL
"You should now get " <GET ,COLOR-TABLE ,FG-COLOR> " text on a "
<GET ,COLOR-TABLE ,BG-COLOR> " background. Is that what you want?|
(Y or N) >">
<COND (<Y?>
<RETURN>)>
<COND (<AND <EQUAL? <LOWCORE INTID> ,MACINTOSH>
<NOT <MAC-II?>>>
<COND (<EQUAL? ,BG-COLOR 2>
<SETG BG-COLOR 9>
<SETG FG-COLOR 2>)
(T
<SETG BG-COLOR 2>
<SETG FG-COLOR 9>)>
<RETURN>)>
<TELL CR
"Do you want to pick again, or would you like to just go back to the
standard colors? (Type Y to pick again) >">
<COND (<Y?>
<CRLF>)
(T
<SET DEFAULT T>
<RETURN>)>>
<COND (.DEFAULT
<COLOR 1 1>)
(T
<COLOR ,FG-COLOR ,BG-COLOR>)>
<V-$REFRESH>>
<ROUTINE DO-COLOR ()
<COND (<AND <EQUAL? <LOWCORE INTID> ,MACINTOSH>
<NOT <MAC-II?>>> ;"b&w Mac"
<COND (<EQUAL? ,BG-COLOR 2>
<SETG BG-COLOR 9>
<SETG FG-COLOR 2>)
(T
<SETG BG-COLOR 2>
<SETG FG-COLOR 9>)>)
(T
<SETG FG-COLOR <PICK-COLOR ,FG-COLOR "text" T>>
<SETG BG-COLOR <PICK-COLOR ,BG-COLOR "background">>)>>
<ROUTINE PICK-COLOR (WHICH STRING "OPTIONAL" (SETTING-FG <>) "AUX" CHAR)
<TELL
"The current " .STRING " color is " <GET ,COLOR-TABLE .WHICH> ,PERIOD-CR>
<FONT 4>
<TELL
" 1 --> WHITE 4 --> GREEN" CR
" 2 --> BLACK 5 --> YELLOW" CR
" 3 --> RED 6 --> BLUE" CR>
<FONT 1>
<TELL
"Type a number to select the " .STRING " color you want. >">
<REPEAT ()
<COND (,DEMO-VERSION?
<SET CHAR <INPUT-DEMO 1>>)
(T
<SET CHAR <INPUT 1>>)>
<SET CHAR <- .CHAR 48>> ;"convert from ASCII"
<COND (<EQUAL? .CHAR 1> ;"white is really 9, not 1"
<SET CHAR 9>)>
<COND (<EQUAL? .CHAR 2 3 4 5 6 9>
<COND (<AND <NOT .SETTING-FG>
<EQUAL? .CHAR ,FG-COLOR>>
<TELL CR
"You can't make the background the same
color as the text! Pick another color. >">)
(T
<RETURN>)>)
(T
<TELL CR ,TYPE-A-NUMBER "6. >">)>>
<CRLF> <CRLF>
<RETURN .CHAR>>
<CONSTANT COLOR-TABLE
<TABLE ;0 "no change"
;1 "the default color"
;2 "black"
;3 "red"
;4 "green"
;5 "yellow"
;6 "blue"
;7 "magenta"
;8 "cyan"
;9 "white">>
<END-SEGMENT>
<BEGIN-SEGMENT STARTUP>
<ROUTINE V-CREDITS ()
<CENTER-1 "Z O R K Z E R O" T>
<CENTER-1 "The Revenge of Megaboz" T>
<CRLF>
<CENTER-1 "designed and written by" T>
<CENTER-1 "Steve Meretzky">
<CRLF>
<CENTER-1 "based on a concept by" T>
<CENTER-2 "Tim Anderson" "Marc Blank">
<CENTER-2 "Dave Lebling" "Steve Meretzky">
<CRLF>
<CENTER-1 "original graphics designed for the Amiga by" T>
<CENTER-1 "James Shook">
<CRLF>
<CENTER-1 "graphical translations" T>
<CENTER-3 "Tanya Allan" "Andy Briggs" "Denise Audette">
<CENTER-2 "Joy Pulver" "Charlie Voner">
<CRLF>
<CENTER-1 "design and implementation of InfoParser Mark Two" T>
<CENTER-2 "Tim Anderson" "Stu Galley">
<CRLF>
<CENTER-1 "design and implementation of XZIP development system" T>
<CENTER-2 "Tim Anderson" "Dave Lebling">
<CRLF>
<CENTER-1 "interpreter implementation" T>
<CENTER-1 "Macintosh: Duncan Blanchard">
<CENTER-1 "Apple II: Jon Arnold">
<CENTER-1 "IBM: Scott Fray">
<CENTER-1 "Amiga: Clarence Din">
<CRLF>
<CENTER-1 "testing" T>
<CENTER-3 "Kurt Boutin" "Gary Brennan" "Amy Briggs">
<CENTER-3 "Liz Cyr-Jones" "Craig Fields" "Jacob Galley">
<CENTER-3 "Adam Glass" "Tyler Gore" "Matt Hillman">
<CENTER-3 "Shaun Kelly" "Adam Levesque" "Patti Pizer">
<CENTER-2 "Joe Prosser" "Steve Watkins">
<CRLF>
<CENTER-1 "package design" T>
<CENTER-2 "Carl Genatassio" "Elizabeth Langosy">
<CRLF>
<CENTER-1 "calendar design" T>
<CENTER-2 "Amy Briggs" "Elizabeth Langosy">
<CENTER-1 "Steve Meretzky">
<CRLF>
<CENTER-1 "calendar art" T>
<CENTER-1 "Ed Parker">>
<END-SEGMENT>
<BEGIN-SEGMENT 0>
<ROUTINE V-DIAGNOSE ()
<COND (<G? ,DESERT-DEATH 0>
<TELL "You're ">
<COND (<G? ,DESERT-DEATH 4>
<TELL "about to pass out">)
(<G? ,DESERT-DEATH 2>
<TELL "dangerously close to passing out">)
(T
<TELL "feeling a bit faint">)>
<TELL " from the heat." CR>)
(,ALLIGATOR
<TELL "You're a perfectly healthy alligator." CR>)
(,TURNED-INTO
<COND (<EQUAL? ,TURNED-INTO ,VIOLIN>
<TELL
"You're fit as a fiddle. In fact, you ARE a fiddle." CR>)
(T
<TELL
"You are" A ,TURNED-INTO ". Other details of health pale in comparison." CR>)>)
(<FSET? ,CLOWN-NOSE ,WORNBIT>
<TELL
"You're having a bit of trouble breathing, thanks to the " D ,CLOWN-NOSE
" on your nose." CR>)
(<G? ,HUNGER-COUNT 0>
<TELL "You feel ">
<COND (<EQUAL? ,HUNGER-COUNT 2>
<TELL "very ">)
(<EQUAL? ,HUNGER-COUNT 3>
<TELL "incredibly ">)>
<TELL "hungry." CR>)
(T
<TELL "You're as fit as a fiddle." CR>)>>
<ROUTINE V-INVENTORY ()
<SETG D-BIT <- ,WORNBIT>>
<COND (<NOT <D-CONTENTS ,WINNER <> <+ ,D-ALL? ,D-PARA?>>>
<COND (,TURNED-INTO
<TELL "You are carrying nothing.">)
(T
<TELL "You are empty-">
<COND (,ALLIGATOR
<TELL "claw">)
(T
<TELL "hand">)>
<TELL "ed.">)>)>
<SETG D-BIT ,WORNBIT>
<D-CONTENTS ,WINNER <> <+ ,D-ALL? ,D-PARA?>>
<SETG D-BIT <>>
<COND (<AND <FSET? ,GLOVE ,WORNBIT>
<NOT ,GLOVE-COMMENT>>
<SETG GLOVE-COMMENT T>
<TELL
" [It's probably none of my business, but when you wear that single glove you
resemble singer Michael Flathead, formerly of the Flathead Five.]">)>
<CRLF>>
<GLOBAL GLOVE-COMMENT <>>
<GLOBAL BORDER-ON T>
<ROUTINE V-MODE ()
<CLEAR -1>
<COND (,BORDER-ON
<SETG BORDER-ON <>>)
(T
<SETG BORDER-ON T>)>
<SPLIT-BY-PICTURE ,CURRENT-SPLIT>
<SCREEN ,S-FULL>
<INIT-STATUS-LINE T>
<SCREEN ,S-TEXT>
<TELL "Border o">
<COND (,BORDER-ON
<TELL "n">)
(T
<TELL "ff">)>
<TELL " (obviously)." CR>>
<ROUTINE V-QUIT ()
;<PARSER-REPORT>
<V-SCORE>
<DO-YOU-WISH "leave the game">
<COND (<Y?>
<QUIT>)
(T
<TELL ,OK>)>>
<ROUTINE V-RESTART ()
<V-SCORE>
<DO-YOU-WISH "restart">
<COND (<Y?>
<TELL "Restarting." CR>
<COLOR 1 1> ;"return to default colors before screen clears"
<RESTART>
<TELL ,FAILED>)>>
<ROUTINE DO-YOU-WISH (STRING)
<TELL CR "Do you really want to " .STRING " (y or n)? >">>
<ROUTINE FINISH ("AUX" (REPEATING <>) (CNT 0))
<PROG ()
<CRLF>
<COND (<NOT .REPEATING>
<SET REPEATING T>
<V-SCORE>)>
<UPDATE-STATUS-LINE>
<TELL
"Would you like to start over, restore a saved position, ">
<COND (<NOT <EQUAL? ,HERE ,ROOM-OF-THREE-DOORS>>
<TELL "undo your last turn, ">)>
<TELL "end this session of the game, or ">
<COND (<EQUAL? ,SCORE 1000>
<TELL "see the credits?" CR>)
(T
<TELL "get a hint?" CR>)>
<TELL "(Type RESTART, RESTORE, ">
<COND (<NOT <EQUAL? ,HERE ,ROOM-OF-THREE-DOORS>>
<TELL "UNDO, ">)>
<TELL "QUIT, or ">
<COND (<EQUAL? ,SCORE 1000>
<TELL "CREDITS">)
(T
<TELL "HINT">)>
<TELL "): >">
<PUTB ,P-LEXV 0 10>
<PUTB ,P-INBUF 1 0>
<COND (,DEMO-VERSION?
<READ-DEMO ,P-INBUF ,P-LEXV>)
(T
<READ ,P-INBUF ,P-LEXV>)>
<MOUSE-INPUT?>
<PUTB ,P-LEXV 0 ,LEXV-LENGTH>
<SET CNT <+ .CNT 1>>
<COND (<EQUAL? <GET ,P-LEXV 1> ,W?RESTART>
<COLOR 1 1> ;"return to default before screen clears"
<RESTART>
<TELL ,FAILED>
<AGAIN>)
(<AND <EQUAL? <GET ,P-LEXV 1> ,W?RESTORE>
<NOT <RESTORE>>>
<TELL ,FAILED>
<AGAIN>)
(<OR <EQUAL? <GET ,P-LEXV 1> ,W?QUIT ,W?Q>
<G? .CNT 10>>
;<PARSER-REPORT>
<QUIT>)
(<AND <EQUAL? <GET ,P-LEXV 1> ,W?UNDO>
<V-UNDO>>
<AGAIN>)
(<AND <EQUAL? <GET ,P-LEXV 1> ,W?CREDIT ,W?CREDITS>>
<V-CREDITS>
<AGAIN>)
(<EQUAL? <GET ,P-LEXV 1> ,W?HINTS ,W?HINT ,W?HELP
,W?CLUE ,W?CLUES>
<V-HINT>
<AGAIN>)>
<AGAIN>>>
<ROUTINE V-VERSION ()
<TELL
"ZORK ZERO: The Revenge of Megaboz|
Copyright (c) 1988 by Infocom, Inc. All rights reserved.|
ZORK is a registered trademark of Infocom, Inc." CR>
<INTERPRETER-ID>
<TELL "Release " N <BAND <LOWCORE ZORKID> *3777*> " / Serial number ">
<LOWCORE-TABLE SERIAL 6 PRINTC>
<CRLF>>
<ROUTINE INTERPRETER-ID ()
;"changed 7/21/88 per mail from TAA"
;"changed again 9/12/88 per mail from Duncan"
<TELL
<GET ,MACHINES <LOWCORE INTID>> " Interpreter version "
N <LOWCORE (ZVERSION 0)> "." N <LOWCORE INTVR> CR>>
<CONSTANT MACHINES
<LTABLE "Dec-20"
"Apple IIe"
"Macintosh"
"Amiga"
"Atari ST"
"IBM"
"Commodore 128"
"Commodore 64"
"Apple IIc"
"Apple IIgs"
""
"">>
<ROUTINE MAC-II? ()
<PICINF ,ICON-OFFSET ,PICINF-TBL>
<COND (<EQUAL? <GET ,PICINF-TBL 0> 0>
<RTRUE>)
(T
<RFALSE>)>>
;<CONSTANT D-RECORD-ON 4>
;<CONSTANT D-RECORD-OFF -4>
<END-SEGMENT>
<BEGIN-SEGMENT STARTUP>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "ILLEGAL." 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>>
<ROUTINE V-$VERIFY ()
<COND (<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER 232>>
<TELL N ,SERIAL CR>)
(T
<INTERPRETER-ID>
<TELL "Verifying..." CR>
<COND (<VERIFY>
<TELL ,OK>)
(T
<TELL "** Bad **" CR>)>)>>
<CONSTANT SERIAL 0>
<END-SEGMENT>
<BEGIN-SEGMENT 0>
<REPLACE-DEFINITION REFRESH
<ROUTINE V-$REFRESH ("OPTIONAL" (DONT-CLEAR <>))
<COND (<EQUAL? ,P-CAN-UNDO 2> ;"called because of an UNDO"
<RESTORE-ORPHAN> ;"set up the riddle-answer orphans"
<SETG DIR-CNT 0> ;"clear the chess-piece-move table")>
<COND (<EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>
<DO-MAP>)
(<EQUAL? ,CURRENT-SPLIT ,B-SPLIT>
<DRAW-TOWER>)
(<EQUAL? ,CURRENT-SPLIT ,PBOZ-SPLIT>
<SETUP-PBOZ>)
(<EQUAL? ,CURRENT-SPLIT ,SN-SPLIT>
<SETUP-SN>)
(<EQUAL? ,CURRENT-SPLIT ,F-SPLIT>
<SETUP-FANUCCI>)
(T
<COND (.DONT-CLEAR
<INIT-SL-WITH-SPLIT ,CURRENT-SPLIT T>)
(T
<INIT-STATUS-LINE>)>
<UPDATE-STATUS-LINE>
<LOWCORE FLAGS <BAND <LOWCORE FLAGS> -5>>
<COND (<EQUAL? ,P-CAN-UNDO 2>
<TELL "[Undone.]" CR>)>)>
<RTRUE>>>
<END-SEGMENT>
<BEGIN-SEGMENT STARTUP>
;<GLOBAL DEBUG <>>
;<ROUTINE V-$DEBUG ()
<TELL "O">
<COND (,DEBUG
<SETG DEBUG <>>
<TELL "ff">)
(T
<SETG DEBUG T>
<TELL "n">)>
<TELL ,PERIOD-CR>>
;<ROUTINE V-$SKIP ()
<COND (<NOT ,PRSO>
<V-VERSION>
<CRLF>
<DEQUEUE I-PROLOGUE>
<DEQUEUE I-GIVE-OBJECT>
<DEQUEUE I-TAKE-OBJECT>
<MOVE ,PARCHMENT ,GREAT-HALL>
<MOVE ,CAULDRON ,BANQUET-HALL>
<MOVE ,STRAW ,SCULLERY>
<ROB ,PROTAGONIST>
<REMOVE ,DIMWIT>
<REMOVE ,MEGABOZ>
<MOVE ,UNOPENED-NUT ,ROOT-CELLAR>
<FCLEAR ,BANQUET-HALL ,TOUCHBIT>
<FCLEAR ,SCULLERY ,TOUCHBIT>
<FCLEAR ,KITCHEN ,TOUCHBIT>
<FCLEAR ,ROOT-CELLAR ,ONBIT>
<FCLEAR ,WINE-CELLAR ,ONBIT>
<SETG UNDER-TABLE <>>
<SETG MID-NAME-NUM <- <RANDOM 12> 1>>
<SETG DIAL-NUMBER <RANDOM 2400>>
<SETG HOLEY-SLAB <GET ,SLAB-TABLE <- <RANDOM 7> 1>>>
<MOVE ,CALENDAR ,GREAT-HALL>
<MOVE ,PROCLAMATION ,ENTRANCE-HALL>
<REMOVE ,TABLES>
<REMOVE ,BANQUET-FOOD>
<MOVE ,CROWN ,TREASURE-CHEST>
<FSET ,CROWN ,TAKEBIT>
<MOVE ,ROBE ,TRUNK>
<FSET ,ROBE ,TAKEBIT>
<GOTO ,GREAT-HALL>)
(T
<MOVE ,CANDLE ,PROTAGONIST>
<FSET ,PORTCULLIS ,OPENBIT>
<FSET ,EAST-DOOR ,OPENBIT>
<FSET ,WEST-DOOR ,OPENBIT>
<SETG NUT-EATEN T>
<SETG SECRET-PASSAGE-OPEN T>
<FSET ,DRAWBRIDGE ,OPENBIT>
<COND (<PRSO? ,CAULDRON>
<GOTO ,BANQUET-HALL>
<MOVE ,NOTEBOOK ,HERE>
<COND (<EQUAL? ,SACRED-WORD-NUMBER 10>
<SETG SACRED-WORD-NUMBER <- <RANDOM 10> 1>>)>
<MOVE ,CROWN ,HERE>
<MOVE ,SCEPTRE ,HERE>
<MOVE ,ZORKMID-BILL ,HERE>
<MOVE ,DIPLOMA ,HERE>
<FCLEAR ,DIPLOMA ,TRYTAKEBIT>
<FCLEAR ,DIPLOMA ,NDESCBIT>
<MOVE ,SILK-TIE ,HERE>
<MOVE ,STOCK-CERTIFICATE ,HERE>
<MOVE ,QUILL-PEN ,HERE>
<MOVE ,MANUSCRIPT ,HERE>
<MOVE ,VIOLIN ,HERE>
<MOVE ,METRONOME ,HERE>
<MOVE ,FAN ,HERE>
<MOVE ,FLASK ,HERE>
<MOVE ,SCREWDRIVER ,HERE>
<MOVE ,LANTERN ,HERE>
<FCLEAR ,LANTERN ,TRYTAKEBIT>
<MOVE ,SCALE-MODEL ,HERE>
<MOVE ,T-SQUARE ,HERE>
<MOVE ,BAT ,HERE>
<FCLEAR ,BAT ,TRYTAKEBIT>
<MOVE ,DUMBBELL ,HERE>
<MOVE ,LANCE ,HERE>
<MOVE ,SADDLE ,HERE>
<MOVE ,SPYGLASS ,HERE>
<FCLEAR ,SPYGLASS ,TRYTAKEBIT>
<MOVE ,SEAMANS-CAP ,HERE>
<MOVE ,EASLE ,HERE>
<MOVE ,LANDSCAPE ,HERE>)
(<PRSO? ,T-OF-B>
<GOTO ,JESTERS-QUARTERS>)
(<PRSO? ,PBOZ-OBJECT>
<GOTO ,PEG-ROOM>)
(<PRSO? ,DOUBLE-FANUCCI>
<GOTO ,CASINO>)
(<PRSO? ,HOTHOUSE>
<MOVE ,DIRIGIBLE ,SMALLER-HANGAR>
<GOTO ,HOTHOUSE>)
(<PRSO? ,REBUS>
<REMOVE ,REBUS-MOUSE>
<REMOVE ,REBUS-GOOSE>
<REMOVE ,REBUS-SLIME-MONSTER>
<REMOVE ,REBUS-CAMEL>
<REMOVE ,REBUS-SNAKE>
<REMOVE ,REBUS-FISH>
<FSET ,BASEMENT-REBUS-BUTTON ,TOUCHBIT>
<FSET ,CLOSET-REBUS-BUTTON ,TOUCHBIT>
<FSET ,CRAG-REBUS-BUTTON ,TOUCHBIT>
<FSET ,CRAWL-REBUS-BUTTON ,TOUCHBIT>
<FSET ,GROTTO-REBUS-BUTTON ,TOUCHBIT>
<FSET ,ATTIC-REBUS-BUTTON ,TOUCHBIT>
<GOTO ,GALLERY>)
(<PRSO? ,ORACLE-OBJECT>
<MOVE ,RUBY ,DEPRESSION>
<FSET ,RUBY ,NDESCBIT>
<FSET ,RUBY ,NALLBIT>
<MOVE ,AMULET ,PROTAGONIST>
<GOTO ,ORACLE>)
(T
<TELL ,HUH>)>)>>
<END-SEGMENT>
;"subtitle real verbs"
<BEGIN-SEGMENT 0>
<ROUTINE V-ALARM ()
<COND (<PRSO? ,ROOMS ,ME>
<PERFORM-PRSA ,ME>
<RTRUE>)
(<FSET? ,PRSO ,ANIMATEDBIT>
<COND (<FSET? ,PRSO ,FEMALEBIT>
<TELL "Sh">)
(T
<TELL "H">)>
<TELL "e's wide awake, or haven't you noticed..." CR>)
(T
<TELL "You're nuts." CR>)>>
;<ROUTINE V-ANAGRAM ("AUX" LEN R)
<DIROUT ,D-TABLE-ON ,SLINE>
<SET LEN <NP-LEXBEG <GET-NP ,PRSO>>>
<COND (<EQUAL? ,PRSO ,INTQUOTE>
<SET LEN <ZREST .LEN <* 2 ,LEXV-ELEMENT-SIZE-BYTES>>>)>
<SET R <NP-LEXEND <GET-NP ,PRSO>>>
<COND (<EQUAL? ,PRSO ,INTQUOTE>
<SET R <ZBACK .R ,LEXV-ELEMENT-SIZE-BYTES>>)>
<BUFFER-PRINT .LEN .R <> T>
<DIROUT ,D-TABLE-OFF>
<TELL "How about \"">
<SET LEN <GET ,SLINE 0>>
<REPEAT ()
<COND (<EQUAL? .LEN 0>
<RETURN>)>
<SET R <+ <RANDOM .LEN> 1>>
<PRINTC <GETB ,SLINE .R>>
<PUTB ,SLINE .R <GETB ,SLINE <+ .LEN 1>>>
<SET LEN <- .LEN 1>>>
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 2>
<TELL "\"? [It's not a very good anagram routine, is it?]" CR>>
;<ROUTINE V-APPLAUD ()
<TELL "\"Clap.\"" CR>>
<ROUTINE V-ASK-ABOUT ("AUX" OWINNER)
<COND (<PRSO? ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<SET OWINNER ,WINNER>
<SETG WINNER ,PRSO>
<PERFORM ,V?TELL-ABOUT ,ME ,PRSI>
<SETG WINNER .OWINNER>
<THIS-IS-IT ,PRSI>
<THIS-IS-IT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-FOR ()
<COND (<PRSO? ,BROGMOID>
<TELL ,TALK-TO-BROGMOID>)
(T
<TELL "Unsurprisingly," T ,PRSO " doesn't oblige." CR>)>>
<ROUTINE V-ASK-NO-ONE-FOR ("AUX" ACTOR)
<COND (<SET ACTOR <FIND-IN ,HERE ,ACTORBIT>>
<PERFORM ,V?ASK-FOR .ACTOR ,PRSO>
<RTRUE>)
(T
<TELL "There's no one here to ask." CR>)>>
<ROUTINE V-BEHEAD ("OPTIONAL" (CALLED-BY-V-HANG <>))
<TELL "You usually need a ">
<COND (.CALLED-BY-V-HANG
<TELL "noose">)
(T
<TELL "axe">)>
<TELL " to do this">
<COND (<AND <NOT <FSET? ,PRSO ,ACTORBIT>>
<NOT <EQUAL? ,PRSO ,ME>>>
<TELL
", and besides, it doesn't look like" T ,PRSO " even has a ">
<COND (.CALLED-BY-V-HANG
<TELL "neck">)
(T
<TELL "head">)>)>
<TELL ,PERIOD-CR>>
;<ROUTINE V-BEND ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?SPREAD>
<COND (<FSET? ,PRSO ,ACTORBIT>
<V-ENTER>)
(T
<HACK-HACK "Spreading">)>)
(T
<HACK-HACK "Bending">)>>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE V-BURN ()
<COND (<NOT ,PRSI>
<COND (<SETG PRSI <FIND-IN ,PROTAGONIST ,FLAMEBIT>>
<TELL "[with" T ,PRSI "]" CR>
<PERFORM ,V?BURN ,PRSO ,PRSI>
<RTRUE>)
(T
<TELL "Your burning gaze is insufficient." CR>
<RTRUE>)>)>
<COND (<NOT <FSET? ,PRSI ,FLAMEBIT>>
<TELL "With" A ,PRSI "??!?" CR>)
(<FSET? ,PRSO ,BURNBIT>
<TELL "Instantly," T ,PRSO " catches fire and is consumed.">
<COND (<ULTIMATELY-IN? ,PRSO>
<JIGS-UP
" Unfortunately, you were holding it at the time.">)
(T
<REMOVE ,PRSO>
<CRLF>)>)
(<PRSO? ,CANDLE>
<FSET ,CANDLE ,FLAMEBIT>
<FSET ,CANDLE ,ONBIT>
<TELL "You relight the candle." CR>)
(T
<TELL ,YOU-CANT "burn" AR ,PRSO>)>>
<ROUTINE V-BUY ()
<TELL "That's not for sale." CR>>
<ROUTINE V-CALL ()
<COND (<PRSO? ,INTQUOTE>
<V-SAY>)
(<AND <VISIBLE? ,PRSO>
<NOT <IN? ,PRSO ,GLOBAL-OBJECTS>>>
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)
(T
<DO-FIRST "invent the telephone">)>>
<ROUTINE V-CATCH ()
<COND (,PRSI
<TELL
"Sorry," T ,PRSI " isn't much help in catching" TR ,PRSO>)
(T
<TELL "The only thing you're likely to catch is a cold." CR>)>>
<ROUTINE V-CHASTISE ()
<COND (<PRSO? ,INTDIR>
<TELL
,YOULL-HAVE-TO "go in that direction to see what's there." CR>)
(T
<USE-PREPOSITIONS "LOOK " "AT" "INSIDE" "UNDER">)>>
<ROUTINE USE-PREPOSITIONS (VRB PREP1 PREP2 PREP3)
<TELL
"[Use prepositions to indicate precisely what you want to do: " .VRB .PREP1
" the object, " .VRB .PREP2 " it, " .VRB .PREP3 " it, etc.]" CR>>
;<ROUTINE V-CHEER ()
<COND (<PRSO? ,ROOMS>
<TELL ,OK>)
(T
<TELL "Probably," T ,PRSO " is as happy as possible." CR>)>>
<ROUTINE V-CLEAN ()
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 2>
<TELL "Do you also do windows?" CR>>
<ROUTINE V-CLIMB ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<AND <PRSO? ,CAMEL>
<IN? ,PROTAGONIST ,CAMEL>
<EQUAL? ,P-PRSA-WORD ,W?RIDE>>
<TELL
"[You'll have to say which direction you want to ride in.]" CR>)
(<AND <PRSO? ,INTDIR>
<VISIBLE? ,CAMEL>>
<COND (<IN? ,PROTAGONIST ,CAMEL>
<PERFORM ,V?RIDE-DIR ,CAMEL ,PRSO>
<RTRUE>)
(T
<DO-FIRST "mount" ,CAMEL>)>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?IN>
<CANT-VERB-A-PRSO "climb into">)
(T
<CANT-VERB-A-PRSO "climb onto">)>>
<ROUTINE V-CLIMB-OVER ()
<COND (<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-UP ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLOSE ()
<COND (<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,ACTORBIT>
<AND <FSET? ,PRSO ,VEHBIT>
<NOT <PRSO? ,DB ,LADDER
,IRON-MAIDEN ,SNAKE-PIT ,WATER-CHAMBER>>>>
<YOU-MUST-TELL-ME>)
(<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,CONTBIT>>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Okay," T ,PRSO " is now closed." CR>
<NOW-DARK?>)
(T
<TELL ,ALREADY-IS>)>)
(T
<YOU-MUST-TELL-ME>)>>
<ROUTINE V-COUGH ()
<COND (<AND <EQUAL? ,HERE ,ICKY-CAVE>
<NOT <IN? ,SICKLY-WITCH ,HERE>>>
<COND (,LIT
<MOVE ,SICKLY-WITCH ,HERE>
<MOVE ,PRICKLY-WITCH ,HERE>
<TELL
"Two witches appear, spraying fumigation spells throughout the cave. One
of the witches, less healthy than the other, frets, \"Oh, dear, I'm not
certain my frail body can stand all these germs!\" The other witch, less
friendly than the first, gives you a blistering glare. \"What manners! I
certainly wouldn't walk into YOUR home and start spewing phlegm around!\"">
<COND (<IN? ,JESTER ,HERE>
<REMOVE-J>
<TELL CR
" They notice the jester for the first time." ,WITCH-REMOVES-J>)
(T
<CRLF>)>)
(T
<TELL
"You hear, briefly, a sound that just might be witches disinfecting
a cave. But, in the dark, who can really tell for sure?" CR>)>)
(T
<TELL
"Hmmm. You seem to be catching a cold. [Can't say I'm surprised,
considering you spent last night sleeping on the cold stone floor
of Flatheadia castle.]" CR>)>>
<ROUTINE PRE-COUNT ()
<COND (<EQUAL? ,PRSO ,ROOMS> ;"multiple objects?"
<TELL "There are " N ,P-MULT ,PERIOD-CR>)>>
<ROUTINE V-COUNT ()
<IMPOSSIBLES>>
<ROUTINE V-CRAWL-UNDER ()
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CROSS ()
<V-WALK-AROUND>>
<ROUTINE V-CUT ()
<COND (<NOT ,PRSI>
<IMPOSSIBLES>)
(T
<TELL "Strange concept, cutting" TR ,PRSO>)>>
<ROUTINE V-DATE ()
<TELL
"\"It was on a fateful day in the year 883 GUE...\" is how poets of the
future will begin their tales of your quest. Not being a poet of the
future, you think of it as the 14th day of Mumberbur." CR>>
<ROUTINE V-DECODE ()
<TELL ,YOULL-HAVE-TO "figure it out yourself." CR>>
;<ROUTINE V-DEFLATE ()
<IMPOSSIBLES>>
<ROUTINE V-DIG ()
<COND (<PRSI? ,SHOVEL>
<COND (<NOT <PRSO? ,GROUND>>
<IMPOSSIBLES>)
(<AND <NOT <FSET? ,HERE ,OUTSIDEBIT>>
<NOT <FSET? ,HERE ,DESERTBIT>>>
<TELL "The floor is a bit harder than the shovel." CR>)
(<AND <EQUAL? ,JUMP-X ,STUMP-X>
<EQUAL? ,JUMP-Y ,STUMP-Y>
<IN? ,TREASURE-CHEST ,LOCAL-GLOBALS>>
<MOVE ,TREASURE-CHEST ,HERE>
<TELL
"You dig and dig and dig. And dig. Then, summoning hidden reserves of strength,
you dig some more. Suddenly... \"Clank.\" It's a treasure chest! With a burst
of energy you uncover it and drag it out of the hole. As you do so, the walls
of the hole collapse, filling it in, and you barely make it out alive." CR>)
(T
<TELL
"You dig a sizable hole but, finding nothing of interest, you fill it in
again out of consideration to future passersby and current gamewriters." CR>)>)
(T
<TELL "Digging with">
<COND (<ZERO? ,PRSI>
<TELL " your hands">)
(T
<TELL T ,PRSI>)>
<TELL " is slow and tedious." CR>)>>
<ROUTINE V-DIG-WITH ()
<PERFORM ,V?DIG ,GROUND ,PRSO>
<RTRUE>>
;<ROUTINE V-DRESS ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (<FSET? ,PRSO ,FEMALEBIT>
<TELL "Sh">)
(T
<TELL "H">)>
<TELL "e is dressed!" CR>)
(T
<IMPOSSIBLES>)>)
(T
<SETG PRSO ,ROOMS>
<V-GET-DRESSED>)>>
<ROUTINE V-DRINK ()
<COND (<FSET? ,PRSO ,WATERBIT>
<PERFORM-PRSA ,WATER>)
(T
<CANT-VERB-A-PRSO "drink">)>>
<ROUTINE V-DRINK-FROM ()
<COND (<FSET? ,PRSO ,WATERBIT>
<PERFORM ,V?DRINK ,WATER>
<RTRUE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-DRINK-WITH ()
<COND (<PRSI? ,STRAW>
<COND (<PRSO? ,ELIXIR>
<JIGS-UP
"After a moment of ecstasy, the elixir fries your brain. Your last sight is
of creatures crawling from unseen crevices, waiting to feast on your corpse.">)
(T
<PERFORM ,V?DRINK ,PRSO>
<RTRUE>)>)
(T
<TELL ,YOU-CANT "drink something with" AR ,PRSI>)>>
<ROUTINE V-DROP ("AUX" CHESSPIECE)
<COND (<IN? ,PRSO ,WALDO>
<COND (<EQUAL? ,HERE ,HOLD>
<MOVE ,PRSO ,HOLD>)
(T
<MOVE ,PRSO ,LAKE-BOTTOM>)>
<TELL "You release" TR ,PRSO>)
(<NOT <SPECIAL-DROP ,PRSO>>
<COND (<FSET? <LOC ,PROTAGONIST> ,DROPBIT>
<MOVE ,PRSO <LOC ,PROTAGONIST>>)
(T
<MOVE ,PRSO ,HERE>)>
<COND (<PRSO? ,LARGE-FLY ,LARGER-FLY
,EVEN-LARGER-FLY ,LARGEST-FLY>
<TELL "You release" T ,PRSO>)
(T
<TELL "Dropped">)>
<COND (<AND <OR <SET CHESSPIECE <FIND-IN ,HERE ,BLACKBIT>>
<SET CHESSPIECE <FIND-IN ,HERE ,WHITEBIT>>>
<NOT <FSET? ,PRSO ,TRYTAKEBIT>>
<NOT <FIND-IN ,PRSO ,TRYTAKEBIT>>
<NOT ,TIME-STOPPED>>
<MOVE ,PRSO .CHESSPIECE>
<TELL
". The " D .CHESSPIECE " says, \"Well what do you know? It's been a long time
since I had" A ,PRSO ".\" ">
<COND (<FSET? .CHESSPIECE ,FEMALEBIT>
<TELL "Sh">)
(T
<TELL "H">)>
<TELL "e picks it up.">
<COND (<AND <PRSO? ,PIGEON>
<NOT <EQUAL? ,HERE <META-LOC ,PERCH>>>>
<PIECE-TAKES-PIGEON .CHESSPIECE>)
(T
<CRLF>)>)
(<AND <PRSO? ,BAR-OF-FOOD>
<IN? ,FLAMINGO ,HERE>>
<TELL
". The flamingo eyes the food, but appears to be too well-mannered to
eat something that hasn't been offered." CR>)
(T
<TELL ,PERIOD-CR>)>)>>
<ROUTINE SPECIAL-DROP (OBJ "OPT" (CALLED-BY-ROB <>)) ;"else drop or throw"
<COND (<AND <EQUAL? ,HERE ,OUBLIETTE>
<G? <GETP .OBJ ,P?SIZE> 4>>
<REMOVE .OBJ>
<COND (<OR <EQUAL? .OBJ ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,OUBLIETTE>)>
<COND (<NOT .CALLED-BY-ROB>
<TELL
"With a gentle slurping noise," T ,PRSO " vanishes slowly into the mud." CR>
<NOW-DARK?>)>
<RTRUE>)
(<EQUAL? ,HERE ,UNDER-THE-WORLD ,HANGING-FROM-ROOTS>
<REMOVE .OBJ>
<COND (<OR <EQUAL? .OBJ ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,BROGMOID>)>
<COND (<NOT .CALLED-BY-ROB>
<TELL
"As you release" T ,PRSO ", it dwindles into the mist and is gone
from this world forever." CR>)>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-INGEST ()
<COND (<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>>
<TELL
"You've turned into" A ,TURNED-INTO ", and as a consequence don't have much
in the way of a mouth." CR>)>>
<ROUTINE V-EAT ()
<TELL "It's not likely that" T ,PRSO " would agree with you." CR>>
<ROUTINE V-EMPTY ("AUX" OBJ NXT)
<COND (<NOT ,PRSI>
<SETG PRSI ,GROUND>)>
<COND (<NOT <FSET? ,PRSO ,CONTBIT>>
<TELL ,HUH>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "But" T ,PRSO " isn't open." CR>)
(<NOT <FIRST? ,PRSO>>
<TELL "But" T ,PRSO " is already empty!" CR>)
(<AND <PRSI? <FIRST? ,PRSO>>
<NOT <NEXT? ,PRSI>>>
<TELL ,THERES-NOTHING "in" T ,PRSO " but" TR ,PRSI>)
(T
<SET OBJ <FIRST? ,PRSO>>
<REPEAT ()
<SET NXT <NEXT? .OBJ>>
<COND (<NOT <EQUAL? .OBJ ,PROTAGONIST>>
<TELL D .OBJ ": ">
<COND (<FSET? .OBJ ,TAKEBIT>
<MOVE .OBJ ,PROTAGONIST>
<COND (<PRSI? ,HANDS>
<TELL "You take" TR .OBJ>)
(<PRSI? ,GROUND>
<PERFORM ,V?DROP .OBJ>)
(<FSET? ,PRSI ,SURFACEBIT>
<PERFORM ,V?PUT-ON .OBJ ,PRSI>)
(T
<PERFORM ,V?PUT .OBJ ,PRSI>)>)
(T
<YUKS>)>)>
<COND (.NXT
<SET OBJ .NXT>)
(T
<RETURN>)>>)>>
<ROUTINE V-EMPTY-FROM ()
<COND (<IN? ,PRSO ,PRSI>
<COND (<FSET? ,PRSO ,TAKEBIT>
<MOVE ,PRSO ,PROTAGONIST>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(T
<YUKS>)>)
(T
<NOT-IN>)>>
<ROUTINE PRE-ENTER ()
<COND (<IN? ,PROTAGONIST ,PRSO>
<TELL ,LOOK-AROUND>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)
(<AND <FSET? ,PRSO ,VEHBIT>
<NOT <IN? ,PRSO ,HERE>>>
<TELL
"You'll have to remove" T ,PRSO " from" T <LOC ,PRSO> " first." CR>)>>
<ROUTINE V-ENTER ("AUX" DIR)
<COND (<PRSO? ,INTDIR> ;"for example, ENTER EAST"
<DO-WALK <DIRECTION-CONVERSION>>)
(<FSET? ,PRSO ,WATERBIT>
<PERFORM-PRSA ,WATER>)
(<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>
<RTRUE>)
(<FSET? ,PRSO ,VEHBIT>
<COND (<NOT <EQUAL? <LOC ,PRSO> ,HERE ,LOCAL-GLOBALS>>
<TELL ,YOU-CANT "board" T ,PRSO " when it's ">
<COND (<FSET? <LOC ,PRSO> ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL TR <LOC ,PRSO>>)
(T
<MOVE ,PROTAGONIST ,PRSO>
<SETG OLD-HERE <>>
<TELL "You are now ">
<COND (<PRSO? ,CARD-TABLE>
<TELL "sitting at">)
(<FSET? ,PRSO ,INBIT>
<TELL "in">)
(T
<TELL "on">)>
<TELL T ,PRSO ".">
<COND (<NOT <APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>>
<CRLF>)>
<FSET ,PRSO ,TOUCHBIT>)>)
(<IN? ,PRSO ,ROOMS>
<COND (<SET DIR <FIND-NEXT-ROOM>>
<DO-WALK .DIR>)
(T
<V-WALK-AROUND>)>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?IN>
<CANT-VERB-A-PRSO "get into">)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?ON>
<CANT-VERB-A-PRSO "get onto">)
(T
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 2>
<TELL
"You have a theory on how to board" A ,PRSO ", perhaps?" CR>)>>
<ROUTINE FIND-NEXT-ROOM ("AUX" PT PTS (DIR 0) ;(CNT 0))
<REPEAT ()
<SET DIR <NEXTP ,HERE .DIR>>
<COND (<OR <ZERO? .DIR>
<L? .DIR ,LOW-DIRECTION>>
;<EQUAL? .CNT 10>
<RETURN <>>)>
;<SET DIR <GET ,DIRECTION-TABLE .CNT>>
<COND (<SET PT <GETPT ,HERE .DIR>>
<SET PTS <PTSIZE .PT>>
<COND (<EQUAL? .PTS ,UEXIT ,CEXIT>
<COND (<EQUAL? <GETB .PT ,REXIT> ,PRSO>
<RETURN .DIR>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<EQUAL? <GETB .PT ,DEXITRM> ,PRSO>
<RETURN .DIR>)>)>)>
;<SET CNT <+ .CNT 1>>>>
;<CONSTANT DIRECTION-TABLE
<TABLE ,P?NORTH
,P?NE
,P?EAST
,P?SE
,P?SOUTH
,P?SW
,P?WEST
,P?NW
,P?UP
,P?DOWN>>
<ROUTINE V-EXAMINE ()
<COND (<AND ,PRSI
<NOT <FSET? ,PRSI ,TRANSBIT>>>
<IMPOSSIBLES>)
(<FSET? ,PRSO ,ACTORBIT>
<COND (<FIRST? ,PRSO>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(T
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)>)
(<FSET? ,PRSO ,SURFACEBIT>
<V-LOOK-INSIDE>)
(<FSET? ,PRSO ,DOORBIT>
<TELL ,IT-SEEMS-THAT T ,PRSO " is ">
<OPEN-CLOSED ,PRSO>
<TELL ,PERIOD-CR>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<OR <FSET? ,PRSO ,OPENBIT>
<FSET? ,GOGGLES ,WORNBIT>>
<V-LOOK-INSIDE>)
(T
<TELL "It's closed.">
<COND (<AND <FSET? ,PRSO ,TRANSBIT>
<FIRST? ,PRSO>>
<TELL " ">
<V-LOOK-INSIDE>)
(T
<CRLF>)>)>)
(<FSET? ,PRSO ,LIGHTBIT>
<TELL "It's o">
<COND (<FSET? ,PRSO ,ONBIT>
<TELL "n">)
(T
<TELL "ff">)>
<TELL ,PERIOD-CR>)
(<FSET? ,PRSO ,READBIT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(<IN? ,PRSO ,ROOMS>
<TELL "You can't see much from here." CR>)
(<FSET? ,PRSO ,NARTICLEBIT>
<SENSE-OBJECT "look">)
(<PROB 25>
<TELL "Totally ordinary looking " D ,PRSO ,PERIOD-CR>)
(<OR <PROB 60>
<FSET? ,PRSO ,PLURALBIT>
<PRSO? ,GROUND>>
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)
(T
<PRONOUN>
<TELL " look">
<COND (<AND <NOT <FSET? ,PRSO ,PLURALBIT>>
<NOT <PRSO? ,ME>>>
<TELL "s">)>
<TELL " like every other " D ,PRSO " you've ever seen." CR>)>>
<ROUTINE NOTHING-INTERESTING ()
<TELL ,THERES-NOTHING>
<COND (<PROB 25>
<TELL "unusual">)
(<PROB 33>
<TELL "noteworthy">)
(<PROB 50>
<TELL "eye-catching">)
(T
<TELL "special">)>
<TELL " ">>
<ROUTINE V-EXIT ()
<COND (<OR <NOT ,PRSO>
<PRSO? ,ROOMS>>
<COND (<NOT <IN? ,PROTAGONIST ,HERE>>
<PERFORM ,V?EXIT <LOC ,PROTAGONIST>>
<RTRUE>)
(,UNDER-TABLE
<V-STAND>)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?DOWN>
<TELL "You're not on anything." CR>)
(T
<DO-WALK ,P?OUT>)>)
(<EQUAL? ,P-PRSA-WORD ,W?TAKE> ;"since GET OUT is also TAKE OUT"
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<AND ,UNDER-TABLE
<OR <NOT ,PRSO>
<PRSO? ,TABLES>>>
<V-STAND>)
(<NOT <IN? ,PROTAGONIST ,PRSO>>
<SETG P-CONT -1> ;<RFATAL>
<TELL ,LOOK-AROUND>)
(<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>
<NOT <EQUAL? ,TURNED-INTO ,LITTLE-FUNGUS>>>
<V-SKIP>)
(T
<MOVE ,PROTAGONIST ,HERE>
<SETG OLD-HERE <>>
<TELL "You get ">
<COND (<PRSO? ,CARD-TABLE>
<TELL "up from">)
(<FSET? ,PRSO ,INBIT>
<TELL "out of">)
(T
<TELL "off">)>
<TELL T ,PRSO ".">
<CRLF>)>>
<ROUTINE V-FEED ()
<TELL "You have no food for" TR ,PRSO>>
<ROUTINE PRE-FILL ()
<COND (,PRSI
<RFALSE>)
(<FIND-WATER>
<SETG PRSI ,WATER>
<RFALSE>)
(<AND <VISIBLE? ,LARGE-VIAL-WATER>
<VISIBLE? ,SMALL-VIAL-WATER>>
<COND (<PRSO? ,SMALL-VIAL>
<PERFORM ,V?EMPTY ,LARGE-VIAL ,SMALL-VIAL>
<RTRUE>)
(<PRSO? ,LARGE-VIAL>
<PERFORM ,V?EMPTY ,SMALL-VIAL ,LARGE-VIAL>
<RTRUE>)
(T
<TELL
"[You'll have to specify which water you mean, the large vial
or the small vial.]" CR>)>)
(<VISIBLE? ,LARGE-VIAL-WATER>
<PERFORM ,V?EMPTY ,LARGE-VIAL ,PRSO>
<RTRUE>)
(<VISIBLE? ,SMALL-VIAL-WATER>
<PERFORM ,V?EMPTY ,SMALL-VIAL ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?FILL ,PRSO ,WATER>
<RTRUE>)>>
<ROUTINE V-FILL ()
<COND (<FSET? ,PRSI ,WATERBIT>
<PERFORM-PRSA ,PRSO ,WATER>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
<COND (<NOT .L>
<PRONOUN>
<TELL " could be anywhere!" CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "You have it!" CR>)
(<IN? ,PRSO ,HERE>
<TELL "Right in front of you." CR>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<GLOBAL-IN? ,PRSO ,HERE>>
<V-DECODE>)
(<AND <FSET? .L ,ACTORBIT>
<VISIBLE? .L>>
<TELL "Looks as if" T .L " has it." CR>)
(<AND <FSET? .L ,CONTBIT>
<VISIBLE? ,PRSO>
<NOT <IN? .L ,GLOBAL-OBJECTS>>>
<COND (<FSET? .L ,SURFACEBIT>
<TELL "O">)
(<AND <FSET? .L ,VEHBIT>
<NOT <FSET? .L ,INBIT>>>
<TELL "O">)
(T
<TELL "I">)>
<TELL "n" TR .L>)
(T
<V-DECODE>)>>
<ROUTINE V-FLY ()
<COND (<OR <NOT ,PRSO>
<PRSO? ,INTDIR>>
<COND (,TURNED-INTO
<COND (<EQUAL? ,TURNED-INTO ,PIGEON
,ROOSTER ,FLAMINGO ,EVEN-LARGER-FLY
,LARGE-FLY ,LARGEST-FLY ,LARGER-FLY>
<MOVE ,PROTAGONIST ,HERE>
<TELL
"You make a few awkward circuits of the room, bouncing
into several walls. (Ouch.)" CR>)
(T
<TELL
"Despite what you may have learned in school," A ,TURNED-INTO " is no
more capable of flight than a human." CR>)>)
(T
<TELL
"Humans are not usually equipped for flying." CR>)>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-FOLLOW ()
<COND (<VISIBLE? ,PRSO>
<TELL "But" T-IS-ARE ,PRSO "right here!" CR>)
(<NOT <FSET? ,PRSO ,ACTORBIT>>
<IMPOSSIBLES>)
(T
<TELL "You have no idea where" T ,PRSO>
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL " are">)
(T
<TELL " is">)>
<TELL ,PERIOD-CR>)>>
;<GLOBAL FOLLOW-FLAG <>>
;<ROUTINE I-FOLLOW ()
<SETG FOLLOW-FLAG <>>
<RFALSE>>
<ROUTINE PRE-GIVE ()
<COND (<AND <VERB? GIVE>
<PRSO? ,HANDS>>
<PERFORM ,V?SHAKE-WITH ,PRSI>
<RTRUE>)
(<PRSO? ,EYES>
<PRE-SWITCH>
<PERFORM ,V?EXAMINE ,PRSI ,EYES>
<RTRUE>)
;(<AND <EQUAL? ,P-PRSA-WORD ,W?FEED>
<NOT <FSET? ,PRSO ,FOODBIT>>>
<TELL "That's not food!" CR>)
(<IDROP>
<RTRUE>)>>
<ROUTINE V-GET-NEAR ()
<WASTES>>
<ROUTINE V-GIVE ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<TELL "Briskly," T ,PRSI " refuse">
<COND (<NOT <FSET? ,PRSI ,PLURALBIT>>
<TELL "s">)>
<TELL " your offer." CR>)
(T
<TELL ,YOU-CANT "give" A ,PRSO " to" A ,PRSI "!" CR>)>>
<ROUTINE V-GIVE-UP ()
<COND (<PRSO? ,ROOMS>
<V-QUIT>)
(T
<RECOGNIZE>)>>
<ROUTINE V-HANG ()
<V-BEHEAD T>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<TELL
"[The proper way to talk to characters in the story is PERSON, HELLO.">
<COND (<PRSO? ,SAILOR>
<TELL " Besides, nothing happens here.">)>
<TELL "]" CR>)
(T
<PERFORM ,V?TELL ,ME>
<RTRUE>)>>
<ROUTINE V-HIDE ()
<TELL ,YOU-CANT "hide ">
<COND (,PRSO
<TELL "t">)>
<TELL "here." CR>>
<END-SEGMENT>
<BEGIN-SEGMENT HINTS>
<GLOBAL HINTS-OFF:NUMBER -1>
<GLOBAL HINT-COUNTER 0>
<ROUTINE V-HINT ()
<COND (<EQUAL? ,HINTS-OFF -1>
<SETG HINTS-OFF 0>
<TELL
"Warning: We strongly recommend that you not use hints unless you're definitely
stuck. Peeking at hints prematurely will invariably make you enjoy
the story less. If you want to avoid reading any hints for the rest of this
session, you may at any time during the story type HINTS OFF. Do you still
want a hint? (Y or N) >">
<COND (<NOT <Y?>>
<RFATAL>)>)
(,HINTS-OFF
<PERFORM ,V?HINTS-NO ,ROOMS>
<RFATAL>)>
<SETG HINT-COUNTER <+ ,HINT-COUNTER 1>>
<COND (<AND <G? ,HINT-COUNTER 0>
<EQUAL? <MOD ,HINT-COUNTER 5> 0>>
<TELL "You're looking at the hints ">
<HLIGHT ,H-BOLD>
<TELL "again">
<HLIGHT ,H-NORMAL>
<TELL
"?!! Even Lord Dimwit Flathead would consider that excessive!
Do you really want to be such a wimp? (Y or N) >">
<COND (<NOT <Y?>>
<RFATAL>)>)>
<DO-HINTS>>
<REPLACE-DEFINITION INIT-HINT-SCREEN
<ROUTINE INIT-HINT-SCREEN ()
<CLEAR -1>
<SCREEN ,S-FULL>
<COND (,BORDER-ON
<DISPLAY ,HINT-BORDER 1 1>)>
<SPLIT-BY-PICTURE ,TEXT-WINDOW-PIC-LOC>
<SCREEN ,S-TEXT>
,S-WINDOW>>
<END-SEGMENT>
<BEGIN-SEGMENT 0>
<ROUTINE V-HINTS-NO ()
<COND (<NOT <PRSO? ,ROOMS>>
<RECOGNIZE>
<RTRUE>)
(,HINTS-OFF
<TELL "[You've already deactivated">)
(T
<SETG HINTS-OFF T>
<TELL "[Okay, you will no longer have access to">)>
<TELL " help in this session.]" CR>>
<ROUTINE V-IN ()
<DO-WALK ,P?IN>>
<ROUTINE V-INFLATE ()
<IMPOSSIBLES>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking">>
<ROUTINE V-KILL ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Trying to kill" A ,PRSO " with">
<COND (,PRSI
<TELL A ,PRSI>)
(T
<TELL " your bare hands">)>
<TELL " is suicidal." CR>)
(T
<TELL "How strange, fighting" A ,PRSO "!" CR>)>>
<ROUTINE V-KISS ()
<TELL "I'd sooner kiss a pig." CR>>
;<ROUTINE V-KNEEL ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?BOW>
<TELL "You begin to get a sore waist." CR>)
(T
<TELL "You begin to get a sore knee." CR>)>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "Nobody's home." CR>)
(T
<HACK-HACK "Knocking on">)>>
;<ROUTINE V-LAND ()
<COND (<AND <NOT ,PRSO>
<EQUAL? <LOC ,PROTAGONIST> ,RAFT ,BARGE>>
<PERFORM-PRSA <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<TELL ,HUH>)>>
<ROUTINE V-LEAD-TO ()
<COND (<AND <PRSO? ,CAMEL>
<PRSI? ,WATER>
<FSET? ,CAMEL ,ANIMATEDBIT>>
<COND (<NOT ,CAMEL-THIRSTY>
<PERFORM ,V?EXAMINE ,CAMEL>
<RTRUE>)
(T ;<EQUAL? ,HERE ,SOUTH-SHORE>
<TELL
"The camel takes the tiniest sip of lake water, snorts with disgust, and
spits it right out." CR>)>)
(T
<TELL
"It doesn't look like you'll be leading" T ,PRSO " anywhere, let alone
to" TR ,PRSI>)>>
<ROUTINE V-LEAP ()
<COND (<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>
<NOT <EQUAL? ,TURNED-INTO ,LITTLE-FUNGUS>>>
<V-SKIP>)
(<OR <PRSO? ,ROOMS>
<NOT ,PRSO>>
<COND (<AND <EQUAL? ,HERE ,GONDOLA>
<G? ,DIRIGIBLE-COUNTER 0>>
<DO-WALK ,P?OUT>)
(<EQUAL? ,HERE ,HANGING-FROM-ROOTS
,UNDER-THE-WORLD ,SHOULDER>
<JIGS-UP
"You sail down through the mist for a seemingly endless time, passing giant
brogmoid shoulders, hips, and knees. Eventually, the mist begins to thin, and
you see a strange land below: Purple forests surround lakes of molten rock.
Volcanoes belch green-blue smoke into the sky. Enormous slug-shaped creatures,
a bloit long, engage in fierce combat. Suddenly, the feeling of floating
endlessly changes to a feeling of falling very quickly, and this strange new
world rushes up and smashes you to pulp.">)
(<JUMPLOSS>
<RTRUE>)
(<EQUAL? ,HERE ,MEGABOZ-HUT>
<COND (<IN? ,PROTAGONIST ,LADDER>
<TELL
"You don't need to. Thanks to the ladder, you can easily make it
through the trap door." CR>)
(T
<TELL
"Your best jump leaves you far short of the trap door." CR>)>)
(T
<V-SKIP>)>)
(<PRSO? ,INTDIR>
<COND (<AND <EQUAL? ,HERE ,OUTER-BAILEY>
<NOT <EQUAL? ,JUMP-X 99>>
<OR <NOUN-USED? ,INTDIR ,W?SOUTH ,W?NORTH>
<NOUN-USED? ,INTDIR ,W?EAST ,W?WEST>>>
<COND (<NOUN-USED? ,INTDIR ,W?NORTH>
<SETG JUMP-Y <+ ,JUMP-Y 1>>)
(<NOUN-USED? ,INTDIR ,W?SOUTH>
<SETG JUMP-Y <- ,JUMP-Y 1>>)
(<NOUN-USED? ,INTDIR ,W?EAST>
<SETG JUMP-X <+ ,JUMP-X 1>>)
(T
<SETG JUMP-X <- ,JUMP-X 1>>)>)
(T
<SETG JUMP-X 99>
<SETG JUMP-Y 99>)>
<COND (<IN? ,PROTAGONIST ,TREE-STUMP>
<SETG OLD-HERE <>>
<MOVE ,PROTAGONIST ,HERE>)>
<TELL "You jump once in that direction." CR>)
(<NOT <IN? ,PRSO ,HERE>>
<IMPOSSIBLES>)
(<JUMPLOSS>
<RTRUE>)
(T
<V-SKIP>)>>
<ROUTINE JUMPLOSS ()
<COND (<EQUAL? ,HERE ,PARAPET ,UPPER-LEDGE ,LOWER-LEDGE
,G-U-MOUNTAIN ,BALCONY ,ROOF ,QUARRYS-EDGE>
<COND (<PROB 33>
<TELL "Geronimo">)
(<PROB 50>
<TELL "You should have looked before you leapt">)
(T
<TELL "This was not a very good place to try jumping">)>
<JIGS-UP "!">)
(T
<RFALSE>)>>
<ROUTINE V-LEAP-OFF ()
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?EXIT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?LEAP ,PRSO>
<RTRUE>)>>
<ROUTINE V-LEAVE ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?OUT>)
(<IN? ,PROTAGONIST ,PRSO>
<PERFORM ,V?EXIT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>>
<ROUTINE V-LET-OUT ()
<TELL "But" T ,PRSO " isn't all that confined." CR>>
;<ROUTINE V-LICK ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TASTE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LIE-DOWN ()
<COND (<IN? ,BEDBUG ,HERE>
<TELL "You curl up for a moment. ">
<REMOVE-BEDBUG "see">)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<AND <PRSO? ,ROOMS>
<EQUAL? ,HERE ,DIMWITS-ROOM>>
<PERFORM ,V?ENTER ,DIMWITS-BED>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE PRE-LISTEN ()
<COND (,TIME-STOPPED
<TELL "Unremitting silence." CR>)
(<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>>
<SETG P-CONT -1>
<TO-SPEAK-OF "ears">)>>
<ROUTINE V-LISTEN ("AUX" PLANT)
<COND (,PRSO
<SENSE-OBJECT "sound">)
(<AND <EQUAL? ,HERE ,TORTURE-CHAMBER>
<FSET? ,METRONOME ,TRYTAKEBIT>
<G? ,METRONOME-COUNTER 0>>
<METRONOME-TORTURE>)
(<AND <VISIBLE? ,METRONOME>
,METRONOME-ON>
<QUEUE I-METRONOME 2>
<I-METRONOME T>)
(<AND <SET PLANT <FIND-IN ,HERE ,PLANTBIT>>
,PLANT-TALKER>
<TELL "[to" T .PLANT "]" CR>
<PERFORM-PRSA .PLANT>)
(T
<TELL "You hear nothing of interest." CR>)>>
<ROUTINE PRE-LOCK ("AUX" KEY)
<COND (<NOT ,PRSI>
<COND (<SET KEY <FIND-IN ,PROTAGONIST ,KEYBIT>>
<SETG PRSI .KEY>
<TELL "[with" T .KEY "]" CR>
<RFALSE>)
(T
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 2>
<TELL "What? With your nose?" CR>)>)>>
<ROUTINE V-LOCK ("AUX" KEY)
<COND (<FSET? ,PRSO ,LOCKEDBIT>
<TELL ,ALREADY-IS>)
(<OR <FSET? ,PRSO ,DOORBIT>
<PRSO? ,TRUNK>>
<TELL "Unfortunately," T ,PRSI " doesn't lock" TR ,PRSO>)
(T
<TELL ,YOU-CANT "lock" AR ,PRSO>)>>
<ROUTINE PRE-LOOK ()
<COND (<NOT ,LIT>
<TELL ,TOO-DARK CR>)
(<AND <VERB? READ>
,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>>
<SETG P-CONT -1>
<TO-SPEAK-OF "eyes">)
(<AND <VERB? READ>
<UNTOUCHABLE? ,PRSO>
<FSET? ,PRSO ,TAKEBIT>>
<TELL ,YNH TR ,PRSO>)>>
<ROUTINE V-LOOK ()
<COND (<D-ROOM T>
<D-OBJECTS>)>
<RTRUE>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>
<TELL "There is nothing behind" TR ,PRSO>>
<ROUTINE V-LOOK-DOWN ()
<COND (<PRSO? ,ROOMS>
<COND (<EQUAL? ,HERE ,HANGING-FROM-ROOTS ,UNDER-THE-WORLD>
<V-LOOK>)
(T
<PERFORM ,V?EXAMINE ,GROUND>
<RTRUE>)>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOOK-INSIDE ("AUX" (X-RAYED <>))
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL ,IT-SEEMS-THAT T ,PRSO " has">
<COND (<NOT <D-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<D-VEHICLE>)
(<FSET? ,PRSO ,DOORBIT>
<TELL "All you can tell is that" T ,PRSO " is ">
<OPEN-CLOSED ,PRSO>
<TELL ,PERIOD-CR>)
;(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?OUT ,W?OUTSIDE>
<TELL "You see nothing special." CR>)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?OUT>
<TELL "You see nothing special." CR>)
(<FSET? ,PRSO ,SURFACEBIT>
<TELL "On the surface of" T ,PRSO " you see">
<COND (<NOT <D-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(<AND <FSET? ,PRSO ,VEHBIT>
<NOT <FIRST? ,PRSO>>>
;"if you're in it, it's handled above"
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
<DO-FIRST "open" ,PRSO>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<NOT <FSET? ,PRSO ,TRANSBIT>>
<FSET? ,GOGGLES ,WORNBIT>>
<SET X-RAYED T>
<DISCOVER-X-RAY>)>
<TELL "There is no one ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" TR ,PRSO>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<NOT <FSET? ,PRSO ,TRANSBIT>>
<FSET? ,GOGGLES ,WORNBIT>>
<SET X-RAYED T>
<DISCOVER-X-RAY>)>
<COND (<SEE-INSIDE? ,PRSO>
<TELL "Within" T ,PRSO " you see">
<COND (<NOT <D-NOTHING>>
<TELL ,PERIOD-CR>)>
<COND (.X-RAYED
<TELL
" After a moment, the power of the goggles wanes, and" T ,PRSO " no
longer seems transparent." CR>)>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FIRST? ,PRSO>
<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?IN>
;<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN ;,PR?INSIDE>>
<COND (<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>
<RTRUE>)>
<PERFORM ,V?OPEN ,PRSO>
<RTRUE>)
(T
<DO-FIRST "open" ,PRSO>)>)
;(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN ;,PR?INSIDE>
<CANT-VERB-A-PRSO "look inside">)
(<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?IN>
<CANT-VERB-A-PRSO "look inside">)
(T
<CANT-VERB-A-PRSO "look through">)>>
<ROUTINE V-LOOK-OVER ()
<V-EXAMINE>>
<ROUTINE V-LOOK-UNDER ()
<COND (<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,WALDO>>
<NOT <IN? ,PRSO ,WALDO>>>
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL ,WEARING-IT>)
(T
<TELL ,HOLDING-IT>)>)
(<FSET? ,PRSO ,WATERBIT>
<PERFORM-PRSA ,WATER>)
(T
<TELL "There is nothing but ">
<COND (<IN? ,PRSO ,MIRROR-LAKE>
<TELL "ice">)
(<FSET? <LOC ,PRSO> ,DELTABIT>
<TELL "swamp">)
(<OR <PRSO? ,NORTH-DOCK ,SOUTH-DOCK ,EAST-DOCK ,WEST-DOCK
,YACHT ,WHARF ,BRIDGE>
<AND <OR <PRSO? ,DRAWBRIDGE>
<AND <PRSO? ,GLOBAL-HERE>
<EQUAL? ,HERE ,DRAWBRIDGE>>>
<FSET? ,DRAWBRIDGE ,OPENBIT>>
<AND <EQUAL? ,HERE ,LAKE-BOTTOM>
<IN? ,PRSO ,HERE>>
<AND <PRSO? ,WALDO ,DB>
<NOT <EQUAL? ,HERE ,HOLD>>>
<AND <IN? ,PRSO ,WALDO>
<NOT <EQUAL? ,HERE ,HOLD>>>
<IN? ,PRSO ,FISH-TANK>>
<TELL "water">)
(T
<TELL "dust">)>
<TELL " there." CR>)>>
;<ROUTINE V-LOVE ()
<TELL "Not difficult, considering how lovable" T ,PRSO " ">
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "are">)
(T
<TELL "is">)>
<TELL ,PERIOD-CR>>
<ROUTINE V-LOWER ()
<V-RAISE>>
;<ROUTINE V-MAKE ()
<TELL ,YOU-CANT "just make" A ,PRSO " out of thin air." CR>>
;<ROUTINE V-MAKE-WITH ()
<PERFORM ,V?SET ,PRSI ,PRSO>
<RTRUE>>
<GLOBAL MAP-NOTE <>>
<GLOBAL CHANGED-MAP-WARNING <>>
<CONSTANT MAIN-MAP-NUM 1>
<CONSTANT SECRET-WING-MAP-NUM 2>
<CONSTANT VILLAGE-MAP-NUM 3>
<CONSTANT LOWER-LEVEL-MAP-NUM 4>
<CONSTANT LAKE-MAP-NUM 5>
<CONSTANT DESERT-MAP-NUM 6>
<CONSTANT FOOZLE-MAP-NUM 7>
<CONSTANT FENSHIRE-MAP-NUM 8>
<CONSTANT FJORD-MAP-NUM 9>
<CONSTANT GRAY-MOUNTAINS-MAP-NUM 10>
<CONSTANT DELTA-MAP-NUM 11>
<CONSTANT FUBLIO-MAP-NUM 12>
<CONSTANT ANTHARIA-MAP-NUM 13>
<GLOBAL MAP-TOP-LEFT-X 0>
<GLOBAL MAP-TOP-LEFT-Y 0>
<GLOBAL MAP-ELEMENT-WIDTH 0>
<GLOBAL MAP-ELEMENT-HEIGHT 0>
<GLOBAL MAP-BOX-WIDTH 0>
<GLOBAL MAP-BOX-HEIGHT 0>
<GLOBAL MAP-SPACE-WIDTH 0>
<GLOBAL MAP-SPACE-HEIGHT 0>
<CONSTANT MAP-GEN-X-1 0>
<CONSTANT MAP-GEN-X-2 -1>
<CONSTANT MAP-GEN-X-3 -2>
<CONSTANT MAP-GEN-X-4 -3>
<CONSTANT MAP-GEN-X-5 -4>
<CONSTANT MAP-GEN-X-6 -5>
<CONSTANT MAP-GEN-X-7 -6>
<CONSTANT MAP-GEN-X-8 -7>
<CONSTANT MAP-GEN-X-9 -8>
<CONSTANT MAP-GEN-X-10 -9>
<CONSTANT MAP-GEN-X-11 -10>
<CONSTANT MAP-GEN-Y-1 0>
<CONSTANT MAP-GEN-Y-2 -1>
<CONSTANT MAP-GEN-Y-3 -2>
<CONSTANT MAP-GEN-Y-4 -3>
<CONSTANT MAP-GEN-Y-5 -4>
<CONSTANT MAP-GEN-Y-6 -5>
<CONSTANT MAP-GEN-Y-7 -6>
<CONSTANT MAP-PICSET-TBL
<TABLE ICONLESS-ROOM-BOX
YOU-ARE-HERE-SYMBOL
N-S-CON
E-W-CON
NE-SW-CON
NW-SE-CON
MAP-N-HL
MAP-NE-HL
MAP-E-HL
MAP-SE-HL
MAP-S-HL
MAP-SW-HL
MAP-W-HL
MAP-NW-HL
MAP-N-UNHL
MAP-NE-UNHL
MAP-E-UNHL
MAP-SE-UNHL
MAP-S-UNHL
MAP-SW-UNHL
MAP-W-UNHL
MAP-NW-UNHL
;"stuff room icons in these 20 slots, ending with a zero"
<> <> <> <> <>
<> <> <> <> <>
<> <> <> <> <>
<> <> <> <> <> >>
<CONSTANT MAIN-ICON-TBL
<LTABLE GONDOLA-ICON
PEG-ROOM-ICON
WEST-WING-ICON
GYM-ICON
TORCH-ROOM-ICON
ROOF-ICON
PARLOR-ICON
FORMAL-GARDEN-ICON
BALCONY-ICON
GALLERY-ICON
THRONE-ROOM-ICON
BANQUET-HALL-ICON
KITCHEN-ICON
WINE-CELLAR-ICON
LIBRARY-ICON
EAST-WING-ICON
CHAPEL-ICON
J-QUARTER-ICON
PYRAMID-ICON
0>>
<CONSTANT SECRET-WING-ICON-TBL
<LTABLE DIMWITS-ROOM-ICON
MAGIC-CLOSET-ICON
PARAPET-ICON
BASTION-ICON
SECRET-PASSAGE-ICON
TEE-ICON
TOP-OF-STAIR-ICON
BOTTOM-OF-STAIR-ICON
ORACLE-ICON
DUNGEON-ICON
CELL-ICON
0>>
<CONSTANT VILLAGE-ICON-TBL
<LTABLE PERIMETER-WALL-ICON
GARRISON-ICON
OUTER-BAILEY-ICON
DRAWBRIDGE-ICON
BARBICAN-ICON
UPPER-BARBICAN-ICON
CAUSEWAY-ICON
INNER-BAILEY-ICON
URS-OFFICE-ICON
SHADY-PARK-ICON
CHURCH-ICON
COURTROOM-ICON
POST-OFFICE-ICON
FR-HQ-ICON
MAGIC-SHOP-ICON
BACK-ALLEY-ICON
OFFICES-ICON
PENTHOUSE-ICON
0>>
<CONSTANT LOWER-LEVEL-ICON-TBL
<LTABLE ROOTS-ICON
EAR-ICON
MOUTH-OF-CAVE-ICON
LEDGE-IN-PIT-ICON
PASSAGE-STORAGE-ICON
VAULT-ICON
G-U-HIGHWAY-ICON
EXIT-ICON
KENNELS-ICON
ROYAL-ZOO-ICON
LABORATORY-ICON
0>>
<CONSTANT LAKE-ICON-TBL
<LTABLE HOLD-ICON
UNDERWATER-ICON
LAKE-BOTTOM-ICON
EAST-SHORE-ICON
WEST-SHORE-ICON
NORTH-SHORE-ICON
SOUTH-SHORE-ICON
LAKE-FLATHEAD-ICON
RING-OF-DUNES-ICON
G-U-SAVANNAH-ICON
BATS-LAIR-ICON
BASE-OF-MT-ICON
G-U-MOUNTAIN-ICON
STABLE-ICON
SHRINE-ICON
0>>
<CONSTANT DESERT-ICON-TBL
<LTABLE CACTUS-PATCH-ICON
TALL-DUNES-ICON
G-U-OASIS-ICON
0>>
<CONSTANT FOOZLE-ICON-TBL
<LTABLE WHARF-ICON
FISHING-VILLAGE-ICON
QUILBOZZA-BEACH-ICON
WARNING-ROOM-ICON
FISHY-ODOR-ICON
ROOM-OF-3-DOORS-ICON
FORK-ICON
WISHYFOO-ICON
REST-STOP-ICON
CROSSROADS-ICON
TOLL-PLAZA-ICON
FISSURES-EDGE-ICON
ORB-ROOM-ICON
0>>
<CONSTANT FENSHIRE-ICON-TBL
<LTABLE GONDOLA-ICON
RUINED-HALL-ICON
SECRET-ROOM-ICON
HOTHOUSE-ICON
MARSH-ICON
0>>
<CONSTANT CRAG-ICON-TBL
<LTABLE CRAG-ICON
UPPER-LEDGE-ICON
LOWER-LEDGE-ICON
IRON-MINE-ICON
NATURAL-ARCH-ICON
ENCHANTED-CAVE-ICON
0>>
<CONSTANT GLACIER-ICON-TBL
<LTABLE MIRROR-LAKE-ICON
CHALET-ICON
0>>
<CONSTANT DELTA-ICON-TBL
<LTABLE RIVERS-END-ICON
OCEANS-EDGE-ICON
DELTA-ICON
0>>
<CONSTANT FUBLIO-ICON-TBL
<LTABLE ON-TOP-OF-WORLD-ICON
AMONGST-CLOUDS-ICON
TIMBERLINE-ICON
AVALANCHE-ICON
ZORBEL-PASS-ICON
BASE-OF-MTS-ICON
FOOT-OF-STATUE-ICON
OUTSIDE-HUT-ICON
ATTIC-ICON
CAIRN-ICON
QUARRYS-EDGE-ICON
QUARRY-ICON
0>>
<CONSTANT ANTHARIA-ICON-TBL
<LTABLE STADIUM-ICON
COAST-ROAD-ICON
MINE-ENTRANCE-ICON
STADIUM-ICON
COAST-ROAD-ICON
MINE-ENTRANCE-ICON
DEAD-END-ICON
CLIFF-BOTTOM-ICON
PRECIPICE-ICON
AERIE-ICON
ICKY-CAVE-ICON
0>>
<ROUTINE V-MAP ("AUX" TBL RM RM-ICON CX CY CHAR)
;<COND (,DEBUG
<SET RM <FIRST? ,ROOMS>>
<REPEAT ()
<COND (<NOT .RM>
<RETURN>)>
<FSET .RM ,TOUCHBIT>
<SET RM <NEXT? .RM>>>
<SETG BEEN-IN-FR-UPPER-FLOORS T>)>
<COND (,DEMO-VERSION?
<NOT-IN-DEMO>
<RFATAL>)
(<EQUAL? <DO-MAP> ,M-FATAL> ;"no map available, for example"
<RFATAL>)>
<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<SET CY <MAP-Y <ZGET .TBL 1>>>
<SET CX <MAP-X <ZGET .TBL 2>>>
<REPEAT ()
<COND (<EQUAL? 2 <ISAVE>>
<V-$REFRESH>)>
<SET CHAR <BLINK <COND (<SET RM-ICON <GETP ,HERE ,P?ICON>>
.RM-ICON)
(T
,ICONLESS-ROOM-BOX)>
,YOU-ARE-HERE-SYMBOL .CY .CX ,S-FULL>>
<COND (<EQUAL? .CHAR ,CLICK1 ,CLICK2>
<COND (<MAP-CLICK> ;"rtrue if moved"
<SETG ROSE-NEEDS-UPDATING T>
<COND (<NOT <EQUAL? ,CURRENT-SPLIT
,MAP-TOP-LEFT-LOC>>
;"exit function caused you to leave map"
<RETURN>)
(<FSET? ,HERE ,DELTABIT>
;"else defeats maze -- rooms stay on map"
<RETURN-FROM-MAP>
<RETURN>)
(,CHANGE-MAP
<DO-MAP>)>
;"update map"
<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<SET CY <MAP-Y <ZGET .TBL 1>>>
<SET CX <MAP-X <ZGET .TBL 2>>>)>
<COND (<NOT <EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>>
<RETURN>)>)
(T
<RETURN>)>>
<RETURN-FROM-MAP>>
<GLOBAL ROSE-NEEDS-UPDATING <>>
<GLOBAL CHANGE-MAP <>>
<ROUTINE DO-MAP ("AUX" TBL MAP-NUM RM RM-ICON)
<SETG CHANGE-MAP <>>
<COND (<AND <EQUAL? ,HERE ,GONDOLA>
<EQUAL? <GET <GETP ,HERE ,P?MAP-LOC> 0> <>>>
<TELL "[Mapping is temporarily unavailable.]" CR>
<RFATAL>)
(<NOT <GETP ,HERE ,P?MAP-LOC>>
<TELL "[No on-screen map is available for this location.">
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<TELL " Use the blueprint from your package.">)>
<TELL "]" CR>
<RFATAL>)
(<AND <OR <FSET? ,HERE ,DELTABIT>
<EQUAL? ,HERE ,RIVERS-END ,OCEANS-EDGE>>
<NOT ,CHANGED-MAP-WARNING>>
<SETG CHANGED-MAP-WARNING T>
<TELL "The jester ">
<COND (<NOT <IN? ,JESTER ,HERE>>
<TELL "appears for a moment and ">)>
<TELL
"says, \"It may seem odd and it may seem queer, but on-screen mapping
works differently here.\"" CR CR>
<HIT-ANY-KEY>)
(<NOT ,MAP-NOTE>
<SETG MAP-NOTE T>
<TELL
"Please read the section in the manual on on-screen mapping, if you have not
already done so. Are you ready to see the map (y or n)? >">
<COND (<NOT <Y?>>
<RFATAL>)>)>
<IF-SOUND <SETG SOUND-QUEUED? <>>
<KILL-SOUNDS>>
<PICINF ,MAP-BOX-SIZE ,PICINF-TBL>
<SETG MAP-BOX-WIDTH <ZGET ,PICINF-TBL 1>>
<SETG MAP-BOX-HEIGHT <ZGET ,PICINF-TBL 0>>
<PICINF ,MAP-SPACE-SIZE ,PICINF-TBL>
<SETG MAP-SPACE-WIDTH <ZGET ,PICINF-TBL 1>>
<SETG MAP-SPACE-HEIGHT <ZGET ,PICINF-TBL 0>>
<PICINF-PLUS-ONE ,MAP-TOP-LEFT-LOC>
<SETG MAP-TOP-LEFT-X <ZGET ,PICINF-TBL 1>>
<SETG MAP-TOP-LEFT-Y <ZGET ,PICINF-TBL 0>>
<PICINF ,MAP-BASIC-ELT-SIZE ,PICINF-TBL>
<SETG MAP-ELEMENT-WIDTH <ZGET ,PICINF-TBL 1>>
<SETG MAP-ELEMENT-HEIGHT <ZGET ,PICINF-TBL 0>>
<CLEAR -1>
<SCREEN ,S-FULL>
<SETG CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>
<DISPLAY ,MAP-BORDER 1 1>
<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<SET MAP-NUM <GET .TBL 0>>
<SET RM <FIRST? ,ROOMS>>
<MODIFY-PICSET-TBL .MAP-NUM>
<PICSET ,MAP-PICSET-TBL>
<DRAW-TITLES .MAP-NUM>
<REPEAT ()
<COND (<NOT .RM>
<RETURN>)>
<COND (<SET TBL <GETP .RM ,P?MAP-LOC>> ;"not all rooms go on a map"
<COND (<AND <EQUAL? <GET .TBL 0> .MAP-NUM>
<OR <FSET? .RM ,TOUCHBIT>
<EQUAL? ,HERE .RM> ;"if you're in dark room"
<AND <EQUAL? .RM ,FR-OFFICES
,OFFICES-NORTH ,OFFICES-SOUTH
,OFFICES-EAST ,OFFICES-WEST>
,BEEN-IN-FR-UPPER-FLOORS>>>
<COND (<AND <FSET? .RM ,DELTABIT>
<NOT <FIRST? .RM>>>
T)
(<SET RM-ICON <GETP .RM ,P?ICON>>
<DISPLAY-ROOM .RM-ICON
<GET .TBL 1> <GET .TBL 2>>
<DRAW-CONS .RM .TBL>)
(T
<DISPLAY-ROOM ,ICONLESS-ROOM-BOX
<GET .TBL 1> <GET .TBL 2>>
<DRAW-CONS .RM .TBL>)>)>)>
<SET RM <NEXT? .RM>>>
<PICINF-PLUS-ONE ,MAP-ROSE-LOC>
<DISPLAY ,MAP-ROSE-BG <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<UPDATE-MAP-ROSE>>
<ROUTINE UPDATE-MAP-ROSE ()
<SETG ROSE-NEEDS-UPDATING <>>
<PICINF-PLUS-ONE ,MAP-COMPASS-PIC-LOC>
<DRAW-COMPASS-ROSE ,P?NORTH ,MAP-N-HL ,MAP-N-UNHL>
<DRAW-COMPASS-ROSE ,P?NE ,MAP-NE-HL ,MAP-NE-UNHL>
<DRAW-COMPASS-ROSE ,P?EAST ,MAP-E-HL ,MAP-E-UNHL>
<DRAW-COMPASS-ROSE ,P?SE ,MAP-SE-HL ,MAP-SE-UNHL>
<DRAW-COMPASS-ROSE ,P?SOUTH ,MAP-S-HL ,MAP-S-UNHL>
<DRAW-COMPASS-ROSE ,P?SW ,MAP-SW-HL ,MAP-SW-UNHL>
<DRAW-COMPASS-ROSE ,P?WEST ,MAP-W-HL ,MAP-W-UNHL>
<DRAW-COMPASS-ROSE ,P?NW ,MAP-NW-HL ,MAP-NW-UNHL>>
<ROUTINE MODIFY-PICSET-TBL (MAP-NUM "AUX" TBL)
<SET TBL <COND (<EQUAL? .MAP-NUM ,MAIN-MAP-NUM>
,MAIN-ICON-TBL)
(<EQUAL? .MAP-NUM ,SECRET-WING-MAP-NUM>
,SECRET-WING-ICON-TBL)
(<EQUAL? .MAP-NUM ,VILLAGE-MAP-NUM>
,VILLAGE-ICON-TBL)
(<EQUAL? .MAP-NUM ,LOWER-LEVEL-MAP-NUM>
,LOWER-LEVEL-ICON-TBL)
(<EQUAL? .MAP-NUM ,LAKE-MAP-NUM>
,LAKE-ICON-TBL)
(<EQUAL? .MAP-NUM ,DESERT-MAP-NUM>
,DESERT-ICON-TBL)
(<EQUAL? .MAP-NUM ,FOOZLE-MAP-NUM>
,FOOZLE-ICON-TBL)
(<EQUAL? .MAP-NUM ,FENSHIRE-MAP-NUM>
,FENSHIRE-ICON-TBL)
(<EQUAL? .MAP-NUM ,FJORD-MAP-NUM>
,CRAG-ICON-TBL)
(<EQUAL? .MAP-NUM ,GRAY-MOUNTAINS-MAP-NUM>
,GLACIER-ICON-TBL)
(<EQUAL? .MAP-NUM ,DELTA-MAP-NUM>
,DELTA-ICON-TBL)
(<EQUAL? .MAP-NUM ,FUBLIO-MAP-NUM>
,FUBLIO-ICON-TBL)
(T
,ANTHARIA-ICON-TBL)>>
<COPYT <REST .TBL 2> <REST ,MAP-PICSET-TBL 42> <* 2 <GET .TBL 0>>>>
<ROUTINE MAP-CLICK ("AUX" TL-X TL-Y BR-X BR-Y TOP (CNT-X 1) (CNT-Y 1)
(DONE <>) DIR OHERE TBL MAP-NUM)
<COND (<SET DIR <MAP-NEIGHBORS>>
<DO-WALK .DIR>
<D-APPLY "map" <GETP ,HERE ,P?ACTION> ,M-END>
<CLOCKER>
<RTRUE>)
(<SET DIR <COMPASS-CLICK ,MAP-COMPASS-PIC-LOC ,MAP-N-HL>>
<SET OHERE ,HERE>
<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<SET MAP-NUM <GET .TBL 0>>
<DO-WALK .DIR>
<COND (<EQUAL? ,HERE .OHERE>
<SOUND 1>
<RFALSE>)
(<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<COND (<NOT <EQUAL? .MAP-NUM <GET .TBL 0>>>
<SETG CHANGE-MAP T>)>)
(T ;"you've entered a room that's not on the map"
<RETURN-FROM-MAP>)>
<D-APPLY "map" <GETP ,HERE ,P?ACTION> ,M-END>
<CLOCKER>
<RTRUE>)
(T
<SOUND 1>
<RFALSE>)>>
;"call me with a ROOM and a FUNCTION to test/act on; if this function returns
non-false, MAP-NEIGHBORS returns the direction to the neighboring room"
<ROUTINE MAP-NEIGHBORS ("AUX" DIR PT PTS TMP)
<MAP-DIRECTIONS (DIR PT ,HERE)
<SET PTS <PTSIZE .PT>>
<COND (<EQUAL? .PTS ,NEXIT>)
(<EQUAL? .PTS ,UEXIT ,CEXIT>
<SET TMP <GETB .PT ,REXIT>>
<COND (<CLICKED-ON-NEIGHBOR .TMP>
<RETURN .DIR>)>)
(<EQUAL? .PTS ,DEXIT>
<SET TMP <GETB .PT ,DEXITRM>>
<COND (<CLICKED-ON-NEIGHBOR .TMP>
<RETURN .DIR>)>)
(<EQUAL? .PTS ,FEXIT>
<SETG PRSO .DIR> ;"so exit routines return correct info"
<COND (<SET TMP <APPLY <GET .PT ,FEXITFCN> ,M-ENTER>>
<COND (<CLICKED-ON-NEIGHBOR .TMP>
<RETURN .DIR>)>)>)>>
<RFALSE>>
<ROUTINE CLICKED-ON-NEIGHBOR (RM "AUX" TL-X TL-Y BR-X BR-Y TBL MAP-NUM)
<SET TBL <GETP ,HERE ,P?MAP-LOC>>
<SET MAP-NUM <GET .TBL 0>>
<COND (<SET TBL <GETP .RM ,P?MAP-LOC>>
<COND (<NOT <EQUAL? <GET .TBL 0> .MAP-NUM>>
<RFALSE>)>
<SET TL-Y <MAP-Y <GET .TBL 1>>>
<SET TL-X <MAP-X <GET .TBL 2>>>
<PICINF ,MAP-BOX-SIZE ,PICINF-TBL>
<SET BR-Y <+ .TL-Y <GET ,PICINF-TBL 0>>>
<SET BR-X <+ .TL-X <GET ,PICINF-TBL 1>>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<RTRUE>)
(T
<RFALSE>)>)>>
<ROUTINE RETURN-FROM-MAP ()
<COND (<EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>
<SETG CHANGE-MAP <>>
<SETG CURRENT-SPLIT ,TEXT-WINDOW-PIC-LOC>
<V-$REFRESH>
<COND (<EQUAL? ,VERBOSITY 2>
<V-LOOK>)>
<IF-SOUND <COND (,SOUND-ON?
<CHECK-LOOPING>)>>
<RFATAL>)>>
;"if either POS positive, it's the top-left x or y + pos*element-width/height.
if negative, it's the ID of a picture that gives the appropriate coordinate."
<ROUTINE MAP-X (X-POS)
<COND (<G? .X-POS 0>
<PICINF-PLUS-ONE .X-POS>
<ZGET ,PICINF-TBL 1>)
(T
<+ ,MAP-TOP-LEFT-X <* <- .X-POS> ,MAP-ELEMENT-WIDTH>>)>>
<ROUTINE MAP-Y (Y-POS)
<COND (<G? .Y-POS 0>
<PICINF-PLUS-ONE .Y-POS>
<ZGET ,PICINF-TBL 0>)
(T
<+ ,MAP-TOP-LEFT-Y <* <- .Y-POS> ,MAP-ELEMENT-HEIGHT>>)>>
<ROUTINE DISPLAY-ROOM (PICTURE-ID Y-POS X-POS "OPT" (Y-FUDGE 0) (X-FUDGE 0))
<DISPLAY .PICTURE-ID
<+ .Y-FUDGE <MAP-Y .Y-POS>> <+ .X-FUDGE <MAP-X .X-POS>>>>
<ROUTINE DRAW-TITLES (MAP-NUM "AUX" TMP TMP1)
<COND (<EQUAL? .MAP-NUM ,MAIN-MAP-NUM>
<DISPLAY-ROOM ,MAIN-TITLE ,MAIN-TITLE-LOC ,MAIN-TITLE-LOC>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-1>
<COND (<FSET? ,CHAPEL ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-EAST-SYMBOL ,MAP-GEN-Y-6
,MAP-GEN-X-8 0 ,MAP-BOX-WIDTH>)>
<COND (<FSET? ,GREAT-HALL ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-NE-SYMBOL ,MAP-GEN-Y-4 ,MAP-GEN-X-5
<- ,MAP-BOX-HEIGHT 2>
<- <+ ,MAP-SPACE-WIDTH 2>>>
<DISPLAY-ROOM ,DOWN-SE-SYMBOL ,MAP-GEN-Y-4 ,MAP-GEN-X-5
<- ,MAP-BOX-HEIGHT 2>
<- ,MAP-BOX-WIDTH 2>>)>)
(<EQUAL? .MAP-NUM ,SECRET-WING-MAP-NUM>
<DISPLAY-ROOM ,SECRET-WING-TITLE
,SECRET-WING-TITLE-LOC ,MAP-GEN-X-1>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-8>
<COND (<FSET? ,CRYPT ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-EAST-SYMBOL ,MAP-GEN-Y-3
,MAP-GEN-X-8 0 ,MAP-BOX-WIDTH>)>)
(<EQUAL? .MAP-NUM ,VILLAGE-MAP-NUM>
<DISPLAY-ROOM ,VILLAGE-TITLE ,MAP-GEN-Y-5 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,VERTICAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-10>
<COND (<AND <FSET? ,SHADY-PARK ,TOUCHBIT>
<FSET? ,VILLAGE-CENTER ,TOUCHBIT>>
<DISPLAY-ROOM ,E-W-CON ,MAP-GEN-Y-3 ,MAP-GEN-X-6>
<SET TMP <MAP-X ,5-FUDGE>>
<DISPLAY-ROOM ,E-W-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-6 0 .TMP>
<DISPLAY-ROOM ,E-W-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-6 0 <* .TMP 2>>
<DISPLAY-ROOM ,E-W-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-6 0 <* .TMP 3>>)>
<COND (<FSET? ,FR-HQ ,TOUCHBIT>
<DISPLAY-ROOM ,LOBBY-OFFICE-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-8
<- ,MAP-BOX-HEIGHT 2>
<- ,MAP-BOX-WIDTH 2>>)>
<COND (,BEEN-IN-FR-UPPER-FLOORS
<DISPLAY-ROOM ,OFFICE-PENTHOUSE-CON
,MAP-GEN-Y-5 ,MAP-GEN-X-8
<- ,MAP-BOX-HEIGHT 2>
<- ,MAP-BOX-WIDTH 2>>)>)
(<EQUAL? .MAP-NUM ,LOWER-LEVEL-MAP-NUM>
<DISPLAY-ROOM ,LOWER-LEVEL-TITLE ,MAP-GEN-Y-5 ,MAP-GEN-X-9>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-2 ,MAP-GEN-X-8>
<COND (<FSET? ,LOWEST-HALL ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-SW-SYMBOL ,MAP-GEN-Y-4 ,MAP-GEN-X-4
<- ,MAP-BOX-HEIGHT 2>
<- ,MAP-BOX-WIDTH 2>>
<DISPLAY-ROOM ,LOW-HALL-CON ,MAP-GEN-Y-5
,MAP-GEN-X-4 0 ,MAP-BOX-WIDTH>)>
<COND (<FSET? ,LOWER-HALL ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-WEST-SYMBOL ,MAP-GEN-Y-5
,MAP-GEN-X-6 0 ,MAP-BOX-WIDTH>)>)
(<EQUAL? .MAP-NUM ,LAKE-MAP-NUM>
<DISPLAY-ROOM ,LAKE-TITLE
,LAKE-TITLE-LOC ,LAKE-TITLE-LOC>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-6 ,MAP-GEN-X-8>
<COND (<FSET? ,HOLD ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-SOUTH-SYMBOL ,MAP-GEN-Y-4
,MAP-GEN-X-1 ,MAP-BOX-HEIGHT>
<DISPLAY-ROOM ,DOWN-SOUTH-SYMBOL ,MAP-GEN-Y-5
,MAP-GEN-X-1 ,MAP-BOX-HEIGHT>)>
<COND (<FSET? ,UNDERWATER ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-SOUTH-SYMBOL ,MAP-GEN-Y-6
,MAP-GEN-X-1 ,MAP-BOX-HEIGHT>)>
<COND (<FSET? ,GROTTO ,TOUCHBIT>
<DISPLAY-ROOM ,N-S-CON ,MAP-GEN-Y-4 ,MAP-GEN-X-7>
<SET TMP <MAP-Y ,5-FUDGE>>
<DISPLAY-ROOM ,N-S-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-7 .TMP>
<DISPLAY-ROOM ,N-S-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-7 <* .TMP 2>>
<DISPLAY-ROOM ,N-S-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-7 <* .TMP 3>>)>
<COND (<FSET? ,CONDUCTOR-PIT ,TOUCHBIT>
<DISPLAY-ROOM ,DOWN-WEST-SYMBOL ,MAP-GEN-Y-3
,MAP-GEN-X-3 0 ,MAP-BOX-WIDTH>)>)
(<EQUAL? .MAP-NUM ,DESERT-MAP-NUM>
<DISPLAY-ROOM ,DESERT-TITLE ,MAP-GEN-Y-2 ,MAP-GEN-X-2>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-3 ,MAP-GEN-X-8>)
(<EQUAL? .MAP-NUM ,FOOZLE-MAP-NUM>
<DISPLAY-ROOM ,FOOZLE-TITLE ,MAP-GEN-Y-1 ,MAP-GEN-X-2>
<DISPLAY-ROOM ,VERTICAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-10>
<DISPLAY-ROOM ,FOOZLE-MAP-ILL ,MAP-GEN-Y-6 ,MAP-GEN-X-8>
<COND (<FSET? ,WISHYFOO-TERRITORY ,TOUCHBIT>
<DISPLAY-ROOM ,WISHYFOO-FORK-CON ,MAP-GEN-Y-4
,MAP-GEN-X-4 ,MAP-BOX-HEIGHT>)>
<COND (<FSET? ,CAVE-IN ,TOUCHBIT>
<DISPLAY-ROOM ,E-W-CON ,MAP-GEN-Y-3
,MAP-GEN-X-8 0 ,MAP-BOX-WIDTH>)>
<COND (<FSET? ,FISSURE-EDGE ,TOUCHBIT>
<DISPLAY-ROOM ,N-S-CON ,MAP-GEN-Y-4
,MAP-GEN-X-7 ,MAP-BOX-HEIGHT>)>)
(<EQUAL? .MAP-NUM ,FENSHIRE-MAP-NUM>
<DISPLAY-ROOM ,FENSHIRE-TITLE ,MAP-GEN-Y-3 ,MAP-GEN-X-5>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-6 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,FENSHIRE-MAP-ILL ,MAP-GEN-Y-5 ,MAP-GEN-X-6>)
(<EQUAL? .MAP-NUM ,FJORD-MAP-NUM>
<DISPLAY-ROOM ,FJORD-TITLE ,MAP-GEN-Y-2 ,MAP-GEN-X-8>
<DISPLAY-ROOM ,VERTICAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,FJORD-MAP-ILL ,MAP-GEN-Y-6 ,MAP-GEN-X-5>
<DISPLAY-ROOM ,RV-TELEPORT-ARROW
,MAP-GEN-Y-4 ,MAP-GEN-X-4 ,MAP-BOX-HEIGHT>
<COND (<AND <FSET? ,CRAG ,TOUCHBIT>
<FSET? ,NATURAL-ARCH ,TOUCHBIT>>
<DISPLAY-ROOM ,ARCH-N-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-4
<+ <- <MAP-Y ,ARCH-N-CON-SIZE>> 1>
,MAP-BOX-WIDTH>
<DISPLAY-ROOM ,ARCH-S-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-4
,MAP-BOX-HEIGHT
,MAP-BOX-WIDTH>)>)
(<EQUAL? .MAP-NUM ,GRAY-MOUNTAINS-MAP-NUM>
<DISPLAY-ROOM ,GRAY-MTS-TITLE ,MAP-GEN-Y-5 ,MAP-GEN-X-7>
<DISPLAY-ROOM ,VERTICAL-LEGEND ,MAP-GEN-Y-1 ,MAP-GEN-X-2>
<DISPLAY-ROOM ,GRAY-MTS-MAP-ILL ,MAP-GEN-Y-5 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,RV-TELEPORT-ARROW
,MAP-GEN-Y-1 ,MAP-GEN-X-10 ,MAP-BOX-HEIGHT>
<COND (<FSET? ,GLACIER ,TOUCHBIT>
<DISPLAY-ROOM ,GLACIER-MIRROR-CON
,MAP-GEN-Y-1 ,MAP-GEN-X-8
<- ,MAP-BOX-HEIGHT 2>
<- ,MAP-BOX-WIDTH 2>>)>)
(<EQUAL? .MAP-NUM ,DELTA-MAP-NUM>
<DISPLAY-ROOM ,DELTA-TITLE ,MAP-GEN-Y-6 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-3 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,DELTA-MAP-ILL ,MAP-GEN-Y-1 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,RV-TELEPORT-ARROW
,MAP-GEN-Y-5 ,MAP-GEN-X-10 ,MAP-BOX-HEIGHT>
<COND (<AND <FIRST? ,DELTA-1>
<FIRST? ,DELTA-2>>
<DISPLAY-ROOM ,ARCH-S-CON
,MAP-GEN-Y-5 ,MAP-GEN-X-8
,MAP-BOX-HEIGHT ,MAP-BOX-WIDTH>
<DISPLAY-ROOM ,ARCH-N-CON
,MAP-GEN-Y-5 ,MAP-GEN-X-8
<+ <- <MAP-Y ,ARCH-N-CON-SIZE>> 1>
,MAP-BOX-WIDTH>)>
<COND (<AND <FIRST? ,DELTA-1>
<FIRST? ,DELTA-3>>
<DISPLAY-ROOM ,DELTA-1-3-CON ,MAP-GEN-Y-3 ,MAP-GEN-X-8
<- </ ,MAP-BOX-HEIGHT 2> 1> ,MAP-BOX-WIDTH>)>
<COND (<AND <FIRST? ,DELTA-1>
<FIRST? ,DELTA-4>>
<DISPLAY-ROOM ,DELTA-1-4-CON ,MAP-GEN-Y-2 ,MAP-GEN-X-9
0 ,MAP-BOX-WIDTH>)>
<COND (<AND <FIRST? ,DELTA-2>
<FIRST? ,DELTA-7>>
<DISPLAY-ROOM ,RUBBLE-SE-CON
,MAP-GEN-Y-5 ,MAP-GEN-X-7
,MAP-BOX-HEIGHT ,MAP-BOX-WIDTH>)>
<COND (<AND <FIRST? ,DELTA-2>
<FIRST? ,DELTA-3>>
<DISPLAY-ROOM ,DELTA-2-3-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-8 ,MAP-BOX-HEIGHT
<+ <- <MAP-X ,2-3-CON-SIZE>> 1>>)>
<COND (<AND <FIRST? ,DELTA-3>
<FIRST? ,DELTA-4>>
<DISPLAY-ROOM ,RUBBLE-NW-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-9
<- <- <MAP-Y ,RUBBLE-CON-SIZE>> 1>
<- <- <MAP-X ,RUBBLE-CON-SIZE>> 1>>)>
<COND (<AND <FIRST? ,DELTA-3>
<FIRST? ,DELTA-5>>
<DISPLAY-ROOM ,DELTA-3-5-CON
,MAP-GEN-Y-2 ,MAP-GEN-X-8
,MAP-BOX-HEIGHT
<+ <- <MAP-X ,3-5-CON-SIZE>> 1>>)>
<COND (<AND <FIRST? ,DELTA-4>
<FIRST? ,DELTA-5>>
<DISPLAY-ROOM ,ARCH-N-CON
,MAP-GEN-Y-2 ,MAP-GEN-X-7
<+ <- <MAP-Y ,ARCH-N-CON-SIZE>> 1>
,MAP-BOX-WIDTH>)>
<COND (<AND <FIRST? ,DELTA-5>
<FIRST? ,DELTA-6>
<FSET? ,DELTA-6 ,TOUCHBIT>>
<DISPLAY-ROOM ,DELTA-5-6-CON
,MAP-GEN-Y-2 ,MAP-GEN-X-7
,MAP-BOX-HEIGHT
<+ <- <MAP-X ,5-6-CON-SIZE>> 1>>)>
<COND (<AND <FIRST? ,DELTA-6>
<FSET? ,DELTA-6 ,TOUCHBIT>
<FIRST? ,DELTA-7>>
<DISPLAY-ROOM ,DELTA-6-7-CON
,MAP-GEN-Y-5 ,MAP-GEN-X-7
0 <- <MAP-X ,6-7-CON-SIZE>>>)>)
(<EQUAL? .MAP-NUM ,FUBLIO-MAP-NUM>
<DISPLAY-ROOM ,FUBLIO-TITLE ,MAP-GEN-Y-2 ,MAP-GEN-X-9>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-4 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,TELEPORT-ARROW ,MAP-GEN-Y-4 ,MAP-GEN-X-8
<- <MAP-Y ,TELEPORT-ARROW-SIZE>>>)
(<EQUAL? .MAP-NUM ,ANTHARIA-MAP-NUM>
<DISPLAY-ROOM ,ANTHARIA-TITLE ,MAP-GEN-Y-5 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,HORIZONTAL-LEGEND ,MAP-GEN-Y-6 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,ANTHARIA-MAP-ILL ,MAP-GEN-Y-1 ,MAP-GEN-X-1>
<DISPLAY-ROOM ,TELEPORT-ARROW ,MAP-GEN-Y-4 ,MAP-GEN-X-8
<- <MAP-Y ,TELEPORT-ARROW-SIZE>>>
<COND (<AND <FSET? ,RUBBLE-ROOM ,TOUCHBIT>
<FSET? ,HEART-OF-MINE ,TOUCHBIT>>
<DISPLAY-ROOM ,RUBBLE-SE-CON
,MAP-GEN-Y-3 ,MAP-GEN-X-9
,MAP-BOX-HEIGHT ,MAP-BOX-WIDTH>
<DISPLAY-ROOM ,RUBBLE-NW-CON
,MAP-GEN-Y-4 ,MAP-GEN-X-10
<- <- <MAP-Y ,RUBBLE-CON-SIZE>> 1>
<- <- <MAP-X ,RUBBLE-CON-SIZE>> 1>>)>
<COND (<FSET? ,NORTH-OF-ANTHAR ,TOUCHBIT>
<DISPLAY-ROOM ,N-S-CON ,MAP-GEN-Y-6 ,MAP-GEN-X-6
,MAP-BOX-HEIGHT>)>)>>
<ROUTINE DRAW-CONS (RM TBL "AUX" Y X PTS NEXT-RM NEXT-TBL NEXT-Y NEXT-X)
<SET Y <MAP-Y <GET .TBL 1>>>
<SET X <MAP-X <GET .TBL 2>>>
<COND (<SHOW-DIRECTION? .RM ,P?NORTH>
<DISPLAY ,N-S-CON <- .Y ,MAP-SPACE-HEIGHT> .X>)>
<COND (<SHOW-DIRECTION? .RM ,P?NE>
<DISPLAY ,NE-SW-CON
<- .Y ,MAP-SPACE-HEIGHT> <+ .X ,MAP-BOX-WIDTH>>)>
<COND (<SHOW-DIRECTION? .RM ,P?EAST>
<DISPLAY ,E-W-CON .Y <+ .X ,MAP-BOX-WIDTH>>)>
<COND (<SHOW-DIRECTION? .RM ,P?SE>
<DISPLAY ,NW-SE-CON
<+ .Y ,MAP-BOX-HEIGHT> <+ .X ,MAP-BOX-WIDTH>>)>
<COND (<SHOW-DIRECTION? .RM ,P?SOUTH>
<DISPLAY ,N-S-CON <+ .Y ,MAP-BOX-HEIGHT> .X>)>
<COND (<SHOW-DIRECTION? .RM ,P?SW>
<DISPLAY ,NE-SW-CON
<+ .Y ,MAP-BOX-HEIGHT> <- .X ,MAP-SPACE-WIDTH>>)>
<COND (<SHOW-DIRECTION? .RM ,P?WEST>
<DISPLAY ,E-W-CON .Y <- .X ,MAP-SPACE-WIDTH>>)>
<COND (<SHOW-DIRECTION? .RM ,P?NW>
<DISPLAY ,NW-SE-CON
<- .Y ,MAP-SPACE-HEIGHT> <- .X ,MAP-SPACE-WIDTH>>)>
<COND (<SET PTS <GETPT .RM ,P?DOWN>>
<COND (<EQUAL? <PTSIZE .PTS> ,UEXIT ,CEXIT>
<SET NEXT-RM <GETB .PTS ,REXIT>>)
(<EQUAL? <PTSIZE .PTS> ,DEXIT>
<SET NEXT-RM <GETB .PTS ,DEXITRM>>)>
<COND (<AND <EQUAL? .RM ,LOWER-HALL>
<FSET? ,LOWEST-HALL ,TOUCHBIT>>
T)
(<EQUAL? .RM ,WISHYFOO-TERRITORY>
T)
(<AND .NEXT-RM
<SET NEXT-TBL <GETP .NEXT-RM ,P?MAP-LOC>>
<EQUAL? <GET .NEXT-TBL 0> <GET .TBL 0>>>
<SET NEXT-Y <MAP-Y <GET .NEXT-TBL 1>>>
<SET NEXT-X <MAP-X <GET .NEXT-TBL 2>>>
<COND (<EQUAL? .X .NEXT-X>
<COND (<G? .Y .NEXT-Y>
<DISPLAY ,DOWN-NORTH-SYMBOL
<- .Y ,MAP-SPACE-HEIGHT> .X>)
(T
<DISPLAY ,DOWN-SOUTH-SYMBOL
<+ .Y ,MAP-BOX-HEIGHT> .X>)>)
(<EQUAL? .Y .NEXT-Y>
<COND (<G? .X .NEXT-X>
<DISPLAY ,DOWN-WEST-SYMBOL
.Y <- .X ,MAP-SPACE-WIDTH>>)
(T
<DISPLAY ,DOWN-EAST-SYMBOL
.Y <+ .X ,MAP-BOX-WIDTH>>)>)>)>)>
<SET NEXT-RM <>> ;"it might not be, if it got set by the DOWN clause"
<COND (<SET PTS <GETPT .RM ,P?UP>>
<COND (<EQUAL? <PTSIZE .PTS> ,UEXIT ,CEXIT>
<SET NEXT-RM <GETB .PTS ,REXIT>>)
(<EQUAL? <PTSIZE .PTS> ,DEXIT>
<SET NEXT-RM <GETB .PTS ,DEXITRM>>)>
<COND (<AND .NEXT-RM
<SET NEXT-TBL <GETP .NEXT-RM ,P?MAP-LOC>>
<EQUAL? <GET .NEXT-TBL 0> <GET .TBL 0>>>
<SET NEXT-Y <MAP-Y <GET .NEXT-TBL 1>>>
<SET NEXT-X <MAP-X <GET .NEXT-TBL 2>>>
<COND (<EQUAL? .X .NEXT-X>
<COND (<G? .Y .NEXT-Y>
<DISPLAY ,DOWN-SOUTH-SYMBOL
<- .Y ,MAP-SPACE-HEIGHT> .X>)
(T
<DISPLAY ,DOWN-NORTH-SYMBOL
<+ .Y ,MAP-BOX-HEIGHT> .X>)>)
(<EQUAL? .Y .NEXT-Y>
<COND (<G? .X .NEXT-X>
<DISPLAY ,DOWN-EAST-SYMBOL
.Y <- .X ,MAP-SPACE-WIDTH>>)
(T
<DISPLAY ,DOWN-WEST-SYMBOL
.Y <+ .X ,MAP-BOX-WIDTH>>)>)>)>)>>
<ROUTINE V-MAYBE ()
<YOU-SOUND "indecis">>
<ROUTINE V-MEET ()
<PERFORM ,V?TELL ,PRSO>
<RTRUE>>
<ROUTINE V-MEASURE ()
<COND (<OR <FSET? ,PRSO ,PARTBIT>
<PRSO? ,ME>>
<TELL "Usual size." CR>)
(T
<TELL "The same size as any other " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-MIRROR-LOOK ()
<COND (<IN? ,PRSO ,PRSI>
<PERFORM ,V?EXAMINE ,PRSO>
<RTRUE>)
(T
<TELL "But" T ,PRSO " isn't in" TR ,PRSI>)>>
<ROUTINE V-MOVE ()
<COND (<ULTIMATELY-IN? ,PRSO>
<WASTES>)
(<FSET? ,PRSO ,INTEGRALBIT>
<PART-OF>)
(<LOC-CLOSED ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL "Moving" T ,PRSO " reveals nothing." CR>)
(<EQUAL? ,P-PRSA-WORD ,W?PULL>
<HACK-HACK "Pulling">)
(<AND <EQUAL? ,P-PRSA-WORD ,W?MOVE>
<PRSO? ,INTDIR>>
<DO-WALK <DIRECTION-CONVERSION>>)
(T
<CANT-VERB-A-PRSO "move">)>>
<ROUTINE V-MOVE-DIR ()
<TELL "Pick up" T ,PRSO " and go that way!" CR>>
<ROUTINE V-MOVE-TO ()
<COND (<NOT <ULTIMATELY-IN? ,PRSO>>
<TELL ,YNH TR ,PRSO>)
(T
<PERFORM ,V?PUT ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-MUNG ()
<HACK-HACK "Trying to destroy">>
<ROUTINE V-NO ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<V-YES>)
(<EQUAL? ,AWAITING-REPLY 2>
<TELL "\"You're right, you don't. I do.\"" CR>)
(T
<YOU-SOUND "negat">)>>
;<ROUTINE V-NO-VERB ()
<COND (<NOUN-USED? ,ME ,W?I>
<V-INVENTORY>)
(,ORPHAN-FLAG
<WASTES>)
(<NOT <VISIBLE? ,PRSO>>
<CANT-SEE ,PRSO>)
;(<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)
(,P-CONT
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)
(T
;<TELL "[Examine" T ,PRSO "]" CR CR>
<PERFORM ,V?EXAMINE ,PRSO>
<RTRUE>)>>
;<GLOBAL ORPHAN-FLAG <>>
;<ROUTINE I-ORPHAN ()
<SETG ORPHAN-FLAG <>>
<RFALSE>>
<ROUTINE NO-WORD (WRD)
<COND (<OR <EQUAL? .WRD ,W?NO ,W?NOPE>
<EQUAL? .WRD ,W?NAH ,W?UH-UH>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-OFF ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<FCLEAR ,PRSO ,ONBIT>
<FCLEAR ,PRSO ,FLAMEBIT>
<TELL "Okay," T ,PRSO " is now o">
<COND (<PRSO? ,CANDLE>
<TELL "ut">)
(T
<TELL "ff">)>
<TELL ,PERIOD-CR>
<NOW-DARK?>)
(T
<TELL "It isn't on!" CR>)>)
(T
<CANT-TURN "ff">)>>
<ROUTINE V-ON ()
<COND ;(<FSET? ,PRSO ,ACTORBIT>
<TELL "Hopefully, your sexy body will do the trick." CR>)
(<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<TELL ,ALREADY-IS>)
(T
<FSET ,PRSO ,ONBIT>
<TELL "Okay," T ,PRSO " is now on." CR>
<NOW-LIT?>)>)
(T
<CANT-TURN "n">)>>
<ROUTINE V-OPEN ()
<COND (<AND ,PRSI
<FSET? ,PRSI ,KEYBIT>>
<PERFORM ,V?UNLOCK ,PRSO ,PRSI>
<RTRUE>)
(<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,ACTORBIT>
<AND <FSET? ,PRSO ,VEHBIT>
<NOT <PRSO? ,DB ,LADDER
,IRON-MAIDEN ,SNAKE-PIT ,WATER-CHAMBER>>>>
<IMPOSSIBLES>)
(<FSET? ,PRSO ,OPENBIT>
<TELL ,ALREADY-IS>)
(<FSET? ,PRSO ,LOCKEDBIT>
<TELL "The " D ,PRSO " is locked." CR>)
(<FSET? ,PRSO ,DOORBIT>
<FSET ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " swings open." CR>)
(<FSET? ,PRSO ,CONTBIT>
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<COND (<OR <NOT <FIRST? ,PRSO>>
<FSET? ,PRSO ,TRANSBIT>
<PRSO? ,DB>>
<TELL "Opened." CR>)
(T
<TELL "Opening" T ,PRSO " reveals">
<COND (<NOT <D-NOTHING>>
<TELL ,PERIOD-CR>)>
<NOW-LIT?>)>
<RTRUE>)
(T
<YOU-MUST-TELL-ME>)>>
<ROUTINE V-PAY ("AUX" (MONEY <>))
<COND (<ULTIMATELY-IN? ,ZORKMID-BILL>
<SET MONEY ,ZORKMID-BILL>)
(<ULTIMATELY-IN? ,ZORKMID-COIN>
<SET MONEY ,ZORKMID-COIN>)>
<COND (.MONEY
<PERFORM ,V?GIVE .MONEY ,PRSO>
<RTRUE>)
(T
<TELL "You have no money!" CR>)>>
<ROUTINE V-PICK ()
<CANT-VERB-A-PRSO "pick">>
<ROUTINE V-PLAY ()
<CANT-VERB-A-PRSO "play">>
<ROUTINE V-POINT ()
<TELL "That would be pointless." CR>>
<ROUTINE V-POUR ()
<IMPOSSIBLES>>
<ROUTINE V-PRAY ()
<COND (<AND <NOT ,PRSO>
<EQUAL? ,HERE ,ORACLE>>
<PERFORM ,V?PRAY ,ORACLE-OBJECT>
<RTRUE>)
(T
<TELL
"If you pray long enough, your prayers may be answered." CR>)>>
;<ROUTINE V-PULL-OVER ()
<HACK-HACK "Pulling">>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing">>
<ROUTINE V-PUSH-DIR ()
<V-PUSH>>
;<ROUTINE V-PUSH-OFF ()
<COND (<AND <PRSO? ,ROOMS ,DOCK-OBJECT ,RAFT ,BARGE>
<NOT <IN? ,PROTAGONIST ,HERE>>>
<PERFORM ,V?LAUNCH <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<TELL ,HUH>)>>
<ROUTINE PRE-PUT ()
<COND (<PRSI? ,GROUND ,CEILING>
<COND (<AND <PRSO? ,N-S-PASSAGE ,NW-SE-PASSAGE>
<VERB? PUT>>
<TELL "You can only install the passage in a wall!" CR>)
(T
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>)
(<PRSO? ,HANDS>
<COND (<AND <VERB? PUT-ON PUT>
<FSET? ,PRSI ,PARTBIT>>
<RFALSE>)
(<VERB? PUT>
<PERFORM ,V?REACH-IN ,PRSI>
<RTRUE>)
(<AND <VERB? PUT-ON>
<PRSI? ,STRAW>>
<SETG FINGER-ON-STRAW T>
<COND (<IN? ,STRAW ,BOWL>
<SETG ELIXIR-TRAPPED T>)>
<QUEUE I-FINGER-OFF-STRAW 2>
<TELL
"You put your finger over the end of the straw." CR>)
(T
<IMPOSSIBLES>)>)
(<AND <PRSO? ,GLOVE>
<PRSI? ,HANDS>>
<PERFORM ,V?WEAR ,GLOVE>
<RTRUE>)
(<IN? ,PRSO ,WALDO>
<TELL
"The waldo seems incapable of more than just picking something up
and dropping it." CR>)
(<AND <NOT <FSET? ,PRSI ,PARTBIT>>
<PRE-LOOK>>
<RTRUE>)
(<ULTIMATELY-IN? ,PRSI ,PRSO>
<TELL ,YOU-CANT "put" T ,PRSO>
<COND (<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?ON>
;<FSET? ,PRSO ,SURFACEBIT>
;<EQUAL? <GET ,P-ITBL ,P-PREP2> ,PR?ON>
<TELL " on">)
(T
<TELL " in">)>
<TELL T ,PRSI " when" T ,PRSI " is already ">
<COND (<FSET? ,PRSO ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSO "!" CR>)
(<UNTOUCHABLE? ,PRSI>
<CANT-REACH ,PRSI>)
;(,IN-FRONT-FLAG ;"you dont have to have it"
<PERFORM ,V?PUT-IN-FRONT ,PRSO ,PRSI>
<RTRUE>)
(<IDROP>
<RTRUE>)>>
<ROUTINE V-PUT ()
<COND (<FSET? ,PRSI ,WATERBIT>
<COND (<PRSO? ,SMALL-VIAL ,LARGE-VIAL>
<PERFORM ,V?FILL ,PRSO ,WATER>
<RTRUE>)
(T
<PERFORM-PRSA ,PRSO ,WATER>)>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<TELL ,YOU-CANT "put" T ,PRSO " in" A ,PRSI "!" CR>)
(<OR <PRSI? ,PRSO>
<AND <ULTIMATELY-IN? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>
<TELL "How can you do that?" CR>)
(<FSET? ,PRSI ,DOORBIT>
<TELL ,CANT-FROM-HERE>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<THIS-IS-IT ,PRSI>
<DO-FIRST "open" ,PRSI>)
(<IN? ,PRSO ,PRSI>
<TELL "But" T ,PRSO " is already in" TR ,PRSI>)
(<FSET? ,PRSI ,ACTORBIT>
<TELL ,HUH>)
(<AND <G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<NOT <ULTIMATELY-IN? ,PRSO ,PRSI>>>
<TELL "There's no room ">
<COND (<FSET? ,PRSI ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSI " for" TR ,PRSO>)
(<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<EQUAL? <ITAKE> ,M-FATAL <>>>
<RTRUE>)
(<AND <PRSO? ,FOX ,ROOSTER ,WORM>
<FSET? ,PRSO ,ANIMATEDBIT>>
<TELL "You try, but" T ,PRSO " seems agitated and ">
<COND (<PRSO? ,FOX>
<TELL "slyly jumps">)
(<PRSO? ,ROOSTER>
<TELL "hops">)
(T
<TELL "wriggles">)>
<TELL " out." CR>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>
<SCORE-OBJ ,PRSO>)>>
<ROUTINE V-PUT-BEHIND ()
<WASTES>>
;<ROUTINE V-PUT-NEAR ()
<WASTES>>
<ROUTINE V-PUT-ON ()
<COND (<PRSI? ,ME>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(<AND <FSET? ,PRSI ,ACTORBIT>
<FSET? ,PRSO ,WEARBIT>>
<TELL "But it's not" T ,PRSI"'s size." CR>)
(T
<TELL "There's no good surface on" TR ,PRSI>)>>
<ROUTINE V-PUT-THROUGH ()
<COND (<FSET? ,PRSI ,DOORBIT>
<COND (<FSET? ,PRSI ,OPENBIT>
<V-THROW>)
(T
<DO-FIRST "open" ,PRSI>)>)
(<AND <PRSI? <LOC ,PROTAGONIST>>
<EQUAL? ,P-PRSA-WORD ,W?THROW ,W?TOSS ,W?HURL>>
<SETG PRSI <>>
<V-THROW>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-PUT-TO ()
<WASTES>>
<ROUTINE V-PUT-UNDER ()
<WASTES>>
<ROUTINE V-RAISE ()
<HACK-HACK "Playing in this way with">>
<ROUTINE PRE-RESEARCH ()
<COND (<AND <NOT ,PRSI>
<EQUAL? ,HERE ,LIBRARY>>
<SETG PRSI ,ENCYCLOPEDIA>)>
<COND (<PRSO? ,ROOMS> ;"input was LOOK UP"
<COND (<NOT ,LIT>
<TELL ,TOO-DARK CR>)
(<EQUAL? ,HERE ,ON-TOP-OF-THE-WORLD>
<PERFORM ,V?EXAMINE ,BROGMOID>
<RTRUE>)
(<FSET? ,HERE ,OUTSIDEBIT>
<TELL "Sunlight filters through heavy cloud cover." CR>)
(<EQUAL? ,HERE ,ON-TOP-OF-THE-WORLD>
<TELL
"You see a gray misty void, stretching upward as far as you can see." CR>)
(T
<PERFORM ,V?EXAMINE ,CEILING>
<RTRUE>)>)
(<NOT ,LIT>
<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-CANT "read about things in" AR ,PRSI>)
(T
<SETG VOLUME-USED T>
<RFALSE>)>>
<ROUTINE V-RESEARCH ("AUX" ENTRY PIC-NUM)
<COND (<SET ENTRY <GETP ,PRSO ,P?RESEARCH>>
<TELL .ENTRY CR>)
(<EQUAL? ,PRSO ,INTQUOTE>
<COND (<EQUAL? <GET <NP-LEXBEG <SET ENTRY <GET-NP ,PRSO>>> 0>
,W?QUOTE>
<CHANGE-LEXV <NP-LEXBEG .ENTRY> ,W?NO.WORD>)>
<COND (<EQUAL? <GET <NP-LEXEND .ENTRY> 0>
,W?QUOTE>
<CHANGE-LEXV <NP-LEXEND .ENTRY> ,W?NO.WORD>)>
;<DO-IT-AGAIN>
<SETG P-CONT <GET ,OOPS-TABLE ,O-START>>
<SETG P-LEN ,P-WORDS-AGAIN>
<TELL "[Uh, the quotation marks confused me...]" CR>)
(T
<TELL "You look up \"">
<NP-PRINT <GET-NP ,PRSO>>
<TELL "\" in the encyclopedia, but find no entry." CR>)>>
<ROUTINE V-SRESEARCH ()
<PERFORM ,V?RESEARCH ,PRSI ,PRSO>
<RTRUE>>
;<ROUTINE V-RAPE ()
<TELL "Unacceptably ungallant behavior." CR>>
<ROUTINE V-SRIDE-DIR ()
<PERFORM ,V?RIDE-DIR ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-RIDE-DIR ()
<COND (<NOT <IN? ,PROTAGONIST ,PRSO>>
<TELL "But you're not even ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" TR ,PRSO>)
(<PRSI? ,INTDIR>
<DO-WALK <WORD-DIR-ID <NP-NAME <GET-NP ,PRSI>>>>)
(<PRSO? ,CAMEL>
<TELL "Please use directions, as in RIDE CAMEL WEST." CR>)
(T
<TELL "How can you do that?" CR>)>>
;<ROUTINE V-RIDE-TO ("AUX" V)
<COND (<SET V <FIND-IN ,HERE ,VEHBIT>>
<PERFORM ,V?ENTER .V>
<RTRUE>)
(T
<TELL ,THERES-NOTHING "to ride." CR>)>>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<SET OBJ <FIRST? ,PRSO>>
<COND (<FSET? ,PRSO ,WATERBIT>
<PERFORM-PRSA ,WATER>)
(<OR <FSET? ,PRSO ,ACTORBIT>
<FSET? ,PRSO ,SURFACEBIT>
<NOT <FSET? ,PRSO ,CONTBIT>>>
<YUKS>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<DO-FIRST "open" ,PRSO>)
(<OR <NOT .OBJ>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TRYTAKEBIT>>>
<TELL ,THERES-NOTHING "in" TR ,PRSO>)
(T
<TELL "You feel something inside" TR ,PRSO>)>>
<ROUTINE V-READ ()
<COND (<FSET? ,PRSO ,READBIT>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<CANT-VERB-A-PRSO "read">)>>
;<ROUTINE V-RELIEVE ()
<TELL ,HUH>>
<ROUTINE V-REMOVE ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-ROLL ()
<TELL "A rolling " D ,PRSO " gathers no moss." CR>>
<ROUTINE V-ROLL-DIR ("AUX" OHERE)
<COND ;(<NOT <PRSI? ,INTDIR>>
<RECOGNIZE>)
(<PRSO? ,DUMBBELL ,CANNONBALL>
<COND (<AND <ULTIMATELY-IN? ,PRSO>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>
<RTRUE>)>
<SET OHERE ,HERE>
<DO-WALK <DIRECTION-CONVERSION>>
<COND (<EQUAL? ,HERE ,UNDER-THE-WORLD ,HANGING-FROM-ROOTS>
<REMOVE ,PRSO>
<TELL
" The " D ,PRSO " disappointingly fails to roll along the ground ABOVE
you, and plunges into the void." CR>)
(<NOT <EQUAL? ,HERE .OHERE>>
<MOVE ,PRSO ,HERE>
<TELL " The " D ,PRSO " rolls to a stop." CR>)>
<RTRUE>)
(T
<V-ROLL>)>>
<ROUTINE V-ROLL-DOWN ("AUX" OHERE)
<COND (<PRSO? ,DUMBBELL ,CANNONBALL>
<COND (<AND <ULTIMATELY-IN? ,PRSO>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>
<RTRUE>)>
<SET OHERE ,HERE>
<DO-WALK ,P?DOWN>
<COND (<NOT <EQUAL? ,HERE .OHERE>>
<TELL " The " D ,PRSO>
<COND (<EQUAL? ,HERE ,OUBLIETTE>
<REMOVE ,PRSO>
<TELL " sinks into the mud">)
(T
<MOVE ,PRSO ,HERE>
<TELL " rolls to a stop">)>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(T
<V-ROLL>)>>
<ROUTINE V-ROLL-UP ("AUX" OHERE)
<COND (<PRSO? ,DUMBBELL ,CANNONBALL>
<COND (<AND <ULTIMATELY-IN? ,PRSO>
<NOT <IN? ,PRSO ,WALDO>>>
<TELL ,HOLDING-IT>
<RTRUE>)>
<SET OHERE ,HERE>
<DO-WALK ,P?UP>
<COND (<NOT <EQUAL? ,HERE .OHERE>>
<MOVE ,PRSO ,HERE>
<TELL " The " D ,PRSO " rolls to a stop." CR>)>
<RTRUE>)
(T
<V-ROLL>)>>
<ROUTINE V-SACRED-WORD ()
<COND (<AND <NOT <EQUAL? ,SACRED-WORD-NUMBER 10>> ;"haven't seen word"
<EQUAL? ,P-PRSA-WORD
<GET ,SACRED-WORD-WORDS ,SACRED-WORD-NUMBER>>
,TIME-STOPPED>
<SETG TIME-STOPPED <>>
<FSET ,OUTER-GATE ,OPENBIT>
<FSET ,PERIMETER-WALL ,REDESCBIT>
<QUEUE I-END-GAME -1>
<TELL
"As you utter the sacred word, time resumes its normal motion! ">
<COND (<EQUAL? ,HERE ,PERIMETER-WALL>
<TELL "The huge outer gates burst open, and t">)
(T
<TELL
"You hear a distant grinding sound like the opening of a huge door. T">)>
<TELL
"he entire structure around you begins to shake and tremble; the last moments
of the castle are at hand!" CR>)
(T
<TELL
"As you utter it, the power of the sacred word sends you staggering." CR>)>>
<ROUTINE V-NOT-SO-SACRED-WORD ()
<TELL
"The word hangs in the air like a damp fog before dissipating." CR>>
<ROUTINE V-SADDLE ()
<COND (<NOT ,PRSI>
<COND (<ULTIMATELY-IN? ,SADDLE>
<PERFORM ,V?PUT-ON ,SADDLE ,PRSO>
<RTRUE>)
(T
<TELL "You don't have a saddle!" CR>)>)
(<PRSI? ,SADDLE>
<PERFORM ,V?PUT-ON ,SADDLE ,PRSO>
<RTRUE>)
(T
<TELL
"You can only saddle something with a saddle! In fact, that's probably
where the word comes from!" CR>)>>
<ROUTINE V-SAVE-SOMETHING ()
<COND (<PRSO? ,ME>
<V-HINT>)
(T
<TELL "Sorry, but" T ,PRSO " is beyond help." CR>)>>
"<ADD-WORD 'TIME' MISCWORD>
<ADD-WORD 'TRIPLET' MISCWORD>
<ADD-WORD 'TRIPLETS' MISCWORD>
<ADD-WORD 'QUADRUPLET' MISCWORD>
<ADD-WORD 'QUINTUPLET' MISCWORD>
<ADD-WORD 'LETTER' MISCWORD>
<ADD-WORD 'A' MISCWORD>
<ADD-WORD 'THE' MISCWORD>
<ADD-WORD 'Y' MISCWORD>
<ADD-WORD 'MUSIC' MISCWORD>
<ADD-WORD 'MUSICAL' MISCWORD>
<ADD-WORD 'INSTRUMENTS' MISCWORD>
<ADD-WORD 'BOOKKEEPER' MISCWORD>
<ADD-WORD 'BOOKKEEPING' MISCWORD>"
<ROUTINE V-SAY ("AUX" V V2 TMP)
<SET TMP <NP-LEXBEG <GET-NP>>>
<COND (<EQUAL? ,PRSO ,INTQUOTE>
<SET TMP <ZREST .TMP <* 2 ;3 ,LEXV-ELEMENT-SIZE-BYTES>>>)>
<SET V <GET .TMP 0>>
<SET V2 <GET .TMP ,P-LEXELEN>>
<COND (<AND ,AWAITING-REPLY
<YES-WORD .V>>
<V-YES>)
(<AND ,AWAITING-REPLY
<NO-WORD .V>>
<V-NO>)
(<INTBL? .V ,SACRED-WORD-WORDS ,SACRED-WORD-WORDS-LENGTH>
<SETG P-PRSA-WORD .V>
<V-SACRED-WORD>)
(<AND ,PRSO
<PRSO? ,SACRED-WORD-OBJ>>
<SETG P-PRSA-WORD <NP-NAME <GET-NP ,PRSO>>>
<V-SACRED-WORD>)
(<EQUAL? .V ,W?FLODOOR ,W?ZIPSO ,W?FURGALNETI>
<V-NOT-SO-SACRED-WORD>)
(<AND <EQUAL? ,HERE ,ENTRANCE-HALL>
<IN? ,JESTER ,HERE>
<NOT <FSET? ,PORTCULLIS ,OPENBIT>>>
<COND (<OR <PRSO? ,TIME-OBJECT>
<EQUAL? .V ,W?TIME>>
<FSET ,PORTCULLIS ,OPENBIT>
<TELL
"The portcullis creaks open. \"Friend or foe, you're free to go!\"">
<J-EXITS>
<INC-SCORE 20>)
(T
<DONT-CRY>)>)
(<AND <EQUAL? ,HERE ,OUBLIETTE>
<IN? ,JESTER ,HERE>>
<COND (<OR <PRSO? ,TRIPLET>
<EQUAL? .V ,W?TRIPLET ,W?TRIPLETS
,W?QUADRUPLET ,W?QUINTUPLET>
<EQUAL? .V2 ,W?TRIPLET ,W?TRIPLETS
,W?QUADRUPLET ,W?QUINTUPLET>>
<TELL
"The jester solemnly shakes your hand, and you feel yourself rising
out of the oubliette." CR CR>
<GOTO ,DUNGEON>
<INC-SCORE ,OUBLIETTE-SCORE>
<SETG OUBLIETTE-SCORE 0>
<RTRUE>)
(T
<DONT-CRY>)>)
(<AND <IN? ,EAST-KEY ,JESTER>
<IN? ,JESTER ,HERE>>
<COND (<OR <PRSO? ,LETTER-Y>
<EQUAL? .V ,W?Y>
<AND <EQUAL? .V ,W?A ,W?LETTER>
<EQUAL? .V ,W?Y>>
<AND <EQUAL? .V ,W?A ,W?THE>
<EQUAL? .V2 ,W?LETTER>
<EQUAL? <GET .TMP <* 2 ,P-LEXELEN>> ,W?Y>>>
<MOVE ,EAST-KEY ,PROTAGONIST>
<FSET ,EAST-KEY ,TOUCHBIT>
<FCLEAR ,EAST-KEY ,TRYTAKEBIT>
<TELL
"The jester grins and tosses you the key. \"Way to be -- Here's the key!\"">
<J-EXITS>
<INC-SCORE 20>)
(T
<DONT-CRY>)>)
(<AND <IN? ,DIPLOMA ,JESTER>
<IN? ,JESTER ,HERE>>
<COND (<OR <PRSO? ,MUSIC>
<EQUAL? .V ,W?MUSIC>
<AND <EQUAL? .V ,W?MUSICAL>
<EQUAL? .V2 ,W?INSTRUMENTS>>>
<MOVE ,DIPLOMA ,PROTAGONIST>
<FCLEAR ,DIPLOMA ,TRYTAKEBIT>
<FCLEAR ,DIPLOMA ,NDESCBIT>
<FSET ,DIPLOMA ,TOUCHBIT>
<SETG COMPASS-CHANGED T>
<TELL
"\"Go to the head of the class!\" The jester hands you the framed
document. \"With flying colors, you pass!\"">
<J-EXITS>
<INC-SCORE 12>)
(T
<DONT-CRY>)>)
(<AND <EQUAL? ,HERE ,TAX-OFFICE>
<IN? ,ZORKMID-COIN ,LOCAL-GLOBALS>
<IN? ,JESTER ,HERE>>
<COND (<OR <PRSO? ,BOOKKEEPER>
<EQUAL? .V ,W?BOOKKEEPER ,W?BOOKKEEPING>>
<MOVE ,ZORKMID-COIN ,HERE>
<TELL
"You hear a \"clink\" by your feet. \"You're fast as a bunny
and right on the money!\"">
<J-EXITS>
<INC-SCORE 6>)
(T
<DONT-CRY>)>)
(<AND <EQUAL? ,HERE ,CAVE-IN>
<IN? ,PIT-BOMB ,LOCAL-GLOBALS>
<IN? ,JESTER ,HERE>>
<COND (<OR <AND <PRSO? ,MID-NAME>
<NOUN-USED? ,MID-NAME
<GET ,MID-NAME-WORDS ,MID-NAME-NUM>>>
<EQUAL? .V <GET ,MID-NAME-WORDS ,MID-NAME-NUM>>>
<MOVE ,PIT-BOMB ,HERE>
<TELL
"\"That's my proper appellation; the finest in the nation!\"">
<J-EXITS>
<INC-SCORE 6>
<CRLF>
<COND (<EQUAL? ,HERE ,CAVE-IN>
<V-LOOK>)>
<RTRUE>)
(<OR <PRSO? ,OTHER-J-NAMES>
<EQUAL? .V ,W?BARBAZZO ,W?FERNAP>>
<TELL
"\"That's my name, but not my middle; try again to win this riddle!\"" CR>)
(T
<TELL
"\"That's not my middle moniker; and I should know! I just looked it up
this morning! Try again.\"" CR>)>)
(<AND <EQUAL? ,HERE ,ON-TOP-OF-THE-WORLD>
<IN? ,LITTLE-FUNGUS ,GLOBAL-OBJECTS>
,PLANT-TALKER
<NOT <EQUAL? ,FUNGUS-NUMBER 12>> ;"not chosen yet"
<EQUAL? .V <GET ,FUNGUS-WORDS ,FUNGUS-NUMBER>>>
<GET-LITTLE-FUNGUS>)
(<SET V <FIND-IN ,HERE ,ACTORBIT>>
<SETG CLOCK-WAIT T>
<TELL
"[If you want" T .V " to do something, the proper way is|
>" D .V ", do something]" CR>)
(T
<TELL "You say that out loud, but with no effect." CR>)>
<STOP>>
;<ROUTINE V-ANSWER-KLUDGE ()
<COND (<NOUN-USED? ,W?I ,ME>
<V-INVENTORY>)
(T
<SETG P-WON <>>
<TELL ,NO-VERB>
<STOP>)>>
<ROUTINE V-SCORE ()
<TELL "You have scored " N ,SCORE " point">
<COND (<NOT <EQUAL? ,SCORE 1>>
<TELL "s">)>
<TELL " (out of 1000) in " N ,MOVES " turn">
<COND (<NOT <EQUAL? ,MOVES 1>>
<TELL "s">)>
<TELL ". This gives you the rank of ">
<COND (<EQUAL? ,SCORE 1000>
<TELL "Dungeon Master">)
(<G? ,SCORE 875>
<TELL "Cursebuster">)
(<G? ,SCORE 750>
<TELL "Master Explorer">)
(<G? ,SCORE 625>
<TELL "Expert Adventurer">)
(<G? ,SCORE 500>
<TELL "Respected Adventurer">)
(<G? ,SCORE 375>
<TELL "Nobleman">)
(<G? ,SCORE 250>
<TELL "Knight">)
(<G? ,SCORE 125>
<TELL "Tradesman">)
(T
<COND (<L? ,SCORE 0>
<TELL "Incompetent ">)>
<TELL "Peasant">)>
<TELL ,PERIOD-CR>>
<ROUTINE SCORE-OBJ (OBJ "AUX" VAL)
<SET VAL <GETP .OBJ ,P?VALUE>>
<COND (.VAL
<INC-SCORE .VAL>
<PUTP .OBJ ,P?VALUE 0>)>>
<ROUTINE V-NOTIFY ()
<TELL "Okay, you will no">
<COND (,NOTIFICATION-ON
<SETG NOTIFICATION-ON <>>
<TELL " longer">)
(T
<SETG NOTIFICATION-ON T>
<TELL "w">)>
<TELL " be notified when your score changes." CR>>
<GLOBAL NOTIFICATION-ON T>
<GLOBAL NOTIFICATION-WARNING <>>
<ROUTINE INC-SCORE (PTS)
<COND (<NOT <EQUAL? .PTS 0>>
<COND (,NOTIFICATION-ON
<SOUND 1>
<HLIGHT ,H-BOLD>
<TELL " [Your score has just gone ">
<COND (<G? .PTS 0>
<TELL "up">)
(T
<TELL "down">)>
<TELL " by ">
<COND (<G? .PTS 0>
<PRINTN .PTS>)
(T
<PRINTN <* .PTS -1>>)>
<TELL ".">
<COND (<NOT ,NOTIFICATION-WARNING>
<SETG NOTIFICATION-WARNING T>
<TELL
" Note: you can turn this feature on and off using the NOTIFY command.">)>
<TELL "]" CR>
<HLIGHT ,H-NORMAL>)>
<SETG SCORE <+ ,SCORE .PTS>>)>
<RTRUE>>
<ROUTINE V-SEARCH ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<V-SHAKE>)
(<IN? ,PROTAGONIST ,PRSO>
<D-VEHICLE>)
(<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,OPENBIT>>>
<DO-FIRST "open" ,PRSO>)
(<FSET? ,PRSO ,CONTBIT>
<TELL "You find">
<COND (<NOT <D-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(T
<CANT-VERB-A-PRSO "search">)>>
<ROUTINE V-SSEARCH-OBJECT-FOR ()
<PERFORM ,V?SEARCH-OBJECT-FOR ,PRSI, PRSO>
<RTRUE>>
<ROUTINE V-SEARCH-OBJECT-FOR ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?SEARCH ,PRSO>
<RTRUE>)
(<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,OPENBIT>>>
<DO-FIRST "open" ,PRSO>)
(<OR <IN? ,PRSI ,PRSO>
<IN? ,PRSI ,HERE>>
<TELL "Very observant. There "
<COND (<FSET? ,PRSI ,FEMALEBIT>
"she")
(<FSET? ,PRSI ,ACTORBIT>
"he")
(T
"it")>
" is." CR>)
(T
<TELL "You don't find" T ,PRSI " there." CR>)>>
<ROUTINE V-SEND ()
<TELL
"You haven't any stamps, and there isn't a mailbox in sight!" CR>>
<ROUTINE V-SET ()
<COND (<NOT ,PRSI>
<COND (<PRSO? ,ROOMS> ;"input was TURN AROUND"
<TELL
"You do a 360 degree spin, but no agents appear to sign you
up for the Borphee Metropolitan Ballet Company." CR>)
(<OR <FSET? ,PRSO ,TAKEBIT>
<FSET? ,PRSO ,INTEGRALBIT>>
<HACK-HACK "Turning">)
(T
<TELL ,YNH TR ,PRSO>)>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-SET-DIR ()
<IMPOSSIBLES>>
<ROUTINE V-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHAKE ("AUX" PERSON)
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "That wouldn't be polite." CR>)
;(<EQUAL? ,PRSO ,HANDS> ;"in hands-f"
<COND (<SET PERSON <FIND-IN ,HERE ,ACTORBIT "with">>
<PERFORM ,V?SHAKE-WITH ,PRSO .PERSON>
<RTRUE>)>)
(T
<HACK-HACK "Shaking">)>>
<ROUTINE V-SHAKE-WITH ()
<COND (<NOT ,PRSI>
<PERFORM ,V?SHAKE-WITH ,HANDS ,PRSO>
<RTRUE>)
(<NOT <PRSO? ,HANDS>>
<RECOGNIZE>)
(<NOT <FSET? ,PRSI ,ACTORBIT>>
<TELL "I don't think" T ,PRSI " even has hands." CR>)
(T
<PERFORM ,V?THANK ,PRSI>
<RTRUE>)>>
<ROUTINE V-SHOW ("AUX" ACTOR)
<COND (<AND <NOT ,PRSI>
<SET ACTOR <FIND-IN ,HERE ,ACTORBIT>>>
<PERFORM ,V?SHOW ,PRSO .ACTOR>
<RTRUE>)
(<NOT ,PRSI>
<TELL "There's no one here to show it to." CR>)
(T
<TELL
"It doesn't look like" T-IS-ARE ,PRSI "interested." CR>)>>
<ROUTINE V-SHUT-UP ()
<COND (<PRSO? ,ROOMS>
<TELL "[I hope you're not addressing me...]" CR>)
(T
<PERFORM ,V?CLOSE ,PRSO>
<RTRUE>)>>
<ROUTINE V-SING ()
<TELL ,HUH>>
<ROUTINE V-SING-TO ()
<COND (<PRSO? ,BEDBUG>
<PERFORM ,V?PUT-TO ,BEDBUG ,GLOBAL-SLEEP>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-SINK ()
<IMPOSSIBLES>>
<ROUTINE V-SIT ("AUX" VEHICLE)
<COND (<AND ,PRSO
<NOT <PRSO? ,ROOMS>>>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<NOT <IN? ,PROTAGONIST ,HERE>>
<TELL ,LOOK-AROUND>)
(<EQUAL? ,HERE ,CASINO>
<TELL "[at the card table]" CR>
<PERFORM ,V?ENTER ,CARD-TABLE>
<RTRUE>)
(<SET VEHICLE <FIND-IN ,HERE ,VEHBIT "on">>
<PERFORM ,V?ENTER .VEHICLE>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-SKIP ()
<COND (<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>
<NOT <EQUAL? ,TURNED-INTO ,LITTLE-FUNGUS>>>
<SETG P-CONT -1> ;<RFATAL>
<TELL "Ahem..." A ,TURNED-INTO>
<COND (<FSET? ,TURNED-INTO ,PLURALBIT>
<TELL " are">)
(T
<TELL " is">)>
<TELL" usually incapable of locomotion." CR>)
(T
<TELL "Wasn't that fun?" CR>)>>
<ROUTINE V-SLEEP ()
<TELL "You're not tired">
<COND (<IN? ,BEDBUG ,HERE>
<TELL ", but you curl up for a moment and fake sleep. ">
<REMOVE-BEDBUG "see">)
(T
<TELL ,PERIOD-CR>)>>
<ROUTINE PRE-SMELL ()
<COND (<FSET? ,CLOWN-NOSE ,WORNBIT>
<TELL ,YOU-CANT "smell a thing with this clown nose on!" CR>)>>
<ROUTINE V-SMELL ()
<COND (<NOT ,PRSO>
<COND (<EQUAL? ,HERE ,WEST-WING>
<TELL ,FUDGE CR>)
(<EQUAL? ,HERE ,FISHY-ODOR>
<TELL "Phew! Rotten fish!" CR>)
(T
<TELL "You smell nothing unusual at the moment." CR>)>)
(T
<SENSE-OBJECT "smell">)>>
<ROUTINE SENSE-OBJECT (STRING)
<PRONOUN>
<TELL " " .STRING>
<COND (<AND <NOT <FSET? ,PRSO ,PLURALBIT>>
<NOT <PRSO? ,ME>>>
<TELL "s">)>
<TELL " just like" AR ,PRSO>>
<ROUTINE V-SNAP ()
<TELL "Perhaps it's your mind that has snapped." CR>>
<ROUTINE V-SPUT-ON ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-STAND ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?HOLD> ;"for HOLD UP OBJECT"
<WASTES>)
(<AND ,PRSO
<FSET? ,PRSO ,TAKEBIT>
<EQUAL? ,P-PRSA-WORD ,W?STAND> ;"for STAND UP OBJECT">
<WASTES>)
(<AND <EQUAL? ,P-PRSA-WORD ,W?GET> ;"for GET UP ON OBJECT"
,PRSO
<NOT <PRSO? ,ROOMS>>> ;"not GET UP"
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<NOT <IN? ,PROTAGONIST ,HERE>>
<PERFORM ,V?EXIT <LOC ,PROTAGONIST>>
<RTRUE>)
(<AND <NOT <PRSO? ,ROOMS <>>>
<NOT <EQUAL? ,P-PRSA-WORD ,W?STAND>>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(,UNDER-TABLE
<SETG UNDER-TABLE <>>
<SETG OLD-HERE <>>
<TELL "You get out from under the table." CR>)
(T
<TELL "You're already standing." CR>)>>
<ROUTINE V-STAND-ON ()
<COND (<PRSO? ,EAST-DOCK ,WEST-DOCK ,NORTH-DOCK ,SOUTH-DOCK
,TREE-STUMP ,YACHT ,TOBOGGAN ,CONDUCTOR-STAND>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-STELL ()
<PERFORM ,V?TELL ,PRSI>
<RTRUE>>
<ROUTINE V-STHROW ()
<COND (<PRSI? ,INTDIR>
<PERFORM ,V?THROW ,PRSO ,PRSI>)
(T
<PERFORM ,V?THROW-TO ,PRSI ,PRSO>)>
<RTRUE>>
<ROUTINE V-SUCK-ON ()
<PERFORM ,V?TASTE ,PRSO>
<RTRUE>>
<ROUTINE V-SUCK-WITH ()
<PERFORM ,V?DRINK ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE V-SWAT ()
<COND (,PRSI
<TELL "Sorry, but" A ,PRSI " makes a poor ">)
(T
<TELL "You don't have a ">)>
<COND (<PRSO? ,LARGE-FLY ,LARGER-FLY ,EVEN-LARGER-FLY ,LARGEST-FLY>
<TELL "fly">)
(T
<TELL D ,PRSO>)>
<TELL "swatter." CR>>
<ROUTINE V-SWIM ("AUX" X)
<COND (,PRSO
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<SET X <FIND-WATER>>
<PERFORM ,V?ENTER .X>
<RTRUE>)
(T
<TELL "Your head must be swimming." CR>)>>
<ROUTINE V-SWING ()
;<COND (,PRSI
<PERFORM ,V?KILL ,PRSI ,PRSO>
<RTRUE>)>
<TELL "\"Whoosh.\"" CR>>
;"called from syntaxes that switch the prso and prsi"
<ROUTINE PRE-SWITCH ()
<SETG OBJ-SWAP T>
<RFALSE>>
;<ROUTINE PRE-SWITCH ("AUX" I O IA OA)
<SET O <NP-NAME <GET-NP ,PRSO>>>
<SET I <NP-NAME <GET-NP ,PRSI>>>
<SET OA <GET <NP-ADJS <GET-NP ,PRSO>> 1>>
<SET IA <GET <NP-ADJS <GET-NP ,PRSI>> 1>>
<NP-NAME <GET-NP ,PRSO> .I>
<NP-NAME <GET-NP ,PRSI> .O>
<PUT <NP-ADJS <GET-NP ,PRSO>> 1 .IA>
<PUT <NP-ADJS <GET-NP ,PRSO>> 1 .OA>
<RFALSE>>
<ROUTINE V-SWRAP ()
<PERFORM ,V?WRAP ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE PRE-TAKE ()
<COND (<AND <NOT <FSET? ,PRSO ,PARTBIT>>
<PRE-LOOK>>
<RTRUE>)
(<AND <PRSO? ,HANDS>
,PRSI
<OR <AND <PRSI? ,HAND-HOLE ,WALDO>
,HAND-IN-WALDO>
<AND <PRSI? ,STRAW>
,FINGER-ON-STRAW>>>
<PERFORM ,V?REMOVE ,HANDS>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<TELL "You're ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n it!" CR>)
(<AND <ULTIMATELY-IN? ,PRSO>
,PRSI
<IN? ,PRSI ,ROOMS>> ;"such as TAKE PLATTER IN SCULLERY"
<V-WALK-AROUND>)
(<OR <IN? ,PRSO ,PROTAGONIST>
<AND <ULTIMATELY-IN? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>
<NOT <PRSO? ,WALDO ,SMALL-VIAL-WATER
,LARGE-VIAL-WATER>>>>
<COND (<FSET? ,PRSO ,WORNBIT>
<COND (<PRSO? ,CLOWN-NOSE>
<PERFORM ,V?TAKE-OFF ,CLOWN-NOSE>
<RTRUE>)>
<TELL "You're already wearing">)
(T
<TELL "You already have">)>
<TELL T ,PRSO ,PERIOD-CR>)
(<UNTOUCHABLE? ,PRSO>
<COND (,HAND-IN-WALDO
<WALDO-TAKE>
<RTRUE>)
(T
<CANT-REACH ,PRSO>)>)
(<NOT ,PRSI>
<RFALSE>)
(<PRSI? ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<AND <PRSO? ,WATER>
<EQUAL? ,P-PRSA-WORD ,W?REMOVE>
<OR <AND <PRSI? ,LARGE-VIAL>
<G? ,LARGE-VIAL-WATER 0>>
<AND <PRSI? ,SMALL-VIAL>
<G? ,SMALL-VIAL-WATER 0>>>>
<PERFORM ,V?EMPTY-FROM ,PRSO ,PRSI>
<RTRUE>)
(<AND <NOT <IN? ,PRSO ,PRSI>>
<NOT <EQUAL? ,PRSI <GETP ,PRSO ,P?OWNER>>>>
<NOT-IN>)
(,PRSI
<SETG PRSI <>>
<RFALSE>)>>
<ROUTINE V-TAKE ("AUX" (L <LOC ,PRSO>))
<COND (<NOT <EQUAL? <ITAKE T> ,M-FATAL>>
<COND (<OR <EQUAL? .L ,HERE>
<EQUAL? .L <LOC ,PROTAGONIST>>>
<TELL "You pick up" TR ,PRSO>)
(T
<TELL "You take" T ,PRSO " from" TR .L>)>
<SCORE-OBJ ,PRSO>)>>
<ROUTINE V-TAKE-OFF ("AUX" (VEHICLE <LOC ,PROTAGONIST>))
<COND (<PRSO? ,ROOMS>
<COND (<FSET? .VEHICLE ,VEHBIT>
<PERFORM ,V?EXIT .VEHICLE>
<RTRUE>)
(<EQUAL? ,HERE ,GONDOLA>
<DO-WALK ,P?OUT>)
(T
<TELL "You're not ">
<COND (<EQUAL? <PARSE-PARTICLE1 ,PARSE-RESULT> ,W?OUT>
<TELL "i">)
(T ;"get off"
<TELL "o">)>
<TELL "n anything." CR>)>)
(<FSET? ,PRSO ,WORNBIT>
<FCLEAR ,PRSO ,WORNBIT>
<THIS-IS-IT ,PRSO>
<TELL "You remove" TR ,PRSO>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?EXIT ,PRSO>
<RTRUE>)
(T
<TELL "You aren't wearing" TR ,PRSO>)>>
<ROUTINE V-TAKE-WITH ()
<COND (<NOT <ULTIMATELY-IN? ,PRSI>>
<TELL ,YNH TR ,PRSI>)
(T
<TELL "Sorry," T-IS-ARE ,PRSI "no help in getting" TR ,PRSO>)>>
<ROUTINE V-TASTE ()
<SENSE-OBJECT "taste">>
<ROUTINE PRE-TELL ()
<COND (<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>>
<SETG P-CONT -1>
<TO-SPEAK-OF "mouth">)
(<OR <VERB? SING SING-TO SAY>
<NOT ,PRSO>> ;"for example, V-YELL"
<RFALSE>)
(<AND <FSET? ,PRSO ,PLANTBIT>
,PLANT-TALKER>
<RFALSE>)
(<AND <OR <PRSO? ,OTHER-J-NAMES>
<AND <PRSO? ,MID-NAME>
<NOUN-USED? ,MID-NAME
<GET ,MID-NAME-WORDS ,MID-NAME-NUM>>>>
<VISIBLE? ,JESTER>>
<PERFORM-PRSA ,JESTER>
<RTRUE>)
(<PRSO? ,OTHER-J-NAMES ,MID-NAME>
<TELL ,BY-THAT-NAME>
<STOP>)
(<AND <PRSO? ,LITTLE-FUNGUS>
<IN? ,LITTLE-FUNGUS ,GLOBAL-OBJECTS>>
<COND (<EQUAL? ,HERE ,ON-TOP-OF-THE-WORLD>
<PERFORM ,V?CALL ,PRSO>)
(T
<TELL ,BY-THAT-NAME>)>
<STOP>)
(<AND <NOT <FSET? ,PRSO ,ACTORBIT>>
<NOT <PRSO? ,ME ,ORACLE-OBJECT ,SAILOR ,INTQUOTE>>>
<V-TELL>
<STOP>)>>
<ROUTINE V-TELL ()
<COND (<OR <FSET? ,PRSO ,ACTORBIT>
<PRSO? ,SAILOR>
<AND <FSET? ,PRSO ,PLANTBIT>
,PLANT-TALKER>>
<COND (<OR ,P-CONT
<PRSO? ,SAILOR>>
<SETG WINNER ,PRSO>
<SETG CLOCK-WAIT T>
<RTRUE>)
(T
<TELL
"Hmmm..." T ,PRSO " looks at you expectantly,
as if you seemed to be about to talk." CR>)>)
(<PRSO? ,BROGMOID>
<TELL ,TALK-TO-BROGMOID>)
(T
<TELL
"It's a well-known fact that only schizophrenics talk to" AR ,PRSO>
<STOP>)>>
<ROUTINE V-TELL-ABOUT ()
<COND (<PRSO? ,ME>
<TELL
"[Maybe you could find an encyclopedia to look that up in.]" CR>)
(T
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-THANK ()
<COND (<NOT ,PRSO>
<TELL "[Just doing my job.]" CR>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "It seems" T ,PRSO " is unmoved by your politeness." CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-THROW ()
<COND (<NOT <SPECIAL-DROP ,PRSO>>
<COND (<EQUAL? <LOC ,PROTAGONIST> ,YACHT ,DB>
<MOVE ,PRSO <LOC ,PROTAGONIST>>)
(T
<MOVE ,PRSO ,HERE>)>
<COND (<AND ,PRSI
<NOT <PRSI? ,GROUND ,INTDIR>>>
<TELL "You missed." CR>)
(T
<THIS-IS-IT ,PRSO>
<TELL "Thrown." CR>)>)>>
<ROUTINE V-THROW-OVER ()
<WASTES>>
<ROUTINE V-THROW-FROM ()
<IMPOSSIBLES>>
<ROUTINE V-THROW-OVERBOARD ()
<COND (<IN? ,PROTAGONIST ,YACHT>
<PERFORM ,V?PUT ,PRSO ,WATER>
<RTRUE>)
(<EQUAL? ,HERE ,HOLD>
<TELL ,YOULL-HAVE-TO "go up on deck to do that." CR>)
(T
<TELL "You generally have to be on a boat to do that." CR>)>>
<ROUTINE V-THROW-TO ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<PERFORM ,V?GIVE ,PRSO ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?THROW ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-TIE ()
<TELL ,YOU-CANT "tie" TR ,PRSO>>
<ROUTINE V-TIME ()
<TELL "It is daytime. You have taken " N ,MOVES " turn">
<COND (<NOT <EQUAL? ,MOVES 1>>
<TELL "s">)>
<COND (<G? ,MOVES 1000>
<TELL
". (The day really seems to be dragging, doesn't it?)" CR>)
(T
<TELL ,PERIOD-CR>)>>
<ROUTINE V-TIP ()
<TELL
"You tell" T ,PRSO " about Lucky Brogmoid in the seventh race
at Bozbar Downs, but ">
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "they don't">)
(T
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL "it">)
(<FSET? ,PRSO ,FEMALEBIT>
<TELL "she">)
(T
<TELL "he">)>
<TELL " doesn't">)>
<TELL " seem too interested." CR>>
<ROUTINE V-TIP-OVER ()
<WASTES>>
<ROUTINE PRE-TOUCH ()
<COND (<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>
<RTRUE>)
(,TURNED-INTO
<COND (<AND <VERB? OFF>
<EQUAL? ,P-PRSA-WORD ,W?BLOW>>
<COND (<FSET? ,TURNED-INTO ,ANIMATEDBIT>
<RFALSE>)
(T
<PRE-TELL>)>)
(T
<SETG P-CONT -1>
<TO-SPEAK-OF "hands">)>)>>
<ROUTINE V-STOUCH ()
<PERFORM ,V?TOUCH ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-TOUCH ()
<COND (<LOC-CLOSED ,PRSO>
<RTRUE>)
(T
<HACK-HACK "Fiddling with">)>>
<ROUTINE V-UNLOCK ()
<COND (<FSET? ,PRSO ,LOCKEDBIT>
<TELL "Unfortunately," T ,PRSI " do">
<COND (<NOT <FSET? ,PRSI ,PLURALBIT>>
<TELL "es">)>
<TELL "n't unlock" TR ,PRSO>)
(T
<TELL "But" T ,PRSO " isn't locked." CR>)>>
<ROUTINE V-UNTIE ()
<IMPOSSIBLES>>
<ROUTINE V-USE ()
<TELL
,YOULL-HAVE-TO "be more specific about how you want to use" TR ,PRSO>>
;<ROUTINE V-USE-QUOTES ()
<COND ;(<IN? ,HAREM-GUARD ,HERE>
<PICK-WIFE ,PRSO>)
(T
<TELL
"[You need quotes to say something \"out loud.\" See the instruction manual
section entitled \"Communicating With Infocom's Interactive Fiction.\"]" CR>)>>
<ROUTINE V-WALK ("AUX" (AV <LOC ,PROTAGONIST>) VEHICLE PT PTS STR OBJ RM)
<COND (<NOT ,P-WALK-DIR>
<USE-PREPOSITIONS "WALK " "TO" "THROUGH" "AROUND">)
(<AND <EQUAL? ,HERE ,BANQUET-HALL>
<RUNNING? ,I-PROLOGUE>
<G? ,PROLOGUE-COUNTER 2>>
<SETG P-CONT -1> ;<RFATAL>
<RETURN-FROM-MAP>
<TELL "Thick black smoke blocks every exit." CR>)
(<AND ,TURNED-INTO
<NOT <FSET? ,TURNED-INTO ,ANIMATEDBIT>>
<NOT <EQUAL? ,TURNED-INTO ,LITTLE-FUNGUS>>>
<RETURN-FROM-MAP>
<V-SKIP>)
(<AND <PRSO? ,P?OUT>
<FSET? .AV ,DROPBIT>>
<RETURN-FROM-MAP>
<PERFORM ,V?EXIT .AV>
<RTRUE>)
(<AND <PRSO? ,P?IN>
<NOT <GETPT ,HERE ,P?IN>>
<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<NOT <ULTIMATELY-IN? .VEHICLE>>>
<RETURN-FROM-MAP>
<COND (<EQUAL? ,P-PRSA-WORD ,W?ENTER>
<TELL "[">
<COND (<NOT <FSET? .VEHICLE ,NARTICLEBIT>>
<TELL "the ">)>
<TELL D .VEHICLE "]" CR>)>
<PERFORM ,V?ENTER .VEHICLE>
<RTRUE>)
(<AND <IN? ,BEDBUG ,HERE>
<NOT ,TIME-STOPPED>>
<SETG P-CONT -1> ;<RFATAL>
<RETURN-FROM-MAP>
<TELL
"With a flurry of its powerful, hairy legs, the bedbug scuttles over
to block your way." CR>)
(<AND <PRSO? ,P?DOWN>
<IN? ,PROTAGONIST ,YACHT>>
<GOTO ,HOLD>)
(,UNDER-TABLE
<RETURN-FROM-MAP>
<DO-FIRST "get out from under the table">)
(<AND <FSET? .AV ,VEHBIT>
<NOT <AND <EQUAL? .AV ,LADDER>
<PRSO? ,P?UP>>>
<NOT <AND <EQUAL? .AV ,CAMEL>
<FSET? ,CAMEL ,ANIMATEDBIT>>>>
<COND (<AND <EQUAL? .AV ,DB>
<PRSO? ,P?UP>
<NOT <EQUAL? ,HERE ,HOLD>>>
<PERFORM ,V?RAISE ,LEVER>
<RTRUE>)
(<AND <EQUAL? .AV ,DB>
<PRSO? ,P?DOWN>
<NOT <EQUAL? ,HERE ,LAKE-BOTTOM>>>
<PERFORM ,V?LOWER ,LEVER>
<RTRUE>)>
<RETURN-FROM-MAP>
<TELL "You're not going anywhere until you get ">
<COND (<EQUAL? .AV ,CARD-TABLE>
<TELL "up from">)
(<FSET? .AV ,INBIT>
<TELL "out of">)
(T
<TELL "off">)>
<SETG P-CONT -1> ;<RFATAL>
<TELL TR .AV>)
(<AND <FSET? ,RING ,WORNBIT>
<OR <PROB 40>
<EQUAL? ,HERE ,UNDER-THE-WORLD ,HANGING-FROM-ROOTS
,LEDGE-IN-PIT ,MOUTH-OF-CAVE>>>
<RETURN-FROM-MAP>
<TELL "Oops! You awkwardly ">
<COND (<EQUAL? ,HERE ,UNDER-THE-WORLD ,HANGING-FROM-ROOTS
,LEDGE-IN-PIT ,MOUTH-OF-CAVE>
<TELL "lost your grip! ">
<PERFORM ,V?LEAP ,ROOMS>
<RTRUE>)
(T
<TELL
"tripped over your own feet and fell down trying to walk. Fortunately,
you're not seriously hurt." CR>)>)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GETB .PT ,REXIT>>)
(<EQUAL? .PTS ,NEXIT>
<RETURN-FROM-MAP>
<SETG P-CONT -1> ;<RFATAL>
<TELL <GET .PT ,NEXITSTR> CR>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<GOTO .RM>)
(T
<SETG P-CONT -1> ;<RFATAL>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<SETG P-CONT -1> ;<RFATAL>
<RETURN-FROM-MAP>
<TELL .STR CR>)
(T
<SETG P-CONT -1> ;<RFATAL>
<CANT-GO>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GET .PT ,DEXITOBJ>> ,OPENBIT>
<GOTO <GETB .PT ,DEXITRM>>)
(<SET STR <GET .PT ,DEXITSTR>>
<RETURN-FROM-MAP>
<THIS-IS-IT .OBJ>
<SETG P-CONT -1> ;<RFATAL>
<TELL .STR CR>)
(T
<RETURN-FROM-MAP>
<THIS-IS-IT .OBJ>
<SETG P-CONT -1> ;<RFATAL>
<DO-FIRST "open" .OBJ>)>)>)
(T
<COND (<PRSO? ,P?OUT ,P?IN>
<V-WALK-AROUND>)
(T
<CANT-GO>)>
<SETG P-CONT -1> ;<RFATAL>)>>
<ROUTINE CANT-GO ()
<COND (<AND <NOT ,LIT>
<NOT <EQUAL? <LOC ,PROTAGONIST> ,DB ,HOLD>>
<NOT <EQUAL? ,HERE ,PIT-BOMB-LOC>>
<NOT ,TIME-STOPPED>
<PROB 75>>
<RETURN-FROM-MAP>
<DARK-DEATH>)
(<OR <AND <IN? ,N-S-PASSAGE ,HERE>
<EQUAL? ,PRSO ,N-S-PASSAGE-DIR>>
<AND <IN? ,NW-SE-PASSAGE ,HERE>
<EQUAL? ,PRSO ,NW-SE-PASSAGE-DIR>>>
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <EQUAL? ,CONSTRUCTION-LOC ,N-S-PASSAGE-LOC>>
<PRSO? ,N-S-PASSAGE-DIR>>
<BEEP-OR-CANT-GO>)
(<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <EQUAL? ,CONSTRUCTION-LOC ,NW-SE-PASSAGE-LOC>>
<PRSO? ,NW-SE-PASSAGE-DIR>>
<BEEP-OR-CANT-GO>)
(T
<RETURN-FROM-MAP>
<TELL
"You walk down the Frobozz Magic Passage Company passage, but it ends in a
dead end and you are forced to return to" TR ,HERE>)>)
(T
<BEEP-OR-CANT-GO>)>>
<ROUTINE BEEP-OR-CANT-GO ()
<COND (<EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>
<SOUND 1>)
(T
<TELL "You can't go that way." CR>)>>
<ROUTINE V-WALK-AROUND ()
<TELL "Please use compass directions to move around." CR>>
<ROUTINE V-WALK-TO ()
<COND (<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (<PRSO? ,SICKLY-WITCH ,PRICKLY-WITCH>
<TELL "She's">)
(T
<TELL "He's">)>)
(<FSET? ,PRSO ,PLURALBIT>
<TELL "They're">)
(T
<TELL "It's">)>
<TELL " here!" CR>)
(T
<V-WALK-AROUND>)>>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 3))
<TELL "Time ">
<COND (,TIME-STOPPED
<TELL "doesn't pass">)
(T
<TELL "passes">)>
<TELL "..." CR>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0>
<RETURN>)
(<CLOCKER>
<RETURN>)>>
<COND (<AND <SET NUM <LOC ,WINNER>>
<NOT <IN? .NUM ,ROOMS>>
;<FSET? .NUM ,VEHBIT>>
<SET NUM <D-APPLY "M-END" <GETP .NUM ,P?ACTION> ,M-END>>)>
<SET NUM <D-APPLY "M-END" <GETP ,HERE ,P?ACTION> ,M-END>>
<COND (<EQUAL? ,M-FATAL .NUM>
<SETG P-CONT -1>)>
<SETG CLOCK-WAIT T>>
<ROUTINE V-WAIT-FOR ()
<COND (<VISIBLE? ,PRSO>
<V-FOLLOW>)
(T
<TELL "You may be waiting quite a while." CR>)>>
;<ROUTINE V-WAVE ()
<COND (<AND ,PRSI
<NOT ,IN-FRONT-FLAG>>
<RECOGNIZE>)
(<ULTIMATELY-IN? ,PRSO>
<WASTES>)
(T
<TELL ,YNH TR ,PRSO>)>>
<ROUTINE V-WEAR ()
<COND (<NOT <FSET? ,PRSO ,WEARBIT>>
<CANT-VERB-A-PRSO "wear">)
(<IN? ,PRSO ,WALDO>
<TELL ,YNH TR ,PRSO>)
(T
<TELL "You're ">
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "already">)
(T
<MOVE ,PRSO ,PROTAGONIST>
<FSET ,PRSO ,WORNBIT>
<TELL "now">)>
<TELL " wearing" TR ,PRSO>)>>
<ROUTINE V-WRAP ()
<WASTES>>
<ROUTINE V-YAWN ()
<COND (<IN? ,BEDBUG ,HERE>
<REMOVE-BEDBUG "see">)
(T
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 2>
<TELL "[Is the game boring you?]" CR>)>>
<ROUTINE REMOVE-BEDBUG (STRING)
<REMOVE ,BEDBUG>
<TELL
"That was all the bedbug needed to " .STRING ". It curls up into a well-armed
piece of sleeping bedbug armor. You hear a chuckle from an invisible source,
and the sleeping bedbug disappears!" CR>>
<ROUTINE V-YELL ()
<COND (<PRSO? ,INTQUOTE>
<V-SAY>)
(T
<TELL "Aaaarrrggghhhh!" CR>
<STOP>)>>
<ROUTINE I-REPLY ()
<SETG AWAITING-REPLY <>>
<RFALSE>>
<GLOBAL AWAITING-REPLY <>>
<ROUTINE V-YES ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<TELL "That was just a rhetorical question." CR>)
(<EQUAL? ,AWAITING-REPLY 2>
<TELL
"\"Well, you don't. This swamp is owned by a cartel of lily pad farmers in
Borphee, who are indebted up to their ears to a conglomerate of Gurthian
banks, of which I am the primary stockholder. Ergo, you could safely say
that I own this swamp.\"" CR>)
(T
<YOU-SOUND "posit">)>>
<ROUTINE YOU-SOUND (STRING)
<TELL "You sound rather " .STRING "ive." CR>>
<ROUTINE YES-WORD (WRD)
<COND (<OR <EQUAL? .WRD ,W?YES ,W?Y ,W?YUP>
<EQUAL? .WRD ,W?OK ,W?OKAY ,W?SURE>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-ZAP ()
<COND (,PRSI
<PERFORM ,V?POINT ,PRSI ,PRSO>
<RTRUE>)
(<PRSO? ,WAND>
<TELL "Try waving the wand at something in particular." CR>)
(<AND <ULTIMATELY-IN? ,WAND>
<VISIBLE? ,WAND>>
<PERFORM ,V?POINT ,WAND ,PRSO>
<RTRUE>)
(T
<TELL "You have neither a magical wand nor a ray gun." CR>)>>
;"subtitle object manipulation"
<ROUTINE ITAKE ("OPTIONAL" (VB T) (OBJ 0))
<COND (<ZERO? .OBJ>
<SET OBJ ,PRSO>)>
<COND (<FSET? .OBJ ,INTEGRALBIT>
<COND (.VB
<PART-OF>)>
<RFATAL>)
(<NOT <FSET? .OBJ ,TAKEBIT>>
<COND (.VB
<YUKS>)>
<RFATAL>)
(,ALLIGATOR
<SETG P-CONT -1>
<COND (.VB
<TELL
,YOU-CANT "pick anything up right now. The logic goes something like this:|
1. You need hands to pick something up.|
2. You've been turned into an alligator.|
3. Alligators don't have hands." CR>)>
<RFATAL>)
(,TURNED-INTO
<COND (.VB
<TELL
"Surely you realize that" A ,TURNED-INTO " is hardly equipped to
carry items around!" CR>)>
<RFATAL>)
(<LOC-CLOSED .OBJ .VB>
<RFATAL>)
(<UNTOUCHABLE? .OBJ>
<COND (.VB
<CANT-REACH .OBJ>)>
<RFATAL>)
(<AND <FSET? ,RING ,WORNBIT>
<G? <CCOUNT ,PROTAGONIST> 4>>
<COND (.VB
<TELL
"Oops! While trying to pick up" T .OBJ ", you accidentally dropped
everything you were holding! How clumsy!">
<ROB ,PROTAGONIST
<COND (<FSET? <LOC ,PROTAGONIST> ,DROPBIT>
<LOC ,PROTAGONIST>)
(T
,HERE)>
T>
<CRLF>)>
<RFATAL>)
(<G? <CCOUNT ,PROTAGONIST> 10>
<COND (.VB
<TELL
"You're already juggling as many items as you could possibly carry." CR>)>
<RFATAL>)
(<AND <NOT <ULTIMATELY-IN? .OBJ>>
<G? <+ <WEIGHT .OBJ> <WEIGHT ,PROTAGONIST>> 100>>
<COND (.VB
<COND (<FSET? .OBJ ,PLURALBIT>
<TELL "They're">)
(T
<TELL "It's">)>
<TELL " too heavy">
<COND (<FIRST? ,PROTAGONIST>
<TELL ", considering your current load">)>
<TELL ,PERIOD-CR>)>
<RFATAL>)>
<FSET .OBJ ,TOUCHBIT>
<FCLEAR .OBJ ,NDESCBIT>
<COND (<IN? ,PROTAGONIST .OBJ>
<RFALSE> ;"Hope this is right -- pdl 4/22/86")>
<COND (<NOT .VB> ;"called by PARSER for implicit take"
<TELL "[taking" T .OBJ " first]" CR>
<SCORE-OBJ .OBJ>)>
<MOVE .OBJ ,PROTAGONIST>>
;"IDROP is called by PRE-GIVE and PRE-PUT.
IDROP acts directly as PRE-DROP, PRE-THROW and PRE-PUT-THROUGH."
<ROUTINE IDROP ()
<COND (<AND <EQUAL? ,HERE ,HANGING-FROM-ROOTS>
<PRSO? ,ROOMS ,ROOTS>> ;"LET GO or LET GO OF ROOTS"
<PERFORM ,V?LEAP>
<RTRUE>)
(<PRSO? ,ROOMS> ;"input was LET GO"
<TELL "You're not hanging onto anything." CR>)
(<PRSO? ,HANDS>
<COND (<VERB? DROP THROW GIVE>
<IMPOSSIBLES>)
(T
<RFALSE>)>)
(<AND <VERB? THROW>
<PRSO? ,EYES>>
<COND (<NOT ,PRSI>
<V-LOOK>
<RTRUE>)>
<PRE-SWITCH>
<PERFORM ,V?EXAMINE ,PRSI ,EYES>
<RTRUE>)
(<AND <PRSO? ,ME>
<VERB? PUT>
<FSET? ,PRSI ,ACTORBIT>>
<PERFORM ,V?ENTER ,PRSI>
<RTRUE>)
(<AND <PRSI? ,ME>
<VERB? PUT>
<FSET? ,PRSO ,ACTORBIT>>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<AND <VERB? DROP>
<IN? ,PRSO ,WALDO>>
<RFALSE>)
(<NOT <ULTIMATELY-IN? ,PRSO>>
<COND (<OR <PRSO? ,ME>
<FSET? ,PRSO ,PARTBIT>>
<IMPOSSIBLES>)
(T
<TELL
"That's easy for you to say since you don't even have" TR ,PRSO>)>
<RFATAL>)
(<FSET? ,PRSO ,INTEGRALBIT>
<PART-OF>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<DO-FIRST "open" <LOC ,PRSO>>)
(<FSET? ,PRSO ,WORNBIT>
<DO-FIRST "remove" ,PRSO>)
(T
<RFALSE>)>>
<ROUTINE CCOUNT (OBJ "OPTIONAL" (DESCRIBED-ITEMS-ONLY <>) "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<COND (<AND .DESCRIBED-ITEMS-ONLY
<FSET? .X ,NDESCBIT>>
T)
(<NOT <FSET? .X ,WORNBIT>>
<SET CNT <+ .CNT 1>>)>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
;"Gets SIZE of supplied object, recursing to nth level."
<ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT <FSET? .CONT ,WORNBIT>>
<SET WT <+ .WT <WEIGHT .CONT>>>)>
<COND (<NOT <SET CONT <NEXT? .CONT>>>
<RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>>
;"subtitle describers"
<ROUTINE D-ROOM ("OPTIONAL" (VERB-IS-LOOK <>) "AUX" (FIRST-VISIT <>) PIC)
<COND (<NOT ,LIT>
<TELL ,TOO-DARK>
<GRUE-PIT-WARNING>
<RFALSE>)
(<OR <NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET? ,HERE ,REDESCBIT>>
<SET FIRST-VISIT T>)>
<HLIGHT ,H-BOLD>
<SAY-HERE>
<HLIGHT ,H-NORMAL>
<CRLF>
<COND (<OR .VERB-IS-LOOK
<EQUAL? ,VERBOSITY 2>
<AND .FIRST-VISIT
<EQUAL? ,VERBOSITY 1>>>
<COND (<SET PIC <GETP ,HERE ,P?ICON>>
<MARGINAL-PIC .PIC>)
(T
<TELL " ">)>
<COND (<NOT <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
<TELL <GETP ,HERE ,P?LDESC>>)>
<CRLF>)>
<FCLEAR ,HERE ,REDESCBIT>
<FSET ,HERE ,TOUCHBIT>
<COND (<EQUAL? ,HERE ,CONSTRUCTION ,PLAIN ,FR-OFFICES ,OFFICES-NORTH
,OFFICES-SOUTH ,OFFICES-EAST ,OFFICES-WEST>
<FSET ,HERE ,REDESCBIT>)>
<RTRUE>>
;"Print FDESCs, then DESCFCNs and LDESCs, then everything else. DESCFCNs
must handle M-OBJDESC? by RTRUEing (but not printing) if the DESCFCN would
like to handle printing the object's description. RFALSE otherwise. DESCFCNs
are responsible for doing the beginning-of-paragraph indentation."
<ROUTINE D-OBJECTS ("AUX" O STR (1ST? T) (AV <LOC ,PROTAGONIST>))
<SET O <FIRST? ,HERE>>
<COND (<NOT .O>
<RFALSE>)>
<REPEAT () ;"FDESCS and MISC."
<COND (<NOT .O>
<RETURN>)
(<AND <DESCRIBABLE? .O>
<NOT <FSET? .O ,TOUCHBIT>>
<SET STR <GETP .O ,P?FDESC>>>
<TELL " " .STR>
<COND (<FSET? .O ,CONTBIT>
<D-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<SET O <FIRST? ,HERE>>
<SET 1ST? T>
<REPEAT () ;"DESCFCNS"
<COND (<NOT .O>
<RETURN>)
(<OR <NOT <DESCRIBABLE? .O>>
<AND <GETP .O ,P?FDESC>
<NOT <FSET? .O ,TOUCHBIT>>>>
T)
(<AND <SET STR <GETP .O ,P?DESCFCN>>
<SET STR <APPLY .STR ,M-OBJDESC>>>
;" *** make sure descfcns rtrue, after printing!"
<COND (<AND <FSET? .O ,CONTBIT>
<N==? .STR ,M-FATAL>>
<D-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)
(<SET STR <GETP .O ,P?LDESC>>
<TELL " " .STR>
<COND (<FSET? .O ,CONTBIT>
<D-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<D-CONTENTS ,HERE <> 0>
<COND (<AND .AV <NOT <EQUAL? ,HERE .AV>>>
<D-CONTENTS .AV <> ,D-ALL? ;"was 0">)>>
<CONSTANT D-ALL? 1> ;"print everything?"
<CONSTANT D-PARA? 2> ;"started paragraph?"
"<D-CONTENTS ,OBJECT-WHOSE-CONTENTS-YOU-WANT-DESCRIBED
level: -1 means only top level
0 means top-level (include crlf)
1 for all other levels
or string to print
all?: t if not being called from room-desc >"
<ROUTINE ORDER-GRAVEL (OBJ)
<COND (<IN? ,EVEN-MORE-GRAVEL .OBJ>
<MOVE ,EVEN-MORE-GRAVEL .OBJ>)>
<COND (<IN? ,MORE-GRAVEL .OBJ>
<MOVE ,MORE-GRAVEL .OBJ>)>
<COND (<IN? ,GRAVEL .OBJ>
<MOVE ,GRAVEL .OBJ>)>>
<ROUTINE ORDER-FLIES (OBJ)
<COND (<IN? ,LARGEST-FLY .OBJ>
<MOVE ,LARGEST-FLY .OBJ>)>
<COND (<IN? ,EVEN-LARGER-FLY .OBJ>
<MOVE ,EVEN-LARGER-FLY .OBJ>)>
<COND (<IN? ,LARGER-FLY .OBJ>
<MOVE ,LARGER-FLY .OBJ>)>
<COND (<IN? ,LARGE-FLY .OBJ>
<MOVE ,LARGE-FLY .OBJ>)>>
<ROUTINE D-CONTENTS (OBJ "OPTIONAL" (LEVEL -1) (ALL? ,D-ALL?)
"AUX" (F <>) N (1ST? T) (IT? <>) DB (START? <>) (TWO? <>) (PARA? <>))
<ORDER-FLIES .OBJ>
<ORDER-GRAVEL .OBJ>
<COND (<EQUAL? .LEVEL 2>
<SET LEVEL T>
<SET PARA? T>
<SET START? T>)
(<BTST .ALL? ,D-PARA?>
<SET PARA? T>)>
<SET N <FIRST? .OBJ>>
<COND (<OR .START?
<IN? .OBJ ,ROOMS>
<FSET? .OBJ ,ACTORBIT>
<EQUAL? .OBJ ,PROTAGONIST>
<AND <FSET? .OBJ ,CONTBIT>
<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>>
<FSET? .OBJ ,SEARCHBIT>
.N>>
<REPEAT ()
<COND (<OR <NOT .N>
<AND <DESCRIBABLE? .N>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .N>>>>
<COND
(.F
<COND
(.1ST?
<SET 1ST? <>>
<COND (<EQUAL? .LEVEL <> T>
<COND (<NOT .START?>
<COND (<NOT .PARA?>
<COND (<NOT <EQUAL? .OBJ
,PROTAGONIST>>
<TELL " ">)>
<SET PARA? T>)
(<EQUAL? .LEVEL T>
<TELL " ">)>
<COND (<EQUAL? .OBJ ,HERE>
<TELL ,YOU-SEE>)
(<EQUAL? .OBJ ,PROTAGONIST>
<COND (<EQUAL? ,D-BIT ,WORNBIT>
<TELL " You are wearing">)
(T
<TELL "You are carrying">)>)
(<EQUAL? .OBJ ,YACHT>
<TELL
"Sitting on the deck of the royal yacht">
<COND (<AND
<EQUAL? <CCOUNT .OBJ T> 1>
<NOT <FSET? <FIRST? .OBJ>
,PLURALBIT>>>
<TELL " is">)
(T
<TELL " are">)>)
(<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on" T .OBJ>
<COND (<AND
<EQUAL? <CCOUNT .OBJ T> 1>
<NOT <FSET? <FIRST? .OBJ>
,PLURALBIT>>>
<TELL " is">)
(T
<TELL " are">)>)
(T
<TELL ,IT-SEEMS-THAT T .OBJ>
<COND (<FSET? .OBJ ,ACTORBIT>
<TELL " has">)
(T
<TELL " contains">)>)>)>)
(<NOT <EQUAL? .LEVEL -1>>
<TELL .LEVEL>)>)
(.N
<TELL ",">)
(T
<TELL " and">)>
<TELL A .F>
<COND (<FSET? .F ,ONBIT>
<TELL " (providing light)">)
(<AND <EQUAL? .F ,LARGE-VIAL>
<G? ,LARGE-VIAL-GLOOPS 0>>
<HOLDING-GLOOPS ,LARGE-VIAL-GLOOPS
,LARGE-VIAL-IMPRECISE>)
(<AND <EQUAL? .F ,SMALL-VIAL>
<G? ,SMALL-VIAL-GLOOPS 0>>
<HOLDING-GLOOPS ,SMALL-VIAL-GLOOPS
,SMALL-VIAL-IMPRECISE>)>
<COND (<AND <NOT .IT?> <NOT .TWO?>>
<SET IT? .F>)
(T
<SET TWO? T>
<SET IT? <>>)>)>
<SET F .N>)>
<COND (.N
<SET N <NEXT? .N>>)>
<COND (<AND <NOT .F>
<NOT .N>>
<COND (<AND .IT?
<NOT .TWO?>>
<THIS-IS-IT .IT?>)>
<COND (<AND .1ST? .START?>
;<SET 1ST? <>>
<TELL " nothing">
<RFALSE>)>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>>
<COND (<EQUAL? .OBJ ,HERE>
<TELL " here">)>
<TELL ".">)>
<RETURN>)>>
<COND (<EQUAL? .LEVEL <> T>
<SET F <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .F>
<RETURN>)
(<AND <FSET? .F ,CONTBIT>
<DESCRIBABLE? .F T>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .F>>>
<SET DB ,D-BIT>
<SETG D-BIT <>>
<COND (<D-CONTENTS .F T
<COND (.PARA?
<+ ,D-ALL? ,D-PARA?>)
(T
,D-ALL?)>>
<SET 1ST? <>>
<SET PARA? T>)>
<SETG D-BIT .DB>)>
<SET F <NEXT? .F>>>)>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>
<EQUAL? .OBJ ,HERE <LOC ,WINNER>>>
<CRLF>)>
<NOT .1ST?>)>>
<GLOBAL D-BIT <>> ;"bit to screen objects"
<ROUTINE DESCRIBABLE? (OBJ "OPT" (CONT? <>))
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<EQUAL? .OBJ ,WINNER>
<RFALSE>)
(<AND <EQUAL? .OBJ <LOC ,WINNER>>
<NOT <EQUAL? ,HERE <LOC ,WINNER>>>>
<RFALSE>)
(<AND <NOT .CONT?>
<FSET? .OBJ ,NDESCBIT>>
<RFALSE>)
(,D-BIT
<COND (<G? ,D-BIT 0>
<COND (<FSET? .OBJ ,D-BIT>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT <FSET? .OBJ <- ,D-BIT>>>
<RTRUE>)
(T
<RFALSE>)>)
(T
<RTRUE>)>>
<ROUTINE SIMPLE-DESC? (OBJ "AUX" STR)
<COND (<AND <GETP .OBJ ,P?FDESC>
<NOT <FSET? .OBJ ,TOUCHBIT>>>
<RFALSE>)
(<AND <SET STR <GETP .OBJ ,P?DESCFCN>>
<APPLY .STR ,M-OBJDESC?>>
<RFALSE>)
(<GETP .OBJ ,P?LDESC>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE D-VEHICLE () ;"for LOOK AT/IN vehicle when you're in it"
<TELL "Other than yourself, you can see">
<COND (<NOT <D-NOTHING>>
<COND (<FSET? ,PRSO ,INBIT>
<TELL " in">)
(T
<TELL " on">)>
<TELL TR ,PRSO>)>
<RTRUE>>
<ROUTINE D-NOTHING ()
<COND (<D-CONTENTS ,PRSO 2>
<COND (<NOT <IN? ,PROTAGONIST ,PRSO>>
<CRLF>)>
<RTRUE>)
(T ;"nothing"
<RFALSE>)>>
<ROUTINE HOLDING-GLOOPS (NUM IMPRECISE)
<TELL " (holding ">
<COND (.IMPRECISE
<TELL "around ">)>
<TELL N .NUM " gloop">
<COND (<NOT <EQUAL? .NUM 1>>
<TELL "s">)>
<TELL " of water)">>
;"subtitle movement and death"
;"<CONSTANT REXIT 0>
<CONSTANT UEXIT 1 ;2>
<CONSTANT NEXIT 2 ;3>
<CONSTANT FEXIT 3 ;4>
<CONSTANT CEXIT 4 ;5>
<CONSTANT DEXIT 5 ;6>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT CEXITFLAG 1 ;4>
<CONSTANT CEXITSTR 1>
<CONSTANT DEXITOBJ 0 ;1>
<CONSTANT DEXITSTR 1 ;2>
<CONSTANT DEXITRM 5>"
<GLOBAL CURRENT-BORDER <>> ;"set to CASTLE-BORDER in GO"
<ROUTINE GOTO (NEW-LOC "AUX" OHERE OLIT BORDER X)
<SETG JUMP-X 99>
<SETG JUMP-Y 99>
<SETG FINGER-ON-STRAW <>>
<SETG ELIXIR-TRAPPED <>>
<COND (<IN? ,JESTER ,HERE>
<REMOVE-J>)>
<SET OLIT <LIT? ,HERE>>
<SET OHERE ,HERE>
<COND (<AND <IN? ,PROTAGONIST ,CAMEL>
<FSET? ,CAMEL ,ANIMATEDBIT>>
<FCLEAR ,CAMEL ,TOUCHBIT>
<MOVE ,CAMEL .NEW-LOC>)
(T
<MOVE ,PROTAGONIST .NEW-LOC>)>
<COND (<IN? .NEW-LOC ,ROOMS>
<SETG HERE .NEW-LOC>)
(T
<SETG HERE <LOC .NEW-LOC>>)>
<SETG COMPASS-CHANGED T>
<SETG LIT <LIT? ,HERE>>
<SET BORDER <SET-BORDER>>
<COND (<NOT <EQUAL? .BORDER ,CURRENT-BORDER>>
<SETG CURRENT-BORDER .BORDER>
<COND (<AND ,BORDER-ON
<NOT <EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>>>
<CLEAR-BORDER>
<INIT-SL-WITH-SPLIT ,TEXT-WINDOW-PIC-LOC T>)>)>
<COND (<NOT ,LIT>
<RETURN-FROM-MAP>
<COND (.OLIT
<TELL "You have moved into a dark place.">
<GRUE-PIT-WARNING>)
(<AND <NOT <EQUAL? <LOC ,PROTAGONIST>
,DB ,HOLD ,PIT-BOMB-LOC>>
<NOT ,TIME-STOPPED>
<PROB 75>>
<DARK-DEATH>)
(T
<TELL ,TOO-DARK>
<GRUE-PIT-WARNING>)>)
(T
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<AND <EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>
<NOT <FSET? ,HERE ,TOUCHBIT>>>
<RETURN-FROM-MAP>)>
<COND (<AND <NOT <EQUAL? ,CURRENT-SPLIT ,MAP-TOP-LEFT-LOC>>
<D-ROOM>
<NOT <EQUAL? ,VERBOSITY 0>>>
<D-OBJECTS>)>)>
<COND (<AND <GLOBAL-IN? ,WATER ,HERE>
<SET X <FIND-WATER>>>
;"so you can say GET WATER FROM OASIS, or whatever"
<PUTP ,WATER ,P?OWNER .X>)>
<SCORE-OBJ ,HERE>
<RTRUE>>
<ROUTINE JIGS-UP (DESC)
<TELL .DESC>
<TELL CR CR
" **** You have died ****" CR>
<FINISH>>
;"subtitle useful utility routines"
<ROUTINE ACCESSIBLE? (OBJ "AUX" L) ;"revised 2/18/86 by SEM"
<COND (<NOT .OBJ>
<RFALSE>)>
<SET L <LOC .OBJ>>
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<NOT .L>
<RFALSE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? ,LAST-PSEUDO-LOC ,HERE>
<RTRUE>)
(T
<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 ,WINNER ,HERE ,PROTAGONIST>
<RTRUE>)
(<AND <OR <FSET? .L ,OPENBIT>
<IN? ,PROTAGONIST .L> ;"you can be in closed sphere">
<ACCESSIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE VISIBLE? (OBJ "AUX" L) ;"revised 5/2/84 by SEM and SWG"
<COND (<NOT .OBJ>
<RFALSE>)>
<SET L <LOC .OBJ>>
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE UNTOUCHABLE? (OBJ)
;"figures out whether, due to vehicle-related locations, object is touchable"
<COND (<NOT .OBJ>
<RFALSE>)
(<AND <EQUAL? .OBJ ,PARCHMENT>
,UNDER-TABLE>
<RTRUE>)
(<AND <EQUAL? .OBJ ,LANTERN>
<FSET? ,LANTERN ,TRYTAKEBIT>>
<RTRUE>)
(<ULTIMATELY-IN? .OBJ ,SNAKE-PIT>
<RTRUE>)
(<AND <ULTIMATELY-IN? .OBJ ,YACHT>
<IN? ,PROTAGONIST ,HERE>>
<RTRUE>)
(<IN? ,PROTAGONIST ,HERE>
<RFALSE>)
(<AND <EQUAL? .OBJ ,YACHT ,LAKE-FLATHEAD ,WEST-DOCK ,EAST-DOCK
,NORTH-DOCK ,SOUTH-DOCK>
<EQUAL? <LOC ,PROTAGONIST> ,YACHT ,WEST-DOCK ,EAST-DOCK
,NORTH-DOCK ,SOUTH-DOCK>>
<RFALSE>)
(<AND <EQUAL? .OBJ ,WALDO>
,HAND-IN-WALDO
<VERB? OPEN CLOSE>>
<RFALSE>)
(<AND <EQUAL? .OBJ ,MEGABOZ-TRAP-DOOR>
<IN? ,PROTAGONIST ,LADDER>>
<RFALSE>)
(<OR <ULTIMATELY-IN? .OBJ <LOC ,PROTAGONIST>>
<EQUAL? .OBJ <LOC ,PROTAGONIST>>
<IN? .OBJ ,GLOBAL-OBJECTS> ;"me, hands, etc.">
<RFALSE>)
(T
<RTRUE>)>>
;<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? <GET .TEE ,DEXITOBJ> .DOBJ>>
<RETURN .P>)>)>>>
<ROUTINE HELD? (X Y) <ULTIMATELY-IN? .X .Y>>
<ROUTINE ULTIMATELY-IN? (OBJ "OPTIONAL" (CONT <>)) ;"formerly HELD?"
<COND (<NOT .CONT>
<SET CONT ,PROTAGONIST>)>
<COND (<NOT .OBJ>
<RFALSE>)
(<AND <VERB? EMPTY>
<EQUAL? .OBJ ,WATER>
<NOUN-USED? ,WATER ,W?GLOOP ,W?GLOOPS>
<OR <AND <ULTIMATELY-IN? ,LARGE-VIAL>
<G? ,LARGE-VIAL-GLOOPS 0>>
<AND <ULTIMATELY-IN? ,SMALL-VIAL>
<G? ,SMALL-VIAL-GLOOPS 0>>>>
<RTRUE>)
(<AND <IN? .OBJ ,WALDO>
,HAND-IN-WALDO
<VERB? DROP>>
<RTRUE>)
(<AND ,HAND-IN-WALDO
<EQUAL? .OBJ ,WALDO>
<EQUAL? .CONT ,PROTAGONIST>>
;"so syntaxes with HAVE won't say YOU'RE NOT HOLDING THE WALDO"
<RTRUE>)
(<AND <EQUAL? .OBJ ,WATER>
<VERB? POUR>
<OR <ULTIMATELY-IN? ,LARGE-VIAL-WATER>
<ULTIMATELY-IN? ,SMALL-VIAL-WATER>>>
<RTRUE>)
(<IN? .OBJ .CONT>
<RTRUE>)
(<IN? .OBJ ,ROOMS>
<RFALSE>)
;(<IN? .OBJ ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<ULTIMATELY-IN? <LOC .OBJ> .CONT>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<COND (<AND .OBJ
<NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT>
<FSET? .OBJ ,OPENBIT>
<AND <FSET? ,GOGGLES ,WORNBIT>
<EQUAL? ,WINNER ,PROTAGONIST>>>>
<RTRUE>)>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TEE)
<COND (<SET TEE <GETPT .OBJ2 ,P?GLOBAL>>
<INTBL? .OBJ1 .TEE </ <PTSIZE .TEE> 2>>)>>
<ROUTINE FIND-IN (WHERE FLAG-IN-QUESTION
"OPTIONAL" (STRING <>) "AUX" OBJ RECURSIVE-OBJ)
<SET OBJ <FIRST? .WHERE>>
<COND (<NOT .OBJ>
<RFALSE>)>
<REPEAT ()
<COND (<AND <FSET? .OBJ .FLAG-IN-QUESTION>
<NOT <FSET? .OBJ ,INVISIBLE>>>
<COND (.STRING
<TELL "[" .STRING T .OBJ "]" CR>)>
<RETURN .OBJ>)
(<SET RECURSIVE-OBJ
<FIND-IN .OBJ .FLAG-IN-QUESTION .STRING>>
<RETURN .RECURSIVE-OBJ>)
(<NOT <SET OBJ <NEXT? .OBJ>>>
<RETURN <>>)>>>
<ROUTINE WITHIN? (TL-X TL-Y BR-X BR-Y) ;"mouse click in rectangle?"
;<COND (,DEBUG
<TELL CR
"[Calling WITHIN? with X = " N ,MOUSE-LOC-X ", Y = " N ,MOUSE-LOC-Y
"; top-left is " N .TL-X "," N .TL-Y
" and bottom-right is " N .BR-X "," N .BR-Y ".]" CR>)>
<COND (<AND <NOT <L? ,MOUSE-LOC-X .TL-X>>
<NOT <G? ,MOUSE-LOC-X .BR-X>>
<NOT <L? ,MOUSE-LOC-Y .TL-Y>>
<NOT <G? ,MOUSE-LOC-Y .BR-Y>>>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE DIRECTION? (OBJ)
<COND (<OR <EQUAL? .OBJ ,P?NORTH ,P?SOUTH ,P?EAST>
<EQUAL? .OBJ ,P?WEST ,P?NE ,P?NW>
<EQUAL? .OBJ ,P?SE ,P?SW>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE NOW-DARK? ()
<COND (<AND ,LIT
<NOT <LIT? ,HERE>>>
<SETG LIT <>>
<SETG COMPASS-CHANGED T>
<TELL " It is now too dark to see.">
<COND (<IN? ,JESTER ,HERE>
<REMOVE-J>
<TELL
" A sound of jingling bells becomes increasingly
distant before fading entirely.">)>
<CRLF>)>
<RTRUE>>
<ROUTINE NOW-LIT? ()
<COND (<AND <NOT ,LIT>
<LIT? ,HERE>>
<SETG LIT T>
<SETG COMPASS-CHANGED T>
<CRLF>
<V-LOOK>)>>
<ROUTINE LOC-CLOSED (OBJ "OPTIONAL" (VB T) "AUX" (L <LOC .OBJ>))
<COND (<AND <FSET? .L ,CONTBIT>
<NOT <FSET? .L ,OPENBIT>>
<FSET? .OBJ ,TAKEBIT>
<NOT <IN? ,PROTAGONIST .L>> ;"bathysphere, for example">
<COND (.VB
<DO-FIRST "open" .L>)>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>
<RTRUE>>
<ROUTINE STOP ()
<SETG P-CONT -1>
<RFATAL>>
<ROUTINE ROB (WHO "OPT" (WHERE <>) (EXCLUDE-WORN-ITEM <>)
"AUX" (TAKER <>) (TOOK-PIGEON <>) N X)
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (<ZERO? .X>
<RETURN>)>
<SET N <NEXT? .X>>
<COND (<AND .EXCLUDE-WORN-ITEM
<FSET? .X ,WORNBIT>>
T)
(.WHERE
<FCLEAR .X ,WORNBIT>
<COND (<OR .TAKER
<AND <IN? .WHERE ,ROOMS>
<OR <SET TAKER <FIND-IN .WHERE ,BLACKBIT>>
<SET TAKER <FIND-IN .WHERE ,WHITEBIT>>>>>
<COND (<EQUAL? .X ,PIGEON>
<SET TOOK-PIGEON T>)>
<MOVE .X .TAKER>)
(<NOT <SPECIAL-DROP .X T>>
<MOVE .X .WHERE>)>)
(T
<FCLEAR .X ,WORNBIT>
<REMOVE .X>)>
<SET X .N>>
<COND (.TAKER
<COND (<VISIBLE? .TAKER>
<TELL
" The " D .TAKER " is only too happy to pick it all up">
<COND (<AND .TOOK-PIGEON
<NOT <EQUAL? ,HERE <META-LOC ,PERCH>>>>
<TELL ", including the pigeon.">
<PIECE-TAKES-PIGEON .TAKER <> ;"no CR">)
(T
<TELL ".">)>)
(.TOOK-PIGEON
<MOVE-TO-PERCH .TAKER>)>)>
<RTRUE>>
<ROUTINE HACK-HACK (STR)
<TELL .STR T ,PRSO>
<HO-HUM>>
<ROUTINE HO-HUM ()
<TELL <PICK-ONE ,HO-HUM-LIST> CR>>
<CONSTANT HO-HUM-LIST
<LTABLE
0
" doesn't do anything."
" accomplishes nothing."
" has no desirable effect.">>
<ROUTINE YUKS ()
<TELL <PICK-ONE ,YUK-LIST> CR>>
<CONSTANT YUK-LIST
<LTABLE
0
"What a concept!"
"Not bloody likely."
"A valiant attempt."
"Nice try."
"You can't be serious.">>
<ROUTINE IMPOSSIBLES ()
<TELL <PICK-ONE ,IMPOSSIBLE-LIST> CR>>
<CONSTANT IMPOSSIBLE-LIST
<LTABLE
0
"Fat chance."
"Dream on."
"Impossible!!!"
"You've got to be kidding."
"Out of the question.">>
<ROUTINE WASTES ()
<TELL <PICK-ONE ,WASTE-LIST> CR>>
<CONSTANT WASTE-LIST
<LTABLE
0
"That would be a waste of time."
"There's no point in doing that."
"There's another turn down the drain."
"Why bother?">>
<END-SEGMENT>