zorkzero/globals.zil

2460 lines
71 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

"GLOBALS for
ZORK ZERO
(c) Copyright 1988 Infocom, Inc. All Rights Reserved."
;<BEGIN-SEGMENT 0>
<INCLUDE "BASEDEFS" "FIND" "PDEFS">
<ADJ-SYNONYM LARGE HUGE BIG GIANT GIGANTIC TREMENDOUS MIGHTY MASSIVE ENORMOUS
;"LARGER HUGER BIGGER MIGHTIER">
<ADJ-SYNONYM SMALL SMALLER TINY TINIER LITTLE PETITE TEENSY WEENSY>
;<ADJ-SYNONYM MY MINE> ;"screws up parsing of Iron Mine and Granola Mine"
<GLOBAL LIT T>
<GLOBAL MOVES 0>
<GLOBAL SCORE 0>
<GLOBAL HERE:OBJECT BANQUET-HALL>
<OBJECT GLOBAL-OBJECTS
;(SYNONYM ZZMGCK) ;"No, this synonym doesn't need to exist... sigh"
(DESC "it")
(FLAGS INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT OPENBIT SEARCHBIT
TRANSBIT WEARBIT ONBIT LIGHTBIT RLANDBIT WORNBIT INTEGRALBIT
VEHBIT OUTSIDEBIT CONTBIT VOWELBIT LOCKEDBIT NDESCBIT DOORBIT
ACTORBIT PARTBIT INBIT FEMALEBIT KLUDGEBIT DROPBIT BURNBIT
ORBBIT FLAMEBIT NALLBIT KEYBIT UNDERGROUNDBIT REDESCBIT)>
<OBJECT LOCAL-GLOBALS
(LOC GLOBAL-OBJECTS)
(DESC "it")
;(SYNONYM ZZMGCK)
;(DESCFCN 0)
;(GLOBAL GLOBAL-OBJECTS)
;(FDESC "F")
;(LDESC "F")
;(SIZE 0)
;(TEXT "")
;(CAPACITY 0)
;(GENERIC ME-F)>
<OBJECT ROOMS
;(IN TO ROOMS)
(DESC "it")>
<OBJECT INTNUM
(LOC GLOBAL-OBJECTS)
(DESC "number")
(SYNONYM NUMBER NUMBERS INT.NUM)
(ADJECTIVE INT.NUM INT.TIM)
(ACTION INTNUM-F)>
<BEGIN-SEGMENT 0>
<ROUTINE INTNUM-F ("AUX" X)
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOUN-USED? ,INTNUM ,W?NUMBER>>
<TELL
"The number engraved on the wall is \"" N ,CONSTRUCTION-LOC ".\"" CR>)>>
<END-SEGMENT>
<OBJECT IT
(LOC GLOBAL-OBJECTS)
(SYNONYM IT ;THEM)
(DESC "it")
(FLAGS VOWELBIT NARTICLEBIT TOUCHBIT)>
<OBJECT HIM
(LOC GLOBAL-OBJECTS)
(SYNONYM HIM HIMSELF)
(DESC "him")
(FLAGS NARTICLEBIT TOUCHBIT)>
<OBJECT HER
(LOC GLOBAL-OBJECTS)
(SYNONYM HER HERSELF)
(DESC "her")
(FLAGS NARTICLEBIT TOUCHBIT)>
<OBJECT LEFT-RIGHT
(LOC GLOBAL-OBJECTS)
(DESC "that way")
(SYNONYM LEFT RIGHT)
(FLAGS NARTICLEBIT)
(ACTION LEFT-RIGHT-F)>
<BEGIN-SEGMENT 0>
<ROUTINE LEFT-RIGHT-F ()
<COND (<VERB? CHASTISE> ;"LOOK LEFT or LOOK RIGHT"
<TELL "You see nothing unusual." CR>)
(<VERB? WALK WALK-TO ENTER>
<COND (<AND <EQUAL? ,HERE ,WEIRD>
<NOUN-USED? ,LEFT-RIGHT ,W?LEFT>
<EQUAL? ,TOWER-BEATEN ,PYRAMID-L>>
<DO-WALK ,P?WEST>)
(<AND <EQUAL? ,HERE ,WEIRD>
<NOUN-USED? ,LEFT-RIGHT ,W?RIGHT>
<EQUAL? ,TOWER-BEATEN ,PYRAMID-R>>
<DO-WALK ,P?EAST>)
(<EQUAL? ,HERE ,TESTING-ROOM>
<PERFORM ,V?ENTER
<COND (<NOUN-USED? ,LEFT-RIGHT ,W?RIGHT>
,RIGHT-BOOTH)
(T
,LEFT-BOOTH)>>)
(T
<V-WALK-AROUND>)>)
(<VERB? SET>
<TELL "You turn ninety degrees, with little effect." CR>)>>
<END-SEGMENT>
<BEGIN-SEGMENT CASTLE>
<OBJECT GRUE
(LOC GLOBAL-OBJECTS)
(SYNONYM GRUE GRUES)
(ADJECTIVE LURKING SINISTER HUNGRY SILENT)
(DESC "lurking grue")
(RESEARCH
"\"The grue was once a sinister, lurking presence in the dark places of the
earth. Its favorite diet was adventurers, but its insatiable appetite was
tempered by its fear of light. No grue was ever seen by the light of day,
and few ever survived its fearsome jaws to tell the tale.\"|
The encyclopedia goes on to say, \"Grues were eradicated from the face of
the world during the time of Entharion, many by his own hand and his legendary
blade Grueslayer. Although it has now been many a century since the last grue
sighting, old hags still delight in scaring children by telling them that
grues still lurk in the bottomless pits of the Empire, and will one day lurk
forth again.\"")
(ACTION GRUE-F)>
<END-SEGMENT>
<BEGIN-SEGMENT 0>
<ROUTINE GRUE-F ()
<COND (<VERB? EXAMINE FIND>
<COND (<FSET? ,LANTERN ,TRYTAKEBIT>
<TELL
"Don't be silly! There haven't been grues around for centuries!" CR>)
(T
<TELL
"There is no grue here, but I'm sure there is at least one lurking
in the darkness nearby.">
<COND (<AND <FIND-IN ,PROTAGONIST ,ONBIT>
<NOT <FSET? ,HERE ,ONBIT>>>
<TELL
" I wouldn't let my light go out if I were you!" CR>)>)>)>>
<OBJECT SAILOR
(LOC GLOBAL-OBJECTS)
(DESC "sailor")
(SYNONYM SAILOR)
(ACTION SAILOR-F)>
<ROUTINE SAILOR-F ("OPT" (ARG <>))
<COND (<EQUAL? .ARG ,M-WINNER>
<COND (<VERB? HELLO>
<TELL "Nothing happens here." CR>)
(T
<CANT-SEE ,SAILOR>)>)
(<VERB? WAIT-FOR>
<TELL "You are liable to be waiting for several sequels." CR>)
(<AND <HANDLE ,SAILOR>
<NOT <VERB? TELL HELLO>>>
<CANT-SEE ,SAILOR>)>>
<OBJECT GLOBAL-SLEEP
(LOC GLOBAL-OBJECTS)
(DESC "sleep")
(SYNONYM SLEEP NAP SNOOZE)
(FLAGS NARTICLEBIT)
(ACTION GLOBAL-SLEEP-F)>
<ROUTINE GLOBAL-SLEEP-F ()
<COND (<VERB? WALK-TO TAKE>
<V-SLEEP>)
(<AND <VERB? PUT-TO>
<PRSI? ,GLOBAL-SLEEP>>
<COND (<PRSO? ,BEDBUG>
<TELL "You sing a brief lullaby. ">
<REMOVE-BEDBUG "hear">)
(T
<TELL "You're not a hypnotist." CR>)>)>>
<OBJECT LULLABY
(LOC GLOBAL-OBJECTS)
(DESC "lullaby")
(SYNONYM LULLABY LULLABYE SONG)
(ACTION LULLABY-F)>
<ROUTINE LULLABY-F ("AUX" ACTOR)
<COND (<VERB? SING>
<COND (<NOT ,PRSI>
<COND (<IN? ,BEDBUG ,HERE>
<SETG PRSI ,BEDBUG>)
(<SET ACTOR <FIND-IN ,HERE ,ACTORBIT>>
<SETG PRSI .ACTOR>)
(T
<TELL
"[If you put me to sleep, you'd have a heck of a time communicating with the
game! By the way, don't expect any offers from the Borphee Opera Company.]" CR>
<RTRUE>)>)>
<COND (<PRSI? ,BEDBUG>
<PERFORM ,V?PUT-TO ,BEDBUG ,GLOBAL-SLEEP>
<RTRUE>)
(<FSET? ,PRSI ,ACTORBIT>
<TELL
"Despite your best rendition," T ,PRSI " remains awake." CR>)
(T
<TELL
"Amazingly," T ,PRSI " is now motionless! You must have put
it right to sleep! Incredible! What a talent!" CR>)>)
(<VERB? PLAY>
<COND (<AND <IN? ,BEDBUG ,HERE>
<NOUN-USED? ,LULLABY ,W?LULLABY ,W?LULLABYE>>
<PERFORM ,V?PUT-TO ,BEDBUG ,GLOBAL-SLEEP>
<RTRUE>)
(<ULTIMATELY-IN? ,VIOLIN ,PROTAGONIST>
<TELL "[with" T ,VIOLIN "]" CR>
<PERFORM-PRSA ,VIOLIN>)
(<IN? ,HARMONICA ,PROTAGONIST>
<TELL "[with" T ,HARMONICA "]" CR>
<PERFORM-PRSA ,HARMONICA>)
(T
<TELL "You have no instrument to play it on." CR>)>)>>
<OBJECT GROUND
(LOC GLOBAL-OBJECTS)
(SYNONYM FLOOR GROUND SAND)
(SDESC "ground")
(ACTION GROUND-F)>
<ROUTINE GROUND-F ()
<SET-GROUND-DESC>
<COND (<VERB? EXAMINE>
<COND (<EQUAL? ,HERE ,OUBLIETTE>
<TELL "Mud. Squishy mud." CR>)
(<EQUAL? ,HERE ,PITS>
<PERFORM ,V?EXAMINE ,PITS-OBJECT>
<RTRUE>)
(<EQUAL? ,HERE ,TIGHT-SQUEEZE>
<TELL
"You see a man-sized opening through which cool air seems to flow." CR>)>)
(<VERB? LOOK-UNDER>
<IMPOSSIBLES>)
(<VERB? CLIMB-UP CLIMB-ON CLIMB ENTER>
<WASTES>)
(<VERB? LEAVE>
<DO-WALK ,P?UP>)>>
<ROUTINE SET-GROUND-DESC ()
<COND (<FSET? ,HERE ,OUTSIDEBIT>
<PUTP ,GROUND ,P?SDESC "ground">)
(<FSET? ,HERE ,DESERTBIT>
<PUTP ,GROUND ,P?SDESC "sand">)
(T
<PUTP ,GROUND ,P?SDESC "floor">)>>
<OBJECT GLOBAL-HOLE ;"exists entirely so player can type DIG HOLE"
(LOC GLOBAL-OBJECTS)
(DESC "hole")
(SYNONYM HOLE)
(ACTION GLOBAL-HOLE-F)>
<ROUTINE GLOBAL-HOLE-F ()
<COND (<AND <VERB? DIG>
<PRSO? ,GLOBAL-HOLE>>
<COND (,PRSI
<COND (<PRSI? ,SHOVEL>
<PERFORM-PRSA ,GROUND ,SHOVEL>)
(<ULTIMATELY-IN? ,SHOVEL>
<TELL "[with the shovel]" CR>
<PERFORM-PRSA ,PRSI ,SHOVEL>)
(T
<TELL "[with your hands]" CR>
<PERFORM-PRSA ,PRSI ,HANDS>)>)
(<ULTIMATELY-IN? ,SHOVEL>
<TELL "[with the shovel]" CR>
<PERFORM-PRSA ,GROUND ,SHOVEL>)
(T
<TELL "[with your hands]" CR>
<PERFORM-PRSA ,GROUND ,HANDS>)>)
(<HANDLE ,GLOBAL-HOLE>
<CANT-SEE ,GLOBAL-HOLE>)>>
<OBJECT WALL
(LOC GLOBAL-OBJECTS)
(DESC "wall")
(SYNONYM WALL WALLS)
(ADJECTIVE NORTH ;N ;NORTHEAST NE EAST ;E ;SOUTHEAST SE
SOUTH ;S ;SOUTHWEST SW WEST ;W ;NORTHWEST NW
REAR FAR)
(FLAGS NDESCBIT TOUCHBIT)
(ACTION WALL-F)>
<ROUTINE WALL-F ("AUX" (CNT 0))
<COND (<VERB? READ EXAMINE>
<COND (<EQUAL? ,HERE ,CHURCH>
<PERFORM ,V?READ ,TENET>
<RTRUE>)
(<AND <EQUAL? ,HERE ,CELL>
<IN? ,COBWEBS ,CELL>>
<TELL ,CELL-WALL-DESC CR>)>)
(<AND <VERB? CLEAN>
<EQUAL? ,HERE ,CELL>
<ADJ-USED? ,WALL ,W?REAR>
<IN? ,COBWEBS ,CELL>>
<PERFORM ,V?CLEAN ,COBWEBS>
<RTRUE>)
(<VERB? THROW-OVER>
<COND (<EQUAL? ,HERE ,PERIMETER-WALL>
<TELL
"Babe Flathead himself couldn't toss something over this towering wall!" CR>)
(T
<TELL "The wall joins the ceiling!" CR>)>)
(<AND <VERB? PUT PUT-ON>
<PRSO? ,N-S-PASSAGE ,NW-SE-PASSAGE>>
<COND (<ADJ-USED? ,WALL <>>
<SETG P-WON <>>
<TELL
"[You didn't specify which wall you meant: EAST WALL for example.]" CR>)
(<OR <AND <PRSO? ,N-S-PASSAGE>
<NOT <ADJ-USED? ,WALL ,W?NORTH ,W?N>>
<NOT <ADJ-USED? ,WALL ,W?SOUTH ,W?S>>>
<AND <PRSO? ,NW-SE-PASSAGE>
<NOT <ADJ-USED? ,WALL ,W?NORTHWEST ,W?NW>>
<NOT <ADJ-USED? ,WALL ,W?SOUTHEAST ,W?SE>>>>
<TELL
,YOU-CANT "install the passage on that wall--it's" AR ,PRSO>)
(<PASSAGE-THERE>
<RTRUE>)
(<OR <EQUAL? ,HERE ,GONDOLA ,HOLD>
<EQUAL? <LOC ,PROTAGONIST> ,YACHT ,DB>>
<TELL
"A built-in safety feature prevents the passage from being
installed in a vehicle." CR>)
(T
<MOVE ,PRSO ,HERE>
<FCLEAR ,PRSO ,TAKEBIT>
<SETG COMPASS-CHANGED T>
<PUTP ,PRSO ,P?OWNER ,WALL>
<TELL "There's now a passage leading ">
<COND (<PRSO? ,N-S-PASSAGE>
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<SETG N-S-PASSAGE-LOC ,CONSTRUCTION-LOC>)>
<COND (<ADJ-USED? ,WALL ,W?NORTH ,W?N>
<SETG N-S-PASSAGE-DIR ,P?NORTH>
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <L? ,CONSTRUCTION-LOC 8>>>
;"second clause in predicate: can't go
north from the top Construction row"
<PUT ,NORTH-EXITS 0
<+ ,CONSTRUCTION-LOC 100>>
<REPEAT ()
;"passage appears in room at other end"
<COND (<EQUAL?
<GET ,STORAGE-TABLE .CNT> 0>
<PUT ,STORAGE-TABLE .CNT
<+ <- ,CONSTRUCTION-LOC 8>
,CONSTRUCTION-OFFSET>>
<PUT ,STORAGE-TABLE
<+ .CNT 1> ,N-S-PASSAGE>
<RETURN>)
(T
<SET CNT <+ .CNT 2>>)>>)>
<TELL "nor">)
(T
<SETG N-S-PASSAGE-DIR ,P?SOUTH>
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <G? ,CONSTRUCTION-LOC 55>>>
;"last clause in predicate: you can't
go south from bottom Construction row"
<PUT ,NORTH-EXITS 0
<+ ,CONSTRUCTION-LOC 108>>
<REPEAT ()
;"passage appears in room at other end"
<COND (<EQUAL?
<GET ,STORAGE-TABLE .CNT> 0>
<PUT ,STORAGE-TABLE .CNT
<+ <+ ,CONSTRUCTION-LOC 8>
,CONSTRUCTION-OFFSET>>
<PUT ,STORAGE-TABLE
<+ .CNT 1> ,N-S-PASSAGE>
<RETURN>)
(T
<SET CNT <+ .CNT 2>>)>>)>
<TELL "sou">)>
<TELL "th from the room." CR>)
(T
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<SETG NW-SE-PASSAGE-LOC
,CONSTRUCTION-LOC>)>
<COND (<ADJ-USED? ,WALL ,W?NORTHWEST ,W?NW>
<SETG NW-SE-PASSAGE-DIR ,P?NW>
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <OR <EQUAL?
<MOD ,CONSTRUCTION-LOC 8>
0>
<L? ,CONSTRUCTION-LOC 8>>>>
;"last predicate clause: you can't go NW
from top or west rows of Construction"
<PUT ,SE-EXITS 0
<+ ,CONSTRUCTION-LOC 91>>
<REPEAT ()
;"passage appears in room at other end"
<COND (<EQUAL?
<GET ,STORAGE-TABLE .CNT> 0>
<PUT ,STORAGE-TABLE .CNT
<+ <- ,CONSTRUCTION-LOC 9>
,CONSTRUCTION-OFFSET>>
<PUT ,STORAGE-TABLE
<+ .CNT 1> ,NW-SE-PASSAGE>
<RETURN>)
(T
<SET CNT <+ .CNT 2>>)>>)>
<TELL "northwe">)
(T
<SETG NW-SE-PASSAGE-DIR ,P?SE>
<COND (<AND <EQUAL? ,HERE ,CONSTRUCTION>
<NOT <OR <EQUAL?
<MOD ,CONSTRUCTION-LOC 8>
7>
<G? ,CONSTRUCTION-LOC 55>>>>
;"last predicate clause: you can't go SE
from bottom or east rows of Const site"
<PUT ,SE-EXITS 0
<+ ,CONSTRUCTION-LOC 100>>
<REPEAT ()
;"passage appears in room at other end"
<COND (<EQUAL?
<GET ,STORAGE-TABLE .CNT> 0>
<PUT ,STORAGE-TABLE .CNT
<+ <+ ,CONSTRUCTION-LOC 9>
,CONSTRUCTION-OFFSET>>
<PUT ,STORAGE-TABLE
<+ .CNT 1> ,NW-SE-PASSAGE>
<RETURN>)
(T
<SET CNT <+ .CNT 2>>)>>)>
<TELL "southea">)>
<TELL "st from the room." CR>)>)>)>>
<ROUTINE PASSAGE-THERE ("AUX" (PASSAGE? <>))
<COND (<ADJ-USED? ,WALL ,W?NORTH ,W?N>
<COND (<EQUAL? ,HERE ,PEG-ROOM>
<COND (<NOT ,PEG-PASSAGE-OPENED>
<REPELLED "north">
<SET PASSAGE? ,M-FATAL>)
(T
<SET PASSAGE? <>>)>)
(<EQUAL? ,HERE ,SECRET-PASSAGE>
<COND (<NOT ,SECRET-PASSAGE-OPEN>
<REPELLED "north">
<SET PASSAGE? ,M-FATAL>)
(T
<SET PASSAGE? <>>)>)
(<EQUAL? ,HERE ,CONSTRUCTION>
<COND (<INTBL? ,NORTH-EXITS ,CONSTRUCTION-LOC 11>
<SET PASSAGE? T>)>)
(<AND <EQUAL? ,HERE ,WEIRD>
<NOT <EQUAL? ,TOWER-BEATEN ,PYRAMID>>>
<REPELLED "north">
<SET PASSAGE? ,M-FATAL>)
(<EQUAL? ,HERE ,G-U-MOUNTAIN>
<COND (<IN? ,BOULDER ,HERE>
<REPELLED "north">
<SET PASSAGE? ,M-FATAL>)
(T
<SET PASSAGE? <>>)>)
(<GETPT ,HERE ,P?NORTH>
<SET PASSAGE? T>)>)
(<ADJ-USED? ,WALL ,W?SOUTH ,W?S>
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<COND (<INTBL? ,NORTH-EXITS <+ ,CONSTRUCTION-LOC 8> 11>
<SET PASSAGE? T>)>)
(<EQUAL? ,HERE ,THRONE-ROOM>
<COND (<NOT ,SECRET-PASSAGE-OPEN>
<REPELLED "south">
<SET PASSAGE? ,M-FATAL>)
(T
<SET PASSAGE? <>>)>)
(<GETPT ,HERE ,P?SOUTH>
<SET PASSAGE? T>)>)
(<ADJ-USED? ,WALL ,W?NORTHWEST ,W?NW>
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<COND (<INTBL? ,SE-EXITS <- ,CONSTRUCTION-LOC 9> 7>
<SET PASSAGE? T>)>)
(<EQUAL? ,HERE ,PERIMETER-WALL>
<SET PASSAGE? <>>)
(<GETPT ,HERE ,P?NW>
<SET PASSAGE? T>)>)
(<ADJ-USED? ,WALL ,W?SOUTHEAST ,W?SE>
<COND (<EQUAL? ,HERE ,CONSTRUCTION>
<COND (<INTBL? ,SE-EXITS ,CONSTRUCTION-LOC 7>
<SET PASSAGE? T>)>)
(<GETPT ,HERE ,P?SE>
<SET PASSAGE? T>)>)>
<COND (<EQUAL? .PASSAGE? ,M-FATAL> ;"handled earlier in routine"
<RTRUE>)
(.PASSAGE?
<TELL "There's already an exit in that direction!" CR>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE REPELLED (STRING)
<TELL
"Strangely, the passage seems repelled by the " .STRING " wall, as though
two inconsistent types of magic were at work in the same place." CR>>
<OBJECT GLOBAL-PASSAGE
(LOC GLOBAL-OBJECTS)
(DESC "passage")
(SYNONYM PASSAGE PASSAGEWAY TUNNEL)
(ADJECTIVE GLOOMY DARK SECRET HIDDEN WIDE NARROW LOW STEEP SLOPING
DUSTY UNEVEN WINDING FORBIDDING GRAVELLY HALF-BURIED
HIGHWAY POORLY-DUG)
(ACTION GLOBAL-PASSAGE-F)>
<ROUTINE GLOBAL-PASSAGE-F ()
<COND (<VERB? ENTER>
<V-WALK-AROUND>)>>
<OBJECT CEILING
(LOC GLOBAL-OBJECTS)
(FLAGS NDESCBIT TOUCHBIT)
(DESC "ceiling")
(SYNONYM CEILING ROOF)
(ADJECTIVE LOW HIGH)
(ACTION CEILING-F)>
<ROUTINE CEILING-F ()
<COND (<AND <NOUN-USED? ,CEILING ,W?ROOF>
<EQUAL? ,HERE ,ROOF ,PARAPET>>
<COND (<VERB? THROW-FROM>
<REMOVE ,PRSO>
<COND (<OR <PRSO? ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,GROUND>)>
<TELL
"You hear a \"splat\" as" T ,PRSO " sinks into the ground far below." CR>)
(<PRSO? ,CEILING>
<PERFORM-PRSA ,GLOBAL-HERE ,PRSI>)
(T
<PERFORM-PRSA ,PRSO ,GLOBAL-HERE>)>)
(<AND <FSET? ,HERE ,OUTSIDEBIT>
<HANDLE ,CEILING>>
<CANT-SEE ,CEILING>)
(<VERB? EXAMINE>
<COND (<EQUAL? ,HERE ,BARBICAN>
<TELL
"It's too gloomy in here to make out any of the features of the ceiling." CR>)
(<EQUAL? ,HERE ,MEGABOZ-HUT>
<TELL ,MEGABOZ-CEILING-DESC CR>)>)
(<VERB? LOOK-UNDER>
<PERFORM ,V?LOOK>
<RTRUE>)>>
<OBJECT SLIME
(LOC LOCAL-GLOBALS)
(DESC "slime")
(SYNONYM SLIME)
(ADJECTIVE THICK BLACK)
(FLAGS NARTICLEBIT)
(ACTION SLIME-F)>
<ROUTINE SLIME-F ()
<COND (<VERB? TASTE TOUCH EAT>
<TELL "Mega-yucko!" CR>)>>
<OBJECT WATER
(LOC GLOBAL-OBJECTS)
(DESC "water")
(SYNONYM WATER WATERS GLOOP GLOOPS)
(ADJECTIVE ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE ;TEN INT.NUM)
(FLAGS NARTICLEBIT)
(GENERIC G-VIAL-WATER-F)
(OWNER <>) ;"set by GOTO"
(ACTION WATER-F)>
<ROUTINE WATER-F ("AUX" X)
<COND (<SET X <FIND-WATER>>
T)
(<AND <VISIBLE? ,LARGE-VIAL>
<VISIBLE? ,SMALL-VIAL>
<G? ,LARGE-VIAL-GLOOPS 0>
<G? ,SMALL-VIAL-GLOOPS 0>>
<TELL ,WHICH-WATER>
<RTRUE>)
(<AND <VISIBLE? ,LARGE-VIAL>
<G? ,LARGE-VIAL-GLOOPS 0>>
<SET X ,LARGE-VIAL>)
(<AND <VISIBLE? ,SMALL-VIAL>
<G? ,SMALL-VIAL-GLOOPS 0>>
<SET X ,SMALL-VIAL>)
(<NOT <HANDLE ,WATER>>
<RFALSE>)
(T
<TELL ,YOU-CANT-SEE-ANY "water here.]" CR>
<RTRUE>)>
<COND (<AND <VERB? COUNT>
<NOUN-USED? ,WATER ,W?GLOOPS>>
<COND (<VISIBLE? ,LARGE-VIAL>
<TELL "The large vial ">
<COND (<EQUAL? ,LARGE-VIAL-GLOOPS 0>
<TELL "is empty">)
(T
<TELL "contains " N ,LARGE-VIAL-GLOOPS " gloop">
<COND (<NOT <EQUAL? ,LARGE-VIAL-GLOOPS 1>>
<TELL "s">)>)>
<COND (<VISIBLE? ,SMALL-VIAL>
<TELL ". ">)
(T
<TELL ,PERIOD-CR>)>)>
<COND (<VISIBLE? ,SMALL-VIAL>
<TELL "The small vial ">
<COND (<EQUAL? ,SMALL-VIAL-GLOOPS 0>
<TELL "is empty">)
(T
<TELL "contains " N ,SMALL-VIAL-GLOOPS " gloop">
<COND (<NOT <EQUAL? ,SMALL-VIAL-GLOOPS 1>>
<TELL "s">)>)>
<TELL ,PERIOD-CR>)>)
(<AND <VERB? FILL>
<PRSI? ,WATER>>
<COND (<PRSO? ,SMALL-VIAL ,LARGE-VIAL>
<COND (<EQUAL? .X ,LARGE-VIAL>
<PERFORM ,V?FILL ,PRSO ,LARGE-VIAL>
<RTRUE>)
(<EQUAL? .X ,SMALL-VIAL>
<PERFORM ,V?FILL ,PRSO ,SMALL-VIAL>
<RTRUE>)
(T
<RFALSE> ;"handled by VIAL-F")>)
(<PRSO? ,CUP>
<TELL
"The water evaporates in a puff of smoke as soon as it touches the cup.
A strong magic is at work here!" CR>)
(T
<IMPOSSIBLES>)>)
(<AND <VERB? REMOVE EMPTY>
<NOT ,PRSI>
<NOUN-USED? ,WATER ,W?GLOOP ,W?GLOOPS>
<OR <VISIBLE? ,LARGE-VIAL>
<VISIBLE? ,SMALL-VIAL>>>
<COND (<AND <VISIBLE? ,LARGE-VIAL>
<VISIBLE? ,SMALL-VIAL>>
<COND (<AND ,LARGE-VIAL-GLOOPS
,SMALL-VIAL-GLOOPS>
<TELL "There's water in both vials." CR>
<RTRUE>)
(,LARGE-VIAL-GLOOPS
<SETG PRSI ,LARGE-VIAL>)
(,SMALL-VIAL-GLOOPS
<SETG PRSI ,SMALL-VIAL>)
(T
<TELL "Neither vial contains water!" CR>
<RTRUE>)>)
(<VISIBLE? ,LARGE-VIAL>
<SETG PRSI ,LARGE-VIAL>)
(T
<SETG PRSI ,SMALL-VIAL>)>
<PERFORM ,V?EMPTY-FROM ,WATER ,PRSI>
<RTRUE>)
(<VERB? DRINK>
<TELL "You're not thirsty." CR>)
(<VERB? LOOK-INSIDE LOOK-UNDER EXAMINE>
<TELL "You see nothing of interest." CR>)
(<VERB? REACH-IN TOUCH>
<TELL "Your hand is now wet">
<COND (<EQUAL? ,HERE ,OASIS>
<TELL " and cold">)>
<TELL ,PERIOD-CR>)
(<AND <VERB? PUT PUT-ON>
<PRSI? ,WATER>>
<COND (<IN? ,PROTAGONIST ,DB>
<TELL
"You can't reach the water -- the bathysphere is closed! (Fortunately.)" CR>
<RTRUE>)
(<EQUAL? ,HERE ,PARLOR>
<MOVE ,PRSO ,FISH-TANK>)
(<EQUAL? ,HERE ,LAKE-FLATHEAD>
<COND (<FSET? ,PRSO ,ANIMATEDBIT>
<REMOVE ,PRSO>)
(T
<MOVE ,PRSO ,LAKE-BOTTOM>)>)
(T
<COND (<OR <PRSO? ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,WATER>)>
<REMOVE ,PRSO>)>
<TELL "With a \"p">
<COND (<AND <PRSO? ,CANDLE ,GUTTERING-TORCH ,FLICKERING-TORCH>
<FSET? ,PRSO ,ONBIT>>
<FCLEAR ,PRSO ,ONBIT>
<FCLEAR ,PRSO ,FLAMEBIT>
<COND (<PRSO? ,GUTTERING-TORCH>
<DEQUEUE I-GUTTERING-TORCH>)
(<PRSO? ,FLICKERING-TORCH>
<DEQUEUE I-FLICKERING-TORCH>)>
<TELL "ffft">)
(T
<TELL "lunk">)>
<TELL ",\"" T ,PRSO " sinks into the water">
<COND (<PRSO? ,ROOSTER ,FOX>
<TELL ", you heartless animal drowner, you">)>
<TELL ,PERIOD-CR>)
(<VERB? ENTER SWIM>
<COND (<EQUAL? .X ,SWAMP>
<TELL
"You're already ankle-deep in the swampy water, which is yucky enough." CR>)
(<EQUAL? .X ,FRIGID-RIVER>
<TELL
"The Frigid River is known for its unpredictable currents." CR>)
(<EQUAL? .X ,FLATHEAD-OCEAN>
<TELL
"The pounding surf would kill you in a moment." CR>)
(<EQUAL? .X ,LAKE-FLATHEAD>
<COND (,ALLIGATOR
<JIGS-UP
"The Loch Flatheadia Monster, usually dismissed as a fairy tale, wells
up from the depths of the lake and swallows you.">)
(T
<TELL
"These waters are known for their hungry denizens." CR>)>)
(<EQUAL? .X ,STREAM-OBJECT>
<DO-WALK ,P?WEST>)
(<EQUAL? .X ,OASIS-OBJECT>
<TELL
"Only a Polar Gumffbeast could swim in such cold water!" CR>)
(<EQUAL? .X ,FISH-TANK>
<COND (,DESCRIBED-TANK-AS-LARGE
<TELL
"There's no way you could fit into this fish tank! [All right, I'll admit
that I went a little overboard when I described the fish tank as \"bigger
than a swimming pool.\"]" CR>)
(T
<SETG DESCRIBED-TANK-AS-SMALL T>
<TELL
"What? Swim in an itsy-bitsy fish tank like this one?!?" CR>)>)
(<EQUAL? .X ,MOAT>
<COND (,ALLIGATOR
<JIGS-UP
"The much, much larger alligator who lives in the moat apparently considers
this a territorial invasion.">)
(T
<TELL
"Not recommended. Moats tend to be populated with big,
nasty alligators." CR>)>)>)
(<PRSO? ,WATER>
<PERFORM-PRSA .X ,PRSI>)
(T
<PERFORM-PRSA ,PRSO .X>)>>
<ROUTINE FIND-WATER ()
<COND (<GLOBAL-IN? ,MOAT ,HERE>
<RETURN ,MOAT>)
(<EQUAL? ,HERE ,STREAM>
<RETURN ,STREAM-OBJECT>)
(<EQUAL? ,HERE ,PARLOR>
<RETURN ,FISH-TANK>)
(<EQUAL? ,HERE ,RIVERS-END>
<RETURN ,FRIGID-RIVER>)
(<GLOBAL-IN? ,FLATHEAD-OCEAN ,HERE>
<RETURN ,FLATHEAD-OCEAN>)
(<OR <EQUAL? ,HERE ,LAKE-FLATHEAD>
<GLOBAL-IN? ,LAKE-FLATHEAD ,HERE>>
<RETURN ,LAKE-FLATHEAD>)
(<GLOBAL-IN? ,SWAMP ,HERE>
<RETURN ,SWAMP>)
(<GLOBAL-IN? ,FJORD ,HERE>
<RETURN ,FJORD>)
(<EQUAL? ,HERE ,OASIS>
<RETURN ,OASIS-OBJECT>)
(T
<RFALSE>)>>
<OBJECT SMALL-VIAL-WATER
(DESC "water in the small vial")
(SYNONYM WATER GLOOP GLOOPS)
(ADJECTIVE ONE TWO THREE FOUR INT.NUM)
(FLAGS NARTICLEBIT)
(GENERIC G-VIAL-WATER-F)
(ACTION VIAL-WATER-F)>
<OBJECT LARGE-VIAL-WATER
(DESC "water in the large vial")
(SYNONYM WATER GLOOP GLOOPS)
(ADJECTIVE ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE INT.NUM)
(FLAGS NARTICLEBIT)
(GENERIC G-VIAL-WATER-F)
(ACTION VIAL-WATER-F)>
<ROUTINE VIAL-WATER-F ()
<COND (<AND <VERB? TAKE>
<EQUAL? ,P-PRSA-WORD ,W?REMOVE>>
<PERFORM ,V?EMPTY-FROM ,WATER
<COND (<PRSO? ,LARGE-VIAL-WATER> ,LARGE-VIAL)
(T ,SMALL-VIAL)>>)>>
<ROUTINE G-VIAL-WATER-F (SR F "AUX" ADJ VB)
<COND (<SET ADJ <FIND-ADJS .F>>
<SET ADJ <CONVERT-NUMBER .ADJ>>)>
<COND (<L? ,LARGE-VIAL-GLOOPS .ADJ>
<COND (<L? ,SMALL-VIAL-GLOOPS .ADJ>
<RETURN <>>)
(T
<RETURN ,SMALL-VIAL-WATER>)>)
(T
<COND (<L? ,SMALL-VIAL-GLOOPS .ADJ>
<RETURN ,LARGE-VIAL-WATER>)
(T
<RETURN <>>)>)
;(<AND <EQUAL? <SET VB <PARSE-ACTION ,PARSE-RESULT>> ,V?POUR>
<PRSI? ,LARGE-VIAL>>
<RETURN ,SMALL-VIAL-WATER>)
;(<AND <EQUAL? .VB ,V?POUR>
<PRSI? ,SMALL-VIAL>>
<RETURN ,LARGE-VIAL-WATER>)
;(<AND <EQUAL? .VB ,V?EMPTY-FROM>
<PRSI? ,LARGE-VIAL>>
<RETURN ,LARGE-VIAL-WATER>)
;(<AND <EQUAL? .VB ,V?EMPTY-FROM>
<PRSI? ,SMALL-VIAL>>
<RETURN ,SMALL-VIAL-WATER>)
;(<GLOBAL-IN? ,WATER ,HERE>
<RETURN ,WATER>)
;(<AND <VISIBLE? ,SMALL-VIAL-WATER>
<VISIBLE? ,LARGE-VIAL-WATER>>
<TELL ,WHICH-WATER>
<RETURN ,ROOMS>)
;(T
<RETURN ,WATER>)>
;<RFALSE>>
;<OBJECT SKY
(LOC GLOBAL-OBJECTS)
(DESC "sky")
(SYNONYM SKY)
(ACTION SKY-F)>
;<ROUTINE SKY-F ()
<COND (<AND <NOT <FSET? ,HERE ,OUTSIDEBIT>>
<HANDLE ,SKY>>
<CANT-SEE ,SKY>)>>
<CONSTANT BODY-PART-OWNERS
<TABLE (PURE LENGTH) PROTAGONIST DIMWIT JESTER EXECUTIONER
SICKLY-WITCH PRICKLY-WITCH>>
<OBJECT HANDS
(LOC GLOBAL-OBJECTS)
(SYNONYM HANDS HAND PALM FINGER FINGERS)
(ADJECTIVE BARE YOUR)
(DESC ;"your " "hands")
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS NDESCBIT PLURALBIT TOUCHBIT ;NARTICLEBIT PARTBIT)
(ACTION HANDS-F)>
<ROUTINE HANDS-F ("AUX" ACTOR)
<COND (<VERB? CLEAN>
<WASTES>)
(<VERB? SHAKE>
<COND (<SET ACTOR <FIND-IN ,HERE ,ACTORBIT "with">>
<PERFORM ,V?SHAKE-WITH ,HANDS .ACTOR>
<RTRUE>)
(T
<TELL "There's no one here to shake hands with." CR>)>)
(<VERB? COUNT>
<COND (<NOUN-USED? ,HANDS ,W?FINGER ,W?FINGERS>
<TELL "Ten">)
(T
<TELL "Two">)>
<TELL ", as usual." CR>)
(<AND <VERB? OPEN CLOSE>
,HAND-IN-WALDO>
<PERFORM-PRSA ,WALDO>
<RTRUE>)
(<VERB? REMOVE TAKE-OFF>
<COND (,HAND-IN-WALDO
<SETG HAND-IN-WALDO <>>
<TELL "You withdraw your hand." CR>)
(,FINGER-ON-STRAW
<SETG FINGER-ON-STRAW <>>
<SETG ELIXIR-TRAPPED <>>
<TELL
"You remove your finger from the end of the straw." CR>)
(T
<TELL
"To quote an old song, \"The hand bone's connected to the
wrist bone...\"" CR>)>)
(<AND <VERB? PUT-ON>
<PRSO? ,GLOVE>>
<PERFORM ,V?WEAR ,GLOVE>
<RTRUE>)
(<AND <VERB? TAKE-WITH>
<PRSI? ,HANDS>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<AND <VERB? SNAP>
<NOUN-USED? ,HANDS ,W?FINGER ,W?FINGERS>
<NOT ,TIME-STOPPED>>
<COND (<IN? ,PROTAGONIST ,SMALL-THRONE>
<OPEN-SECRET-PASSAGE?>)
(T
<TELL "\"Snap!\"" CR>)>)
;(<AND <VERB? PUT-ON>
<PRSI? ,EYES>>
<PERFORM ,V?SPUT-ON ,EYES ,HANDS>
<RTRUE>)
;(<AND <VERB? PUT-ON PUT>
<PRSI? ,EARS>>
<PERFORM ,V?SPUT-ON ,EARS ,HANDS>
<RTRUE>)>>
<ROUTINE OPEN-SECRET-PASSAGE? ()
<COND (,SECRET-PASSAGE-OPEN
<SETG SECRET-PASSAGE-OPEN <>>
<SETG COMPASS-CHANGED T>
<TELL "The secret passage closes!" CR>)
(,SECRET-PASSAGE-DISCOVERED
<SETG SECRET-PASSAGE-OPEN T>
<SETG COMPASS-CHANGED T>
<TELL "The secret passage opens once again." CR>)
(T
<SETG SECRET-PASSAGE-OPEN T>
<SETG SECRET-PASSAGE-DISCOVERED T>
<SETG COMPASS-CHANGED T>
<TELL
"Behind the throne, accompanied by a puff of dust, a secret passage grinds
open, leading south into darkness!">
<COND (<IN? ,JESTER ,HERE>
<TELL
" The jester applauds you, howling with mysterious delight.">)>
<CRLF>
<INC-SCORE ,SECRET-PASSAGE-SCORE>
<SETG SECRET-PASSAGE-SCORE 0>
<RTRUE>)>>
<OBJECT FEET
(LOC GLOBAL-OBJECTS)
(SYNONYM FEET FOOT TOE TOES)
(ADJECTIVE YOUR)
(DESC ;"your " "feet")
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS NDESCBIT PLURALBIT TOUCHBIT ;NARTICLEBIT PARTBIT)
(ACTION FEET-F)>
<ROUTINE FEET-F ()
<COND (<AND <VERB? ENTER> ;"input was GET ON FEET"
<EQUAL? ,P-PRSA-WORD ,W?GET>>
<SETG P-PRSA-WORD ,W?STAND>
<SETG PRSO <>>
<V-STAND>)>>
<OBJECT HEAD
(LOC GLOBAL-OBJECTS)
(DESC "head" ;"your head")
(SYNONYM HEAD)
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS ;NARTICLEBIT PARTBIT)>
<OBJECT EYES
(LOC GLOBAL-OBJECTS)
(DESC ;"your " "eyes")
(SYNONYM EYE EYES)
(ADJECTIVE MY MINE ORACLE\'S AMULET\'S FIRST SECOND THIRD FOURTH
ONE TWO THREE FOUR)
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS ;NARTICLEBIT PLURALBIT PARTBIT)
(ACTION EYES-F)>
<ROUTINE EYES-F ("AUX" WHOSE-EYE)
<COND (<ADJ-USED? ,EYES ,W?MY ,W?MINE>
<SET WHOSE-EYE ,PROTAGONIST>)
(<ADJ-USED? ,EYES ,W?ORACLE\'S>
<SET WHOSE-EYE ,ORACLE-OBJECT>)
(<ADJ-USED? ,EYES ,W?AMULET\'S>
<SET WHOSE-EYE ,AMULET>)
(<EQUAL? ,HERE ,ORACLE>
<SET WHOSE-EYE ,ORACLE-OBJECT>)
(<VISIBLE? ,AMULET>
<SET WHOSE-EYE ,AMULET>)
(T
<SET WHOSE-EYE ,PROTAGONIST>)>
<COND (<AND <OR <ADJ-USED? ,EYES ,W?THREE ,W?FOUR>
<ADJ-USED? ,EYES ,W?THIRD ,W?FOURTH>>
<EQUAL? .WHOSE-EYE ,PROTAGONIST>>
<CANT-SEE ,EYES>)
(<VERB? COUNT>
<COND (<EQUAL? .WHOSE-EYE ,PROTAGONIST>
<TELL
"Two, unless you've been careless with pointy sticks lately." CR>)
(T
<TELL "Four." CR>)>)
(<AND <VERB? OPEN CLOSE>
<EQUAL? .WHOSE-EYE ,ORACLE-OBJECT ,AMULET>>
<TELL "There's no way to do that yourself." CR>)
(<VERB? CLOSE>
<PERFORM ,V?SLEEP>
<RTRUE>)
(<VERB? OPEN>
<TELL "Your eyes ARE open!" CR>)>>
;<OBJECT EARS
(LOC GLOBAL-OBJECTS)
(DESC ;"your " "ears")
(SYNONYM EAR EARS)
(ADJECTIVE YOUR)
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS ;NARTICLEBIT PLURALBIT PARTBIT)>
<OBJECT NOSE
(LOC GLOBAL-OBJECTS)
(DESC ;"your " "nose")
(SYNONYM NOSE NOSTRIL)
(ADJECTIVE YOUR)
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS ;NARTICLEBIT PARTBIT)
(ACTION NOSE-F)>
<ROUTINE NOSE-F ()
<COND (<VERB? PICK>
<TELL "Oh, gross!" CR>)>>
<OBJECT MOUTH
(LOC GLOBAL-OBJECTS)
(DESC ;"your " "mouth")
(SYNONYM MOUTH)
(ADJECTIVE YOUR)
(OWNER BODY-PART-OWNERS ;PROTAGONIST)
(FLAGS ;NARTICLEBIT PARTBIT)
(ACTION MOUTH-F)>
<ROUTINE MOUTH-F ()
<COND (<AND <VERB? PUT>
<PRSI? ,MOUTH>>
<COND (<PRSO? ,STRAW>
<TELL
"Other than perhaps satisfying some primitive phallic urge of yours, this
accomplishes nothing. [If you want to drink something with the straw, just
try DRINK THING WITH STRAW!]" CR>)
(T
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)>)
(<VERB? ENTER>
<TELL "That would involve quite a contortion!" CR>)>>
<OBJECT PROTAGONIST
(LOC BANQUET-HALL)
;(SYNONYM PROTAGONIST)
(DESC "self" ;"it") ;"SWG 4-Oct-88"
(SIZE 1) ;"since routine WEIGHT adds PROTAGONIST weight to load"
(FLAGS NDESCBIT ;INVISIBLE ;ACTORBIT TRANSBIT SEARCHBIT
;"last BIT added at Stu's suggestion for JESTER, TAKE thing you're holding")>
<END-SEGMENT>
<BEGIN-SEGMENT CASTLE>
<OBJECT ME
(LOC GLOBAL-OBJECTS)
(SYNONYM ;I ME MYSELF SELF ;YOU ;YOURSELF)
(DESC "yourself")
(FLAGS ;ACTORBIT TOUCHBIT NARTICLEBIT)
(RESEARCH
"Son of a gun! There's no entry about you! This is one worthless
encyclopedia, huh? Why, you're about as famous as they come! At
least a third of the people in your village have heard of you, for
instance...")
(ACTION ME-F)>
<END-SEGMENT>
<BEGIN-SEGMENT 0>
<ROUTINE ME-F ()
<COND (<VERB? TELL YELL CALL>
<TELL
"Talking to yourself is a sign of impending mental collapse." CR>
<STOP>)
(<VERB? ALARM>
<TELL "You are already awake." CR>)
(<VERB? EAT>
<TELL "Auto-cannibalism is not the answer." CR>)
(<VERB? EXAMINE>
<V-DIAGNOSE>)
(<AND <VERB? GIVE>
<PRSI? ,ME>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<AND <VERB? SHOW>
<PRSI? ,ME>>
<PERFORM ,V?EXAMINE ,PRSO>
<RTRUE>)
(<VERB? MOVE>
<V-WALK-AROUND>)
(<VERB? SEARCH>
<V-INVENTORY>
<RTRUE>)
(<VERB? KILL MUNG KICK>
<COND (<EQUAL? ,P-PRSA-WORD ,W?KILL ,W?MURDER>
<JIGS-UP "Done.">)
(T
<TELL
"[If you're really into masochistic fantasies, perhaps you'd be more
at home playing Infocom's ">
<HLIGHT ,H-ITALIC>
<TELL "LEATHER GODDESSES OF PHOBOS">
<HLIGHT ,H-NORMAL>
<TELL " (tm).]" CR>)>)
(<VERB? FIND>
<TELL "You're in" TR ,HERE>)>>
<OBJECT GLOBAL-HERE
(LOC GLOBAL-OBJECTS)
(DESC "room")
(SYNONYM ROOM PLACE LOCATION HALL AREA THERE HERE)
(ACTION GLOBAL-HERE-F)>
<ROUTINE GLOBAL-HERE-F ()
<COND (<VERB? LOOK LOOK-INSIDE EXAMINE>
<V-LOOK>)
(<VERB? ENTER WALK-TO>
<COND (<EQUAL? ,HERE ,LAKE-FLATHEAD>
<PERFORM ,V?SWIM ,LAKE-FLATHEAD>
<RTRUE>)
(T
<TELL ,LOOK-AROUND>)>)
(<VERB? LEAVE EXIT>
<DO-WALK ,P?OUT>)
(<VERB? SEARCH>
<TELL ,NOTHING-NEW>)
(<AND <VERB? PUT PUT-ON>
<PRSI? ,GLOBAL-HERE>>
<COND (<EQUAL? ,P-PRSA-WORD ,W?THROW>
<PERFORM ,V?THROW ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>)>>
<OBJECT GLOBAL-BLDG
(LOC LOCAL-GLOBALS)
(DESC "building")
(SYNONYM BUILDING CLUSTER)
(ADJECTIVE NEW SMALL STONE IMPRESSIVE)
(ACTION GLOBAL-BLDG-F)>
<ROUTINE GLOBAL-BLDG-F ()
<COND (<AND <VERB? ENTER>
<EQUAL? ,HERE ,FISHING-VILLAGE ,WHARF>>
<DO-WALK ,P?NORTH>)
(<VERB? EXIT LEAVE>
<DO-WALK ,P?OUT>)>>
<OBJECT ARCH
(LOC LOCAL-GLOBALS)
(DESC "arch")
(SYNONYM ARCH ARCHWAY)
(ADJECTIVE STONE CRUMBLING)
(FLAGS VOWELBIT)
(ACTION ARCH-F)>
<ROUTINE ARCH-F ()
<COND (<VERB? ENTER>
<V-WALK-AROUND>)>>
<OBJECT WINDOW
(LOC LOCAL-GLOBALS)
(DESC "window")
(SYNONYM WINDOW WINDOWS GLASS PANE PANES)
(ADJECTIVE NARROW WIDER SLITTED GLASS BROKEN WINDOW)
(FLAGS NDESCBIT)
(ACTION WINDOW-F)>
<ROUTINE WINDOW-F ()
<COND (<VERB? LOOK-INSIDE>
<COND (<EQUAL? ,HERE ,GONDOLA>
<COND (<EQUAL? ,DIRIGIBLE-COUNTER 0>
<TELL "The dirigible is moored in a hangar." CR>)
(<EQUAL? ,DESTINATION ,SMALLER-HANGAR>
<TELL
<GET ,DIRIGIBLE-TRIP-DESCS <- ,DIRIGIBLE-COUNTER 2>> CR>)
(T
<TELL
<GET ,DIRIGIBLE-TRIP-DESCS <- 5 ,DIRIGIBLE-COUNTER>> CR>)>)
(<EQUAL? ,HERE ,DIMWITS-ROOM ,BASTION ,SOLAR>
<TELL
"The window offers a splendid view of the castle grounds." CR>)
(<EQUAL? ,HERE ,HOTHOUSE>
<TELL "You see a ruined castle." CR>)
(<EQUAL? ,HERE ,FR-PENTHOUSE ,OFFICES-NORTH
,OFFICES-SOUTH ,OFFICES-EAST ,OFFICES-WEST>
<COND (<OR <EQUAL? ,HERE ,FR-PENTHOUSE>
<G? ,FLOOR-NUMBER 20>>
<TELL
"You can't see much; the air is pretty smoggy today." CR>)
(T
<TELL
"The window offers a good view of Flatheadia." CR>)>)
(T
<TELL "Bug 29." CR>)>)
(<VERB? OPEN CLOSE>
<COND (<EQUAL? ,HERE ,HOTHOUSE>
<TELL "There's not much left of the windows." CR>)
(<EQUAL? ,HERE ,DIMWITS-ROOM ,BASTION ,SOLAR>
<TELL
"The window is just a narrow slit in the stone wall; there's no way
to open or close it." CR>)
(T
<TELL "The window is unopenable." CR>)>)
(<VERB? ENTER EXIT LEAP-OFF>
<COND (<EQUAL? ,HERE ,HOTHOUSE>
<TELL
"You cut yourself to ribbons on the broken glass." CR>)
(<EQUAL? ,HERE ,DIMWITS-ROOM ,BASTION ,SOLAR>
<TELL
"These slitted windows are narrower than your body." CR>)
(T
<DO-FIRST "open" ,WINDOW>)>)
(<VERB? PUT-THROUGH>
<COND (<EQUAL? ,HERE ,HOTHOUSE ,DIMWITS-ROOM ,SOLAR ,BASTION>
<REMOVE ,PRSO>
<TELL
"You hear a \"splat\" as" T ,PRSO " sinks into the ">
<COND (<EQUAL? ,HERE ,HOTHOUSE>
<COND (<OR <PRSO? ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,WATER>)>
<TELL "swamp outside">)
(T
<COND (<OR <PRSO? ,PERCH>
<ULTIMATELY-IN? ,PERCH ,PRSO>>
<SETG REMOVED-PERCH-LOC ,GROUND>)>
<TELL"ground far below">)>
<TELL ,PERIOD-CR>)
(T
<DO-FIRST "open" ,WINDOW>)>)
(<AND <VERB? EXAMINE>
<EQUAL? ,HERE ,HOTHOUSE>>
<TELL "Many of the window panes are shattered." CR>)>>
<OBJECT LOCK-OBJECT
(LOC LOCAL-GLOBALS)
(DESC "lock")
(SYNONYM LOCK KEYHOLE HOLE)
(ADJECTIVE LARGE BASIC COMBINATION KEY)
(ACTION LOCK-OBJECT-F)>
<ROUTINE LOCK-OBJECT-F ()
<COND (<AND <NOUN-USED? ,LOCK-OBJECT ,W?KEYHOLE>
<EQUAL? ,HERE ,LOWEST-HALL>>
<CANT-SEE ,LOCK-OBJECT>)
(<VERB? EXAMINE>
<COND (<EQUAL? ,HERE ,LOWEST-HALL>
<TELL "It's a large combination dial lock." CR>)
(T
<TELL "It's your basic keyhole lock." CR>)>)
(<VERB? LOOK-INSIDE>
<TELL
"You see nothing of interest, you shameless Peeping Tom you." CR>)
(<VERB? PICK>
<TELL "You have neither the tools nor the expertise." CR>)
(<AND <VERB? OPEN UNLOCK LOCK>
<PRSO? ,LOCK-OBJECT>>
<COND (<GLOBAL-IN? ,EAST-DOOR ,HERE>
<PERFORM-PRSA ,EAST-DOOR ,PRSI>)
(<GLOBAL-IN? ,WEST-DOOR ,HERE>
<PERFORM-PRSA ,WEST-DOOR ,PRSI>)
(<GLOBAL-IN? ,VAULT-DOOR ,HERE>
<PERFORM-PRSA ,VAULT-DOOR ,PRSI>)
(<EQUAL? ,HERE ,ATTIC>
<PERFORM-PRSA ,TRUNK ,PRSI>)>)>>
<OBJECT SIGN
(LOC LOCAL-GLOBALS)
(DESC "sign")
(SYNONYM SIGN)
(ADJECTIVE LARGE EYE-CATCHING)
(FLAGS READBIT)
(ACTION SIGN-F)>
<ROUTINE SIGN-F ("AUX" NUM)
<COND (<VERB? READ EXAMINE>
<COND (<EQUAL? ,HERE ,EXIT>
<TELL
"\"ROCKVILLE ESTATES: The new, prestigious address for the discriminating
Young Underground Professional|
64 units, Occupancy Spring 881|
Frobozz Magic Construction Company|
Quizbo Frotzwit, Managing Foreman\"" CR>)
(<EQUAL? ,HERE ,CROSSROADS>
<TELL
"\"JUNCTION of GUH-90 and GUH-95|
NORTH: Flatheadia, 1 bloit|
SOUTH: Shadowland, 15 bloits|
Royal Museum, 17 bloits|
Fublio Valley, 90 bloits|
EAST: White Cliffs Beach, 4 bloits|
Flood Control Dam #3, 4 bloits|
Aragain Falls, 5 bloits|
WEST: Port Foozle, 9 bloits|
Quilbozza Beach, 9 bloits\"" CR>)
(<EQUAL? ,HERE ,FISHING-VILLAGE>
<TELL "\"Sinners: Enter here for purification!\"" CR>)
(<EQUAL? ,HERE ,INQUISITION>
<TELL
"\"Sinners, take note!|
1. We cannot execute everyone at once! Please take a number!|
2. Everyone is permitted a final request.|
3. Tell the executioner your request when your number is called.|
4. If we cannot grant your final wish, we shall be quick and merciful. We
will behead you.|
5. If we CAN grant your final wish, we will hang you. Please note that this
is slow and excruciatingly painful.\"" CR>)
(<EQUAL? ,HERE ,NORTH-OF-ANTHAR>
<TELL
"\"We've got as many refugees from the Eastlands as we can handle!
Go somewhere else!\"" CR>)
(<EQUAL? ,HERE ,MINE-ENTRANCE>
<TELL "\"Warning! Falling rock zone!\"" CR>)
(<EQUAL? ,HERE ,TOLL-PLAZA>
<TELL
"\"Exact Change Only: 1 Zorkmid (coins only).\" Below
the sign is a basket." CR>)
(<EQUAL? ,HERE ,OUTSIDE-HOVEL>
<TELL "\"Korboz the Magnificent\"" CR>)
(<EQUAL? ,HERE ,OUTSIDE-SHACK>
<TELL
"\"Warning! This shack is protected against looting by powerful magic!\"" CR>)
(<EQUAL? ,HERE ,WARNING-ROOM>
<TELL
"\"Warning! This area is populated by three races: the Veritassi (who always
tell the truth), the Prevaricons (who always lie), and the Wishyfoo (who
alternate with every statement). Be aware that visitors to Veritass and
Prevaricon areas are immediately fed to ravenous hellhounds.\"" CR>)
(T
<TELL "Bug 49">)>)>>
<OBJECT STAIRS
(LOC LOCAL-GLOBALS)
(DESC "stair")
(SYNONYM FLIGHT STAIR STAIRS STAIRWAY STEP STEPS STAIRCASE GANGWAY)
(ADJECTIVE STEEP OMINOUS DARK WIDE STONE CIRCULAR WINDING SPIRAL
COBWEBBY CRUDE FORBIDDING DECREPIT)
(ACTION STAIRS-F)>
<ROUTINE STAIRS-F ()
<COND (<AND <EQUAL? ,HERE ,NORTH-SHORE ,EAST-SHORE
,SOUTH-SHORE ,WEST-SHORE>
<NOT <IN? ,PROTAGONIST ,YACHT>>>
<CANT-SEE ,STAIRS>)
(<VERB? CLIMB CLIMB-UP>
<DO-WALK ,P?UP>)
(<VERB? CLIMB-DOWN>
<DO-WALK ,P?DOWN>)>>
<OBJECT FIXED-LADDER
(LOC LOCAL-GLOBALS)
(DESC "ladder")
(SYNONYM LADDER)
(ADJECTIVE RICKETY)
(ACTION FIXED-LADDER-F)>
<ROUTINE FIXED-LADDER-F ()
<COND (<VERB? CLIMB CLIMB-UP>
<DO-WALK ,P?UP>)
(<VERB? CLIMB-DOWN>
<DO-WALK ,P?DOWN>)
(<VERB? TAKE>
<TELL "The ladder is attached to the wall." CR>)>>
<OBJECT BONES
(LOC LOCAL-GLOBALS)
(OWNER BONES)
(DESC "pile of old bones")
(SYNONYM BONE BONES PILE CREATURE ADVENTURER SKELETON SKELETONS)
(ADJECTIVE ADVENTURER CREATURE OLD)
(FLAGS NDESCBIT)
(ACTION BONES-F)>
<ROUTINE BONES-F ()
<COND (<TOUCHING? ,BONES>
<TELL "Let the dead lie in peace." CR>)>>
;"status line stuff"
;<CONSTANT S-TEXT 0> ;"<SCREEN 0> puts cursor in text part of screen"
;<CONSTANT S-WINDOW 1> ;"<SCREEN 1> puts cursor in window part of screen"
;<CONSTANT H-NORMAL 0> ;"<HLIGHT 0> returns printing to normal (default)"
;<CONSTANT H-INVERSE 1> ;"<HLIGHT 1> sets printing mode to inverse video"
;<CONSTANT H-BOLD 2> ;"<HLIGHT 2> sets printing mode to bold, else normal"
;<CONSTANT H-ITALIC 4> ;"<HLIGHT 4> italicizes, else underline, else normal"
;<CONSTANT D-SCREEN-ON 1> ;"<DIROUT 1> turns on printing to the screen"
;<CONSTANT D-SCREEN-OFF -1>;"<DIROUT -1> turns off printing to the screen"
;<CONSTANT D-PRINTER-ON 2> ;"<DIROUT 2> turns on printing to the printer"
;<CONSTANT D-PRINTER-OFF -2>;"<DIROUT -2> turns off printing to the printer"
;<CONSTANT D-TABLE-ON 3> ;"<DIROUT 3 .TABLE> turns on printing to that table"
;<CONSTANT D-TABLE-OFF -3> ;"<DIROUT -3> turns off printing to that table"
;<CONSTANT D-RECORD-ON 4> ;"<DIROUT 4> sends READs and INPUTs to record file"
;<CONSTANT D-RECORD-OFF -4>;"<DIROUT -4> stops sending READ and INPUT to file"
<ROUTINE CLEAR-BORDER ("AUX" X Y WRD)
<SCREEN ,S-WINDOW>
<COLOR ,FG-COLOR ,BG-COLOR> ;"clear to match text window"
<PICINF-PLUS-ONE ,TEXT-WINDOW-PIC-LOC>
<SET Y <ZGET ,PICINF-TBL 0>>
<SET X <ZGET ,PICINF-TBL 1>>
<WINPOS ,S-WINDOW 1 1>
<WINSIZE ,S-WINDOW .Y <LOWCORE HWRD>>
<CLEAR 1>
<COND (<G? .X 1>
<WINPOS ,S-WINDOW <+ .Y 1> 1>
<WINSIZE ,S-WINDOW <- <LOWCORE VWRD> .Y> <- .X 1>>
<CLEAR 1>
<WINPOS ,S-WINDOW <+ .Y 1> <+ <- <LOWCORE HWRD> .X> 1>>
<WINSIZE ,S-WINDOW <- <LOWCORE VWRD> .Y> .X>
<CLEAR 1>)>
<SETG SL-SCORE -1>
<SETG OLD-REGION <>>
<SETG OLD-HERE <>>
<SETG COMPASS-CHANGED T>
<COLOR 1 1>
<SCREEN ,S-TEXT>>
; "Make text window extend to bottom of screen (more or less) or to
top of bottom edge of border, depending..."
<ROUTINE ADJUST-TEXT-WINDOW (ID "AUX" (SCRY <LOWCORE VWRD>) WINY (ADJ 0))
<COND (.ID
<PICINF .ID ,PICINF-TBL>
<SET ADJ <ZGET ,PICINF-TBL 0>>)>
<SET WINY <- .SCRY <- <WINGET ,S-TEXT ,WTOP> 1> .ADJ>>
<SET WINY <* ,FONT-Y </ .WINY ,FONT-Y>>>
<WINSIZE ,S-TEXT .WINY <WINGET ,S-TEXT ,WWIDE>>>
;"Normal sizes/positions of windows 0 and 1."
<ROUTINE SPLIT-BY-PICTURE (ID "OPT" (CLEAR-SCREEN? <>) "AUX" Y X YS XS)
<SETG CURRENT-SPLIT .ID>
<COND (.CLEAR-SCREEN?
<CLEAR -1>)>
<PICINF .ID ,PICINF-TBL>
<WINPOS ,S-TEXT <+ <SET Y <ZGET ,PICINF-TBL 0>> 1>
<COND (<AND <NOT ,BORDER-ON>
<EQUAL? .ID ,TEXT-WINDOW-PIC-LOC>>
1)
(T
<+ <SET X <ZGET ,PICINF-TBL 1>> 1>)>>
<WINSIZE ,S-TEXT <- <LOWCORE VWRD> .Y>
<COND (<AND <NOT ,BORDER-ON>
<EQUAL? .ID ,TEXT-WINDOW-PIC-LOC>>
<* ,WIDTH ,FONT-X>)
(T
<- <LOWCORE HWRD> <* .X 2>>)>>
<WINPOS ,S-WINDOW 1 1>
<WINSIZE ,S-WINDOW .Y <LOWCORE HWRD>>>
<ROUTINE INIT-SL-WITH-SPLIT (WHICH "OPT" (DONT-CLEAR <>) "AUX" YFUDGE)
;<COND (.DONT-CLEAR
<SET YFUDGE <- <WINGET ,S-TEXT ,WHIGH> <WINGET ,S-TEXT ,WYPOS>>>)>
<COND (.WHICH
<SETG CURRENT-SPLIT .WHICH>)>
<INIT-STATUS-LINE .DONT-CLEAR>
;<COND (.DONT-CLEAR
<CURSET <- <WINGET ,S-TEXT ,WHIGH> .YFUDGE> 1>)>>
<REPLACE-DEFINITION STATUS-LINE
<ROUTINE INIT-STATUS-LINE ("OPT" (DONT-CLEAR <>) "AUX" (NUM 1) X Y)
<SETG OLD-HERE <>>
<SETG OLD-REGION <>>
<SETG SL-SCORE -1>
<SETG COMPASS-CHANGED T>
<COND (<NOT .DONT-CLEAR>
<CLEAR -1>)>
<SPLIT-BY-PICTURE ,CURRENT-SPLIT>
<COND (<EQUAL? ,CURRENT-SPLIT ,TEXT-WINDOW-PIC-LOC>
<ADJUST-TEXT-WINDOW 0>)
(<EQUAL? ,CURRENT-SPLIT ,F-SPLIT>
<ADJUST-TEXT-WINDOW ,F-BOTTOM>
<RTRUE>)
(T
<ADJUST-TEXT-WINDOW ,PBOZ-BOTTOM>
<RTRUE>)>
<SCREEN ,S-FULL>
<COND (,BORDER-ON
<DISPLAY <SET-BORDER> 1 1>
<PICSET ,COMPASS-PICSET-TBL>)
(T
<HLIGHT ,H-INVERSE>
<INVERSE-LINE 1>
<INVERSE-LINE 2>
<INVERSE-LINE 3>)>
<SCREEN ,S-WINDOW>
<FONT 4> ;"non-proportional"
<PICINF-PLUS-ONE ,HERE-LOC>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y> <GET ,PICINF-TBL 1>>
<COND (<OR <EQUAL? <LOWCORE INTID> ,DEC-20>
<NOT ,BORDER-ON>>
<HLIGHT ,H-INVERSE>)>
<COND (,BORDER-ON
<COLOR 1 -1>)>
<TELL "Moves:">
<PICINF-PLUS-ONE ,REGION-LOC>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y>
<- <GET ,PICINF-TBL 1> <* ,FONT-X 10>>>
<TELL "Score:">
<COND (,BORDER-ON
<COLOR 1 1>)>
<FONT 1> ;"proportional"
<COND (<EQUAL? <LOWCORE INTID> ,DEC-20>
<HLIGHT ,H-NORMAL>)>
<SCREEN ,S-TEXT>
<RFALSE>>>
<ROUTINE SET-BORDER ()
<COND (<AND <EQUAL? ,HERE ,GONDOLA>
<G? ,DIRIGIBLE-COUNTER 0>>
<RETURN ,OUTSIDE-BORDER>)
(<EQUAL? ,HERE ,FORMAL-GARDEN ,COURTYARD>
<RETURN ,CASTLE-BORDER>)
(<EQUAL? ,HERE ,BARBICAN ,UPPER-BARBICAN ,GARRISON>
<RETURN ,OUTSIDE-BORDER>)
(<FSET? ,HERE ,OUTSIDEBIT>
<RETURN ,OUTSIDE-BORDER>)
(<FSET? ,HERE ,UNDERGROUNDBIT>
<RETURN ,UNDERGROUND-BORDER>)
(T
<RETURN ,CASTLE-BORDER>)>>
<ROUTINE PRINT-SPACES (CNT)
<REPEAT ()
<COND (<L? <SET CNT <- .CNT 1>> 0>
<RETURN>)
(T
<PRINTC 32>)>>>
<CONSTANT SLINE <ITABLE NONE 41 ;82>>
<GLOBAL OLD-HERE <>> ;"is set to present HERE room."
<GLOBAL OLD-REGION <>>
<GLOBAL SL-SCORE -1> ;"if start at 0, STATUS-LINE never puts up the 0"
<GLOBAL WIDTH 0>
<GLOBAL COMPASS-CHANGED T>
<CONSTANT TITLE-SCREEN-PICTURE 1>
<GLOBAL ACTIVE-MOUSE <>>
<GLOBAL CURRENT-SPLIT <>> ;"set to TEXT-WINDOW-PIC-LOC in GO"
;"tells REFRESH etc. whether the screen is normal, a jester game, or whatever"
;"call v-$refresh to during game if want to clear junk"
<ROUTINE UPDATE-STATUS-LINE ()
<SCREEN ,S-WINDOW>
<FONT 4> ;"non-proportional"
<COND (<OR <EQUAL? <LOWCORE INTID> ,DEC-20>
<NOT ,BORDER-ON>>
<HLIGHT ,H-INVERSE>)>
<PICINF ,HERE-LOC ,PICINF-TBL>
<CURSET <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<COND (,BORDER-ON
<COLOR 1 -1>)>
<COND (<NOT <EQUAL? ,HERE ,OLD-HERE>> ;"Print loc if it's a new loc"
<SETG OLD-HERE ,HERE>
<PICINF-PLUS-ONE ,HERE-LOC>
<CURSET <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<PRINT-SPACES 24>
<CURSET <GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<COND (<EQUAL? ,HERE ,PHIL-HALL>
<TELL "Philharmonic Hall">)
(<EQUAL? ,HERE ,G-U-MOUNTAIN>
<TELL "Great Undergd. Mountain">)
(<EQUAL? ,HERE ,G-U-SAVANNAH>
<TELL "Great Undergd. Savannah">)
(<EQUAL? ,HERE ,G-U-HIGHWAY>
<TELL "Great Undergd. Highway">)
(T
<TELL D ,HERE>)>)>
<COND (<NOT <EQUAL? <GETP ,HERE ,P?REGION> ,OLD-REGION>>
<SETG OLD-REGION <GETP ,HERE ,P?REGION>>
<PICINF-PLUS-ONE ,REGION-LOC>
<CURSET <GET ,PICINF-TBL 0>
<- <GET ,PICINF-TBL 1> <* ,FONT-X 23>>>
<PRINT-SPACES 23>
<DIROUT ,D-TABLE-ON ,SLINE> ;"start printing to buffer"
<PUT ,SLINE 0 0>
<TELL ,OLD-REGION>
<DIROUT ,D-TABLE-OFF>
<CURSET <GET ,PICINF-TBL 0>
<- <GET ,PICINF-TBL 1> <* ,FONT-X <GET ,SLINE 0>>>>
<TELL ,OLD-REGION>)>
<PICINF-PLUS-ONE ,HERE-LOC>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y>
<+ <GET ,PICINF-TBL 1> <* ,FONT-X 8>>>
<PRINT-SPACES 5>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y>
<+ <GET ,PICINF-TBL 1> <* ,FONT-X 8>>>
<PRINTN ,MOVES>
<COND (<NOT <EQUAL? ,SCORE ,SL-SCORE>> ;"score changed?"
<SETG SL-SCORE ,SCORE>
<PICINF-PLUS-ONE ,REGION-LOC>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y>
<- <GET ,PICINF-TBL 1> <* ,FONT-X 4>>>
<PRINT-SPACES 4>
<CURSET <+ <GET ,PICINF-TBL 0> ,FONT-Y>
<- <GET ,PICINF-TBL 1>
<* ,FONT-X <COND (<OR <G? ,SCORE 999>
<L? ,SCORE -99>> 4)
(<OR <G? ,SCORE 99>
<L? ,SCORE -9>> 3)
(<OR <G? ,SCORE 9>
<L? ,SCORE 0>> 2)
(T 1)>>>>
<PRINTN ,SCORE>)>
<COND (,BORDER-ON
<COLOR 1 1>)>
<COND (<OR <EQUAL? <LOWCORE INTID> ,DEC-20>
<NOT ,BORDER-ON>>
<HLIGHT ,H-NORMAL>)>
<COND (<AND ,COMPASS-CHANGED
,BORDER-ON
<NOT <EQUAL? <LOWCORE INTID> ,DEC-20>>>
<SETG COMPASS-CHANGED <>>
<PICINF-PLUS-ONE ,COMPASS-PIC-LOC>
<DRAW-COMPASS-ROSE ,P?NORTH ,N-HL ,N-UNHL>
<DRAW-COMPASS-ROSE ,P?NE ,NE-HL ,NE-UNHL>
<DRAW-COMPASS-ROSE ,P?EAST ,E-HL ,E-UNHL>
<DRAW-COMPASS-ROSE ,P?SE ,SE-HL ,SE-UNHL>
<DRAW-COMPASS-ROSE ,P?SOUTH ,S-HL ,S-UNHL>
<DRAW-COMPASS-ROSE ,P?SW ,SW-HL ,SW-UNHL>
<DRAW-COMPASS-ROSE ,P?WEST ,W-HL ,W-UNHL>
<DRAW-COMPASS-ROSE ,P?NW ,NW-HL ,NW-UNHL>
<PICINF-PLUS-ONE ,U-BOX-LOC>
<DISPLAY <COND (<AND <SHOW-DIRECTION? ,HERE ,P?UP <>>
,LIT>
,U-BOX)
(T
,BOX-COVER)>
<GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>
<PICINF-PLUS-ONE ,D-BOX-LOC>
<DISPLAY <COND (<AND <SHOW-DIRECTION? ,HERE ,P?DOWN <>>
,LIT>
,D-BOX)
(T
,BOX-COVER)>
<GET ,PICINF-TBL 0> <GET ,PICINF-TBL 1>>)>
<FONT 1> ;"proportional"
<SCREEN ,S-TEXT>
<RFALSE>>
<CONSTANT COMPASS-PICSET-TBL
<TABLE N-HL NE-HL E-HL SE-HL S-HL SW-HL W-HL NW-HL
N-UNHL NE-UNHL E-UNHL SE-UNHL S-UNHL SW-UNHL W-UNHL NW-UNHL
U-BOX D-BOX BOX-COVER 0>>
<ROUTINE DRAW-COMPASS-ROSE (DIR HIGHLIGHT-PIC UNHIGHLIGHT-PIC)
<DISPLAY <COND (<AND <SHOW-DIRECTION? ,HERE .DIR <>>
,LIT>
.HIGHLIGHT-PIC)
(T
.UNHIGHLIGHT-PIC)>
<GET ,PICINF-TBL 0>
<GET ,PICINF-TBL 1>>>
<ROUTINE SHOW-DIRECTION? (RM DIR "OPTIONAL" (MAPPING T) "AUX" PTS)
<COND (<AND <IN? ,N-S-PASSAGE .RM>
<NOT <EQUAL? .RM ,CONSTRUCTION>>
<EQUAL? ,N-S-PASSAGE-DIR .DIR>>
<RTRUE>)
(<AND <IN? ,NW-SE-PASSAGE .RM>
<NOT <EQUAL? .RM ,CONSTRUCTION>>
<EQUAL? ,NW-SE-PASSAGE-DIR .DIR>>
<RTRUE>)
(<AND <IN? ,PROTAGONIST ,YACHT>
<EQUAL? .DIR ,P?DOWN>>
<RTRUE>)
(<FSET? .RM ,DELTABIT>
<COND (<EQUAL? .DIR ,P?UP ,P?DOWN>
<RFALSE>)
(<AND <EQUAL? .RM ,DELTA-1>
<EQUAL? .DIR ,P?SOUTH>
.MAPPING> ;"interferes with FROM ORACLE arrow"
<RFALSE>)
(T
<RTRUE>)>)
(<EQUAL? .RM ,CONSTRUCTION>
<COND (<EQUAL? .DIR ,P?UP ,P?DOWN>
<RFALSE>)
(<OR
<AND <EQUAL? .DIR ,P?NORTH>
<INTBL? ,CONSTRUCTION-LOC ,NORTH-EXITS 11>>
<AND <EQUAL? .DIR ,P?NE>
<INTBL? ,CONSTRUCTION-LOC ,NE-EXITS 17>>
<AND <EQUAL? .DIR ,P?EAST>
<INTBL? ,CONSTRUCTION-LOC ,EAST-EXITS 15>>
<AND <EQUAL? .DIR ,P?SE>
<INTBL? ,CONSTRUCTION-LOC ,SE-EXITS 7>>
<AND <EQUAL? .DIR ,P?SOUTH>
<INTBL? <+ ,CONSTRUCTION-LOC 8> ,NORTH-EXITS 11>>
<AND <EQUAL? .DIR ,P?SW>
<INTBL? <+ ,CONSTRUCTION-LOC 7> ,NE-EXITS 17>>
<AND <EQUAL? .DIR ,P?WEST>
<INTBL? <- ,CONSTRUCTION-LOC 1> ,EAST-EXITS 15>>
<AND <EQUAL? .DIR ,P?NW>
<INTBL? <- ,CONSTRUCTION-LOC 9> ,SE-EXITS 7>>
<AND <EQUAL? .DIR ,P?EAST>
<EQUAL? ,CONSTRUCTION-LOC 47>>>
<RTRUE>)
(<AND <IN? ,N-S-PASSAGE .RM>
<NOT <FSET? ,N-S-PASSAGE ,TAKEBIT>>
<EQUAL? .DIR ,P?NORTH ,P?SOUTH>>
<COND (<AND <EQUAL? ,CONSTRUCTION-LOC ,N-S-PASSAGE-LOC>
<EQUAL? ,N-S-PASSAGE-DIR .DIR>>
<RTRUE>)
(<AND <NOT <EQUAL? ,CONSTRUCTION-LOC
,N-S-PASSAGE-LOC>>
<NOT <EQUAL? ,N-S-PASSAGE-DIR .DIR>>>
<RTRUE>)
(T
<RFALSE>)>)
(<AND <IN? ,NW-SE-PASSAGE .RM>
<NOT <FSET? ,NW-SE-PASSAGE ,TAKEBIT>>
<EQUAL? .DIR ,P?NW ,P?SE>>
<COND (<AND <EQUAL? ,CONSTRUCTION-LOC
,NW-SE-PASSAGE-LOC>
<EQUAL? ,NW-SE-PASSAGE-DIR .DIR>>
<RTRUE>)
(<AND <NOT <EQUAL? ,CONSTRUCTION-LOC
,NW-SE-PASSAGE-LOC>>
<NOT <EQUAL? ,NW-SE-PASSAGE-DIR .DIR>>>
<RTRUE>)
(T
<RFALSE>)>)
(T
<RFALSE>)>)
(<EQUAL? .RM ,PLAIN>
<COND (<EQUAL? .DIR ,P?UP ,P?DOWN>
<RFALSE>)
(<OR <AND <EQUAL? .DIR ,P?NORTH ,P?NE ,P?NW>
<EQUAL? ,RANK 1>>
<AND <EQUAL? .DIR ,P?EAST ,P?NE ,P?SE>
<EQUAL? ,FILE 8>>
<AND <EQUAL? .DIR ,P?SOUTH ,P?SE ,P?SW>
<EQUAL? ,RANK 8>>
<AND <EQUAL? .DIR ,P?WEST ,P?SW ,P?NW>
<EQUAL? ,FILE 1>>>
<RFALSE>)
(T
<RTRUE>)>)
(<AND <EQUAL? .RM ,MIRROR-LAKE>
<NOT <EQUAL? .DIR ,P?UP ,P?DOWN>>>
<RTRUE>)
(<AND <EQUAL? .RM ,WISHYFOO-TERRITORY>
<EQUAL? .DIR ,P?SW>
<NOT .MAPPING>>
<RTRUE>)
(<AND <EQUAL? .RM ,STREAM>
<EQUAL? .DIR ,P?WEST>
<NOT <IN? ,BRIDGE ,STREAM>>>
<RFALSE>)
(<AND <SET PTS <GETPT .RM .DIR>>
<NOT <EQUAL? <PTSIZE .PTS> ,NEXIT>>>
<COND (<AND <EQUAL? .RM ,THRONE-ROOM>
<EQUAL? .DIR ,P?SOUTH>
<NOT ,SECRET-PASSAGE-OPEN>>
<RFALSE>)
(<AND <EQUAL? .RM ,G-U-MOUNTAIN>
<EQUAL? .DIR ,P?NORTH>
<IN? ,BOULDER .RM>>
<RFALSE>)
(<AND <EQUAL? .RM ,HOLLOW>
<EQUAL? .DIR ,P?SOUTH>
<NOT ,IRON-MINE-OPEN>>
<RFALSE>)
(<AND <EQUAL? .RM ,PEG-ROOM>
<EQUAL? .DIR ,P?NORTH>
<NOT ,PEG-PASSAGE-OPENED>>
<RFALSE>)
(<AND <EQUAL? .RM ,CRYPT>
<EQUAL? .DIR ,P?DOWN>
<NOT <FSET? ,HOLEY-SLAB ,TOUCHBIT>>>
<RFALSE>)
(<AND <EQUAL? .RM ,RUINED-HALL>
<EQUAL? .DIR ,P?EAST>
<NOT ,SECRET-ROOM-REVEALED>>
<RFALSE>)
(<AND <EQUAL? .RM ,MARSH>
<EQUAL? .DIR ,P?NORTH>
<NOT ,STEPPING-STONES-VISIBLE>>
<RFALSE>)
(<AND <EQUAL? .RM ,WEIRD>
<EQUAL? .DIR ,P?NORTH ,P?EAST ,P?WEST>>
<COND (<EQUAL? .DIR ,P?NORTH>
<COND (<EQUAL? ,TOWER-BEATEN ,PYRAMID>
<RTRUE>)
(<AND <FSET? ,PYRAMID ,TOUCHBIT>
.MAPPING>
<RTRUE>)
(T
<RFALSE>)>)
(<EQUAL? .DIR ,P?EAST>
<COND (<EQUAL? ,TOWER-BEATEN ,PYRAMID-R>
<RTRUE>)
(<AND <FSET? ,PYRAMID-R ,TOUCHBIT>
.MAPPING>
<RTRUE>)
(T
<RFALSE>)>)
(T
<COND (<EQUAL? ,TOWER-BEATEN ,PYRAMID-L>
<RTRUE>)
(<AND <FSET? ,PYRAMID-L ,TOUCHBIT>
.MAPPING>
<RTRUE>)
(T
<RFALSE>)>)>)
(<NOT .MAPPING>
<RTRUE>)
(<AND <EQUAL? .RM ,COURTROOM>
<EQUAL? .DIR ,P?SOUTH>>
<RFALSE>)
(<AND <EQUAL? .RM ,TAX-OFFICE>
<EQUAL? .DIR ,P?SOUTH>>
<RFALSE>)
(<AND <EQUAL? .RM ,JESTERS-QUARTERS>
<EQUAL? .DIR ,P?SOUTH>>
<RFALSE>)
(<AND <EQUAL? .RM ,BASE-OF-MOUNTAIN>
<EQUAL? .DIR ,P?EAST>>
<RFALSE>)
(<AND <EQUAL? .RM ,G-U-MOUNTAIN>
<EQUAL? .DIR ,P?WEST>>
<RFALSE>)
(<AND <EQUAL? .RM ,FOOTHILLS>
<EQUAL? .DIR ,P?SOUTH>>
<RFALSE>)
(<AND <EQUAL? .RM ,BASE-OF-MOUNTAINS>
<EQUAL? .DIR ,P?NORTH>>
<RFALSE>)
(T
<RTRUE>)>)
(T
<RFALSE>)>>
<ROUTINE COMPASS-CLICK
(PIC1 PIC2 "AUX" TL-X TL-Y BR-X BR-Y CENTER-X CENTER-Y DIR)
<COND (<EQUAL? .PIC1 ,COMPASS-PIC-LOC> ;"not mapping"
<PICINF-PLUS-ONE ,U-BOX-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<PICINF ,U-BOX ,PICINF-TBL>
<SET BR-X <+ .TL-X <GET ,PICINF-TBL 1>>>
<SET BR-Y <+ .TL-Y <GET ,PICINF-TBL 0>>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<RETURN ,P?UP>)>
<PICINF-PLUS-ONE ,D-BOX-LOC>
<SET TL-X <GET ,PICINF-TBL 1>>
<SET TL-Y <GET ,PICINF-TBL 0>>
<PICINF ,D-BOX ,PICINF-TBL>
<SET BR-X <+ .TL-X <GET ,PICINF-TBL 1>>>
<SET BR-Y <+ .TL-Y <GET ,PICINF-TBL 0>>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<RETURN ,P?DOWN>)>)>
<PICINF-PLUS-ONE .PIC1>
<SET TL-Y <GET ,PICINF-TBL 0>>
<SET TL-X <GET ,PICINF-TBL 1>>
<PICINF .PIC2 ,PICINF-TBL>
<SET BR-Y <+ <GET ,PICINF-TBL 0> .TL-Y>>
<SET BR-X <+ <GET ,PICINF-TBL 1> .TL-X>>
<SET CENTER-X <+ .TL-X </ <GET ,PICINF-TBL 1> 2>>>
<SET CENTER-Y <+ .TL-Y </ <GET ,PICINF-TBL 0> 2>>>
<COND (<WITHIN? .TL-X .TL-Y .BR-X .BR-Y>
<COND (<EQUAL? <LOWCORE INTID> ,MACINTOSH>
<COND (<MAC-II?>
<SET DIR <MAC-II-CLICK .CENTER-X .CENTER-Y>>)
(T
<SET DIR <MAC-CLICK .CENTER-X
.CENTER-Y .TL-X .TL-Y>>)>)
(T
<SOUND 1>
<TELL
"[Sorry, clicking on the compass rose is not yet
implemented on this machine.]" CR>
<RFALSE>)>
<COND (.DIR
<RETURN .DIR>)
(T
<SOUND 1>
<RFALSE>)>)
(T
<SOUND 1>
<RFALSE>)>>
<ROUTINE MAC-CLICK (CENTER-X CENTER-Y TL-X TL-Y "AUX" X Y DIR)
<COND (<WITHIN? <+ .TL-X 25> .TL-Y <+ .TL-X 35> <+ .TL-Y 20>>
<SET DIR ,P?NORTH>)
(<WITHIN? <+ .TL-X 25> <+ .TL-Y 36> <+ .TL-X 35> <+ .TL-Y 58>>
<SET DIR ,P?SOUTH>)
(<WITHIN? <+ .TL-X 38> <+ .TL-Y 23> <+ .TL-X 60> <+ .TL-Y 33>>
<SET DIR ,P?EAST>)
(<WITHIN? .TL-X <+ .TL-Y 23> <+ .TL-X 22> <+ .TL-Y 33>>
<SET DIR ,P?WEST>)
(<WITHIN? <+ .TL-X 37> <+ .TL-Y 10> <+ .TL-X 48> <+ .TL-Y 21>>
<SET DIR ,P?NE>)
(<WITHIN? <+ .TL-X 37> <+ .TL-Y 35> <+ .TL-X 48> <+ .TL-Y 46>>
<SET DIR ,P?SE>)
(<WITHIN? <+ .TL-X 12> <+ .TL-Y 35> <+ .TL-X 23> <+ .TL-Y 46>>
<SET DIR ,P?SW>)
(<WITHIN? <+ .TL-X 12> <+ .TL-Y 10> <+ .TL-X 23> <+ .TL-Y 21>>
<SET DIR ,P?NW>)
(<WITHIN? <+ .TL-X 23> <+ .TL-Y 21> <+ .TL-X 37> <+ .TL-Y 35>>
;"center section of Mac I compass rose"
<COND (<AND <G? ,MOUSE-LOC-X .CENTER-X>
<L? ,MOUSE-LOC-Y .CENTER-Y>> ;"ne quadrant"
<SET X <- ,MOUSE-LOC-X .CENTER-X>>
<SET Y <- .CENTER-Y ,MOUSE-LOC-Y>>
<COND (<G? .X .Y>
<SET DIR ,P?EAST>)
(T
<SET DIR ,P?NORTH>)>)
(<G? ,MOUSE-LOC-X .CENTER-X> ;"se quadrant"
<SET X <- ,MOUSE-LOC-X .CENTER-X>>
<SET Y <- ,MOUSE-LOC-Y .CENTER-Y>>
<COND (<G? .X .Y>
<SET DIR ,P?EAST>)
(T
<SET DIR ,P?SOUTH>)>)
(<G? ,MOUSE-LOC-Y .CENTER-Y> ;"sw quadrant"
<SET X <- .CENTER-X ,MOUSE-LOC-X>>
<SET Y <- ,MOUSE-LOC-Y .CENTER-Y>>
<COND (<G? .X .Y>
<SET DIR ,P?WEST>)
(T
<SET DIR ,P?SOUTH>)>)
(T;"nw quadrant"
<SET X <- .CENTER-X ,MOUSE-LOC-X>>
<SET Y <- .CENTER-Y ,MOUSE-LOC-Y>>
<COND (<G? .X .Y>
<SET DIR ,P?WEST>)
(T
<SET DIR ,P?NORTH>)>)>)
(T
<RFALSE>)>
<RETURN .DIR>>
<CONSTANT TANGENT-VALUE 41>
<ROUTINE MAC-II-CLICK (CENTER-X CENTER-Y "AUX" X Y DIR)
<COND (<AND <G? ,MOUSE-LOC-X .CENTER-X>
<L? ,MOUSE-LOC-Y .CENTER-Y>> ;"ne quadrant"
<SET X <- ,MOUSE-LOC-X .CENTER-X>>
<SET Y <- .CENTER-Y ,MOUSE-LOC-Y>>
<COND (<G? <* .X ,TANGENT-VALUE> <* .Y 100>>
<SET DIR ,P?EAST>)
(<G? <* .Y ,TANGENT-VALUE> <* .X 100>>
<SET DIR ,P?NORTH>)
(T
<SET DIR ,P?NE>)>)
(<G? ,MOUSE-LOC-X .CENTER-X> ;"se quadrant"
<SET X <- ,MOUSE-LOC-X .CENTER-X>>
<SET Y <- ,MOUSE-LOC-Y .CENTER-Y>>
<COND (<G? <* .X ,TANGENT-VALUE> <* .Y 100>>
<SET DIR ,P?EAST>)
(<G? <* .Y ,TANGENT-VALUE> <* .X 100>>
<SET DIR ,P?SOUTH>)
(T
<SET DIR ,P?SE>)>)
(<G? ,MOUSE-LOC-Y .CENTER-Y> ;"sw quadrant"
<SET X <- .CENTER-X ,MOUSE-LOC-X>>
<SET Y <- ,MOUSE-LOC-Y .CENTER-Y>>
<COND (<G? <* .X ,TANGENT-VALUE> <* .Y 100>>
<SET DIR ,P?WEST>)
(<G? <* .Y ,TANGENT-VALUE> <* .X 100>>
<SET DIR ,P?SOUTH>)
(T
<SET DIR ,P?SW>)>)
(T ;"nw quadrant"
<SET X <- .CENTER-X ,MOUSE-LOC-X>>
<SET Y <- .CENTER-Y ,MOUSE-LOC-Y>>
<COND (<G? <* .X ,TANGENT-VALUE> <* .Y 100>>
<SET DIR ,P?WEST>)
(<G? <* .Y ,TANGENT-VALUE> <* .X 100>>
<SET DIR ,P?NORTH>)
(T
<SET DIR ,P?NW>)>)>
<RETURN .DIR>>
<ROUTINE SAY-HERE ("AUX" X)
<TELL D ,HERE>
<SET X <LOC ,PROTAGONIST>>
<COND (<IN? ,PROTAGONIST ,CARD-TABLE>
<TELL ", at" T .X>)
(<AND <NOT <EQUAL? .X ,HERE>>
<FSET? .X ,VEHBIT>>
<TELL ", ">
<COND (<FSET? .X ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" T .X>)
(,UNDER-TABLE
<TELL ", under the table">)>
<RTRUE>>
<ROUTINE CENTER-1 (STR "OPTIONAL" BOLD "AUX" Y X LEN)
<CURGET ,SLINE>
<SET Y <GET ,SLINE 0>> ;"current line num"
<SET X </ <WINGET ,S-TEXT ,WWIDE> 2>> ;"center of text screen"
<COND (.BOLD
<HLIGHT ,H-BOLD>)>
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X </ .LEN 2>>>
<TELL .STR>
<HLIGHT ,H-NORMAL>
<CRLF>>
<ROUTINE CENTER-2 (STR1 STR2 "AUX" Y X1 X2 LEN)
<CURGET ,SLINE>
<SET Y <GET ,SLINE 0>> ;"current line num"
<SET X1 </ <WINGET ,S-TEXT ,WWIDE> 3>> ;"one-third across"
<SET X2 <* .X1 2>> ;"two-thirds across"
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR1>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X1 </ .LEN 2>>>
<TELL .STR1>
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR2>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X2 </ .LEN 2>>>
<TELL .STR2>
<CRLF>>
<ROUTINE CENTER-3 (STR1 STR2 STR3 "AUX" Y X1 X2 X3 LEN)
<CURGET ,SLINE>
<SET Y <GET ,SLINE 0>> ;"current line num"
<SET X1 </ <WINGET ,S-TEXT ,WWIDE> 4>> ;"one-quarter across"
<SET X2 <* .X1 2>> ;"halfway across"
<SET X3 <* .X1 3>> ;"three-quarters across"
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR1>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X1 </ .LEN 2>>>
<TELL .STR1>
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR2>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X2 </ .LEN 2>>>
<TELL .STR2>
<DIROUT ,D-TABLE-ON ,SLINE -80>
<TELL .STR3>
<DIROUT ,D-TABLE-OFF>
<SET LEN <LOWCORE TWID>>
<CURSET .Y <- .X3 </ .LEN 2>>>
<TELL .STR3>
<CRLF>>
;<ROUTINE ITALICIZE (STR "OPTIONAL" (NO-CAPS? <>)
"AUX" LEN (PTR 2) CHAR ;(SCRIPTING-ON <>))
;<COND (<BTST <LOWCORE FLAGS> 1>
<SET SCRIPTING-ON T>)>
;<COND (.SCRIPTING-ON
<DIROUT ,D-PRINTER-OFF>)>
<DIROUT ,D-SCREEN-OFF>
<DIROUT ,D-TABLE-ON ,SLINE>
<TELL .STR>
<DIROUT ,D-TABLE-OFF>
;<COND (.SCRIPTING-ON
<DIROUT ,D-PRINTER-ON>)>
;<COND (<NOT <VERB? SCRIPT UNSCRIPT>>
<DIROUT ,D-SCREEN-ON>)>
<DIROUT ,D-SCREEN-ON>
<SET LEN <+ <GET ,SLINE 0> 1>>
<COND (<EQUAL? .LEN 1>
<RTRUE>)
(<OR <ZERO? <LOWCORE SERIAL>> ; "ZIL?"
<BAND <LOWCORE ZVERSION> 8>> ; "ITALICS BIT SET?"
<HLIGHT ,H-ITALIC>
<REPEAT ()
<SET CHAR <GETB ,SLINE .PTR>>
<COND (<EQUAL? .CHAR 32> ; "SPACE?"
<HLIGHT ,H-NORMAL>
<PRINTC 32>
<HLIGHT ,H-ITALIC>)
(T
<PRINTC .CHAR>)>
<COND (<EQUAL? .PTR .LEN>
<RETURN>)
(T
<SET PTR <+ .PTR 1>>)>>
<HLIGHT ,H-NORMAL>)
(.NO-CAPS?
<TELL .STR>)
(T ; "NO ITALICS, CAPITALIZE"
<REPEAT ()
<SET CHAR <GETB ,SLINE .PTR>>
<COND (<AND <G? .CHAR 96>
<L? .CHAR 123>>
<SET CHAR <- .CHAR 32>>)>
<PRINTC .CHAR>
<COND (<EQUAL? .PTR .LEN>
<RETURN>)
(T
<SET PTR <+ .PTR 1>>)>>)>>
;<ROUTINE SEEING? (OBJ)
<COND (<AND <PRSO? .OBJ>
<EQUAL? ,PRSA
,V?EXAMINE ,V?LOOK ,V?LOOK-INSIDE ,V?READ ,V?FIND
,V?SEARCH ,V?SHOW ,V?LOOK-UNDER ,V?LOOK-BEHIND
,V?LOOK-DOWN ,V?COUNT ,V?POINT>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE TOUCHING? (THING)
<COND (<AND <PRSO? .THING>
<EQUAL? ,PRSA ,V?BITE ,V?CLEAN ,V?CLIMB ,V?CLIMB-DOWN
,V?CLIMB-ON ,V?CLIMB-UP ,V?CLOSE ,V?CUT ,V?EAT
,V?ENTER ,V?KICK ,V?KILL ,V?KISS ,V?KNOCK
,V?LOCK ,V?LOOK-BEHIND ,V?LOOK-INSIDE
,V?LOOK-UNDER ,V?MOVE ,V?MUNG ,V?OFF ,V?ON
,V?OPEN ,V?PUSH ,V?RAISE ,V?REACH-IN ,V?SEARCH
,V?SET ,V?SHAKE ,V?STAND-ON ,V?SWIM ,V?TASTE
,V?TAKE ,V?THROW ,V?TIE ,V?TOUCH ,V?UNLOCK>>
<RTRUE>)
(<AND <PRSI? .THING>
<VERB? GIVE PUT PUT-ON>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE HANDLE (OBJ) ;"used by action routines before calling CANT-SEE"
<COND (<OR <AND <EQUAL? .OBJ ,PRSO>
<EVERYWHERE-VERB? 1>>
<AND <EQUAL? .OBJ ,PRSI>
<EVERYWHERE-VERB? 2>>>
<RFALSE>)
(T
<RTRUE>)>>
;"this routine is fucked. When prsi is passed, PRSO is often printed. Fucked"
<ROUTINE CANT-SEE ("OPTIONAL" (OBJ <>) (STRING <>) "AUX" WRD)
<COND (<SET WRD <GET-NP .OBJ>>
<SET WRD <NP-NAME .WRD>>)>
<SETG P-WON <>>
<TELL "[" ,YOU-CANT "see">
<COND (<OR <NOT .OBJ>
<AND .WRD
<NOT <CAPITAL-NOUN? .WRD>>>>
<TELL " any">)>
<COND (<NOT .OBJ>
<TELL " " .STRING>)
(<EQUAL? .OBJ ,PRSI>
<PRSI-PRINT>)
(T
<PRSO-PRINT>)>
<TELL " here.]" CR>
<STOP>>
<ROUTINE PRSO-PRINT ("AUX" PTR)
<COND (<OR ;,P-MERGED
<NOUN-USED? ,PRSO ,W?IT>
;<EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC1>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T
<TELL !\ >
<NP-PRINT <GET-NP ,PRSO>>
;<BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC1L> <>>)>>
<ROUTINE PRSI-PRINT ("AUX" PTR)
<COND (<OR ;,P-MERGED
<NOUN-USED? ,PRSI ,W?IT>
;<EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC2>> 0> ,W?IT>>
<TELL " " D ,PRSI>)
(T
<TELL !\ >
<NP-PRINT <GET-NP ,PRSI>>
;<BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC2L> <>>)>>
<ROUTINE CANT-VERB-A-PRSO (STRING)
<TELL ,YOU-CANT .STRING A ,PRSO "!" CR>>
;<ROUTINE NOW-TIED (OBJ)
<TELL "Okay," T ,PRSO " is now tied to" TR .OBJ>>
<ROUTINE TELL-HIT-HEAD ()
<TELL
"You hit your head against" T ,PRSO " as you attempt this feat." CR>>
<ROUTINE OPEN-CLOSED (OBJ)
<COND (<FSET? .OBJ ,OPENBIT>
<TELL "open">)
(T
<TELL "closed">)>>
;<ROUTINE IN-YOUR-PACKAGE (STRING)
<TELL "This is the " .STRING " that came in your package.">>
<ROUTINE CANT-REACH (OBJ)
<COND (<AND ,HAND-IN-WALDO
<NOT <EQUAL? .OBJ ,WALDO>>
<IN? .OBJ ,HERE>>
<TELL "The waldo doesn't seem capable of that." CR>)
(,UNDER-TABLE
<TELL
,YOULL-HAVE-TO "get out from under the table in order to reach it." CR>)
(T
<TELL ,YOU-CANT "reach" T .OBJ>
<COND (<NOT <IN? ,PROTAGONIST ,HERE>>
<TELL " from" T <LOC ,PROTAGONIST>>)>
<TELL ,PERIOD-CR>)>>
;<ROUTINE EAGERLY-ACCEPTS ()
<MOVE ,PRSO ,PRSI>
<TELL "Eagerly," T ,PRSI " accepts" T ,PRSO>>
;<ROUTINE NOT-ON-GROUND (VEHICLE)
<TELL "But" T .VEHICLE " isn't on the ground!" CR>>
<ROUTINE DO-FIRST (STRING "OPTIONAL" (OBJ <>))
<TELL ,YOULL-HAVE-TO .STRING>
<COND (.OBJ
<TPRINT .OBJ>)>
<TELL " first." CR>>
<ROUTINE NOT-IN ()
<TELL "But" T-IS-ARE ,PRSO "not ">
<COND (<FSET? ,PRSI ,ACTORBIT>
<TELL "being held by">)
(<FSET? ,PRSI ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL TR ,PRSI>>
<ROUTINE PART-OF ()
<TELL
,YOU-CANT "--" T-IS-ARE ,PRSO "an integral part of" TR <LOC ,PRSO>>>
;<ROUTINE CHANGE-OBJECT (OLD NEW)
<COND (<PRSO? .OLD>
<PERFORM ,PRSA .NEW ,PRSI>)
(T
<PERFORM ,PRSA ,PRSO .OLD>)>
<RTRUE>>
;<ROUTINE CANT-USE-THAT-WAY (STRING)
<TELL "[" ,YOU-CANT "use " .STRING " that way.]" CR>>
<ROUTINE RECOGNIZE ()
<SETG P-WON <>>
<TELL
"[Sorry, but I don't understand. Please rephrase that or try
something else.]" CR>>
<ROUTINE PRONOUN ()
<COND (<PRSO? ,ME>
<TELL "You">)
(<AND <PRSO? ,WHITE-CASTLE>
<NOT <NOUN-USED? ,WHITE-CASTLE ,W?MAN>>>
<TELL "It">)
(<FSET? ,PRSO ,PLURALBIT>
<TELL "They">)
(<FSET? ,PRSO ,FEMALEBIT>
<TELL "She">)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "He">)
(T
<TELL "It">)>>
;<ROUTINE DONT-F ()
<COND (<VERB? WAIT>
<TELL "Time doesn't pass..." CR>)
(<VERB? TAKE>
<TELL "Not taken." CR>)
(T
<TELL "Not done." CR>)>>
;<ROUTINE REFERRING ("OPTIONAL" (HIM-HER <>))
<TELL "It's not clear wh">
<COND (.HIM-HER
<TELL "o">)
(T
<TELL "at">)>
<TELL " you're referring to." CR>>
;<ROUTINE UNIMPORTANT-THING-F ()
<TELL "That's not important; leave it alone." CR>>
<ROUTINE HIT-ANY-KEY ("OPTIONAL" (STRING <>))
<TELL "[Hit any key to ">
<COND (.STRING
<TELL "begin playing " .STRING>)
(T
<TELL "continue">)>
<TELL ".]">
<DIROUT ,D-SCREEN-OFF>
<CRLF> ;"to transcript only"
<DIROUT ,D-SCREEN-ON>
<COND (,DEMO-VERSION?
<INPUT-DEMO 1>)
(T
<INPUT 1>)>
<MOUSE-INPUT?>>
<ROUTINE LOCKED-UNLOCKED (OBJ "OPTIONAL" (UN <>))
<TELL "A faint click indicates that" T .OBJ " is now ">
<COND (.UN
<TELL "un">)>
<TELL "locked." CR>>
<ROUTINE CANT-TURN (STRING)
<TELL ,YOU-CANT "turn that o" .STRING ,PERIOD-CR>>
<ROUTINE YOU-MUST-TELL-ME ()
<TELL "You must tell me how to do that to" AR ,PRSO>>
<ROUTINE GRUE-PIT-WARNING ()
<COND (<AND <NOT <IN? ,PROTAGONIST ,DB>>
<NOT ,TIME-STOPPED>
<NOT <EQUAL? ,HERE ,PIT-BOMB-LOC>>>
<TELL " You are likely to ">
<COND (<FSET? ,LANTERN ,TRYTAKEBIT>
<TELL "fall into a bottomless pit.">)
(T
<TELL "be eaten by a grue.">)>)>
<CRLF>>
<ROUTINE DARK-DEATH ()
<TELL "Oh, no! You have ">
<COND (<FSET? ,LANTERN ,TRYTAKEBIT>
<TELL "fallen into a bottomless pit">)
(T
<TELL "walked into the slavering fangs of a lurking grue">)>
<JIGS-UP "!">>
<CONSTANT TOO-DARK "It's too dark to see a thing.">
<CONSTANT YNH "You're not holding">
<CONSTANT THERES-NOTHING "There's nothing ">
<CONSTANT YOU-SEE "You can see">
<CONSTANT IT-SEEMS-THAT "It seems that">
<CONSTANT YOU-CANT-SEE-ANY "[You can't see any ">
<CONSTANT YOU-CANT "You can't ">
<CONSTANT YOULL-HAVE-TO "You'll have to ">
<CONSTANT LOOK-AROUND "Look around you.|">
<CONSTANT CANT-FROM-HERE "You can't do that from here.|">
<CONSTANT HOLDING-IT "You're holding it!|">
<CONSTANT PERIOD-CR ".|">
<CONSTANT ELLIPSIS "...||">
<CONSTANT FAILED "Failed.|">
<CONSTANT OK "Okay.|">
<CONSTANT HUH "Huh?|">
<CONSTANT NOTHING-HAPPENS "Nothing happens.|">
<CONSTANT ALREADY-IS "It already is!|">
<CONSTANT NOTHING-NEW "This reveals nothing new.|">
<CONSTANT ONLY-BLACKNESS "You see only blackness.|">
<CONSTANT NO-VERB "[There was no verb in that sentence!]|">
<CONSTANT WEARING-IT "You're wearing it!|">
<CONSTANT YACHT-MOORED "; the royal yacht is moored at the dock">
<CONSTANT WHICH-WATER
"[You'll have to specify which water you mean by referring to the vial
that contains it.]|">
<CONSTANT MEGABOZ-CEILING-DESC
"In the center of the ceiling, a small trap door is visible.">
<CONSTANT CELL-WALL-DESC "Thick cobwebs obscure the rear wall.">
<CONSTANT POORLY-CONFIGURED
"You nearly make it, but the branches are just too poorly configured for
climbing.|">
<CONSTANT CANNOT-TRAVEL "\"I regret that I cannot travel that way.\"|">
<CONSTANT ANSWER-MY-RIDDLE "\"You'll have to answer my riddle first!\"|">
<CONSTANT SOME-LIGHT "You can see some light through the crack.|">
<CONSTANT TYPE-A-NUMBER "Please type a number between 1 and ">
<CONSTANT DROWN
" Since you have no diving gear, and you are not amphibious, you drown
in a swift but still unpleasant fashion.">
<CONSTANT FUDGE "A faint smell of fudge hangs in the air.">
<CONSTANT TALK-TO-BROGMOID
"The brogmoid could no more hear your shouting than you could hear the
shouting of a bacterium.|">
<CONSTANT ALREADY-AT "You're already at the ">
<CONSTANT WITCH-REMOVES-J
" Immediately, the witches begin beating at the jester with brushes and
broomsticks. \"Scat, you filthy jester, scat!\" He vanishes hastily.|">
<CONSTANT BY-THAT-NAME "There's no one here by that name.|">
<CONSTANT NOTHING-IN-REACH
"You reach in as far as you can, but feel nothing.|">
<CONSTANT WONT-BUDGE "It won't budge.|">
<CONSTANT COOK-DESC
"garbed in a white apron and wearing a puffy white chef's hat.">
<CONSTANT BOOKKEEPER-DESC
"is hunched over one of the desks, wearing suspenders, a bow tie, thick
eyeglasses, and a green visor.">
<CONSTANT ERE-YOU-PASS
"\"'Ere you pass to the west, you must first pass this test! Show me an object
which no one has ever seen before and which no one will ever see again!\"|">
<CONSTANT CARPENTERS
"Not a chance -- unless you have a team of carpenters in your pocket.|">
<CONSTANT DEEPLY-ROOTED "The spenseweed is deeply rooted.|">
<END-SEGMENT>