123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734 |
- ; "SUBTITLE COAL MINE"
- <DEFINE BOOM-ROOM ("AUX" (DUMMY? <>) (WIN ,WINNER) O)
- #DECL ((DUMMY?) <OR ATOM FALSE> (WIN) ADV (O) OBJECT)
- <COND (<OR <VERB? "GO-IN">
- <AND <VERB? "ON">
- <SET DUMMY? T>>>
- <COND (<OR <AND <MEMQ <SET O <FIND-OBJ "CANDL">> <AOBJS .WIN>>
- <TRNN .O ,ONBIT>>
- <AND <MEMQ <SET O <FIND-OBJ "TORCH">> <AOBJS .WIN>>
- <TRNN .O ,ONBIT>>>
- <UNWIND
- <PROG ()
- <COND (.DUMMY?
- <TELL
- "I didn't realize that adventurers are stupid enough to light a
- " ,LONG-TELL1 <ODESC2 .O> " in a room which reeks of coal gas.
- Fortunately, there is justice in the world.">)
- (<TELL
- "Oh dear. It appears that the smell coming from this room was coal
- gas. I would have thought twice about carrying a " ,LONG-TELL1
- <ODESC2 .O> "in here.">)>
- <FWEEP 7>
- <JIGS-UP " BOOOOOOOOOOOM ">>
- <JIGS-UP " BOOOOOOOOOOOM ">>)>)>>
- <DEFINE BATS-ROOM ()
- <COND (<AND <VERB? "GO-IN">
- <NOT <MEMQ <FIND-OBJ "GARLI"> <AOBJS ,WINNER>>>>
- <FLY-ME>)
- (<VERB? "LOOK">
- <TELL
- "You are in a small room which has only one door, to the east.">
- <AND <MEMQ <FIND-OBJ "GARLI"> <AOBJS ,WINNER>>
- <TELL
- "In the corner of the room on the ceiling is a large vampire bat who
- is obviously deranged and holding his nose.">>)>>
- <DEFINE FLY-ME ("AUX" (BAT-DROPS ,BAT-DROPS))
- #DECL ((BAT-DROPS) <VECTOR [REST STRING]>)
- <UNWIND
- <PROG ()
- <FWEEP 4 1>
- <TELL
- "A deranged giant vampire bat (a reject from WUMPUS) swoops down
- from his belfry and lifts you away....">
- <GOTO <FIND-ROOM <PICK-ONE .BAT-DROPS>>>>
- <GOTO <FIND-ROOM <PICK-ONE .BAT-DROPS>>>>
- <PUT ,PRSVEC 2 <>>
- <ROOM-INFO>
- T>
- <DEFINE FWEEP (NUM "OPTIONAL" (SLP 0))
- #DECL ((NUM SLP) FIX)
- <REPEAT ((N .NUM))
- #DECL ((N) FIX)
- <AND <0? <SET N <- .N 1>>> <RETURN>>
- <IMAGE 7>
- <OR <0? .SLP> <SLEEP .SLP>>>>
- <GDECL (BAT-DROPS) <VECTOR [REST STRING]>>
- <SETG CAGE-TOP!-FLAG T>
- <DEFINE DUMBWAITER ("AUX" (TB <FIND-OBJ "TBASK">)
- (TOP <FIND-ROOM "TSHAF">) (BOT <FIND-ROOM "BSHAF">)
- (FB <FIND-OBJ "FBASK">) (CT ,CAGE-TOP!-FLAG)
- (DUMMY ,DUMMY))
- #DECL ((FB TB) OBJECT (TOP BOT) ROOM (CT) <OR ATOM FALSE>
- (DUMMY) <VECTOR [REST STRING]>)
- <COND (<VERB? "RAISE">
- <COND (.CT
- <TELL <PICK-ONE ,DUMMY>>)
- (<REMOVE-OBJECT .TB>
- <REMOVE-OBJECT .FB>
- <INSERT-OBJECT .TB .TOP>
- <INSERT-OBJECT .FB .BOT>
- <TELL "The basket is raised to the top of the shaft.">
- <SETG CAGE-TOP!-FLAG T>)>)
- (<VERB? "LOWER">
- <COND (<NOT .CT>
- <TELL <PICK-ONE .DUMMY>>)
- (<REMOVE-OBJECT .TB>
- <REMOVE-OBJECT .FB>
- <INSERT-OBJECT .TB .BOT>
- <INSERT-OBJECT .FB .TOP>
- <TELL "The basket is lowered to the bottom of the shaft.">
- <SETG CAGE-TOP!-FLAG <>>
- T)>)
- (<VERB? "TAKE">
- <TELL "The cage is securely fastened to the iron chain.">)>>
- <DEFINE MACHINE-ROOM ()
- <COND (<VERB? "LOOK">
- <TELL ,MACHINE-DESC
- ,LONG-TELL1
- <COND (<TRNN <FIND-OBJ "MACHI"> ,OPENBIT>
- "open.")
- ("closed.")>>)>>
- <DEFINE MACHINE-FUNCTION ("AUX" (DUMMY ,DUMMY) (MACH <FIND-OBJ "MACHI">))
- #DECL ((MACH) OBJECT (DUMMY) <VECTOR [REST STRING]>)
- <COND
- (<==? ,HERE <FIND-ROOM "MACHI">>
- <COND
- (<VERB? "OPEN">
- <COND (<TRNN .MACH ,OPENBIT>
- <TELL <PICK-ONE .DUMMY>>)
- (<TELL "The lid opens.">
- <TRO .MACH ,OPENBIT>)>)
- (<VERB? "CLOSE">
- <COND (<TRNN .MACH ,OPENBIT>
- <TELL "The lid closes.">
- <TRZ .MACH ,OPENBIT>
- T)
- (<TELL <PICK-ONE .DUMMY>>)>)>)>>
- <DEFINE MSWITCH-FUNCTION ("AUX" (C <FIND-OBJ "COAL">) D (MACH <FIND-OBJ "MACHI">)
- (SCREW <FIND-OBJ "SCREW">))
- #DECL ((MACH SCREW C D) OBJECT)
- <COND (<VERB? "TURN">
- <COND (<==? <PRSI> .SCREW>
- <COND (<TRNN .MACH ,OPENBIT>
- <TELL
- "The machine doesn't seem to want to do anything.">)
- (<TELL
- "The machine comes to life (figuratively) with a dazzling display of
- colored lights and bizarre noises. After a few moments, the
- excitement abates." ,LONG-TELL1>
- <COND (<==? <OCAN .C> .MACH>
- <REMOVE-OBJECT .C>
- <PUT .MACH
- ,OCONTENTS
- (<SET D <FIND-OBJ "DIAMO">>
- !<OCONTENTS .MACH>)>
- <PUT .D ,OCAN .MACH>)
- (<NOT <EMPTY? <OCONTENTS .MACH>>>
- <PUT .MACH ,OCONTENTS (<FIND-OBJ "GUNK">)>)
- (T)>)>)
- (<TELL "It seems that a " 1 <ODESC2 <PRSI>> " won't do.">)>)>>
- <DEFINE GUNK-FUNCTION ("AUX" (G <FIND-OBJ "GUNK">) (M <OCAN .G>))
- #DECL ((G) OBJECT (M) <OR OBJECT FALSE>)
- <COND (.M
- <PUT .M ,OCONTENTS <SPLICE-OUT .G <OCONTENTS .M>>>
- <PUT .G ,OCAN <>>
- <TELL
- "The slag turns out to be rather insubstantial, and crumbles into dust
- at your touch. It must not have been very valuable.">)>>
- <SETG SCORE-MAX <+ ,SCORE-MAX <SETG LIGHT-SHAFT 10>>>
- <DEFINE NO-OBJS ()
- <COND (<EMPTY? <AOBJS ,WINNER>>
- <SETG EMPTY-HANDED!-FLAG T>)
- (ELSE <SETG EMPTY-HANDED!-FLAG <>>)>
- <COND (<AND <==? ,HERE <FIND-ROOM "BSHAF">>
- <LIT? ,HERE>>
- <SCORE-UPD ,LIGHT-SHAFT>
- <SETG LIGHT-SHAFT 0>)>>
- <GDECL (LIGHT-SHAFT) FIX>
- \
- ; "SUBTITLE OLD MAN RIVER, THAT OLD MAN RIVER..."
- <DEFINE CLIFF-FUNCTION ()
- <COND (<MEMQ <FIND-OBJ "RBOAT"> <AOBJS ,WINNER>>
- <SETG DEFLATE!-FLAG <>>)
- (<SETG DEFLATE!-FLAG T>)>>
- <DEFINE STICK-FUNCTION ("AUX" (HERE ,HERE))
- #DECL ((HERE) ROOM)
- <COND (<VERB? "WAVE">
- <COND (<OR <==? .HERE <FIND-ROOM "FALLS">>
- <==? .HERE <FIND-ROOM "POG">>>
- <COND (<NOT ,RAINBOW!-FLAG>
- <TRO <FIND-OBJ "POT"> ,OVISON>
- <TELL
- "Suddenly, the rainbow appears to become solid and, I venture,
- walkable (I think the giveaway was the stairs and bannister).">
- <SETG RAINBOW!-FLAG T>)
- (<TELL
- "The rainbow seems to have become somewhat run-of-the-mill.">
- <SETG RAINBOW!-FLAG <>>)>)
- (<==? .HERE <FIND-ROOM "RAINB">>
- <SETG RAINBOW!-FLAG <>>
- <JIGS-UP
- "The structural integrity of the rainbow seems to have left it,
- leaving you about 450 feet in the air, supported by water vapor.">)
- (<TELL "Very good.">)>)>>
- <DEFINE FALLS-ROOM ()
- <COND (<VERB? "LOOK">
- <TELL
- "You are at the top of Aragain Falls, an enormous waterfall with a
- drop of about 450 feet. The only path here is on the north end.
- There is a man-sized barrel here which you could fit into." ,LONG-TELL1>
- <COND (,RAINBOW!-FLAG
- <TELL
- "A solid rainbow spans the falls.">)
- (<TELL
- "A beautiful rainbow can be seen over the falls and to the east.">)>)>>
- <DEFINE DIGGER ()
- <COND (<==? <PRSO> <FIND-OBJ "SHOVE">>)
- (<TRNN <PRSO> ,TOOLBIT>
- <TELL
- "Digging with the " 1 <ODESC2 <PRSO>> " is slow and tedious.">)
- (<TELL
- "Digging with a " 1 <ODESC2 <PRSO>> " is silly.">)>>
- <DEFINE DBOAT-FUNCTION ("AUX" (HERE ,HERE) (DBOAT <FIND-OBJ "DBOAT">))
- #DECL ((DBOAT) OBJECT (HERE) ROOM)
- <COND (<VERB? "INFLA">
- <TELL
- "This boat will not inflate since some moron put a hole in it.">)
- (<VERB? "PLUG">
- <COND (<==? <PRSI> <FIND-OBJ "PUTTY">>
- <TELL
- "Well done. The boat is repaired.">
- <COND (<NOT <OROOM .DBOAT>>
- <DROP-OBJECT .DBOAT>
- <TAKE-OBJECT <FIND-OBJ "IBOAT">>)
- (<REMOVE-OBJECT <FIND-OBJ "DBOAT">>
- <INSERT-OBJECT <FIND-OBJ "IBOAT"> .HERE>)>)
- (<WITH-TELL <PRSI>>)>)>>
- <DEFINE RBOAT-FUNCTION ("OPTIONAL" (ARG <>)
- "AUX" (RBOAT <FIND-OBJ "RBOAT">)
- (IBOAT <FIND-OBJ "IBOAT">) (HERE ,HERE))
- #DECL ((ARG) <OR FALSE ATOM> (IBOAT RBOAT) OBJECT (HERE) ROOM)
- <COND (.ARG <>)
- (<VERB? "BOARD">
- <COND (<MEMQ <FIND-OBJ "STICK"> <AOBJS ,WINNER>>
- <TELL
- "There is a hissing sound and the boat deflates.">
- <REMOVE-OBJECT .RBOAT>
- <INSERT-OBJECT <FIND-OBJ "DBOAT"> .HERE>
- T)>)
- (<VERB? "INFLA">
- <TELL "Inflating it further would probably burst it.">)
- (<VERB? "DEFLA">
- <COND (<==? <AVEHICLE ,WINNER> .RBOAT>
- <TELL
- "You can't deflate the boat while you're in it.">)
- (<NOT <MEMQ .RBOAT <ROBJS .HERE>>>
- <TELL
- "The boat must be on the ground to be deflated.">)
- (<TELL
- "The boat deflates.">
- <SETG DEFLATE!-FLAG T>
- <REMOVE-OBJECT .RBOAT>
- <INSERT-OBJECT .IBOAT .HERE>)>)>>
- <DEFINE BREATHE ()
- <PERFORM INFLATER <FIND-VERB "INFLA"> <PRSO> <FIND-OBJ "LUNGS">>>
- <DEFINE IBOAT-FUNCTION ("AUX" (IBOAT <FIND-OBJ "IBOAT">) (RBOAT <FIND-OBJ "RBOAT">)
- (HERE ,HERE))
- #DECL ((IBOAT RBOAT) OBJECT (HERE) ROOM)
- <COND (<VERB? "INFLA">
- <COND (<NOT <MEMQ .IBOAT <ROBJS .HERE>>>
- <TELL
- "The boat must be on the ground to be inflated.">)
- (<==? <PRSI> <FIND-OBJ "PUMP">>
- <TELL
- "The boat inflates and appears seaworthy.">
- <SETG DEFLATE!-FLAG <>>
- <REMOVE-OBJECT .IBOAT>
- <INSERT-OBJECT .RBOAT .HERE>)
- (<==? <PRSI> <FIND-OBJ "LUNGS">>
- <TELL
- "You don't have enough lung power to inflate it.">)
- (<TELL
- "With a " 1 <ODESC2 <PRSI>> "? Surely you jest!">)>)>>
- <DEFINE OVER-FALLS ()
- <COND (<VERB? "LOOK">)
- (<JIGS-UP ,OVER-FALLS-STR>)>>
- <SETG BUOY-FLAG!-FLAG T>
- <DEFINE SHAKE ("AUX" (HERE ,HERE))
- #DECL ((HERE) ROOM)
- <COND (<OBJECT-ACTION>)
- (<AND <NOT <TRNN <PRSO> ,OPENBIT>>
- <NOT <EMPTY? <OCONTENTS <PRSO>>>>
- <TELL
- "It sounds like there is something inside the " 1 <ODESC2 <PRSO>> ".">>)
- (<AND <TRNN <PRSO> ,OPENBIT>
- <NOT <EMPTY? <OCONTENTS <PRSO>>>>>
- <MAPF <>
- <FUNCTION (X)
- #DECL ((X) OBJECT)
- <PUT .X ,OCAN <>>
- <INSERT-OBJECT .X .HERE>>
- <OCONTENTS <PRSO>>>
- <PUT <PRSO> ,OCONTENTS ()>
- <TELL
- "All of the objects spill onto the floor.">)>>
- <DEFINE RIVR4-ROOM ()
- <AND <MEMQ <FIND-OBJ "BUOY"> <AOBJS ,WINNER>>
- ,BUOY-FLAG!-FLAG
- <TELL
- "Something seems funny about the feel of the buoy.">
- <SETG BUOY-FLAG!-FLAG <>>>>
- <SETG BEACH-DIG!-FLAG 0>
- <SETG GUANO-DIG!-FLAG 0>
- <GDECL (BEACH-DIG!-FLAG GUANO-DIG!-FLAG) FIX>
- <DEFINE BEACH-ROOM ("AUX" S (SHOV <FIND-OBJ "SHOVE">) (HERE ,HERE) CNT)
- #DECL ((S SHOV) OBJECT (HERE) ROOM (CNT) FIX)
- <COND (<AND <VERB? "DIG">
- <==? .SHOV <PRSO>>>
- <SETG BEACH-DIG!-FLAG <SET CNT <+ 1 ,BEACH-DIG!-FLAG>>>
- <COND (<G? .CNT 4>
- <SETG BEACH-DIG!-FLAG 0>
- <JIGS-UP "The hole collapses, smothering you.">)
- (<==? .CNT 4>
- <COND (<NOT <TRNN <SET S <FIND-OBJ "STATU">> ,OVISON>>
- <TELL "You can see a small statue here in the sand.">
- <TRO .S ,OVISON>)>)
- (<L? .CNT 0>)
- (<TELL <NTH ,BDIGS .CNT>>)>)>>
- <DEFINE TCAVE-ROOM ("AUX" (SHOV <FIND-OBJ "SHOVE">) (HERE ,HERE) CNT)
- #DECL ((SHOV) OBJECT (HERE) ROOM (CNT) FIX)
- <COND (<AND <VERB? "DIG">
- <==? <PRSO> .SHOV>>
- <COND (<MEMQ <FIND-OBJ "GUANO"> <ROBJS .HERE>>
- <SETG GUANO-DIG!-FLAG <SET CNT <+ 1 ,GUANO-DIG!-FLAG>>>
- <COND (<G? .CNT 3>
- <TELL "This is getting you nowhere.">)
- (<TELL <NTH ,CDIGS .CNT>>)>)
- (<TELL
- "There's nothing to dig into here.">)>)>>
-
- <GDECL (BDIGS CDIGS) <VECTOR [REST STRING]>>
- <DEFINE GERONIMO ()
- <COND (<==? ,HERE <FIND-ROOM "BARRE">>
- <JIGS-UP ,OVER-FALLS-STR>)
- (<TELL
- "Wasn't he an Indian?">)>>
- <GDECL (SWIMYUKS) <VECTOR [REST STRING]>>
- <DEFINE SWIMMER ("AUX" (SWIMYUKS ,SWIMYUKS))
- #DECL ((SWIMYUKS) <VECTOR [REST STRING]>)
- <COND (<RTRNN ,HERE ,RFILLBIT>
- <TELL
- "Swimming is not allowed in this dungeon.">)
- (<TELL <PICK-ONE .SWIMYUKS>>)>>
- \
- ; "SUBTITLE LURKING GRUES"
- <DEFINE GRUE-FUNCTION ()
- <COND (<VERB? "EXAMI">
- <TELL ,GRUE-DESC1 ,LONG-TELL1>)
- (<VERB? "FIND">
- <TELL ,GRUE-DESC2 ,LONG-TELL1>)>>
- \
- ; "THE VOLCANO"
- <SETG BTIE!-FLAG <>>
- <SETG BINF!-FLAG <>>
- <DEFINE BALLOON BALLACT ("OPTIONAL" (ARG <>)
- "AUX" (BALL <FIND-OBJ "BALLO">)
- (CONT <FIND-OBJ "RECEP">) M
- (BINF ,BINF!-FLAG) BLABE R)
- #DECL ((ARG) <OR ATOM FALSE> (BLABE BALL CONT RECEP) OBJECT
- (BINF) <OR FALSE OBJECT> (M) <OR FALSE VECTOR>
- (BALLACT) ACTIVATION (R) <OR NEXIT CEXIT DOOR ROOM>)
- <COND (<==? .ARG READ-OUT>
- <COND (<VERB? "LOOK">
- <COND (.BINF
- <TELL
- "The cloth bag is inflated and there is a "
- 1
- <ODESC2 .BINF>
- " burning in the receptacle.">)
- (<TELL "The cloth bag is draped over the the basket.">)>
- <COND (,BTIE!-FLAG
- <TELL "The balloon is tied to the hook.">)>)>
- <RETURN <> .BALLACT>)>
- <COND (<==? .ARG READ-IN>
- <COND (<VERB? "WALK">
- <COND (<SET M
- <MEMQ <2 ,PRSVEC> <REXITS ,HERE>>>
- <COND (,BTIE!-FLAG
- <TELL "You are tied to the ledge.">
- <RETURN T .BALLACT>)
- (ELSE
- <AND <TYPE? <SET R <2 .M>> ROOM>
- <NOT <RTRNN .R ,RMUNGBIT>>
- <SETG BLOC .R>>
- <RETURN <> .BALLACT>)>)
- (<TELL
- "I'm afraid you can't control the balloon in this way.">
- <RETURN T .BALLACT>)>)
- (<AND <VERB? "TAKE">
- <==? ,BINF!-FLAG <PRSO>>>
- <TELL "You don't really want to hold a burning "
- 1
- <ODESC2 <PRSO>>
- ".">
- <RETURN T .BALLACT>)
- (<AND <VERB? "PUT">
- <==? <PRSI> .CONT>
- <NOT <EMPTY? <OCONTENTS .CONT>>>>
- <TELL "The receptacle is already occupied.">
- <RETURN T .BALLACT>)
- (<RETURN <> .BALLACT>)>)>
- <COND (<VERB? "BURN">
- <COND (<MEMQ <PRSO> <OCONTENTS .CONT>>
- <TELL "The "
- 1
- <ODESC2 <PRSO>>
- " burns inside the receptacle.">
- <SETG BURNUP-INT <CLOCK-INT ,BRNIN <* <OSIZE <PRSO>> 20>>>
- <TRO <PRSO> <+ ,FLAMEBIT ,LIGHTBIT ,ONBIT>>
- <TRZ <PRSO> <+ ,TAKEBIT ,READBIT>>
- <COND (,BINF!-FLAG)
- (<TELL
- "The cloth bag inflates as it fills with hot air.">
- <COND (<NOT ,BLAB!-FLAG>
- <PUT .BALL
- ,OCONTENTS
- (<SET BLABE <FIND-OBJ "BLABE">>
- !<OCONTENTS .BALL>)>
- <PUT .BLABE ,OCAN .BALL>)>
- <SETG BLAB!-FLAG T>
- <SETG BINF!-FLAG <PRSO>>
- <CLOCK-INT ,BINT 3>)>)>)
- (<AND <VERB? "DISEM">
- <RTRNN ,HERE ,RLANDBIT>>
- <COND (,BINF!-FLAG
- <CLOCK-INT ,BINT 3>)>
- <>)
- (<VERB? "C-INT">
- <COND (<OR <AND <TRNN .CONT ,OPENBIT> ,BINF!-FLAG>
- <MEMBER "LEDG" <STRINGP <RID ,HERE>>>>
- <RISE-AND-SHINE .BALL>)
- (<DECLINE-AND-FALL .BALL>)>)>>
- <SETG BLAB!-FLAG <>>
- <GDECL (BURNUP-INT BINT) CEVENT>
- <DEFINE RISE-AND-SHINE (BALL
- "AUX" (S <TOP ,SCRSTR>) M
- (IN? <==? <AVEHICLE ,WINNER> .BALL>) (BL ,BLOC))
- #DECL ((BALL) OBJECT (BL) ROOM (M) <OR FALSE STRING> (S) STRING
- (IN?) <OR ATOM FALSE>)
- <CLOCK-INT ,BINT 3>
- <COND (<SET M <MEMBER "VAIR" <STRINGP <RID .BL>>>>
- <COND (<=? <REST .M 4> "4">
- <CLOCK-DISABLE ,BURNUP-INT>
- <CLOCK-DISABLE ,BINT>
- <REMOVE-OBJECT .BALL>
- <INSERT-OBJECT <FIND-OBJ "DBALL"> <FIND-ROOM "VLBOT">>
- <COND (.IN?
- <JIGS-UP
- "Your balloon has hit the rim of the volcano, ripping the cloth and
- causing you a 500 foot drop. Did you get your flight insurance?">)
- (<TELL
- "You hear a boom and notice that the balloon is falling to the ground.">)>
- <SETG BLOC <FIND-ROOM "VLBOT">>)
- (<SUBSTRUC <STRINGP <RID .BL>> 0 4 .S>
- <PUT .S 5 <CHTYPE <+ <CHTYPE <5 .M> FIX> 1> CHARACTER>>
- <COND (.IN?
- <GOTO <SETG BLOC <FIND-ROOM .S>>>
- <TELL "The balloon ascends.">
- <ROOM-INFO>)
- (<PUT-BALLOON .BALL .S "ascends.">)>)>)
- (<SET M <MEMBER "LEDG" <STRINGP <RID .BL>>>>
- <SUBSTRUC "VAIR" 0 4 .S>
- <PUT .S 5 <5 .M>>
- <COND (.IN?
- <GOTO <SETG BLOC <FIND-ROOM .S>>>
- <TELL "The balloon leaves the ledge.">
- <ROOM-INFO>)
- (<CLOCK-INT ,VLGIN 10>
- <PUT-BALLOON .BALL .S "floats away. It seems to be ascending,
- due to its light load.">)>)
- (.IN?
- <GOTO <SETG BLOC <FIND-ROOM "VAIR1">>>
- <TELL "The balloon rises slowly from the ground.">
- <ROOM-INFO>)
- (<PUT-BALLOON .BALL "VAIR1" "lifts off.">)>>
- <DEFINE PUT-BALLOON (BALL THERE STR)
- #DECL ((BALL) OBJECT (HERE) ROOM (THERE STR) STRING)
- <AND <MEMBER "LEDG" <STRINGP <RID ,HERE>>>
- <TELL "You watch as the balloon slowly " 1 .STR>>
- <REMOVE-OBJECT .BALL>
- <INSERT-OBJECT .BALL <SETG BLOC <FIND-ROOM .THERE>>>>
- <GDECL (BLOC) ROOM>
- <DEFINE DECLINE-AND-FALL (BALL "AUX" (S <TOP ,SCRSTR>) M (BL ,BLOC)
- (IN? <==? <AVEHICLE ,WINNER> .BALL>) FOO)
- #DECL ((BALL) OBJECT (BL) ROOM (M) <OR FALSE STRING> (S) STRING
- (IN?) <OR ATOM FALSE> (FOO) CEVENT)
- <CLOCK-INT ,BINT 3>
- <COND (<SET M <MEMBER "VAIR" <STRINGP <RID .BL>>>>
- <COND (<=? <REST .M 4> "1">
- <COND (.IN?
- <GOTO <SETG BLOC <FIND-ROOM "VLBOT">>>
- <COND (,BINF!-FLAG
- <TELL "The balloon has landed.">
- <ROOM-INFO>)
- (T
- <REMOVE-OBJECT .BALL>
- <INSERT-OBJECT <FIND-OBJ "DBALL"> ,BLOC>
- <PUT ,WINNER ,AVEHICLE <>>
- <CLOCK-DISABLE <SET FOO <CLOCK-INT ,BINT 0>>>
- <TELL
- "You have landed, but the balloon did not survive.">)>)
- (<PUT-BALLOON .BALL "VLBOT" "lands.">)>)
- (<SUBSTRUC <STRINGP <RID .BL>> 0 4 .S>
- <PUT .S 5 <CHTYPE <- <CHTYPE <5 .M> FIX> 1> CHARACTER>>
- <COND (.IN?
- <GOTO <SETG BLOC <FIND-ROOM .S>>>
- <TELL "The balloon descends.">
- <ROOM-INFO>)
- (<PUT-BALLOON .BALL .S "descends.">)>)>)>>
- <DEFINE WIRE-FUNCTION ("AUX" (BINT ,BINT))
- #DECL ((BINT) CEVENT)
- <COND (<VERB? "TIE">
- <COND (<AND <==? <PRSO> <FIND-OBJ "BROPE">>
- <OR <==? <PRSI> <FIND-OBJ "HOOK1">>
- <==? <PRSI> <FIND-OBJ "HOOK2">>>>
- <SETG BTIE!-FLAG T>
- <CLOCK-DISABLE .BINT>
- <TELL "The balloon is fastened to the hook.">)>)
- (<AND <VERB? "UNTIE">
- <==? <PRSO> <FIND-OBJ "BROPE">>>
- <COND (,BTIE!-FLAG
- <CLOCK-ENABLE <SET BINT <CLOCK-INT ,BINT 3>>>
- <SETG BTIE!-FLAG <>>
- <TELL "The wire falls off of the hook.">)
- (<TELL "The wire is not tied to anything.">)>)>>
- <DEFINE BURNUP ("AUX" (R <FIND-OBJ "RECEP">) (OBJ <1 <OCONTENTS .R>>))
- #DECL ((R OBJ) OBJECT)
- <COND (<==? ,HERE ,BLOC>
- <TELL
- "You notice that the " 1 <ODESC2 .OBJ> " has burned out, and that
- the cloth bag starts to deflate.">)>
- <PUT .R ,OCONTENTS <SPLICE-OUT .OBJ <OCONTENTS .R>>>
- <SETG BINF!-FLAG <>>
- T>
- <SETG SAFE-FLAG!-FLAG <>>
- <DEFINE SAFE-ROOM ()
- <COND (<VERB? "LOOK">
- <TELL
- "You are in a dusty old room which is virtually featureless, except
- for an exit on the north side."
- ,LONG-TELL1
- <COND (<NOT ,SAFE-FLAG!-FLAG>
- "
- Imbedded in the far wall, there is a rusty old box. It appears that
- the box is somewhat damaged, since an oblong hole has been chipped
- out of the front of it.")
- ("
- On the far wall is a rusty box, whose door has been blown off.")>>)>>
- <DEFINE SAFE-FUNCTION ()
- <COND (<VERB? "TAKE">
- <TELL "The box is imbedded in the wall.">)
- (<VERB? "OPEN">
- <COND (,SAFE-FLAG!-FLAG <TELL "The box has no door!">)
- (<TELL "The box is rusted and will not open.">)>)
- (<VERB? "CLOSE">
- <COND (,SAFE-FLAG!-FLAG <TELL "The box has no door!">)
- (<TELL "The box is not open, chomper!">)>)
- (<VERB? "BLAST"> <TELL "What do you expect, BOOM?">)>>
- <DEFINE BRICK-FUNCTION ()
- <COND (<VERB? "BURN"> <JIGS-UP ,BRICK-BOOM>)>>
- <DEFINE FUSE-FUNCTION ("AUX" (FUSE <FIND-OBJ "FUSE">)
- (BRICK <FIND-OBJ "BRICK">) BRICK-ROOM OC)
- #DECL ((FUSE BRICK) OBJECT (BRICK-ROOM) <OR ROOM FALSE>
- (OC) <OR OBJECT FALSE>)
- <COND (<VERB? "BURN">
- <TELL "The wire starts to burn.">
- <CLOCK-ENABLE <2 <OLINT .FUSE>>>)
- (<VERB? "C-INT">
- <TRZ .FUSE ,OVISON>
- <COND (<==? <OCAN .FUSE> .BRICK>
- <TRZ .BRICK ,OVISON>
- <COND (<SET OC <OCAN .BRICK>>
- <SET BRICK-ROOM <OROOM .OC>>)
- (<SET BRICK-ROOM <OROOM .BRICK>>)>
- <OR .BRICK-ROOM <SET BRICK-ROOM ,HERE>>
- <COND (<==? .BRICK-ROOM ,HERE>
- <MUNG-ROOM .BRICK-ROOM
- "The way is blocked by debris from an explosion.">
- <JIGS-UP ,BRICK-BOOM>)
- (<==? .BRICK-ROOM <FIND-ROOM "SAFE">>
- <CLOCK-INT ,SAFIN 5>
- <SETG MUNGED-ROOM <OROOM .BRICK>>
- <TELL "There is an explosion nearby.">
- <COND (<MEMQ .BRICK <OCONTENTS <FIND-OBJ "SSLOT">>>
- <TRZ <FIND-OBJ "SSLOT"> ,OVISON>
- <TRO <FIND-OBJ "SAFE"> ,OPENBIT>
- <SETG SAFE-FLAG!-FLAG T>)>)
- (<TELL "There is an explosion nearby.">
- <CLOCK-INT ,SAFIN 5>
- <SETG MUNGED-ROOM .BRICK-ROOM>
- <MAPF <>
- <FUNCTION (X)
- #DECL ((X) OBJECT)
- <COND (<TRNN .X ,TAKEBIT>
- <TRZ .X ,OVISON>)>>
- <ROBJS .BRICK-ROOM>>
- <COND (<==? .BRICK-ROOM <FIND-ROOM "LROOM">>
- <MAPF <>
- <FUNCTION (X) #DECL ((X) OBJECT)
- <PUT .X ,OCAN <>>>
- <OCONTENTS <FIND-OBJ "TCASE">>>
- <PUT <FIND-OBJ "TCASE"> ,OCONTENTS ()>)>)>)
- (<OR <NOT <OROOM .FUSE>> <==? ,HERE <OROOM .FUSE>>>
- <TELL "The wire rapidly burns into nothingness.">)>)>>
- <DEFINE SAFE-MUNG ("AUX" (RM ,MUNGED-ROOM))
- #DECL ((RM) ROOM)
- <COND (<==? ,HERE .RM>
- <JIGS-UP
- <COND (<RTRNN .RM ,RHOUSEBIT>
- "The house shakes, and the ceiling of the room you're in collapses,
- turning you into a pancake.")
- ("The room trembles and 50,000 pounds of rock fall on you, turning you
- into a pancake.")>>)
- (<TELL
- "You may recall that recent explosion. Well, probably as a result of
- that, you hear an ominous rumbling, as if one of the rooms in the
- dungeon had collapsed." ,LONG-TELL1>
- <AND <==? .RM <FIND-ROOM "SAFE">>
- <CLOCK-INT ,LEDIN 8>>)>
- <MUNG-ROOM <OR <OROOM <FIND-OBJ "BRICK">> ,HERE>
- "The way is blocked by debris from an explosion.">>
- <DEFINE LEDGE-MUNG ("AUX" (RM <FIND-ROOM "LEDG4">))
- #DECL ((RM) ROOM)
- <COND (<==? ,HERE .RM>
- <COND (<AVEHICLE ,WINNER>
- <COND (,BTIE!-FLAG
- <SET RM <FIND-ROOM "VLBOT">>
- <SETG BLOC .RM>
- <REMOVE-OBJECT <FIND-OBJ "BALLO">>
- <INSERT-OBJECT <FIND-OBJ "DBALL"> .RM>
- <SETG BTIE!-FLAG <>>
- <SETG BINF!-FLAG <>>
- <CLOCK-DISABLE ,BINT>
- <CLOCK-DISABLE ,BRNIN>
- <JIGS-UP
- "The ledge collapses, probably as a result of the explosion. A large
- chunk of it, which is attached to the hook, drags you down to the
- ground. Fatally.">)
- (<TELL "The ledge collapses, leaving you with no place to land.">)>)
- (T
- <JIGS-UP
- "The force of the explosion has caused the ledge to collapse
- belatedly.">)>)
- (<TELL "The ledge collapses, giving you a narrow escape.">)>
- <MUNG-ROOM .RM "The ledge has collapsed and cannot be landed on.">>
- <DEFINE LEDGE-FUNCTION ()
- <COND (<VERB? "GO-IN">
- <AND ,SAFE-FLAG!-FLAG
- <TELL
- "Behind you, the walls of the safe room collapse into rubble.">
- <SETG SAFE-FLAG!-FLAG <>>>)
- (<VERB? "LOOK">
- <TELL
- "You are on a wide ledge high into the volcano. The rim of the
- volcano is about 200 feet above and there is a precipitous drop below
- to the bottom." ,LONG-TELL1
- <COND (<RTRNN <FIND-ROOM "SAFE"> ,RMUNGBIT>
- " The way to the south is blocked by rubble.")
- (" There is a small door to the south.")>>)>>
- <DEFINE BLAST ()
- <COND (<==? ,HERE <FIND-ROOM "SAFE">>)
- (<TELL "I don't really know how to do that.">)>>
- <DEFINE VOLGNOME ()
- <COND (<MEMBER "LEDG" <STRINGP <RID ,HERE>>>
- <TELL ,GNOME-DESC ,LONG-TELL1>
- <INSERT-OBJECT <FIND-OBJ "GNOME"> ,HERE>)
- (<CLOCK-INT ,VLGIN 1>)>>
- <SETG GNOME-DOOR!-FLAG <SETG GNOME-FLAG!-FLAG <>>>
- <DEFINE GNOME-FUNCTION ("AUX" (GNOME <FIND-OBJ "GNOME">))
- #DECL ((GNOME) OBJECT)
- <COND (<AND <VERB? "GIVE" "THROW">
- <COND (<N==? <OTVAL <PRSO>> 0>
- <TELL
- "Thank you very much for the " ,LONG-TELL1 <ODESC2 <PRSO>> ". I don't believe
- I've ever seen one as beautiful. 'Follow me', he says, and a door
- appears on the west end of the ledge. Through the door, you can see
- a narrow chimney sloping steeply downward. The gnome moves quickly,
- and he disappears from sight.">
- <REMOVE-OBJECT .GNOME>
- <SETG GNOME-DOOR!-FLAG T>)
- (<TELL
- "'That wasn't quite what I had in mind', he says, crunching the
- " 1 <ODESC2 <PRSO>> " in his rock-hard hands.">
- <REMOVE-OBJECT <PRSO>>)>>)
- (<VERB? "C-INT">
- <TELL
- "The gnome glances at his watch. 'Oops. I'm late for an
- appointment!' He disappears, leaving you alone on the ledge." ,LONG-TELL1>
- <REMOVE-OBJECT .GNOME>)
- (<TELL
- "The gnome appears increasingly nervous.">
- <OR ,GNOME-FLAG!-FLAG <CLOCK-INT ,GNOIN 5>>
- <SETG GNOME-FLAG!-FLAG T>)>>
|