1539 lines
49 KiB
Plaintext
1539 lines
49 KiB
Plaintext
; "SUBTITLE TOMB OF THE UNKNOWN IMPLEMENTER"
|
||
|
||
<DEFINE COKE-BOTTLES ()
|
||
<COND (<VERB? "THROW" "MUNG">
|
||
<TELL
|
||
"Congratulations! You've managed to break all those bottles.
|
||
Fortunately for your feet, they were made of magic glass and disappear
|
||
immediately." ,LONG-TELL1>
|
||
<COND (<==? <PRSI> <SFIND-OBJ "COKES">>
|
||
<REMOVE-OBJECT <PRSI>>
|
||
<TELL "Somehow, the " ,POST-CRLF <ODESC2 <PRSO>>
|
||
" managed to disappear as well.">)>
|
||
<REMOVE-OBJECT <PRSO>>)>>
|
||
|
||
<DEFINE HEAD-FUNCTION ("AUX" (NL ()) (LCASE <SFIND-OBJ "LCASE">))
|
||
#DECL ((NL) <LIST [REST OBJECT]> (LCASE) OBJECT)
|
||
<COND (<VERB? "HELLO">
|
||
<TELL "The implementers are dead; therefore they do not respond.">)
|
||
(<VERB? "DESTR" "KICK" "POKE" "ATTAC" "KILL" "RUB" "OPEN" "TAKE" "BURN">
|
||
<TELL ,HEADSTR1 ,LONG-TELL1>
|
||
<SET NL <ROB-ADV ,WINNER .NL>>
|
||
<SET NL <ROB-ROOM ,HERE .NL 100>>
|
||
<COND (<NOT <EMPTY? .NL>>
|
||
<OR <OROOM .LCASE> <INSERT-OBJECT .LCASE <SFIND-ROOM "LROOM">>>
|
||
<PUT .LCASE ,OCONTENTS (!<OCONTENTS .LCASE> !.NL)>)>
|
||
<JIGS-UP ,HEADSTR2>
|
||
T)>>
|
||
|
||
<SETG THEN 0>
|
||
|
||
\
|
||
|
||
;"SUBTITLE A DROP IN THE BUCKET"
|
||
|
||
<SETG BUCKET-TOP!-FLAG <>>
|
||
|
||
<DEFINE BUCKET ("OPTIONAL" (ARG <>)
|
||
"AUX" (W <SFIND-OBJ "WATER">) (BUCK <SFIND-OBJ "BUCKE">))
|
||
#DECL ((ARG) <OR FALSE ATOM> (W BUCK) OBJECT)
|
||
<COND (<==? .ARG READ-IN> <>)
|
||
(<AND <VERB? "C-INT">
|
||
<COND (<MEMQ .W <OCONTENTS .BUCK>>
|
||
<REMOVE-OBJECT .W>
|
||
<>)
|
||
(T)>>)
|
||
(<AND <VERB? "BURN">
|
||
<==? <PRSO> .BUCK>>
|
||
<TELL
|
||
"The bucket is fireproof, and won't burn.">)
|
||
(<VERB? "KICK">
|
||
<JIGS-UP "If you insist.">
|
||
T)
|
||
(<==? .ARG READ-OUT>
|
||
<COND (<AND <==? <OCAN .W> .BUCK> <NOT ,BUCKET-TOP!-FLAG>>
|
||
<TELL "The bucket rises and comes to a stop.">
|
||
<SETG BUCKET-TOP!-FLAG T>
|
||
<PASS-THE-BUCKET <SFIND-ROOM "TWELL"> .BUCK>
|
||
<CLOCK-INT ,BCKIN 100>
|
||
<>)
|
||
(<AND ,BUCKET-TOP!-FLAG <N==? <OCAN .W> .BUCK>>
|
||
<TELL "The bucket descends and comes to a stop.">
|
||
<SETG BUCKET-TOP!-FLAG <>>
|
||
<PASS-THE-BUCKET <SFIND-ROOM "BWELL"> .BUCK>)>)>>
|
||
|
||
<DEFINE PASS-THE-BUCKET (R B "AUX" (PRSO <PRSO>) (PRSVEC ,PRSVEC))
|
||
#DECL ((R) ROOM (B) OBJECT (PRSVEC) VECTOR (PRSO) OBJECT)
|
||
<PUT .PRSVEC 2 <>>
|
||
<REMOVE-OBJECT .B>
|
||
<INSERT-OBJECT .B .R>
|
||
<COND (<==? <AVEHICLE ,WINNER> .B>
|
||
<GOTO .R>
|
||
<ROOM-INFO>)>
|
||
<PUT .PRSVEC 2 .PRSO>>
|
||
|
||
\
|
||
|
||
;"SUBTITLE CHOMPERS IN WONDERLAND"
|
||
|
||
<DEFINE EATME-FUNCTION ("AUX" R C (HERE ,HERE))
|
||
#DECL ((C) OBJECT (HERE R) ROOM)
|
||
<COND (<AND <VERB? "EAT">
|
||
<==? <PRSO> <SET C <SFIND-OBJ "ECAKE">>>
|
||
<==? .HERE <SFIND-ROOM "ALICE">>>
|
||
<TELL
|
||
"Suddenly, the room appears to have become very large.">
|
||
<REMOVE-OBJECT .C>
|
||
<SET R <SFIND-ROOM "ALISM">>
|
||
<TRZ <SFIND-OBJ "ROBOT"> ,OVISON>
|
||
<PUT .R ,ROBJS <ROBJS .HERE>>
|
||
<MAPF <>
|
||
<FUNCTION (X) #DECL ((X) OBJECT)
|
||
<OSIZE .X <* 64 <OSIZE .X>>>
|
||
<PUT .X ,OROOM .R>>
|
||
<ROBJS .HERE>>
|
||
<GOTO .R>)>>
|
||
|
||
<DEFINE CAKE-FUNCTION ("AUX" (RICE <SFIND-OBJ "RDICE">) (OICE <SFIND-OBJ "ORICE">)
|
||
(BICE <SFIND-OBJ "BLICE">) (HERE ,HERE) R)
|
||
#DECL ((RICE OICE BICE) OBJECT (HERE R) ROOM)
|
||
<COND (<VERB? "READ">
|
||
<COND (<NOT <EMPTY? <PRSI>>>
|
||
<COND (<==? <PRSI> <SFIND-OBJ "BOTTL">>
|
||
<TELL
|
||
"The letters appear larger, but still are too small to be read.">)
|
||
(<==? <PRSI> <SFIND-OBJ "FLASK">>
|
||
<TELL "The icing, now visible, says '"
|
||
1
|
||
<COND (<==? <PRSO> .RICE> "Evaporate")
|
||
(<==? <PRSO> .OICE> "Explode")
|
||
("Enlarge")>
|
||
"'.">)
|
||
(<TELL "You can't see through that!">)>)
|
||
(<TELL
|
||
"The only writing legible is a capital E. The rest is too small to
|
||
be clearly visible.">)>)
|
||
(<AND <VERB? "EAT"> <MEMBER "ALI" <STRINGP <RID .HERE>>>>
|
||
<COND (<==? <PRSO> .OICE>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<ICEBOOM>)
|
||
(<==? <PRSO> .BICE>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<TELL "The room around you seems to be getting smaller.">
|
||
<COND (<==? .HERE <SFIND-ROOM "ALISM">>
|
||
<SET R <SFIND-ROOM "ALICE">>
|
||
<TRO <SFIND-OBJ "ROBOT"> ,OVISON>
|
||
<PUT .R ,ROBJS <ROBJS .HERE>>
|
||
<TRZ <SFIND-OBJ "POSTS"> ,OVISON>
|
||
<MAPF <>
|
||
<FUNCTION (X) #DECL ((X) OBJECT)
|
||
<PUT .X ,OROOM .R>
|
||
<OSIZE .X </ <OSIZE .X> 64>>>
|
||
<ROBJS .HERE>>
|
||
<GOTO .R>)
|
||
(<JIGS-UP ,CRUSHED>)>)>)
|
||
(<AND <VERB? "THROW">
|
||
<==? <PRSO> .OICE>
|
||
<MEMBER "ALI" <STRINGP <RID .HERE>>>>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<ICEBOOM>)
|
||
(<AND <VERB? "THROW">
|
||
<==? <PRSO> .RICE>
|
||
<==? <PRSI> <SFIND-OBJ "POOL">>>
|
||
<REMOVE-OBJECT <PRSI>>
|
||
<TELL
|
||
"The pool of water evaporates, revealing a tin of rare spices.">
|
||
<TRO <SFIND-OBJ "SAFFR"> ,OVISON>)>>
|
||
|
||
<DEFINE FLASK-FUNCTION ()
|
||
<COND (<VERB? "OPEN">
|
||
<MUNG-ROOM ,HERE "Noxious vapors prevent your entry.">
|
||
<JIGS-UP ,VAPORS>)
|
||
(<VERB? "MUNG" "THROW">
|
||
<TELL "The flask breaks into pieces.">
|
||
<TRZ <PRSO> ,OVISON>
|
||
<JIGS-UP ,VAPORS T>)>>
|
||
|
||
<DEFINE PLEAK ()
|
||
<COND (<VERB? "TAKE">
|
||
<TELL <PICK-ONE ,YUKS>>)
|
||
(<VERB? "PLUG">
|
||
<TELL "The leak is too high above you to reach.">)>>
|
||
|
||
<DEFINE ICEBOOM ()
|
||
<MUNG-ROOM ,HERE ,ICEMUNG>
|
||
<JIGS-UP ,ICEBLAST>>
|
||
|
||
<DEFINE MAGNET-ROOM ()
|
||
<COND (<VERB? "LOOK">
|
||
<TELL
|
||
"You are in a room with a low ceiling which is circular in shape.
|
||
There are exits to the east and the southeast.">)
|
||
(<AND <VERB? "GO-IN"> ,CAROUSEL-FLIP!-FLAG>
|
||
<COND (,CAROUSEL-ZOOM!-FLAG
|
||
<JIGS-UP <COND (<==? ,PLAYER ,WINNER> ,SPINDIZZY)
|
||
(ELSE ,SPINROBOT)>>)
|
||
(<TELL
|
||
"As you enter, your compass starts spinning wildly.">
|
||
<>)>)>>
|
||
|
||
<DEFINE MAGNET-ROOM-EXIT ("AUX" (PV ,PRSVEC) (DIR <2 .PV>))
|
||
#DECL ((DIR) DIRECTION (PV) <VECTOR [3 ANY]>)
|
||
<COND (,CAROUSEL-FLIP!-FLAG
|
||
<TELL "You cannot get your bearings...">
|
||
<COND (<PROB 50>
|
||
<SFIND-ROOM "CMACH">)
|
||
(<SFIND-ROOM "ALICE">)>)
|
||
(<==? .DIR <FIND-DIR "E">>
|
||
<SFIND-ROOM "CMACH">)
|
||
(<OR <==? .DIR <FIND-DIR "SE">>
|
||
<==? .DIR <FIND-DIR "OUT">>>
|
||
<SFIND-ROOM "ALICE">)>>
|
||
|
||
<DEFINE CMACH-ROOM ()
|
||
<COND (<VERB? "LOOK">
|
||
<TELL ,CMACH-DESC ,LONG-TELL1>)>>
|
||
|
||
<SETG CAROUSEL-ZOOM!-FLAG <>>
|
||
|
||
<SETG CAROUSEL-FLIP!-FLAG <>>
|
||
|
||
<DEFINE BUTTONS ("AUX" I)
|
||
#DECL ((I) OBJECT)
|
||
<COND (<VERB? "PUSH">
|
||
<COND (<==? ,WINNER ,PLAYER>
|
||
<JIGS-UP
|
||
"There is a giant spark and you are fried to a crisp.">)
|
||
(<==? <PRSO> <SFIND-OBJ "SQBUT">>
|
||
<COND (,CAROUSEL-ZOOM!-FLAG
|
||
<TELL "Nothing seems to happen.">)
|
||
(<SETG CAROUSEL-ZOOM!-FLAG T>
|
||
<TELL "The whirring increases in intensity slightly.">)>)
|
||
(<==? <PRSO> <SFIND-OBJ "RNBUT">>
|
||
<COND (,CAROUSEL-ZOOM!-FLAG
|
||
<SETG CAROUSEL-ZOOM!-FLAG <>>
|
||
<TELL "The whirring decreases in intensity slightly.">)
|
||
(<TELL "Nothing seems to happen.">)>)
|
||
(<==? <PRSO> <SFIND-OBJ "TRBUT">>
|
||
<SETG CAROUSEL-FLIP!-FLAG <NOT ,CAROUSEL-FLIP!-FLAG>>
|
||
<COND (<==? <OROOM <SET I <SFIND-OBJ "IRBOX">>>
|
||
<SFIND-ROOM "CAROU">>
|
||
<TELL
|
||
"A dull thump is heard in the distance.">
|
||
<TRC .I ,OVISON>
|
||
<COND (<TRNN .I ,OVISON>
|
||
<RTRZ <SFIND-ROOM "CAROU"> ,RSEENBIT>)>
|
||
T)
|
||
(<TELL "Click.">)>)>)>>
|
||
|
||
<SETG CAGE-SOLVE!-FLAG <>>
|
||
|
||
<DEFINE SPHERE-FUNCTION ("AUX" (R <SFIND-OBJ "ROBOT">) C FL RACT)
|
||
#DECL ((C) ROOM (R) OBJECT (FL) <OR ATOM FALSE> (RACT) ADV)
|
||
<SET FL <AND <NOT ,CAGE-SOLVE!-FLAG> <VERB? "TAKE">>>
|
||
<COND (<AND .FL <==? ,PLAYER ,WINNER>>
|
||
<TELL ,CAGESTR ,LONG-TELL1>
|
||
<COND (<==? <OROOM .R> ,HERE>
|
||
<GOTO <SET C <SFIND-ROOM "CAGED">>>
|
||
<REMOVE-OBJECT .R>
|
||
<INSERT-OBJECT .R .C>
|
||
<PUT <SET RACT <OACTOR .R>> ,AROOM .C>
|
||
<TRO .R ,NDESCBIT>
|
||
<SETG SPHERE-CLOCK <CLOCK-INT ,SPHIN 10>>
|
||
T)
|
||
(ELSE
|
||
<TRZ <SFIND-OBJ "SPHER"> ,OVISON>
|
||
<MUNG-ROOM <SFIND-ROOM "CAGER">
|
||
"You are stopped by a cloud of poisonous gas.">
|
||
<JIGS-UP ,POISON T>)>)
|
||
(.FL
|
||
<TRZ <SFIND-OBJ "SPHER"> ,OVISON>
|
||
<JIGS-UP ,ROBOT-CRUSH>
|
||
<REMOVE-OBJECT .R>
|
||
<TRZ <PRSO> ,OVISON>
|
||
<INSERT-OBJECT <SFIND-OBJ "RCAGE"> ,HERE>
|
||
T)
|
||
(<VERB? "C-INT">
|
||
<MUNG-ROOM <SFIND-ROOM "CAGER">
|
||
"You are stopped by a cloud of poisonous gas.">
|
||
<JIGS-UP ,POISON T>)
|
||
(<VERB? "LKIN">
|
||
<PALANTIR>)>>
|
||
|
||
<DEFINE CAGED-ROOM ()
|
||
<COND (,CAGE-SOLVE!-FLAG <SETG HERE <SFIND-ROOM "CAGER">>)>>
|
||
|
||
<GDECL (SPHERE-CLOCK) CEVENT (ROBOT-ACTIONS) <UVECTOR [REST VERB]>>
|
||
|
||
<DEFINE ROBOT-ACTOR ("AUX" C CAGE (R <SFIND-OBJ "ROBOT">) RACT)
|
||
#DECL ((C) ROOM (CAGE) OBJECT (R) OBJECT (RACT) ADV)
|
||
<COND (<AND <VERB? "RAISE"> <==? <PRSO> <SFIND-OBJ "CAGE">>>
|
||
<TELL "The cage shakes and is hurled across the room.">
|
||
<CLOCK-DISABLE ,SPHERE-CLOCK>
|
||
<SETG WINNER ,PLAYER>
|
||
<GOTO <SET C <SFIND-ROOM "CAGER">>>
|
||
<INSERT-OBJECT <SET CAGE <SFIND-OBJ "CAGE">> .C>
|
||
<TRO .CAGE ,TAKEBIT>
|
||
<TRZ .CAGE ,NDESCBIT>
|
||
<TRZ .R ,NDESCBIT>
|
||
<TRO <SFIND-OBJ "SPHER"> ,TAKEBIT>
|
||
<REMOVE-OBJECT .R>
|
||
<INSERT-OBJECT .R .C>
|
||
<PUT <SET RACT <OACTOR .R>> ,AROOM .C>
|
||
<SETG WINNER .RACT>
|
||
<SETG CAGE-SOLVE!-FLAG T>)
|
||
(<VERB? "EAT" "DRINK">
|
||
<TELL
|
||
"\"I am sorry but that action is difficult for a being with no mouth.\"">)
|
||
(<VERB? "READ">
|
||
<TELL
|
||
"\"My vision is not sufficiently acute to read such small type.\"">)
|
||
(<MEMQ <PRSA> ,ROBOT-ACTIONS> <TELL "\"Whirr, buzz, click!\""> <>)
|
||
(<TELL
|
||
"\"I am only a stupid robot and cannot perform that command.\"">)>>
|
||
|
||
<DEFINE CRETIN ("AUX" (ME ,PLAYER))
|
||
#DECL ((ME) ADV)
|
||
<COND (<AND <VERB? "GIVE"> <NOT <TRNN <PRSO> ,NO-CHECK-BIT>>>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<PUT .ME ,AOBJS (<PRSO> !<AOBJS .ME>)>
|
||
<TELL "Done.">)
|
||
(<VERB? "KILL" "MUNG">
|
||
<JIGS-UP
|
||
"If you insist.... Poof, you're dead!">)
|
||
(<VERB? "TAKE">
|
||
<TELL "How romantic!">)>>
|
||
|
||
<DEFINE ROBOT-FUNCTION ("AUX" AA RR)
|
||
#DECL ((AA) ADV (RR) OBJECT)
|
||
<COND (<VERB? "GIVE">
|
||
<SET AA <OACTOR <PRSI>>>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<PUT .AA ,AOBJS (<PRSO> !<AOBJS .AA>)>
|
||
<TELL "The robot gladly takes the "
|
||
1
|
||
<ODESC2 <PRSO>>
|
||
"
|
||
and nods his head-like appendage in thanks.">)
|
||
(<AND <VERB? "THROW" "MUNG">
|
||
<OR <==? <PRSI> <SET RR <FIND-OBJ "ROBOT">>>
|
||
<==? <PRSO> .RR>>>
|
||
<TELL ,ROBOTDIE ,LONG-TELL1>
|
||
<REMOVE-OBJECT <COND (<VERB? "THROW"> <PRSI>) (<PRSO>)>>)>>
|
||
|
||
\
|
||
|
||
;"SUBTITLE MORE RANDOM VERBS"
|
||
|
||
<DEFINE KNOCK ()
|
||
<COND (<OBJECT-ACTION>)
|
||
(<MEMQ <PSTRING "DOOR"> <ONAMES <PRSO>>>
|
||
<TELL "I don't think that anybody's home.">)
|
||
(<TELL "Why knock on a " 1 <ODESC2 <PRSO>> "?">)>>
|
||
|
||
<DEFINE CHOMP ()
|
||
<TELL "I don't know how to do that. I win in all cases!">>
|
||
|
||
<DEFINE FROBOZZ ()
|
||
<TELL "The FROBOZZ Corporation created, owns, and operates this dungeon.">>
|
||
|
||
<DEFINE WIN ()
|
||
<TELL "Naturally!">>
|
||
|
||
<DEFINE YELL ()
|
||
<TELL "Aaaarrrrrrrrgggggggggggggghhhhhhhhhhhhhh!">>
|
||
|
||
\
|
||
|
||
;"SUBTITLE BANK OF ZORK"
|
||
|
||
<GDECL (SCOL-ROOM SCOL-ACTIVE)
|
||
<OR FALSE ROOM>
|
||
(SCOL-ROOMS)
|
||
<VECTOR [REST DIRECTION ROOM]>
|
||
(SCOL-WALLS)
|
||
<VECTOR [REST ROOM OBJECT ROOM]>>
|
||
|
||
<SETG BANK-SOLVE!-FLAG <>>
|
||
|
||
<DEFINE BILLS-OBJECT ()
|
||
<SETG BANK-SOLVE!-FLAG T>
|
||
<COND (<VERB? "BURN">
|
||
<TELL "Nothing like having money to burn!">
|
||
<>)
|
||
(<VERB? "EAT">
|
||
<TELL "Talk about eating rich foods!">)>>
|
||
|
||
<DEFINE BKLEAVEE ("OPTIONAL" (RM <SFIND-ROOM "BKTE">))
|
||
#DECL ((RM) ROOM)
|
||
<COND (<OR <HELD? <SFIND-OBJ "BILLS">>
|
||
<HELD? <SFIND-OBJ "PORTR">>>
|
||
<>)
|
||
(.RM)>>
|
||
|
||
<DEFINE BKLEAVEW ()
|
||
<BKLEAVEE <SFIND-ROOM "BKTW">>>
|
||
|
||
<DEFINE BKBOX-ROOM ("AUX" M)
|
||
#DECL ((M) <VECTOR [REST DIRECTION ROOM]>)
|
||
<COND (<VERB? "GO-IN">
|
||
<SETG SCOL-ROOM <2 <SET M <MEMQ ,FROMDIR ,SCOL-ROOMS>>>>)>>
|
||
|
||
<DEFINE TELLER-ROOM ()
|
||
<COND (<VERB? "LOOK">
|
||
<TELL ,TELLER-DESC
|
||
1
|
||
<COND (<==? ,HERE <SFIND-ROOM "BKTW">>
|
||
"west")
|
||
("east")>
|
||
" side of room, above an open door, is a sign reading
|
||
|
||
BANK PERSONNEL ONLY
|
||
">)>>
|
||
|
||
<DEFINE SCOL-OBJECT ("OPTIONAL" (OBJ <>))
|
||
#DECL ((OBJ) <OR FALSE OBJECT>)
|
||
<COND (<VERB? "PUSH" "MOVE" "TAKE" "RUB">
|
||
<TELL "As you try, your hand seems to go through it.">)
|
||
(<VERB? "POKE" "ATTAC" "KILL">
|
||
<TELL "The " 1 <ODESC2 <PRSI>> " goes through it.">)
|
||
(<AND <VERB? "THROW">
|
||
<OR <==? <SFIND-OBJ "SCOL"> <PRSI>>
|
||
<==? .OBJ <PRSI>>>>
|
||
<THROUGH <PRSO>>)>>
|
||
|
||
<DEFINE GET-WALL (RM)
|
||
#DECL ((RM) ROOM)
|
||
<REPEAT ((W ,SCOL-WALLS))
|
||
#DECL ((W) <VECTOR [REST ROOM OBJECT ROOM]>)
|
||
<COND (<==? <1 .W> .RM>
|
||
<RETURN .W>)
|
||
(<SET W <REST .W 3>>)>>>
|
||
|
||
<DEFINE SCOLWALL ("AUX" (HERE ,HERE) M)
|
||
#DECL ((HERE) ROOM (M) <VECTOR [REST ROOM OBJECT ROOM]>)
|
||
<COND (<AND <==? .HERE ,SCOL-ACTIVE>
|
||
<==? <PRSO> <2 <SET M <GET-WALL .HERE>>>>>
|
||
<SCOL-OBJECT <PRSO>>)>>
|
||
|
||
<DEFINE ENTER ("AUX" (PV ,PRSVEC))
|
||
#DECL ((PV) VECTOR)
|
||
<PUT .PV 2 <FIND-DIR "ENTER">>
|
||
<PUT .PV 1 <FIND-VERB "WALK">>
|
||
<WALK>>
|
||
|
||
<DEFINE THROUGH ("OPTIONAL" (OBJ <>)
|
||
"AUX" (HERE ,HERE) (BOX <SFIND-ROOM "BKBOX">) (SCRM ,SCOL-ROOM)
|
||
M (PRSVEC ,PRSVEC))
|
||
#DECL ((HERE BOX) ROOM (SCRM) <OR FALSE ROOM>
|
||
(M) <VECTOR [REST ROOM OBJECT ROOM]> (OBJ) <OR OBJECT FALSE>)
|
||
<COND (<AND <NOT .OBJ>
|
||
<OBJECT-ACTION>>)
|
||
(<AND <NOT .OBJ>
|
||
<TRNN <PRSO> ,VEHBIT>>
|
||
<PERFORM BOARD <FIND-VERB "BOARD"> <PRSO>>)
|
||
(<OR <AND <OR .OBJ <==? <PRSO> <SFIND-OBJ "SCOL">>> .SCRM>
|
||
<AND <==? .HERE .BOX> <==? <PRSO> <SFIND-OBJ "WNORT">> .SCRM>>
|
||
<SETG SCOL-ACTIVE .SCRM>
|
||
<PUT .PRSVEC 2 <>>
|
||
<COND (.OBJ <SCOL-OBJ .OBJ 0 .SCRM>) (<SCOL-THROUGH 6 .SCRM>)>)
|
||
(<AND <==? .HERE ,SCOL-ACTIVE>
|
||
<==? <PRSO> <2 <SET M <GET-WALL .HERE>>>>>
|
||
<SETG SCOL-ROOM <3 .M>>
|
||
<PUT .PRSVEC 2 <CHTYPE <1 <OADJS <PRSO>>> DIRECTION>>
|
||
<COND (.OBJ <SCOL-OBJ .OBJ 0 .BOX>) (<SCOL-THROUGH 0 .BOX>)>)
|
||
(<AND <NOT .OBJ> <NOT <TRNN <PRSO> ,TAKEBIT>>>
|
||
<COND (<==? <PRSO> <SFIND-OBJ "SCOL">>
|
||
<TELL
|
||
"You can't go more than part way through the curtain.">)
|
||
(<OBJECT-ACTION>)
|
||
(<TELL "You hit your head against the "
|
||
1
|
||
<ODESC2 <PRSO>>
|
||
" as you attempt this feat.">)>)
|
||
(.OBJ <TELL "You can't do that!">)
|
||
(<NOT <OROOM <PRSO>>>
|
||
<TELL "That would involve quite a contortion!">)
|
||
(<TELL <PICK-ONE ,YUKS>>)>>
|
||
|
||
<DEFINE SCOL-OBJ (OBJ CINT RM)
|
||
#DECL ((OBJ) OBJECT (CINT) FIX (RM) ROOM)
|
||
<CLOCK-INT ,SCLIN .CINT>
|
||
<REMOVE-OBJECT .OBJ>
|
||
<INSERT-OBJECT .OBJ .RM>
|
||
<COND (<==? .RM <SFIND-ROOM "BKBOX">>
|
||
<TELL "The " 1 <ODESC2 .OBJ> " passes through the wall and vanishes.">)
|
||
(<TELL "The curtain dims slightly as the "
|
||
1
|
||
<ODESC2 .OBJ>
|
||
" passes through.">
|
||
<SETG SCOL-ROOM <>>
|
||
T)>>
|
||
|
||
<DEFINE SCOL-THROUGH (CINT RM)
|
||
#DECL ((CINT) FIX (RM) ROOM)
|
||
<CLOCK-INT ,SCLIN .CINT>
|
||
<GOTO .RM>
|
||
<TELL ,THROUGH-DESC>
|
||
<ROOM-INFO>>
|
||
|
||
<PSETG THROUGH-DESC "You feel somewhat disoriented as you pass through...">
|
||
|
||
<DEFINE SCOL-CLOCK ("AUX" (HERE ,HERE))
|
||
#DECL ((HERE) ROOM)
|
||
<SETG SCOL-ACTIVE <SFIND-ROOM "FCHMP">>
|
||
<COND (<==? .HERE <SFIND-ROOM "BKVAU">>
|
||
<JIGS-UP ,ALARM-VOICE>)
|
||
(<==? .HERE <SFIND-ROOM "BKTWI">>
|
||
<COND (,ZGNOME-FLAG!-FLAG)
|
||
(ELSE
|
||
<CLOCK-INT ,ZGNIN 5>
|
||
<SETG ZGNOME-FLAG!-FLAG T>)>)>>
|
||
|
||
<SETG ZGNOME-FLAG!-FLAG <>>
|
||
|
||
<DEFINE ZGNOME-INIT ()
|
||
<COND (<VERB? "C-INT">
|
||
<COND (<==? ,HERE <SFIND-ROOM "BKTWI">>
|
||
<CLOCK-INT ,ZGLIN 12>
|
||
<TELL ,ZGNOME-DESC ,LONG-TELL1>
|
||
<INSERT-OBJECT <SFIND-OBJ "ZGNOM"> ,HERE>)>)>>
|
||
|
||
<DEFINE ZGNOME-FUNCTION ("AUX" (GNOME <SFIND-OBJ "ZGNOM">) BRICK)
|
||
#DECL ((GNOME BRICK) OBJECT)
|
||
<COND (<VERB? "GIVE" "THROW">
|
||
<COND (<N==? <OTVAL <PRSO>> 0>
|
||
<TELL
|
||
"The gnome carefully places the " ,LONG-TELL1 <ODESC2 <PRSO>> " in the
|
||
deposit box. 'Let me show you the way out,' he says, making it clear
|
||
he will be pleased to see the last of you. Then, you are momentarily
|
||
disoriented, and when you recover you are back at the Bank Entrance.">
|
||
<REMOVE-OBJECT .GNOME>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<CLOCK-DISABLE ,ZGLIN>
|
||
<GOTO <SFIND-ROOM "BKENT">>)
|
||
(<BOMB? <PRSO>>
|
||
<REMOVE-OBJECT .GNOME>
|
||
<OR <OROOM <SET BRICK <SFIND-OBJ "BRICK">>>
|
||
<INSERT-OBJECT .BRICK ,HERE>>
|
||
<CLOCK-DISABLE ,ZGLIN>
|
||
<CLOCK-DISABLE ,ZGNIN>
|
||
<TELL ,ZGNOME-POP-1>)
|
||
(<TELL ,ZGNOME-POP>
|
||
<REMOVE-OBJECT <PRSO>>)>)
|
||
(<VERB? "C-INT">
|
||
<COND (<==? ,HERE <SFIND-ROOM "BKTWI">>
|
||
<TELL ,ZGNOME-BYE ,LONG-TELL1>)>
|
||
<REMOVE-OBJECT .GNOME>)
|
||
(<VERB? "KILL" "ATTAC" "POKE">
|
||
<TELL
|
||
"The gnome says 'Well, I never...' and disappears with a snap of his
|
||
fingers, leaving you alone.">
|
||
<REMOVE-OBJECT .GNOME>
|
||
<CLOCK-DISABLE ,ZGLIN>)
|
||
(<TELL
|
||
"The gnome appears increasingly impatient.">)>>
|
||
|
||
<DEFINE HELD? (OBJ "AUX" (CAN <OCAN .OBJ>))
|
||
#DECL ((OBJ) OBJECT (CAN) <OR FALSE OBJECT>)
|
||
<OR <MEMQ .OBJ <AOBJS ,WINNER>>
|
||
<AND .CAN <HELD? .CAN>>>>
|
||
|
||
\
|
||
|
||
;"SUBTITLE TOITY POIPLE BOIDS A CHOIPIN' AN' A BOIPIN' ... "
|
||
|
||
<DEFINE TREE-ROOM ("AUX" (HERE ,HERE) ROBJS EGG TTREE NEST
|
||
(FORE3 <SFIND-ROOM "FORE3">) (OUTCHAN ,OUTCHAN))
|
||
#DECL ((HERE) ROOM (ROBJS) <LIST [REST OBJECT]> (TTREE NEST EGG) OBJECT
|
||
(OUTCHAN) CHANNEL)
|
||
<COND (<VERB? "LOOK">
|
||
<TELL ,TREE-DESC>
|
||
<COND (<G? <LENGTH <ROBJS .FORE3>> 1>
|
||
<TELL "On the ground below you can see: " 0>
|
||
<REMOVE-OBJECT <SFIND-OBJ "FTREE">>
|
||
<MAPR <>
|
||
<FUNCTION (Y)
|
||
#DECL ((Y) <LIST [REST OBJECT]>)
|
||
<PRINC "a ">
|
||
<PRINC <ODESC2 <1 .Y>>>
|
||
<COND (<G? <LENGTH .Y> 2> <PRINC ", ">)
|
||
(<==? <LENGTH .Y> 2>
|
||
<PRINC ", and ">)>>
|
||
<ROBJS .FORE3>>
|
||
<TELL ".">
|
||
<INSERT-OBJECT <SFIND-OBJ "FTREE"> .FORE3>)>)
|
||
(<VERB? "GO-IN"> <CLOCK-ENABLE <CLOCK-INT ,FORIN -1>>)
|
||
(<AND <NOT <EMPTY? <SET ROBJS <ROBJS .HERE>>>> <VERB? "DROP">>
|
||
<SET TTREE <SFIND-OBJ "TTREE">>
|
||
<SET NEST <SFIND-OBJ "NEST">>
|
||
<SET EGG <SFIND-OBJ "EGG">>
|
||
<SET FORE3 <SFIND-ROOM "FORE3">>
|
||
<MAPF <>
|
||
<FUNCTION (X)
|
||
#DECL ((X) OBJECT)
|
||
<COND (<==? .X .EGG>
|
||
<REMOVE-OBJECT .EGG>
|
||
<SET EGG <SFIND-OBJ "BEGG">>
|
||
<TELL
|
||
"The egg falls to the ground, and is seriously damaged.">
|
||
<OTVAL <SFIND-OBJ "BCANA"> 1>
|
||
<OTVAL .EGG 2>
|
||
<INSERT-OBJECT .EGG .FORE3>)
|
||
(<OR <==? .X .TTREE> <==? .X .NEST>>)
|
||
(<REMOVE-OBJECT .X>
|
||
<INSERT-OBJECT .X .FORE3>
|
||
<TELL "The "
|
||
1
|
||
<ODESC2 .X>
|
||
" falls to the ground.">)>>
|
||
.ROBJS>)>>
|
||
|
||
<DEFINE EGG-OBJECT ("AUX" (BEGG <SFIND-OBJ "BEGG">) (EGG <SFIND-OBJ "EGG">))
|
||
#DECL ((BEGG) OBJECT)
|
||
<COND (<AND <VERB? "OPEN">
|
||
<==? <PRSO> .EGG>>
|
||
<COND (<TRNN <PRSO> ,OPENBIT> <TELL "The egg is already open.">)
|
||
(<EMPTY? <PRSI>>
|
||
<TELL "There is no obvious way to open the egg.">)
|
||
(<==? <PRSI> <SFIND-OBJ "HANDS">>
|
||
<TELL "I doubt you could do that without damaging it.">)
|
||
(<TRNN <PRSI> <+ ,WEAPONBIT ,TOOLBIT>>
|
||
<TELL
|
||
"The egg is now open, but the clumsiness of your attempt has seriously
|
||
compromised its esthetic appeal.">
|
||
<BAD-EGG .BEGG>)
|
||
(<TRNN <PRSO> ,FIGHTBIT>
|
||
<TELL "Not to say that using the "
|
||
1
|
||
<ODESC2 <PRSI>>
|
||
" isn't original too...">)
|
||
(<TELL "The concept of using a "
|
||
1
|
||
<ODESC2 <PRSI>>
|
||
" is certainly original.">
|
||
<TRO <PRSO> ,FIGHTBIT>)>)
|
||
(<VERB? "OPEN" "POKE" "MUNG">
|
||
<TELL
|
||
"Your rather indelicate handling of the egg has caused it some damage.
|
||
The egg is now open.">
|
||
<BAD-EGG .BEGG>)>>
|
||
|
||
<DEFINE BAD-EGG (BEGG "AUX" CAN (EGG <SFIND-OBJ "EGG">))
|
||
#DECL ((EGG BEGG) OBJECT (CAN) <OR FALSE OBJECT>)
|
||
<COND (<==? <OCAN <SFIND-OBJ "CANAR">> .EGG>
|
||
<TELL <ODESCO <SFIND-OBJ "BCANA">>>
|
||
<OTVAL <SFIND-OBJ "BCANA"> 1>)
|
||
(<REMOVE-OBJECT <SFIND-OBJ "BCANA">>)>
|
||
<OTVAL .BEGG 2>
|
||
<COND (<OROOM .EGG> <INSERT-OBJECT .BEGG ,HERE>)
|
||
(<SET CAN <OCAN .EGG>> <INSERT-INTO .CAN .BEGG>)
|
||
(<TAKE-OBJECT .BEGG>)>
|
||
<REMOVE-OBJECT .EGG>
|
||
T>
|
||
|
||
<DEFINE WIND ()
|
||
<COND (<OBJECT-ACTION>)
|
||
(<TELL "You cannot wind up a " 1 <ODESC2 <PRSO>> ".">)>>
|
||
|
||
<SETG SING-SONG!-FLAG <>>
|
||
|
||
<DEFINE CANARY-OBJECT ("AUX" (HERE ,HERE) (TREE <SFIND-ROOM "TREE">))
|
||
#DECL ((HERE TREE) ROOM)
|
||
<COND (<VERB? "WIND">
|
||
<COND (<==? <PRSO> <SFIND-OBJ "CANAR">>
|
||
<COND (<AND <NOT ,SING-SONG!-FLAG>
|
||
<OR <MEMBER "FORE" <STRINGP <RID .HERE>>>
|
||
<==? .HERE .TREE>>>
|
||
<TELL ,OPERA>
|
||
<SETG SING-SONG!-FLAG T>
|
||
<INSERT-OBJECT <SFIND-OBJ "BAUBL">
|
||
<COND (<==? .HERE .TREE>
|
||
<SFIND-ROOM "FORE3">)
|
||
(.HERE)>>)
|
||
(<TELL
|
||
"The canary chirps blithely, if somewhat tinnily, for a short time.">)>)
|
||
(<TELL
|
||
"There is an unpleasant grinding noise from inside the canary.">)>)>>
|
||
|
||
<DEFINE FOREST-ROOM ("AUX" (HERE ,HERE))
|
||
#DECL ((HERE) ROOM)
|
||
<COND (<VERB? "C-INT">
|
||
<COND (<NOT <OR <MEMBER "FORE" <STRINGP <RID .HERE>>>
|
||
<==? .HERE <SFIND-ROOM "TREE">>>>
|
||
<CLOCK-DISABLE ,FORIN>)
|
||
(<PROB 10>
|
||
<TELL
|
||
"You hear in the distance the chirping of a song bird.">)>)
|
||
(<VERB? "GO-IN"> <CLOCK-ENABLE <CLOCK-INT ,FORIN -1>>)>>
|
||
|
||
<DEFINE BIRD-OBJECT ()
|
||
<COND (<VERB? "EXAMI">
|
||
<TELL "I can't see any songbird here.">)
|
||
(<VERB? "FIND">
|
||
<TELL "The songbird is not here, but is probably nearby.">)>>
|
||
|
||
<DEFINE CLIMB-FOO ()
|
||
<CLIMB-UP <FIND-DIR "UP"> T>>
|
||
|
||
<DEFINE CLIMB-UP ("OPTIONAL" (DIR <FIND-DIR "UP">) (NOOBJ <>)
|
||
"AUX" (FLG <OR .NOOBJ <TRNN <PRSO> ,CLIMBBIT>>)
|
||
(PV ,PRSVEC) (HERE ,HERE))
|
||
#DECL ((PV) VECTOR (DIR) DIRECTION (HERE) ROOM (NOOBJ FLG) <OR FALSE ATOM>)
|
||
<COND (<OBJECT-ACTION>)
|
||
(<AND .FLG <MEMQ .DIR <REXITS .HERE>>>
|
||
<PUT .PV 2 .DIR>
|
||
<PUT .PV 1 <FIND-VERB "WALK">>
|
||
<WALK>)
|
||
(.FLG <TELL "You can't go that way.">)
|
||
(<MEMQ <PSTRING "WALL"> <ONAMES <PRSO>>>
|
||
<TELL "Climbing the walls is of no avail.">)
|
||
(<TELL "Bizarre!">)>>
|
||
|
||
<DEFINE CLIMB-DOWN () <CLIMB-UP <FIND-DIR "DOWN">>>
|
||
|
||
<DEFINE WCLIF-OBJECT ()
|
||
<COND (<VERB? "CLUP" "CLDN" "CLUDG">
|
||
<TELL "The cliff is too steep for climbing.">)>>
|
||
|
||
\
|
||
; "SUBTITLE CHINESE PUZZLE SECTION (COURTESY OF WILL WENG)"
|
||
|
||
<GDECL (CPHERE)
|
||
FIX
|
||
(CPOBJS)
|
||
<UVECTOR [REST LIST]>
|
||
(CPUVEC)
|
||
<UVECTOR [REST FIX]>
|
||
(CPWALLS)
|
||
<VECTOR [REST OBJECT FIX]>
|
||
(CPEXITS)
|
||
<VECTOR [REST DIRECTION FIX]>>
|
||
|
||
<DEFINE CPEXIT ("AUX" (DIR <2 ,PRSVEC>) (RM ,CPHERE) (UVEC ,CPUVEC) FX M)
|
||
#DECL ((DIR) DIRECTION (M) <VECTOR DIRECTION FIX> (FX RM) FIX
|
||
(UVEC) <UVECTOR [REST FIX]>)
|
||
<COND (<==? .DIR <FIND-DIR "UP">>
|
||
<COND (<==? .RM 10>
|
||
<COND (<==? <11 ,CPUVEC> -2>
|
||
<TELL "With the help of the ladder, you exit the puzzle.">
|
||
<GOTO <FIND-ROOM "CPANT">>)
|
||
(<TELL "The exit is too far above your head.">)>)
|
||
(<TELL "There is no way up.">)>)
|
||
(<AND <==? .RM 52>
|
||
<==? .DIR <FIND-DIR "WEST">>
|
||
,CPOUT!-FLAG>
|
||
<GOTO <FIND-ROOM "CPOUT">>
|
||
<RTRZ <FIND-ROOM "CP"> ,RSEENBIT>
|
||
<ROOM-INFO>)
|
||
(<AND <==? .RM 52>
|
||
<==? .DIR <FIND-DIR "WEST">>>
|
||
<TELL "The metal door bars the way.">)
|
||
(<AND <SET M <MEMQ .DIR ,CPEXITS>> <SET FX <2 .M>> <>>)
|
||
(<OR <MEMQ <ABS .FX> '![1 8!]>
|
||
<AND <G? .FX 0> ; "SW AND SE"
|
||
<OR <0? <NTH .UVEC <+ .RM 8>>>
|
||
<0? <NTH .UVEC <+ .RM <- .FX 8>>>>>>
|
||
<AND <L? .FX 0>
|
||
<OR <0? <NTH .UVEC <- .RM 8>>>
|
||
<0? <NTH .UVEC <+ .RM 8 .FX>>>>>>
|
||
<COND (<0? <NTH .UVEC <SET FX <+ .RM .FX>>>> <CPGOTO .FX>)
|
||
(<TELL "There is a wall there.">)>)
|
||
(<TELL "There is a wall there.">)>>
|
||
|
||
<DEFINE CPENTER ()
|
||
<COND (,CPBLOCK!-FLAG
|
||
<TELL "The way is blocked by sandstone.">
|
||
<>)
|
||
(<SETG CPHERE 10>
|
||
<GOTO <FIND-ROOM "CP">>
|
||
<ROOM-INFO>)>>
|
||
|
||
<DEFINE CPANT-ROOM ()
|
||
<COND (<VERB? "LOOK">
|
||
<TELL
|
||
"This is a small square room, in the middle of which is a recently
|
||
created hole " 0>
|
||
<TELL
|
||
<COND (,CPBLOCK!-FLAG
|
||
" which is blocked by smooth sandstone.")
|
||
(" through which you can barely discern the floor some ten
|
||
feet below. It doesn't seem likely you could climb back up.")>
|
||
0>
|
||
<TELL " There
|
||
are exits to the west and south.">)>>
|
||
|
||
<SETG CPPUSH!-FLAG <>>
|
||
|
||
<SETG CPSOLVE!-FLAG <>>
|
||
|
||
<DEFINE CPLADDER-OBJECT ("AUX" (FLG <>) (HERE ,CPHERE))
|
||
#DECL ((FLG) <OR FALSE ATOM> (HERE) FIX)
|
||
<COND (<OR <AND <==? <NTH ,CPUVEC <+ .HERE 1>> -2> <SET FLG T>>
|
||
<==? <NTH ,CPUVEC <- .HERE 1>> -3>>
|
||
<COND (<VERB? "CLUP" "CLUDG">
|
||
<COND (<AND .FLG <==? .HERE 10>>
|
||
<SETG CPSOLVE!-FLAG T>
|
||
<GO&LOOK <FIND-ROOM "CPANT">>)
|
||
(<TELL
|
||
"You hit your head on the ceiling and fall off the ladder.">)>)
|
||
(<TELL "Come, come!">)>)
|
||
(<TELL "I can't see any ladder here.">)>>
|
||
|
||
<DEFINE CPWALL-OBJECT ("AUX" (HERE ,CPHERE) (UVEC ,CPUVEC) WL NWL NXT NNXT)
|
||
#DECL ((HERE NXT WL NNXT NWL) FIX (UVEC) <UVECTOR [REST FIX]>)
|
||
<COND (<VERB? "PUSH">
|
||
<SET NXT <CPNEXT .HERE <PRSO>>>
|
||
<SET WL <NTH .UVEC .NXT>>
|
||
<COND (<0? .WL>
|
||
<TELL "There is only a passage in that direction.">)
|
||
(<OR <1? .WL>
|
||
<AND <SET NNXT <CPNEXT .NXT <PRSO>>>
|
||
<NOT <0? <SET NWL <NTH .UVEC .NNXT>>>>>>
|
||
<TELL "The wall does not budge.">)
|
||
(<TELL
|
||
"The wall slides forward and you follow it">
|
||
<TELL <COND (,CPPUSH!-FLAG
|
||
" to this position:")
|
||
(,COMPLEX-DESC)>>
|
||
<SETG CPPUSH!-FLAG T>
|
||
<PUT .UVEC .NXT 0>
|
||
<PUT .UVEC .NNXT .WL>
|
||
<AND <==? .NNXT 10> <SETG CPBLOCK!-FLAG T>>
|
||
<CPGOTO .NXT>)>)>>
|
||
|
||
; "Flag for blocking of main entrance"
|
||
|
||
<SETG CPBLOCK!-FLAG <>>
|
||
|
||
<DEFINE CPGOTO (FX "AUX" (HERE ,HERE))
|
||
#DECL ((FX) FIX (HERE) ROOM)
|
||
<RTRZ .HERE ,RSEENBIT>
|
||
<PUT ,CPOBJS ,CPHERE <ROBJS .HERE>>
|
||
<SETG CPHERE .FX>
|
||
<PUT .HERE ,ROBJS <NTH ,CPOBJS .FX>>
|
||
<PERFORM ROOM-DESC <FIND-VERB "LOOK">>>
|
||
|
||
<DEFINE CPNEXT (RM OBJ "AUX" M)
|
||
#DECL ((RM) FIX (OBJ) OBJECT (M) <VECTOR OBJECT FIX>)
|
||
<AND <SET M <MEMQ .OBJ ,CPWALLS>> <+ .RM <2 .M>>>>
|
||
|
||
<DEFINE CP-ROOM ()
|
||
<COND (<VERB? "GO-IN">
|
||
<SETG CPHERE
|
||
<COND (<==? ,FROMDIR <FIND-DIR "DOWN">> 10)
|
||
(52)>>)
|
||
(<VERB? "LOOK">
|
||
<COND (,CPPUSH!-FLAG <CPWHERE>)
|
||
(<TELL
|
||
"You are in a small square room bounded to the north and west with
|
||
marble walls and to the east and south with sandstone walls."
|
||
1
|
||
<COND (<TRNN <FIND-OBJ "WARNI"> ,TOUCHBIT>
|
||
" It
|
||
appears the thief was correct.")
|
||
("")>>)>)>>
|
||
|
||
<DEFINE CPWHERE ("EXTRA" (HERE ,CPHERE) (UVEC ,CPUVEC)
|
||
(N <NTH .UVEC <+ .HERE -8>>)
|
||
(S <NTH .UVEC <+ .HERE 8>>) (E <NTH .UVEC <+ .HERE 1>>)
|
||
(W <NTH .UVEC <+ .HERE -1>>))
|
||
#DECL ((HERE N S E W) FIX (UVEC) <UVECTOR [REST FIX]>)
|
||
<TELL " |" ,NO-CRLF> ;"Top Row"
|
||
<CP-CORNER <+ .HERE -9> .N .W>
|
||
<TELL " " ,NO-CRLF>
|
||
<CP-ORTHO .N>
|
||
<TELL " " ,NO-CRLF>
|
||
<CP-CORNER <+ .HERE -7> .N .E>
|
||
<TELL "|">
|
||
<TELL "West |" ,NO-CRLF> ;"Middle Row"
|
||
<CP-ORTHO .W>
|
||
<TELL " .. " ,NO-CRLF>
|
||
<CP-ORTHO .E>
|
||
<TELL "| East
|
||
|" ,NO-CRLF> ;"Bottom Row"
|
||
<CP-CORNER <+ .HERE 7> .S .W>
|
||
<TELL " " ,NO-CRLF>
|
||
<CP-ORTHO .S>
|
||
<TELL " " ,NO-CRLF>
|
||
<CP-CORNER <+ .HERE 9> .S .E>
|
||
<TELL "|">
|
||
<COND (<==? .HERE 10>
|
||
<TELL "In the ceiling above you is a large circular opening.">)
|
||
(<==? .HERE 37>
|
||
<TELL "The center of the floor here is noticeably depressed.">)
|
||
(<==? .HERE 52>
|
||
<TELL
|
||
"The west wall here has a large " 1 <COND (,CPOUT!-FLAG "opening")
|
||
("steel door")> " at its center. On one
|
||
side of the door is a small slit.">)>
|
||
<COND (<==? .E -2>
|
||
<TELL "There is a ladder here, firmly attached to the east wall.">)>
|
||
<COND (<==? .W -3>
|
||
<TELL "There is a ladder here, firmly attached to the west wall.">)>>
|
||
|
||
;"Show where the eight nearest neighbors are located"
|
||
|
||
<DEFINE CP-ORTHO (CONTENTS)
|
||
#DECL ((CONTENTS) FIX)
|
||
<TELL <COND (<0? .CONTENTS> " ") (<1? .CONTENTS> "MM") (ELSE "SS")>
|
||
,NO-CRLF>>
|
||
|
||
;"Show an orthogonal neighbor"
|
||
|
||
<DEFINE CP-CORNER (LOCN COL ROW)
|
||
#DECL ((LOCN COL ROW) FIX)
|
||
<TELL <COND (<AND <N==? .COL 0> <N==? .ROW 0>> "??")
|
||
(<0? <SET COL <NTH ,CPUVEC .LOCN>>> " ")
|
||
(<1? .COL> "MM")
|
||
(ELSE "SS")>
|
||
,NO-CRLF>>
|
||
|
||
<SETG CPOUT!-FLAG <>>
|
||
|
||
<DEFINE CPSLT-OBJECT ()
|
||
<COND (<VERB? "PUT">
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<COND (<==? <PRSO> <SFIND-OBJ "GCARD">>
|
||
<SETG CPOUT!-FLAG T>
|
||
<TELL ,CONFISCATE>)
|
||
(<TRNN <PRSO> <+ ,VICBIT ,VILLAIN>>
|
||
<TELL <PICK-ONE ,YUKS>>)
|
||
(<TELL ,GIGO
|
||
1
|
||
<ODESC2 <PRSO>>
|
||
" (now atomized) through the slot.">)>)>>
|
||
|
||
<DEFINE CPOUT-ROOM ()
|
||
<COND (<VERB? "LOOK">
|
||
<TELL "You are in a room with an exit to the north and a "
|
||
1
|
||
<COND (,CPOUT!-FLAG
|
||
"passage")
|
||
("metal door")>
|
||
" to the east.">)>>
|
||
|
||
; "RANDOM"
|
||
|
||
<DEFINE SMELLER ()
|
||
<TELL "It smells like a " 1 <ODESC2 <PRSO>> ".">>
|
||
|
||
; "PALANTIRS, ETC."
|
||
|
||
<DEFINE PRM-ROOM ("AUX" RES)
|
||
#DECL ((RES) <OR ATOM FALSE>)
|
||
<SET RES
|
||
<COND (<VERB? "LOOK">
|
||
<TELL
|
||
"This is a tiny room, which has an exit to the east.">
|
||
<PDOOR "north" <SFIND-OBJ "PLID1"> <SFIND-OBJ "PKH1">>)>>
|
||
<PCHECK>
|
||
.RES>
|
||
|
||
<SETG PALAN-SOLVE!-FLAG <>>
|
||
<SETG SLIDE-SOLVE!-FLAG <>>
|
||
|
||
<DEFINE PALANTIR-ROOM ("AUX" RES)
|
||
#DECL ((RES) <OR ATOM FALSE>)
|
||
<SET RES
|
||
<COND (<VERB? "LOOK">
|
||
<TELL ,PAL-ROOM>
|
||
<PDOOR "south" <SFIND-OBJ "PLID2"> <SFIND-OBJ "PKH2">>)
|
||
(<VERB? "GO-IN">
|
||
<SETG PALAN-SOLVE!-FLAG T>)>>
|
||
<PCHECK>
|
||
.RES>
|
||
|
||
<DEFINE PCHECK ("AUX" (LID <PLID>) (MAT <SFIND-OBJ "MAT">) (OBJS ,PALOBJS))
|
||
#DECL ((LID MAT) OBJECT (OBJS) <UVECTOR [REST OBJECT]>)
|
||
<PROG ()
|
||
<OR <2 ,PRSVEC> <RETURN>>
|
||
<SETG PLOOK!-FLAG <>>
|
||
<COND (<AND <VERB? "TAKE">
|
||
<MEMQ <PRSO> .OBJS>
|
||
<TRNN .LID ,OPENBIT>>
|
||
<COND (,PTOUCH!-FLAG
|
||
<TELL "The lid falls to cover the keyhole.">
|
||
<TRZ .LID ,OPENBIT>)
|
||
(<SETG PTOUCH!-FLAG T>)>)>
|
||
<MAPF <>
|
||
<FUNCTION (OBJ)
|
||
#DECL ((OBJ) OBJECT)
|
||
<COND (<OR <MEMQ .OBJ <OCONTENTS <SFIND-OBJ "PKH1">>>
|
||
<MEMQ .OBJ <OCONTENTS <SFIND-OBJ "PKH2">>>>
|
||
<TRO .OBJ ,NDESCBIT>)
|
||
(<TRZ .OBJ ,NDESCBIT>)>>
|
||
.OBJS>
|
||
<COND (<OR <NOT <OROOM .MAT>>
|
||
<OCAN .MAT>>
|
||
<SETG MUD!-FLAG <>>)>
|
||
<COND (,MUD!-FLAG
|
||
<REMOVE-OBJECT .MAT>
|
||
<INSERT-OBJECT .MAT ,HERE>
|
||
<TRO .MAT ,NDESCBIT>)
|
||
(<TRZ .MAT ,NDESCBIT>)>>>
|
||
|
||
<DEFINE PDOOR PACT (STR LID KEYHOLE "AUX" (MATOBJ ,MATOBJ))
|
||
#DECL ((STR) STRING (LID KEYHOLE) OBJECT (PACT) ACTIVATION
|
||
(MATOBJ) <OR FALSE OBJECT>)
|
||
<AND ,PLOOK!-FLAG <RETURN <SETG PLOOK!-FLAG <>> .PACT>>
|
||
<TELL "On the "
|
||
1
|
||
.STR
|
||
,PAL-DOOR>
|
||
<COND (<NOT <TRNN .LID ,OPENBIT>>
|
||
<TELL "covered by a thin metal lid " 0>)>
|
||
<TELL "lies within the lock.">
|
||
<COND (<NOT <EMPTY? <OCONTENTS .KEYHOLE>>>
|
||
<TELL "A "
|
||
1
|
||
<ODESC2 <1 <OCONTENTS .KEYHOLE>>>
|
||
" is in place within the keyhole.">)>
|
||
<COND (,MUD!-FLAG
|
||
<TELL "The edge of a welcome mat is visible under the door.">
|
||
<COND (.MATOBJ
|
||
<TELL "Lying on the mat is a " 1 <ODESC2 .MATOBJ> ".">)>)>>
|
||
|
||
<DEFINE PLID ("OPTIONAL" (OBJ1 <SFIND-OBJ "PLID1">) (OBJ2 <SFIND-OBJ "PLID2">))
|
||
#DECL ((OBJ1 OBJ2) OBJECT)
|
||
<COND (<MEMQ .OBJ1 <ROBJS ,HERE>>
|
||
.OBJ1)
|
||
(.OBJ2)>>
|
||
|
||
<DEFINE PKH (KEYHOLE "OPTIONAL" (THIS <>) "AUX" OBJ)
|
||
#DECL ((KEYHOLE OBJ) OBJECT (THIS) <OR ATOM FALSE>)
|
||
<COND (<OR <AND <==? .KEYHOLE <SET OBJ <SFIND-OBJ "PKH1">>> <NOT .THIS>>
|
||
<AND <N==? .KEYHOLE .OBJ> .THIS>>
|
||
<SFIND-OBJ "PKH2">)
|
||
(.OBJ)>>
|
||
|
||
<DEFINE PKH-FUNCTION ("AUX" KH OBJ RM)
|
||
#DECL ((KH OBJ) OBJECT (RM) ROOM)
|
||
<COND (<VERB? "LKIN">
|
||
<COND (<AND <TRNN <SFIND-OBJ "PLID1"> ,OPENBIT>
|
||
<TRNN <SFIND-OBJ "PLID2"> ,OPENBIT>
|
||
<EMPTY? <OCONTENTS <SFIND-OBJ "PKH1">>>
|
||
<EMPTY? <OCONTENTS <SFIND-OBJ "PKH2">>>
|
||
<LIT? <COND (<==? ,HERE <SET RM <SFIND-ROOM "PALAN">>>
|
||
<SFIND-ROOM "PRM">)
|
||
(.RM)>>>
|
||
<TELL "You can barely make out a lighted room at the other end.">)
|
||
(<TELL "No light can be seen through the keyhole.">)>)
|
||
(<VERB? "PUT">
|
||
<COND (<TRNN <PLID> ,OPENBIT>
|
||
<COND (<NOT <EMPTY? <OCONTENTS <PKH <PRSI> T>>>>
|
||
<TELL "The keyhole is blocked.">)
|
||
(<MEMQ <PRSO> ,PALOBJS>
|
||
<COND (<NOT <EMPTY? <OCONTENTS <SET KH <PKH <PRSI>>>>>>
|
||
<TELL
|
||
"There is a faint noise from behind the door and a small cloud of
|
||
dust rises from beneath it.">
|
||
<REMOVE-FROM .KH <SET OBJ <1 <OCONTENTS .KH>>>>
|
||
<AND ,MUD!-FLAG <SETG MATOBJ .OBJ>>
|
||
<>)>)
|
||
(<TELL "The " 1 <ODESC2 <PRSO>> " doesn't fit.">)>)
|
||
(<TELL "The lid is in the way.">)>)>>
|
||
|
||
<DEFINE PLID-FUNCTION ()
|
||
<COND (<VERB? "OPEN" "RAISE">
|
||
<TELL "The lid is open.">
|
||
<TRO <PRSO> ,OPENBIT>)
|
||
(<VERB? "CLOSE" "LOWER">
|
||
<COND (<NOT <EMPTY? <OCONTENTS <COND (<==? ,HERE <SFIND-ROOM "PALAN">>
|
||
<SFIND-OBJ "PKH2">)
|
||
(<SFIND-OBJ "PKH1">)>>>>
|
||
<TELL "The keyhole is occupied.">)
|
||
(<TELL "The lid covers the keyhole.">
|
||
<TRZ <PRSO> ,OPENBIT>)>)>>
|
||
|
||
<SETG MUD!-FLAG <>>
|
||
|
||
<SETG MATOBJ <>>
|
||
|
||
<SETG PUNLOCK!-FLAG <>>
|
||
|
||
<SETG PLOOK!-FLAG <>>
|
||
|
||
<SETG PTOUCH!-FLAG <>>
|
||
|
||
<GDECL (MUD!-FLAG PUNLOCK!-FLAG PLOOK!-FLAG PTOUCH!-FLAG) <OR ATOM FALSE>
|
||
(MATOBJ) <OR FALSE OBJECT> (PALOBJS SMALL-PAPERS) <UVECTOR [REST OBJECT]>>
|
||
|
||
<DEFINE PALANTIR ("AUX" OBJ RM (HERE ,HERE) THIEF)
|
||
#DECL ((OBJ) OBJECT (HERE) ROOM (RM) <OR FALSE ROOM> (THIEF) HACK)
|
||
<COND (<VERB? "LKIN">
|
||
<SET OBJ <COND (<==? <PRSO> <SET OBJ <SFIND-OBJ "PALAN">>>
|
||
<SFIND-OBJ "PAL3">)
|
||
(<==? <PRSO> <SFIND-OBJ "PAL3">>
|
||
<SFIND-OBJ "SPHER">)
|
||
(.OBJ)>>
|
||
<SET RM <COND (<OCAN .OBJ> <OROOM <OCAN .OBJ>>)
|
||
(<OROOM .OBJ>)
|
||
(.HERE)>>
|
||
<COND (<OR <NOT .RM>
|
||
<NOT <LIT? .RM>>
|
||
<MEMQ .OBJ <HOBJS <SET THIEF <GET-DEMON "ROBBE">>>>
|
||
<AND <OCAN .OBJ> <NOT <SEE-INSIDE? <OCAN .OBJ>>>>>
|
||
<TELL "You see only darkness.">)
|
||
(<TELL
|
||
"As you peer into the sphere, a strange vision takes shape of
|
||
a distant room, which can be described clearly....">
|
||
<UNWIND
|
||
<PROG ()
|
||
<TRZ .OBJ ,OVISON>
|
||
<PUT ,WINNER ,AROOM <SETG HERE .RM>>
|
||
<PERFORM ROOM-DESC <FIND-VERB "LOOK">>
|
||
<AND <==? .HERE .RM>
|
||
<TELL
|
||
"An astonished adventurer is staring into a crystal sphere.">>
|
||
<TRO .OBJ ,OVISON>
|
||
<GOTO .HERE>>
|
||
<PROG ()
|
||
<TRO .OBJ ,OVISON>
|
||
<GOTO .HERE>>>
|
||
<TELL
|
||
"The vision fades, revealing only an ordinary crystal sphere.">)>)>>
|
||
|
||
<DEFINE PLOOKAT (RM "AUX" (HERE ,HERE))
|
||
#DECL ((RM HERE) ROOM)
|
||
<UNWIND <PROG ()
|
||
<GO&LOOK .RM>
|
||
<GOTO .HERE>>
|
||
<GOTO .HERE>>>
|
||
|
||
<DEFINE PWIND-FUNCTION ()
|
||
<COND (<VERB? "LKIN">
|
||
<SETG PLOOK!-FLAG T>
|
||
<COND (<TRNN <SFIND-OBJ "PDOOR"> ,OPENBIT>
|
||
<TELL "The door is open, dummy.">)
|
||
(<==? ,HERE <SFIND-ROOM "PALAN">>
|
||
<PLOOKAT <SFIND-ROOM "PRM">>)
|
||
(<PLOOKAT <SFIND-ROOM "PALAN">>)>)
|
||
(<VERB? "GTHRO">
|
||
<TELL "Perhaps if you were diced....">)>>
|
||
|
||
<DEFINE PDOOR-FUNCTION ("AUX" (PKEY <SFIND-OBJ "PKEY">) RM)
|
||
#DECL ((PKEY) OBJECT (RM) ROOM)
|
||
<COND (<AND <VERB? "LKUND"> ,MUD!-FLAG>
|
||
<TELL "The welcome mat is under the door.">)
|
||
(<VERB? "UNLOC">
|
||
<COND (<==? <PRSI> .PKEY>
|
||
<COND (<NOT <EMPTY? <OCONTENTS <PLID <SFIND-OBJ "PKH1">
|
||
<SFIND-OBJ "PKH2">>>>>
|
||
<TELL "The keyhole is blocked.">)
|
||
(<TELL "The door is now unlocked.">
|
||
<SETG PUNLOCK!-FLAG T>)>)
|
||
(<==? <PRSI> <SFIND-OBJ "KEYS">>
|
||
<TELL "These are apparently the wrong keys.">)
|
||
(<TELL "It can't be unlocked with that.">)>)
|
||
(<VERB? "LOCK">
|
||
<COND (<==? <PRSI> .PKEY>
|
||
<TELL "The door is locked.">
|
||
<SETG PUNLOCK!-FLAG <>>
|
||
T)
|
||
(<TELL "It can't be locked with that.">)>)
|
||
(<AND <VERB? "PTUND"> <MEMQ <PRSO> ,SMALL-PAPERS>>
|
||
<TELL "The paper is very small and vanishes under the door.">
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<INSERT-OBJECT <PRSO>
|
||
<COND (<==? ,HERE <SET RM <SFIND-ROOM "PRM">>>
|
||
<SFIND-ROOM "PALAN">)
|
||
(.RM)>>)
|
||
(<VERB? "OPEN" "CLOSE">
|
||
<COND (,PUNLOCK!-FLAG
|
||
<OPEN-CLOSE <PRSO>
|
||
"The door is now open."
|
||
"The door is now closed.">)
|
||
(<TELL "The door is locked.">)>)>>
|
||
|
||
<DEFINE PKEY-FUNCTION ()
|
||
<COND (<VERB? "TURN">
|
||
<COND (,PUNLOCK!-FLAG
|
||
<PERFORM LOCKER <FIND-VERB "LOCK"> <SFIND-OBJ "PDOOR"> <PRSO>>)
|
||
(<PERFORM UNLOCKER <FIND-VERB "UNLOC"> <SFIND-OBJ "PDOOR"> <PRSO>>)>)>>
|
||
|
||
<DEFINE PUT-UNDER ()
|
||
<COND (<OBJECT-ACTION>)
|
||
(<MEMQ <PSTRING "DOOR"> <ONAMES <PRSI>>>
|
||
<TELL "There's not enough room under this door.">)
|
||
(<TELL "You can't do that.">)>>
|
||
|
||
<DEFINE MAT-FUNCTION ("AUX" (OBJ ,MATOBJ))
|
||
#DECL ((OBJ) <OR FALSE OBJECT>)
|
||
<COND (<AND <VERB? "PTUND">
|
||
<==? <PRSI> <SFIND-OBJ "PDOOR">>>
|
||
<TELL "The mat fits easily under the door.">
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<INSERT-OBJECT <PRSO> ,HERE>
|
||
<SETG MUD!-FLAG T>)
|
||
(<AND <VERB? "TAKE" "MOVE" "PULL"> .OBJ>
|
||
<SETG MATOBJ <>>
|
||
<REMOVE-OBJECT .OBJ>
|
||
<INSERT-OBJECT .OBJ ,HERE>
|
||
<TELL "As the mat is moved, a "
|
||
1
|
||
<ODESC2 .OBJ>
|
||
" falls from it and onto the floor.">
|
||
<>)>>
|
||
|
||
<DEFINE SLIDE-EXIT ("AUX" (W <WEIGHT <AOBJS ,WINNER>>))
|
||
#DECL ((W) FIX)
|
||
<COND (,TIMBER-TIE!-FLAG
|
||
<TELL ,SLIPPERY>
|
||
<CLOCK-ENABLE <CLOCK-INT ,SLDIN <MAX </ 100 .W> 2>>>
|
||
<SFIND-ROOM "SLID1">)
|
||
(<SFIND-ROOM "CELLA">)>>
|
||
|
||
<DEFINE SLIDE-CINT ("AUX" (HERE ,HERE))
|
||
#DECL ((HERE) ROOM)
|
||
<COND (<OR <==? .HERE <SFIND-ROOM "SLIDE">>
|
||
<NOT <MEMBER "SLID" <STRINGP <RID .HERE>>>>>)
|
||
(<TELL "The rope slips from your grasp and you tumble to the cellar.">
|
||
<GO&LOOK <SFIND-ROOM "CELLA">>)>>
|
||
|
||
<SETG TIMBER-TIE!-FLAG <>>
|
||
<GDECL (TIMBER-TIE!-FLAG) <OR FALSE OBJECT>>
|
||
|
||
<DEFINE ROPE-FUNCTION ("AUX" (DROOM <SFIND-ROOM "DOME">) (SROOM <SFIND-ROOM "SLIDE">)
|
||
(HERE ,HERE) (ROPE <SFIND-OBJ "ROPE">) (TTIE ,TIMBER-TIE!-FLAG)
|
||
(COFFIN <SFIND-OBJ "COFFI">) (TIMBER <SFIND-OBJ "TIMBE">))
|
||
#DECL ((ROPE TIMBER COFFIN) OBJECT (DROOM SROOM HERE) ROOM (TTIE) <OR OBJECT FALSE>)
|
||
<COND (<AND <N==? .HERE .DROOM>
|
||
<AND <AND <NOT <EMPTY? <PRSI>>>
|
||
<N==? <PRSI> .TIMBER>
|
||
<N==? <PRSI> .COFFIN>>
|
||
<N==? .HERE .SROOM>>>
|
||
<SETG DOME-FLAG!-FLAG <>>
|
||
<SETG TIMBER-TIE!-FLAG <>>
|
||
<TRZ .TIMBER ,NDESCBIT>
|
||
<TRZ .COFFIN ,NDESCBIT>
|
||
<COND (<VERB? "TIE">
|
||
<TELL "There is nothing it can be tied to.">)>)
|
||
(<AND <VERB? "CLDN"> <==? .HERE <SFIND-ROOM "CPANT">>>
|
||
<COND (.TTIE
|
||
<TELL
|
||
"The " 1 <ODESC2 .TTIE> " was not well braced and falls through the
|
||
hole after you, nearly cracking your skull.">
|
||
<REMOVE-OBJECT .TTIE>
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<INSERT-OBJECT .TTIE <SET SROOM <SFIND-ROOM "CP">>>
|
||
<INSERT-OBJECT <PRSO> .SROOM>)
|
||
(<TELL "It's not really tied, but....">)>
|
||
<>)
|
||
(<VERB? "TIE">
|
||
<COND (<==? <PRSI> <SFIND-OBJ "RAILI">>
|
||
<COND (,DOME-FLAG!-FLAG
|
||
<TELL
|
||
"The rope is already attached.">)
|
||
(<TELL
|
||
"The rope drops over the side and comes within ten feet of the floor.">
|
||
<SETG DOME-FLAG!-FLAG T>
|
||
<ROPE-AWAY .ROPE .DROOM>
|
||
T)>)
|
||
(<OR <==? <PRSI> .TIMBER> <==? <PRSI> .COFFIN>>
|
||
<COND (.TTIE
|
||
<TELL
|
||
"The rope is already attached.">)
|
||
(<IN-ROOM? <PRSI>>
|
||
<TELL
|
||
"The rope is fastened to a " 1 <ODESC2 <PRSI>> ".">
|
||
<ROPE-AWAY .ROPE .HERE>
|
||
<SETG TIMBER-TIE!-FLAG <PRSI>>
|
||
<COND (<==? <PRSI> .COFFIN>
|
||
<ODESC1 .COFFIN ,COFFIN-TIED>)
|
||
(<ODESC1 .TIMBER ,TIMBER-TIED>)>
|
||
<COND (<==? .HERE .SROOM>
|
||
<TELL "The rope dangles down the slide.">)
|
||
(<==? .HERE <SFIND-ROOM "CPANT">>
|
||
<TELL
|
||
"The rope dangles down into the darkness.">)>
|
||
<COND (<==? .HERE .SROOM>
|
||
<TRO <PRSI> ,NDESCBIT>)>
|
||
T)
|
||
(<TELL "It is too clumsy when you are carrying it.">)>)>)
|
||
(<VERB? "UNTIE">
|
||
<COND (<OR .TTIE ,DOME-FLAG!-FLAG>
|
||
<COND (.TTIE
|
||
<TRZ .TTIE ,NDESCBIT>
|
||
<COND (<==? .TTIE .COFFIN>
|
||
<ODESC1 .COFFIN ,COFFIN-UNTIED>)
|
||
(<ODESC1 .TIMBER ,TIMBER-UNTIED>)>)>
|
||
<SETG DOME-FLAG!-FLAG <>>
|
||
<SETG TIMBER-TIE!-FLAG <>>
|
||
<TRZ .ROPE <+ ,CLIMBBIT ,NDESCBIT>>
|
||
<TELL
|
||
"The rope is now untied.">)
|
||
(<TELL "It is not tied to anything.">)>)
|
||
(<AND <VERB? "DROP">
|
||
<==? .HERE .DROOM>
|
||
<NOT ,DOME-FLAG!-FLAG>>
|
||
<REMOVE-OBJECT .ROPE>
|
||
<INSERT-OBJECT .ROPE <SFIND-ROOM "MTORC">>
|
||
<TELL "The rope drops gently to the floor below.">)
|
||
(<VERB? "TAKE">
|
||
<COND (,DOME-FLAG!-FLAG
|
||
<TELL "The rope is tied to the railing.">)
|
||
(.TTIE
|
||
<TELL "The rope is tied to a " 1 <ODESC2 ,TIMBER-TIE!-FLAG> ".">)>)>>
|
||
|
||
<DEFINE UNTIE-FROM ()
|
||
<COND (<OR <AND <==? <PRSO> <SFIND-OBJ "ROPE">>
|
||
<OR <AND ,DOME-FLAG!-FLAG <==? <PRSI> <SFIND-OBJ "RAILI">>>
|
||
<==? <PRSI> ,TIMBER-TIE!-FLAG>>>
|
||
<AND <==? <PRSO> <SFIND-OBJ "BROPE">> ,BTIE!-FLAG>>
|
||
<PERFORM UNTIE <FIND-VERB "UNTIE"> <PRSO>>)
|
||
(<TELL "It's not attached to that!">)>>
|
||
|
||
<DEFINE ROPE-AWAY (ROPE RM)
|
||
#DECL ((ROPE) OBJECT (RM) ROOM)
|
||
<TRO .ROPE <+ ,CLIMBBIT ,NDESCBIT>>
|
||
<COND (<NOT <OROOM .ROPE>>
|
||
<DROP-OBJECT .ROPE>
|
||
<INSERT-OBJECT .ROPE .RM>)>>
|
||
|
||
<DEFINE SLIDE-ROPE ()
|
||
<COND (<VERB? "TAKE">
|
||
<TELL "What do you think is suspending you in midair?">)
|
||
(<VERB? "DROP">
|
||
<TELL "You tumble down the chute to the cellar.">
|
||
<GO&LOOK <SFIND-ROOM "CELLA">>)
|
||
(<VERB? "CLDN" "CLUP" "CLUDG">
|
||
<>)
|
||
(<TELL "It's not easy to play with the rope in your position.">)>>
|
||
|
||
<DEFINE TIMBERS ()
|
||
<COND (<VERB? "TAKE">
|
||
<COND (<==? <PRSO> ,TIMBER-TIE!-FLAG>
|
||
<TELL "The rope comes loose as you take the " 1 <ODESC2 <PRSO>> ".">
|
||
<PERFORM UNTIE <FIND-VERB "UNTIE"> <SFIND-OBJ "ROPE">>
|
||
<>)>)>>
|
||
|
||
<DEFINE SLIDE-ROOM ("AUX" (TIE ,TIMBER-TIE!-FLAG))
|
||
#DECL ((TIE) <OR FALSE OBJECT>)
|
||
<COND (<VERB? "LOOK">
|
||
<TELL ,SLIDE-DESC>
|
||
<COND (.TIE
|
||
<TELL
|
||
"A " 1 <ODESC2 .TIE> " is lying on the ground here. Tied to it is a piece
|
||
of rope, which is dangling down the slide.">)>)>>
|
||
|
||
<DEFINE SLIDE-FUNCTION ()
|
||
<COND (<OR <VERB? "GTHRO">
|
||
<AND <VERB? "PUT"> <==? <PRSO> <AOBJ ,PLAYER>>>>
|
||
<TELL "You tumble down the slide....">
|
||
<GO&LOOK <SFIND-ROOM "CELLA">>)
|
||
(<VERB? "PUT">
|
||
<COND (<==? <PRSO> ,TIMBER-TIE!-FLAG>
|
||
<SETG TIMBER-TIE!-FLAG <>>)>
|
||
<SLIDER <PRSO>>)>>
|
||
|
||
<DEFINE GO&LOOK (RM "AUX" (SEEN? <RTRNN .RM ,RSEENBIT>))
|
||
#DECL ((RM) ROOM (SEEN?) <OR ATOM FALSE>)
|
||
<GOTO .RM>
|
||
<PERFORM ROOM-DESC <FIND-VERB "LOOK">>
|
||
<OR .SEEN? <RTRZ .RM ,RSEENBIT>>>
|
||
|
||
<DEFINE SLIDER (OBJ)
|
||
#DECL ((OBJ) OBJECT)
|
||
<COND (<TRNN .OBJ ,TAKEBIT>
|
||
<COND (<OR <==? .OBJ <SFIND-OBJ "VALUA">>
|
||
<==? .OBJ <SFIND-OBJ "EVERY">>>
|
||
<VALUABLES&C>)
|
||
(<TELL "The " 1 <ODESC2 .OBJ>
|
||
" falls through the slide and is gone.">
|
||
<REMOVE-OBJECT .OBJ>
|
||
<OR <==? .OBJ <SFIND-OBJ "WATER">>
|
||
<INSERT-OBJECT .OBJ <SFIND-ROOM "CELLA">>>)>)
|
||
(<TELL <PICK-ONE ,YUKS>>)>>
|
||
|
||
<DEFINE INSLIDE ()
|
||
<MAPF <> ,SLIDER <ROBJS ,HERE>>>
|
||
|
||
<DEFINE SLEDG-ROOM ()
|
||
<COND (<VERB? "GO-IN">
|
||
<SETG SLIDE-SOLVE!-FLAG T>
|
||
<CLOCK-DISABLE ,SLDIN>)>>
|
||
|
||
<DEFINE STOVE-FUNCTION ()
|
||
<COND (<VERB? "TAKE" "FEEL" "DESTR" "ATTAC">
|
||
<TELL "The intense heat of the stove keeps you away.">)
|
||
(<AND <VERB? "THROW"> <TRNN <PRSO> ,BURNBIT>>
|
||
<PERFORM BURNER <FIND-VERB "BURN"> <PRSO> <PRSI>>)>>
|
||
|
||
<DEFINE OOPS ()
|
||
<TELL "You haven't made any spelling mistakes....lately.">>
|
||
|
||
; "MORE RANDOMNESS"
|
||
|
||
<GDECL (MUDDLE) FIX (LEXV) <VECTOR [REST STRING STRING FIX]>>
|
||
|
||
<DEFINE SRNAME ("AUX" (STR <7 ,LEXV>))
|
||
#DECL ((STR) STRING)
|
||
<COND (<L? ,MUDDLE 100>
|
||
<TELL "Not available on ITS.">)
|
||
(<NOT <EMPTY? .STR>>
|
||
<SETG SAVNM <STRING .STR>>
|
||
<TELL "Ok.">)
|
||
(<TELL ,SAVNM>)>>
|
||
|
||
<DEFINE PLAY ()
|
||
<COND (<==? <PRSO> <FIND-OBJ "STRAD">>
|
||
<COND (<TRNN <PRSI> ,WEAPONBIT>
|
||
<TELL "Very good. The violin is now worthless.">
|
||
<OTVAL <PRSO> 0>)
|
||
(<TELL "An amazingly offensive noise issues from the violin.">)>)
|
||
(<TRNN <PRSO> ,VILLAIN>
|
||
<JIGS-UP
|
||
"You are so engrossed in the role of the " 1 <ODESC2 <PRSO>> "that
|
||
you kill yourself, just as he would have done!">)>>
|
||
|
||
<DEFINE MAKER ("AUX" (HERE ,HERE) (COINS <SFIND-OBJ "BAGCO">))
|
||
#DECL ((HERE) ROOM (COINS) OBJECT)
|
||
<COND (<==? <PRSO> <SFIND-OBJ "WISH">>
|
||
<COND (<AND <==? .HERE <SFIND-ROOM "BWELL">>
|
||
<OR <MEMQ .COINS <ROBJS .HERE>>
|
||
<MEMQ <SET COINS <SFIND-OBJ "COIN">> <ROBJS .HERE>>>>
|
||
<TELL
|
||
"A whispering voice replies: 'Water makes the bucket go'.
|
||
Unfortunately, wishing makes the coins go....">
|
||
<REMOVE-OBJECT .COINS>)
|
||
(<TELL "No one is listening.">)>)>>
|
||
|
||
<DEFINE WELL-FUNCTION ()
|
||
<COND (<AND <TRNN <PRSO> ,TAKEBIT> <VERB? "THROW" "PUT" "DROP">>
|
||
<TELL "The " 1 <ODESC2 <PRSO>> " is now sitting at the bottom of the well.">
|
||
<REMOVE-OBJECT <PRSO>>
|
||
<INSERT-OBJECT <PRSO> <SFIND-ROOM "BWELL">>)>>
|
||
|
||
<DEFINE WISHER ()
|
||
<PERFORM MAKER <FIND-VERB "MAKE"> <SFIND-OBJ "WISH">>>
|
||
|
||
; "Oh, is this ever gross!"
|
||
|
||
<SETG BRFLAG1!-FLAG <>>
|
||
|
||
<SETG BRFLAG2!-FLAG <>>
|
||
|
||
<DEFINE SENDER ()
|
||
<COND (<OBJECT-ACTION>)
|
||
(<TRNN <PRSO> ,VILLAIN>
|
||
<TELL "Why would you send for the " 1 <ODESC2 <PRSO>> "?">)
|
||
(<TELL "That doesn't make sends.">)>>
|
||
|
||
<DEFINE BROCHURE ("AUX" (STAMP <SFIND-OBJ "DSTMP">))
|
||
#DECL ((STAMP) OBJECT)
|
||
<COND (<==? <PRSO> .STAMP>
|
||
<COND (<VERB? "TAKE">
|
||
<TRZ <SFIND-OBJ "BROCH"> ,CONTBIT>
|
||
<>)>)
|
||
(<AND <VERB? "EXAMI" "LKAT" "READ">
|
||
<==? <PRSO> <SFIND-OBJ "BROCH">>>
|
||
<TELL ,BRO1 1 ,USER-NAME ,BRO2>
|
||
<AND <OCAN .STAMP>
|
||
<TELL "Affixed loosely to the brochure is a small stamp.">>)
|
||
(<AND <VERB? "FIND"> ,BR1!-FLAG>
|
||
<TELL "It's probably on the way.">)
|
||
(<VERB? "SEND">
|
||
<COND (,BRFLAG2!-FLAG <TELL "Why? Do you need another one?">)
|
||
(,BRFLAG1!-FLAG <TELL "It's probably on the way.">)
|
||
(<SETG BRFLAG1!-FLAG T>
|
||
<TELL "Ok, but you know the postal service...">)>)
|
||
(<VERB? "C-INT">
|
||
<TELL "There is a knocking sound from the front of the house.">
|
||
<INSERT-INTO <SFIND-OBJ "MAILB"> <SFIND-OBJ "BROCH">>
|
||
<SETG BRFLAG2!-FLAG T>)
|
||
(<==? <PRSO> <SFIND-OBJ "GBROC">>
|
||
<TELL "I don't see any brochure here.">)>>
|
||
|
||
<DEFINE DEAD-FUNCTION ("AUX" M)
|
||
#DECL ((M) <OR FALSE <VECTOR [REST DIRECTION ANY]>>)
|
||
<COND (<VERB? "WALK">
|
||
<COND (<AND <SET M <MEMQ <2 ,PRSVEC> <REXITS ,HERE>>>
|
||
<==? <2 .M> ,DARK-ROOM>>
|
||
<TELL "You cannot enter in your condition.">)>)
|
||
(<VERB? "QUIT" "RESTA"> <>)
|
||
(<VERB? "ATTAC" "BLOW" "DESTR" "KILL" "POKE" "STRIK" "SWING" "TAUNT">
|
||
<TELL "All such attacks are vain in your condition.">)
|
||
(<VERB? "OPEN" "CLOSE" "EAT" "DRINK" "INFLA" "DEFLA" "TURN" "BURN"
|
||
"TIE" "UNTIE" "RUB">
|
||
<TELL "Even such a simple action is beyond your capabilities.">)
|
||
(<VERB? "TRNON">
|
||
<TELL "You need no light to guide you.">)
|
||
(<VERB? "SCORE">
|
||
<TELL "How can you think of your score in your condition?">)
|
||
(<VERB? "TELL">
|
||
<TELL "No one can hear you.">)
|
||
(<VERB? "TAKE">
|
||
<TELL "Your hand passes through its object.">)
|
||
(<VERB? "DROP" "THROW" "INVEN">
|
||
<TELL "You have no possessions.">)
|
||
(<VERB? "DIAGN">
|
||
<TELL "You are dead.">)
|
||
(<VERB? "LOOK">
|
||
<TELL "The room looks strange and unearthly"
|
||
1
|
||
<COND (<EMPTY? <ROBJS ,HERE>>
|
||
".")
|
||
(" and objects appear indistinct.")>>
|
||
<OR <RTRNN ,HERE ,RLIGHTBIT>
|
||
<TELL
|
||
"Although there is no light, the room seems dimly illuminated.">>
|
||
<>)
|
||
(<VERB? "BUG">
|
||
<BUGGER>)
|
||
(<VERB? "FEATU">
|
||
<FEECH>)
|
||
(<VERB? "PRAY">
|
||
<COND (<==? ,HERE <FIND-ROOM "TEMP2">>
|
||
<TRO <FIND-OBJ "LAMP"> ,OVISON>
|
||
<GOTO <FIND-ROOM "FORE1">>
|
||
<PUT ,PLAYER ,AACTION <>>
|
||
<SETG GWIM-DISABLE <>>
|
||
<SETG ALWAYS-LIT <>>
|
||
<SETG DEAD!-FLAG <>>
|
||
<PUT ,PLAYER ,AACTION <>>
|
||
<TELL ,LIFE>)
|
||
(<TELL "Your prayers are not heard.">)>)
|
||
(<TELL "You can't do even that.">)>>
|
||
|
||
<DEFINE COUNT ("AUX" (OBJS <AOBJS ,WINNER>) CNT)
|
||
#DECL ((OBJS) <LIST [REST OBJECT]> (CNT) FIX)
|
||
<COND (<==? <PRSO> <SFIND-OBJ "BLESS">>
|
||
<TELL "Well, for one, you are playing Zork....">)
|
||
(<==? <PRSO> <SFIND-OBJ "LEAVE">>
|
||
<TELL "There are 69,105 leaves here.">)
|
||
(<==? <PRSO> <SFIND-OBJ "BILLS">>
|
||
<TELL "Don't you trust me? There are 200 bills.">)
|
||
(<==? <PRSO> <SFIND-OBJ "CANDL">>
|
||
<TELL
|
||
"Let's see, how many objects in a pair? Don't tell me, I'll get it.">)
|
||
(T
|
||
<TELL "You have " 0>
|
||
<COND (<==? <PRSO> <SFIND-OBJ "MATCH">>
|
||
<SET CNT <- <OMATCH <PRSO>> 1>>
|
||
<PRINC .CNT>
|
||
<TELL " match" 1 <COND (<NOT <1? .CNT>> "es.") (".")>>)
|
||
(<==? <PRSO> <SFIND-OBJ "VALUA">>
|
||
<NUMTELL <SET CNT
|
||
<MAPF ,+
|
||
<FUNCTION (OBJ)
|
||
#DECL ((OBJ) OBJECT)
|
||
<COND (<NOT <0? <OTVAL .OBJ>>> 1)
|
||
(0)>>
|
||
.OBJS>>
|
||
"valuable">
|
||
<AND <==? ,HERE <SFIND-ROOM "LROOM">>
|
||
<TELL "Your adventure has netted " 0>
|
||
<NUMTELL <LENGTH <OCONTENTS <SFIND-OBJ "TCASE">>> "treasure">>)
|
||
(<==? <PRSO> <SFIND-OBJ "POSSE">>
|
||
<NUMTELL <SET CNT <LENGTH .OBJS>> "possession">)
|
||
(<TELL "lost your mind.">)>)>>
|
||
|
||
<DEFINE NUMTELL (NUM STR)
|
||
#DECL ((NUM) FIX (STR) STRING)
|
||
<COND (<0? .NUM> <PRINC "no">)
|
||
(<PRINC .NUM>)>
|
||
<TELL " " 0 .STR>
|
||
<OR <1? .NUM> <TELL "s" 0>>
|
||
<TELL ".">>
|