mirror of
https://github.com/historicalsource/lurkinghorror
synced 2024-04-25 21:49:35 +03:00
7116 lines
207 KiB
Plaintext
7116 lines
207 KiB
Plaintext
"CS for
|
|
The Lurking Horror
|
|
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
|
|
|
|
"Computer Center: three floors plus basement and roof. has a computer
|
|
room, a terminal room, an elevator, etc."
|
|
|
|
<OBJECT OFFICE-DOOR
|
|
(IN LOCAL-GLOBALS)
|
|
(SYNONYM OFFICE DOOR DOORS)
|
|
(ADJECTIVE CLOSED DARK LOCKED)
|
|
(DESC "office")
|
|
(FLAGS NDESCBIT DOORBIT OPENABLE)
|
|
(GENERIC GENERIC-DOOR-F)
|
|
(ACTION OFFICE-DOOR-F)>
|
|
|
|
<ROUTINE OFFICE-DOOR-F ()
|
|
<TELL "The offices are inaccessible." CR>>
|
|
|
|
<ROUTINE GENERIC-DOOR-F ()
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
,ALCHEMY-DOOR)
|
|
(<HERE? ,INF-1 ,INF-3>
|
|
,OUTSIDE-DOOR)>>
|
|
|
|
<ROOM SMITH-ST
|
|
(IN ROOMS)
|
|
(DESC "Smith Street")
|
|
(SOUTH TO COMP-CENTER)
|
|
(IN TO COMP-CENTER)
|
|
(WEST "Impenetrable snow drifts block the street.")
|
|
(EAST TO SMITH-ST-2)
|
|
(GLOBAL OUTSIDE-DOOR)
|
|
(ACTION SMITH-ST-F)
|
|
(FLAGS ONBIT OUTSIDE)>
|
|
|
|
<ROUTINE SMITH-ST-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
'SMITH-ST " runs east and west along the north side of the main campus
|
|
area. At the moment, it is an arctic wasteland of howling wind and
|
|
drifting snow. On the other side of the street, barely visible, are
|
|
the lidless eyes of streetlights. The street hasn't been plowed, or
|
|
if it has been, it did no good." CR>)
|
|
(<AND <RARG? ENTER>
|
|
<NOT <EQUAL? ,OHERE ,SMITH-ST-2>>>
|
|
<EXIT-TO-COLD>)>>
|
|
|
|
<ROOM SMITH-ST-2
|
|
(IN ROOMS)
|
|
(DESC "Smith Street")
|
|
(SOUTH TO TEMPORARY-LAB)
|
|
(IN TO TEMPORARY-LAB)
|
|
(WEST TO SMITH-ST)
|
|
(EAST "Impenetrable snow drifts block the street.")
|
|
(GLOBAL OUTSIDE-DOOR)
|
|
(ACTION SMITH-ST-2-F)
|
|
(FLAGS ONBIT OUTSIDE)>
|
|
|
|
<ROUTINE SMITH-ST-2-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
'SMITH-ST " runs west towards the computer center here. To the south is
|
|
a dilapidated grey wooden building. The street is an impassable sea of
|
|
blowing and drifting snow." CR>)
|
|
(<RARG? ENTER>
|
|
<COND (<EQUAL? ,OHERE ,TEMPORARY-LAB>
|
|
<EXIT-TO-COLD>)>)>>
|
|
|
|
<GLOBAL FREEZE-COUNT 0>
|
|
|
|
<GLOBAL FREEZING
|
|
<LTABLE (PURE)
|
|
"Bitter, bone-cracking cold assaults you continuously. The
|
|
temperature and the blizzard conditions are both horrible."
|
|
"You can feel the cold worming its way through your layers of
|
|
clothing and biting into your flesh."
|
|
"You can no longer feel the tips of your fingers. As for your toes,
|
|
they have long since ceased to report."
|
|
"Your eyes are icing up."
|
|
"Each breath you take is like swallowing knives.">>
|
|
|
|
<ROUTINE I-FREEZE-TO-DEATH ()
|
|
<COND (<NOT <FSET? ,HERE ,OUTSIDE>>
|
|
<RFALSE>)
|
|
(<G? <SETG FREEZE-COUNT <+ ,FREEZE-COUNT 1>> 5>
|
|
<CRLF>
|
|
<JIGS-UP
|
|
"You are suffused with a warm, blissful numbness. It is marred only by
|
|
the knowledge that before you wake again, you will die.">)
|
|
(ELSE
|
|
<QUEUE I-FREEZE-TO-DEATH 4>
|
|
<TELL CR <GET ,FREEZING ,FREEZE-COUNT> CR>)>>
|
|
|
|
<ROUTINE CS-BEGS ()
|
|
<COND (<AND <VERB? WALK>
|
|
<AND <NOT <EQUAL? ,P-WALK-DIR ,P?SOUTH>>
|
|
<OR <NOT <HERE? ,CS-BASEMENT>>
|
|
<NOT <EQUAL? ,P-WALK-DIR ,P?DOWN ,P?IN>>>>>
|
|
<MOVE-FROM-DOORS>)
|
|
(<P? ENTER <>>
|
|
<NEW-PRSO ,ELEVATOR>
|
|
<RTRUE>)>>
|
|
|
|
<ROOM COMP-CENTER
|
|
(IN ROOMS)
|
|
(DESC "Computer Center")
|
|
(NORTH TO SMITH-ST)
|
|
(IN PER CS-ELEVATOR-ENTER)
|
|
(SOUTH PER CS-ELEVATOR-ENTER)
|
|
(UP TO CS-2ND)
|
|
(DOWN TO CS-BASEMENT)
|
|
(FLOOR 1)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL ELEVATOR ;ELEVATOR-DOOR-1 UP-BUTTON DOWN-BUTTON)
|
|
(ACTION COMP-CENTER-F)>
|
|
|
|
<ROUTINE COMP-CENTER-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
,THE-LOBBY 'COMP-CENTER ". ">
|
|
<ELEVATOR-AND-BUTTONS>
|
|
<TELL "to the south.">
|
|
<DESCRIBE-STAIRS>
|
|
<TELL
|
|
S "To the north is " 'SMITH-ST "." CR>)
|
|
(<RARG? BEG>
|
|
<CS-BEGS>)
|
|
(<RARG? ENTER>
|
|
<EXIT-FROM-COLD>)>>
|
|
|
|
<ROOM CS-2ND
|
|
(IN ROOMS)
|
|
(DESC "Second Floor")
|
|
(NORTH TO TERMINAL-ROOM)
|
|
(WEST TO KITCHEN)
|
|
(SOUTH PER CS-ELEVATOR-ENTER)
|
|
(IN PER CS-ELEVATOR-ENTER)
|
|
(UP TO CS-3RD)
|
|
(DOWN TO COMP-CENTER)
|
|
(FLOOR 2)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL ELEVATOR ;ELEVATOR-DOOR-2 UP-BUTTON DOWN-BUTTON)
|
|
(ACTION CS-2ND-F)>
|
|
|
|
<ROUTINE DESCRIBE-ELEVATOR-AND-BUTTONS ()
|
|
<TELL
|
|
" floor of the " 'COMP-CENTER ". ">
|
|
<ELEVATOR-AND-BUTTONS>
|
|
<TELL "on the south side of the hallway.">>
|
|
|
|
<ROUTINE ELEVATOR-AND-BUTTONS ()
|
|
<TELL "An elevator and call button">
|
|
<COND (<NOT <HERE? CS-3RD CS-BASEMENT>> <TELL "s">)>
|
|
<TELL " are ">>
|
|
|
|
<ROUTINE CS-2ND-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is the second">
|
|
<DESCRIBE-ELEVATOR-AND-BUTTONS>
|
|
<TELL " A large, noisy room is to the north.">
|
|
<DESCRIBE-STAIRS>
|
|
<TELL
|
|
"To the west
|
|
a corridor leads into a smaller room." CR>)
|
|
(<RARG? BEG>
|
|
<CS-BEGS>)>>
|
|
|
|
<ROOM CS-3RD
|
|
(IN ROOMS)
|
|
(DESC "Third Floor")
|
|
(NORTH "There is a glass wall in the way.")
|
|
(IN PER CS-ELEVATOR-ENTER)
|
|
(SOUTH PER CS-ELEVATOR-ENTER)
|
|
(UP TO CS-ROOF)
|
|
(OUT TO CS-ROOF)
|
|
(DOWN TO CS-2ND)
|
|
(FLOOR 3)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL ELEVATOR DOWN-BUTTON OUTSIDE-DOOR)
|
|
(ACTION CS-3RD-F)
|
|
(THINGS
|
|
<PSEUDO (COMPUTER EQUIPMENT RANDOM-PSEUDO)
|
|
(<> COMPUTER RANDOM-PSEUDO)
|
|
(<> GLASS RANDOM-PSEUDO)
|
|
(GLASS WALL RANDOM-PSEUDO)
|
|
(GLASS WINDOW RANDOM-PSEUDO)>)>
|
|
|
|
<ROUTINE CS-3RD-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is the third">
|
|
<DESCRIBE-ELEVATOR-AND-BUTTONS>
|
|
<DESCRIBE-STAIRS>
|
|
<TELL
|
|
S "To the north is ""a glass wall beyond which
|
|
you can see a computer room crammed with computer equipment. A stairway
|
|
leads up." CR>)
|
|
(<RARG? BEG>
|
|
<CS-BEGS>)>>
|
|
|
|
<ROOM CS-ROOF
|
|
(IN ROOMS)
|
|
(DESC "Roof")
|
|
(DOWN TO CS-3RD)
|
|
(IN TO CS-3RD)
|
|
(GLOBAL OUTSIDE-DOOR)
|
|
(ACTION CS-ROOF-F)
|
|
(FLAGS ONBIT OUTSIDE)>
|
|
|
|
<ROUTINE CS-ROOF-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is the roof of the " 'COMP-CENTER ". A door leads to the stairway.
|
|
The roof is covered with tarred pea gravel and drifted snow. The wind
|
|
howls around your ears. To the south and southeast you can dimly see the
|
|
looming shapes of the Great Dome and the Brown Building." CR>)
|
|
(<RARG? BEG>
|
|
<ROOF-BEGS>)
|
|
(<RARG? ENTER>
|
|
<TELL "You push through the door to the roof. ">
|
|
<EXIT-TO-COLD>)
|
|
(<RARG? LEAVE>
|
|
<EXIT-FROM-COLD>)>>
|
|
|
|
<ROOM TERMINAL-ROOM
|
|
(IN ROOMS)
|
|
(DESC "Terminal Room")
|
|
(LDESC
|
|
"This is a large room crammed with computer terminals, small
|
|
computers, and printers. An exit leads south. Banners, posters, and
|
|
signs festoon the walls. Most of the tables are covered with waste
|
|
paper, old pizza boxes, and empty Coke cans. There are usually a lot of
|
|
people here, but tonight it's almost deserted.")
|
|
(SOUTH PER HACKER-EXIT) ;CS-2ND
|
|
(OUT PER HACKER-EXIT) ;CS-2ND
|
|
(ACTION TERMINAL-ROOM-F)
|
|
(GLOBAL PROGRAM OUTLET)
|
|
(FLAGS ONBIT)
|
|
(THINGS <PSEUDO (<> BANNER RANDOM-PSEUDO)
|
|
(<> POSTER RANDOM-PSEUDO)
|
|
(<> SIGN RANDOM-PSEUDO)
|
|
(<> SIGNS RANDOM-PSEUDO)>)>
|
|
|
|
<ROUTINE HACKER-EXIT ()
|
|
<COND (<OR <HELD? ,PC> <HELD? ,CHAIR>>
|
|
<TELL
|
|
,HACKER-PREVENTS ,YOU-CANT "walk off with that!
|
|
It's Tech property!\"" CR>
|
|
<RFALSE>)
|
|
(ELSE ,CS-2ND)>>
|
|
|
|
<ROUTINE TERMINAL-ROOM-F (RARG)
|
|
<COND ;(<RARG? LOOK>
|
|
<TELL
|
|
CR>)
|
|
(<RARG? BEG>
|
|
<COND (<AND <NOT <VERB? TELL>> <GAME-VERB?>>
|
|
<RFALSE>)
|
|
(<QUEUED? I-HACKER-HELPS>
|
|
<COND (<P? (RUB POINT CLICK HELP)
|
|
(MENU-BOX MORE-BOX <>)>
|
|
<TELL
|
|
,HACKER-PREVENTS "Who's the hacker here?\" he snarls." CR>)>)
|
|
(<QUEUED? I-COMPULSION>
|
|
<COND (<P? (RUB POINT CLICK PUSH ATTACK) MORE-BOX>
|
|
<RFALSE>)
|
|
(<P? READ ,ODD-PAPER>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<COND (<VERB? TELL HELLO>
|
|
<TELL
|
|
"Your throat tightens, and no sound issues forth. ">)
|
|
(<VERB? INVENTORY LAMP-OFF>
|
|
<TELL
|
|
"Your body refuses to obey your brain's command. ">)>
|
|
<TELL
|
|
"Instead, you find your finger moving towards the MORE box, and you touch
|
|
it. The screen feels oddly cold." CR>
|
|
<COND (<VERB? TELL>
|
|
<END-QUOTE>)
|
|
(ELSE <RTRUE>)>)>)>)
|
|
(<AND <RARG? ENTER>
|
|
<EQUAL? ,OHERE ,PLATFORM-ROOM>>
|
|
<QUEUE I-HACKER-HELPS -1>
|
|
<TELL
|
|
"You are awakened by the thump of your head hitting the terminal
|
|
in front of you. Falling asleep over term papers! It must have been a
|
|
nightmare. Embarrassed, you glance around. Yes, the hacker is looking
|
|
in your direction. He must have heard the thump." CR CR>)>>
|
|
|
|
<GLOBAL HACKER-HELP 0>
|
|
|
|
<ROUTINE I-HACKER-HELPS ()
|
|
<COND (<HERE? ,TERMINAL-ROOM>
|
|
<SETG HACKER-HELP <+ ,HACKER-HELP 1>>
|
|
<CRLF>
|
|
<COND (<EQUAL? ,HACKER-HELP 1>
|
|
<TELL
|
|
S "The hacker wanders ""over, trying to look nonchalant">
|
|
<COND (<IN? ,PLAYER ,CHAIR>
|
|
<MOVE ,PLAYER ,HERE>
|
|
<FCLEAR ,HACKER ,CONTBIT>
|
|
<MOVE ,HACKER ,CHAIR>
|
|
<TELL
|
|
" as he takes over your chair">)>
|
|
<TELL ". \"Losing,
|
|
huh?\" he asks wittily. He ">
|
|
<COND (<FSET? ,PC ,POWERBIT>
|
|
<TELL "glances at">)
|
|
(ELSE
|
|
<TELL "turns on">)>
|
|
<TELL
|
|
" your terminal, which displays a pattern of snow and unusual characters.
|
|
He appears somewhat excited." CR>)
|
|
(<EQUAL? ,HACKER-HELP 2>
|
|
<TELL
|
|
"The hacker, mumbling under his breath,
|
|
begins a flurry of activity. First the screen returns to something
|
|
nearly normal, then windows begin popping up like toadstools after a
|
|
rain. The screen looks a lot like the top of his terminal table (or the
|
|
bottom of a trash can)." CR>)
|
|
(<EQUAL? ,HACKER-HELP 3>
|
|
<TELL
|
|
"The hacker types furiously, and the screen displays what to you looks
|
|
like an explosion in a teletype factory. After a while he says. \"Chomping
|
|
file system. Your directory has gone seriously west. I fixed it.\" He
|
|
checks the screen. \"It was mixed up on the file server with some files
|
|
from the Department of
|
|
Alchemy.\" He grunts. \"People's names for their nodes are getting
|
|
weird. This one is called 'Lovecraft.'\" He pauses. \"Your paper is gone,
|
|
though. Sorry. Maybe they could help you down there.\"" CR>)
|
|
(ELSE
|
|
<MOVE ,HACKER ,TERMINAL-ROOM>
|
|
<FSET ,HACKER ,CONTBIT>
|
|
<DEQUEUE I-HACKER-HELPS>
|
|
<TELL
|
|
S "The hacker wanders " "back to his terminal and returns to
|
|
his hacking." CR>)>)
|
|
(ELSE <DEQUEUE I-HACKER-HELPS>)>>
|
|
|
|
<ROOM CS-BASEMENT
|
|
(IN ROOMS)
|
|
(DESC "Basement")
|
|
(UP TO COMP-CENTER)
|
|
(SOUTH PER CS-ELEVATOR-ENTER)
|
|
(IN PER CS-ELEVATOR-ENTER)
|
|
(EAST TO TEMPORARY-BASEMENT)
|
|
(WEST TO AERO-BASEMENT)
|
|
(DOWN PER CS-PIT-ENTER)
|
|
(FLOOR 0)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL ELEVATOR ELEVATOR-DOOR-B UP-BUTTON CABLE STEAM-PIPES)
|
|
(ACTION CS-BASEMENT-F)>
|
|
|
|
<ROUTINE CS-PIT-ENTER ()
|
|
<COND (<WINNER? ,URCHIN> <RFALSE>)
|
|
(<AND <FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<NOT <ZERO? ,ELEVATOR-LOC>>>
|
|
<TELL
|
|
"You drop to the floor below, which isn't all that far down.">
|
|
<COND (,HOLDING-DOORS?
|
|
<SETG HOLDING-DOORS? <>>
|
|
<FCLEAR ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<ELEVATOR-WANTED?>
|
|
<TELL
|
|
" The doors shut as soon as you release them">
|
|
<IN-DARK?>)
|
|
(ELSE <CRLF>)>
|
|
<CRLF>
|
|
,ELEVATOR-PIT)
|
|
(ELSE
|
|
<CANT-GO>
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE CS-BASEMENT-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"Bare concrete walls line a wide corridor leading east and west. ">
|
|
<ELEVATOR-AND-BUTTONS>
|
|
<TELL "to the south.">
|
|
<DESCRIBE-STAIRS>
|
|
<TELL S
|
|
"From floor to ceiling run wire channels and steam pipes.|">)
|
|
(<RARG? BEG>
|
|
<CS-BEGS>)>>
|
|
|
|
<ROOM TEMPORARY-BASEMENT
|
|
(IN ROOMS)
|
|
(DESC "Temporary Basement")
|
|
(LDESC
|
|
"During the Second World War, some temporary buildings were built to house
|
|
war-related research. Naturally, these buildings, though flimsy and ugly,
|
|
are still around. This is the basement of one of them. The basement
|
|
extends west, a stairway leads up, and a large passage is to the east.")
|
|
(WEST TO CS-BASEMENT)
|
|
(EAST TO DEAD-STORAGE)
|
|
(UP TO TEMPORARY-LAB)
|
|
(FLAGS ONBIT)>
|
|
|
|
<ROOM DEAD-STORAGE
|
|
(IN ROOMS)
|
|
(DESC "Dead Storage")
|
|
(WEST TO TEMPORARY-BASEMENT)
|
|
(EAST PER STORAGE-EXIT)
|
|
(IN PER STORAGE-EXIT)
|
|
(GLOBAL JUNK)
|
|
(ACTION DEAD-STORAGE-F)>
|
|
|
|
<ROUTINE DEAD-STORAGE-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is a storage room. It contains an incredible assemblage of discarded
|
|
junk. Some of it is so old and mouldering that you can't be sure where one
|
|
bit of junk stops and the next begins. It's piled to the ceiling on
|
|
ancient, rotting pallets">
|
|
<COND (<L? ,JUNK-MOVED? ,JUNK-MOVES-NEEDED>
|
|
<TELL
|
|
"; you can't even see the east wall.">)
|
|
(ELSE
|
|
<TELL
|
|
". A narrow path winds eastward through the junk.">)>
|
|
<CRLF>)
|
|
(<RARG? BEG>
|
|
<COND (<P? THROUGH ROOMS>
|
|
<DO-WALK ,P?EAST>)
|
|
(<P? MOVE CORRIDOR>
|
|
<NEW-PRSO ,JUNK>
|
|
<RTRUE>)>)>>
|
|
|
|
<GLOBAL JUNK-MOVED? <>>
|
|
<CONSTANT JUNK-MOVES-NEEDED 3>
|
|
|
|
<ROUTINE STORAGE-EXIT ()
|
|
<COND (<WINNER? ,URCHIN> <RFALSE>)
|
|
(<G? ,JUNK-MOVED? ,JUNK-MOVES-NEEDED> ,STORAGE-ROOM)
|
|
(,JUNK-MOVED?
|
|
<TELL
|
|
"There is still no path all the way through the junk, but you can now
|
|
tell for sure that there's a room to the east." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<TELL
|
|
"You climb around on the junk for a while, and you get the impression that
|
|
there is an opening 'way on the east wall, but there is so much stuff in
|
|
the way that you can't get to it." CR>
|
|
<RFALSE>)>>
|
|
|
|
<OBJECT JUNK
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "junk")
|
|
(SYNONYM JUNK DEBRIS PALLET PILE)
|
|
(ADJECTIVE MOULDERING OLD PILE)
|
|
(FLAGS NDESCBIT NOABIT)
|
|
(ACTION JUNK-F)>
|
|
|
|
<ROUTINE JUNK-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"Looking more closely only emphasizes how completely entropy has taken
|
|
over this room." CR>)
|
|
(<VERB? MOVE PRY>
|
|
<TELL
|
|
"You have obviously underestimated the amount of junk in here. It's
|
|
not only voluminous, it's heavy." CR>)
|
|
(<VERB? SEARCH>
|
|
<TELL
|
|
"You find many worthless items of hardware, old discarded memos and
|
|
papers, but nothing of any use or value." CR>)>>
|
|
|
|
<OBJECT FORKLIFT
|
|
(IN AERO-BASEMENT)
|
|
(DESC "forklift")
|
|
(SYNONYM FORKLIFT LIFT)
|
|
(ADJECTIVE FORK)
|
|
(FLAGS VEHBIT SURFACEBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(ACTION FORKLIFT-F)>
|
|
|
|
<GLOBAL FORKLIFT-WONT-FIT "The forklift won't fit into the ">
|
|
|
|
<GLOBAL A-DEAD-FORKLIFT " a forklift that isn't running.">
|
|
|
|
<ROUTINE FORKLIFT-F ("OPT" (RARG <>) "AUX" O)
|
|
<COND (<RARG? BEG>
|
|
<COND (<P? OPEN MANHOLE-COVER FORKLIFT>
|
|
<RFALSE>)
|
|
(<AND <VERB? LEAP BOARD MUNG>
|
|
,PRSO
|
|
<NOT <IN? ,PRSO ,FORKLIFT>>
|
|
<NOT <PRSO? ,FORKLIFT>>>
|
|
<PERFORM ,V?DRIVE-ON ,FORKLIFT ,PRSO>
|
|
<RTRUE>)
|
|
(<VERB? DRIVE-ON DRIVE-TO> <RFALSE>)
|
|
(<P? THROUGH JUNK>
|
|
<TELL
|
|
"The forklift isn't that powerful." CR>)
|
|
(<VERB? WALK>
|
|
<COND (<EQUAL? ,P-WALK-DIR ,P?DOWN>
|
|
<PERFORM ,V?DISEMBARK>
|
|
<RTRUE>)
|
|
(<NOT <FSET? ,FORKLIFT ,POWERBIT>>
|
|
<TELL
|
|
,YOU-CANT "go anywhere in" ,A-DEAD-FORKLIFT CR>)
|
|
(<AND <IN? ,FORKLIFT ,DEAD-STORAGE>
|
|
<EQUAL? ,P-WALK-DIR ,P?EAST>>
|
|
<COND (<G? ,JUNK-MOVED? ,JUNK-MOVES-NEEDED>
|
|
<GOTO ,STORAGE-ROOM>)
|
|
(<NOT ,JUNK-MOVED?>
|
|
<TELL
|
|
"There is no path through the junk for you, much less for a forklift." CR>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-HAVE-TO "move some more junk first, I'm afraid." CR>)>)
|
|
(<OR <AND <IN? ,FORKLIFT ,AERO-BASEMENT>
|
|
<EQUAL? ,P-WALK-DIR ,P?WEST ,P?UP>>
|
|
<AND <IN? ,FORKLIFT ,TEMPORARY-BASEMENT>
|
|
<EQUAL? ,P-WALK-DIR ,P?UP>>>
|
|
<TELL
|
|
,FORKLIFT-WONT-FIT "stairwell." CR>)
|
|
(<IN? ,FORKLIFT ,CS-BASEMENT>
|
|
<COND (<AND <EQUAL? ,P-WALK-DIR
|
|
,P?SOUTH ,P?IN ,P?DOWN>
|
|
<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>>
|
|
<TELL ,FORKLIFT-WONT-FIT>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<TELL "elevator." CR>)
|
|
(ELSE <TELL "shaft." CR>)>)
|
|
(<EQUAL? ,P-WALK-DIR ,P?UP>
|
|
<TELL
|
|
,FORKLIFT-WONT-FIT "stairwell." CR>)>)>)
|
|
(<P? LAMP-ON FORKLIFT>
|
|
<COND (<NOT <FSET? ,PRSO ,POWERBIT>>
|
|
<FSET ,FORKLIFT ,POWERBIT>
|
|
<TELL
|
|
"The forklift sputters to life." CR>)
|
|
(ELSE
|
|
<TELL "It's wheezing away already." CR>)>)
|
|
(<P? (LAMP-OFF STOP) FORKLIFT>
|
|
<COND (<FSET? ,PRSO ,POWERBIT>
|
|
<FCLEAR ,FORKLIFT ,POWERBIT>
|
|
<TELL
|
|
"The forklift coughs once, and dies." CR>)
|
|
(ELSE
|
|
<ITS-ALREADY-X "off">)>)
|
|
(<OR <P? MOVE>
|
|
<P? PRY * FORKLIFT>>
|
|
<COND (<NOT ,LIT>
|
|
<TELL ,TOO-DARK>)
|
|
(<NOT <FSET? ,FORKLIFT ,POWERBIT>>
|
|
<TELL
|
|
,YOU-CANT "move anything with" ,A-DEAD-FORKLIFT CR>)
|
|
(<PRSO? ,JUNK>
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<TELL
|
|
S "There's nothing ""on pallets here, hence the forklift is useless." CR>)
|
|
(<NOT ,JUNK-MOVED?>
|
|
<SETG JUNK-MOVED? 1>
|
|
<TELL
|
|
"You have a little trouble using the forklift, but it's not really all
|
|
that hard. You start clearing junk, moving it around and trying to
|
|
create a passage." CR>
|
|
<RTRUE>)
|
|
(<G? <SETG JUNK-MOVED? <+ ,JUNK-MOVED? 1>>
|
|
,JUNK-MOVES-NEEDED>
|
|
<COND (<G? ,JUNK-MOVED?
|
|
<+ ,JUNK-MOVES-NEEDED 1>>
|
|
<TELL
|
|
"I suppose you're planning to clear the entire room? You've made a nice
|
|
path to the next room already." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You've built a fairly narrow (about one forklift wide) path through the
|
|
junk. You can see an opening into a further storage room beyond this
|
|
one." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
"You continue moving junk, becoming more proficient with the forklift." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
"The forklift is ineffective in manipulating " THE ,PRSO ,PERIOD>)>)
|
|
(<SET O <NOT-REACHABLE?>>
|
|
<CANT-REACH-FROM-VEHICLE .O>)>)
|
|
(<RARG? <>>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is a rusty ">
|
|
<COND (<FSET? ,FORKLIFT ,POWERBIT>
|
|
<TELL "and wheezing ">)>
|
|
<TELL "old forklift. It looks like you could
|
|
control it fairly easily, though." CR>)
|
|
(<VERB? LAMP-ON LAMP-OFF STOP>
|
|
<TELL
|
|
,YOU-HAVE-TO "get in it first." CR>)
|
|
(<P? (MOVE PRY) JUNK FORKLIFT>
|
|
<TELL
|
|
"You're trying to operate the forklift by telepathy?" CR>)>)>>
|
|
|
|
<ROOM STORAGE-ROOM
|
|
(IN ROOMS)
|
|
(DESC "Ancient Storage")
|
|
(LDESC
|
|
"What's deader than dead storage? That's what's in this room. Most of the
|
|
contents have collapsed or rusted back to the primordial ooze. There is
|
|
mold growing on some of the unidentifiable piles. Stagnant
|
|
puddles of water pollute the floor. You can now believe how old some of these
|
|
foundations are said to be.")
|
|
(WEST TO DEAD-STORAGE)
|
|
(DOWN PER MANHOLE-EXIT)
|
|
(VALUE 5)
|
|
(GLOBAL JUNK POOL)
|
|
(ACTION STORAGE-ROOM-F)>
|
|
|
|
<ROUTINE STORAGE-ROOM-F (RARG)
|
|
<COND (<RARG? ENTER>
|
|
<FCLEAR ,MANHOLE ,NDESCBIT>
|
|
<MOVE ,MANHOLE ,HERE>)>>
|
|
|
|
<ROUTINE MANHOLE-EXIT ()
|
|
<COND (<NOT <IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
<SETG SCORE <+ ,SCORE ,MANHOLE-SCORE>>
|
|
<SETG MANHOLE-SCORE 0>
|
|
,BRICK-TUNNEL)
|
|
(ELSE
|
|
<COND (<WINNER? ,PLAYER>
|
|
<TELL
|
|
S "There is a ""steel cover on the manhole." CR>)>
|
|
<RFALSE>)>>
|
|
|
|
<OBJECT MANHOLE
|
|
(IN STORAGE-ROOM)
|
|
(DESC "manhole")
|
|
(SYNONYM MANHOLE HOLE RING)
|
|
(ADJECTIVE MAN STEEL)
|
|
(FLAGS OPENBIT CONTBIT SEARCHBIT RMUNGBIT DOORBIT)
|
|
(CAPACITY 200)
|
|
(DESCFCN MANHOLE-DESC)
|
|
(ACTION MANHOLE-F)>
|
|
|
|
<ROUTINE MANHOLE-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
S "There is a ""closed, disused-looking manhole here.">)
|
|
(ELSE
|
|
<TELL
|
|
S "There is an open ""manhole here.">)>
|
|
<RFATAL>)>>
|
|
|
|
<ROUTINE MANHOLE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<NOT <IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
<TELL
|
|
"It's a manhole.">
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<TELL
|
|
" It's very dark inside, but you can see that crude
|
|
brick handholds provide a slippery path down. Cool air rises out of
|
|
the hole.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<TELL
|
|
"It's a steel ring set in the ">
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<TELL "floor">)
|
|
(ELSE <TELL "ceiling">)>
|
|
<TELL ". It's probably a manhole." CR>)>)
|
|
(<VERB? LOOK-INSIDE LOOK-DOWN>
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL "You see only the cover." CR>)
|
|
(<HERE? ,BRICK-TUNNEL>
|
|
<TELL
|
|
"You can't see much." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You can see a dark, grimy tunnel below." CR>)>)
|
|
(<P? (PUT PUT-ON) * MANHOLE>
|
|
<COND (<PRSO? ,MANHOLE-COVER> <RFALSE>)
|
|
(<NOT <IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
<MOVE ,PRSO ,BRICK-TUNNEL>
|
|
<TELL
|
|
"You drop " THE ,PRSO ", and it hits the ground not far below." CR>)
|
|
(ELSE
|
|
<TELL "The manhole is covered right now." CR>)>)
|
|
(<P? (THROUGH BOARD CLIMB-DOWN) MANHOLE>
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<DO-WALK ,P?DOWN>)
|
|
(ELSE <DO-WALK ,P?UP>)>)
|
|
(<P? (RAISE PRY MOVE) MANHOLE>
|
|
<PERFORM-PRSA ,MANHOLE-COVER ,PRSI>
|
|
<RTRUE>)
|
|
(<VERB? OPEN>
|
|
<COND (<PRSI? ,CROWBAR>
|
|
<NEW-VERB ,V?PRY>
|
|
<RTRUE>)
|
|
(<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
"The only way would seem to be to remove the manhole cover." CR>)>)
|
|
(<VERB? CLOSE>
|
|
<PERFORM ,V?PUT ,MANHOLE-COVER ,MANHOLE>
|
|
<RTRUE>)>>
|
|
|
|
<OBJECT MANHOLE-COVER
|
|
(IN MANHOLE)
|
|
(DESC "manhole cover")
|
|
(FDESC
|
|
"In one corner of the room a manhole cover is partly buried in the dirt and
|
|
crud.")
|
|
(SYNONYM COVER DISC DISK)
|
|
(ADJECTIVE MANHOLE OLD RUSTY STEEL)
|
|
(FLAGS TAKEBIT TRYTAKEBIT SURFACEBIT CONTBIT OPENBIT
|
|
SEARCHBIT)
|
|
(SIZE 200)
|
|
(ACTION MANHOLE-COVER-F)>
|
|
|
|
<ROUTINE MANHOLE-COVER-F ()
|
|
<COND (<PRSO? ,MANHOLE-COVER>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's an old, rusty, steel " 'MANHOLE-COVER>
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
" set in a steel ring embedded in the ">
|
|
<COND (<HERE? ,STORAGE-ROOM> <TELL "floor">)
|
|
(ELSE <TELL "ceiling">)>)>
|
|
<TELL "." CR>)
|
|
(<VERB? TAKE TAKE-OFF>
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
,YOU-CANT S "get a good grip on " "it; it's heavy and in a steel ring;
|
|
impossible to just ">
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<TELL "drag it away." CR>)
|
|
(ELSE
|
|
<TELL "push it off." CR>)>)>)
|
|
(<P? (CLIMB-ON STEP-ON)>
|
|
<TELL ,WASTE-OF-TIME>)
|
|
(<AND <P? (PRY OPEN) * CROWBAR>
|
|
<IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
<MOVE ,MANHOLE-COVER ,STORAGE-ROOM>
|
|
<TELL
|
|
"You lever the " 'MANHOLE-COVER " aside">
|
|
<COND (<HERE? ,STORAGE-ROOM>
|
|
<TELL ", and crusted dirt falls into a dark">
|
|
<COND (<FSET? ,MANHOLE ,RMUNGBIT>
|
|
<TELL ", partly obstructed">)>
|
|
<TELL " hole below." CR>)
|
|
(ELSE <TELL "." CR>)>)
|
|
(<P? (PUSH-TO PUT-ON PUT) * MANHOLE>
|
|
<MOVE ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
"You manage to shove the " 'MANHOLE-COVER " back over the hole." CR>)
|
|
(<VERB? OPEN>
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL "An interesting idea, but how?" CR>)>)
|
|
(<VERB? MOVE RAISE>
|
|
<COND (<NOT <IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
<TELL
|
|
"You move it a little way, but it's very heavy." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"It doesn't budge." CR>)>)
|
|
(<VERB? PUSH>
|
|
<COND (<IN? ,MANHOLE-COVER ,MANHOLE>
|
|
<TELL
|
|
"It's sitting inside a steel ring, so pushing it does nothing." CR>)>)
|
|
(<VERB? CUT MUNG>
|
|
<TELL
|
|
"The cover is heavy.">
|
|
<COND (,PRSI
|
|
<TELL
|
|
" Your " 'PRSI " won't thank you for this.">)>
|
|
<CRLF>)>)>>
|
|
|
|
<ROOM BRICK-TUNNEL
|
|
(IN ROOMS)
|
|
(DESC "Brick Tunnel")
|
|
(UP PER BRICK-TUNNEL-EXIT)
|
|
(NORTH TO CAVE-ROOM)
|
|
(SOUTH TO UNDER-ALCHEMY-LAB)
|
|
(ACTION BRICK-TUNNEL-F)
|
|
(THINGS <PSEUDO (<> BRICKS RANDOM-PSEUDO)
|
|
(<> STONES RANDOM-PSEUDO)>)>
|
|
|
|
<GLOBAL MANHOLE-SCORE 5>
|
|
|
|
<ROUTINE BRICK-TUNNEL-EXIT ()
|
|
<COND (<NOT <IN? ,MANHOLE-COVER ,MANHOLE>>
|
|
,STORAGE-ROOM)
|
|
(ELSE
|
|
<TELL
|
|
S "There is a " 'MANHOLE-COVER " blocking your way." CR>
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE BRICK-TUNNEL-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is an ancient tunnel constructed of roughly
|
|
mortared bricks and stones. ">
|
|
<COND (<ZERO? ,MANHOLE-SCORE>
|
|
<TELL "A slippery and almost invisible set of
|
|
handholds leads up. ">)>
|
|
<TELL "The tunnel continues a long way north and south from here." CR>)
|
|
(<RARG? ENTER>
|
|
<FSET ,MANHOLE ,NDESCBIT>
|
|
<MOVE ,MANHOLE ,HERE>
|
|
<COND (<AND <EQUAL? ,OHERE ,STORAGE-ROOM>
|
|
<FSET? ,MANHOLE ,RMUNGBIT>>
|
|
<FCLEAR ,MANHOLE ,RMUNGBIT>
|
|
<TELL
|
|
S "You push your way through ""cobwebs, damp fungus,
|
|
and other obstructions." CR CR>)
|
|
(<EQUAL? ,OHERE ,UNDER-ALCHEMY-LAB>
|
|
<TELL ,DOWN-LONG-TUNNEL>)>)
|
|
(<RARG? LEAVE>
|
|
<COND (<EQUAL? ,OHERE ,UNDER-ALCHEMY-LAB ,CAVE-ROOM>
|
|
<TELL ,DOWN-LONG-TUNNEL>)>)>>
|
|
|
|
<GLOBAL DOWN-LONG-TUNNEL "You make your way along the long tunnel.||">
|
|
|
|
<ROOM CAVE-ROOM
|
|
(IN ROOMS)
|
|
(DESC "Renovated Cave")
|
|
(SOUTH TO BRICK-TUNNEL)
|
|
(DOWN TO CAVE-ALTAR)
|
|
(GLOBAL SLAB CARVINGS)
|
|
(ACTION CAVE-ROOM-F)>
|
|
|
|
<ROUTINE CAVE-ROOM-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"You are in a huge, cave-like construction. A path leads down to a
|
|
floor partly covered with rough concrete. The walls and ceiling
|
|
are high and reinforced with beams of wood, iron, and steel. In the center
|
|
of the floor you can see a large, flat " 'SLAB ". The only
|
|
exit is behind you to the south." CR>)>>
|
|
|
|
<OBJECT SLAB
|
|
(IN CAVE-ALTAR)
|
|
(DESC "slab of granite")
|
|
(SYNONYM SLAB ALTAR)
|
|
(ADJECTIVE GRANITE)
|
|
(FLAGS NDESCBIT SEARCHBIT VEHBIT OPENBIT SURFACEBIT CONTBIT)
|
|
(CAPACITY 200)
|
|
(ACTION SLAB-F)>
|
|
|
|
<ROUTINE SLAB-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The slab is roughly circular, made of indifferently dressed New England
|
|
granite, and about three feet high.">
|
|
<COND (<HERE? ,CAVE-ALTAR>
|
|
<TELL " It is carved all over with odd glyphs,
|
|
symbols, and strange animal (or part-animal?) figures. The top is covered
|
|
with a brown stain shading to red at the edges.">)>
|
|
<CRLF>)
|
|
(<VERB? BOARD RUB READ PUSH>
|
|
<COND (<HERE? ,CAVE-ROOM>
|
|
<TELL ,ARENT-CLOSE-ENOUGH>)
|
|
(<VERB? READ>
|
|
<NEW-PRSO ,CARVINGS>
|
|
<RTRUE>)
|
|
(<AND <VERB? RUB>
|
|
,PRSI
|
|
<NOT <PRSI? ,HANDS>>>
|
|
<TELL ,NOTHING-HAPPENS>)
|
|
(ELSE
|
|
<TELL
|
|
"An inexplicable revulsion prevents you from touching it." CR>)>)
|
|
(<VERB? WALK-TO>
|
|
<COND (<HERE? ,CAVE-ROOM>
|
|
<DO-WALK ,P?DOWN>)
|
|
(ELSE
|
|
<TELL
|
|
S "You approach the " "slab warily. It is disquieting to look at." CR>)>)>>
|
|
|
|
<OBJECT CARVING-SYMBOL
|
|
(IN SLAB)
|
|
(DESC "incised symbol")
|
|
(SYNONYM SYMBOL)
|
|
(ADJECTIVE INCISED LARGE)
|
|
(FLAGS NDESCBIT)
|
|
(GENERIC GENERIC-SYMBOL-F)
|
|
(ACTION CARVING-SYMBOL-F)>
|
|
|
|
<ROUTINE CARVING-SYMBOL-F ()
|
|
<COND (<VERB? EXAMINE READ>
|
|
<TELL
|
|
"The symbol appears to be the oldest thing carved on the altar.
|
|
It is beautifully incised in the rocks. Its age is apparent from
|
|
its wear and the overlay of newer carvings and scratchings over it. ">
|
|
<TELL-SYMBOL ,CARVINGS>
|
|
<CRLF>)>>
|
|
|
|
<OBJECT CARVINGS
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "carvings")
|
|
(SYNONYM CARVINGS GRAFFITI CREATURE PEOPLE)
|
|
(ADJECTIVE CARVED STAINED OBSCENE REVOLTING INDESCRIBABLE)
|
|
(FLAGS NDESCBIT READBIT SEARCHBIT OPENBIT CONTBIT)
|
|
(GENERIC GENERIC-CREATURE-F)
|
|
(ACTION CARVINGS-F)>
|
|
|
|
<ROUTINE CARVINGS-F ()
|
|
<COND (<VERB? EXAMINE READ>
|
|
<COND (<HERE? ,CAVE-ALTAR>
|
|
<TELL
|
|
"The carvings are in a variety of styles. Some are almost like graffiti,
|
|
and have carved dates as early as 1655 and as recent as last year. Some
|
|
are creatures, or people, or combinations of the two. Some are obscene,
|
|
or revolting, or just indescribable. One is a strange " 'CARVING-SYMBOL ".
|
|
Most are at least partly spotted with brown stains." CR>)
|
|
(ELSE
|
|
<TELL ,ARENT-CLOSE-ENOUGH>)>)
|
|
(<VERB? RUB>
|
|
<NEW-PRSO ,SLAB>
|
|
<RTRUE>)>>
|
|
|
|
<GLOBAL ARENT-CLOSE-ENOUGH "You aren't close enough.|">
|
|
|
|
<ROOM CAVE-ALTAR
|
|
(IN ROOMS)
|
|
(DESC "Before the Altar")
|
|
(UP TO CAVE-ROOM)
|
|
(GLOBAL ;SLAB CARVINGS)
|
|
(ACTION CAVE-ALTAR-F)>
|
|
|
|
<ROUTINE CAVE-ALTAR-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<THIS-IS-IT ,CARVING-SYMBOL>
|
|
<TELL
|
|
"You are at the bottom of the cave. The huge " 'SLAB " in the center
|
|
is a sort of altar. It is carved with strange and
|
|
disturbing symbols, the largest of which looks very familiar. Some
|
|
of the symbols are obscured by rusty red stains. Nearby
|
|
is an iron plate set in the concrete of the floor." CR>)
|
|
(<RARG? BEG>
|
|
<COND (<AND <P? FIND STUDENTS>
|
|
,SEEN-PIT?>
|
|
<TELL
|
|
"You no longer need to look for them. You now understand the stains
|
|
on the altar." CR>)
|
|
(<AND <VERB? WALK>
|
|
<EQUAL? ,P-WALK-DIR ,P?DOWN>
|
|
,SEEN-PIT?>
|
|
<TELL
|
|
"You're joking." CR>)>)
|
|
(<RARG? ENTER>
|
|
<COND (<FSET? ,IRON-PLATE ,OPENBIT>
|
|
<QUEUE I-PANEL-NOISES -1>)>)>>
|
|
|
|
<OBJECT KNIFE
|
|
(IN CAVE-ALTAR)
|
|
(DESC "knife")
|
|
(FDESC
|
|
"Lying to one side of the altar stone is a sharp, thin-bladed
|
|
knife.")
|
|
(SYNONYM KNIFE BLADE)
|
|
(ADJECTIVE SHARP THIN THIN-BLADED)
|
|
(FLAGS TAKEBIT WEAPONBIT TOOLBIT)
|
|
(ACTION KNIFE-F)>
|
|
|
|
<ROUTINE KNIFE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This small knife is clean, sharp, and has a long, thin blade
|
|
and a wooden handle. Only the tip of the blade appears at all dull or
|
|
used." CR>)
|
|
(<VERB? SHARPEN>
|
|
<TELL
|
|
"The blade doesn't look any different after this operation." CR>)>>
|
|
|
|
<OBJECT IRON-PLATE
|
|
(IN CAVE-ALTAR)
|
|
(DESC "iron plate")
|
|
(SYNONYM PLATE HOLE PANEL OPENING)
|
|
(ADJECTIVE IRON)
|
|
(FLAGS AN NDESCBIT CONTBIT TRANSBIT OPENABLE)
|
|
(ACTION IRON-PLATE-F)>
|
|
|
|
<ROUTINE IRON-PLATE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The plate is iron, about two feet square, and ">
|
|
<COND (<NOT <FSET? ,IRON-PLATE ,OPENBIT>>
|
|
<TELL "looks like it could be slid ">)>
|
|
<TELL "open. A curious feature of the plate
|
|
is that it has upward projecting dents in it which appear to have
|
|
been punched from below.">
|
|
<CRLF>)
|
|
(<VERB? OPEN MOVE>
|
|
<COND (,SEEN-PIT?
|
|
<TELL S
|
|
"You would sooner die than open that panel again.|">)
|
|
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
%<IFSOUND <SOUNDS ,S-MONSTR>>
|
|
<FSET ,PRSO ,OPENBIT>
|
|
<QUEUE I-PANEL-NOISES -1>
|
|
<TELL
|
|
"You slide open the panel, revealing a dark pit below. Immediately,
|
|
there is a response from below." CR>)>)
|
|
(<VERB? RAISE>
|
|
<TELL
|
|
"It doesn't lift, it slides." CR>)
|
|
(<P? PUT * ,IRON-PLATE>
|
|
<COND (<FSET? ,PRSI ,OPENBIT>
|
|
<REMOVE ,PRSO>
|
|
<COND (<FSET? ,PRSO ,FOODBIT>
|
|
<TELL
|
|
"Sounds of ghoulish excitement issue from the opening." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"The sounds from below increase in intensity." CR>)>)
|
|
(ELSE
|
|
<TELL "The panel isn't open." CR>)>)
|
|
(<VERB? CLOSE>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<FCLEAR ,PRSO ,OPENBIT>
|
|
<DEQUEUE I-PANEL-NOISES>
|
|
%<IFSOUND <SOUNDS ,S-MONSTR ,S-STOP>>
|
|
<TELL
|
|
"You close the panel. You no longer hear the noises, much to your
|
|
relief." CR>)>)
|
|
(<VERB? LISTEN>
|
|
<COND (,SEEN-PIT?
|
|
<TELL
|
|
,UNABLE "do that again." CR>)
|
|
(<FSET? ,IRON-PLATE ,OPENBIT>
|
|
<TELL
|
|
"Disturbing noises issue from the open panel." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You hear very faint noises through the closed panel." CR>)>)
|
|
(<VERB? LOOK-INSIDE LOOK-UNDER REACH-IN LEAP BOARD>
|
|
<COND (,SEEN-PIT?
|
|
<TELL S
|
|
"You would sooner die than open that panel again.|">)
|
|
(<FSET? ,IRON-PLATE ,OPENBIT>
|
|
<FCLEAR ,IRON-PLATE ,OPENBIT>
|
|
<DEQUEUE I-PANEL-NOISES>
|
|
%<IFSOUND <SOUNDS ,S-MONSTR ,S-STOP>>
|
|
<SETG SEEN-PIT? T>
|
|
<TELL
|
|
"You peer through the hole, shining your light into the stygian darkness
|
|
below. The commotion below is growing louder, and suddenly you catch a
|
|
glimpse of things moving in the pit. Without consciously realizing you
|
|
have done it, you slam the panel shut, reeling away from the source of
|
|
such images. Now you know what has been done with the
|
|
missing students." CR>)
|
|
(ELSE
|
|
<TELL-OPEN-CLOSED ,PRSO>)>)>>
|
|
|
|
<GLOBAL UNABLE "You find yourself unable to ">
|
|
|
|
<GLOBAL SEEN-PIT? <>>
|
|
|
|
<ROUTINE I-PANEL-NOISES ("OPT" (NOCR? <>))
|
|
<COND (<NOT <HERE? ,CAVE-ALTAR ,CAVE-ROOM>>
|
|
%<IFSOUND <SOUNDS ,S-MONSTR ,S-STOP>>
|
|
<DEQUEUE I-PANEL-NOISES>
|
|
<RFALSE>)
|
|
(<AND <NOT .NOCR?> <VERB? LISTEN>>
|
|
<RFALSE>)
|
|
(<HERE? ,CAVE-ALTAR>
|
|
<COND (<NOT .NOCR?> <CRLF>)>
|
|
<TELL
|
|
"A low, guttural, groaning and snarling issues from the opening." CR>)
|
|
(ELSE
|
|
%<IFSOUND <SOUNDS ,S-MONSTR ,S-START 2>>
|
|
<COND (<NOT .NOCR?> <CRLF>)>
|
|
<TELL
|
|
"You can still hear faint groans and snarls from the larger cave." CR>)>>
|
|
|
|
<ROOM UNDER-ALCHEMY-LAB
|
|
(IN ROOMS)
|
|
(DESC "Cinderblock Tunnel")
|
|
(NORTH TO BRICK-TUNNEL)
|
|
(UP PER UNDER-ALCHEMY-LAB-EXIT)
|
|
(GLOBAL ALCHEMY-TRAP-DOOR LAB LADDER)
|
|
(ACTION UNDER-ALCHEMY-LAB-F)>
|
|
|
|
<ROUTINE UNDER-ALCHEMY-LAB-EXIT ()
|
|
<COND (<NOT <FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>>
|
|
<COND (<WINNER? ,PLAYER>
|
|
<THIS-IS-IT ,ALCHEMY-TRAP-DOOR>
|
|
<TELL
|
|
"The trapdoor isn't open." CR>)>
|
|
<RFALSE>)
|
|
(ELSE
|
|
,ALCHEMY-LAB)>>
|
|
|
|
<ROUTINE UNDER-ALCHEMY-LAB-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is a tunnel whose walls are cinderblock, with a concrete floor and
|
|
ceiling. A metal ladder leads up to ">
|
|
<AN-OPEN/CLOSED ,ALCHEMY-TRAP-DOOR>
|
|
<TELL " in the ceiling, and the
|
|
tunnel continues north, where the cinderblock walls become brick." CR>)>>
|
|
|
|
<ROUTINE AN-OPEN/CLOSED (DOOR)
|
|
<COND (<FSET? .DOOR ,OPENBIT> <TELL "an open ">)
|
|
(ELSE <TELL "a closed ">)>
|
|
<TELL D .DOOR>>
|
|
|
|
<ROOM TEMPORARY-LAB
|
|
(IN ROOMS)
|
|
(DESC "Temporary Lab")
|
|
(LDESC
|
|
"This is a laboratory of some sort. It takes up most of the building on
|
|
this level, all the interior walls having been knocked down. (One reason
|
|
these temporary buildings are still here is their
|
|
flexibility: no one cares if they get more or less destroyed.) A stairway
|
|
leads down, and a door leads north.")
|
|
(NORTH TO SMITH-ST-2)
|
|
(OUT TO SMITH-ST-2)
|
|
(DOWN TO TEMPORARY-BASEMENT)
|
|
(GLOBAL OUTSIDE-DOOR)
|
|
(ACTION TEMPORARY-LAB-F)>
|
|
|
|
<ROUTINE TEMPORARY-LAB-F (RARG)
|
|
<COND (<RARG? ENTER>
|
|
;<IFSOUND <SOUNDS ,S-STORMY ,S-STOP>>
|
|
<DEQUEUE I-FREEZE-TO-DEATH>
|
|
<COND (<G? ,FREEZE-COUNT 0>
|
|
<SETG FREEZE-COUNT 0>
|
|
<TELL
|
|
,PUSH-INTO "comparative warmth of a laboratory." CR CR>)>)>>
|
|
|
|
<GLOBAL PUSH-INTO "You push your way into the ">
|
|
|
|
<OBJECT FLASK
|
|
(IN TEMPORARY-LAB)
|
|
(DESC "metal flask")
|
|
(SYNONYM FLASK)
|
|
(ADJECTIVE LARGE METAL DEWAR)
|
|
(FLAGS TAKEBIT CONTBIT SEARCHBIT OPENABLE)
|
|
(SIZE 50)
|
|
(CAPACITY 9)
|
|
(CONTFCN FLASK-CONT)
|
|
(ACTION FLASK-F)>
|
|
|
|
<ROUTINE FLASK-CONT (RARG)
|
|
<COND (<VERB? TAKE>
|
|
<COND (<AND <IN? ,NITROGEN ,FLASK>
|
|
<NOT <PRSO? ,NITROGEN>>>
|
|
<REMOVE ,PRSO>
|
|
<TELL
|
|
"You manage to fish " THE ,PRSO " out without freezing your fingers
|
|
somehow, but it's frozen solid. It's also fragile. It
|
|
shatters into a million pieces, and is gone." CR>)>)>>
|
|
|
|
<ROUTINE FLASK-F ()
|
|
<COND (<PRSO? ,FLASK>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
S "This is a large ""metal flask, about the size of a water cooler bottle. ">
|
|
<COND (<FSET? ,FLASK ,OPENBIT>
|
|
<TELL
|
|
"The flask is open">
|
|
<COND (<IN? ,NITROGEN ,FLASK>
|
|
<TELL
|
|
", and a thin, cold mist flows out of it">)>
|
|
<TELL ,PERIOD>)
|
|
(ELSE
|
|
<TELL-OPEN-CLOSED ,FLASK>)>)
|
|
(<VERB? RUB>
|
|
<TELL
|
|
"The metal of the flask is ">
|
|
<COND (<IN? ,NITROGEN ,FLASK>
|
|
<TELL "very ">)>
|
|
<TELL "cold." CR>)
|
|
(<VERB? OPEN>
|
|
<COND (<NOT <FSET? ,FLASK ,OPENBIT>>
|
|
<FSET ,FLASK ,OPENBIT>
|
|
<TELL
|
|
"You open the flask">
|
|
<COND (<IN? ,NITROGEN ,FLASK>
|
|
<MOVE ,MIST ,HERE>
|
|
<QUEUE I-NITROGEN-GOES 3>
|
|
<TELL
|
|
", and a cold, white mist boils out">)>
|
|
<TELL ,PERIOD>)>)
|
|
(<VERB? CLOSE>
|
|
<COND (<FSET? ,FLASK ,OPENBIT>
|
|
<DEQUEUE I-NITROGEN-GOES>
|
|
<QUEUE I-MIST-GOES 2>
|
|
<FCLEAR ,FLASK ,OPENBIT>
|
|
<TELL
|
|
"You screw the flask closed." CR>)>)
|
|
(<VERB? FILL>
|
|
<CANT-FILL-IT>)
|
|
(<AND <VERB? POUR>
|
|
<IN? ,NITROGEN ,FLASK>>
|
|
<NEW-PRSO ,NITROGEN>
|
|
<RTRUE>)>)
|
|
(<AND <P? PUT * FLASK>
|
|
<G? <GETP ,PRSO ,P?SIZE>
|
|
<GETP ,FLASK ,P?CAPACITY>>>
|
|
<TELL "The neck of " THE ,FLASK " is too small." CR>)>>
|
|
|
|
<OBJECT MIST
|
|
(DESC "mist")
|
|
(SYNONYM MIST GAS)
|
|
(ADJECTIVE THIN COLD THICK BLACK)
|
|
(ACTION MIST-F)>
|
|
|
|
<ROUTINE MIST-F ()
|
|
<COND (<NOT ,TIED-UP?>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The mist is boiling up ">
|
|
<COND (<IN? ,NITROGEN ,FLASK>
|
|
<TELL "out of the flask">)
|
|
(ELSE
|
|
<TELL "off of the ground">)>
|
|
<TELL ". It is thin, white, and cold." CR>)
|
|
(<VERB? RUB>
|
|
<TELL
|
|
"The mist is very cold." CR>)
|
|
(<VERB? SMELL>
|
|
<TELL
|
|
"The mist is odorless." CR>)>)>>
|
|
|
|
<ROUTINE I-MIST-GOES ("AUX" L)
|
|
<COND (<NOT <QUEUED? I-NITROGEN-GOES>>
|
|
<SET L <LOC ,MIST>>
|
|
<REMOVE ,MIST>
|
|
<COND (<HERE? .L>
|
|
<TELL CR
|
|
"The mist dissipates." CR>)>)>>
|
|
|
|
<OBJECT NITROGEN
|
|
(IN FLASK)
|
|
(DESC "cold liquid")
|
|
(SYNONYM NITROGEN LIQUID)
|
|
(ADJECTIVE LIQUID THIN COLD)
|
|
(FLAGS TAKEBIT WEAPONBIT)
|
|
(ACTION NITROGEN-F)>
|
|
|
|
<ROUTINE NITROGEN-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The flask contains a clear, " 'NITROGEN " with a thin white mist
|
|
boiling off of it." CR>)
|
|
(<VERB? TAKE RUB>
|
|
<TELL
|
|
"The liquid is extremely cold. In fact, you burn your finger on it." CR>)
|
|
(<VERB? SMELL>
|
|
<TELL
|
|
"The liquid has no smell." CR>)
|
|
(<VERB? POUR PUT DROP THROW>
|
|
<REMOVE ,NITROGEN>
|
|
<DEQUEUE I-NITROGEN-GOES>
|
|
<QUEUE I-MIST-GOES 2>
|
|
<COND (<PRSI? ,FLASK>
|
|
<TELL ,GOOD-TRICK>)
|
|
(<AND ,PRSI
|
|
<FSET? ,PRSI ,PERSON>
|
|
<NOT <PRSI? ,ME ,HAND>>>
|
|
<SWAP-VERB ,V?ATTACK>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"The freezing liquid pours out">
|
|
<COND (,PRSI
|
|
<TELL " onto " THE ,PRSI>)>
|
|
<TELL ", boiling into cold mist almost immediately">
|
|
<COND (,PRSI
|
|
<COND (<OR <HELD? ,PRSI>
|
|
<INTRINSIC? ,PRSI>>
|
|
<JIGS-UP
|
|
", but not before it freezes you as well.">
|
|
<RFATAL>)
|
|
(<FSET? ,PRSI ,SLIMEBIT>
|
|
<FCLEAR ,PRSI ,SLIMEBIT>)
|
|
(<FSET? ,PRSI ,TAKEBIT>
|
|
<REMOVE ,PRSI>
|
|
<TELL
|
|
", but " THE ,PRSI " freezes and then shatters from the cold">)>)>
|
|
<TELL "." CR>)>)>>
|
|
|
|
<GLOBAL NITROGEN-CNT 5>
|
|
|
|
<ROUTINE I-NITROGEN-GOES ()
|
|
<COND (<IN? ,NITROGEN ,FLASK>
|
|
<QUEUE I-NITROGEN-GOES 3>
|
|
<SETG NITROGEN-CNT <- ,NITROGEN-CNT 1>>
|
|
<COND (<ZERO? ,NITROGEN-CNT>
|
|
<DEQUEUE I-NITROGEN-GOES>
|
|
<QUEUE I-MIST-GOES 2>
|
|
<REMOVE ,NITROGEN>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<COND (<ACCESSIBLE? ,FLASK>
|
|
<TELL CR
|
|
"Cold white mist continues to boil out of the flask." CR>)>)>)>>
|
|
|
|
<ROOM CS-ELEVATOR-ROOM
|
|
(IN ROOMS)
|
|
(DESC "Elevator")
|
|
(OUT PER CS-ELEVATOR-EXIT)
|
|
(NORTH PER CS-ELEVATOR-EXIT)
|
|
(GLOBAL ELEVATOR GRAFFITI ;ELEVATOR-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION CS-ELEVATOR-ROOM-F)>
|
|
|
|
<ROUTINE CS-ELEVATOR-ROOM-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This is a battered, rather dirty elevator. The fake wood walls are
|
|
scratched and marred with graffiti. ">
|
|
<ELEVATOR-DOORS-OPEN-CLOSED ,ELEVATOR-DOOR>
|
|
<TELL ,TO-THE-RIGHT "doors is an
|
|
area with " 'FLOOR-BUTTON "s (B and 1 through 3), an " 'OPEN-BUTTON ", a "
|
|
'CLOSE-BUTTON ", a " 'STOP-SWITCH ", and an " 'ALARM-BUTTON ".">
|
|
<TELL-BUTTON 0 %<ASCII !\B>>
|
|
<TELL-BUTTON 1 %<ASCII !\1>>
|
|
<TELL-BUTTON 2 %<ASCII !\2>>
|
|
<TELL-BUTTON 3 %<ASCII !\3>>
|
|
<TELL
|
|
" Below these is an " 'ACCESS-PANEL " which is ">
|
|
<OPEN-CLOSED ,ACCESS-PANEL>)
|
|
(<RARG? BEG>
|
|
<COND (<VERB? DISEMBARK>
|
|
<DO-WALK ,P?NORTH>)>)>>
|
|
|
|
<GLOBAL TO-THE-RIGHT " To the right of the ">
|
|
|
|
<ROUTINE TELL-BUTTON (N C)
|
|
<COND (<BTST <GET ,BUTTONS .N> ,E-GO>
|
|
<TELL " The \"">
|
|
<PRINTC .C>
|
|
<TELL "\" button is glowing.">)>>
|
|
|
|
<OBJECT ACCESS-PANEL
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "access panel")
|
|
(SYNONYM PANEL)
|
|
(ADJECTIVE ACCESS)
|
|
(CAPACITY 20)
|
|
(FLAGS NDESCBIT AN CONTBIT SEARCHBIT OPENABLE)
|
|
(ACTION ACCESS-PANEL-F)>
|
|
|
|
<ROUTINE ACCESS-PANEL-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<NOT <FSET? ,ACCESS-PANEL ,OPENBIT>>
|
|
<TELL
|
|
"This panel presumably opens to access the inner maintenance controls
|
|
of the elevator." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"The panel conceals a small space which probably contained maintenance
|
|
controls for the elevator once, but these have been torn out by someone,
|
|
leaving a bare metal cavity. ">
|
|
<DESCRIBE-SENT ,ACCESS-PANEL>
|
|
<CRLF>)>)>>
|
|
|
|
<OBJECT FLASHLIGHT
|
|
(IN ACCESS-PANEL)
|
|
(DESC "flashlight")
|
|
(SYNONYM FLASHLIGHT LIGHT LAMP)
|
|
(ADJECTIVE FLASH)
|
|
(FLAGS TAKEBIT LIGHTBIT)
|
|
(ACTION FLASHLIGHT-F)>
|
|
|
|
<ROUTINE FLASHLIGHT-F ("AUX" OLIT)
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The flashlight is a heavy-duty shop-style light.">
|
|
<COND (<FSET? ,FLASHLIGHT ,ONBIT>
|
|
<TELL S " It is currently ""on.">)>
|
|
<CRLF>)
|
|
(<VERB? LAMP-ON>
|
|
<COND (<NOT <FSET? ,FLASHLIGHT ,LIGHTBIT>>
|
|
<TELL
|
|
,IT-SEEMS-TO-BE "burned out." CR>)
|
|
(<FSET? ,FLASHLIGHT ,ONBIT>
|
|
<TELL
|
|
"It is!" CR>)
|
|
(ELSE
|
|
<FSET ,FLASHLIGHT ,ONBIT>
|
|
<QUEUE I-FLASHLIGHT <GET ,FLASHLIGHT-TABLE 0>>
|
|
<TELL CTHE ,FLASHLIGHT " clicks on." CR>
|
|
<SET OLIT ,LIT>
|
|
<SETG LIT <LIT? ,HERE>>
|
|
<COND (<AND <NOT .OLIT> ,LIT>
|
|
<CRLF>
|
|
<V-LOOK>)>
|
|
<RTRUE>)>)
|
|
(<VERB? LAMP-OFF>
|
|
<COND (<NOT <FSET? ,FLASHLIGHT ,ONBIT>>
|
|
<TELL
|
|
"It is!" CR>)
|
|
(ELSE
|
|
<FCLEAR ,FLASHLIGHT ,ONBIT>
|
|
<PUT ,FLASHLIGHT-TABLE 0 <DEQUEUE I-FLASHLIGHT>>
|
|
<TELL
|
|
CTHE ,FLASHLIGHT " clicks off">
|
|
<IN-DARK? T>)>)
|
|
(<VERB? OPEN>
|
|
<TELL
|
|
"It doesn't open. It appears to be one of those rechargeable lights,
|
|
so you can't easily get at the battery." CR>)>>
|
|
|
|
<ROUTINE I-FLASHLIGHT ("AUX" (HERE? <>) OLIT)
|
|
<COND (<SET HERE? <EQUAL? <META-LOC ,FLASHLIGHT> ,HERE>>
|
|
<TELL CR CTHE ,FLASHLIGHT <GET ,FLASHLIGHT-TABLE 1>>)>
|
|
<SETG FLASHLIGHT-TABLE <REST ,FLASHLIGHT-TABLE 4>>
|
|
<COND (<ZERO? <GET ,FLASHLIGHT-TABLE 0>>
|
|
<FCLEAR ,FLASHLIGHT ,ONBIT>
|
|
<FCLEAR ,FLASHLIGHT ,LIGHTBIT>
|
|
<COND (.HERE?
|
|
<TELL CTHE ,FLASHLIGHT " has burned out">
|
|
<IN-DARK? T>)>)
|
|
(ELSE
|
|
<QUEUE I-FLASHLIGHT <GET ,FLASHLIGHT-TABLE 0>>)>
|
|
<COND (.HERE? <CRLF>)>>
|
|
|
|
<GLOBAL FLASHLIGHT-TABLE
|
|
<TABLE 200
|
|
" is a little dimmer now."
|
|
100
|
|
" is producing much less light."
|
|
50
|
|
" is very dim."
|
|
25
|
|
" is flickering."
|
|
5
|
|
" is practically out."
|
|
1
|
|
" fails."
|
|
0>>
|
|
|
|
<ROUTINE THIS-FLOOR-DOOR ()
|
|
<COND (<HERE? ,CS-BASEMENT ,ELEVATOR-PIT> ,ELEVATOR-DOOR-B)
|
|
(<HERE? ,COMP-CENTER> ,ELEVATOR-DOOR-1)
|
|
(<HERE? ,CS-2ND> ,ELEVATOR-DOOR-2)
|
|
(<HERE? ,CS-3RD> ,ELEVATOR-DOOR-3)>>
|
|
|
|
<ROUTINE DOOR-AT-ELEVATOR ()
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 0> ,ELEVATOR-DOOR-B)
|
|
(<EQUAL? ,ELEVATOR-LOC 1> ,ELEVATOR-DOOR-1)
|
|
(<EQUAL? ,ELEVATOR-LOC 2> ,ELEVATOR-DOOR-2)
|
|
(ELSE ,ELEVATOR-DOOR-3)>>
|
|
|
|
<ROUTINE FLOOR-SHAFT ()
|
|
<COND (<HERE? ,CS-BASEMENT ,ELEVATOR-PIT> ,SHAFT-B)
|
|
(<HERE? ,COMP-CENTER> ,SHAFT-1)
|
|
(<HERE? ,CS-2ND> ,SHAFT-2)
|
|
(<HERE? ,CS-3RD> ,SHAFT-3)>>
|
|
|
|
<OBJECT OPEN-BUTTON
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "open button")
|
|
(SYNONYM BUTTON)
|
|
(ADJECTIVE OPEN)
|
|
(FLAGS NDESCBIT AN)
|
|
(ACTION OPEN-BUTTON-F)>
|
|
|
|
<ROUTINE OPEN-BUTTON-F ()
|
|
<COND (<VERB? PUSH>
|
|
<COND (,ELEVATOR-STOPPED?
|
|
<QUEUE I-ELEVATOR-DOOR-CLOSES 2>
|
|
<COND (<FSET? ,ELEVATOR-DOOR ,OPENBIT>
|
|
<TELL "The doors stay open." CR>)
|
|
(ELSE
|
|
<FSET <DOOR-AT-ELEVATOR> ,OPENBIT>
|
|
<FSET ,ELEVATOR-DOOR ,OPENBIT>
|
|
<TELL "The doors spring open." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
,STILL-MOVING " " ,NOTHING-HAPPENS>)>)>>
|
|
|
|
<OBJECT CLOSE-BUTTON
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "close button")
|
|
(SYNONYM BUTTON)
|
|
(ADJECTIVE CLOSE)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION CLOSE-BUTTON-F)>
|
|
|
|
<ROUTINE CLOSE-BUTTON-F ()
|
|
<COND (<VERB? PUSH>
|
|
<COND (,ELEVATOR-STOPPED?
|
|
<COND (<FSET? ,ELEVATOR-DOOR ,OPENBIT>
|
|
<QUEUE I-ELEVATOR-DOOR-CLOSES 2>
|
|
<TELL "You push the button." CR>)
|
|
(ELSE
|
|
<TELL "The door is already closed." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
S "The elevator is ""moving, the door is closed." CR>)>)>>
|
|
|
|
<OBJECT FLOOR-BUTTON
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "floor button")
|
|
(SYNONYM BUTTON)
|
|
(ADJECTIVE FLOOR INTNUM)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION FLOOR-BUTTON-F)>
|
|
|
|
<OBJECT BASEMENT-BUTTON
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "B button")
|
|
(SYNONYM BUTTON)
|
|
(ADJECTIVE B BASEMENT)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION FLOOR-BUTTON-F)>
|
|
|
|
<ROUTINE FLOOR-BUTTON-F ("AUX" OLD)
|
|
<COND (<VERB? PUSH>
|
|
<COND (<PRSO? ,BASEMENT-BUTTON>
|
|
<SETG P-NUMBER 0>)>
|
|
<COND (<G? ,P-NUMBER 3>
|
|
<TELL
|
|
"There are only three floors and a basement in this building." CR>)
|
|
(<EQUAL? ,P-NUMBER ,ELEVATOR-LOC>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL
|
|
"The button doesn't light." CR>)
|
|
(ELSE <RTRUE>)>)
|
|
(ELSE
|
|
<SET OLD <GET ,BUTTONS ,P-NUMBER>>
|
|
<COND (<NOT <BTST .OLD ,E-GO>>
|
|
<PUT ,BUTTONS ,P-NUMBER <BOR .OLD ,E-GO>>
|
|
<QUEUE I-ELEVATOR-MOVES 1>
|
|
<COND (,ELEVATOR-STOPPED?
|
|
<PICK-ELEVATOR-DIRECTION>)>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL
|
|
"The button for the " <GET ,FLOOR-NAMES ,P-NUMBER> S " begins to glow.|">)
|
|
(ELSE <RTRUE>)>)
|
|
(ELSE
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL ,ALREADY-GLOWING>)
|
|
(ELSE <RTRUE>)>)>)>)>>
|
|
|
|
<GLOBAL FLOOR-NAMES
|
|
<TABLE (PURE) "basement" "first floor" "second floor" "third floor">>
|
|
|
|
<ROUTINE ELEVATOR-HERE? ()
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM> <RTRUE>)
|
|
(<AND <GETPT ,HERE ,P?FLOOR>
|
|
<EQUAL? <GETP ,HERE ,P?FLOOR> ,ELEVATOR-LOC>>
|
|
<RTRUE>)
|
|
(ELSE <RFALSE>)>>
|
|
|
|
<ROUTINE ELEVATOR-WANTED? ()
|
|
<COND (<OR <NOT <ZERO? <GET ,BUTTONS 0>>>
|
|
<NOT <ZERO? <GET ,BUTTONS 1>>>
|
|
<NOT <ZERO? <GET ,BUTTONS 2>>>
|
|
<NOT <ZERO? <GET ,BUTTONS 3>>>>
|
|
<QUEUE I-ELEVATOR-MOVES 1>)>>
|
|
|
|
<ROUTINE I-ELEVATOR-DOOR-OPENS ()
|
|
<QUEUE I-ELEVATOR-DOOR-CLOSES 2>
|
|
<COND (<NOT <FSET? ,ELEVATOR-DOOR ,OPENBIT>>
|
|
<SETG ELEVATOR-STOPPED? 3>
|
|
<FSET <DOOR-AT-ELEVATOR> ,OPENBIT>
|
|
<FSET ,ELEVATOR-DOOR ,OPENBIT>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<TELL CR CTHE ,ELEVATOR-DOOR " slide open." CR>)>)>>
|
|
|
|
"called when door closes on its own"
|
|
|
|
<ROUTINE CHAIN-IN-DOOR? ()
|
|
<COND (<AND ,CHAIN-HOOKED?
|
|
<EQUAL? <META-LOC ,HOOK> ,HERE>
|
|
<OR <HELD? ,CHAIN>
|
|
<IN? ,CHAIN ,HERE>>>
|
|
,CHAIN)>>
|
|
|
|
"called when door closes on its own"
|
|
|
|
<ROUTINE I-ELEVATOR-DOOR-CLOSES ("AUX" W)
|
|
<COND (<NOT <FSET? ,ELEVATOR-DOOR ,OPENBIT>>
|
|
<RFALSE>)
|
|
(<OR <SET W <FIRST? <DOOR-AT-ELEVATOR>>>
|
|
,HOLDING-DOORS?
|
|
<SET W <CHAIN-IN-DOOR?>>>
|
|
<QUEUE I-ELEVATOR-DOOR-CLOSES 2>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<TELL CR
|
|
CTHE ,ELEVATOR-DOOR " bounce against ">
|
|
<COND (.W <TELL THE .W>)
|
|
(ELSE <TELL "your body">)>
|
|
<TELL ", trying to close." CR>)>)
|
|
(ELSE
|
|
<ELEVATOR-WANTED?>
|
|
<FCLEAR ,ELEVATOR-DOOR ,OPENBIT>
|
|
<FCLEAR <DOOR-AT-ELEVATOR> ,OPENBIT>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<TELL CR CTHE ,ELEVATOR-DOOR " slide closed." CR>)>)>>
|
|
|
|
"called when door released after being held open by person or object"
|
|
|
|
<ROUTINE CLOSE-ELEVATOR-DOOR (DOOR)
|
|
<SETG HOLDING-DOORS? <>>
|
|
<SETG ELEVATOR-STOPPED? 1>
|
|
<ELEVATOR-WANTED?>
|
|
<FCLEAR .DOOR ,OPENBIT>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<FCLEAR ,ELEVATOR-DOOR ,OPENBIT>)
|
|
(ELSE
|
|
<REMOVE <FLOOR-SHAFT>>)>>
|
|
|
|
<ROUTINE PICK-ELEVATOR-DIRECTION ("AUX" ZERO ONE TWO THREE)
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 0>
|
|
<SETG ELEVATOR-DIRECTION 1>)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
<SETG ELEVATOR-DIRECTION -1>)
|
|
(ELSE
|
|
<SET ZERO <GET ,BUTTONS 0>>
|
|
<SET ONE <GET ,BUTTONS 1>>
|
|
<SET TWO <GET ,BUTTONS 2>>
|
|
<SET THREE <GET ,BUTTONS 3>>
|
|
<COND (<EQUAL? ,ELEVATOR-DIRECTION -1>
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 1>
|
|
<COND (<ZERO? .ZERO>
|
|
<SETG ELEVATOR-DIRECTION 1>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
<COND (<AND <ZERO? .ZERO>
|
|
<ZERO? .ONE>>
|
|
<SETG ELEVATOR-DIRECTION 1>)>)>)
|
|
(<EQUAL? ,ELEVATOR-DIRECTION 1>
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 2>
|
|
<COND (<ZERO? .THREE>
|
|
<SETG ELEVATOR-DIRECTION -1>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
<COND (<AND <ZERO? .TWO>
|
|
<ZERO? .THREE>>
|
|
<SETG ELEVATOR-DIRECTION -1>)>)>)>)>>
|
|
|
|
"T if elevator called from another floor than current one"
|
|
|
|
<ROUTINE ELEVATOR-CALLED? ()
|
|
<COND (<AND <NOT <ZERO? <GET ,BUTTONS 0>>>
|
|
<NOT <ZERO? ,ELEVATOR-LOC>>>
|
|
<RTRUE>)
|
|
(<AND <NOT <ZERO? <GET ,BUTTONS 1>>>
|
|
<NOT <EQUAL? ,ELEVATOR-LOC 1>>>
|
|
<RTRUE>)
|
|
(<AND <NOT <ZERO? <GET ,BUTTONS 2>>>
|
|
<NOT <EQUAL? ,ELEVATOR-LOC 2>>>
|
|
<RTRUE>)
|
|
(<AND <NOT <ZERO? <GET ,BUTTONS 3>>>
|
|
<NOT <EQUAL? ,ELEVATOR-LOC 3>>>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE NO-HIGHER-UP-CALLS? ("AUX" (ZERO <GET ,BUTTONS 0>)
|
|
(ONE <GET ,BUTTONS 1>) (TWO <GET ,BUTTONS 2>)
|
|
(THREE <GET ,BUTTONS 3>))
|
|
<COND (<ZERO? ,ELEVATOR-LOC>
|
|
<COND (<OR <BTST .ONE <+ ,E-UP ,E-GO>>
|
|
<BTST .TWO <+ ,E-UP ,E-GO>>
|
|
<BTST .THREE <+ ,E-UP ,E-GO>>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
<COND (<OR <BTST .TWO <+ ,E-UP ,E-GO>>
|
|
<BTST .THREE <+ ,E-UP ,E-GO>>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
<COND (<BTST .THREE <+ ,E-UP ,E-GO>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE NO-LOWER-DOWN-CALLS? ("AUX" (ZERO <GET ,BUTTONS 0>)
|
|
(ONE <GET ,BUTTONS 1>) (TWO <GET ,BUTTONS 2>)
|
|
(THREE <GET ,BUTTONS 3>))
|
|
<COND (<ZERO? ,ELEVATOR-LOC>
|
|
<RTRUE>)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
<COND (<BTST .ZERO <+ ,E-DOWN ,E-GO>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
<COND (<OR <BTST .ZERO <+ ,E-DOWN ,E-GO>>
|
|
<BTST .ONE <+ ,E-DOWN ,E-GO>>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
<COND (<OR <BTST .ZERO <+ ,E-DOWN ,E-GO>>
|
|
<BTST .ONE <+ ,E-DOWN ,E-GO>>
|
|
<BTST .TWO <+ ,E-DOWN ,E-GO>>>
|
|
<RFALSE>)
|
|
(ELSE <RTRUE>)>
|
|
<RTRUE>)>>
|
|
|
|
<GLOBAL BRICK-WALL-SCORE 5>
|
|
|
|
<ROUTINE I-ELEVATOR-MOVES ("AUX" OLD STOPPING?)
|
|
<QUEUE I-ELEVATOR-MOVES 1>
|
|
<COND (<OR <FSET? ,ELEVATOR-DOOR ,OPENBIT>
|
|
<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<FSET? ,ELEVATOR-DOOR-1 ,OPENBIT>
|
|
<FSET? ,ELEVATOR-DOOR-2 ,OPENBIT>
|
|
<FSET? ,ELEVATOR-DOOR-3 ,OPENBIT>>
|
|
<RFALSE>)>
|
|
<COND (<AND ,ELEVATOR-STOPPED?
|
|
<ELEVATOR-CALLED?>>
|
|
<SETG ELEVATOR-STOPPED? <- ,ELEVATOR-STOPPED? 1>>
|
|
<COND (<ZERO? ,ELEVATOR-STOPPED?>
|
|
<COND (<OR <HERE? ,ELEVATOR-PIT>
|
|
<AND <HERE? ,STEAM-TUNNEL-EAST>
|
|
<EQUAL? ,BRICK-FLAG ,BF-BOTH>>>
|
|
<TELL CR
|
|
"A loud mechanical whining ">
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
"begins above you." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"is audible through the hole." CR>)>)
|
|
(<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL CR
|
|
"The elevator begins to move " <COND (<G? ,ELEVATOR-DIRECTION 0> "upward")
|
|
(ELSE "downward")> ,PERIOD>)
|
|
(<GETPT ,HERE ,P?FLOOR>
|
|
<TELL CR
|
|
"You hear the elevator begin moving." CR>)>)>)
|
|
(ELSE
|
|
<COND (<OR <AND <ZERO? ,ELEVATOR-LOC>
|
|
<L? ,ELEVATOR-DIRECTION 0>>
|
|
<AND <EQUAL? ,ELEVATOR-LOC 3>
|
|
<G? ,ELEVATOR-DIRECTION 0>>>
|
|
;<TELL
|
|
"** Elevator confused at " N ,ELEVATOR-LOC " **" CR>
|
|
<PICK-ELEVATOR-DIRECTION>)
|
|
(ELSE
|
|
<SETG ELEVATOR-LOC
|
|
<+ ,ELEVATOR-LOC ,ELEVATOR-DIRECTION>>
|
|
<COND (<ZERO? ,ELEVATOR-LOC>
|
|
<MOVE ,ELEVATOR-CEILING ,SHAFT-1>
|
|
<FSET ,ELEVATOR-FLOOR ,NDESCBIT>
|
|
<MOVE ,ELEVATOR-FLOOR ,ELEVATOR-PIT>)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
<MOVE ,ELEVATOR-CEILING ,SHAFT-2>
|
|
<MOVE ,ELEVATOR-FLOOR ,SHAFT-B>
|
|
<COND (<EQUAL? ,CHAIN-HOOKED? ,HOOK>
|
|
<MOVE ,CHAIN ,ELEVATOR-PIT>
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL CR
|
|
"A greasy chain descends out of the shaft into a pile at your feet." CR>)>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
<MOVE ,ELEVATOR-CEILING ,SHAFT-3>
|
|
<MOVE ,ELEVATOR-FLOOR ,SHAFT-1>
|
|
<COND (<AND ,CHAIN-LOOPED? ,CHAIN-HOOKED?>
|
|
<FSET ,CHAIN-2 ,INVISIBLE>
|
|
;<REMOVE ,CHAIN-2>
|
|
<SETG CHAIN-LOOPED? <>>
|
|
<COND (<FSET? ,CHAIN-2 ,LOCKED>
|
|
<FCLEAR ,ELEVATOR-PIT ,TOUCHBIT>
|
|
<REMOVE ,ROD>
|
|
<REMOVE ,PADLOCK>
|
|
<FCLEAR ,CHAIN-2 ,LOCKED>
|
|
<SETG PADLOCK-ON? <>>
|
|
<SETG BRICK-WALL-FLAG T>
|
|
<SETG SCORE
|
|
<+ ,SCORE ,BRICK-WALL-SCORE>>
|
|
<SETG BRICK-WALL-SCORE 0>
|
|
%<IFSOUND
|
|
<SOUNDS ,S-ELCRSH>>
|
|
<COND (<HEAR-CHAIN?>
|
|
<CHAIN-NOISES>
|
|
<TELL
|
|
"tearing, rending sound, then a rumbling
|
|
crash." CR>)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<TELL CR
|
|
"The length of chain grows taut, pulling at the rod.
|
|
Suddenly, the bricks give up, and a steel reinforcing rod pulls free
|
|
of the shattered wall. It flies across the room, impaling you with
|
|
uncanny precision." CR>
|
|
<JIGS-UP>)>)
|
|
(ELSE
|
|
<COND (<HEAR-CHAIN?>
|
|
<CHAIN-NOISES>
|
|
<TELL
|
|
"metallic sliding sound, then silence." CR>)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<TELL CR
|
|
"The chain slides off the rod and away into the air." CR>)>)>)
|
|
(,CHAIN-HOOKED?
|
|
<COND (<IN? ,CHAIN ,WINNER>
|
|
<REMOVE ,CHAIN>
|
|
<TELL CR
|
|
"Suddenly, the chain is torn from your grasp!" CR>)
|
|
(<IN? ,CHAIN ,ELEVATOR-PIT>
|
|
<REMOVE ,CHAIN>)>)>)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
<REMOVE ,ELEVATOR-CEILING>
|
|
<MOVE ,ELEVATOR-FLOOR ,SHAFT-2>)>)>
|
|
<SET OLD <GET ,BUTTONS ,ELEVATOR-LOC>>
|
|
<COND (<G? ,ELEVATOR-DIRECTION 0>
|
|
<COND (<BTST .OLD ,E-UP>
|
|
<SET STOPPING? ,UP-BUTTON>)
|
|
(<AND <BTST .OLD ,E-DOWN>
|
|
<NO-HIGHER-UP-CALLS?>>
|
|
<PICK-ELEVATOR-DIRECTION>
|
|
<SET STOPPING? ,DOWN-BUTTON>)>)
|
|
(<L? ,ELEVATOR-DIRECTION 0>
|
|
<COND (<BTST .OLD ,E-DOWN>
|
|
<SET STOPPING? ,DOWN-BUTTON>)
|
|
(<AND <BTST .OLD ,E-UP>
|
|
<NO-LOWER-DOWN-CALLS?>>
|
|
<PICK-ELEVATOR-DIRECTION>
|
|
<SET STOPPING? ,UP-BUTTON>)>)>
|
|
<COND (<OR .STOPPING? <BTST .OLD ,E-GO>>
|
|
<COND (<NOT .STOPPING?>
|
|
<COND (<OR <AND <G? ,ELEVATOR-DIRECTION 0>
|
|
<NO-HIGHER-UP-CALLS?>>
|
|
<AND <L? ,ELEVATOR-DIRECTION 0>
|
|
<NO-LOWER-DOWN-CALLS?>>>
|
|
<PICK-ELEVATOR-DIRECTION>)>)>
|
|
<PUT ,BUTTONS
|
|
,ELEVATOR-LOC
|
|
<COND (<EQUAL? .STOPPING? ,UP-BUTTON>
|
|
<BAND .OLD ,E-DOWN>)
|
|
(<EQUAL? .STOPPING? ,DOWN-BUTTON>
|
|
<BAND .OLD ,E-UP>)
|
|
(ELSE 0)>>
|
|
<DEQUEUE I-ELEVATOR-MOVES>
|
|
<SETG ELEVATOR-STOPPED? 3>
|
|
<QUEUE I-ELEVATOR-DOOR-OPENS 1>
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<COND (<ZERO? ,ELEVATOR-LOC>
|
|
<JIGS-UP
|
|
"The machinery stops. Unfortunately, before doing so it squashed you
|
|
into the concrete floor. Yuck!">
|
|
<RFATAL>)
|
|
(ELSE
|
|
<TELL CR
|
|
"The noise stops." CR>)>)
|
|
(<AND <HERE? ,STEAM-TUNNEL-EAST>
|
|
<EQUAL? ,BRICK-FLAG ,BF-BOTH>>
|
|
<TELL CR
|
|
S "The whining noise ""in the hole stops." CR>)
|
|
(<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL CR
|
|
"The elevator slows and comes to a stop.">
|
|
<COND (<BTST .OLD ,E-GO>
|
|
<TELL
|
|
" The button for the " <GET ,FLOOR-NAMES ,ELEVATOR-LOC> " blinks off.">)>
|
|
<CRLF>)
|
|
(<AND <EQUAL? .STOPPING? ,UP-BUTTON ,DOWN-BUTTON>
|
|
<NOT <HERE? ,CS-ELEVATOR-ROOM>>
|
|
<ELEVATOR-HERE?>>
|
|
<TELL CR
|
|
CTHE .STOPPING? " blinks off." CR>)
|
|
(<GETPT ,HERE ,P?FLOOR>
|
|
<TELL CR
|
|
"You no longer" ,HEAR-THE-ELEVATOR>)>)
|
|
(<NOT ,ELEVATOR-STOPPED?>
|
|
<COND (<HERE? ELEVATOR-PIT>
|
|
<TELL CR
|
|
S "The whining noise ""is moving ">
|
|
<COND (<G? ,ELEVATOR-DIRECTION 0>
|
|
<TELL "away from you">)
|
|
(ELSE
|
|
<TELL "closer to you">
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 1>
|
|
<TELL
|
|
". In fact, it's very close. It must be just above your head">)>)>
|
|
<TELL ,PERIOD>)
|
|
(<AND <HERE? STEAM-TUNNEL-EAST>
|
|
<EQUAL? ,BRICK-FLAG ,BF-BOTH>>
|
|
<TELL CR
|
|
S "The whining noise ""from the hole is getting "
|
|
<COND (<G? ,ELEVATOR-DIRECTION 0>
|
|
"softer")
|
|
(ELSE "louder")> ,PERIOD>)
|
|
(<HERE? CS-ELEVATOR-ROOM>
|
|
<TELL CR
|
|
"The elevator continues to move " <COND (<G? ,ELEVATOR-DIRECTION 0> "upward")
|
|
(ELSE "downward")> ,PERIOD>)
|
|
(<GETPT ,HERE ,P?FLOOR>
|
|
<TELL CR
|
|
"You" ,HEAR-THE-ELEVATOR>)>)>)>>
|
|
|
|
<GLOBAL HEAR-THE-ELEVATOR " hear the elevator moving.|">
|
|
|
|
<ROUTINE HEAR-CHAIN? ()
|
|
<COND (<ELEVATOR-HERE?> <RTRUE>)
|
|
(<HERE? ,CS-BASEMENT
|
|
,COMP-CENTER
|
|
,CS-2ND
|
|
,CS-3RD
|
|
,STEAM-TUNNEL
|
|
,STEAM-TUNNEL-EAST>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE CHAIN-NOISES ()
|
|
<TELL CR "From ">
|
|
<COND (<HERE? ,STEAM-TUNNEL
|
|
,STEAM-TUNNEL-EAST>
|
|
<TELL "the pit">)
|
|
(ELSE <TELL "below">)>
|
|
<TELL ", you hear a ">>
|
|
|
|
<OBJECT ALARM-BUTTON
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "alarm button")
|
|
(SYNONYM BUTTON)
|
|
(ADJECTIVE ALARM)
|
|
(FLAGS NDESCBIT AN)
|
|
(ACTION ALARM-BUTTON-F)>
|
|
|
|
<ROUTINE ALARM-BUTTON-F ()
|
|
<COND (<VERB? PUSH>
|
|
<TELL
|
|
"For as long as you hold the button down, an ear-splitting alarm bell
|
|
rings." CR>)>>
|
|
|
|
<OBJECT STOP-SWITCH
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "stop switch")
|
|
(SYNONYM SWITCH)
|
|
(ADJECTIVE STOP)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION STOP-SWITCH-F)>
|
|
|
|
<ROUTINE STOP-SWITCH-F ()
|
|
<COND (<VERB? TURN LAMP-ON LAMP-OFF>
|
|
<TELL
|
|
"You flip the switch, but" ,LC-NOTHING-HAPPENS CR>)>>
|
|
|
|
<GLOBAL LC-NOTHING-HAPPENS " nothing happens.">
|
|
|
|
<OBJECT ELEVATOR
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "elevator")
|
|
(SYNONYM ELEVATOR)
|
|
(FLAGS AN VEHBIT)
|
|
(ACTION ELEVATOR-F)>
|
|
|
|
<ROUTINE ELEVATOR-F ("AUX" DOOR)
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<PERFORM ,V?LOOK>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"You aren't in it." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<FSET? <SET DOOR <DOOR-AT-ELEVATOR>> ,OPENBIT>
|
|
<TELL
|
|
"There is an elevator there, unsurprisingly." CR>)
|
|
(ELSE
|
|
<TELL-OPEN-CLOSED .DOOR>)>)
|
|
(<P? (THROUGH BOARD) ELEVATOR>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL ,ALREADY-IN-IT CR>)
|
|
(ELSE <DO-WALK ,P?SOUTH>)>)
|
|
(<VERB? SAY>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL ,YOURE-IN-IT>)
|
|
(ELSE
|
|
<TELL
|
|
"You'll to press one of the call buttons (up or down)." CR>)>)
|
|
(<P? (PUT THROW) * ELEVATOR>
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL ,YOURE-IN-IT>)
|
|
(<FSET? ,ELEVATOR-DOOR ,OPENBIT>
|
|
<MOVE ,PRSO ,CS-ELEVATOR-ROOM>
|
|
<TELL "Thrown." CR>)>)
|
|
(<VERB? OPEN>
|
|
<NEW-PRSO <COND (<HERE? ,CS-ELEVATOR-ROOM> ,ELEVATOR-DOOR)
|
|
(ELSE <THIS-FLOOR-DOOR>)>>
|
|
<RTRUE>)>>
|
|
|
|
<OBJECT ELEVATOR-DOOR
|
|
(IN CS-ELEVATOR-ROOM)
|
|
(DESC "elevator doors")
|
|
(SYNONYM DOOR DOORS)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS NDESCBIT AN DOORBIT OPENABLE)
|
|
(ACTION ELEVATOR-DOOR-F)>
|
|
|
|
<ROUTINE ELEVATOR-DOOR-F ()
|
|
<COND (<VERB? OPEN>
|
|
<PERFORM ,V?PUSH ,OPEN-BUTTON>
|
|
<RTRUE>)
|
|
(<VERB? CLOSE>
|
|
<PERFORM ,V?PUSH ,CLOSE-BUTTON>
|
|
<RTRUE>)
|
|
(<VERB? THROUGH>
|
|
<DO-WALK ,P?NORTH>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 0>
|
|
<REDIRECT ,ELEVATOR-DOOR ,ELEVATOR-DOOR-B>)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
<REDIRECT ,ELEVATOR-DOOR ,ELEVATOR-DOOR-1>)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
<REDIRECT ,ELEVATOR-DOOR ,ELEVATOR-DOOR-2>)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
<REDIRECT ,ELEVATOR-DOOR ,ELEVATOR-DOOR-3>)>)>>
|
|
|
|
<OBJECT ELEVATOR-DOOR-B
|
|
(IN CS-BASEMENT ;LOCAL-GLOBALS)
|
|
(DESC "elevator doors")
|
|
(SYNONYM DOOR DOORS)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS SEARCHBIT AN CONTBIT DOORBIT OPENABLE)
|
|
(CONTFCN ELEVATOR-DOOR-CONT)
|
|
(DESCFCN ELEVATOR-DOORS-DESC)
|
|
(ACTION ELEVATOR-DOORS-F)>
|
|
|
|
<OBJECT ELEVATOR-DOOR-1
|
|
(IN COMP-CENTER ;LOCAL-GLOBALS)
|
|
(DESC "elevator doors")
|
|
(SYNONYM DOOR DOORS)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS SEARCHBIT AN CONTBIT DOORBIT OPENABLE)
|
|
(CONTFCN ELEVATOR-DOOR-CONT)
|
|
(DESCFCN ELEVATOR-DOORS-DESC)
|
|
(ACTION ELEVATOR-DOORS-F)>
|
|
|
|
<OBJECT ELEVATOR-DOOR-2
|
|
(IN CS-2ND ;LOCAL-GLOBALS)
|
|
(DESC "elevator doors")
|
|
(SYNONYM DOOR DOORS)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS SEARCHBIT AN CONTBIT DOORBIT OPENABLE)
|
|
(CONTFCN ELEVATOR-DOOR-CONT)
|
|
(DESCFCN ELEVATOR-DOORS-DESC)
|
|
(ACTION ELEVATOR-DOORS-F)>
|
|
|
|
<OBJECT ELEVATOR-DOOR-3
|
|
(IN CS-3RD ;LOCAL-GLOBALS)
|
|
(DESC "elevator doors")
|
|
(SYNONYM DOOR DOORS)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS SEARCHBIT AN CONTBIT DOORBIT OPENABLE)
|
|
(CONTFCN ELEVATOR-DOOR-CONT)
|
|
(DESCFCN ELEVATOR-DOORS-DESC)
|
|
(ACTION ELEVATOR-DOORS-F)>
|
|
|
|
<ROUTINE ELEVATOR-DOORS-DESC (RARG DOOR)
|
|
<COND (<RARG? OBJDESC?>
|
|
<COND (<FSET? .DOOR ,OPENBIT> <RTRUE>)
|
|
(ELSE <RFATAL>)>)
|
|
(ELSE
|
|
<BUTTON-GLOWING ,UP-BUTTON ,E-UP>
|
|
<BUTTON-GLOWING ,DOWN-BUTTON ,E-DOWN>
|
|
<ELEVATOR-DOORS-OPEN-CLOSED .DOOR>)>>
|
|
|
|
<ROUTINE BUTTON-GLOWING (OBJ BIT
|
|
"AUX" (F <GETP ,HERE ,P?FLOOR>))
|
|
<COND (<AND <GLOBAL-IN? .OBJ ,HERE>
|
|
<BTST <GET ,BUTTONS .F> .BIT>>
|
|
<TELL CTHE .OBJ " is glowing. ">)>>
|
|
|
|
<ROUTINE ELEVATOR-DOORS-OPEN-CLOSED (DOOR "AUX" H?)
|
|
<TELL CTHE ,ELEVATOR-DOOR " are ">
|
|
<COND (<FSET? .DOOR ,OPENBIT>
|
|
<COND (<FIRST? .DOOR>
|
|
<TELL
|
|
"wedged open with " A <FIRST? .DOOR> ", revealing ">
|
|
<COND (<SET H? <ELEVATOR-HERE?>>
|
|
<TELL "the elevator">)
|
|
(ELSE <TELL "a dim " 'SHAFT-B>)>
|
|
<TELL " beyond.">
|
|
<COND (<NOT .H?>
|
|
<CRLF>
|
|
<CRLF>
|
|
<SHAFT-DESC>)>)
|
|
(ELSE
|
|
<TELL "open.">)>)
|
|
(ELSE <TELL "closed.">)>>
|
|
|
|
<ROUTINE ELEVATOR-DOOR-CONT (RARG "AUX" L)
|
|
<COND (<VERB? TAKE>
|
|
<SET L <LOC ,PRSO>>
|
|
<COND (<EQUAL? <ITAKE> T>
|
|
<REMOVE-WEDGER ,PRSO .L>
|
|
<RTRUE>)
|
|
(ELSE <RTRUE>)>)>>
|
|
|
|
<ROUTINE OPEN-ELEVATOR-DOOR ()
|
|
<FSET ,PRSO ,OPENBIT>
|
|
<COND (<ELEVATOR-HERE?>
|
|
<FSET ,ELEVATOR-DOOR ,OPENBIT>)
|
|
(ELSE
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<MOVE ,SHAFT-B ,CS-BASEMENT>)
|
|
(ELSE
|
|
<MOVE <FLOOR-SHAFT> ,HERE>)>)>>
|
|
|
|
<ROUTINE REMOVE-WEDGER (WEDGER DOOR)
|
|
<FCLEAR .WEDGER ,NDESCBIT>
|
|
<CLOSE-ELEVATOR-DOOR .DOOR>
|
|
<COND (<VERB? TAKE>
|
|
<TELL "You take ">)
|
|
(ELSE <TELL "You pull ">)>
|
|
<TELL THE .WEDGER " away, and the doors spring shut">
|
|
<IN-DARK?>>
|
|
|
|
<GLOBAL HOLDING-DOORS? <>>
|
|
|
|
<ROUTINE RELEASE-ELEVATOR-DOORS (D)
|
|
<COND (,HOLDING-DOORS?
|
|
<CLOSE-ELEVATOR-DOOR .D>
|
|
<TELL
|
|
S "You release the ""doors, which spring shut">
|
|
<IN-DARK?>
|
|
<RTRUE>)>>
|
|
|
|
"called when releasing doors because player moved"
|
|
|
|
<ROUTINE MOVE-FROM-DOORS ("AUX" (D <THIS-FLOOR-DOOR>) H)
|
|
<SET H <RELEASE-ELEVATOR-DOORS .D>>
|
|
<COND (<END-OF-CHAIN? .H>)
|
|
(ELSE <RFALSE>)>>
|
|
|
|
<ROUTINE END-OF-CHAIN? ("OPT" (H <>))
|
|
<COND (<AND <HELD? ,CHAIN>
|
|
<OR ,CHAIN-LOOPED? ,CHAIN-HOOKED?>>
|
|
<COND (.H <CRLF>)>
|
|
<TELL S
|
|
"You reach the end of your chain pretty quickly.|">)>>
|
|
|
|
<ROUTINE ALREADY-WEDGED ()
|
|
<TELL
|
|
"It's already wedged open with " A <FIRST? ,PRSO> ,PERIOD>>
|
|
|
|
<ROUTINE NOT-WHILE-MOVING? ()
|
|
<COND (<AND <QUEUED? I-ELEVATOR-MOVES>
|
|
<NOT ,ELEVATOR-STOPPED?>>
|
|
<TELL
|
|
"Not while the elevator is moving!" CR>)>>
|
|
|
|
<ROUTINE FORCE-DOORS ()
|
|
<TELL
|
|
"You force the ">
|
|
<COND (<HERE? ,ELEVATOR-PIT> <TELL "plates">)
|
|
(ELSE <TELL "doors">)>
|
|
<TELL " apart with ">
|
|
<COND (<PRSI? <> ,HANDS>
|
|
<TELL "your hands">)
|
|
(ELSE
|
|
<TELL THE ,PRSI>)>>
|
|
|
|
<ROUTINE ELEVATOR-DOORS-F ("AUX" (TMP <>) AUTO (EH? <ELEVATOR-HERE?>))
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
"You are looking at the inside of an">
|
|
<COND (<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<TELL " open">)>
|
|
<TELL " elevator door">
|
|
<COND (<FIRST? ,PRSO>
|
|
<TELL
|
|
". It's held open by " A <FIRST? ,PRSO>>)>
|
|
<TELL ,PERIOD>)
|
|
(ELSE
|
|
<ELEVATOR-DOORS-OPEN-CLOSED ,PRSO>
|
|
<CRLF>)>)
|
|
(<VERB? CLOSE RELEASE>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<COND (.EH?
|
|
<TELL
|
|
"The elevator usually does that itself." CR>)
|
|
(<SET TMP <FIRST? ,PRSO>>
|
|
<MOVE .TMP ,HERE>
|
|
<REMOVE-WEDGER .TMP ,PRSO>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RELEASE-ELEVATOR-DOORS ,PRSO>)>)
|
|
(ELSE
|
|
<TELL "They're closed already." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<TELL "You can see the ">
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
"basement of the " 'COMP-CENTER "." CR>)
|
|
(.EH?
|
|
<TELL ,THE-INTERIOR ,PERIOD>)
|
|
(ELSE
|
|
<TELL
|
|
'SHAFT-B ". ">
|
|
<PERFORM-PRSA <FLOOR-SHAFT>>
|
|
<RTRUE>)>)
|
|
(ELSE
|
|
<TELL
|
|
"They're closed, opaque, and otherwise non-transparent." CR>)>)
|
|
(<VERB? THROUGH>
|
|
<DO-WALK ,P?SOUTH>
|
|
<RTRUE>)
|
|
(<P? PUT * (ELEVATOR-DOOR-B
|
|
ELEVATOR-DOOR-1
|
|
ELEVATOR-DOOR-2
|
|
ELEVATOR-DOOR-3)>
|
|
<COND (<FIRST? ,PRSI>
|
|
<TELL
|
|
CTHE <FIRST? ,PRSI> " is already holding it open." CR>)
|
|
(<FSET? ,PRSI ,OPENBIT>
|
|
<SWAP-VERB ,V?WEDGE>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-CANT "until it's open." CR>)>)
|
|
(<VERB? OPEN PRY>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<COND (<FIRST? ,PRSO>
|
|
<ALREADY-WEDGED>)
|
|
(,HOLDING-DOORS?
|
|
<TELL ,HOLDING-IS-ALL " It's not easy." CR>)
|
|
(.EH?
|
|
<ALREADY-OPEN>)>)
|
|
(.EH?
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL
|
|
"You are in the elevator">)
|
|
(ELSE
|
|
<TELL
|
|
S "The elevator is ""here">)>
|
|
<TELL
|
|
", so the doors will open when you press ">
|
|
<COND (<HERE? ,CS-ELEVATOR-ROOM>
|
|
<TELL THE ,OPEN-BUTTON "." CR>)
|
|
(ELSE
|
|
<TELL "a call button." CR>)>)
|
|
(<PRSI? <> ,HANDS ,CROWBAR
|
|
,AXE ,BOLT-CUTTER ,KNIFE>
|
|
<COND (<NOT-WHILE-MOVING?> <RTRUE>)>
|
|
<SETG HOLDING-DOORS? T>
|
|
<OPEN-ELEVATOR-DOOR>
|
|
<FORCE-DOORS>
|
|
<TELL ", barely able to hold them open. Beyond you
|
|
see ">
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
"the basement." CR>)
|
|
(ELSE
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<TELL
|
|
"the bottom of the " 'SHAFT-B " only a few feet below. ">)
|
|
(ELSE
|
|
<TELL
|
|
"the " 'SHAFT-B ". ">)>
|
|
<SHAFT-DESC>
|
|
<CRLF>
|
|
<RTRUE>)>)
|
|
(ELSE
|
|
<WITH-PRSI?>)>)
|
|
(<P? PUT-BETWEEN * (ELEVATOR-DOOR-B
|
|
ELEVATOR-DOOR-1
|
|
ELEVATOR-DOOR-2
|
|
ELEVATOR-DOOR-3)>
|
|
<SWAP-VERB ,V?WEDGE>
|
|
<RTRUE>)
|
|
(<P? WEDGE (ELEVATOR-DOOR-B
|
|
ELEVATOR-DOOR-1
|
|
ELEVATOR-DOOR-2
|
|
ELEVATOR-DOOR-3)>
|
|
<COND (<PRSO? ,PRSI>
|
|
<TELL-YUKS>
|
|
<RTRUE>)
|
|
(<FIRST? ,PRSO>
|
|
<ALREADY-WEDGED>
|
|
<RTRUE>)>
|
|
<COND (<NOT-WHILE-MOVING?>
|
|
<RTRUE>)
|
|
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
<FORCE-DOORS>
|
|
<TELL ", revealing ">
|
|
<COND (<OR <HERE? ,ELEVATOR-PIT>
|
|
<AND <HERE? ,CS-ELEVATOR-ROOM>
|
|
<EQUAL? ,ELEVATOR-LOC 0>>>
|
|
<TELL
|
|
"the basement of the " 'COMP-CENTER ". ">)
|
|
(<HERE? ,CS-ELEVATOR-ROOM>
|
|
<COND (<EQUAL? ,ELEVATOR-LOC 1>
|
|
<TELL "a lobby." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"a corridor." CR>)>)
|
|
(<NOT .EH?>
|
|
<SET TMP T>
|
|
<TELL
|
|
"a dark " 'SHAFT-B ". ">)
|
|
(ELSE
|
|
<TELL ,THE-INTERIOR ". ">)>)>
|
|
<COND (<EQUAL? ,PRSI ,CROWBAR ,BOLT-CUTTER ,AXE>
|
|
<OPEN-ELEVATOR-DOOR>
|
|
<FSET ,PRSI ,NDESCBIT>
|
|
<SETG HOLDING-DOORS? <>>
|
|
<MOVE ,PRSI ,PRSO>
|
|
<TELL
|
|
CTHE ,PRSI " wedges nicely between the doors, holding them securely
|
|
open.">
|
|
<COND (.TMP
|
|
<TELL " ">
|
|
<SHAFT-DESC>)>
|
|
<CRLF>
|
|
<RTRUE>)
|
|
(<EQUAL? ,PRSI ,PLASTIC-CONTAINER>
|
|
<SET TMP <ROB ,PRSI ,HERE>>
|
|
<REMOVE ,PRSI>
|
|
<TELL
|
|
"The plastic container holds the doors open for a moment, and then
|
|
is crushed by the force.">
|
|
<COND (.TMP
|
|
<TELL
|
|
" The contents of the container spill to the ground.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-CANT "wedge the door with " A ,PRSI ,PERIOD>)>)>>
|
|
|
|
<GLOBAL HOLDING-IS-ALL "Holding the doors open is all you can do.">
|
|
|
|
<GLOBAL THE-INTERIOR "the interior of the elevator">
|
|
|
|
<OBJECT UP-BUTTON
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "up-arrow")
|
|
(SYNONYM BUTTON ARROW)
|
|
(ADJECTIVE UP-ARROW CALL ELEVATOR)
|
|
(FLAGS NDESCBIT AN)
|
|
(ACTION UP-BUTTON-F)>
|
|
|
|
<OBJECT DOWN-BUTTON
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "down-arrow")
|
|
(SYNONYM BUTTON ARROW)
|
|
(ADJECTIVE DOWN-ARROW CALL ELEVATOR)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION DOWN-BUTTON-F)>
|
|
|
|
<ROUTINE DESCRIBE-STAIRS ()
|
|
<TELL " Stairs also lead ">
|
|
<COND (<HERE? ,COMP-CENTER ,CS-2ND>
|
|
<TELL "up and down">)
|
|
(<HERE? ,CS-BASEMENT>
|
|
<TELL "up">)
|
|
(ELSE <TELL "down">)>
|
|
<TELL ", for the energetic. ">>
|
|
|
|
<ROUTINE UP-BUTTON-F ("OPT" (BIT ,E-UP)"AUX" OLD FLOOR)
|
|
<SET FLOOR <GETP ,HERE ,P?FLOOR>>
|
|
<SET OLD <GET ,BUTTONS .FLOOR>>
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<BTST .OLD .BIT>
|
|
<TELL CTHE ,PRSO " is glowing." CR>)>)
|
|
(<VERB? PUSH>
|
|
<COND (<NOT <BTST .OLD .BIT>>
|
|
<COND (<AND ,ELEVATOR-STOPPED?
|
|
<EQUAL? <GETP ,HERE ,P?FLOOR>
|
|
,ELEVATOR-LOC>>
|
|
<DEQUEUE I-ELEVATOR-MOVES>
|
|
<QUEUE I-ELEVATOR-DOOR-OPENS 1>
|
|
<TELL
|
|
"You push " THE ,PRSO ,PERIOD>)
|
|
(ELSE
|
|
<PUT ,BUTTONS .FLOOR <BOR .BIT .OLD>>
|
|
<COND (,ELEVATOR-STOPPED?
|
|
<PICK-ELEVATOR-DIRECTION>
|
|
<COND (<NOT <QUEUED?
|
|
I-ELEVATOR-DOOR-CLOSES>>
|
|
<QUEUE I-ELEVATOR-MOVES 1 T>)>)>
|
|
<TELL
|
|
CTHE ,PRSO S " begins to glow.|">)>)
|
|
(ELSE
|
|
<TELL ,ALREADY-GLOWING>)>)>>
|
|
|
|
<GLOBAL ALREADY-GLOWING "That button is already glowing.|">
|
|
|
|
<ROUTINE DOWN-BUTTON-F ()
|
|
<UP-BUTTON-F ,E-DOWN>>
|
|
|
|
<CONSTANT E-GO 1> ;"elevator told to go to a floor"
|
|
<CONSTANT E-UP 2> ;"elevator told to come to a floor"
|
|
<CONSTANT E-DOWN 4> ;"elevator told to come to a floor"
|
|
|
|
<GLOBAL BUTTONS <TABLE 0 0 0 0>>
|
|
<GLOBAL ELEVATOR-LOC:NUMBER 1>
|
|
<GLOBAL ELEVATOR-DIRECTION 1> ;"down"
|
|
<GLOBAL ELEVATOR-STOPPED? 1>
|
|
|
|
<ROUTINE CS-ELEVATOR-ENTER ()
|
|
<COND (<WINNER? ,URCHIN> <RFALSE>)
|
|
(<AND ,ELEVATOR-STOPPED?
|
|
<EQUAL? ,ELEVATOR-LOC <GETP ,HERE ,P?FLOOR>>>
|
|
<COND (<FSET? <DOOR-AT-ELEVATOR> ,OPENBIT>
|
|
<COND (<END-OF-CHAIN?> <RFALSE>)
|
|
(ELSE ,CS-ELEVATOR-ROOM)>)
|
|
(ELSE
|
|
<TELL
|
|
CTHE ,ELEVATOR-DOOR " aren't open." CR>
|
|
<RFALSE>)>)
|
|
(<AND <HERE? ,CS-BASEMENT>
|
|
<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>>
|
|
<CS-PIT-ENTER>)
|
|
(<AND <FSET? <THIS-FLOOR-DOOR> ,OPENBIT>
|
|
<FIRST? <THIS-FLOOR-DOOR>>>
|
|
<TELL
|
|
"You would fall ">
|
|
<COND (<IN? ,ELEVATOR-FLOOR ,HERE>
|
|
<TELL "onto the machinery">)
|
|
(ELSE
|
|
<TELL ,INTO-THE-SHAFT>)>
|
|
<TELL ". Not a pretty fate." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<TELL "The elevator isn't here." CR>
|
|
<RFALSE>)>>
|
|
|
|
<GLOBAL INTO-THE-SHAFT "into the elevator shaft">
|
|
|
|
<ROUTINE CS-ELEVATOR-EXIT ()
|
|
<COND (,ELEVATOR-STOPPED?
|
|
<COND (<NOT <FSET? <DOOR-AT-ELEVATOR> ,OPENBIT>>
|
|
<TELL CTHE ,ELEVATOR-DOOR " are closed." CR>
|
|
<RFALSE>)
|
|
(<ZERO? ,ELEVATOR-LOC>
|
|
,CS-BASEMENT)
|
|
(<EQUAL? ,ELEVATOR-LOC 1>
|
|
,COMP-CENTER)
|
|
(<EQUAL? ,ELEVATOR-LOC 2>
|
|
,CS-2ND)
|
|
(<EQUAL? ,ELEVATOR-LOC 3>
|
|
,CS-3RD)>)
|
|
(ELSE
|
|
<TELL ,STILL-MOVING CR>
|
|
<RFALSE>)>>
|
|
|
|
<GLOBAL STILL-MOVING "The elevator is still moving.">
|
|
|
|
<ROOM AERO-STAIRS
|
|
(IN ROOMS)
|
|
(DESC "Stairway")
|
|
(LDESC
|
|
"A dimly lit stairway leads up and down from here. A corridor continues
|
|
east.")
|
|
(UP TO AERO-LOBBY)
|
|
(EAST TO AERO-BASEMENT)
|
|
(DOWN TO SUB-BASEMENT)
|
|
(FLAGS ONBIT)>
|
|
|
|
<ROOM AERO-BASEMENT
|
|
(IN ROOMS)
|
|
(DESC "Aero Basement")
|
|
(LDESC
|
|
"This basement level room is made of smooth, damp-seeming concrete.
|
|
Fluorescent lights cast harsh shadows. To the west is a stairway, and
|
|
to the east the basement area continues.")
|
|
(EAST TO CS-BASEMENT)
|
|
(WEST TO AERO-STAIRS)
|
|
;(ACTION AERO-BASEMENT-F)
|
|
(FLAGS ONBIT)>
|
|
|
|
;<ROUTINE AERO-BASEMENT-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
CR>)>>
|
|
|
|
<ROUTINE HEAVY-JUNK? (WHO "AUX" (F <FIRST? .WHO>))
|
|
<REPEAT ()
|
|
<COND (<NOT .F> <RFALSE>)
|
|
(<AND <EQUAL? .F ,HAND>
|
|
<FSET? .F ,PERSON>>)
|
|
(<EQUAL? .F ,CROWBAR>)
|
|
(<G? <GETP .F ,P?SIZE> 5>
|
|
<RETURN .F>)>
|
|
<SET F <NEXT? .F>>>>
|
|
|
|
<ROUTINE TOMB-SQUEEZE ("AUX" TMP)
|
|
<COND (<WINNER? ,PLAYER>
|
|
<COND (<SET TMP <HEAVY-JUNK? ,WINNER>>
|
|
<TELL "It's too tight a fit carrying " THE .TMP ,PERIOD>
|
|
<THIS-IS-IT .TMP>
|
|
<>)
|
|
(<HERE? ,TOMB>
|
|
,SUB-BASEMENT)
|
|
(ELSE
|
|
,TOMB)>)
|
|
(ELSE
|
|
<COND (<IN? ,WINNER ,TOMB>
|
|
,SUB-BASEMENT)
|
|
(ELSE
|
|
,TOMB)>)>>
|
|
|
|
<ROOM SUB-BASEMENT
|
|
(IN ROOMS)
|
|
(DESC "Subbasement")
|
|
(LDESC
|
|
"This is the subbasement of the Aeronautical Engineering Building. A
|
|
stairway leads up. A narrow
|
|
crack in the northwest corner of the room opens into a larger
|
|
space.")
|
|
(UP TO AERO-STAIRS)
|
|
(NW PER TOMB-SQUEEZE)
|
|
;(ACTION SUB-BASEMENT-F)
|
|
(FLAGS ONBIT)>
|
|
|
|
;<ROUTINE SUB-BASEMENT-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
CR>)>>
|
|
|
|
<ROOM TOMB
|
|
(IN ROOMS)
|
|
(DESC "Tomb")
|
|
(SE PER TOMB-SQUEEZE)
|
|
(OUT PER TOMB-SQUEEZE)
|
|
(DOWN TO TUNNEL IF ACCESS-HATCH IS OPEN)
|
|
(FLAGS ONBIT)
|
|
(ACTION TOMB-F)
|
|
(GLOBAL GLOBAL-HOLE LADDER GRAFFITI ACCESS-HATCH)>
|
|
|
|
<ROUTINE TOMB-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL "This is a tiny, narrow, ill-fitting room. It
|
|
appears to have been a left over space from the joining of two
|
|
preexisting buildings. It is roughly coffin shaped. The walls are
|
|
covered by decades of overlaid graffiti, but there is one which is
|
|
painted in huge fluorescent letters that were apparently impossible
|
|
for later artists to completely deface. On the floor is a rusty access
|
|
hatch">
|
|
<COND (<EQUAL? ,PADLOCK-ON? ,ACCESS-HATCH>
|
|
<TELL " locked with a huge padlock">)
|
|
(<FSET? ,ACCESS-HATCH ,OPENBIT>
|
|
<TELL " which is open">)>
|
|
<TELL ,PERIOD>)
|
|
(<RARG? BEG>
|
|
<COND (<P? (READ EXAMINE) (GRAFFITI WALL)>
|
|
<TELL
|
|
"It reads \"The Tomb of the Unknown Tool.\"" CR>)
|
|
(<P? (THROW DROP) * GLOBAL-HOLE>
|
|
<MOVE ,PRSO ,TUNNEL>
|
|
<TELL "Gone." CR>)>)>>
|
|
|
|
<OBJECT LADDER
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "ladder")
|
|
(SYNONYM LADDER)
|
|
(ADJECTIVE RUSTY IRON METAL SHORT)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION LADDER-F)>
|
|
|
|
<ROUTINE LADDER-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<HERE? ,TOMB ,TUNNEL>
|
|
<TELL
|
|
"It's a rusty ladder made of welded iron set in the wall." CR>)>)
|
|
(<VERB? CLIMB-UP>
|
|
<DO-WALK ,P?UP>)
|
|
(<VERB? CLIMB-DOWN>
|
|
<DO-WALK ,P?DOWN>)
|
|
(<VERB? CLIMB-FOO>
|
|
<COND (<HERE? ,TOMB ,INSIDE-DOME ,ALCHEMY-LAB>
|
|
<DO-WALK ,P?DOWN>)
|
|
(<HERE? ,TUNNEL ,BROWN-ROOF ,UNDER-ALCHEMY-LAB>
|
|
<DO-WALK ,P?UP>)>)>>
|
|
|
|
<OBJECT ACCESS-HATCH
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "hatch")
|
|
(SYNONYM HATCH)
|
|
(ADJECTIVE ACCESS RUSTY)
|
|
(FLAGS DOORBIT OPENABLE NDESCBIT LOCKED SEARCHBIT SURFACEBIT CONTBIT)
|
|
(ACTION ACCESS-HATCH-F)>
|
|
|
|
<ROUTINE UNLOCK-PADLOCK-FIRST ()
|
|
<TELL
|
|
CTHE ,PADLOCK " locks " THE ,PADLOCK-ON? " in place" ,PERIOD>>
|
|
|
|
<ROUTINE ALREADY-LOCKED-TO ()
|
|
<TELL
|
|
CTHE ,PADLOCK " is already locked to " THE ,PADLOCK-ON? ,PERIOD>>
|
|
|
|
<ROUTINE ACCESS-HATCH-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<EQUAL? <GET ,P-NAMW 0> ,W?HOLE>
|
|
<NEW-VERB ,V?LOOK-INSIDE>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"The hatch is made of stamped, ridged steel. It was originally painted
|
|
institutional grey, but has been the victim of innumerable graffiti
|
|
artists since. You can still make out the stencilled warning
|
|
\"Authorized personnel only\" which has been carefully prefixed by
|
|
\"UN,\" and suffixed by \"This means you!\" both in a disgusting fiery
|
|
red. The hatch is ">
|
|
<COND (<EQUAL? ,PADLOCK-ON? ,ACCESS-HATCH>
|
|
<TELL "locked with a padlock">)
|
|
(ELSE <TELL "unlocked">)>
|
|
<TELL ,PERIOD>)>)
|
|
(<VERB? UNLOCK>
|
|
<NEW-PRSO ,PADLOCK>
|
|
<RTRUE>)
|
|
(<VERB? OPEN RAISE>
|
|
<COND (<FSET? ,PRSO ,LOCKED>
|
|
<UNLOCK-PADLOCK-FIRST>)
|
|
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
<PUT-GLOBAL ,HERE 0 ,GLOBAL-HOLE>
|
|
<PUT-GLOBAL ,HERE 1 ,LADDER>
|
|
<FSET ,PRSO ,OPENBIT>
|
|
<FSET ,TUNNEL ,ONBIT>
|
|
<FSET ,TUNNEL-EAST ,ONBIT>
|
|
<FSET ,TUNNEL-WEST ,ONBIT>
|
|
%<IFSOUND
|
|
<SOUNDS ,S-HATCH>>
|
|
<TELL
|
|
"The hatch is heavy, and its hinges are rusty, but ">
|
|
<COND (<HERE? ,TUNNEL>
|
|
<TELL "it opens." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"you pull and strain
|
|
and it opens with a scream of metal. Revealed below is a rusty ladder
|
|
leading down. Warm, fetid air coils up out of the hole. There is a burned
|
|
out (no, smashed) utility light set in the wall a few feet down." CR>)>)>)
|
|
(<VERB? CLOSE LOWER>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<PUT-GLOBAL ,HERE 0 0>
|
|
<PUT-GLOBAL ,HERE 1 0>
|
|
<FCLEAR ,TUNNEL ,ONBIT>
|
|
<FCLEAR ,TUNNEL-EAST ,ONBIT>
|
|
<FCLEAR ,TUNNEL-WEST ,ONBIT>
|
|
<FCLEAR ,ACCESS-HATCH ,OPENBIT>
|
|
<TELL "The hatch closes">
|
|
<IN-DARK?>)>)
|
|
(<OR <P? LOCK ACCESS-HATCH PADLOCK>
|
|
<P? PUT-ON PADLOCK ACCESS-HATCH>>
|
|
<COND (,PADLOCK-ON?
|
|
<ALREADY-LOCKED-TO>)
|
|
(<FSET? ,ACCESS-HATCH ,LOCKED>
|
|
<TELL ,IT-ALREADY-IS>)
|
|
(ELSE
|
|
<SETG PADLOCK-ON? ,ACCESS-HATCH>
|
|
<FSET ,PADLOCK ,NDESCBIT>
|
|
<FCLEAR ,PADLOCK ,OPENBIT>
|
|
<FSET ,PADLOCK ,LOCKED>
|
|
<MOVE ,PADLOCK ,ACCESS-HATCH>
|
|
<FSET ,ACCESS-HATCH ,LOCKED>
|
|
<FCLEAR ,ACCESS-HATCH ,OPENBIT>
|
|
<TELL
|
|
"Locked up safe and secure!" CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<FSET? ,PRSO ,OPENBIT>
|
|
<TELL "You see a">
|
|
<COND (<HERE? ,TOMB>
|
|
<TELL
|
|
" dark" S " hole leading down." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"n oddly shaped small room." CR>)>)
|
|
(ELSE
|
|
<TELL-OPEN-CLOSED ,PRSO>)>)
|
|
(<VERB? THROUGH>
|
|
<COND (<HERE? ,TUNNEL>
|
|
<DO-WALK ,P?UP>)
|
|
(<HERE? ,TOMB>
|
|
<DO-WALK ,P?DOWN>)>)>>
|
|
|
|
<OBJECT PADLOCK
|
|
(IN ACCESS-HATCH)
|
|
(DESC "padlock")
|
|
(SYNONYM PADLOCK LOCK)
|
|
(ADJECTIVE PAD HUGE)
|
|
(FLAGS NDESCBIT TAKEBIT TRYTAKEBIT LOCKED OPENABLE)
|
|
(ACTION PADLOCK-F)>
|
|
|
|
<GLOBAL PADLOCK-ON? ACCESS-HATCH>
|
|
|
|
<ROUTINE PADLOCK-F ("AUX" LP)
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
S "The padlock has ""been spray painted many times by graffiti artists.
|
|
It's currently fluorescent purple. In spite of the many coats of
|
|
paint, the lock manages to be rusty and, in fact, almost slimy-looking.
|
|
The padlock is ">
|
|
<COND (<FSET? ,PADLOCK ,LOCKED>
|
|
<TELL "locked">
|
|
<COND (,PADLOCK-ON?
|
|
<TELL " to " THE ,PADLOCK-ON?>)>)
|
|
(ELSE <TELL "unlocked">)>
|
|
<TELL ,PERIOD>)
|
|
(<VERB? READ>
|
|
<TELL
|
|
S "The padlock has ""no identifiable brand or symbol on it." CR>)
|
|
(<AND <VERB? TAKE> ,PADLOCK-ON?>
|
|
<UNLOCK-PADLOCK-FIRST>)
|
|
(<VERB? PUT-ON>
|
|
<SWAP-VERB ,V?LOCK>
|
|
<RTRUE>)
|
|
(<VERB? LOCK CLOSE TIE>
|
|
<COND (,PADLOCK-ON?
|
|
<ALREADY-LOCKED-TO>)
|
|
(<PRSI? <> ,MASTER-KEY>
|
|
<FSET ,PRSO ,LOCKED>
|
|
<FCLEAR ,PRSO ,OPENBIT>
|
|
<TELL
|
|
"Okay, you've now closed the padlock." CR>)
|
|
(<AND <PRSI? ,PADLOCK>
|
|
<NOT <PRSO? CHAIN CHAIN-1 CHAIN-2 ACCESS-HATCH>>>
|
|
<CANT-LOCK ,PRSO>)
|
|
(<PRSO? ,PADLOCK>
|
|
<COND (<PRSI? CHAIN CHAIN-1 CHAIN-2 ACCESS-HATCH>
|
|
<PERFORM ,V?LOCK ,PRSI ,PADLOCK>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<CANT-LOCK ,PRSI>)>)>)
|
|
(<OR <VERB? UNLOCK>
|
|
<AND <VERB? OPEN> <FSET? ,PADLOCK ,LOCKED>>>
|
|
<COND (<NOT <FSET? ,PRSO ,LOCKED>>
|
|
<TELL ,IT-ALREADY-IS>)
|
|
(<NOT ,PRSI>
|
|
<TELL
|
|
,YOU-HAVE-TO "use a key for that." CR>)
|
|
(<PRSI? ,MASTER-KEY>
|
|
<COND (,PADLOCK-ON?
|
|
<SET LP <LOC ,PADLOCK>>
|
|
<FCLEAR .LP ,LOCKED>
|
|
<COND (<IN? .LP ,LOCAL-GLOBALS>
|
|
<MOVE ,PADLOCK ,HERE>)
|
|
(ELSE
|
|
<MOVE ,PADLOCK <LOC .LP>>)>)>
|
|
<FCLEAR ,PADLOCK ,NDESCBIT>
|
|
<FCLEAR ,PADLOCK ,LOCKED>
|
|
<FSET ,PADLOCK ,OPENBIT>
|
|
<TELL
|
|
"The lock, though rusty and unwilling, opens">
|
|
<COND (,PADLOCK-ON?
|
|
<TELL ", releasing " THE ,PADLOCK-ON?>)>
|
|
<SETG PADLOCK-ON? <>>
|
|
<TELL ,PERIOD>)
|
|
(<PRSI? ,KEY-1 ,KEY-2 ,KEY-3 ,KEY-4>
|
|
<TELL
|
|
CTHE ,PRSI S " doesn't appear to ""open this lock." CR>)
|
|
(<NOT ,PRSI>
|
|
<TELL S "You don't have ""a key." CR>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-CANT "open this lock with " A ,PRSI "!" CR>)>)
|
|
(<P? (MUNG CUT ATTACK) PADLOCK>
|
|
<COND (<PRSI? ,SMOOTH-STONE>
|
|
<TELL
|
|
"You smash against the padlock with the stone. As expected, there is
|
|
no result. In fact, both stone and padlock are unmarred." CR>)
|
|
(<PRSI? ,AXE>
|
|
<TELL
|
|
"All you succeed in doing is blunting the axe a little." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"In spite of its present defacement, this is a good padlock. Your
|
|
feeble attempts have no effect." CR>)>)>>
|
|
|
|
<ROUTINE CANT-LOCK (OBJ)
|
|
<TELL
|
|
CTHE ,PADLOCK " can't lock onto " THE .OBJ ,PERIOD>>
|
|
|
|
<OBJECT GRAFFITI
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "graffiti")
|
|
(SYNONYM GRAFFITI LETTERS)
|
|
(ADJECTIVE HUGE FLUORESCENT)
|
|
(ACTION GRAFFITI-F)>
|
|
|
|
<ROUTINE GRAFFITI-F ()
|
|
<COND (<VERB? READ EXAMINE>
|
|
<TELL "\"" <PICK-ONE ,GRAFFITI-TABLE> "\"" CR>)>>
|
|
|
|
<CONSTANT GRAFFITI-TABLE
|
|
<LTABLE 0
|
|
"Kilroy was here."
|
|
"Tech is hell."
|
|
"I.H.T.F.P."
|
|
"'God is dead' --Nietzsche|
|
|
'Nietzsche is dead' --God">>
|
|
|
|
<ROUTINE STEAM-EXIT ()
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<COND (<WINNER? ,PLAYER>
|
|
<TELL
|
|
"You would be plunging into scalding steam. Not such a smart idea, if
|
|
you ask me." CR>)>
|
|
<RFALSE>)
|
|
(<HERE? ,TUNNEL> ,TUNNEL-EAST)
|
|
(ELSE ,TUNNEL)>>
|
|
|
|
<ROUTINE RATS-EXIT ("AUX" H)
|
|
<COND (<AND <IN? ,RATS ,HERE>
|
|
<NOT ,ON-CABLE?>>
|
|
<SETG RATS-HERE <+ ,RATS-HERE 1>>
|
|
<TELL
|
|
"You plunge into the mass of rats, but there are too many of them, and
|
|
you can't force your way past." CR>
|
|
<RFALSE>)
|
|
(<HERE? ,TUNNEL-WEST> ,TUNNEL-ENTRANCE)
|
|
(<HERE? ,TUNNEL> ,TUNNEL-WEST)
|
|
(<HERE? ,TUNNEL-EAST>
|
|
<STEAM-EXIT>)
|
|
(<HERE? ,STEAM-TUNNEL> ,TUNNEL-EAST)
|
|
(<HERE? ,STEAM-TUNNEL-EAST> ,STEAM-TUNNEL)>>
|
|
|
|
<ROOM TUNNEL
|
|
(IN ROOMS)
|
|
(DESC "Steam Tunnel")
|
|
(UP TO TOMB IF ACCESS-HATCH IS OPEN)
|
|
(EAST PER STEAM-EXIT) ;TUNNEL-EAST
|
|
(WEST PER RATS-EXIT) ;TUNNEL-WEST
|
|
(ACTION TUNNEL-F)
|
|
(VALUE 5)
|
|
(GLOBAL ACCESS-HATCH LADDER CABLE STEAM-PIPES)>
|
|
|
|
<ROUTINE TUNNEL-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TUNNEL-AND-PIPE>
|
|
<TELL
|
|
"You have
|
|
gone from the arctic to the tropics. The concrete tunnel has odd molds
|
|
and fungi growing on its walls and ceiling, and the floor is squishy.
|
|
Torn clots of insulation litter the floor.
|
|
Along the ceiling runs a thick tangle of coaxial
|
|
cable. The tunnel heads east and west. A rusty metal ladder leads up."
|
|
CR>)
|
|
(<RARG? BEG>
|
|
<COND (,RATS-HERE
|
|
<COND (<AND <VERB? WALK>
|
|
<EQUAL? ,P-WALK-DIR ,P?UP>>
|
|
;<COND (<NOT <LOC ,DEAD-RAT>>
|
|
<MOVE ,DEAD-RAT ,HERE>)>
|
|
;<SETG RATS-HERE 0>
|
|
<SETG ON-CABLE? <>>
|
|
<TELL
|
|
"You force your way through the mass of rats, grabbing onto the rusty
|
|
ladder like a mast on a stormy sea, and begin to pull your way up. A few
|
|
rats drop off, squealing in anger. You climb higher, reaching the hatch,
|
|
as the last of the rats drops to the floor below." CR CR>
|
|
<RFALSE>)
|
|
(<FOOD-FOR-RATS>)>)>)
|
|
(<RARG? ENTER>
|
|
<COND (<NOT <ZERO? <GETP ,PRESSURE-VALVE ,P?VALUE>>>
|
|
<DEQUEUE I-RATS-GO-AWAY>
|
|
<QUEUE I-RATS -1>)>)>>
|
|
|
|
;<GLOBAL FLASK-SCORE 5> ;"for getting flask into steam tunnel"
|
|
|
|
<ROUTINE THROW-FOOD ()
|
|
<REMOVE ,PRSO>
|
|
<TELL
|
|
"A small contingent of rats falls greedily upon " THE ,PRSO ", biting
|
|
and scratching, fighting desperately for it. The rest of the rats are
|
|
not distracted, however." CR>>
|
|
|
|
<OBJECT CROWBAR
|
|
(IN TEMPORARY-BASEMENT)
|
|
(DESC "crowbar")
|
|
(SYNONYM CROWBAR BAR)
|
|
(ADJECTIVE RUSTY)
|
|
(SIZE 10)
|
|
(FLAGS TAKEBIT WEAPONBIT)
|
|
;(ACTION CROWBAR-F)>
|
|
|
|
;<ROUTINE CROWBAR-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a rusty, somewhat battered crowbar." CR>)>>
|
|
|
|
<ROOM TUNNEL-EAST
|
|
(IN ROOMS)
|
|
(DESC "Steam Tunnel")
|
|
(WEST PER RATS-EXIT) ;TUNNEL
|
|
(EAST TO STEAM-TUNNEL)
|
|
(GLOBAL CABLE STEAM-PIPES)
|
|
(ACTION TUNNEL-EAST-F)>
|
|
|
|
<ROUTINE TUNNEL-EAST-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TUNNEL-AND-PIPE>
|
|
<TELL
|
|
"A thick bundle of coaxial cable runs east to
|
|
west along the ceiling. There is a pressure release valve on the steam
|
|
pipe here.">
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<TELL " The valve is" ,WIDE-OPEN>)>
|
|
<CRLF>)
|
|
(<RARG? BEG>
|
|
<FOOD-FOR-RATS>)>>
|
|
|
|
<ROUTINE FOOD-FOR-RATS ()
|
|
<COND (,RATS-HERE
|
|
<COND (<OR <VERB? DROP>
|
|
<P? GIVE * ,RATS>>
|
|
<COND (<FSET? ,PRSO ,FOODBIT>
|
|
<THROW-FOOD>)>)>)>>
|
|
|
|
<ROOM STEAM-TUNNEL
|
|
(IN ROOMS)
|
|
(DESC "Steam Tunnel")
|
|
(LDESC
|
|
"The steam tunnel is narrow here, and its construction is more archaic.
|
|
It's now mostly brick, although the floor is concrete. The steam pipe
|
|
and coaxial cable continue along their appointed paths. The tunnel is
|
|
damp and even a little muddy.")
|
|
(WEST PER RATS-EXIT) ;TUNNEL-EAST
|
|
(EAST TO STEAM-TUNNEL-EAST)
|
|
(GLOBAL CABLE STEAM-PIPES)
|
|
(ACTION STEAM-TUNNEL-F)>
|
|
|
|
<ROUTINE STEAM-TUNNEL-F (RARG)
|
|
<COND ;(<RARG? LOOK>
|
|
<TELL
|
|
CR>)
|
|
(<RARG? BEG>
|
|
<FOOD-FOR-RATS>)>>
|
|
|
|
<ROOM STEAM-TUNNEL-EAST
|
|
(IN ROOMS)
|
|
(DESC "Steam Tunnel")
|
|
(WEST PER RATS-EXIT) ;STEAM-TUNNEL
|
|
(EAST "The tunnel ends here, in a dank, dripping brick wall.")
|
|
(SOUTH PER ELEVATOR-PIT-ENTER)
|
|
(GLOBAL CABLE STEAM-PIPES ROD CHAIN-2)
|
|
(ACTION STEAM-TUNNEL-EAST-F)>
|
|
|
|
<ROUTINE ELEVATOR-PIT-ENTER ()
|
|
<COND (,BRICK-WALL-FLAG
|
|
<COND (<ZERO? ,ELEVATOR-LOC>
|
|
<TELL
|
|
"A " 'ELEVATOR-FLOOR " blocks your way." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
,ELEVATOR-PIT)>)
|
|
(ELSE
|
|
<TELL "You are trying to walk through a brick wall." CR>
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE STEAM-TUNNEL-EAST-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"The steam pipe and coaxial cable turn upwards and disappear into the
|
|
ceiling here. The tunnel itself comes to an end in a grimy, damp, and
|
|
dripping triad of crumbling brick walls.">
|
|
<COND (<AND <NOT ,BRICK-WALL-FLAG>
|
|
<NOT ,BRICK-FLAG>>
|
|
<TELL
|
|
" The south wall looks particularly decrepit.">)>
|
|
<CRLF>)
|
|
(<RARG? BEG>
|
|
<COND (<P? RUB AIR>
|
|
<NEW-PRSO ,BRICK-WALL>
|
|
<RTRUE>)
|
|
(<P? THROUGH GLOBAL-HOLE>
|
|
<DO-WALK ,P?SOUTH>)
|
|
(ELSE
|
|
<FOOD-FOR-RATS>)>)
|
|
(<RARG? ENTER>
|
|
<MOVE-WALL ,A?SOUTH>
|
|
<COND (<NOT ,BRICK-WALL-FLAG>
|
|
<COND (<NOT <BTST ,BRICK-FLAG ,BF-TUNNEL>>
|
|
<MOVE ,BROKEN-BRICK ,BRICK-WALL>)
|
|
(<NOT <BTST ,BRICK-FLAG ,BF-PIT>>
|
|
<MOVE ,NEW-BRICK ,BRICK-WALL>)>)>
|
|
<RANDOM-ELEVATOR-MOTION>
|
|
;<COND (<HELD? ,FLASK>
|
|
<SETG SCORE <+ ,SCORE ,FLASK-SCORE>>
|
|
<SETG FLASK-SCORE 0>)>
|
|
<COND (<AND <NOT <ZERO? <GETP ,PRESSURE-VALVE ,P?VALUE>>>
|
|
<NOT <FSET? ,PRESSURE-VALVE ,OPENBIT>>>
|
|
<DEQUEUE I-RATS-GO-AWAY>
|
|
<QUEUE I-RATS -1>)>)>>
|
|
|
|
<OBJECT NEW-BRICK
|
|
(DESC "new brick")
|
|
(SYNONYM BRICK ;BRICKS)
|
|
(ADJECTIVE LOOSE NEW RECENT NEWER NEW-LOOKING)
|
|
(FLAGS NDESCBIT TAKEBIT WEAPONBIT)
|
|
(ACTION NEW-BRICK-F)>
|
|
|
|
<ROUTINE NEW-BRICK-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a new brick. It appears to be of relatively recent vintage." CR>)
|
|
(<P? (PRY ATTACK) * CROWBAR>
|
|
<COND (<IN? ,PRSO ,BRICK-WALL>
|
|
<NEW-PRSO ,BRICK-WALL>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TRY-ANOTHER-BRICK>)>)>>
|
|
|
|
<ROUTINE TRY-ANOTHER-BRICK ()
|
|
<TELL
|
|
,YOUVE-ALREADY "pried that brick loose, maybe you should attack the
|
|
wall again." CR>>
|
|
|
|
<OBJECT BROKEN-BRICK
|
|
(DESC "broken brick")
|
|
(SYNONYM BRICK ;BRICKS)
|
|
(ADJECTIVE LOOSE SLIMY CRUMBLING BROKEN OLD OLDER)
|
|
(FLAGS NDESCBIT TAKEBIT WEAPONBIT)
|
|
(ACTION BROKEN-BRICK-F)>
|
|
|
|
<ROUTINE BROKEN-BRICK-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a crumbling, broken brick. Little bits of mortar still cling
|
|
to it." CR>)
|
|
(<P? (PRY ATTACK) * CROWBAR>
|
|
<COND (<IN? ,PRSO ,BRICK-WALL>
|
|
<NEW-PRSO ,BRICK-WALL>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TRY-ANOTHER-BRICK>)>)
|
|
(<VERB? REPAIR>
|
|
<TELL
|
|
CTHE ,PRSO " isn't that broken." CR>)>>
|
|
|
|
<OBJECT ROD
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "reinforcing rod")
|
|
(SYNONYM ROD)
|
|
(ADJECTIVE RUSTY STEEL REINFORCING)
|
|
(FLAGS INVISIBLE)
|
|
(ACTION ROD-F)>
|
|
|
|
<ROUTINE ROD-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's rusty, obviously didn't help the wall all that much, and runs up
|
|
and down through the hole you have made.">
|
|
<COND (,CHAIN-LOOPED?
|
|
<TELL
|
|
" There is a length of greasy chain wrapped around it.">
|
|
<TELL-IF-LOCKED>)>
|
|
<CRLF>)
|
|
(<AND <P? (TAKE UNTIE) CHAIN ROD>
|
|
,CHAIN-LOOPED?>
|
|
<PERFORM-PRSA ,CHAIN-2 ,ROD>
|
|
<RTRUE>)
|
|
(<P? LOCK (CHAIN CHAIN-2) ROD>
|
|
<COND (<AND ,CHAIN-LOOPED?
|
|
<HELD? ,PADLOCK>>
|
|
<PERFORM-PRSA ,CHAIN-2 ,PADLOCK>
|
|
<RTRUE>)
|
|
(<HELD? ,PADLOCK>
|
|
<TELL
|
|
"The hasp of the padlock won't fit around the rod." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You don't seem to have anything to lock it with." CR>)>)
|
|
(<VERB? PRY MOVE>
|
|
<TELL
|
|
"It's pretty solidly mortared in." CR>)>>
|
|
|
|
<OBJECT BRICK-HOLE
|
|
(DESC "hole")
|
|
(SYNONYM HOLE)
|
|
(ADJECTIVE SMALL LARGE HUGE)
|
|
(FLAGS NDESCBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(ACTION BRICK-HOLE-F)>
|
|
|
|
<ROUTINE BRICK-HOLE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL S "There is a ">
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"huge hole here, where the wall has collapsed." CR>)
|
|
(<EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<TELL
|
|
"large hole here, with a reinforcing rod running through it." CR>)
|
|
(<HOLE-IN-BRICKS?>
|
|
<TELL
|
|
"small hole in the wall where a brick was removed." CR>)>)
|
|
(<P? PUT * BRICK-HOLE>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"The hole that's there now is big enough for you to walk through.
|
|
Hence, no such luck." CR>)
|
|
(ELSE
|
|
<MOVE ,PRSO ,HERE>
|
|
<TELL
|
|
"You put " THE ,PRSO " in the hole, but ">
|
|
<COND (<PRSO? ,NEW-BRICK ,BROKEN-BRICK>
|
|
<TELL
|
|
"it doesn't fit very tightly any more, so ">)
|
|
(ELSE
|
|
<TELL
|
|
"as the hole is irregular, ">)>
|
|
<TELL
|
|
"it falls out again and drops to the floor." CR>)>)
|
|
(<VERB? THROUGH>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<DO-WALK <COND (<HERE? ,ELEVATOR-PIT>
|
|
,P?NORTH)
|
|
(ELSE ,P?SOUTH)>>)
|
|
(ELSE
|
|
<TELL
|
|
"The hole is the size of a brick. You are somewhat larger." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<REDIRECT ,BRICK-HOLE ,BRICK-WALL>)
|
|
(<VERB? REACH-IN>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"Plenty of room there." CR>)
|
|
(<EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<TELL
|
|
"You reach in and touch the reinforcing rod." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"When you reach in you get the impression there is some metal in the
|
|
hole." CR>)>)>>
|
|
|
|
<ROUTINE HOLE-IN-BRICKS? ()
|
|
<OR <EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<AND <HERE? ,STEAM-TUNNEL-EAST>
|
|
<EQUAL? ,BRICK-FLAG ,BF-TUNNEL>>
|
|
<AND <HERE? ,ELEVATOR-PIT>
|
|
<EQUAL? ,BRICK-FLAG ,BF-PIT>>>>
|
|
|
|
<OBJECT BRICK-WALL
|
|
(IN STEAM-TUNNEL-EAST)
|
|
(DESC "brick wall")
|
|
(SYNONYM WALL WALLS BRICKS ;GROOVE MORTAR)
|
|
(ADJECTIVE SOUTH ;NORTH BRICK DAMP DRIPPING CRUMBLING)
|
|
(FLAGS SEARCHBIT OPENBIT CONTBIT)
|
|
(CONTFCN BRICK-WALL-CONT)
|
|
(DESCFCN BRICK-WALL-DESC)
|
|
(ACTION BRICK-WALL-F)>
|
|
|
|
<ROUTINE BRICK-WALL-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?>
|
|
<COND (<OR ,BRICK-WALL-FLAG <HOLE-IN-BRICKS?>>
|
|
<RTRUE>)
|
|
(ELSE <RFATAL>)>)
|
|
(ELSE
|
|
<TELL "The ">
|
|
<COND (<HERE? ,STEAM-TUNNEL-EAST>
|
|
<TELL "southern ">)>
|
|
<TELL 'BRICK-WALL>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL " has an enormous hole ripped in it.">)
|
|
(ELSE
|
|
<TELL " has a hole in it.">
|
|
<COND (<NOT <FSET? ,ROD ,INVISIBLE>>
|
|
<TELL-ABOUT-ROD>)>)>
|
|
<RFATAL>)>>
|
|
|
|
<ROUTINE BRICK-WALL-CONT (RARG)
|
|
<COND (<VERB? TAKE MOVE>
|
|
<TELL
|
|
,YOU-CANT S "get a good grip on " THE ,PRSO " with your fingers." CR>)>>
|
|
|
|
<ROUTINE BRICK-WALL-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<HERE? ,STEAM-TUNNEL-EAST>
|
|
<TELL CTHE ,BRICK-WALL " ">
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"is demolished. There is now a large hole leading south into
|
|
another room." CR>)
|
|
(<HOLE-IN-BRICKS?>
|
|
<DESCRIBE-WALL-HOLE "a new-looking"
|
|
"pretty bad">)
|
|
(ELSE
|
|
<TELL
|
|
"is in terrible shape. It's aged and crumbling,
|
|
with grooves between bricks where the mortar has fallen out." CR>)>)
|
|
(ELSE
|
|
<TELL CTHE ,BRICK-WALL " ">
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"is quite ruined. Fortunately it wasn't structural. There are
|
|
big chunks of brick and concrete all over the floor here." CR>)
|
|
(<HOLE-IN-BRICKS?>
|
|
<DESCRIBE-WALL-HOLE "an older, crumbly"
|
|
"okay">)
|
|
(ELSE
|
|
<TELL
|
|
"is in pretty good shape. It's relatively new, and
|
|
you can only see one or two loose-looking bricks." CR>)>)>)
|
|
(<VERB? TAKE MOVE>
|
|
<TELL
|
|
"Though there are loose bricks, they aren't loose enough for you to
|
|
just pry them out with your fingers." CR>)
|
|
(<VERB? LISTEN>
|
|
<COND (<NOT ,BRICK-FLAG>
|
|
<TELL
|
|
"You place your ear to the wall, slimy and dank as it is, and hear
|
|
nothing. However, you feel a weak current of cool air coming from between
|
|
some of the bricks." CR>)
|
|
(ELSE
|
|
<TELL ,COOL-AIR-FLOWING>
|
|
<COND (<QUEUED? I-ELEVATOR-MOVES>
|
|
<TELL
|
|
", and you can hear mechanical noises on the other side">)>
|
|
<TELL ,PERIOD>)>)
|
|
(<VERB? RUB>
|
|
<TELL
|
|
"The wall is slimy, dank, and damp. ">
|
|
<COND (<NOT ,BRICK-FLAG>
|
|
<TELL
|
|
"You feel a weak current of cool air coming from between some of the
|
|
bricks." CR>)
|
|
(ELSE
|
|
<TELL ,COOL-AIR-FLOWING ,PERIOD>)>)
|
|
(<VERB? ATTACK MUNG>
|
|
<TELL "It doesn't do much">
|
|
<COND (<NOT ,BRICK-FLAG>
|
|
<TELL
|
|
" but loosen a brick in the wall">)>
|
|
<TELL ,PERIOD>)
|
|
(<VERB? TAKE-OFF>
|
|
<COND (<NOT <EQUAL? ,BRICK-FLAG ,BF-BOTH>>
|
|
<TELL
|
|
S "There is a ""loose brick in the wall, but you can't remove it with
|
|
your hands." CR>)
|
|
(ELSE
|
|
<TELL "There aren't any more loose bricks." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<HERE? ,STEAM-TUNNEL-EAST>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
S "There is a ""small rectangular room on the other side of the wall." CR>)
|
|
(<EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<TELL
|
|
S "There is an open ""space, a small room containing some machinery."
|
|
,CANT-SEE-TOO-WELL>)
|
|
(<HOLE-IN-BRICKS?>
|
|
<TELL ,INSIDE-OF-HOLE>)
|
|
(ELSE
|
|
<TELL ,CRACKS-AND-MORTAR>)>)
|
|
(ELSE
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"You see and dark and grimy tunnel leading west." CR>)
|
|
(<EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<TELL
|
|
"There is some sort of tunnel." ,CANT-SEE-TOO-WELL>)
|
|
(<HOLE-IN-BRICKS?>
|
|
<TELL ,INSIDE-OF-HOLE>)
|
|
(ELSE
|
|
<TELL ,CRACKS-AND-MORTAR>)>)>)
|
|
(<VERB? LOWER>
|
|
<TELL
|
|
"You aren't strong enough to pull down a brick wall." CR>)
|
|
(<P? (PRY ATTACK) BRICK-WALL CROWBAR>
|
|
<COND (,BRICK-WALL-FLAG
|
|
<TELL
|
|
"The hole is already quite large, and further demolition would have
|
|
to involve structural supports." CR>)
|
|
(<NOT ,BRICK-FLAG>
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<FCLEAR ,NEW-BRICK ,NDESCBIT>
|
|
<MOVE ,NEW-BRICK ,HERE>
|
|
<CHANGE-ADJECTIVE ,NEW-BRICK 0>
|
|
<MOVE ,BROKEN-BRICK ,BRICK-WALL>
|
|
<SETG BRICK-FLAG <BOR ,BRICK-FLAG ,BF-PIT>>)
|
|
(ELSE
|
|
<FCLEAR ,BROKEN-BRICK ,NDESCBIT>
|
|
<MOVE ,BROKEN-BRICK ,HERE>
|
|
<CHANGE-ADJECTIVE ,BROKEN-BRICK 0>
|
|
<MOVE ,NEW-BRICK ,BRICK-WALL>
|
|
<SETG BRICK-FLAG <BOR ,BRICK-FLAG ,BF-TUNNEL>>)>
|
|
<MOVE ,BRICK-HOLE ,HERE>
|
|
<TELL ,WALL-YIELDS "pulls out of the wall." CR>)
|
|
(<NOT <EQUAL? ,BRICK-FLAG ,BF-BOTH>>
|
|
<MOVE ,BRICK-HOLE ,HERE>
|
|
<SETG BRICK-FLAG ,BF-BOTH>
|
|
<TELL ,WALL-YIELDS>
|
|
<FCLEAR ,ROD ,INVISIBLE>
|
|
<COND (<IN? ,BROKEN-BRICK ,BRICK-WALL>
|
|
<FCLEAR ,BROKEN-BRICK ,NDESCBIT>
|
|
<MOVE ,BROKEN-BRICK ,STEAM-TUNNEL-EAST>
|
|
<CHANGE-ADJECTIVE ,BROKEN-BRICK 0>
|
|
<BRICK-DROPS ,STEAM-TUNNEL-EAST>)
|
|
(ELSE
|
|
<FCLEAR ,NEW-BRICK ,NDESCBIT>
|
|
<MOVE ,NEW-BRICK ,ELEVATOR-PIT>
|
|
<CHANGE-ADJECTIVE ,NEW-BRICK 0>
|
|
<BRICK-DROPS ,ELEVATOR-PIT>)>
|
|
<TELL
|
|
", making a hole through the wall. You can see a rusty steel reinforcing
|
|
rod in the hole.">
|
|
<COND (<AND <HERE? ,STEAM-TUNNEL-EAST>
|
|
<NOT ,ELEVATOR-STOPPED?>>
|
|
<TELL " You hear a whining noise through
|
|
the hole.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<TELL
|
|
"There don't seem to be any more bricks as loose as the first two." CR>)>)>>
|
|
|
|
<GLOBAL INSIDE-OF-HOLE "You see another loose brick inside the hole.|">
|
|
|
|
<GLOBAL COOL-AIR-FLOWING
|
|
"There is cool air flowing out of the hole">
|
|
|
|
<ROUTINE BRICK-DROPS (THIS-SIDE)
|
|
<COND (<HERE? .THIS-SIDE>
|
|
<TELL
|
|
"comes loose and drops to the ground">)
|
|
(ELSE
|
|
<TELL
|
|
"drops to the floor on the other side">)>>
|
|
|
|
<GLOBAL CRACKS-AND-MORTAR
|
|
"The cracks and crumbled mortar only go partway through.|">
|
|
|
|
<ROUTINE DESCRIBE-WALL-HOLE (BRICK OK)
|
|
<TELL "has a brick-size hole ">
|
|
<COND (<EQUAL? ,BRICK-FLAG ,BF-BOTH>
|
|
<TELL
|
|
"through it where bricks have been pried out. A steel rod is visible">)
|
|
(<HOLE-IN-BRICKS?>
|
|
<TELL
|
|
"in it where a brick was removed. You can see " .BRICK " brick">)>
|
|
<TELL " in the hole. The rest of the wall is in " .OK " shape." CR>>
|
|
|
|
<GLOBAL CANT-SEE-TOO-WELL " You can't see too well, though.|">
|
|
|
|
<GLOBAL WALL-YIELDS
|
|
"The wall grudgingly yields to your efforts. A brick, less well mortared than
|
|
its fellows, ">
|
|
|
|
<ROOM ELEVATOR-PIT
|
|
(IN ROOMS)
|
|
(DESC "Concrete Box")
|
|
(NORTH TO STEAM-TUNNEL-EAST IF BRICK-WALL-FLAG)
|
|
(UP PER PIT-DOOR-EXIT)
|
|
(OUT PER PIT-DOOR-EXIT)
|
|
(GLOBAL ELEVATOR-DOOR-B ROD CHAIN-2)
|
|
(VALUE 5)
|
|
(ACTION ELEVATOR-PIT-F)
|
|
(THINGS <PSEUDO (<> SHAFT SHAFT-PSEUDO)
|
|
(RAILROAD RAILS RANDOM-PSEUDO)>)>
|
|
|
|
<ROUTINE THROUGH-THE (OBJ)
|
|
<COND (<FSET? .OBJ ,WEARBIT>
|
|
<TELL " through " THE .OBJ>)>>
|
|
|
|
<ROUTINE PIT-DOOR-EXIT ()
|
|
<COND (<FIRST? ,ELEVATOR-DOOR-B>
|
|
<COND (,RATS-HERE
|
|
<COND (<L? ,RATS-HERE 2>
|
|
<SETG RATS-HERE 2>)>
|
|
<TELL
|
|
"You leap up the wall towards the basement, but the rats are faster!
|
|
They bite your fingers">
|
|
<THROUGH-THE ,GLOVES>
|
|
<TELL ", and you release your hold, tumbling back to
|
|
the pit!" CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<TELL
|
|
"You climb up the gritty wall and out into the basement." CR CR>
|
|
,CS-BASEMENT)>)
|
|
(<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<TELL
|
|
"You try to climb up while holding the doors open, but it's just
|
|
outside the realm of possibility." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<TELL
|
|
"There is no apparent way through the closed " 'ELEVATOR-DOOR "." CR>
|
|
<RFALSE>)>>
|
|
|
|
<GLOBAL BRICK-FLAG <>> ;"0 = no bricks out
|
|
1 = brick in pit out
|
|
2 = brick in tunnel out
|
|
3 = both bricks out"
|
|
<CONSTANT BF-PIT 1>
|
|
<CONSTANT BF-TUNNEL 2>
|
|
<CONSTANT BF-BOTH 3>
|
|
|
|
<GLOBAL BRICK-WALL-FLAG <>> ;"destroyed the wall"
|
|
|
|
<ROUTINE TELL-ABOUT-ROD ()
|
|
<COND (<NOT <FSET? ,ROD ,INVISIBLE>>
|
|
<TELL
|
|
" There is a vertical reinforcing rod visible in the middle of the hole.">
|
|
<COND (,CHAIN-LOOPED?
|
|
<TELL
|
|
" A chain is" ,LOOPED-AROUND-ROD>
|
|
<COND (,CHAIN-HOOKED?
|
|
<TELL " and disappears up into the shaft">)
|
|
(<IN? ,CHAIN ,ELEVATOR-PIT>
|
|
<TELL " and trails down onto the floor">)>
|
|
<TELL ".">
|
|
<COND (<EQUAL? ,PADLOCK-ON? ,CHAIN-2>
|
|
<TELL
|
|
" A padlock secures the chain.">)>)>)>>
|
|
|
|
<GLOBAL LOOPED-AROUND-ROD " looped around the rod">
|
|
|
|
<ROUTINE ELEVATOR-PIT-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This small room is pretty bare and featureless. The north wall is
|
|
brick and the other three walls are concrete. The east and west walls
|
|
are adorned with rails not unlike railroad rails. Above you ">
|
|
<COND (<IN? ,ELEVATOR-FLOOR ,SHAFT-B>
|
|
<TELL
|
|
"and out of reach, the shaft is blocked by something." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"is an empty shaft. On the north side of the shaft is an elevator
|
|
door">
|
|
<COND (<FIRST? ,ELEVATOR-DOOR-B>
|
|
<TELL
|
|
" wedged open by " A <FIRST? ,ELEVATOR-DOOR-B>>)
|
|
(<FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<TELL
|
|
" which you are holding open">)>
|
|
<TELL ,PERIOD>)>)
|
|
(<RARG? ENTER>
|
|
<MOVE-WALL ,A?NORTH>
|
|
<COND (<NOT ,BRICK-WALL-FLAG>
|
|
<COND (<NOT <BTST ,BRICK-FLAG ,BF-PIT>>
|
|
<MOVE ,NEW-BRICK ,BRICK-WALL>)
|
|
(<NOT <BTST ,BRICK-FLAG ,BF-TUNNEL>>
|
|
<MOVE ,BROKEN-BRICK ,BRICK-WALL>)>)>
|
|
<RANDOM-ELEVATOR-MOTION>)
|
|
(<RARG? BEG>
|
|
<COND (<AND <VERB? WALK>
|
|
<NOT <EQUAL? ,P-WALK-DIR ,P?UP>>
|
|
<HELD? ,CHAIN>
|
|
,CHAIN-HOOKED?>
|
|
<TELL S
|
|
"You reach the end of your chain pretty quickly.|">)
|
|
(<P? RUB AIR>
|
|
<NEW-PRSO ,BRICK-WALL>
|
|
<RTRUE>)
|
|
(<P? THROUGH GLOBAL-HOLE>
|
|
<DO-WALK ,P?NORTH>)
|
|
(<P? LOOK-UP ROOMS>
|
|
<TELL
|
|
"You see an " 'SHAFT-B "." CR>)
|
|
(<AND <VERB? WALK>
|
|
<NOT <EQUAL? ,P-WALK-DIR ,P?UP ,P?OUT>>>
|
|
<MOVE-FROM-DOORS>)
|
|
(<P? LISTEN (<> NOISE)>
|
|
<COND (<NOT ,ELEVATOR-STOPPED?>
|
|
<TELL
|
|
"You hear the whine of powerful machinery." CR>)
|
|
(<AND ,BRICK-WALL-FLAG
|
|
<IN-TUNNEL? ,RATS>>
|
|
<TELL ,RATS-CHITTERING>)>)>)>>
|
|
|
|
<ROUTINE MOVE-WALL (A)
|
|
<MOVE ,BRICK-WALL ,HERE>
|
|
<CHANGE-ADJECTIVE ,BRICK-WALL 0 .A>
|
|
<COND (<OR ,BRICK-WALL-FLAG
|
|
<HOLE-IN-BRICKS?>>
|
|
<MOVE ,BRICK-HOLE ,HERE>)>>
|
|
|
|
<GLOBAL RATS-CHITTERING "You hear the chittering of rats.|">
|
|
|
|
<ROUTINE RANDOM-ELEVATOR-MOTION ()
|
|
<COND (<PROB 25>
|
|
<SETG P-NUMBER <- <RANDOM 4> 1>>
|
|
<PERFORM ,V?PUSH ,FLOOR-BUTTON>
|
|
<RTRUE>)>>
|
|
|
|
<OBJECT ELEVATOR-CEILING
|
|
(IN SHAFT-2)
|
|
(DESC "tangle of machinery")
|
|
(SYNONYM TANGLE MACHINE)
|
|
(FLAGS NDESCBIT OPENBIT SEARCHBIT CONTBIT SURFACEBIT)>
|
|
|
|
<OBJECT ELEVATOR-FLOOR
|
|
(IN SHAFT-B)
|
|
(DESC "tangle of machinery")
|
|
(SYNONYM TANGLE MACHINE)
|
|
(FLAGS NDESCBIT OPENBIT SEARCHBIT CONTBIT)
|
|
(ACTION ELEVATOR-FLOOR-F)>
|
|
|
|
<ROUTINE ELEVATOR-FLOOR-F ()
|
|
<COND (<VERB? EXAMINE LOOK-INSIDE>
|
|
<TELL
|
|
CTHE ,ELEVATOR-FLOOR " is most notable for a metal hook">
|
|
<COND (,CHAIN-HOOKED?
|
|
<TELL " with a chain hanging on it">)>
|
|
<TELL ,PERIOD>)
|
|
(<P? (TIE PUT PUT-ON) CHAIN>
|
|
<COND (<NOT ,CHAIN-HOOKED?>
|
|
<TELL
|
|
"Only the hook seems capable of such a use, so you try that. ">)>
|
|
<NEW-PRSI ,HOOK>
|
|
<RTRUE>)>>
|
|
|
|
<OBJECT SHAFT-B
|
|
(DESC "elevator shaft")
|
|
(SYNONYM SHAFT)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS NDESCBIT AN SEARCHBIT OPENBIT CONTBIT VEHBIT)
|
|
(ACTION SHAFT-F)>
|
|
|
|
<OBJECT SHAFT-1
|
|
(DESC "elevator shaft")
|
|
(SYNONYM SHAFT)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS NDESCBIT AN SEARCHBIT OPENBIT CONTBIT VEHBIT)
|
|
(ACTION SHAFT-F)>
|
|
|
|
<OBJECT SHAFT-2
|
|
(DESC "elevator shaft")
|
|
(SYNONYM SHAFT)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS NDESCBIT AN SEARCHBIT OPENBIT CONTBIT VEHBIT)
|
|
(ACTION SHAFT-F)>
|
|
|
|
<OBJECT SHAFT-3
|
|
(DESC "elevator shaft")
|
|
(SYNONYM SHAFT)
|
|
(ADJECTIVE ELEVATOR)
|
|
(FLAGS NDESCBIT AN SEARCHBIT OPENBIT CONTBIT VEHBIT)
|
|
(ACTION SHAFT-F)>
|
|
|
|
<ROUTINE SHAFT-DESC ("AUX" (OBJ <FLOOR-SHAFT>))
|
|
<COND (<OR <IN? ,ELEVATOR-FLOOR .OBJ>
|
|
<IN? ,ELEVATOR-CEILING .OBJ>>
|
|
<TELL
|
|
"In the " 'SHAFT-B " " A ,ELEVATOR-FLOOR " is visible.">
|
|
<COND (<IN? ,ELEVATOR-FLOOR .OBJ>
|
|
<TELL
|
|
" One bit of the tangle is very much like a hook">
|
|
<COND (,CHAIN-HOOKED?
|
|
<TELL
|
|
", and indeed, a chain is hanging from it">
|
|
<COND (<HELD? ,CHAIN>
|
|
<TELL
|
|
". You are holding the other end of the chain">)
|
|
(ELSE
|
|
<TELL
|
|
". The other end of the chain is ">
|
|
<COND (<IN? ,CHAIN ,HERE>
|
|
<TELL "on the floor">)
|
|
(<EQUAL? <META-LOC ,CHAIN>
|
|
,HERE>
|
|
<TELL "in "
|
|
THE <LOC ,CHAIN>>)
|
|
(ELSE
|
|
<TELL
|
|
"dangling in the shaft below">)>)>)>
|
|
<TELL ".">)
|
|
(<IN? ,ELEVATOR-CEILING .OBJ>
|
|
<TELL
|
|
" The machinery has that malevolent mechanical appearance that means
|
|
danger.">)>)
|
|
(ELSE
|
|
<TELL
|
|
"The dark shaft opens like a waiting mouth.">)>
|
|
<RFATAL>>
|
|
|
|
<ROUTINE LIKE-A-SHAFT ()
|
|
<TELL
|
|
,IT-LOOKS-LIKE A ,SHAFT-B "." CR>>
|
|
|
|
<ROUTINE SHAFT-F ()
|
|
<COND (<VERB? EXAMINE LOOK-INSIDE>
|
|
<TELL
|
|
"The dark, grimy " 'SHAFT-B " extends up ">
|
|
<COND (<IN? ,ELEVATOR-FLOOR ,PRSO>
|
|
<TELL
|
|
"to " A ,ELEVATOR-FLOOR " just above the ceiling level">)
|
|
(ELSE
|
|
<TELL "into dimness">)>
|
|
<TELL " and down ">
|
|
<COND (<IN? ,ELEVATOR-CEILING ,PRSO>
|
|
<TELL
|
|
"to a tangle of dangerous-looking lifting machinery at about floor level">)
|
|
(<HERE? ,CS-BASEMENT>
|
|
<TELL
|
|
"to a concrete-lined pit below">)
|
|
(ELSE
|
|
<TELL "into a dark pit below">)>
|
|
<COND (<IN? ,ELEVATOR-FLOOR ,PRSO>
|
|
<TELL
|
|
". " CTHE ,ELEVATOR-FLOOR " includes a hook-like protrusion just inside
|
|
the door">
|
|
<COND (,CHAIN-HOOKED?
|
|
<TELL
|
|
". A greasy chain is hooked onto the protrusion, ">
|
|
<COND (<HELD? ,CHAIN>
|
|
<TELL "terminating in your hands">)
|
|
(ELSE
|
|
<TELL "dropping into the pit">)>)>)>
|
|
<TELL ,PERIOD>)
|
|
(<VERB? LOOK-UP>
|
|
<LIKE-A-SHAFT>)
|
|
(<P? PUT * (SHAFT-B SHAFT-1 SHAFT-2 SHAFT-3)>
|
|
<COND (<G? ,ELEVATOR-LOC <GETP ,HERE ,P?FLOOR>>
|
|
<COND (<AND <PRSO? ,CHAIN>
|
|
<G? ,ELEVATOR-LOC 1>>
|
|
<REMOVE ,PRSO> ;"do better eventually?")
|
|
(ELSE
|
|
<MOVE ,PRSO ,ELEVATOR-PIT>)>)
|
|
(ELSE
|
|
<MOVE ,PRSO ,ELEVATOR-CEILING>)>
|
|
<TELL "Dropped." CR>)
|
|
(<VERB? THROUGH BOARD>
|
|
<COND (<HERE? CS-BASEMENT>
|
|
<DO-WALK ,P?DOWN>)
|
|
(ELSE
|
|
<TELL
|
|
"It's a long way down." CR>)>)>>
|
|
|
|
<OBJECT HOOK
|
|
(IN ELEVATOR-FLOOR)
|
|
(DESC "hook")
|
|
(SYNONYM HOOK PROTRUSION)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION HOOK-F)>
|
|
|
|
<ROUTINE HOOK-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The hook is actually a very strong looking welded protrusion on the
|
|
bottom of the elevator, but it is hook-like.">
|
|
<COND (,CHAIN-HOOKED?
|
|
<TELL
|
|
" One end of a chain is hooked onto it, in fact.">)>
|
|
<CRLF>)
|
|
(<AND <P? (TAKE UNTIE) CHAIN HOOK>
|
|
,CHAIN-HOOKED?>
|
|
<NEW-PRSO ,CHAIN-1>
|
|
<RTRUE>)>>
|
|
|
|
<OBJECT CHAIN ;"chain in hand or on ground"
|
|
(IN ELEVATOR-PIT)
|
|
(DESC "greasy chain")
|
|
(SYNONYM CHAIN)
|
|
(ADJECTIVE GREASY)
|
|
(FLAGS TAKEBIT SURFACEBIT CONTBIT SEARCHBIT)
|
|
(SIZE 20)
|
|
(DESCFCN CHAIN-DESC)
|
|
(GENERIC GENERIC-CHAIN-F)
|
|
(ACTION CHAIN-F)>
|
|
|
|
<ROUTINE GENERIC-CHAIN-F ()
|
|
<COND (<LOC ,CHAIN> ,CHAIN)
|
|
(<LOC ,CHAIN-2> ,CHAIN-2)
|
|
(ELSE ,CHAIN-1)>>
|
|
|
|
<OBJECT CHAIN-1 ;"chain on hook"
|
|
(DESC "greasy chain")
|
|
(SYNONYM CHAIN)
|
|
(ADJECTIVE GREASY)
|
|
(FLAGS NDESCBIT TAKEBIT SURFACEBIT CONTBIT SEARCHBIT)
|
|
(SIZE 20)
|
|
(DESCFCN CHAIN-DESC)
|
|
(GENERIC GENERIC-CHAIN-F)
|
|
(ACTION CHAIN-F)>
|
|
|
|
<OBJECT CHAIN-2 ;"chain on rod"
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "greasy chain")
|
|
(SYNONYM CHAIN)
|
|
(ADJECTIVE GREASY)
|
|
(FLAGS INVISIBLE NDESCBIT TAKEBIT SURFACEBIT CONTBIT SEARCHBIT OPENBIT)
|
|
(SIZE 20)
|
|
(DESCFCN CHAIN-DESC)
|
|
(GENERIC GENERIC-CHAIN-F)
|
|
(ACTION CHAIN-F)>
|
|
|
|
<GLOBAL CHAIN-HOOKED? <>>
|
|
<GLOBAL CHAIN-LOOPED? <>>
|
|
|
|
<ROUTINE CHAIN-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?>
|
|
<COND (<AND <NOT <HELD? ,CHAIN>>
|
|
<OR <AND ,CHAIN-HOOKED? <HERE? ,CS-BASEMENT>>
|
|
<AND ,CHAIN-LOOPED? <HERE? ,ELEVATOR-PIT>>>>
|
|
<RFATAL>)
|
|
(ELSE <RTRUE>)>)
|
|
(ELSE
|
|
<TELL "There is ">
|
|
<COND (<OR <AND <HERE? ,ELEVATOR-PIT>
|
|
,CHAIN-LOOPED?>
|
|
<AND <HERE? ,CS-BASEMENT ,ELEVATOR-PIT>
|
|
,CHAIN-HOOKED?>>
|
|
<TELL "one end of ">)>
|
|
<TELL "a greasy length of chain ">
|
|
<COND (<NOT <FSET? ,CHAIN ,TOUCHBIT>>
|
|
<TELL "coiled ">)>
|
|
<TELL "on the floor here.">)>>
|
|
|
|
<ROUTINE TELL-IF-LOCKED ()
|
|
<COND (<FSET? ,CHAIN-2 ,LOCKED>
|
|
<TELL
|
|
" The chain is locked with a padlock.">)>>
|
|
|
|
<GLOBAL IT-DANGLES " and it dangles in the elevator shaft">
|
|
<GLOBAL HOOKED-TO-HOOK " and it's hooked to the hook">
|
|
|
|
<ROUTINE CHAIN-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is a length of rather greasy chain. It looks strong">
|
|
<COND (<AND <HERE? ,ELEVATOR-PIT>
|
|
,CHAIN-LOOPED?
|
|
,CHAIN-HOOKED?>
|
|
<TELL
|
|
,HOOKED-TO-HOOK " and" ,LOOPED-AROUND-ROD>)
|
|
(,CHAIN-HOOKED?
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<COND (<EQUAL? <META-LOC ,HOOK> ,HERE>
|
|
<TELL ,HOOKED-TO-HOOK>)
|
|
(<ELEVATOR-HERE?>)
|
|
(ELSE
|
|
<TELL ,IT-DANGLES>)>)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
" and it disappears up " ,INTO-THE-SHAFT>)>)
|
|
(,CHAIN-LOOPED?
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
" and it's" ,LOOPED-AROUND-ROD>)
|
|
(<HERE? ,CS-BASEMENT>
|
|
<TELL ,IT-DANGLES>)>)>
|
|
<TELL ".">
|
|
<COND (<HERE? ,ELEVATOR-PIT>
|
|
<TELL-IF-LOCKED>)>
|
|
<CRLF>)
|
|
(<VERB? TAKE>
|
|
<COND (<AND ,CHAIN-HOOKED?
|
|
,CHAIN-LOOPED?>
|
|
<TELL ,YOU-HAVE-TO>
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<TELL "unhook">)
|
|
(<FSET? ,CHAIN-2 ,LOCKED>
|
|
<TELL "unlock">)
|
|
(ELSE
|
|
<TELL "unwrap">)>
|
|
<TELL " it first." CR>)
|
|
(<AND ,CHAIN-LOOPED?
|
|
<OR <PRSI? ,ROD>
|
|
<HELD? ,CHAIN>
|
|
<NOT <ACCESSIBLE? ,CHAIN>>>>
|
|
<PERFORM ,V?UNTIE ,CHAIN-2 ,ROD>
|
|
<RTRUE>)
|
|
(<AND ,CHAIN-HOOKED?
|
|
<OR <PRSI? ,HOOK>
|
|
<HELD? ,CHAIN>
|
|
<NOT <ACCESSIBLE? ,CHAIN>>>>
|
|
<PERFORM ,V?UNTIE ,CHAIN-1>
|
|
<RTRUE>)>)
|
|
(<AND <VERB? CLIMB-UP CLIMB-FOO CLIMB-DOWN>
|
|
,CHAIN-HOOKED?>
|
|
<TELL
|
|
"The chain is too greasy to climb">
|
|
<COND (<FSET? ,GLOVES ,WEARBIT>
|
|
<TELL ", even wearing the gloves">)>
|
|
<TELL ,PERIOD>)
|
|
(<P? UNLOCK (CHAIN-2 CHAIN) MASTER-KEY>
|
|
<COND (<AND <FSET? ,CHAIN-2 ,LOCKED>
|
|
,CHAIN-LOOPED?>
|
|
<NEW-PRSO ,PADLOCK>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"The chain isn't locked up." CR>)>)
|
|
(<AND <P? UNLOCK (CHAIN-2 CHAIN) <>>
|
|
<HELD? ,MASTER-KEY>>
|
|
<PERFORM-PRSA ,PADLOCK ,MASTER-KEY>
|
|
<RTRUE>)
|
|
(<P? (LOCK TIE) (CHAIN CHAIN-1 CHAIN-2) PADLOCK>
|
|
<COND (<FSET? ,PADLOCK ,LOCKED>
|
|
<TELL CTHE ,PADLOCK " is locked already." CR>)
|
|
(<AND <PRSO? ,CHAIN ,CHAIN-2>
|
|
<NOT <FSET? ,CHAIN-2 ,LOCKED>>
|
|
,CHAIN-LOOPED?>
|
|
<SETG PADLOCK-ON? ,CHAIN-2>
|
|
<MOVE ,PADLOCK ,CHAIN-2>
|
|
<FSET ,PADLOCK ,LOCKED>
|
|
<FCLEAR ,PADLOCK ,OPENBIT>
|
|
<FSET ,PADLOCK ,NDESCBIT>
|
|
<FSET ,CHAIN-2 ,LOCKED>
|
|
<TELL
|
|
"You lock the chain with the padlock. It now forms a secure loop around
|
|
the rod." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"That's pretty pointless, as the chain isn't currently securing
|
|
anything." CR>)>)
|
|
(<P? (TIE ;PUT PUT-ON) (CHAIN CHAIN-1 CHAIN-2)>
|
|
<COND (<PRSI? ,CHAIN ,CHAIN-1 ,CHAIN-2>
|
|
<TELL S
|
|
"I'm not sure how you are proposing to do that.|">
|
|
<RTRUE>)
|
|
(<AND ,CHAIN-HOOKED? ,CHAIN-LOOPED?>
|
|
<TELL
|
|
,YOUVE-ALREADY "attached the ends of the chain to the hook and the rod.">
|
|
<COND (<NOT <PRSI? ,ROD ,HOOK>>
|
|
<TELL
|
|
" " ,YOU-HAVE-TO "retrieve one first.">)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<TELL
|
|
" There isn't enough extra chain to reach that far.">)>
|
|
<CRLF>
|
|
<RTRUE>)>
|
|
<COND (<PRSI? ,ROD>
|
|
<COND (<NOT ,CHAIN-LOOPED?>
|
|
<FCLEAR ,CHAIN-2 ,INVISIBLE>
|
|
;<MOVE ,CHAIN-2 ,ELEVATOR-PIT>
|
|
<SETG CHAIN-LOOPED? ,ROD>
|
|
<TELL
|
|
"You wrap the chain around the rod, but find it too thick to actually
|
|
tie it.">
|
|
<COND (,CHAIN-HOOKED?
|
|
<REMOVE ,CHAIN>
|
|
<TELL
|
|
" A few feet hangs on one side of the rod, and the rest curves up from
|
|
the rod towards the floor of the elevator.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<TELL
|
|
,YOUVE-ALREADY "wrapped the chain around the rod." CR>)>)
|
|
(<PRSI? ,HOOK>
|
|
<COND (<NOT ,CHAIN-HOOKED?>
|
|
<COND (<AND <HELD? ,CHAIN> <NOT ,CHAIN-LOOPED?>>
|
|
<MOVE ,CHAIN ,HERE>
|
|
<TELL
|
|
"You stretch out towards the hook, find that the whole chain is just too
|
|
much weight, and put most of it on the floor. Much easier! ">)>
|
|
<MOVE ,CHAIN-1 <LOC ,HOOK>>
|
|
<SETG CHAIN-HOOKED? ,HOOK>
|
|
<COND (,CHAIN-LOOPED? <REMOVE ,CHAIN>)
|
|
(ELSE
|
|
<MOVE ,CHAIN ,HERE>)>
|
|
<TELL
|
|
"You hook the chain to the hook, where it looks quite secure." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"One end of the chain is all that will fit." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
"The chain won't attach to " THE ,PRSI ,PERIOD>)>)
|
|
(<P? PUT * (CHAIN CHAIN-1 CHAIN-2)>
|
|
<TELL S
|
|
"I'm not sure how you are proposing to do that.|">)
|
|
(<VERB? UNTIE TAKE-OFF>
|
|
<COND (<PRSI? ,ROD>
|
|
<COND (,CHAIN-LOOPED?
|
|
<COND (<FSET? ,CHAIN-2 ,LOCKED>
|
|
<UNLOCK-PADLOCK-FIRST>)
|
|
(ELSE
|
|
<FSET ,CHAIN-2 ,INVISIBLE>
|
|
;<REMOVE ,CHAIN-2>
|
|
<COND (<NOT <HELD? ,CHAIN>>
|
|
<MOVE ,CHAIN ,ELEVATOR-PIT>
|
|
<THIS-IS-IT ,CHAIN>)>
|
|
<SETG CHAIN-LOOPED? <>>
|
|
<REMOVE-CHAIN-FROM "untie">)>)
|
|
(ELSE
|
|
<TELL ,ITS-NOT-TIED>)>)
|
|
(<PRSI? HOOK>
|
|
<COND (,CHAIN-HOOKED?
|
|
<REMOVE-CHAIN-FROM "remove">
|
|
<REMOVE ,CHAIN-1>
|
|
<COND (<NOT <HELD? ,CHAIN>>
|
|
<MOVE ,CHAIN ,HERE>
|
|
<THIS-IS-IT ,CHAIN>)>
|
|
<SETG CHAIN-HOOKED? <>>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<TELL ,ITS-NOT-TIED>)>)
|
|
(ELSE
|
|
<COND (<AND ,CHAIN-HOOKED?
|
|
<ACCESSIBLE? ,HOOK>>
|
|
<PERFORM ,V?UNTIE ,CHAIN-1 ,HOOK>)
|
|
(<AND ,CHAIN-LOOPED?
|
|
<ACCESSIBLE? ,ROD>>
|
|
<PERFORM ,V?UNTIE ,CHAIN-2 ,ROD>)
|
|
(ELSE
|
|
<TELL ,ITS-NOT-TIED>)>
|
|
<RTRUE>)>)
|
|
(<VERB? MOVE>
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<COND (,CHAIN-HOOKED? <PULL-HOOK>)
|
|
(,CHAIN-LOOPED? <PULL-ROD>)>)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<COND (,CHAIN-LOOPED? <PULL-ROD>)
|
|
(,CHAIN-HOOKED? <PULL-HOOK>)>)>)>>
|
|
|
|
<ROUTINE REMOVE-CHAIN-FROM (VRB)
|
|
<TELL "You " .VRB " the chain from " THE ,PRSI "." CR>>
|
|
|
|
<ROUTINE PULL-HOOK ()
|
|
<TELL "It's pretty securely hooked.">
|
|
<PRETTY-SECURE>>
|
|
|
|
<ROUTINE PULL-ROD ()
|
|
<COND (<FSET? ,CHAIN-2 ,LOCKED>
|
|
<TELL
|
|
"You pull as hard as you can, but you can't pull the rod out.">
|
|
<PRETTY-SECURE>)
|
|
(ELSE
|
|
<SETG CHAIN-LOOPED? <>>
|
|
<FSET ,CHAIN-2 ,INVISIBLE>
|
|
;<REMOVE ,CHAIN-2>
|
|
<COND (<NOT <HELD? ,CHAIN>>
|
|
<MOVE ,CHAIN ,ELEVATOR-PIT>)>
|
|
<TELL
|
|
"It clatters along the rod and then falls off." CR>)>>
|
|
|
|
<ROUTINE PRETTY-SECURE ()
|
|
<COND (<AND ,CHAIN-LOOPED?
|
|
<FSET? ,CHAIN-2 ,LOCKED>>
|
|
<TELL
|
|
" In fact, it feels pretty secure all around.">)>
|
|
<CRLF>>
|
|
|
|
<OBJECT PRESSURE-VALVE
|
|
(IN TUNNEL-EAST)
|
|
(DESC "pressure valve")
|
|
(SYNONYM VALVE)
|
|
(ADJECTIVE PRESSURE RELEASE STEAM)
|
|
(VALUE 5)
|
|
(FLAGS NDESCBIT OPENABLE)
|
|
(ACTION PRESSURE-VALVE-F)>
|
|
|
|
<ROUTINE PRESSURE-VALVE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<NOT <GET ,P-NAMW 0>>
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<TELL
|
|
"It looks like live steam." CR>)
|
|
(<NOT <ZERO? ,VALVE-OPENED?>>
|
|
<TELL
|
|
"It's just a trickle." CR>)
|
|
(ELSE
|
|
<TELL S "It's closed.|">)>)
|
|
(ELSE
|
|
<TELL
|
|
"It looks pretty rusty, but appears to be in working order. ">
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<TELL
|
|
"In fact, it's" ,WIDE-OPEN CR>)
|
|
(<NOT <ZERO? ,VALVE-OPENED?>>
|
|
<TELL
|
|
,IT-SEEMS-TO-BE "partly open." CR>)
|
|
(ELSE <TELL S "It's closed.|">)>)>)
|
|
(<VERB? TURN>
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<NEW-VERB ,V?CLOSE>)
|
|
(ELSE
|
|
<NEW-VERB ,V?OPEN>)>
|
|
<RTRUE>)
|
|
(<AND <VERB? ATTACK>
|
|
<FSET? ,PRSI ,WEAPONBIT>>
|
|
<OPEN-VALVE>)
|
|
(<AND <VERB? OPEN PRY>
|
|
,PRSI
|
|
<FSET? ,PRSI ,WEAPONBIT>>
|
|
<OPEN-VALVE>)
|
|
(<AND <VERB? OPEN>
|
|
<OR <NOT <ZERO? ,VALVE-OPENED?>>
|
|
<FSET? ,PRESSURE-VALVE ,RMUNGBIT>>>
|
|
<OPEN-VALVE>)
|
|
(<AND <VERB? OPEN>
|
|
<ZERO? ,VALVE-OPENED?>>
|
|
<TELL
|
|
"It's too rusty. You pull and strain, but" ,LC-NOTHING-HAPPENS CR>)
|
|
(<VERB? CLOSE LAMP-OFF>
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<SETG VALVE-OPENED? 0>
|
|
<FSET ,PRESSURE-VALVE ,RMUNGBIT>
|
|
<FCLEAR ,PRESSURE-VALVE ,OPENBIT>
|
|
<TELL
|
|
"The valve closes, more easily than it opened." CR>)
|
|
(ELSE
|
|
<TELL ,IT-ALREADY-IS>)>)>>
|
|
|
|
<GLOBAL WIDE-OPEN " wide open and spewing live steam.">
|
|
|
|
<ROUTINE OPEN-VALVE ()
|
|
<COND (<FSET? ,PRESSURE-VALVE ,OPENBIT>
|
|
<ALREADY-OPEN>)
|
|
(ELSE
|
|
<COND (<FSET? ,PRESSURE-VALVE ,RMUNGBIT>
|
|
<SETG VALVE-OPENED? 1>)>
|
|
<COND (<G? <SETG VALVE-OPENED? <+ ,VALVE-OPENED? 1>> 1>
|
|
<FSET ,PRESSURE-VALVE ,OPENBIT>
|
|
<DEQUEUE I-RATS>
|
|
<MOVE ,RATS ,GLOBAL-OBJECTS>
|
|
<TELL
|
|
"The valve screeches open. A jet spray of live steam issues from it,
|
|
filling the tunnel in front of you.">
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-STOP>>
|
|
<COND (,RATS-HERE
|
|
<SCORE-OBJECT ,PRESSURE-VALVE>
|
|
<MOVE ,DEAD-RAT ,HERE>
|
|
<SETG RATS-HERE 0>
|
|
<TELL
|
|
" The rats are caught in the full force of the blast. Horrible squeals
|
|
can be heard from the midst of the steam cloud, and scalded rats charge
|
|
past you, all interest in anything but flight forgotten.">
|
|
<COND (<IN? ,DEAD-RAT ,HERE>
|
|
<TELL
|
|
" One of their number remains, dead.">)>)>)
|
|
(ELSE
|
|
<TELL
|
|
"The valve, with a horrible scream of tortured metal, gives a little,
|
|
and a small trickle of steam issues forth.">
|
|
<COND (,RATS-HERE
|
|
<TELL " This further agitates the
|
|
rats.">)>)>
|
|
<CRLF>)>>
|
|
|
|
<GLOBAL VALVE-OPENED? 0>
|
|
|
|
<ROOM TUNNEL-WEST
|
|
(IN ROOMS)
|
|
(DESC "Steam Tunnel")
|
|
(EAST TO TUNNEL)
|
|
(WEST PER RATS-EXIT) ;TUNNEL-ENTRANCE
|
|
(GLOBAL CABLE STEAM-PIPES)
|
|
(ACTION TUNNEL-WEST-F)>
|
|
|
|
<ROUTINE TUNNEL-AND-PIPE ()
|
|
<TELL
|
|
"This dank and grimy tunnel is largely filled with an imperfectly
|
|
insulated steam pipe. The tunnel is uncomfortably hot and damp. ">>
|
|
|
|
<ROUTINE TUNNEL-WEST-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TUNNEL-AND-PIPE>
|
|
<TELL
|
|
"A bundle of coaxial cable runs along the ceiling,
|
|
festooned with damp mold and cobwebs. The tunnel continues west." CR>)
|
|
(<RARG? BEG>
|
|
<COND (<AND ,RATS-HERE
|
|
<VERB? DROP>
|
|
<FSET? ,PRSO ,FOODBIT>>
|
|
<THROW-FOOD>)>)>>
|
|
|
|
<OBJECT STEAM-PIPES
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "steam pipes")
|
|
(SYNONYM PIPE PIPES)
|
|
(ADJECTIVE STEAM)
|
|
(FLAGS NDESCBIT)>
|
|
|
|
<OBJECT CABLE
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "coaxial cable")
|
|
(SYNONYM CABLE CHANNEL WIRE WIRES)
|
|
(ADJECTIVE COAXIAL COAX WIRE WIRES STEAM)
|
|
(FLAGS NDESCBIT VEHBIT)
|
|
(ACTION CABLE-F)>
|
|
|
|
<GLOBAL ON-CABLE? <>>
|
|
|
|
<ROUTINE CABLE-F ("OPT" (RARG <>))
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<TELL S
|
|
"From floor to ceiling run wire channels and steam pipes.|">)
|
|
(ELSE
|
|
<TELL
|
|
"The cable runs overhead in a fat bundle. It looks like the kind
|
|
you've seen connecting nodes of the local net. This clump
|
|
is pretty grotty looking, festooned with damp cobwebs, and stained with
|
|
something that dripped from the ceiling." CR>)>)
|
|
(<VERB? TAKE>
|
|
<YOU-CANT-X-THAT "take">)
|
|
(<VERB? CUT MUNG>
|
|
<COND (<PRSI? <> ,HANDS>
|
|
<TELL-YUKS>)
|
|
(<PRSI? ,BOLT-CUTTER ,AXE>
|
|
<TELL
|
|
"You begin cutting the cables, and after a while you realize that the
|
|
inner cables look different, sort of dead white and slimy. Then you
|
|
notice that the cables you have cut are knitting back together." CR>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-CANT "expect to cut cable with " A ,PRSI ,PERIOD>)>)
|
|
(<VERB? FOLLOW>
|
|
<TELL "It runs ">
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<TELL
|
|
"from floor to ceiling." CR>)
|
|
(<HERE? ,STEAM-TUNNEL-EAST ,TUNNEL-ENTRANCE>
|
|
<TELL
|
|
"down from the ceiling and off to the ">
|
|
<COND (<HERE? ,STEAM-TUNNEL-EAST>
|
|
<TELL "west." CR>)
|
|
(ELSE <TELL "east." CR>)>)
|
|
(ELSE
|
|
<TELL
|
|
"east and west along the ceiling." CR>)>)
|
|
(<VERB? CLIMB-FOO CLIMB-ON BOARD>
|
|
<COND (<HERE? ,CS-BASEMENT>
|
|
<TELL-YUKS>)
|
|
(,ON-CABLE?
|
|
<TELL ,YOU-ARE ,PERIOD>)
|
|
(ELSE
|
|
<SETG ON-CABLE? T>
|
|
<QUEUE I-CABLE-FALL 2>
|
|
<TELL
|
|
"You leap, grab the damp and moldy bundle of cable, and hang suspended
|
|
off the floor.">
|
|
<COND (,RATS-HERE
|
|
<TELL
|
|
" " ,YOU-ARE-NOW "somewhat out of reach of the rats.">)>
|
|
<CRLF>)>)>>
|
|
|
|
<ROUTINE I-CABLE-FALL ()
|
|
<TELL CR
|
|
"Your grip on the cable, never too secure, loosens">
|
|
<SETG ON-CABLE? <>>
|
|
<COND (,RATS-HERE
|
|
<TELL " fatally as an
|
|
Einstein among rats, who was crawling along the cable itself, bites your
|
|
fingers">
|
|
<THROUGH-THE ,GLOVES>
|
|
<TELL ". You fall, landing among the delighted rats." CR CR>
|
|
<JIGS-UP
|
|
"They swarm over you, a small army of furry bodies, and you are
|
|
consumed in short order.">)
|
|
(ELSE <TELL ", and you drop to the floor." CR>)>>
|
|
|
|
<ROUTINE I-RATS ("AUX" (ORAT <LOC ,RATS>))
|
|
<COND (<IN? ,RATS ,GLOBAL-OBJECTS>
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-START 2>>
|
|
<MOVE ,RATS ,TUNNEL-WEST>
|
|
<COND (<IN-TUNNEL?>
|
|
<TELL CR
|
|
"You can hear, in the distance, a chittering, scratching sound." CR>)>
|
|
<RTRUE>)
|
|
(<NOT <IN? ,RATS ,HERE>>
|
|
<COND (<NOT <ZERO? ,RATS-HERE>>
|
|
<COND (<IN-TUNNEL?>
|
|
%<IFSOUND <SOUNDS ,S-ATTACK 8>>
|
|
<MOVE ,RATS ,HERE>)
|
|
(<OR <AND <HERE? ,TOMB>
|
|
<FSET? ,ACCESS-HATCH ,OPENBIT>>
|
|
<AND <HERE? ,CS-BASEMENT>
|
|
<FSET? ,ELEVATOR-DOOR-B
|
|
,OPENBIT>>>
|
|
<QUEUE I-RATS-GO-AWAY 4 T>
|
|
<TELL CR
|
|
"From below you can hear the chittering of the rats." CR>
|
|
<RTRUE>)
|
|
(<HERE? ,TOMB ,CS-BASEMENT>
|
|
<QUEUE I-RATS-GO-AWAY 2 T>)>)
|
|
(<HERE? ,TOMB ,CS-BASEMENT>
|
|
<QUEUE I-RATS-GO-AWAY 2 T>)
|
|
(<G? <SETG RATS-WAITING <+ ,RATS-WAITING 1>> 3>
|
|
<COND (<IN? ,RATS ,TUNNEL-WEST>
|
|
<MOVE ,RATS ,TUNNEL>)
|
|
(<IN? ,RATS ,TUNNEL>
|
|
<MOVE ,RATS ,TUNNEL-EAST>)
|
|
(<IN? ,RATS ,TUNNEL-EAST>
|
|
<MOVE ,RATS ,STEAM-TUNNEL>)
|
|
(<IN? ,RATS ,STEAM-TUNNEL>
|
|
<MOVE ,RATS ,STEAM-TUNNEL-EAST>)
|
|
(<AND <IN? ,RATS ,STEAM-TUNNEL-EAST>
|
|
,BRICK-WALL-FLAG>
|
|
<MOVE ,RATS ,ELEVATOR-PIT>)>
|
|
<COND (<IN? ,RATS ,HERE>
|
|
<SETG RATS-WAITING 0>)>)>)>
|
|
<COND (<IN? ,RATS ,HERE>
|
|
<CRLF>
|
|
<COND (<NOT <HERE? .ORAT>>
|
|
<COND (,RATS-HERE
|
|
<TELL
|
|
"The rats follow, surging around you. ">)
|
|
(ELSE
|
|
<TELL
|
|
"A troop of rats appears out of the darkness. ">)>)>
|
|
<SETG RATS-HERE <+ ,RATS-HERE 1>>
|
|
<COND (,ON-CABLE?
|
|
<TELL
|
|
"The rats leap toward you, maddened that you are out of reach!" CR>)
|
|
(<EQUAL? ,RATS-HERE 1>
|
|
<TELL
|
|
"The rats are momentarily
|
|
startled by your presence, but soon the bolder ones begin to approach.
|
|
There are more rats here than you have ever seen." CR>)
|
|
(<EQUAL? ,RATS-HERE 2>
|
|
<TELL
|
|
"The rats attack! Slimy, snarling, and hungry, they swarm over your
|
|
feet, biting at your legs">
|
|
<THROUGH-THE ,BOOTS>
|
|
<TELL " and clinging desperately to your feet." CR>)
|
|
(<EQUAL? ,RATS-HERE 3>
|
|
<TELL
|
|
"The troop of rats surges around you, scenting blood and the kill. There
|
|
are rats clinging all over you, their nasty teeth biting down in a dozen
|
|
places." CR>)
|
|
(ELSE
|
|
<I-RATS-GO-AWAY>
|
|
<JIGS-UP
|
|
"A particularly nasty rat, wise in the ways of death, makes its way
|
|
up your arm to your neck. For a moment it stares at you, its
|
|
yellow eyes hungry, and then it reaches your jugular. As you lose
|
|
consciousness, you think for a moment that you see the rat laugh,
|
|
exposing its own neck, and on its neck is branded a symbol.">)>)
|
|
(<IN-TUNNEL? ,RATS>
|
|
<COND (<NOT <IN-TUNNEL?>>
|
|
<RFALSE>)
|
|
(<EQUAL? ,RATS-WAITING 1>
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-START 3>>
|
|
<TELL CR
|
|
"The sound is louder. It sounds like small animals. Is it rats?" CR>)
|
|
(<EQUAL? ,RATS-WAITING 2>
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-START 4>>
|
|
<TELL CR
|
|
"The sound continues. It's almost certainly rats." CR>)
|
|
(ELSE
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-START 6>>
|
|
<TELL CR
|
|
"The rat sounds are growing louder, but you still can't see any rats." CR>)>)>>
|
|
|
|
<ROUTINE IN-TUNNEL? ("OPT" (WHO <>) "AUX" L)
|
|
<COND (<NOT .WHO> <SET WHO ,PLAYER>)>
|
|
<SET L <LOC .WHO>>
|
|
<COND (<EQUAL? .L ,TUNNEL-WEST ,TUNNEL ,TUNNEL-EAST
|
|
,STEAM-TUNNEL ,STEAM-TUNNEL-EAST>
|
|
<RTRUE>)
|
|
(<AND <EQUAL? .L ,ELEVATOR-PIT>
|
|
,BRICK-WALL-FLAG>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE I-RATS-GO-AWAY ()
|
|
%<IFSOUND <SOUNDS ,S-ATTACK ,S-STOP>>
|
|
<DEQUEUE I-RATS>
|
|
<MOVE ,RATS ,GLOBAL-OBJECTS>
|
|
<SETG RATS-HERE 0>
|
|
<SETG RATS-WAITING 0>
|
|
<RFALSE>>
|
|
|
|
<GLOBAL RATS-WAITING 0> ;"rats in tunnel-west, waiting"
|
|
<GLOBAL RATS-HERE 0> ;"rats seen you?"
|
|
|
|
<OBJECT DEAD-RAT
|
|
(DESC "dead rat")
|
|
(SYNONYM RAT)
|
|
(ADJECTIVE DEAD)
|
|
(FLAGS SEARCHBIT TAKEBIT OPENBIT CONTBIT)
|
|
(HEAT 0)
|
|
(GENERIC GENERIC-RAT-F)
|
|
(ACTION DEAD-RAT-F)>
|
|
|
|
<ROUTINE DEAD-RAT-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This rat appears to have been stepped on. A small trickle of blood has
|
|
clotted around its mouth. Branded into its neck is a strange symbol." CR>)
|
|
(<VERB? TAKE>
|
|
<COND (<NOT <FSET? ,PRSO ,TOUCHBIT>>
|
|
<COND (<EQUAL? <ITAKE> T>
|
|
<TELL
|
|
"As you take the dead rat, it moves, but then you realize that it's only
|
|
lice and fleas bailing out." CR>)
|
|
(ELSE <RTRUE>)>)>)
|
|
(<P? PUT * DEAD-RAT>
|
|
<SQUISH-RAT>)
|
|
(<VERB? BOARD STEP-ON>
|
|
<TELL
|
|
"You crush the rat. You hear its bones snap. What a sadist!" CR>)
|
|
(<VERB? EAT>
|
|
<TELL
|
|
"You dangle the rat over your mouth by its tail. You think about it.
|
|
You lower the rat towards your face. You think some more. Fortunately
|
|
for your health, you change your mind." CR>)>>
|
|
|
|
<ROUTINE SQUISH-RAT ()
|
|
<TELL
|
|
CTHE ,PRSO " hits ">
|
|
<COND (<PRSI? ,RATS> <TELL "a rat">)
|
|
(ELSE <TELL "the rat">)>
|
|
<TELL " with a satisfying squish." CR>>
|
|
|
|
<OBJECT RAT-SYMBOL
|
|
(IN DEAD-RAT)
|
|
(DESC "branded symbol")
|
|
(SYNONYM SYMBOL)
|
|
(ADJECTIVE BRANDED STRANGE INCOMPREHENSIBLE)
|
|
(FLAGS NDESCBIT)
|
|
(SIZE 0)
|
|
(GENERIC GENERIC-SYMBOL-F)
|
|
(ACTION RAT-SYMBOL-F)>
|
|
|
|
<GLOBAL SEEN-SYMBOL? <>>
|
|
|
|
<GLOBAL SYMBOL-APPEARS
|
|
"The symbol, on close examination, appears to have been ">
|
|
|
|
<ROUTINE RAT-SYMBOL-F ()
|
|
<COND (<VERB? EXAMINE READ>
|
|
<TELL
|
|
,SYMBOL-APPEARS "scarred into
|
|
the hide of the rat. There is no hair growing on it, and although it
|
|
looks like scar tissue, the color is wrong -- a sort of purplish
|
|
green. ">
|
|
<TELL-SYMBOL ,DEAD-RAT>
|
|
<CRLF>)>>
|
|
|
|
<ROUTINE GENERIC-SYMBOL-F ()
|
|
<COND (<EQUAL? ,P-IT-OBJECT
|
|
,TATTOO ,STONE-SYMBOL ,RAT-SYMBOL
|
|
,PENTAGRAM ,CARVING-SYMBOL ,CARTON>
|
|
,P-IT-OBJECT)
|
|
(<EQUAL? ,P-IT-OBJECT ,HAND>
|
|
,TATTOO)
|
|
(<EQUAL? ,P-IT-OBJECT ,SMOOTH-STONE>
|
|
,STONE-SYMBOL)
|
|
(<EQUAL? ,P-IT-OBJECT ,DEAD-RAT>
|
|
,RAT-SYMBOL)
|
|
(<EQUAL? ,P-IT-OBJECT ,CARVINGS>
|
|
,CARVING-SYMBOL)
|
|
(<EQUAL? ,P-IT-OBJECT ,CARTON>
|
|
,CARTON)>>
|
|
|
|
<ROUTINE TELL-SYMBOL (OBJ)
|
|
<TELL "The symbol ">
|
|
<COND (<NOT ,SEEN-SYMBOL?>
|
|
<SETG SEEN-SYMBOL? .OBJ>
|
|
<TELL
|
|
"is like nothing you've ever seen, and yet somehow
|
|
you know it has meaning.">)
|
|
(<NOT <EQUAL? ,SEEN-SYMBOL? .OBJ>>
|
|
<TELL
|
|
"looks oddly familiar.">)
|
|
(ELSE
|
|
<TELL
|
|
"seems just as odd as before.">)>>
|
|
|
|
<OBJECT RATS
|
|
(IN GLOBAL-OBJECTS)
|
|
(DESC "sewer rats")
|
|
(SYNONYM RAT RATS)
|
|
(ADJECTIVE LIVE SEWER)
|
|
(DESCFCN RATS-DESC)
|
|
(FLAGS NOABIT)
|
|
(GENERIC GENERIC-RAT-F)
|
|
(ACTION RATS-F)>
|
|
|
|
<ROUTINE GENERIC-RAT-F ()
|
|
<COND (<ACCESSIBLE? ,DEAD-RAT> ,DEAD-RAT)
|
|
(ELSE ,RATS)>>
|
|
|
|
<ROUTINE RATS-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
"There are rats here.">)>>
|
|
|
|
<ROUTINE RATS-F ()
|
|
<COND (<AND <IN? ,RATS ,GLOBAL-OBJECTS>
|
|
<NOT <VERB? TELL-ABOUT ASK-ABOUT TELL-ME-ABOUT>>>
|
|
<TELL "There are no rats here." CR>)
|
|
(<VERB? EXAMINE>
|
|
<TELL
|
|
"These are strange rats. They don't look like the usual sewer rats.
|
|
There is more white in their fur, even dirty and
|
|
encrusted as it is. Some are furless, and others piebald.
|
|
Many of the older ones are scarred and look particularly
|
|
cunning." CR>)
|
|
(<VERB? SMELL>
|
|
<TELL
|
|
"You catch a sharp odor over the background of damp and sewage.
|
|
It's metallic, almost stinging. It's the odor of fresh blood." CR>)
|
|
(<AND <VERB? THROW>
|
|
<FSET? ,PRSO ,FOODBIT>>
|
|
<THROW-FOOD>)
|
|
(<VERB? ATTACK KILL>
|
|
<TELL
|
|
"You strike out at the rats, but several clamp onto your hand. The
|
|
pain is horrible. The rest are all the more frenzied by the drops
|
|
of blood." CR>)
|
|
(<VERB? KICK>
|
|
<TELL
|
|
"You kick, throwing off a few biting at your foot and leg">
|
|
<THROUGH-THE ,BOOTS><TELL ". These smash
|
|
squealing into the wall, but others take their places." CR>)
|
|
(<P? PUT * RATS>
|
|
<SQUISH-RAT>)
|
|
(<VERB? STEP-ON>
|
|
<TELL
|
|
"You smash a rat, but it's one of hundreds." CR>)
|
|
(<VERB? LISTEN>
|
|
<TELL
|
|
CTHE ,RATS " sound annoyed and hungry." CR>)>>
|
|
|
|
<ROOM MASS-AVE
|
|
(IN ROOMS)
|
|
(DESC "Mass. Ave.")
|
|
(LDESC
|
|
%<STRING "This is the main entrance to the campus buildings.
|
|
Blinding snow obscures the stately Grecian columns and rounded
|
|
dome to the east. You can barely make out the inscription on
|
|
the pediment (which reads \"George Vnderwood Edwards, Fovnder;
|
|
P. David Lebling, Architect"
|
|
<COND (,SOUND-EFFECTS? "; Russell Lieblich, Sovnd Engineer")
|
|
(ELSE "")> "\").
|
|
West across Massachusetts Avenue are
|
|
other buildings, but you can't see them.">)
|
|
(EAST TO INF-1)
|
|
(IN TO INF-1)
|
|
(GLOBAL OUTSIDE-DOOR)
|
|
(FLAGS OUTSIDE ONBIT)
|
|
(ACTION MASS-AVE-F)>
|
|
|
|
<ROUTINE MASS-AVE-F (RARG)
|
|
<COND ;(<RARG? LOOK>
|
|
<TELL
|
|
CR>)
|
|
(<RARG? ENTER>
|
|
<EXIT-TO-COLD>)
|
|
(<RARG? LEAVE>
|
|
<EXIT-FROM-COLD>)>>
|
|
|
|
<ROUTINE EXIT-FROM-COLD ()
|
|
;<IFSOUND <SOUNDS ,S-STORMY ,S-STOP>>
|
|
<DEQUEUE I-FREEZE-TO-DEATH>
|
|
<COND (<G? ,FREEZE-COUNT 0>
|
|
<SETG FREEZE-COUNT 0>
|
|
<TELL
|
|
,PUSH-INTO "welcoming warmth inside." CR CR>)>>
|
|
|
|
<ROOM CHEMISTRY-BLDG
|
|
(IN ROOMS)
|
|
(DESC "Chemistry Building")
|
|
(NORTH TO INF-5)
|
|
(SOUTH TO ALCHEMY-DEPT IF ALCHEMY-DOOR IS OPEN)
|
|
(GLOBAL ALCHEMY-DOOR ALCHEMY-WINDOW OFFICE-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION CHEMISTRY-BLDG-F)>
|
|
|
|
<ROUTINE CHEMISTRY-BLDG-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This corridor is lined with closed, dark offices. At the south end of
|
|
the corridor is a door with a light shining behind it. ">
|
|
<COND (<FSET? ,ALCHEMY-DOOR ,OPENBIT>
|
|
<TELL "The door is open.">)
|
|
(ELSE
|
|
<TELL
|
|
"There is something written on the door.">)>
|
|
<CRLF>)
|
|
(<RARG? ENTER>
|
|
<COND (<AND <EQUAL? ,OHERE ,ALCHEMY-DEPT>
|
|
<NOT ,PROF-DEAD?>>
|
|
<SETG LEFT-ALCHEMY? T>
|
|
<FSET ,ALCHEMY-DOOR ,LOCKED>
|
|
<FCLEAR ,ALCHEMY-DOOR ,OPENBIT>
|
|
<TELL
|
|
"The door closes behind you." CR CR>)>)>>
|
|
|
|
<OBJECT ALCHEMY-DOOR
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "Alchemy Department door")
|
|
(SYNONYM DOOR)
|
|
(ADJECTIVE ALCHEMY DEPART DEPT)
|
|
(FLAGS DOORBIT OPENABLE NDESCBIT READBIT LOCKED)
|
|
(ACTION ALCHEMY-DOOR-F)>
|
|
|
|
<ROUTINE ALCHEMY-DOOR-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is a standard Tech door. It's made of black-painted wood and has a ">
|
|
<COND (<FSET? ,ALCHEMY-WINDOW ,RMUNGBIT>
|
|
<TELL "badly cracked ">)>
|
|
<TELL 'ALCHEMY-WINDOW " with ">
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<TELL "something painted on the other side.">)
|
|
(ELSE
|
|
<TELL "\"Department of Alchemy\" painted on it.">)>
|
|
<COND (<AND <HERE? ,CHEMISTRY-BLDG>
|
|
<FSET? ,ALCHEMY-DEPT ,ONBIT>
|
|
<NOT ,PROF-DEAD?>>
|
|
<TELL
|
|
" There is a light on inside.">)>
|
|
<CRLF>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<TELL "You are inside it already." CR>)
|
|
(<NOT <FSET? ,ALCHEMY-DEPT ,ONBIT>>
|
|
<TELL
|
|
"It's dark inside." CR>)
|
|
(<NOT ,PROF-DEAD?>
|
|
<TELL
|
|
"Every so often, you see a shadow move across the window." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You don't see anything in particular, other than that the light is on
|
|
inside." CR>)>)
|
|
(<VERB? READ>
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
<TELL
|
|
"Painted on the door, in calligraphy indistinguishable from any other
|
|
door at Tech, is the phrase \"Department of Alchemy.\" You always used
|
|
to wonder what was behind that door." CR>)
|
|
(ELSE <TELL ,YOU-CANT "read it from this side." CR>)>)
|
|
(<P? UNLOCK>
|
|
<COND (<FSET? ,PRSO ,LOCKED>
|
|
<COND (<PRSI? ,MASTER-KEY>
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
<QUEUE I-ANSWER-DOOR 3 T>)>
|
|
<RFALSE>)
|
|
(<PRSI? ,KEY-1 ,KEY-2 ,KEY-3 ,KEY-4>
|
|
<TELL
|
|
"It doesn't even fit the lock." CR>)>)
|
|
(<HERE? ,ALCHEMY-DEPT>
|
|
<TELL
|
|
"You don't need to unlock it to open it from this side." CR>)>)
|
|
(<VERB? KNOCK KICK ATTACK>
|
|
<TELL "You knock on the door.">
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
<QUEUE I-ANSWER-DOOR 3 T>
|
|
<TELL
|
|
" The hollow sound reverberates down the hall.
|
|
You sort of wish you had knocked more softly.">)>
|
|
<CRLF>)
|
|
(<VERB? THROUGH>
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<DO-WALK ,P?NORTH>)
|
|
(<HERE? ,CHEMISTRY-BLDG>
|
|
<DO-WALK ,P?SOUTH>)>)>>
|
|
|
|
<GLOBAL LEFT-ALCHEMY? <>>
|
|
|
|
<OBJECT ALCHEMY-WINDOW
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "frosted glass window")
|
|
(SYNONYM WINDOW GLASS)
|
|
(ADJECTIVE FROSTED GLASS)
|
|
(FLAGS NDESCBIT READBIT TRANSBIT)
|
|
(ACTION ALCHEMY-WINDOW-F)>
|
|
|
|
<ROUTINE ALCHEMY-WINDOW-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a frosted glass window. It's more or less opaque.">
|
|
<COND (<FSET? ,ALCHEMY-WINDOW ,RMUNGBIT>
|
|
<TELL
|
|
" It's covered with a maze of cracks.">)>
|
|
<CRLF>)
|
|
(<VERB? READ KNOCK>
|
|
<NEW-PRSO ,ALCHEMY-DOOR>
|
|
<RTRUE>)
|
|
(<VERB? MUNG ATTACK>
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
<QUEUE I-ANSWER-DOOR 3 T>)>
|
|
<COND (<PRSI? <> ,HANDS>
|
|
<TELL
|
|
S "There is no effect"", other than your hands getting somewhat sore and
|
|
a lot of noise being produced." CR>)
|
|
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
|
|
<TELL
|
|
CTHE ,PRSI " bounces harmlessly off the glass." CR>)
|
|
(<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
"Further attacks do little to worsen the damage." CR>)
|
|
(ELSE
|
|
<FSET ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
"You smash the glass, and cracks spread all over the pane from the point
|
|
of impact. The window remains whole, though, as it's made of wire
|
|
reinforced glass." CR>)>)>>
|
|
|
|
<ROUTINE I-ANSWER-DOOR ()
|
|
<COND (<HERE? ,CHEMISTRY-BLDG>
|
|
<COND (<NOT ,PROF-DEAD?>
|
|
<MOVE ,PROFESSOR ,ALCHEMY-DEPT>
|
|
<QUEUE I-PROFESSOR -1>
|
|
<TELL CR
|
|
"The door opens partway, revealing a professorial man
|
|
in a white lab coat. He smiles. ">
|
|
<COND (<NOT ,LEFT-ALCHEMY?>
|
|
<TELL "\"Good evening! I don't get many visitors
|
|
this late. You're not one of my students, are you?\"">)
|
|
(ELSE
|
|
<TELL "\"Back for another visit, are you?\"">)>
|
|
<TELL " He ushers you
|
|
into the room without waiting for an answer, closing the door behind
|
|
you." CR CR>
|
|
<GOTO ,ALCHEMY-DEPT>)
|
|
(ELSE
|
|
<TELL CR
|
|
"There is no sign of life behind the door." CR>)>)>>
|
|
|
|
<OBJECT SIGNUP
|
|
(IN ALCHEMY-DEPT)
|
|
(DESC "sign-up sheet")
|
|
(FDESC
|
|
"Taped to the wall to the right of the archway is a sign-up sheet.")
|
|
(SYNONYM SHEET)
|
|
(ADJECTIVE SIGNUP SIGN-UP)
|
|
(FLAGS TAKEBIT TRYTAKEBIT READBIT)
|
|
(ACTION SIGNUP-F)>
|
|
|
|
<ROUTINE SIGNUP-F ()
|
|
<COND (<VERB? EXAMINE READ>
|
|
<TELL
|
|
"This appears to be a sign-up sheet for the lab. Strangely, although
|
|
few daytime segments are used, almost all of the nighttime ones are.
|
|
Most seem to have been taken by two different people, the professor
|
|
and another, presumably one of his graduate students.">
|
|
<FSET ,SIGNUP ,RMUNGBIT>
|
|
<COND (<OR <FSET? ,NOTE ,RMUNGBIT>
|
|
,REMEMBERED-STUDENT?>
|
|
<TELL
|
|
" With a start, you realize that the author of the suicide note was the
|
|
heavy user of the lab.">)
|
|
(ELSE
|
|
<QUEUE I-REMEMBER-STUDENT 4>
|
|
<TELL
|
|
" The name of the graduate student is oddly familiar.">)>
|
|
<CRLF>)
|
|
(<VERB? TAKE>
|
|
<COND (<IN? ,PROFESSOR ,HERE>
|
|
<TELL
|
|
"\"You can't take that! It's the only way we have to keep track of who's
|
|
signed up to use the lab.\"" CR>)>)>>
|
|
|
|
<GLOBAL REMEMBERED-STUDENT? <>>
|
|
|
|
<ROUTINE I-REMEMBER-STUDENT ()
|
|
<SETG REMEMBERED-STUDENT? T>
|
|
<TELL CR
|
|
"Suddenly, you remember why the graduate student's name was familiar.
|
|
He was a missing student, until his body was found smashed
|
|
and broken at the base of the tallest building on campus." CR>>
|
|
|
|
<OBJECT ARCHWAY
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "archway")
|
|
(SYNONYM ARCH ARCHWAY)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION ARCHWAY-F)>
|
|
|
|
<ROUTINE ARCHWAY-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This archway, part of the oldest section of Tech, is between a lab
|
|
and the headquarters of the Alchemy Department.">
|
|
<COND (<AND <HERE? ,ALCHEMY-DEPT>
|
|
<NOT <FSET? ,SIGNUP ,TOUCHBIT>>>
|
|
<TELL
|
|
,TO-THE-RIGHT "archway is a sheet of paper. It looks like a sign-up
|
|
sheet.">)>
|
|
<CRLF>)
|
|
(<P? THROUGH>
|
|
<COND (<HERE? ,ALCHEMY-LAB>
|
|
<DO-WALK ,P?NORTH>)
|
|
(ELSE
|
|
<DO-WALK ,P?SOUTH>)>)>>
|
|
|
|
<OBJECT LAB
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "laboratory")
|
|
(SYNONYM LAB LABORATORY)
|
|
(ADJECTIVE ALCHEMY)
|
|
(ACTION LAB-F)>
|
|
|
|
<ROUTINE LAB-F ()
|
|
<COND (<VERB? ENTER THROUGH>
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<DO-WALK ,P?SOUTH>)
|
|
(<HERE? ,UNDER-ALCHEMY-LAB>
|
|
<COND (<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<DO-WALK ,P?UP>)
|
|
(ELSE
|
|
<TELL ,REFERRING CR>)>)
|
|
(ELSE
|
|
<TELL ,ALREADY-IN-IT CR>)>)
|
|
(<P? THROW * LAB>
|
|
<MOVE ,PRSO ,ALCHEMY-LAB>
|
|
<TELL "Thrown." CR>)
|
|
(<VERB? DROP>
|
|
<DO-WALK ,P?NORTH>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<LIKE-A-PRSO "looks">)
|
|
(<HERE? ,UNDER-ALCHEMY-LAB>
|
|
<COND (<AND ,LIT
|
|
<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>>
|
|
<LIKE-A-PRSO "looks">)
|
|
(ELSE
|
|
<TELL ,REFERRING CR>)>)
|
|
(ELSE
|
|
<TELL ,ALREADY-IN-IT CR>)>)>>
|
|
|
|
<ROOM ALCHEMY-DEPT
|
|
(IN ROOMS)
|
|
(DESC "Department of Alchemy")
|
|
(NORTH TO CHEMISTRY-BLDG IF ALCHEMY-DOOR IS OPEN)
|
|
(SOUTH PER ALCHEMY-LAB-ENTER)
|
|
(GLOBAL ALCHEMY-DOOR ALCHEMY-WINDOW ARCHWAY OUTLET LAB)
|
|
(FLAGS ONBIT)
|
|
(ACTION ALCHEMY-DEPT-F)>
|
|
|
|
<ROUTINE ALCHEMY-LAB-ENTER ()
|
|
<COND (<WINNER? ,URCHIN> <RFALSE>)
|
|
(<IN? ,PROFESSOR ,ALCHEMY-DEPT>
|
|
<COND (<LAB-ENTER?> <CRLF> ,ALCHEMY-LAB)
|
|
(ELSE <RFALSE>)>)
|
|
(ELSE ,ALCHEMY-LAB)>>
|
|
|
|
<ROUTINE LAB-ENTER? ()
|
|
<COND (<NOT ,PROF-SEEN-NOTE?>
|
|
<TELL
|
|
CTHE ,PROFESSOR " stops you, not too gently. \"Sorry,\" he says, although
|
|
he doesn't sound too sorry. \"There are very delicate experiments going
|
|
on in the lab. You might hurt something.\" All you can see before he
|
|
guides you away from the archway is a great deal of odd
|
|
apparatus and equipment." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<MOVE ,PROFESSOR ,ALCHEMY-LAB>
|
|
<FSET ,ALCHEMY-LAB ,ONBIT>
|
|
<TELL
|
|
"\"Ah! You'd like to see the lab?\" the professor asks in a rather
|
|
unctuous tone. \"Come right in!\" He ushers you through the archway
|
|
into the lab, following quickly behind you and turning on the lights." CR>)>>
|
|
|
|
<GLOBAL PROF-SEEN-NOTE? <>>
|
|
<GLOBAL PROF-MAD? <>>
|
|
|
|
;<GLOBAL PROF-CNT 0>
|
|
|
|
;<GLOBAL PROF-TBL
|
|
<LTABLE "ever so gently"
|
|
"not so gently"
|
|
"roughly"
|
|
"manhandling you">>
|
|
|
|
<GLOBAL TIED-UP? 0>
|
|
|
|
<GLOBAL PROF-FLAG <>>
|
|
|
|
<ROUTINE I-PROFESSOR ()
|
|
<COND (<HERE? ,ALCHEMY-LAB ,UNDER-ALCHEMY-LAB ,BRICK-TUNNEL>
|
|
<SETG TIED-UP? <+ ,TIED-UP? 1>>
|
|
<COND (<EQUAL? ,TIED-UP? 1>
|
|
<MOVE ,PLAYER ,PENTAGRAM>
|
|
<TELL CR
|
|
CTHE ,PROFESSOR " guides you to the center of the lab, where a
|
|
strange pentagonal symbol is chalked on the floor. ">
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL "He repairs some scuff marks on it,
|
|
muttering about sloppy students. He then ">)
|
|
(ELSE
|
|
<TELL "He ">)>
|
|
<TELL "cuts one of the
|
|
chalk lines with a small knife you had not previously noticed, pushes
|
|
you into the center of the chalked symbol, and redraws the line, muttering
|
|
softly and rhythmically as he does so. \"There, that's done. Don't
|
|
move from there, it'll only make things worse for you.\" He makes some
|
|
odd gestures at the archway and then goes over to the lab bench." CR>)
|
|
(<EQUAL? ,TIED-UP? 2>
|
|
<TELL CR
|
|
CTHE ,PROFESSOR " is preparing something at the lab bench. \"Alchemy is
|
|
my chosen field, and I've gotten ridiculed for it. It's like
|
|
chemistry, except that chemists don't recognize that some natural laws
|
|
are enforced by persons, not physics. Some of them
|
|
will grant power, or knowledge, but they must be placated, or even bribed.
|
|
They're not of this earth, not demons or devils, and they aren't always
|
|
friendly. To me it's just an unpleasant necessity on the path to power.
|
|
When I'm done, they won't laugh anymore!\"" CR>)
|
|
(<EQUAL? ,TIED-UP? 3>
|
|
<TELL CR
|
|
CTHE ,PROFESSOR " enters another pentagram, and begins a highly
|
|
choreographed ritual. \"This may seem a little silly to you, but the
|
|
symbology is what's important. Certain alignments, certain aspects.
|
|
In a few moments, it won't matter anyway,\" he remarks. \"There is very
|
|
little room for error here, so be calm.\" He chants, he brandishes
|
|
strange instruments, moves about
|
|
inside the pentagram, and occasionally points to you. It becomes clear
|
|
exactly what he meant by the word \"bribe.\"" CR>)
|
|
(<EQUAL? ,TIED-UP? 4>
|
|
<TELL CR
|
|
"The chant grows more complex">
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
", the professor having difficulty with the almost unpronounceable words">)>
|
|
<TELL ", with rhythms and cadences that make
|
|
you want to stop your ears. The room appears to be getting darker." CR>)
|
|
(<EQUAL? ,TIED-UP? 5>
|
|
%<IFSOUND <SOUNDS ,S-PSYCHO ,S-START 2>>
|
|
<MOVE ,MIST ,HERE>
|
|
<TELL CR
|
|
"A thick black mist begins to form in the room. Parts are darker, and
|
|
parts lighter, and the dark parts form a disturbing shape. The professor
|
|
chants and calls more loudly now">
|
|
<COND (<NOT <IN? ,PLAYER ,PENTAGRAM>>
|
|
<TELL ", clearly terrified of what may
|
|
happen">)
|
|
(<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL ", his voice rising in a kind of
|
|
hysteria">)>
|
|
<TELL ", and you realize the calls are being
|
|
answered." CR>)
|
|
(<EQUAL? ,TIED-UP? 6>
|
|
%<IFSOUND <SOUNDS ,S-PSYCHO ,S-START 4>>
|
|
<TELL CR
|
|
"The room is now freezing cold, though the windows are shuttered and
|
|
tightly curtained. Low, bone-rattling vibrations shake the room in
|
|
cadence with the chant. The black mist is growing thicker. The professor ">
|
|
<COND (<NOT <IN? ,PLAYER ,PENTAGRAM>>
|
|
<TELL
|
|
"is alternately looking at you and at the mist." CR>)
|
|
(<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
"gestures in your direction, an overtone of terror in his voice." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"chants more rapidly, producing strange guttural sounds, scarcely
|
|
human." CR>)>)
|
|
(<EQUAL? ,TIED-UP? 7>
|
|
%<IFSOUND <SOUNDS ,S-PSYCHO ,S-START 6>>
|
|
<COND (<HERE? ,ALCHEMY-LAB>
|
|
<TELL CR
|
|
"The black mist swirls wildly around the room, and a deep bass voice
|
|
gibbers out of thin air. ">
|
|
<COND (<NOT <IN? ,PLAYER ,PENTAGRAM>>
|
|
<TELL
|
|
"\"No!\" screams the professor, and jumps toward you out of his own
|
|
pentagram. He realizes what he has done, and tries to reenter, but the
|
|
mist grabs at him." CR>)
|
|
(ELSE
|
|
<TELL CTHE ,PROFESSOR>
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
" points madly toward you, and the mist follows." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"'s brow drips with sweat." CR>)>)>)
|
|
(ELSE
|
|
<TELL CR
|
|
"You hear a deep bass voice, and a softer, pleading baritone." CR>)>)
|
|
(<EQUAL? ,TIED-UP? 8>
|
|
%<IFSOUND <SOUNDS ,S-PSYCHO ,S-START 8>>
|
|
<REMOVE ,MIST>
|
|
<COND (<OR <IN? ,PLAYER ,PENTAGRAM>
|
|
<IN? ,PLAYER ,ALCHEMY-LAB>>
|
|
<CRLF>
|
|
<JIGS-UP
|
|
"A thing like a tentacle with a demonic face wraps slowly around you.
|
|
The room recedes into a great distance as you are pulled
|
|
away. Before you die, you see what the tentacle is a part of.">)
|
|
(ELSE
|
|
<SETG TIED-UP? 0>
|
|
<ROB ,PROFESSOR ,ALCHEMY-LAB>
|
|
<MOVE ,PROFESSOR ,GLOBAL-OBJECTS>
|
|
<SCORE-OBJECT ,PROFESSOR>
|
|
<SETG PROF-DEAD? T>
|
|
<FCLEAR ,ALCHEMY-LAB ,TOUCHBIT>
|
|
<FCLEAR ,ALCHEMY-LAB ,ONBIT>
|
|
<DEQUEUE I-PROFESSOR>
|
|
<TELL CR
|
|
"From above, you hear a thunderous noise, a maniacal scream, and
|
|
then the sound of equipment smashing. ">
|
|
<COND (<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<FCLEAR ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<TELL
|
|
"The trapdoor slams shut, but around it">)
|
|
(ELSE
|
|
<TELL
|
|
"Around the trapdoor">)>
|
|
<TELL
|
|
" pours a blinding flash of light. Finally you hear an almost
|
|
inaudible whimper, then nothing. The light fades">
|
|
<IN-DARK?>
|
|
%<IFSOUND <SOUNDS ,S-PSYCHO ,S-STOP>>)>)>)
|
|
(<HERE? ,ALCHEMY-DEPT>
|
|
<TELL CR
|
|
CTHE ,PROFESSOR " ">
|
|
<COND (<NOT ,PROF-FLAG>
|
|
<SETG PROF-FLAG T>
|
|
<TELL "gazes">)
|
|
(ELSE
|
|
<TELL "continues to gaze">)>
|
|
<TELL " at you ">
|
|
<COND (<AND ,PROF-MAD?
|
|
,PROF-SEEN-NOTE?>
|
|
<TELL "with a distinctly predatory air." CR>)
|
|
(,PROF-MAD?
|
|
<TELL "with malign intent." CR>)
|
|
(ELSE
|
|
<TELL "in a bored and distracted way." CR>)>)
|
|
(ELSE
|
|
<DEQUEUE I-PROFESSOR>
|
|
<RFALSE>)>>
|
|
|
|
<GLOBAL PROF-DEAD? <>>
|
|
|
|
<OBJECT PENTAGRAM
|
|
(IN ALCHEMY-LAB)
|
|
(DESC "pentagram")
|
|
(SYNONYM PENTAG SHAPE LINE LINES)
|
|
(ADJECTIVE CHALK PENTAG)
|
|
(FLAGS NDESCBIT VEHBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(CAPACITY 200)
|
|
(ACTION PENTAGRAM-F)>
|
|
|
|
<ROUTINE PENTAGRAM-F ("OPT" (RARG <>) "AUX" O)
|
|
<COND (<RARG? BEG>
|
|
<COND (<AND <VERB? READ LOOK-INSIDE>
|
|
<NOT-REACHABLE?>>
|
|
<TELL
|
|
,YOU-CANT-SEE THE ,PRSO " well enough from here to do that." CR>)
|
|
(<P? POUR * (<> ,GROUND)>
|
|
<NEW-PRSI ,PENTAGRAM>
|
|
<RTRUE>)
|
|
(<P? BOARD PENTAGRAM>
|
|
<TELL ,ALREADY-IN-IT CR>)
|
|
(<VERB? WALK>
|
|
<RFALSE> ;"all exits are handled in exit routines")
|
|
(<VERB? DISEMBARK EXIT>
|
|
<COND (<NOT ,TIED-UP?>
|
|
<MOVE ,WINNER ,HERE>
|
|
<CROSS-PENTAGRAM "out of">)
|
|
(<NOT <FSET? ,PENTAGRAM ,RMUNGBIT>>
|
|
<TELL
|
|
"Your feet approach the chalk line, and then stop. You can't push your
|
|
way out." CR>)
|
|
(ELSE
|
|
<MOVE ,WINNER ,HERE>
|
|
<TELL
|
|
S "You push your way through ""a soft spot just over the scuff marks, and
|
|
are outside the pentagram. The air is thick and close." CR>)>)
|
|
(<SET O <NOT-REACHABLE?>>
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<CANT-REACH-FROM-VEHICLE .O>)
|
|
(ELSE
|
|
<TELL
|
|
"Your hand won't pass over the chalk line." CR>)>)>)
|
|
(<RARG? <>>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"For want of a better word, call this a pentagram. It isn't
|
|
particularly pentagonal, but it's an odd shape chalked on the floor,
|
|
and it's roughly pentagonal." CR>)
|
|
(<P? PUT * PENTAGRAM>
|
|
<COND (<IDROP>
|
|
<MOVE ,PRSO ,PENTAGRAM>
|
|
<TELL "Dropped." CR>)
|
|
(ELSE <RTRUE>)>)
|
|
(<VERB? BOARD>
|
|
<MOVE ,PLAYER ,PENTAGRAM>
|
|
<CROSS-PENTAGRAM "into">)
|
|
(<P? POUR (COKE NITROGEN) *>
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
"The pentagram is now almostly entirely effaced." CR>)
|
|
(ELSE
|
|
<TELL
|
|
CTHE ,PRSO " pours on the ground, spreading towards the lines of the
|
|
pentagram. As it reaches the nearest line, it begins to smoke and boil
|
|
away, but never quite touches the chalk." CR>)>)
|
|
(<VERB? RUB MUNG CUT ERASE OPEN>
|
|
<COND (<PRSI? <> ,HANDS ,FEET>
|
|
<TELL
|
|
"You try, but no part of your body will touch the chalk lines." CR>)
|
|
(<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
"You scuff it up some more." CR>)
|
|
(<PRSI? ,KNIFE>
|
|
<FSET ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
"You cut the outer lines of the pentagram. It no longer completely
|
|
encloses you.">
|
|
<PROF-REACTS>)
|
|
(<OR <FSET? ,PRSI ,WEAPONBIT>
|
|
<FSET? ,PRSI ,TOOLBIT>>
|
|
<TELL
|
|
CTHE ,PRSI " passes over the chalk line, but doesn't have any effect on
|
|
it." CR>)
|
|
(ELSE
|
|
<TELL
|
|
CTHE ,PRSI " doesn't even touch the chalk line." CR>)>)
|
|
(<VERB? CLOSE>
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
S "You don't have " "a piece of chalk to close it with. Besides, you don't
|
|
know the incantation." CR>)>)>)>>
|
|
|
|
<ROUTINE CROSS-PENTAGRAM (DIR)
|
|
<TELL
|
|
"You get " .DIR " the pentagram, being careful not to further scuff the
|
|
chalk." CR>>
|
|
|
|
<ROUTINE PROF-REACTS ()
|
|
<COND (,TIED-UP?
|
|
<TELL
|
|
" The professor sees what you've done out of the corner of his eye.">
|
|
<COND (<G? ,TIED-UP? 2>
|
|
<TELL
|
|
" He stares, horrified. \"Stop, don't move!\" he says between verses of
|
|
the chant. The chant takes on a pleading tone.">)
|
|
(ELSE
|
|
<ROB ,PLAYER <>>
|
|
<FCLEAR ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
" He quickly slides over and redraws the pentagram. This time he performs
|
|
a thorough search, removing all your possessions, tut-tutting all the
|
|
while.">)>)>
|
|
<CRLF>>
|
|
|
|
<ROUTINE ALCHEMY-DEPT-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"This office is clinically clean, shiny, and modern. It looks like
|
|
something out of a science fiction movie. ">
|
|
<COND (<FSET? ,ALCHEMY-DOOR ,OPENBIT>
|
|
<TELL "An open">)
|
|
(ELSE <TELL "A closed">)>
|
|
<TELL " door to the north leads
|
|
back into the corridor and an archway opens to the south." CR>)
|
|
(<RARG? ENTER>
|
|
<COND (<AND <EQUAL? ,OHERE ,CHEMISTRY-BLDG>
|
|
<NOT ,PROF-DEAD?>>
|
|
<FCLEAR ,ALCHEMY-DOOR ,LOCKED>
|
|
<FCLEAR ,ALCHEMY-DOOR ,OPENBIT>)>)>>
|
|
|
|
<ROOM ALCHEMY-LAB
|
|
(IN ROOMS)
|
|
(DESC "Lab")
|
|
(NORTH PER ALCHEMY-LAB-EXIT)
|
|
(DOWN PER ALCHEMY-LAB-DOWN-EXIT)
|
|
(GLOBAL ARCHWAY ALCHEMY-TRAP-DOOR OUTLET LAB)
|
|
(ACTION ALCHEMY-LAB-F)>
|
|
|
|
<ROUTINE ALCHEMY-LAB-DOWN-EXIT ()
|
|
<COND (<AND ,LAB-BENCH-MOVED?
|
|
<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>>
|
|
<MOVE ,WINNER ,HERE>
|
|
,UNDER-ALCHEMY-LAB)
|
|
(,LAB-BENCH-MOVED?
|
|
<TELL "The trapdoor bars your way." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<TELL "There is no obvious way down from here." CR>
|
|
<RFALSE>)>>
|
|
|
|
<ROUTINE ALCHEMY-LAB-EXIT ()
|
|
<COND (,TIED-UP?
|
|
<COND (<FSET? ,PENTAGRAM ,RMUNGBIT>
|
|
<TELL
|
|
"You find the archway barred by a force you can't push through." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You find it very hard to move. Your feet reach the chalk line and then
|
|
seem to meet resistance, though there is nothing there but the chalk." CR>)>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<MOVE ,WINNER ,HERE>
|
|
,ALCHEMY-DEPT)>>
|
|
|
|
<ROUTINE ALCHEMY-LAB-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<COND (<NOT ,PROF-DEAD?>
|
|
<TELL
|
|
"The lab is an ultramodern, fully equipped chemistry lab. Unfortunately,
|
|
or perhaps fortunately, you aren't a chemistry major, so the equipment
|
|
might as well be magical.">)
|
|
(ELSE
|
|
<TELL
|
|
"The lab is a shambles. It looks like something red and sticky has
|
|
been spread over the walls, ceiling, and floor. Much of the equipment,
|
|
particularly that near the center of the room, has been destroyed.">)>
|
|
<COND (,LAB-BENCH-MOVED?
|
|
<TELL " There is ">
|
|
<AN-OPEN/CLOSED ,ALCHEMY-TRAP-DOOR>
|
|
<TELL " in the floor." CR>)
|
|
(ELSE <CRLF>)>)
|
|
(<RARG? BEG>
|
|
<COND (<P? EXAMINE GROUND>
|
|
<NEW-PRSO ,PENTAGRAM>
|
|
<RTRUE>)
|
|
(<VERB? EXAMINE READ LOOK-INSIDE
|
|
ASK-ABOUT TELL-ME-ABOUT TELL-ABOUT>
|
|
<RFALSE>)
|
|
(<AND <IN? ,PROFESSOR ,HERE>
|
|
<EQUAL? ,VAT ,PRSO ,PRSI>>
|
|
|
|
<COND (<L? ,TIED-UP? 3>
|
|
<TELL
|
|
CTHE ,PROFESSOR ", none too gently, prevents you. \"Plenty of time for that
|
|
later,\" he cautions you." CR>)
|
|
(<EQUAL? ,PERFORM-DEPTH 1>
|
|
<TELL
|
|
CTHE ,PROFESSOR " watches you in horror, stumbling over his ritual." CR CR>
|
|
<RFALSE>)>)>)>>
|
|
|
|
<OBJECT ALCHEMY-TRAP-DOOR
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "metal plate")
|
|
(SYNONYM TRAPDOOR DOOR PLATE)
|
|
(ADJECTIVE TRAP METAL)
|
|
(FLAGS DOORBIT NDESCBIT OPENABLE)
|
|
(ACTION ALCHEMY-TRAP-DOOR-F)>
|
|
|
|
<GLOBAL IT-LIFTS-BUT "It lifts a few inches, but then hits ">
|
|
|
|
<ROUTINE ALCHEMY-TRAP-DOOR-F ()
|
|
<COND (<HERE? ,ALCHEMY-LAB>
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
,IT-LOOKS-LIKE "a hinged metal plate. There is a handle on one edge." CR>)
|
|
(<VERB? THROUGH>
|
|
<DO-WALK ,P?DOWN>)
|
|
(<VERB? OPEN RAISE>
|
|
<COND (<NOT ,LAB-BENCH-MOVED?>
|
|
<TELL
|
|
,IT-LIFTS-BUT "the lab bench and goes no further." CR>)
|
|
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
<FSET ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<TELL
|
|
"It swings open easily." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<COND (<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<TELL
|
|
"You see a dark tunnel below." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"Your X-ray eyes appear to be nonfunctional today." CR>)>)>)
|
|
(ELSE
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
,IT-LOOKS-LIKE "a metal plate in the ceiling." CR>)
|
|
(<VERB? THROUGH>
|
|
<DO-WALK ,P?UP>)
|
|
(<VERB? OPEN RAISE PUSH>
|
|
<COND (<NOT ,LAB-BENCH-MOVED?>
|
|
<TELL
|
|
,IT-LIFTS-BUT "something and goes no
|
|
further." CR>)
|
|
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
<FSET ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<TELL
|
|
"It pushes open easily." CR>)>)
|
|
(<VERB? LOOK-INSIDE LOOK-BEHIND>
|
|
<COND (<NOT ,LIT>
|
|
<TELL ,TOO-DARK>)
|
|
(<FSET? ,ALCHEMY-TRAP-DOOR ,OPENBIT>
|
|
<TELL
|
|
"You see a laboratory." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"Pushing the plate up as far as you can, you can see part of a workroom or
|
|
lab of some kind." CR>)>)>)>>
|
|
|
|
<OBJECT STUDENTS
|
|
(IN GLOBAL-OBJECTS)
|
|
(DESC "missing students")
|
|
(SYNONYM STUDENTS TOOLS)
|
|
(ADJECTIVE MISSING GRADUATE GRAD)
|
|
(FLAGS NDESCBIT PERSON)
|
|
(ACTION STUDENTS-F)>
|
|
|
|
<ROUTINE STUDENTS-F ()
|
|
<GLOBAL-URCHINS-F ,STUDENTS>>
|
|
|
|
<OBJECT GLOBAL-URCHINS
|
|
(IN GLOBAL-OBJECTS)
|
|
(DESC "missing urchins")
|
|
(SYNONYM URCHIN KIDS CHILDREN)
|
|
(ADJECTIVE MISSING)
|
|
(FLAGS NDESCBIT PERSON)
|
|
(ACTION GLOBAL-URCHINS-F)>
|
|
|
|
<ROUTINE YOU-SEE-NO (OBJ)
|
|
<TELL
|
|
"You see no " D .OBJ "." CR>>
|
|
|
|
<ROUTINE GLOBAL-URCHINS-F ("OPT" (OBJ <>))
|
|
<COND (<NOT .OBJ> <SET OBJ ,GLOBAL-URCHINS>)>
|
|
<COND (<OR <WINNER? .OBJ>
|
|
<VERB? TELL SAY HELLO>>
|
|
<TELL
|
|
"There is no reply." CR>
|
|
<COND (<PRSO? .OBJ>
|
|
<END-QUOTE>
|
|
<RFATAL>)
|
|
(ELSE <RTRUE>)>)
|
|
(<OR <HOSTILE-VERB?>
|
|
<VERB? SHOW SEARCH FIND>
|
|
<P? (EXAMINE TELL-ABOUT) .OBJ>>
|
|
<YOU-SEE-NO .OBJ>)
|
|
(<VERB? HELP UNTIE>
|
|
<BEYOND-HELP>)
|
|
(<P? WHAT (URCHINS GLOBAL-URCHINS)>
|
|
<TELL
|
|
"That's what students call the local children who sometimes hang
|
|
around Tech. They are usually blamed when anything is stolen,
|
|
generally mistrusted, and often booted off campus by the campus
|
|
police." CR>)>>
|
|
|
|
<ROUTINE BEYOND-HELP ()
|
|
<TELL "They ">
|
|
<COND (<AND <EQUAL? ,PRSO ,STUDENTS> ,SEEN-PIT?>
|
|
<TELL "are">)
|
|
(ELSE <TELL "may be">)>
|
|
<TELL " beyond help." CR>>
|
|
|
|
<OBJECT LOVECRAFT
|
|
(IN ALCHEMY-LAB)
|
|
(DESC "Alchemy Department computer")
|
|
(SYNONYM LOVECRAFT PC COMPUTER SCREEN)
|
|
(ADJECTIVE ALCHEMY DEPART)
|
|
(FLAGS READBIT AN)
|
|
(TEXT "Written with a marking pen on the display is \"Lovecraft.\"")
|
|
(SIZE 30)
|
|
(ACTION LOVECRAFT-F)>
|
|
|
|
<ROUTINE LOVECRAFT-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This machine looks just like the ones in the terminal room. ">
|
|
<TELL <GETP ,PRSO ,P?TEXT>>
|
|
<COND (<NOT <FSET? ,LOVECRAFT ,POWERBIT>>
|
|
<TELL " It's turned off.">)>
|
|
<CRLF>)
|
|
(<VERB? WHO>
|
|
<TELL
|
|
"I suggest you consult your local library or any practitioner of
|
|
the occult arts." CR>)
|
|
(<VERB? LAMP-ON>
|
|
<COND (<NOT <FSET? ,LOVECRAFT ,POWERBIT>>
|
|
<FSET ,LOVECRAFT ,POWERBIT>
|
|
<TELL
|
|
"You turn the machine on, it performs a quick self-check, and then displays
|
|
a message on the screen: "
|
|
S "\"Unable to boot because: No disk inserted. Please
|
|
insert a dismountable disk.\"">
|
|
<COND (<IN? ,PROFESSOR ,HERE>
|
|
<TELL
|
|
" The professor, who has been watching you, smiles.">)>
|
|
<CRLF>)
|
|
(ELSE
|
|
<TELL
|
|
"It's on, for what little good that will do you." CR>)>)
|
|
(<VERB? LAMP-OFF>
|
|
<COND (<FSET? ,LOVECRAFT ,POWERBIT>
|
|
<COMPUTER-POWERS-OFF>)
|
|
(ELSE
|
|
<ITS-ALREADY-X "off">)>)>>
|
|
|
|
<OBJECT RING
|
|
(IN PROFESSOR)
|
|
(DESC "brass hyrax")
|
|
(SYNONYM RING HYRAX)
|
|
(ADJECTIVE BRASS GOLD)
|
|
(FLAGS TAKEBIT TRYTAKEBIT TOUCHBIT)
|
|
(ACTION RING-F)>
|
|
|
|
<ROUTINE RING-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The G.U.E. Tech class ring is a gold ring depicting a hyrax
|
|
eating a twig. Such rings are familiarly known as \"brass
|
|
hyraxes.\"" CR>)
|
|
(<AND <VERB? TAKE-OFF>
|
|
<FSET? ,GLOVES ,WEARBIT>>
|
|
<TELL
|
|
,YOU-HAVE-TO "take off your gloves first." CR>)
|
|
(<VERB? WEAR>
|
|
<COND (<FSET? ,GLOVES ,WEARBIT>
|
|
<TELL
|
|
CTHE ,RING " won't go on over the gloves." CR>)
|
|
(<EQUAL? <IWEAR> T>
|
|
<TELL
|
|
"It fits surprisingly well." CR>)
|
|
(ELSE <RTRUE>)>)>>
|
|
|
|
<OBJECT PROFESSOR
|
|
(IN ALCHEMY-DEPT)
|
|
(DESC "professor")
|
|
(SYNONYM PROFESSOR ALCHEMY MAN PROF)
|
|
(FLAGS PERSON OPENBIT CONTBIT SEARCHBIT)
|
|
(VALUE 5)
|
|
(CONTFCN PROFESSOR-F)
|
|
(DESCFCN PROFESSOR-DESC)
|
|
(ACTION PROFESSOR-F)>
|
|
|
|
<ROUTINE PROFESSOR-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<TELL CTHE ,PROFESSOR " is ">
|
|
<COND (<G? ,TIED-UP? 2>
|
|
<TELL "performing a strange ritual ">)>
|
|
<TELL "here.">
|
|
<RFATAL>)>>
|
|
|
|
<ROUTINE PROFESSOR-F ("OPT" (RARG <>))
|
|
<COND (<RARG? CONTAINER>
|
|
<COND (<OR <VERB? EXAMINE TAKE SHOW WEAR>
|
|
<AND <WINNER? ,PROFESSOR>
|
|
<VERB? GIVE>>>
|
|
<COND (<PRSO? ,RING>
|
|
<SETG PROF-MAD? T>
|
|
<TELL
|
|
"He thrusts his hand into his pocket." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"\"You'll get it. All in good time.\"" CR>)>)>)
|
|
(<WINNER? ,PROFESSOR>
|
|
<COND (<VERB? GIVE> <RFALSE>)
|
|
(<VERB? TELL-ME-ABOUT>
|
|
<COND (<G? ,TIED-UP? 2>
|
|
<TELL
|
|
CTHE ,PROFESSOR " is intently following his ritual and won't be
|
|
distracted." CR>)
|
|
(<PRSO? ,ODD-PAPER>
|
|
<SETG PROF-MAD? T>
|
|
<TELL
|
|
"\"I don't like your insinuations.\"" CR>)
|
|
(<PRSO? ,RING>
|
|
<TELL
|
|
"\"Just a trinket.\"" CR>)
|
|
(<PRSO? ,LAB>
|
|
<COND (<LAB-ENTER?>
|
|
<CRLF>
|
|
<GOTO ,ALCHEMY-LAB>)
|
|
(ELSE <RTRUE>)>)
|
|
(<PRSO? ,SIGNUP>
|
|
<TELL
|
|
"\"We don't have much lab space. Everyone has to sign up for lab time.\"" CR>)
|
|
(<PRSO? ,STUDENTS>
|
|
<TELL
|
|
"\"I don't know anything about them. Tech is high-pressure.
|
|
Some people can't take it.\"" CR>)
|
|
(<PRSO? ,NOTE>
|
|
<COND (,PROF-SEEN-NOTE?
|
|
<TELL
|
|
"\"Obviously a nut case. He knew he was going to
|
|
flunk out, and this is clearly an attempt to put the blame somewhere
|
|
else.\"" CR>)
|
|
(ELSE
|
|
<TELL
|
|
"\"What note is that?\" he asks, nervously." CR>)>)
|
|
(<PRSO? ,VAT>
|
|
<TELL
|
|
"\"Just a little experiment of mine. The label is just a joke.\"" CR>)
|
|
(<PRSO? ,LOVECRAFT>
|
|
<TELL
|
|
"\"The machines in our department have names like that. Lovecraft
|
|
wrote some stories about alchemy. We've got Paracelsus, Dunsany,
|
|
and a couple of others, too.\"" CR>)>)
|
|
(,TIED-UP?
|
|
<TELL
|
|
,NO-RESPONSE CR>)
|
|
(ELSE
|
|
<TELL
|
|
CTHE ,PROFESSOR " looks at you in much the way a cat looks at
|
|
a mouse." CR>)>)
|
|
(<AND ,PROF-DEAD?
|
|
<NOT <ABSTRACT-VERB?>>>
|
|
<TELL CTHE ,PROFESSOR " is no more." CR>)
|
|
(<VERB? EXAMINE>
|
|
<TELL
|
|
"The man looks like a professor. He's wearing a white lab coat, rather
|
|
stained with chemicals, and a G.U.E. Tech class ring. ">
|
|
<COND (<HERE? ,ALCHEMY-DEPT>
|
|
<TELL
|
|
"He watches you with an ambiguously predatory air." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"He's working on something at the lab bench in front of him." CR>)>)
|
|
;(<P? ASK-FOR PROFESSOR>
|
|
<PERFORM ,V?TAKE ,PRSI>
|
|
<RTRUE>)
|
|
(<P? (SHOW GIVE) * PROFESSOR>
|
|
<COND (<G? ,TIED-UP? 2>
|
|
<TELL
|
|
CTHE ,PROFESSOR " is nervously following his ritual." CR>)
|
|
(<PRSO? ,SMOOTH-STONE ,HAND ,KNIFE>
|
|
<SETG PROF-MAD? T>
|
|
<MOVE ,PRSO ,PROFESSOR>
|
|
<TELL
|
|
"\"Very interesting! I'll take that!\"" CR>)
|
|
(<PRSO? ,NOTE>
|
|
<SETG PROF-SEEN-NOTE? T>
|
|
<SETG PROF-MAD? T>
|
|
<MOVE ,NOTE ,PROFESSOR>
|
|
<TELL
|
|
"He reads it carefully. \"What drivel! This just confirms my suspicions.
|
|
He had clearly gone over the edge. Drug use, drinking, insanity.
|
|
It's only too bad that I didn't realize what was happening. I might have
|
|
helped him.\"" CR>)
|
|
(ELSE
|
|
<TELL
|
|
"He doesn't seem interested." CR>)>)
|
|
(<VERB? THROW> <RFALSE>)
|
|
(<HOSTILE-VERB?>
|
|
<COND (<G? ,TIED-UP? 6>
|
|
<TELL
|
|
"The mist protects him, almost possessively." CR>)
|
|
(<G? ,TIED-UP? 2>
|
|
<TELL
|
|
CTHE ,PROFESSOR ", in his pentagram, is invulnerable." CR>)
|
|
(ELSE
|
|
<SETG PROF-MAD? T>
|
|
<TELL
|
|
"With contemptuous ease, the professor prevents you.">
|
|
<COND (<AND ,PRSI <FSET? ,PRSI ,WEAPONBIT>>
|
|
<MOVE ,PRSI ,PROFESSOR>
|
|
<TELL
|
|
" \"I'll take this,\" he says. \"Just for safekeeping.\" He makes "
|
|
THE ,PRSI " disappear.">)>
|
|
<CRLF>)>)>>
|
|
|
|
<OBJECT LAB-BENCH
|
|
(IN ALCHEMY-LAB)
|
|
(DESC "lab bench")
|
|
(SYNONYM BENCH)
|
|
(ADJECTIVE LAB)
|
|
(FLAGS SURFACEBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(CAPACITY 200)
|
|
(ACTION LAB-BENCH-F)>
|
|
|
|
<ROUTINE LAB-BENCH-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The bench is a chemistry lab bench. It has a marble top, and casters
|
|
at each corner. Various equipment litters the bench, none of which you
|
|
recognize">
|
|
<COND (<FIRST? ,LAB-BENCH>
|
|
<TELL
|
|
", but the lab bench also contains ">
|
|
<DESCRIBE-REST ,LAB-BENCH>)>
|
|
<TELL ,PERIOD>)
|
|
(<VERB? LOOK-UNDER>
|
|
<COND (<NOT ,LAB-BENCH-MOVED?>
|
|
<TELL
|
|
"You can see a metal plate beneath the bench. Only part
|
|
of it is visible." CR>)
|
|
(ELSE
|
|
<TELL "Nothing but concrete floor there." CR>)>)
|
|
(<VERB? MOVE PUSH>
|
|
<COND (<NOT ,LAB-BENCH-MOVED?>
|
|
<SETG LAB-BENCH-MOVED? T>
|
|
<TELL
|
|
"It's heavy, but it moves, revealing a hinged metal trapdoor beneath." CR>)
|
|
(ELSE
|
|
<TELL "It rolls a little." CR>)>)>>
|
|
|
|
<GLOBAL LAB-BENCH-MOVED? <>>
|
|
|
|
<OBJECT VAT
|
|
(IN LAB-BENCH)
|
|
(DESC "vat")
|
|
(SYNONYM VAT LABEL)
|
|
(ADJECTIVE VAT BUBBLING GLASS PYREX STICKY)
|
|
(FLAGS TAKEBIT READBIT OPENBIT CONTBIT TRANSBIT SEARCHBIT)
|
|
(CAPACITY 20)
|
|
(SIZE 20)
|
|
(TEXT
|
|
"The text is a long chemical-sounding name typed on a
|
|
label affixed to the container. Below is written in pencil
|
|
\"Elixir of Life.\"")
|
|
(CONTFCN VAT-CONT-F)
|
|
(ACTION VAT-F)>
|
|
|
|
<ROUTINE VAT-CONT-F (RARG)
|
|
<COND (<VERB? TAKE>
|
|
<COND (<PRSO? ,ELIXIR>
|
|
<TELL
|
|
,YOU-CANT "take it, it's a liquid." CR>
|
|
<RTRUE>)
|
|
(<EQUAL? <ITAKE> <> ,M-FATAL>
|
|
<RTRUE>)
|
|
(<AND <PRSO? ,HAND>
|
|
<FSET? ,HAND ,PERSON>>
|
|
<TELL
|
|
"You grab the wiggling hand and draw it forth, newly animated, from the
|
|
vat.">)
|
|
(ELSE
|
|
<TELL
|
|
"You reach into the liquid, fish around rapidly due to the
|
|
horrible feel of the chemicals, and draw out " THE ,PRSO ".">)>
|
|
<TELL
|
|
" As it emerges, the elixir flows off.">
|
|
<COND (<AND <PRSO? ,HAND>
|
|
<FSET? ,HAND ,PERSON>>
|
|
<SETG SCORE <+ ,SCORE ,HAND-ANIMATED-SCORE>>
|
|
<SETG HAND-ANIMATED-SCORE 0>
|
|
<TELL
|
|
" The hand scuttles up your arm and perches quietly on your
|
|
shoulder.">)>
|
|
<CRLF>)>>
|
|
|
|
<ROUTINE VAT-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
S "This is a large ""(a couple of liters, at least) glass or pyrex vat. It
|
|
has a label stuck to it. ">
|
|
<DESCRIBE-SENT ,VAT>
|
|
<CRLF>)
|
|
(<AND <P? PUT * VAT>
|
|
<IN? ,ELIXIR ,VAT>>
|
|
<COND (<PRSO? ,DEAD-RAT>
|
|
<REMOVE ,DEAD-RAT>
|
|
<TELL
|
|
"You dip the dead rat into the elixir. Almost immediately it convulses,
|
|
begins to flop around in the liquid, and then springs out onto the
|
|
floor! It scurries away before you can catch it." CR>)
|
|
(<PRSO? ,HAND>
|
|
<MOVE ,HAND ,VAT>
|
|
<COND (<FSET? ,HAND ,PERSON>
|
|
<TELL
|
|
"Nothing unusual happens (compared to the first time, anyway)." CR>)
|
|
(ELSE
|
|
<QUEUE I-ANIMATE-HAND -1>
|
|
<TELL
|
|
"When you dip the mummified hand in the liquid, the elixir begins to
|
|
bubble furiously. You can't really see the hand, except when
|
|
a finger pokes up every so often." CR>)>)
|
|
(<PRSO-TOO-BIG?>
|
|
<TELL ,NO-ROOM CR>)
|
|
(ELSE
|
|
<FCLEAR ,PRSO ,WEARBIT>
|
|
<MOVE ,PRSO ,VAT>
|
|
<TELL
|
|
"You drop " THE ,PRSO " into the vat, where it is completely covered
|
|
by the tarry liquid." CR>)>)
|
|
(<VERB? OPEN CLOSE>
|
|
<TELL-YUKS>)
|
|
(<P? POUR VAT>
|
|
<NEW-PRSO ,ELIXIR>
|
|
<RTRUE>)
|
|
(<VERB? REACH-IN>
|
|
<TELL
|
|
"You feel the thick tarry liquid." CR>)>>
|
|
|
|
<OBJECT ELIXIR
|
|
(IN VAT)
|
|
(DESC "tarry liquid")
|
|
(SYNONYM LIQUID ELIXIR LIFE)
|
|
(ADJECTIVE TARRY BLACK ELIXIR)
|
|
(FLAGS TAKEBIT TRYTAKEBIT)
|
|
(ACTION ELIXIR-F)>
|
|
|
|
<ROUTINE ELIXIR-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The elixir is thick and tarry. Torpid bubbles break the
|
|
surface every so often, though you can find no source of heat to
|
|
produce them." CR>)
|
|
(<VERB? DRINK>
|
|
<TELL
|
|
"It would be like drinking road tar." CR>)
|
|
(<VERB? RUB>
|
|
<TELL
|
|
"You touch the liquid with your finger. It's very unpleasant.
|
|
The liquid is stingingly hot. You pull your finger out, and
|
|
it is some time before it feels normal again." CR>)
|
|
(<P? TAKE * <>>
|
|
<COND (<IN? ,ELIXIR ,VAT>
|
|
<NEW-PRSO ,VAT>
|
|
<RTRUE>)>)
|
|
(<P? (POUR DROP THROW) ELIXIR>
|
|
<TELL
|
|
"Remember those ketchup commercials? Remember how slow the winning
|
|
ketchup was? Well, this is a lot slower. The liquid has a very
|
|
high surface tension, and pours so slowly that you'd be here all night
|
|
waiting for it to finish." CR>)
|
|
(<P? PUT * ,ELIXIR>
|
|
<NEW-PRSI ,VAT>)>>
|
|
|
|
<GLOBAL HAND-ANIMATED-SCORE 5>
|
|
|
|
<GLOBAL ANIMATION-COUNT 0>
|
|
|
|
<ROUTINE I-ANIMATE-HAND ("AUX" (HERE? <>))
|
|
<COND (<NOT <IN? ,HAND ,VAT>>
|
|
<DEQUEUE I-ANIMATE-HAND>
|
|
<RFALSE>)>
|
|
<COND (<EQUAL? <META-LOC ,VAT> ,HERE>
|
|
<SET HERE? T>)>
|
|
<COND (<OR <G? <SETG ANIMATION-COUNT <+ ,ANIMATION-COUNT 1>> 2>
|
|
<FSET? ,HAND ,PERSON>>
|
|
<FSET ,HAND ,PERSON>
|
|
<COND (.HERE?
|
|
<TELL CR
|
|
"The hand is trying to crawl out of the vat.">
|
|
<COND (<NOT <FSET? ,HAND ,PERSON>>
|
|
<TELL
|
|
" The fingers flex and grab at the slippery sides, but in vain.">)>
|
|
<CRLF>)>)
|
|
(<EQUAL? ,ANIMATION-COUNT 1>
|
|
<COND (.HERE?
|
|
<TELL CR
|
|
"The hand bobs to the surface. It's odd, but it looked like one of the
|
|
fingers moved." CR>)>)
|
|
(ELSE
|
|
<COND (.HERE?
|
|
<TELL CR
|
|
"The hand splashes to the surface. The fingers are moving!" CR>)>)>>
|
|
|
|
<ROOM ENGINEERING-BLDG
|
|
(IN ROOMS)
|
|
(DESC "Engineering Building")
|
|
(LDESC
|
|
"This building extends a long way south from the Infinite Corridor. It
|
|
too is full of closed, locked offices.")
|
|
(EAST "The offices are all closed, locked, and dark.")
|
|
(WEST "The offices are all closed, locked, and dark.")
|
|
(SOUTH "The offices are all closed, locked, and dark.")
|
|
(NORTH TO INF-1)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL OFFICE-DOOR)>
|
|
|
|
<ROOM INF-1
|
|
(IN ROOMS)
|
|
(DESC "Infinite Corridor")
|
|
(SIZE 1)
|
|
(WEST TO MASS-AVE)
|
|
(OUT TO MASS-AVE)
|
|
(EAST PER WAXER-EXIT) ;INF-2
|
|
(NORTH TO AERO-LOBBY)
|
|
(SOUTH TO ENGINEERING-BLDG)
|
|
(GLOBAL POWER-CORD GLOBAL-MAINTENANCE-MAN GLOBAL-FLOOR-WAXER
|
|
OUTSIDE-DOOR OFFICE-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION INF-F)>
|
|
|
|
<ROOM INF-2
|
|
(IN ROOMS)
|
|
(DESC "Infinite Corridor")
|
|
(SIZE 2)
|
|
(WEST TO INF-1)
|
|
(EAST PER WAXER-EXIT) ;INF-3
|
|
(NORTH "The offices are all closed, locked, and dark.")
|
|
(SOUTH "The offices are all closed, locked, and dark.")
|
|
(GLOBAL POWER-CORD GLOBAL-FLOOR-WAXER GLOBAL-MAINTENANCE-MAN
|
|
OFFICE-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION INF-F)>
|
|
|
|
<ROOM INF-3
|
|
(IN ROOMS)
|
|
(DESC "Infinite Corridor")
|
|
(SIZE 3)
|
|
(WEST TO INF-2)
|
|
(EAST PER WAXER-EXIT) ;INF-4
|
|
(UP TO GREAT-DOME)
|
|
(SOUTH PER GREAT-COURT-EXIT)
|
|
(OUT PER GREAT-COURT-EXIT)
|
|
(GLOBAL POWER-CORD GLOBAL-FLOOR-WAXER GLOBAL-MAINTENANCE-MAN
|
|
OFFICE-DOOR OUTSIDE-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION INF-F)>
|
|
|
|
<GLOBAL DOOR-WARNING <>>
|
|
|
|
<ROUTINE GREAT-COURT-EXIT ()
|
|
<COND (<WINNER? ,URCHIN> <RFALSE>)
|
|
(,DOOR-WARNING ,GREAT-COURT)
|
|
(ELSE
|
|
<SETG DOOR-WARNING T>
|
|
<TELL
|
|
"Remember, this is one of the doors that's always locked at night.
|
|
You won't be able to get back in if you go out." CR>
|
|
<RFALSE>)>>
|
|
|
|
<ROOM INF-4
|
|
(IN ROOMS)
|
|
(DESC "Infinite Corridor")
|
|
(SIZE 4)
|
|
(WEST TO INF-3)
|
|
(EAST PER WAXER-EXIT) ;INF-5
|
|
(NORTH "The offices are all closed, locked, and dark.")
|
|
(SOUTH "The offices are all closed, locked, and dark.")
|
|
(GLOBAL POWER-CORD GLOBAL-FLOOR-WAXER GLOBAL-MAINTENANCE-MAN OFFICE-DOOR)
|
|
(FLAGS ONBIT)
|
|
(ACTION INF-F)>
|
|
|
|
<ROOM INF-5
|
|
(IN ROOMS)
|
|
(SIZE 5)
|
|
(DESC "Infinite Corridor")
|
|
(WEST TO INF-4)
|
|
(NORTH PER WAXER-EXIT) ;NUTRITION-BLDG
|
|
(SOUTH PER WAXER-EXIT) ;CHEMISTRY-BLDG
|
|
(GLOBAL POWER-CORD GLOBAL-FLOOR-WAXER GLOBAL-MAINTENANCE-MAN)
|
|
(FLAGS ONBIT)
|
|
(ACTION INF-F)>
|
|
|
|
<ROUTINE WAXER-EXIT ()
|
|
<COND (<WINNER? ,URCHIN> <INF-EAST-EXIT <LOC ,URCHIN>>)
|
|
(<AND <IN? ,FLOOR-WAXER ,HERE>
|
|
<IN? ,MAINTENANCE-MAN ,FLOOR-WAXER>>
|
|
<THIS-IS-IT ,MAINTENANCE-MAN>
|
|
<COND (,CORD-SEVERED?
|
|
<MAINT-DESCENDS>
|
|
<COND (<IN? ,FLOOR-WAX <LOC ,MAINTENANCE-MAN>>
|
|
<INF-EAST-EXIT ,HERE>)>)
|
|
(ELSE
|
|
<TELL
|
|
"In a deft maneuver, " THE ,MAINTENANCE-MAN " steers the " 'FLOOR-WAXER " into
|
|
your path, blocking your advance." CR>)>
|
|
<RFALSE>)
|
|
(<AND ,CORD-SEVERED?
|
|
<IN? ,MAINTENANCE-MAN ,HERE>
|
|
<FSET? ,MAINTENANCE-MAN ,PERSON>
|
|
<NOT <IN? ,FLOOR-WAX ,HERE>>>
|
|
<THIS-IS-IT ,MAINTENANCE-MAN>
|
|
<TELL
|
|
CTHE ,MAINTENANCE-MAN S " lurches toward you" ", grasping and panting. There is
|
|
no way to go around him." CR>
|
|
<RFALSE>)
|
|
(ELSE
|
|
<INF-EAST-EXIT ,HERE>)>>
|
|
|
|
<ROUTINE INF-EAST-EXIT (L)
|
|
<COND (<EQUAL? .L ,INF-1>
|
|
,INF-2)
|
|
(<EQUAL? .L ,INF-2>
|
|
,INF-3)
|
|
(<EQUAL? .L ,INF-3>
|
|
,INF-4)
|
|
(<EQUAL? .L ,INF-4>
|
|
,INF-5)
|
|
(<EQUAL? .L ,INF-5>
|
|
<COND (<EQUAL? ,P-WALK-DIR ,P?NORTH>
|
|
,NUTRITION-BLDG)
|
|
(ELSE
|
|
,CHEMISTRY-BLDG)>)>>
|
|
|
|
<ROUTINE INF-F (RARG "AUX" L)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"The so-called infinite corridor runs from east to west in the main
|
|
campus building.">
|
|
<COND (<HERE? ,INF-1>
|
|
<TELL " This is the west end.">)
|
|
(<HERE? ,INF-2 ,INF-3 ,INF-4>
|
|
<TELL " The corridor extends both ways from here.">)
|
|
(<HERE? ,INF-5>
|
|
<TELL " This is the east end.">)>
|
|
<COND (<HERE? ,INF-2 ,INF-4>
|
|
<TELL
|
|
" Many closed and locked offices are to the north and south.">)
|
|
(<HERE? ,INF-1>
|
|
<TELL
|
|
" Side corridors lead north and south, and a set of doors leads west into
|
|
the howling blizzard.">)
|
|
(<HERE? ,INF-3>
|
|
<TELL
|
|
" A stairway leads up, and a door leads out to the Great Court.">)
|
|
(<HERE? ,INF-5>
|
|
<TELL
|
|
" The corridor branches north and south here.">)>
|
|
<CRLF>)
|
|
(<RARG? END>
|
|
<COND (<AND <NOT <IN? ,FLOOR-WAXER ,HERE>>
|
|
<VERB? WALK LOOK>>
|
|
<TELL CR
|
|
S "There is a ""largish machine ">
|
|
<COND (<NOT ,CORD-SEVERED?>
|
|
<TELL "being operated ">)>
|
|
<TELL ,DOWN-THE-HALL>
|
|
<FLOOR-WAXER-DIRECTION>
|
|
<CRLF>)>)
|
|
(<RARG? ENTER>
|
|
<SETG DOOR-WARNING <>>
|
|
<COND (<EQUAL? ,OHERE ,INF-1 ,INF-2 ,INF-3 ,INF-4 ,INF-5>)
|
|
(<AND <NOT <FSET? ,HERE ,TOUCHBIT>>
|
|
<NOT <QUEUE I-WAXER-MOVES 10 T>>>
|
|
T)
|
|
(<AND <IN? ,MAINTENANCE-MAN ,HERE>
|
|
<FSET? ,MAINTENANCE-MAN ,PERSON>>
|
|
<QUEUE I-MAINT-ATTACK -1>)>)>>
|
|
|
|
<ROUTINE FLOOR-WAXER-DIRECTION ("AUX" L)
|
|
<SET L <LOC ,FLOOR-WAXER>>
|
|
<COND (<OR <HERE? ,INF-1>
|
|
<AND <HERE? ,INF-2>
|
|
<EQUAL? .L ,INF-3 ,INF-4 ,INF-5>>
|
|
<AND <HERE? ,INF-3>
|
|
<EQUAL? .L ,INF-4 ,INF-5>>
|
|
<AND <HERE? ,INF-4>
|
|
<EQUAL? .L ,INF-5>>>
|
|
<TELL "east.">)
|
|
(ELSE
|
|
<TELL "west.">)>>
|
|
|
|
<OBJECT GLOBAL-MAINTENANCE-MAN
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "maintenance man")
|
|
(SYNONYM MAN)
|
|
(ADJECTIVE MAINTENANCE)
|
|
(FLAGS PERSON)
|
|
(GENERIC GENERIC-MAINTENANCE-MAN-F)
|
|
(ACTION GLOBAL-MAINTENANCE-MAN-F)>
|
|
|
|
<ROUTINE GENERIC-MAINTENANCE-MAN-F ()
|
|
<COND (<EQUAL? <META-LOC ,MAINTENANCE-MAN> ,HERE>
|
|
,MAINTENANCE-MAN)
|
|
(ELSE
|
|
,GLOBAL-MAINTENANCE-MAN)>>
|
|
|
|
<ROUTINE GLOBAL-MAINTENANCE-MAN-F ()
|
|
<COND (<VERB? EXAMINE FIND>
|
|
<COND (<LOC ,MAINTENANCE-MAN>
|
|
<MAINTENANCE-MAN-F>)
|
|
(ELSE
|
|
<YOU-SEE-NO ,MAINTENANCE-MAN>)>)
|
|
(<AND <P? POUR * GLOBAL-MAINTENANCE-MAN>
|
|
<HERE? ,GREAT-DOME>
|
|
<IN? ,MAINTENANCE-MAN ,INF-3>>
|
|
<RFALSE>)
|
|
(<NOT <ABSTRACT-VERB?>>
|
|
<TELL "He's not here, but he might be soon!" CR>
|
|
<COND (<VERB? TELL>
|
|
<END-QUOTE>)
|
|
(ELSE <RTRUE>)>)>>
|
|
|
|
<OBJECT MAINTENANCE-MAN
|
|
(IN FLOOR-WAXER)
|
|
(DESC "maintenance man")
|
|
(SYNONYM MAN)
|
|
(ADJECTIVE MAINTENANCE)
|
|
(FLAGS PERSON)
|
|
(GENERIC GENERIC-MAINTENANCE-MAN-F)
|
|
(ACTION MAINTENANCE-MAN-F)>
|
|
|
|
<ROUTINE MAINTENANCE-MAN-F ("AUX" W)
|
|
<COND (<WINNER? ,MAINTENANCE-MAN>
|
|
<COND (<NOT <EQUAL? <META-LOC ,MAINTENANCE-MAN> ,HERE>>
|
|
<TELL "He" ,IS-DOWN-THE-HALL>)
|
|
(ELSE
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
"He snarls at you angrily.">)
|
|
(ELSE
|
|
<TELL
|
|
"He replies in a language you do not recognize.">)>
|
|
<TELL " The words are
|
|
guttural and jarring." CR>)>
|
|
<END-QUOTE>)
|
|
(<VERB? EXAMINE>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
CTHE ,MAINTENANCE-MAN " is very annoyed with you." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"He looks tired, bored, almost zombie-like." CR>)>)
|
|
(<VERB? SHOW GIVE>
|
|
<TELL
|
|
"He doesn't react." CR>)
|
|
(<OR <VERB? ATTACK KILL>
|
|
<P? THROW * ,MAINTENANCE-MAN>>
|
|
<COND (<NOT <VERB? THROW>>
|
|
<SET W ,PRSI>)
|
|
(ELSE
|
|
<SET W ,PRSO>)>
|
|
<COND (<OR <VERB? THROW> <EQUAL? .W ,AXE>>
|
|
<MOVE .W <META-LOC ,MAINTENANCE-MAN>>)>
|
|
<COND (<EQUAL? .W <> ,HANDS>
|
|
<TELL
|
|
,YOU-CANT "hurt him with your hands!" CR>)
|
|
(ELSE
|
|
<TELL CTHE .W " ">
|
|
<COND (<IN? ,MAINTENANCE-MAN ,FLOOR-WAXER>
|
|
<COND (<VERB? THROW>
|
|
<TELL
|
|
S "misses by a mile""!" CR>)
|
|
(ELSE
|
|
<TELL
|
|
"can't reach him in " THE ,FLOOR-WAXER "!" CR>)>)
|
|
(<QUEUED? I-MAINT-DISSOLVES>
|
|
<TELL
|
|
S "misses by a mile"" as " THE ,MAINTENANCE-MAN " slips again!" CR>)
|
|
(<EQUAL? .W ,AXE>
|
|
%<IFSOUND
|
|
<SOUNDS ,S-BLOOD>>
|
|
<COND (<VERB? THROW>
|
|
<TELL
|
|
"sails through the air, end over end, and makes a direct hit in">)
|
|
(ELSE
|
|
<TELL
|
|
"chops into">)>
|
|
<TELL
|
|
" his chest, where it sticks. Ed Ames would be proud. The force of the
|
|
blow staggers him a
|
|
bit. He looks down at the axe with a certain perplexity, then pulls it
|
|
free, the wound making a sickening sucking sound." CR>)
|
|
(<EQUAL? .W ,SMOOTH-STONE>
|
|
<TELL
|
|
"hits him right between the eyes. He falls to the ground,
|
|
stunned. There is now what looks like a large burn mark on his forehead.
|
|
He ignores it and rises." CR>)
|
|
(<EQUAL? .W ,NITROGEN>
|
|
<TELL
|
|
"makes a good show, but none actually gets on him." CR>)
|
|
(<FSET? .W ,WEAPONBIT>
|
|
<COND (<OR <VERB? THROW> <EQUAL? .W ,AXE>>
|
|
<TELL
|
|
"sails toward him, but he bats it">)
|
|
(ELSE
|
|
<TELL
|
|
"is pushed">)>
|
|
<TELL " contemptuously aside,
|
|
barely slowing his advance." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"does about as much damage as a piece of thistledown." CR>)>)>)
|
|
(<VERB? WALK-AROUND>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
,YOU-CANT "evade him." CR>)>)>>
|
|
|
|
<GLOBAL WAX-WEST? <>>
|
|
|
|
<ROUTINE I-WAXER-MOVES ("AUX" (L <LOC ,FLOOR-WAXER>) NL TMP)
|
|
<QUEUE I-WAXER-MOVES 5>
|
|
<COND (<AND ,WAX-WEST? <EQUAL? .L ,INF-1>>
|
|
<SETG WAX-WEST? <>>)
|
|
(<AND <NOT ,WAX-WEST?> <EQUAL? .L ,INF-5>>
|
|
<SETG WAX-WEST? T>)>
|
|
<COND (,WAX-WEST?
|
|
<COND (<AND <EQUAL? .L ,INF-3>
|
|
<HERE? ,GREAT-DOME ,TOP-OF-DOME
|
|
,DOME-ROOF ,ON-DOME>>
|
|
<SETG WAX-WEST? <>>
|
|
<RFALSE>)
|
|
(<HERE? .L>
|
|
<SETG WAX-WEST? <>>
|
|
<TELL CR
|
|
CTHE ,FLOOR-WAXER " continues waxing a section of floor nearby. "
|
|
CTHE ,MAINTENANCE-MAN " operating it stares at you suspiciously." CR>
|
|
<RTRUE>)>
|
|
<COND (<EQUAL? .L ,INF-2>
|
|
<SET NL ,INF-1>)
|
|
(<EQUAL? .L ,INF-3>
|
|
<SET NL ,INF-2>)
|
|
(<EQUAL? .L ,INF-4>
|
|
<SET NL ,INF-3>)
|
|
(<EQUAL? .L ,INF-5>
|
|
<SET NL ,INF-4>)>)
|
|
(ELSE
|
|
<COND (<EQUAL? .L ,INF-4>
|
|
<SET NL ,INF-5>)
|
|
(<EQUAL? .L ,INF-3>
|
|
<SET NL ,INF-4>)
|
|
(<EQUAL? .L ,INF-2>
|
|
<SET NL ,INF-3>)
|
|
(<EQUAL? .L ,INF-1>
|
|
<SET NL ,INF-2>)>)>
|
|
<MOVE ,FLOOR-WAXER .NL>
|
|
<COND (<EQUAL? .NL ,INF-1> <SET TMP ,POWER-CORD>)
|
|
(ELSE <SET TMP ,GLOBAL-FLOOR-WAXER>)>
|
|
<PUT-GLOBAL ,INF-1 0 .TMP>
|
|
<COND (<EQUAL? .NL ,INF-1 ,INF-2> <SET TMP ,POWER-CORD>)
|
|
(ELSE <SET TMP ,GLOBAL-FLOOR-WAXER>)>
|
|
<PUT-GLOBAL ,INF-2 0 .TMP>
|
|
<COND (<EQUAL? .NL ,INF-4 ,INF-5> <SET TMP ,POWER-CORD>)
|
|
(ELSE <SET TMP ,GLOBAL-FLOOR-WAXER>)>
|
|
<PUT-GLOBAL ,INF-4 0 .TMP>
|
|
<COND (<EQUAL? .NL ,INF-5> <SET TMP ,POWER-CORD>)
|
|
(ELSE <SET TMP ,GLOBAL-FLOOR-WAXER>)>
|
|
<PUT-GLOBAL ,INF-5 0 .TMP>
|
|
<COND (<HERE? .NL>
|
|
<TELL CR
|
|
CTHE ,FLOOR-WAXER ", approaching from the ">
|
|
<COND (,WAX-WEST? <TELL "east">)
|
|
(ELSE <TELL "west">)>
|
|
<TELL ", is now here." CR>)
|
|
(<HERE? .L>
|
|
<TELL CR
|
|
CTHE ,FLOOR-WAXER " waxes away to the ">
|
|
<COND (,WAX-WEST? <TELL "west">)
|
|
(ELSE <TELL "east">)>
|
|
<TELL ,PERIOD>)>>
|
|
|
|
<ROUTINE CHANGE-ADJECTIVE (OBJ P "OPT" (NEW 0)
|
|
"AUX" (G <GETPT .OBJ ,P?ADJECTIVE>))
|
|
<COND (.G <PUTB .G .P .NEW>)>>
|
|
|
|
<ROUTINE PUT-GLOBAL (OBJ P VAL "AUX" (G <GETPT .OBJ ,P?GLOBAL>))
|
|
<COND (.G <PUTB .G .P .VAL>)>>
|
|
|
|
<OBJECT GLOBAL-FLOOR-WAXER
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "floor waxer")
|
|
(SYNONYM WAXER POLISHER MACHINE)
|
|
(ADJECTIVE FLOOR LARGE NOISY)
|
|
(FLAGS NDESCBIT VEHBIT SURFACEBIT ONBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(GENERIC GENERIC-FLOOR-WAXER-F)
|
|
(ACTION GLOBAL-FLOOR-WAXER-F)>
|
|
|
|
<ROUTINE GENERIC-FLOOR-WAXER-F ()
|
|
<COND (<IN? ,FLOOR-WAXER ,HERE> ,FLOOR-WAXER)
|
|
(ELSE ,GLOBAL-FLOOR-WAXER)>>
|
|
|
|
<ROUTINE GLOBAL-FLOOR-WAXER-F ()
|
|
<COND (<VERB? WALK-TO>
|
|
<COND (<HERE? ,INF-1>
|
|
<DO-WALK ,P?EAST>)
|
|
(<HERE? ,INF-2>
|
|
<COND (<IN? ,FLOOR-WAXER ,INF-1>
|
|
<DO-WALK ,P?WEST>)
|
|
(ELSE <DO-WALK ,P?EAST>)>)
|
|
(<HERE? ,INF-3>
|
|
<COND (<OR <IN? ,FLOOR-WAXER ,INF-1>
|
|
<IN? ,FLOOR-WAXER ,INF-2>>
|
|
<DO-WALK ,P?WEST>)
|
|
(ELSE <DO-WALK ,P?EAST>)>)
|
|
(<HERE? ,INF-4>
|
|
<COND (<IN? ,FLOOR-WAXER ,INF-5>
|
|
<DO-WALK ,P?EAST>)
|
|
(ELSE <DO-WALK ,P?WEST>)>)
|
|
(ELSE
|
|
<DO-WALK ,P?WEST>)>)
|
|
(<HOSTILE-VERB?>
|
|
<TELL "It" ,IS-DOWN-THE-HALL>)
|
|
(ELSE
|
|
<FLOOR-WAXER-F>)>>
|
|
|
|
<GLOBAL IS-DOWN-THE-HALL "'s down the hall, not here.|">
|
|
|
|
<OBJECT FLOOR-WAXER
|
|
(IN INF-2)
|
|
(DESC "floor waxer")
|
|
(SYNONYM WAXER POLISHER MACHINE)
|
|
(ADJECTIVE FLOOR LARGE NOISY)
|
|
(FLAGS VEHBIT SURFACEBIT POWERBIT OPENBIT CONTBIT SEARCHBIT)
|
|
(DESCFCN FLOOR-WAXER-DESC)
|
|
(CONTFCN FLOOR-WAXER-F)
|
|
(GENERIC GENERIC-FLOOR-WAXER-F)
|
|
(ACTION FLOOR-WAXER-F)>
|
|
|
|
<ROUTINE FLOOR-WAXER-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<COND (<IN? ,MAINTENANCE-MAN ,FLOOR-WAXER>
|
|
<TELL
|
|
"A " 'MAINTENANCE-MAN " is here, riding a " 'FLOOR-WAXER ".">)
|
|
(ELSE
|
|
<TELL
|
|
"A disabled " 'FLOOR-WAXER " looms nearby.">)>
|
|
<RFATAL>)>>
|
|
|
|
<ROUTINE FLOOR-WAXER-F ("OPT" (RARG <>))
|
|
<COND (<RARG? BEG>
|
|
<COND (<AND <VERB? WALK>
|
|
<EQUAL? ,P-WALK-DIR ,P?DOWN>>
|
|
<PERFORM ,V?DISEMBARK>
|
|
<RTRUE>)
|
|
(<VERB? WALK LAMP-OFF LAMP-ON STOP>
|
|
<TELL
|
|
CTHE ,POWER-CORD " is severed. It's not going anywhere." CR>)>)
|
|
(<RARG? CONTAINER>
|
|
<COND (<AND <VERB? TAKE>
|
|
<NOT <IN? ,WINNER ,FLOOR-WAXER>>>
|
|
<CANT-REACH-THAT>
|
|
<RTRUE>)>)
|
|
(<RARG? <>>
|
|
<COND (<VERB? EXAMINE>
|
|
<COND (<PRSO? ,GLOBAL-FLOOR-WAXER>
|
|
<TELL
|
|
,YOU-CANT "see it too clearly, but it looks like a large waxing
|
|
machine." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"It's a large " 'FLOOR-WAXER ", big enough to ride in">
|
|
<COND (<IN? ,MAINTENANCE-MAN ,FLOOR-WAXER>
|
|
<TELL
|
|
", and in fact there is " A ,MAINTENANCE-MAN " riding it">)>
|
|
<TELL
|
|
". It actually looks sort of like a small bulldozer. ">
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
"The severed remnant of " THE ,POWER-CORD " graces one end.">)
|
|
(ELSE
|
|
<TELL
|
|
"A " 'POWER-CORD " connects it to the wall.">)>
|
|
<CRLF>)>)
|
|
(<VERB? LISTEN>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL "It's very quiet." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"It makes a ghastly whirring, whining sound.">
|
|
<COND (<IN? ,FLOOR-WAXER ,HERE>
|
|
<TELL
|
|
" This close, it's almost unbearable.">)>
|
|
<CRLF>)>)
|
|
(<VERB? BOARD>
|
|
<COND (<PRSO? ,GLOBAL-FLOOR-WAXER>
|
|
<TELL
|
|
"It's not here!" CR>)
|
|
(<IN? ,MAINTENANCE-MAN ,PRSO>
|
|
<TELL CTHE ,MAINTENANCE-MAN>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
" catches you with a surprisingly strong punch as
|
|
you try to climb aboard. You fall to the floor, taken aback." CR>)
|
|
(ELSE
|
|
<TELL
|
|
" prevents you. He says something that probably
|
|
means \"No riders, buddy\" (freely translated)." CR>)>)>)
|
|
(<VERB? UNPLUG>
|
|
<NEW-PRSO ,POWER-CORD>
|
|
<RTRUE>)
|
|
(<VERB? LAMP-OFF STOP>
|
|
<TELL
|
|
"You'd have to be riding in it to turn it off." CR>)
|
|
(<VERB? LOOK-UNDER>
|
|
<TELL
|
|
"You see a nice, shiny floor." CR>)
|
|
(<HOSTILE-VERB?>
|
|
<TELL
|
|
"The waxer is pretty sturdy. These things have been waxing the floors
|
|
here for decades." CR>)
|
|
(<VERB? WALK-AROUND>
|
|
<COND (<NOT ,CORD-SEVERED?>
|
|
<TELL
|
|
,YOU-CANT "evade it." CR>)>)>)>>
|
|
|
|
<OBJECT WALL-SOCKET
|
|
(IN INF-3)
|
|
(DESC "wall socket")
|
|
(SYNONYM SOCKET)
|
|
(ADJECTIVE WALL ELECTRIC)
|
|
(DESCFCN WALL-SOCKET-DESC)>
|
|
|
|
<ROUTINE WALL-SOCKET-DESC (RARG OBJ "AUX" L)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
S "There is a ""wall socket on one wall, and a heavy-duty " 'POWER-CORD
|
|
" is plugged into it. The cord ">
|
|
<COND (,CORD-SEVERED?
|
|
<TELL "terminates in a severed stump">)
|
|
(ELSE
|
|
<TELL "leads ">
|
|
<SET L <LOC ,FLOOR-WAXER>>
|
|
<COND (<EQUAL? .L ,HERE>
|
|
<TELL "to a large " 'FLOOR-WAXER>)
|
|
(<EQUAL? .L ,INF-1 ,INF-2>
|
|
<TELL "away to the west">)
|
|
(<EQUAL? .L ,INF-4 ,INF-5>
|
|
<TELL "away to the east">)>)>
|
|
<TELL ".">)>>
|
|
|
|
<OBJECT POWER-CORD
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "power cord")
|
|
(SYNONYM CORD PLUG)
|
|
(ADJECTIVE POWER ELECTRIC)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION POWER-CORD-F)>
|
|
|
|
<GLOBAL CORD-SEVERED? <>>
|
|
|
|
<ROUTINE POWER-CORD-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
CTHE ,POWER-CORD>
|
|
<COND (<NOT ,CORD-SEVERED?> <TELL " connects">)
|
|
(ELSE <TELL ", now a mere stub, formerly connected">)>
|
|
<TELL " a wall socket ">
|
|
<COND (<HERE? ,INF-1 ,INF-2>
|
|
<TELL ,DOWN-THE-HALL "east ">)
|
|
(<HERE? ,INF-3>
|
|
<TELL S "on the wall here"" ">)
|
|
(ELSE
|
|
<TELL ,DOWN-THE-HALL "west ">)>
|
|
<TELL "with " THE ,FLOOR-WAXER "." CR>)
|
|
(<VERB? TAKE UNPLUG MOVE PRY>
|
|
<TELL
|
|
"You pull at " THE ,POWER-CORD ", but it won't come loose!" CR>)
|
|
(<VERB? FOLLOW>
|
|
<TELL
|
|
CTHE ,POWER-CORD " goes from a wall socket ">
|
|
<COND (<HERE? ,INF-1 ,INF-2>
|
|
<TELL "to the east">)
|
|
(<HERE? ,INF-3>
|
|
<TELL S "on the wall here">)
|
|
(ELSE
|
|
<TELL "to the west">)>
|
|
<TELL " to " A ,FLOOR-WAXER " which is ">
|
|
<COND (<IN? ,FLOOR-WAXER ,HERE>
|
|
<TELL "here.">)
|
|
(ELSE
|
|
<TELL "to the ">
|
|
<FLOOR-WAXER-DIRECTION>)>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL " Of course, the cord is severed.">)>
|
|
<CRLF>)
|
|
(<P? (CUT MUNG ATTACK) POWER-CORD>
|
|
<COND (<PRSI? <> ,HANDS>
|
|
<TELL
|
|
"You'll need more than your hands to sever this cord!" CR>)
|
|
(,CORD-SEVERED?
|
|
<TELL
|
|
,YOUVE-ALREADY "sliced it once! Trying to make salami?" CR>)
|
|
(<PRSI? ,AXE>
|
|
<SETG CORD-SEVERED? T>
|
|
<DEQUEUE I-WAXER-MOVES>
|
|
<QUEUE I-MAINT-ATTACK 2>
|
|
<TELL
|
|
"The axe crashes against the floor, and " THE ,POWER-CORD " severs! The
|
|
whine of " THE ,FLOOR-WAXER " slows, and " THE ,MAINTENANCE-MAN " jerks to
|
|
alertness." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"You hit the cord with " THE ,PRSI ", but it has no effect." CR>)>)
|
|
(<VERB? REPAIR>
|
|
<COND (,CORD-SEVERED?
|
|
<TELL
|
|
"It's beyond repair." CR>)>)>>
|
|
|
|
<GLOBAL DOWN-THE-HALL "down the hall to the ">
|
|
|
|
<ROUTINE SEE-MM? ()
|
|
<COND (<IN? ,MAINTENANCE-MAN ,HERE> <RTRUE>)
|
|
(<HERE? ,INF-1 ,INF-2 ,INF-3 ,INF-4 ,INF-5>
|
|
<RTRUE>)
|
|
(<AND <HERE? ,GREAT-DOME ,TOP-OF-DOME>
|
|
<IN? ,MAINTENANCE-MAN ,INF-3>>
|
|
<RTRUE>)>>
|
|
|
|
<ROUTINE MAINT-DESCENDS ("OPT" (INT? <>))
|
|
<QUEUE I-MAINT-ATTACK -1>
|
|
<MOVE ,MAINTENANCE-MAN <LOC ,FLOOR-WAXER>>
|
|
<COND (<SEE-MM?>
|
|
<COND (.INT? <CRLF>)>
|
|
<TELL
|
|
CTHE ,MAINTENANCE-MAN ", growling foul-sounding imprecations, descends
|
|
from " THE ,FLOOR-WAXER " and ">
|
|
<COND (.INT? <TELL "heads towards you.">)
|
|
(ELSE <TELL "blocks your way.">)>
|
|
<COND (<IN? ,FLOOR-WAX <LOC ,MAINTENANCE-MAN>>
|
|
<SETG SEEN-MM-SLIP? T>
|
|
<TELL
|
|
" But almost immediately, he slips on the floor wax.">)>
|
|
<CRLF>)>>
|
|
|
|
<GLOBAL SEEN-MM-SLIP? <>>
|
|
|
|
<GLOBAL MAINT-SCORE 5>
|
|
|
|
<ROUTINE I-MAINT-ATTACK ("AUX" L TMP TMP1 (MM-WAITS? <>))
|
|
<COND (<IN? ,MAINTENANCE-MAN ,FLOOR-WAXER>
|
|
<MAINT-DESCENDS T>)
|
|
(<IN? ,FLOOR-WAX <LOC ,MAINTENANCE-MAN>>
|
|
<QUEUE I-MAINT-DISSOLVES 4 T>
|
|
<SETG SCORE <+ ,SCORE ,MAINT-SCORE>>
|
|
<SETG MAINT-SCORE 0>
|
|
<COND (<SEE-MM?>
|
|
<TELL CR
|
|
CTHE ,MAINTENANCE-MAN> <COND (,SEEN-MM-SLIP?
|
|
<TELL
|
|
" continues slipping, falling, standing, and so on.">)
|
|
(ELSE
|
|
<SETG SEEN-MM-SLIP? T>
|
|
<TELL
|
|
" reaches the wax and immediately slips and falls.">)>
|
|
<TELL
|
|
" He reminds you of a badly made windup toy." CR>)>)
|
|
(ELSE
|
|
<SET L <LOC ,MAINTENANCE-MAN>>
|
|
<COND (<IN? ,MAINTENANCE-MAN ,HERE>
|
|
<TELL CR
|
|
CTHE ,MAINTENANCE-MAN " stares with maniacal intensity at your throat.">)
|
|
(ELSE
|
|
<COND (<NOT <HERE? ,INF-1 ,INF-2 ,INF-3 ,INF-4 ,INF-5>>
|
|
<SET MM-WAITS? T>
|
|
<SETG MAINT-ATTACK-COUNT 5>)>
|
|
<COND (<HERE? ,GREAT-DOME ,TOP-OF-DOME ,DOME-ROOF
|
|
,ON-DOME>
|
|
<COND (<EQUAL? .L ,INF-5>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-4>)
|
|
(<EQUAL? .L ,INF-4>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-3>)>)
|
|
(ELSE
|
|
<COND (<EQUAL? .L ,INF-5>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-4>)
|
|
(<EQUAL? .L ,INF-4>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-3>)
|
|
(<EQUAL? .L ,INF-3>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-2>)
|
|
(<EQUAL? .L ,INF-2>
|
|
<MOVE ,MAINTENANCE-MAN ,INF-1>)>)>
|
|
<COND (<HERE? ,GREAT-DOME ,TOP-OF-DOME>
|
|
<COND (<EQUAL? .L ,INF-3>
|
|
<MM-WAITS-PATIENTLY "below">
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>)
|
|
(<HERE? ,MASS-AVE>
|
|
<COND (<EQUAL? .L ,INF-1>
|
|
<MM-WAITS-PATIENTLY "inside">
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>)
|
|
(.MM-WAITS?
|
|
<COND (<EQUAL? .L
|
|
,ENGINEERING-BLDG
|
|
,AERO-LOBBY>
|
|
<MM-WAITS-PATIENTLY "in the corridor">
|
|
<RTRUE>)
|
|
(ELSE
|
|
<RFALSE>)>)
|
|
(ELSE
|
|
<TELL CR
|
|
CTHE ,MAINTENANCE-MAN S " lurches toward you" " with surprising speed.">)>)>
|
|
<SET L <LOC ,MAINTENANCE-MAN>>
|
|
<COND (<AND <IN? ,MAINTENANCE-MAN ,HERE>
|
|
<IN? ,FLOOR-WAX ,HERE>>
|
|
<SETG SEEN-MM-SLIP? T>
|
|
<TELL
|
|
" Just as he is about to grab you he slips on the wax. His hand whips
|
|
by, inches from your throat, and he drops to the floor, screaming in
|
|
frustration." CR>)
|
|
(<AND <IN? ,FLOOR-WAX .L>
|
|
<SEE-MM?>>
|
|
<SETG SEEN-MM-SLIP? T>
|
|
<TELL
|
|
" He encounters the floor wax, slips, and drops to the floor, screaming
|
|
in frustration." CR>)
|
|
(<G? <SETG MAINT-ATTACK-COUNT <+ ,MAINT-ATTACK-COUNT 1>>
|
|
4>
|
|
<COND (<NOT <HERE? ,GREAT-DOME ,TOP-OF-DOME ,ON-DOME
|
|
,DOME-ROOF ,MASS-AVE>>
|
|
<DEQUEUE I-MAINT-ATTACK>
|
|
<JIGS-UP
|
|
" He grabs you by the throat and lifts you off the ground with one hand.
|
|
The hand feels very cold. Just as you
|
|
expire, you realize you have never seen him blink.">)>)
|
|
(<IN? ,MAINTENANCE-MAN ,HERE>
|
|
<CRLF>
|
|
<RTRUE>)
|
|
(ELSE
|
|
<COND (<AND <SET TMP <GETP ,HERE ,P?SIZE>>
|
|
<SET TMP1 <GETP .L ,P?SIZE>>>
|
|
<SET TMP <- .TMP1 .TMP>>
|
|
<TELL " He is ">
|
|
<COND (<EQUAL? .TMP 1>
|
|
<TELL "nearly upon you.">)
|
|
(ELSE
|
|
<COND (<EQUAL? .TMP 2>
|
|
<TELL "some ways down">)
|
|
(<EQUAL? .TMP 3>
|
|
<TELL "quite a way down">)
|
|
(<EQUAL? .TMP 4>
|
|
<TELL "at the far end of">)>
|
|
<TELL " the corridor.">)>)>
|
|
<CRLF>)>)>>
|
|
|
|
<ROUTINE MM-WAITS-PATIENTLY (WHERE)
|
|
<TELL CR
|
|
CTHE ,MAINTENANCE-MAN " waits patiently " .WHERE "." CR>>
|
|
|
|
<GLOBAL MAINT-ATTACK-COUNT 0>
|
|
|
|
<ROUTINE I-MAINT-DISSOLVES ()
|
|
<REMOVE ,MAINTENANCE-MAN>
|
|
<DEQUEUE I-MAINT-ATTACK>
|
|
<COND (<HERE? ,INF-1 ,INF-2 ,INF-3 ,INF-4 ,INF-5>
|
|
<TELL CR
|
|
CTHE ,MAINTENANCE-MAN " appears to shorten and almost dissolve. There is a
|
|
great commotion, as though he is undergoing a convulsion of some sort,
|
|
and then he appears to explode into a crowd of small squealing creatures.
|
|
These, seeing you, scuttle off in the opposite direction and disappear." CR>)>>
|
|
|
|
<OBJECT PLASTIC-CONTAINER
|
|
(IN INF-1)
|
|
(DESC "plastic container")
|
|
(SYNONYM CONTAINER LABEL)
|
|
(ADJECTIVE PLASTIC)
|
|
(FLAGS TAKEBIT CONTBIT READBIT SEARCHBIT OPENABLE)
|
|
(CAPACITY 30)
|
|
(SIZE 15)
|
|
(ACTION PLASTIC-CONTAINER-F)
|
|
(TEXT "\"Frobozz Magic Floor Wax (and Dessert Topping)\"")>
|
|
|
|
<ROUTINE PLASTIC-CONTAINER-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a plain plastic container with something written on it. ">
|
|
<LOOK-IN-CONTAINER>)
|
|
(<VERB? OPEN>
|
|
<COND (<NOT <FSET? ,PLASTIC-CONTAINER ,OPENBIT>>
|
|
<FSET ,PLASTIC-CONTAINER ,OPENBIT>
|
|
<TELL
|
|
"You pull off the seal and open the container, revealing a smelly,
|
|
viscous liquid." CR>)>)
|
|
(<VERB? CLOSE>
|
|
<COND (<FSET? ,PLASTIC-CONTAINER ,OPENBIT>
|
|
<TELL
|
|
"The container can't be resealed." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<LOOK-IN-CONTAINER>)
|
|
(<VERB? POUR>
|
|
<COND (<NOT <FSET? ,PLASTIC-CONTAINER ,OPENBIT>>
|
|
<TELL "The container isn't open." CR>)
|
|
(<IN? ,FLOOR-WAX ,PRSO>
|
|
<NEW-PRSO ,FLOOR-WAX>
|
|
<RTRUE>)
|
|
(ELSE <V-POUR>)>)
|
|
(<VERB? FILL>
|
|
<CANT-FILL-IT>)>>
|
|
|
|
<ROUTINE LOOK-IN-CONTAINER ()
|
|
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
|
|
<TELL-OPEN-CLOSED ,PRSO>
|
|
<RTRUE>)
|
|
(<FIRST? ,PRSO>
|
|
<DESCRIBE-SENT ,PRSO>)
|
|
(ELSE
|
|
<TELL "It appears to be empty.">)>
|
|
<CRLF>>
|
|
|
|
<ROUTINE CANT-FILL-IT ()
|
|
<TELL ,YOU-CANT>
|
|
<COND (,PRSI
|
|
<TELL
|
|
"get " THE ,PRSI " into the container." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"fill " THE ,PRSO ,PERIOD>)>>
|
|
|
|
<OBJECT FLOOR-WAX
|
|
(IN PLASTIC-CONTAINER)
|
|
(DESC "floor wax")
|
|
(SYNONYM WAX TOPPING LIQUID)
|
|
(ADJECTIVE FLOOR DESSERT SMELLY VISCOUS)
|
|
(FLAGS NOABIT TRYTAKEBIT TAKEBIT TOUCHBIT)
|
|
(DESCFCN FLOOR-WAX-DESC)
|
|
(ACTION FLOOR-WAX-F)>
|
|
|
|
<ROUTINE FLOOR-WAX-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?>
|
|
<COND (<IN? <LOC ,FLOOR-WAX> ,ROOMS>
|
|
<RTRUE>)>)
|
|
(ELSE
|
|
<TELL
|
|
S "The floor here is ""covered with slippery, messy floor wax.">)>>
|
|
|
|
<ROUTINE FLOOR-WAX-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
,IT-SEEMS-TO-BE "floor wax." CR>)
|
|
(<VERB? TAKE>
|
|
<TELL
|
|
"It's a liquid, not a solid." CR>)
|
|
(<AND <VERB? STEP-ON>
|
|
<IN? ,FLOOR-WAX ,HERE>>
|
|
<TELL
|
|
"It's pretty slippery, all right. You can't walk on it very easily." CR>)
|
|
(<OR <P? PUT HANDS>
|
|
<VERB? RUB>>
|
|
<TELL
|
|
"It feels like floor wax. It's very slippery." CR>)
|
|
(<VERB? SMELL>
|
|
<TELL
|
|
"It smells very pungent." CR>)
|
|
(<VERB? PUT>
|
|
<COND (<OR <PRSI? ,GROUND>
|
|
<FSET? ,PRSI ,CONTBIT>>
|
|
<NEW-VERB ,V?POUR>
|
|
<RTRUE>)>)
|
|
(<VERB? POUR DROP>
|
|
<COND (<IN? ,PRSO ,PLASTIC-CONTAINER>
|
|
<COND (<AND ,PRSI
|
|
<OR <HELD? ,PRSI>
|
|
<AND <FSET? ,PRSI ,CONTBIT>
|
|
<GETP ,PRSI ,P?CAPACITY>>>>
|
|
<TELL
|
|
"Without a funnel, you are doomed to failure. It'll end up all over
|
|
everything." CR>)
|
|
(ELSE
|
|
<MOVE ,FLOOR-WAX ,HERE>
|
|
<COND (<NOT <PRSI? ,GROUND ,CORRIDOR
|
|
,GLOBAL-MAINTENANCE-MAN
|
|
<>>>
|
|
<TELL
|
|
"You pour it all over " THE ,PRSI ", and of course it pours right
|
|
off onto the floor.">)
|
|
(ELSE
|
|
<COND (<HERE? ,TOP-OF-DOME
|
|
,GREAT-DOME>
|
|
<MOVE ,FLOOR-WAX ,INF-3>
|
|
<TELL
|
|
"The wax cascades down onto the corridor floor below, like Quasimodo's
|
|
molten lead.">)
|
|
(ELSE
|
|
<TELL
|
|
"It pours out and spreads like ants at a picnic.">)>)>
|
|
<COND (<NOT <FSET? ,HERE ,OUTSIDE>>
|
|
<TELL " The floor is now
|
|
covered from wall to wall with slippery floor wax.">)>
|
|
<COND (<IN? ,MAINTENANCE-MAN <LOC ,FLOOR-WAX>>
|
|
<SETG SEEN-MM-SLIP? T>
|
|
<TELL
|
|
" " CTHE ,MAINTENANCE-MAN ", attempting to get closer to you, enters the
|
|
waxed part of the floor. He begins to slip and slide, barely able
|
|
to maintain his balance, much less advance.">)>
|
|
<CRLF>)>)
|
|
(ELSE
|
|
<TELL
|
|
"There is no more wax to pour." CR>)>)>>
|
|
|
|
<OBJECT EMERGENCY-CABINET
|
|
(IN INF-4)
|
|
(DESC "emergency cabinet")
|
|
(SYNONYM CABINET GLASS SIGN WINDOW)
|
|
(ADJECTIVE EMERGENCY)
|
|
(FLAGS CONTBIT TRANSBIT READBIT AN SEARCHBIT OPENABLE)
|
|
(CAPACITY 100)
|
|
(DESCFCN EMERGENCY-CABINET-DESC)
|
|
(ACTION EMERGENCY-CABINET-F)
|
|
(TEXT "\"In case of emergency, break glass.\"")>
|
|
|
|
<ROUTINE EMERGENCY-CABINET-DESC (RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<TELL
|
|
S "There is a ">
|
|
<COND (<FSET? .OBJ ,RMUNGBIT> <TELL "formerly ">)>
|
|
<TELL "glass-fronted emergency cabinet here.">
|
|
<COND (<FSET? .OBJ ,RMUNGBIT> <RTRUE>)
|
|
(ELSE <RFATAL>)>)>>
|
|
|
|
<ROUTINE EMERGENCY-CABINET-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's one of those little cabinets you see in institutional buildings that
|
|
usually contains a fire hose and a fire axe. ">
|
|
<COND (<IN? ,AXE ,PRSO>
|
|
<TELL
|
|
"This one seems to only have an axe. ">)>
|
|
<TELL "It ">
|
|
<COND (<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL "had">)
|
|
(ELSE
|
|
<TELL "has">)>
|
|
<TELL " a transparent
|
|
window">
|
|
<COND (<FSET? ,PRSO ,RMUNGBIT>
|
|
<TELL
|
|
" but apparently some vandal smashed it">)>
|
|
<TELL ". There is writing on the cabinet." CR>)
|
|
(<VERB? OPEN>
|
|
<COND (<NOT <FSET? ,PRSO ,RMUNGBIT>>
|
|
<TELL
|
|
"You should read the sign." CR>)>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<TELL
|
|
"Inside the cabinet you see ">
|
|
<DESCRIBE-REST ,EMERGENCY-CABINET>
|
|
<TELL ,PERIOD>)
|
|
(<P? (MUNG ATTACK) ,EMERGENCY-CABINET>
|
|
<COND (<FSET? ,EMERGENCY-CABINET ,RMUNGBIT>
|
|
<TELL
|
|
"The cabinet is already smashed." CR>)
|
|
(<PRSI? <> ,HANDS>
|
|
<COND (<NOT <FSET? ,GLOVES ,WEARBIT>>
|
|
<TELL
|
|
"You hit at the glass with your hands, but you can't hit hard
|
|
enough to break it: you might cut yourself on the glass." CR>)
|
|
(ELSE
|
|
<FSET ,EMERGENCY-CABINET ,OPENBIT>
|
|
<FSET ,EMERGENCY-CABINET ,RMUNGBIT>
|
|
<TELL
|
|
"Wearing the heavy gloves, you confidently smash the glass with a
|
|
blow of your hands!" CR>)>)
|
|
(<FSET? ,PRSI ,WEAPONBIT>
|
|
<COND (<NOT <FSET? ,EMERGENCY-CABINET ,RMUNGBIT>>
|
|
<FSET ,EMERGENCY-CABINET ,OPENBIT>
|
|
<FSET ,EMERGENCY-CABINET ,RMUNGBIT>
|
|
<TELL
|
|
"The glass smashes with a satisfying crash!" CR>)>)
|
|
(<PRSI? ,PLASTIC-CONTAINER>
|
|
<TELL
|
|
"The light plastic bounces off the cabinet." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"The glass survives unscathed." CR>)>)>>
|
|
|
|
<OBJECT AXE
|
|
(IN EMERGENCY-CABINET)
|
|
(DESC "fire axe")
|
|
(SYNONYM AXE AX)
|
|
(ADJECTIVE FIRE)
|
|
(FLAGS TRYTAKEBIT TAKEBIT WEAPONBIT)
|
|
(SIZE 10)>
|
|
|
|
<ROOM NUTRITION-BLDG
|
|
(IN ROOMS)
|
|
(DESC "Fruits and Nuts")
|
|
(LDESC
|
|
"This is the central corridor of the
|
|
Nutrition Building. The main building is south, and a stairway leads
|
|
down.")
|
|
(SOUTH TO INF-5)
|
|
(DOWN TO BROWN-TUNNEL)
|
|
(FLAGS ONBIT)>
|
|
|
|
<ROOM BROWN-TUNNEL
|
|
(IN ROOMS)
|
|
(DESC "Cluttered Passage")
|
|
(LDESC
|
|
"This cluttered passage leads southeast. It is full of apparently discarded
|
|
electronic equipment, old rusty file cabinets, and other detritus. A stairway
|
|
also leads up.")
|
|
(UP TO NUTRITION-BLDG)
|
|
(SE TO BROWN-BASEMENT)
|
|
(FLAGS ONBIT)
|
|
(THINGS <PSEUDO (ELECTRIC EQUIPMENT RANDOM-PSEUDO)
|
|
(FILE CABINET RANDOM-PSEUDO)
|
|
(<> DETRITUS RANDOM-PSEUDO)>)>
|
|
|
|
<ROOM AERO-LOBBY
|
|
(IN ROOMS)
|
|
(DESC "Aero Lobby")
|
|
(DOWN TO AERO-STAIRS)
|
|
(SOUTH TO INF-1)
|
|
(FLAGS ONBIT)
|
|
(ACTION AERO-LOBBY-F)>
|
|
|
|
<ROUTINE AERO-LOBBY-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
,THE-LOBBY "Aeronautical Engineering Building. Stairs
|
|
lead down and a corridor heads south towards the main building." CR>)>>
|
|
|
|
<ROOM GREAT-DOME
|
|
(IN ROOMS)
|
|
(DESC "Great Dome")
|
|
(DOWN TO INF-3)
|
|
(UP "There is no stairway.")
|
|
(FLAGS ONBIT)
|
|
(GLOBAL TENTACLE GLOBAL-FLOOR-WAXER GLOBAL-MAINTENANCE-MAN)
|
|
(ACTION GREAT-DOME-F)>
|
|
|
|
<ROUTINE GREAT-DOME-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"Here a walkway circles the base of a huge ornate dome. Below is the
|
|
Infinite Corridor.">
|
|
<COND (<NOT <FSET? ,DOME-LADDER ,TOUCHBIT>>
|
|
<TELL
|
|
" From stories of Tech Exploring trips, you recall that there is supposed to
|
|
be a ladder here.">
|
|
<COND (<NOT <FSET? ,TENTACLE ,INVISIBLE>>
|
|
<TELL
|
|
" On the other hand, there is a shiny rope-like thing hanging near
|
|
where the ladder used to be, and leading upward.">)>)>
|
|
<COND (<IN? ,FLOOR-WAXER ,INF-3>
|
|
<TELL
|
|
" Below you, in the corridor, you can see " A ,FLOOR-WAXER>
|
|
<COND (<NOT ,CORD-SEVERED?>
|
|
<TELL
|
|
", busily waxing the floor">)>
|
|
<TELL ".">)>
|
|
<CRLF>)
|
|
(<RARG? BEG>
|
|
<COND (<AND <VERB? WALK>
|
|
<EQUAL? ,P-WALK-DIR ,P?UP>
|
|
<HERE? ,LADDER-BOTTOM?>>
|
|
<PERFORM ,V?CLIMB-UP ,DOME-LADDER>
|
|
<RTRUE>)>)>>
|
|
|
|
<OBJECT TENTACLE
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "ropy strand")
|
|
(SYNONYM ROPE STRAND TENTACLE)
|
|
(ADJECTIVE ROPY STICKY WET)
|
|
(FLAGS NDESCBIT)
|
|
(ACTION TENTACLE-F)>
|
|
|
|
<ROUTINE TENTACLE-WETNESS ()
|
|
<TELL
|
|
"It's wet, and when you touch it, some of the wetness sticks to your ">
|
|
<COND (<FSET? ,GLOVES ,WEARBIT>
|
|
<TELL "gloves">)
|
|
(ELSE
|
|
<TELL "hands, and stings">)>>
|
|
|
|
<ROUTINE TENTACLE-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"The strand is wet and glistening. It extends upward into the dome,
|
|
leading to a narrow catwalk." CR>)
|
|
(<VERB? TAKE RUB>
|
|
<TENTACLE-WETNESS>
|
|
<TELL ". The strand twitches a little when you touch it." CR>)
|
|
(<VERB? CLIMB-UP CLIMB-FOO>
|
|
<COND (<HERE? ,GREAT-DOME>
|
|
<COND (<FSET? ,GLOVES ,WEARBIT>
|
|
<TELL
|
|
"The wet stuff on the strand sticks to the gloves, but doesn't otherwise
|
|
affect you. You have a little trouble climbing up to the catwalk, but
|
|
grab the rail just before your strength gives out. You heave yourself
|
|
up onto the catwalk." CR CR>
|
|
<GOTO ,TOP-OF-DOME>)
|
|
(ELSE
|
|
<TELL
|
|
S "You start to climb " "up the strand, but the glistening wet stuff begins
|
|
to burn your hands. You get a few feet up before the pain is too much.
|
|
You drop back to the floor." CR>)>)>)>>
|
|
|
|
<ROOM TOP-OF-DOME
|
|
(IN ROOMS)
|
|
(DESC "Top of Dome")
|
|
(OUT TO DOME-ROOF IF DOME-DOOR IS OPEN)
|
|
(NORTH TO DOME-ROOF IF DOME-DOOR IS OPEN)
|
|
(FLAGS ONBIT)
|
|
(GLOBAL TENTACLE DOME-DOOR GLOBAL-MAINTENANCE-MAN
|
|
DOME GLOBAL-FLOOR-WAXER)
|
|
(VALUE 5)
|
|
(ACTION TOP-OF-DOME-F)>
|
|
|
|
<ROUTINE TOP-OF-DOME-F (RARG)
|
|
<COND (<RARG? LOOK>
|
|
<TELL
|
|
"Inside the great dome, near the top, a metal catwalk is precariously perched.
|
|
There is no way further up, but a small metal door is set in the side of
|
|
the dome.">
|
|
<COND (<FSET? ,DOME-DOOR ,OPENBIT>
|
|
<TELL
|
|
" Frigid wind and snow blow through the open door.">)>
|
|
<CRLF>)
|
|
(<RARG? BEG>
|
|
<COND (<VERB? WALK>
|
|
<COND (<AND <EQUAL? ,P-WALK-DIR ,P?UP>
|
|
<HERE? ,LADDER-BOTTOM?>>
|
|
<PERFORM ,V?CLIMB-UP ,DOME-LADDER>
|
|
<RTRUE>)
|
|
(<AND <EQUAL? ,P-WALK-DIR ,P?DOWN>
|
|
<HERE? ,LADDER-TOP?>>
|
|
<PERFORM ,V?CLIMB-DOWN ,DOME-LADDER>
|
|
<RTRUE>)>)>)
|
|
(<RARG? ENTER>
|
|
<COND (<EQUAL? ,OHERE ,DOME-ROOF>
|
|
<EXIT-FROM-COLD>)
|
|
(<NOT <FSET? ,TENTACLE ,INVISIBLE>>
|
|
<FSET ,TENTACLE ,INVISIBLE>
|
|
<TELL
|
|
"You stand up on the catwalk, catching your breath for a moment.
|
|
Your eyes stray along the strand you climbed. It trails along the
|
|
catwalk, where it joins something large and squishy squatting at
|
|
the far side. A single, bright-blue eye opens in the squishy mass,
|
|
and the tentacle (for that's what it is) retracts. The mass almost
|
|
flows through the spaces in the catwalk railing and drops to the
|
|
floor fifteen feet below. Before you can react, it's gone." CR CR>)>)>>
|
|
|
|
<OBJECT CATWALK
|
|
(IN TOP-OF-DOME)
|
|
(DESC "catwalk")
|
|
(SYNONYM CATWALK EDGE SIDE RAILING)
|
|
(ADJECTIVE METAL)
|
|
(FLAGS NDESCBIT)>
|
|
|
|
<OBJECT DOME-LADDER
|
|
(IN TOP-OF-DOME)
|
|
(DESC "wooden ladder")
|
|
(SYNONYM LADDER)
|
|
(ADJECTIVE WOODEN)
|
|
(SIZE 120)
|
|
(FLAGS TAKEBIT)
|
|
(DESCFCN DOME-LADDER-DESC)
|
|
(ACTION DOME-LADDER-F)>
|
|
|
|
<GLOBAL LADDER-TOP? <>>
|
|
<GLOBAL LADDER-BOTTOM? <>>
|
|
|
|
<ROUTINE DOME-LADDER-DESC ("OPT" RARG OBJ)
|
|
<COND (<RARG? OBJDESC?> <RTRUE>)
|
|
(ELSE
|
|
<COND (<NOT <FSET? ,DOME-LADDER ,TOUCHBIT>>
|
|
<TELL
|
|
"Where the pulpy mass was squatting, a wooden ladder lies on the catwalk.">)
|
|
(ELSE
|
|
<TELL "A wooden ladder ">
|
|
<COND (<HERE? ,LADDER-TOP?>
|
|
<TELL "leads down from">)
|
|
(<HERE? ,LADDER-BOTTOM?>
|
|
<TELL "leads up from">)
|
|
(ELSE
|
|
<TELL "rests">)>
|
|
<TELL " here.">)>)>>
|
|
|
|
<ROUTINE DOME-LADDER-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"There is the same wet stuff on the ladder as on the tentacle." CR>)
|
|
(<VERB? RUB>
|
|
<TENTACLE-WETNESS>
|
|
<TELL ,PERIOD>)
|
|
(<VERB? TAKE>
|
|
<COND (<EQUAL? <ITAKE> T>
|
|
<SETG LADDER-TOP? <>>
|
|
<SETG LADDER-BOTTOM? <>>
|
|
<TELL
|
|
"It's a heavy ladder, but you manage to take it." CR>)
|
|
(ELSE <RTRUE>)>)
|
|
(<VERB? RAISE LAMP-ON>
|
|
<FSET ,DOME-LADDER ,TOUCHBIT>
|
|
<COND (<EQUAL? ,LADDER-TOP? ,TOP-OF-DOME>
|
|
<COND (<HERE? ,TOP-OF-DOME>
|
|
<MOVE ,DOME-LADDER ,HERE>
|
|
<SETG LADDER-TOP? <>>
|
|
<SETG LADDER-BOTTOM? <>>
|
|
<TELL
|
|
"With a great effort, the ladder being quite heavy (it's a Type I), you
|
|
pull the ladder up and lay it on the catwalk." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"The ladder is already set up." CR>)>)
|
|
(<HERE? ,GREAT-DOME>
|
|
<SETG LADDER-TOP? ,TOP-OF-DOME>
|
|
<SETG LADDER-BOTTOM? ,GREAT-DOME>
|
|
<MOVE ,DOME-LADDER ,HERE>
|
|
<TELL
|
|
"You raise the ladder, leaning it against the catwalk above." CR>)
|
|
(<HERE? ,ELEVATOR-PIT>
|
|
<COND (<AND <FSET? ,ELEVATOR-DOOR-B ,OPENBIT>
|
|
<NOT <FIRST? ,ELEVATOR-DOOR-B>>>
|
|
<TELL
|
|
,YOU-CANT "raise a ladder and hold the doors open at the same time!" CR>)
|
|
(ELSE
|
|
<ONLY-A-FEW-FEET>)>)
|
|
(ELSE
|
|
<TELL
|
|
"There isn't much here to climb up to." CR>)>)
|
|
(<OR <VERB? LOWER>
|
|
<P? PUT-ON * CATWALK>>
|
|
<FSET ,DOME-LADDER ,TOUCHBIT>
|
|
<COND (<HERE? ,TOP-OF-DOME>
|
|
<COND (<NOT ,LADDER-TOP?>
|
|
<MOVE ,DOME-LADDER ,HERE>
|
|
<SETG LADDER-TOP? ,TOP-OF-DOME>
|
|
<SETG LADDER-BOTTOM? ,GREAT-DOME>
|
|
<TELL
|
|
"You lower the ladder to the walkway below. It's just the right
|
|
length to climb down." CR>)
|
|
(ELSE
|
|
<TELL
|
|
,YOU-CANT "lower it from here." CR>)>)
|
|
(<HERE? ,CS-BASEMENT>
|
|
<ONLY-A-FEW-FEET>)
|
|
(<NOT ,LADDER-TOP?>
|
|
<TELL
|
|
"It's already taken down." CR>)
|
|
(ELSE
|
|
<SETG LADDER-TOP? <>>
|
|
<SETG LADDER-BOTTOM? <>>
|
|
<TELL "Lowered." CR>)>)
|
|
(<VERB? CLIMB-FOO>
|
|
<COND (<HERE? ,LADDER-BOTTOM?>
|
|
<NEW-VERB ,V?CLIMB-UP>
|
|
<RTRUE>)
|
|
(<HERE? ,LADDER-TOP?>
|
|
<NEW-VERB ,V?CLIMB-DOWN>
|
|
<RTRUE>)
|
|
(ELSE <LADDER-NOT-UP>)>)
|
|
(<VERB? CLIMB-UP>
|
|
<COND (<EQUAL? ,LADDER-BOTTOM? ,HERE>
|
|
<TELL
|
|
,YOU-SCRAMBLE-UP "ladder." CR CR>
|
|
<MOVE ,DOME-LADDER ,LADDER-TOP?>
|
|
<GOTO ,LADDER-TOP?>)
|
|
(<EQUAL? ,LADDER-TOP? ,HERE>
|
|
<LADDER-EXTENDS "down" "up">)
|
|
(ELSE
|
|
<LADDER-NOT-UP>)>)
|
|
(<VERB? CLIMB-DOWN>
|
|
<COND (<EQUAL? ,LADDER-TOP? ,HERE>
|
|
<TELL
|
|
"You scramble down the ladder." CR CR>
|
|
<MOVE ,DOME-LADDER ,LADDER-BOTTOM?>
|
|
<GOTO ,LADDER-BOTTOM?>)
|
|
(<EQUAL? ,LADDER-BOTTOM? ,HERE>
|
|
<LADDER-EXTENDS "up" "down">)
|
|
(ELSE <LADDER-NOT-UP>)>)
|
|
(<VERB? WALK-UNDER>
|
|
<COND (<EQUAL? ,LADDER-BOTTOM? ,HERE>
|
|
<TELL
|
|
"You trepidatiously walk under the ladder. Nothing seems to happen." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"There's no ladder set up here." CR>)>)>>
|
|
|
|
<ROUTINE LADDER-EXTENDS (U D)
|
|
<TELL
|
|
"The ladder extends " .U " from here, not " .D "." CR>>
|
|
|
|
<ROUTINE ONLY-A-FEW-FEET ()
|
|
<TELL
|
|
"It's only a few feet ">
|
|
<COND (<HERE? ,ELEVATOR-PIT> <TELL "up">)
|
|
(ELSE <TELL "down">)>
|
|
<TELL ". You don't need a ladder for that!" CR>>
|
|
|
|
<ROUTINE LADDER-NOT-UP ()
|
|
<COND (<HELD? ,DOME-LADDER>
|
|
<TELL
|
|
"Climbing it while holding it would be a neat trick." CR>)
|
|
(ELSE
|
|
<TELL
|
|
"The ladder doesn't go anywhere yet." CR>)>>
|
|
|
|
<OBJECT GLOVES
|
|
(IN TEMPORARY-BASEMENT)
|
|
(DESC "pair of electrician's gloves")
|
|
(SYNONYM GLOVES GLOVE)
|
|
(ADJECTIVE WORK RUBBER ELECTRIC)
|
|
(FLAGS TAKEBIT)
|
|
(ACTION GLOVES-F)>
|
|
|
|
<ROUTINE GLOVES-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is a pair of electrician's rubber gloves. They look well used but
|
|
serviceable." CR>)
|
|
(<VERB? LOOK-INSIDE>
|
|
<TELL
|
|
"They're kind of dirty inside, but there's nothing nasty hidden there." CR>)
|
|
(<OR <P? PUT-ON HAND GLOVES>
|
|
<P? PUT-ON GLOVES HAND>>
|
|
<TELL
|
|
"It's much too big." CR>)
|
|
(<OR <VERB? WEAR>
|
|
<P? PUT-ON HANDS GLOVES>
|
|
<P? PUT-ON GLOVES HANDS>>
|
|
<COND (<EQUAL? <IWEAR> T>
|
|
<TELL
|
|
"You put on the gloves. They're a little big, but not really such
|
|
a bad fit at all." CR>)
|
|
(ELSE <RTRUE>)>)>>
|
|
|
|
<OBJECT DOME-DOOR
|
|
(IN LOCAL-GLOBALS)
|
|
(DESC "door")
|
|
(SYNONYM DOOR)
|
|
(ADJECTIVE SMALL METAL)
|
|
(FLAGS NDESCBIT DOORBIT OPENABLE)
|
|
(ACTION DOME-DOOR-F)>
|
|
|
|
<ROUTINE DOME-DOOR-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"It's a small metal door, the same color as the dome." CR>)
|
|
(<VERB? THROUGH>
|
|
<COND (<HERE? ,TOP-OF-DOME>
|
|
<DO-WALK ,P?OUT>)
|
|
(ELSE <DO-WALK ,P?IN>)>)
|
|
(<AND <VERB? OPEN>
|
|
<NOT <FSET? ,DOME-DOOR ,OPENBIT>>>
|
|
<FSET ,DOME-DOOR ,OPENBIT>
|
|
<TELL
|
|
"You open the door, and freezing air, blowing snow, and howling wind
|
|
enter and whip around you." CR>)
|
|
(<AND <VERB? CLOSE>
|
|
<FSET? ,DOME-DOOR ,OPENBIT>>
|
|
<FCLEAR ,DOME-DOOR ,OPENBIT>
|
|
<TELL
|
|
"You close the door, shutting out the blizzard." CR>)>>
|
|
|
|
<ROOM DOME-ROOF
|
|
(IN ROOMS)
|
|
(DESC "Roof of Great Dome")
|
|
(LDESC
|
|
"You are perched precariously on the roof of the Great Dome. A set of
|
|
narrow indentations in the dome provides a dangerous route to the very
|
|
tip-top of the dome.")
|
|
(IN TO TOP-OF-DOME IF DOME-DOOR IS OPEN)
|
|
(SOUTH TO TOP-OF-DOME IF DOME-DOOR IS OPEN)
|
|
(UP TO ON-DOME)
|
|
(GLOBAL DOME-DOOR DOME)
|
|
(FLAGS ONBIT OUTSIDE)
|
|
(ACTION DOME-ROOF-F)>
|
|
|
|
<ROUTINE DOME-ROOF-F (RARG)
|
|
<COND ;(<RARG? LOOK>
|
|
<TELL
|
|
CR>)
|
|
(<RARG? ENTER>
|
|
<COND (<EQUAL? ,OHERE ,TOP-OF-DOME>
|
|
<EXIT-TO-COLD>)>)>>
|
|
|
|
<ROUTINE EXIT-TO-COLD ()
|
|
;<IFSOUND <SOUNDS ,S-STORMY>>
|
|
<QUEUE I-FREEZE-TO-DEATH 2 T>
|
|
<TELL
|
|
"You enter the freezing, biting cold of the blizzard." CR CR>>
|
|
|
|
<ROOM ON-DOME
|
|
(IN ROOMS)
|
|
(DESC "On the Great Dome")
|
|
(LDESC
|
|
"This is the very top of the Great Dome, a favorite place for Tech
|
|
fraternities to install cows, Volkswagen Beetles, giant birthday candles,
|
|
and other bizarre objects. The top is flat, round, and about five feet
|
|
in diameter. It's very windy, which has kept the snow from
|
|
accumulating here. The only way off is down.")
|
|
(DOWN TO DOME-ROOF)
|
|
(FLAGS ONBIT OUTSIDE)
|
|
(GLOBAL DOME)
|
|
(ACTION ON-DOME-F)>
|
|
|
|
<GLOBAL YOU-SCRAMBLE-UP "You scramble up ">
|
|
|
|
<ROUTINE ON-DOME-F (RARG)
|
|
<COND ;(<RARG? LOOK>
|
|
<TELL
|
|
CR>)
|
|
(<RARG? ENTER>
|
|
<TELL
|
|
,YOU-SCRAMBLE-UP "icy surface of the dome, almost slipping a few
|
|
times, but finally you make it to the top." CR CR>)
|
|
(<RARG? BEG>
|
|
<COND (<AND <VERB? WALK>
|
|
<NOT <EQUAL? ,P-WALK-DIR ,P?DOWN>>>
|
|
<TELL
|
|
"There is nowhere to go but down." CR>)
|
|
(ELSE <ROOF-BEGS>)>)>>
|
|
|
|
<OBJECT BRONZE-PLUG
|
|
(IN ON-DOME)
|
|
(DESC "bronze plug")
|
|
(FDESC "In the exact center of the flat area is a bronze plug.")
|
|
(SYNONYM PLUG)
|
|
(ADJECTIVE CYLINDRICAL BRONZE)
|
|
(FLAGS TAKEBIT TRYTAKEBIT WEAPONBIT)
|
|
(ACTION BRONZE-PLUG-F)>
|
|
|
|
<ROUTINE BRONZE-PLUG-F ()
|
|
<COND (<VERB? EXAMINE>
|
|
<TELL
|
|
"This is a cylindrical bronze plug about two inches in diameter">
|
|
<COND (<NOT <FSET? ,PRSO ,TOUCHBIT>>
|
|
<TELL
|
|
". It is set in the center of the flat part of the dome.">)
|
|
(ELSE
|
|
<TELL " and one inch high.">)>
|
|
<CRLF>)
|
|
(<AND <VERB? TAKE>
|
|
<NOT <FSET? ,PRSO ,RMUNGBIT>>>
|
|
<PERFORM ,V?PRY ,PRSO ,HANDS>
|
|
<RTRUE>)
|
|
(<VERB? RAISE MOVE PRY OPEN>
|
|
<COND (<FSET? ,BRONZE-PLUG ,RMUNGBIT>
|
|
<TELL ,YOUVE-ALREADY "removed it." CR>)
|
|
(<EQUAL? <ITAKE> T>
|
|
<FSET ,BRONZE-PLUG ,RMUNGBIT>
|
|
<MOVE ,SECRET-HOLE ,HERE>
|
|
<TELL
|
|
"You pry the plug out of its socket, revealing a cylindrical hole about
|
|
the same diameter but somewhat deeper. ">
|
|
<COND (<NOT <FSET? ,NOTE ,TOUCHBIT>>
|
|
<TELL
|
|
S "There is a ""piece of paper in the hole.">)
|
|
(<FIRST? ,SECRET-HOLE>
|
|
<DESCRIBE-SENT ,SECRET-HOLE>)
|
|
(ELSE
|
|
<TELL "The hole is empty.">)>
|
|
<CRLF>)
|
|
(ELSE <RTRUE>)>)
|
|
(<P? PUT BRONZE-PLUG SECRET-HOLE>
|
|
<FCLEAR ,BRONZE-PLUG ,RMUNGBIT>
|
|
<REMOVE ,SECRET-HOLE>
|
|
<MOVE ,BRONZE-PLUG ,HERE>
|
|
<TELL
|
|
"You insert the plug in the hole." CR>)>>
|
|
|
|
<OBJECT SECRET-HOLE
|
|
(DESC "cylindrical hole")
|
|
(SYNONYM HOLE)
|
|
(ADJECTIVE CYLINDRICAL)
|
|
(CAPACITY 5)
|
|
(FLAGS CONTBIT OPENBIT SEARCHBIT)>
|
|
|
|
<OBJECT NOTE
|
|
(IN SECRET-HOLE)
|
|
(DESC "piece of paper")
|
|
(SYNONYM PAPER NOTE)
|
|
(ADJECTIVE PIECE SUICIDE)
|
|
(FLAGS TAKEBIT READBIT)
|
|
(VALUE 5)
|
|
(ACTION NOTE-F)>
|
|
|
|
<ROUTINE NOTE-F ()
|
|
<COND (<VERB? EXAMINE READ>
|
|
<COND (<NOT <HELD? ,NOTE>>
|
|
<MOVE ,NOTE ,WINNER>
|
|
<TAKING-FIRST ,NOTE>)>
|
|
<FSET ,NOTE ,RMUNGBIT>
|
|
<TELL
|
|
"You unroll the piece of paper and read the shaky handwriting:|
|
|
|
|
|
\"I can no longer face
|
|
what I've been doing. I can't sleep, I start at the slightest noise,
|
|
and even dulling my senses with alcohol or drugs is no longer enough.
|
|
I refuse to participate in what he is doing any more. Either he is
|
|
insane, or I am insane, or (and this is what I fear most) the universe
|
|
itself is insane. I have only one final warning: I am the only suicide,
|
|
but I will not be the final death.\"|
|
|
|
|
|
The name signed to it is ">
|
|
<COND (<OR <FSET? ,SIGNUP ,RMUNGBIT>
|
|
,REMEMBERED-STUDENT?>
|
|
<TELL
|
|
"that of the Alchemy Department graduate student.">)
|
|
(ELSE
|
|
<QUEUE I-REMEMBER-STUDENT 5>
|
|
<TELL
|
|
"oddly familiar.">)>
|
|
<CRLF>)>>
|