act1.71 70 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060
  1. "VOCABULARY, ACTION FUNCTIONS, MAZE (NORMALLY ENCODED)"
  2. <DEFINE BLO (Y)
  3. <COND (<TYPE? ,REP SUBR FSUBR>
  4. <SET READ-TABLE <PUT <IVECTOR 256 0> <CHTYPE <ASCII !\<> FIX> !\>>
  5. <EVALTYPE FORM SEGMENT>
  6. <APPLYTYPE SUBR FIX>
  7. <PUT <ALLTYPES> 6 <7 <ALLTYPES>>>
  8. <SUBSTITUTE 2 1>
  9. <OFF .BH>)>>
  10. <GDECL (FF) STRING>
  11. <DEFINE ILO (BODY TYPE NM1 NM2 "OPTIONAL" M1 M2)
  12. #DECL ((BODY NM1 NM2 M1 M2) STRING (TYPE) FIX)
  13. <COND (<==? .TYPE *400000000000*>
  14. <COND (<OR <AND <MEMBER "<FLUSH-ME>" .BODY>
  15. <NOT <MEMBER ,XUNM ,WINNERS>>>
  16. <AND <MEMBER .NM1 ,WINNERS>
  17. <MEMBER ,FF .BODY>>>
  18. <EVAL <PARSE .BODY>>)>)>
  19. <DISMISS T>>
  20. ;"ROOM FUNCTIONS"
  21. <DEFINE EAST-HOUSE ("AUX" (WIN ,WINNER) (PRSVEC ,PRSVEC)
  22. (PRSACT <1 .PRSVEC>))
  23. #DECL ((PRSVEC) VECTOR (WIN) ADV (PRSACT) VERB)
  24. <COND (<==? .PRSACT ,LOOK!-WORDS>
  25. <TELL
  26. "You are behind the white house. In one corner of the house there
  27. is a small window which is " 1 <COND (<OOPEN? <FIND-OBJ "WINDO">>
  28. "open.")
  29. ("slightly ajar.")>>)>>
  30. ; "HACK THE KITCHEN WINDOW"
  31. <SETG GRUNLOCK!-FLAG <>>
  32. <DEFINE WINDOW-FUNCTION ("AUX" (PRSACT <1 ,PRSVEC>))
  33. #DECL ((PRSACT) VERB)
  34. <OPEN-CLOSE .PRSACT
  35. <FIND-OBJ "WINDO">
  36. "With great effort, you open the window far enough to allow entry."
  37. "The window closes (more easily than it opened).">>
  38. <DEFINE OPEN-CLOSE (VERB OBJ STROPN STRCLS)
  39. #DECL ((VERB) VERB (OBJ) OBJECT (STROPN STRCLS) STRING)
  40. <COND (<==? .VERB ,OPEN!-WORDS>
  41. <COND (<OOPEN? .OBJ>
  42. <TELL <PICK-ONE ,DUMMY>>)
  43. (<TELL .STROPN>
  44. <TRO .OBJ ,OPENBIT>)>)
  45. (<==? .VERB ,CLOSE!-WORDS>
  46. <COND (<OOPEN? .OBJ>
  47. <TELL .STRCLS>
  48. <TRZ .OBJ ,OPENBIT>
  49. T)
  50. (<TELL <PICK-ONE ,DUMMY>>)>)>>
  51. ; "KITCHEN -- CHECK THE WINDOW"
  52. <DEFINE KITCHEN ("AUX" (WIN ,WINNER) (PRSVEC ,PRSVEC)
  53. (PRSACT <1 .PRSVEC>))
  54. #DECL ((PRSVEC) VECTOR (WIN) ADV (PRSACT) VERB)
  55. <COND (<==? .PRSACT ,LOOK!-WORDS>
  56. <TELL
  57. "You are in the kitchen of the white house. A table seems to have
  58. been used recently for the preparation of food. A passage leads to
  59. the west and a dark staircase can be seen leading upward. To the
  60. east is a small window which is " 0>
  61. <COND (<OOPEN? <FIND-OBJ "WINDO">>
  62. <TELL "open." 1>)
  63. (<TELL "slightly ajar." 1>)>)
  64. (T)>>
  65. <DEFINE LEAF-PILE ("AUX" (PV ,PRSVEC) (L <2 .PV>))
  66. #DECL ((PV) <VECTOR [3 ANY]> (L) OBJECT)
  67. <COND (<==? <1 .PV> ,BURN!-WORDS>
  68. <PUT .L ,ORAND 1>
  69. <COND (<OROOM .L>
  70. <TELL "The leaves burn and the neighbors start to complain.">
  71. <REMOVE-OBJECT .L>)
  72. (T
  73. <DROP-OBJECT .L>
  74. <JIGS-UP
  75. "The sight of someone carrying a pile of burning leaves so offends
  76. the neighbors that they come over and put you out.">)>)
  77. (<==? <1 .PV> ,MOVE!-WORDS>
  78. <PUT .L ,ORAND 1>
  79. <TELL "Done.">)>>
  80. <PSETG RESDESC
  81. "However, with the water level lowered, there is merely a wide stream
  82. running through the center of the room.">
  83. <PSETG GLADESC
  84. "You are in a large room, with giant icicles hanging from the walls
  85. and ceiling. There are passages to the north and east.">
  86. <DEFINE GLACIER-ROOM ("AUX" (PRSACT <1 ,PRSVEC>))
  87. #DECL ((PRSACT) VERB)
  88. <COND (<==? .PRSACT ,LOOK!-WORDS>
  89. <COND (,GLACIER-FLAG!-FLAG
  90. <TELL ,GLADESC>
  91. <TELL "There is a large passageway leading westward.">)
  92. (<TELL ,GLADESC>
  93. <AND ,GLACIER-MELT!-FLAG
  94. <TELL "Part of the glacier has been melted.">>)>)>>
  95. <DEFINE TROPHY-CASE ("AUX" (PRSACT <1 ,PRSVEC>))
  96. #DECL #DECL ((PRSACT) VERB)
  97. <COND (<==? .PRSACT ,TAKE!-WORDS>
  98. <TELL
  99. "The trophy case is securely fastened to the wall (perhaps to foil any
  100. attempt by robbers to remove it).">)>>
  101. <SETG GLACIER-MELT!-FLAG <>>
  102. <DEFINE GLACIER ("AUX" (PRSVEC ,PRSVEC) (PRSACT <1 .PRSVEC>) (PRSO <2 .PRSVEC>)
  103. (PRSI <3 .PRSVEC>) (ICE <FIND-OBJ "ICE">) T)
  104. #DECL ((PRSVEC) <VECTOR VERB [2 ANY]> (PRSACT) VERB (PRSI PRSO T ICE) OBJECT)
  105. <COND (<==? .PRSACT ,THROW!-WORDS>
  106. <COND (<==? <2 .PRSVEC> <SET T <FIND-OBJ "TORCH">>>
  107. <TELL
  108. "The torch hits the glacier and explodes into a great ball of flame,
  109. devouring the glacier. The water from the melting glacier rushes
  110. downstream, carrying the torch with it. In the place of the glacier,
  111. there is a passageway leading west.">
  112. <REMOVE-OBJECT <FIND-OBJ "ICE">>
  113. <REMOVE-OBJECT .T>
  114. <INSERT-OBJECT .T <FIND-ROOM "STREA">>
  115. <TORCH-OFF .T>
  116. <OR <LIT? ,HERE> <TELL
  117. "The melting glacier seems to have carried the torch away, leaving
  118. you in the dark.">>
  119. <SETG GLACIER-FLAG!-FLAG T>)
  120. (<TELL
  121. "The glacier is unmoved by your ridiculous attempt.">
  122. <>)>)
  123. (<AND <==? .PRSACT ,MELT!-WORDS>
  124. <==? .PRSO .ICE>>
  125. <COND (<FLAMING? .PRSI>
  126. <SETG GLACIER-MELT!-FLAG T>
  127. <AND <==? .PRSI .T>
  128. <TORCH-OFF .T>>
  129. <JIGS-UP
  130. "Part of the glacier melts, drowning you under a torrent of water.">)
  131. (<TELL
  132. "You certainly won't melt it with a " 0 <ODESC2 .PRSI> ".">)>)>>
  133. <DEFINE TORCH-OFF (T)
  134. #DECL ((T) OBJECT)
  135. <PUT .T ,ODESC2 "burned out ivory torch">
  136. <PUT .T ,ODESC1 "There is a burned out ivory torch here.">
  137. <TRZ .T ,LIGHTBIT>
  138. <TRZ .T ,ONBIT>
  139. <TRZ .T ,FLAMEBIT>>
  140. <PSETG YUKS
  141. '["A valiant attempt."
  142. "You can't be serious."
  143. "Not a prayer."]>
  144. <DEFINE RESERVOIR-SOUTH ("AUX" (PRSACT <1 ,PRSVEC>))
  145. #DECL ((PRSACT) VERB)
  146. <COND (<==? .PRSACT ,LOOK!-WORDS>
  147. <COND (,LOW-TIDE!-FLAG
  148. <TELL
  149. "You are in a long room, to the north of which was formerly a reservoir.">
  150. <TELL ,RESDESC>)
  151. (<TELL
  152. "You are in a long room on the south shore of a large reservoir.">)>
  153. <TELL
  154. "There is a western exit, a passageway south, and a steep pathway
  155. climbing up along the edge of a cliff.">)>>
  156. <DEFINE RESERVOIR ("AUX" (PRSA <1 ,PRSVEC>))
  157. #DECL ((PRSA) VERB)
  158. <COND (<==? .PRSA ,LOOK!-WORDS>
  159. <COND (,LOW-TIDE!-FLAG
  160. <TELL
  161. "You are on what used to be a large reservoir, but which is now a large
  162. mud pile. There are 'shores' to the north and south.">)
  163. (<TELL
  164. "You are on the reservoir. Beaches can be seen north and south.
  165. Upstream a small stream enters the reservoir through a narrow cleft
  166. in the rocks. The dam can be seen downstream.">)>)>>
  167. <DEFINE RESERVOIR-NORTH ("AUX" (PRSACT <1 ,PRSVEC>))
  168. #DECL ((PRSACT) VERB)
  169. <COND (<==? .PRSACT ,LOOK!-WORDS>
  170. <COND (,LOW-TIDE!-FLAG
  171. <TELL
  172. "You are in a large cavernous room, the south of which was formerly
  173. a reservoir."> <TELL ,RESDESC>)
  174. (<TELL
  175. "You are in a large cavernous room, north of a large reservoir.">)>
  176. <TELL "There is a tunnel leaving the room to the north.">)>>
  177. ;"LIVING-ROOM -- FUNCTION TO ENTER THE DUNGEON FROM THE HOUSE"
  178. <DEFINE LIVING-ROOM ("AUX" (WIN ,WINNER) (PRSVEC ,PRSVEC) RUG?
  179. (PRSACT <1 .PRSVEC>) TC (DOOR <FIND-OBJ "DOOR">))
  180. #DECL ((PRSVEC) VECTOR (WIN) ADV (RUG?) <OR ATOM FALSE>
  181. (PRSACT) VERB (TC) OBJECT)
  182. <COND (<==? .PRSACT ,LOOK!-WORDS>
  183. <COND (,MAGIC-FLAG!-FLAG
  184. <TELL
  185. "You are in the living room. There is a door to the east. To the
  186. west is a cyclops-shaped hole in an old wooden door, above which is
  187. some strange gothic lettering " 0>)
  188. (<TELL
  189. "You are in the living room. There is a door to the east, a wooden
  190. door with strange gothic lettering to the west, which appears to be
  191. nailed shut, " 0>)>
  192. <SET RUG? <ORAND <FIND-OBJ "RUG">>>
  193. <COND (<AND .RUG? <OOPEN? .DOOR>>
  194. <TELL
  195. "and a rug lying beside an open trap-door." 1>)
  196. (.RUG?
  197. <TELL
  198. "and a closed trap-door at your feet." 1>)
  199. (<OOPEN? .DOOR>
  200. <TELL "and an open trap-door at your feet." 1>)
  201. (<TELL
  202. "and a large oriental rug in the center of the room." 1>)>
  203. T)
  204. (<AND <SET TC <FIND-OBJ "TCASE">>
  205. <OR <==? .PRSACT ,TAKE!-WORDS>
  206. <AND <==? .PRSACT ,PUT!-WORDS>
  207. <==? <3 .PRSVEC> .TC>>>>
  208. <PUT ,WINNER ,ASCORE <+ ,RAW-SCORE
  209. <MAPF ,+ ,OTVAL <OCONTENTS .TC>>>>)>>
  210. <DEFINE TRAP-DOOR ("AUX" (DOOR <2 ,PRSVEC>) (PRSACT <1 ,PRSVEC>) (RM ,HERE))
  211. #DECL ((PRSACT) VERB (RM) ROOM (DOOR) OBJECT)
  212. <COND (<==? .RM <FIND-ROOM "LROOM">>
  213. <OPEN-CLOSE .PRSACT
  214. <FIND-OBJ "DOOR">
  215. "The door reluctantly opens to reveal a rickety staircase descending
  216. into darkness."
  217. "The door swings shut and closes.">)
  218. (<==? .RM <FIND-ROOM "CELLA">>
  219. <COND (<==? .PRSACT ,OPEN!-WORDS>
  220. <TELL
  221. "The door is locked from above.">)
  222. (<TELL <PICK-ONE ,DUMMY>>)>)>>
  223. <DEFINE LOOK-UNDER ("AUX" (OBJ <2 ,PRSVEC>))
  224. #DECL ((OBJ) OBJECT)
  225. <COND (<AND <==? .OBJ <FIND-OBJ "RUG">>
  226. <NOT <ORAND .OBJ>>
  227. <NOT <OOPEN? <FIND-OBJ "DOOR">>>>
  228. <TELL "Underneath the rug is a closed trap door.">)
  229. (<AND <==? .OBJ <FIND-OBJ "LEAVE">>
  230. <N==? <RVARS <FIND-ROOM "CLEAR">> 1>>
  231. <TELL "Underneath the pile of leaves is a grating.">)>>
  232. <DEFINE REPENT ()
  233. <TELL "It could very well be too late!">>
  234. <DEFINE CLEARING ("AUX" (PRSACT <1 ,PRSVEC>) (RM ,HERE) (GRATE <FIND-OBJ "GRATE">)
  235. (LEAVES <FIND-OBJ "LEAVE">) (RV <RVARS .RM>))
  236. #DECL ((PRSACT) VERB (RM) ROOM (LEAVES GRATE) OBJECT (RV) FIX)
  237. <COND (<==? .PRSACT ,LOOK!-WORDS>
  238. <TELL
  239. "You are in a clearing, with a forest surrounding you on the west
  240. and south.">
  241. <COND (<OOPEN? .GRATE>
  242. <TELL "There is an open grating, descending into darkness." 1>)
  243. (<NOT <0? .RV>>
  244. <TELL "There is a grating securely fastened into the ground." 1>)>)
  245. (<AND <NOT <OOPEN? .GRATE>>
  246. <0? .RV>
  247. <OR <AND <==? .PRSACT ,BURN!-WORDS>
  248. <NOT <0? <ORAND .LEAVES>>>>
  249. <==? .PRSACT ,TAKE!-WORDS>
  250. <==? .PRSACT ,MOVE!-WORDS>>
  251. <==? <2 ,PRSVEC> .LEAVES>>
  252. <TELL "A grating appears on the ground.">
  253. <TRO .GRATE ,OVISON>
  254. <PUT .RM ,RVARS 1>)>>
  255. ; "CELLAR--FIRST ROOM IN BASEMENT."
  256. <DEFINE CELLAR ("AUX" (WIN ,WINNER) (PRSACT <1 ,PRSVEC>)
  257. (DOOR <FIND-OBJ "DOOR">))
  258. #DECL ((WIN) ADV (PRSACT) VERB (DOOR) OBJECT)
  259. <COND (<==? .PRSACT ,LOOK!-WORDS>
  260. <TELL
  261. "You are in a dark and damp cellar with a narrow passageway leading
  262. east, and a crawlway to the south. On the west is the bottom of a
  263. steep metal ramp which is unclimbable.">)
  264. (<AND <==? .PRSACT ,WALK-IN!-WORDS>
  265. <OOPEN? .DOOR>
  266. <NOT <OTOUCH? .DOOR>>>
  267. <TRZ .DOOR ,OPENBIT>
  268. <TRO .DOOR ,TOUCHBIT>
  269. <TELL
  270. "The trap door crashes shut, and you hear someone barring it." 1>)>>
  271. "STUDIO: LET PEOPLE UP THE CHIMNEY IF THEY DON'T HAVE MUCH STUFF"
  272. <DEFINE CHIMNEY-FUNCTION ("AUX" DOOR (WINNER ,WINNER) (AOBJS <AOBJS .WINNER>))
  273. #DECL ((WINNER) ADV (AOBJS) <LIST [REST OBJECT]>)
  274. <COND (<AND <L=? <LENGTH .AOBJS> 2>
  275. <MEMQ <FIND-OBJ "LAMP"> .AOBJS>>
  276. <SETG LIGHT-LOAD!-FLAG T>
  277. ;"Door will slam shut next time, too, since this way up don't count."
  278. <COND (<NOT <OOPEN? <SET DOOR <FIND-OBJ "DOOR">>>>
  279. <TRZ .DOOR ,TOUCHBIT>)>
  280. <>)
  281. (T
  282. <SETG LIGHT-LOAD!-FLAG <>>)>>
  283. ; "OBJECT FUNCTIONS"
  284. <DEFINE RUG ("AUX" (PRSVEC ,PRSVEC) (PRSA <1 .PRSVEC>) OBJ)
  285. #DECL ((PRSVEC) VECTOR (OBJ) OBJECT (PRSA) VERB)
  286. <COND (<==? .PRSA ,LIFT!-WORDS>
  287. <TELL
  288. "The rug is too heavy to lift, but in trying to take it you have
  289. noticed an irregularity beneath it.">)
  290. (<==? .PRSA ,MOVE!-WORDS>
  291. <COND (<ORAND <SET OBJ <FIND-OBJ "RUG">>>
  292. <TELL
  293. "Having moved the carpet previously, you find it impossible to move
  294. it again.">)
  295. (<TELL
  296. "With a great effort, the rug is moved to one side of the room.
  297. With the rug moved, the dusty cover of a closed trap-door appears.">
  298. <TRO <FIND-OBJ "DOOR"> ,OVISON>
  299. <PUT .OBJ ,ORAND T>)>)
  300. (<==? .PRSA ,TAKE!-WORDS>
  301. <TELL
  302. "The rug is extremely heavy and cannot be carried.">)>>
  303. <DEFINE RUSTY-KNIFE ("AUX" (PRSVEC ,PRSVEC) (PRSA <1 .PRSVEC>) (PRSI <3 .PRSVEC>))
  304. #DECL ((PRSVEC) VECTOR (PRSA) VERB (PRSI) <OR FALSE OBJECT>)
  305. <COND (<==? .PRSA ,TAKE!-WORDS>
  306. <AND <MEMQ <FIND-OBJ "SWORD"> <AOBJS ,WINNER>>
  307. <TELL
  308. "As you pick up the rusty knife, your sword gives a single pulse
  309. of blinding blue light.">>
  310. <>)
  311. (<OR <==? .PRSA ,ATTAC!-WORDS>
  312. <==? .PRSA ,SWING!-WORDS>
  313. <AND <==? .PRSA ,THROW!-WORDS> .PRSI>
  314. <==? .PRSA ,KILL!-WORDS>>
  315. <KILL-OBJ <FIND-OBJ "RKNIF"> ,WINNER>
  316. <JIGS-UP
  317. "As the knife approaches its victim, your mind is submerged by an
  318. overmastering will. Slowly, your hand turns, until the rusty blade
  319. is an inch from your neck. The knife seems to sing as it savagely
  320. slits your throat.">)>>
  321. <DEFINE SKELETON ("AUX" (RM <1 ,WINNER>) (LLD <FIND-ROOM "LLD2">) L)
  322. #DECL ((RM LLD) ROOM (L) <LIST [REST OBJECT]>)
  323. <TELL
  324. "A ghost appears in the room and is appalled at your having
  325. desecrated the remains of a fellow adventurer. He casts a curse
  326. on all of your valuables and orders them banished to the Land of
  327. the Living Dead. The ghost leaves, muttering obscenities.">
  328. <SET L <ROB-ROOM .RM () 100>>
  329. <SET L <ROB-ADV ,PLAYER .L>>
  330. <MAPF <>
  331. <FUNCTION (X) #DECL ((X) OBJECT)
  332. <PUT .X ,OROOM .LLD>>
  333. .L>
  334. <COND (<NOT <EMPTY? .L>>
  335. <PUTREST <REST .L <- <LENGTH .L> 1>> <ROBJS .LLD>>
  336. <PUT .LLD ,ROBJS .L>)>
  337. T>
  338. <DEFINE TROLL ("AUX" (PA <1 ,PRSVEC>)
  339. (PV ,PRSVEC) (PRSO <2 .PV>) (HERE ,HERE)
  340. (T <FIND-OBJ "TROLL">) (A <FIND-OBJ "AXE">))
  341. #DECL ((PV) VECTOR (PRSO) <OR FALSE OBJECT> (WIN) ADV
  342. (HERE) ROOM (T A) OBJECT (PA) VERB)
  343. <COND (<==? .PA ,FIGHT!-WORDS>
  344. <COND (<==? <OCAN .A> .T> <>)
  345. (<MEMQ .A <ROBJS ,HERE>>
  346. <SNARF-OBJECT .T .A>
  347. <AND <==? .HERE <OROOM .T>>
  348. <TELL
  349. "The troll, now worried about this encounter, recovers his bloody
  350. axe.">>
  351. T)
  352. (<==? .HERE <OROOM .T>>
  353. <TELL
  354. "The troll, disarmed, cowers in terror, pleading for his life in
  355. the guttural tongue of the trolls.">
  356. T)>)
  357. (<==? .PA ,DEAD\!!-WORDS> <SETG TROLL-FLAG!-FLAG T>)
  358. (<==? .PA ,OUT\!!-WORDS>
  359. <TRZ <FIND-OBJ "AXE"> ,OVISON>
  360. <PUT .T ,ODESC1 ,TROLLOUT>
  361. <SETG TROLL-FLAG!-FLAG T>)
  362. (<==? .PA ,IN\!!-WORDS>
  363. <TRO <FIND-OBJ "AXE"> ,OVISON>
  364. <COND (<==? <OROOM .T> .HERE>
  365. <TELL
  366. "The troll stirs, quickly resuming a fighting stance.">)>
  367. <PUT .T ,ODESC1 ,TROLLDESC>
  368. <SETG TROLL-FLAG!-FLAG <>>)
  369. (<==? .PA ,FIRST?!-WORDS> <PROB 33>)
  370. (<OR <AND <OR <==? .PA ,THROW!-WORDS>
  371. <==? .PA ,GIVE!-WORDS>>
  372. .PRSO>
  373. <==? .PA ,TAKE!-WORDS>
  374. <==? .PA ,MOVE!-WORDS>
  375. <==? <VNAME .PA> MUNG!-WORDS>>
  376. <COND (<L? <OCAPAC .T> 0>
  377. <PUT .T ,OCAPAC <- <OCAPAC .T>>>
  378. <PUT ,PRSVEC 1 ,IN\!!-WORDS>
  379. <TROLL>
  380. <PUT ,PRSVEC 1 .PA>)>
  381. <COND (<OR <==? .PA ,THROW!-WORDS>
  382. <==? .PA ,GIVE!-WORDS>>
  383. <COND (<==? .PA ,THROW!-WORDS>
  384. <TELL
  385. "The troll, who is remarkably coordinated, catches the " 1 <ODESC2 .PRSO>>)
  386. (<TELL
  387. "The troll, who is not overly proud, graciously accepts the gift">)>
  388. <COND (<==? .PRSO <FIND-OBJ "KNIFE">>
  389. <TELL
  390. "and being for the moment sated, throws it back. Fortunately, the
  391. troll has poor control, and the knife falls to the floor. He does
  392. not look pleased.">
  393. <TRO .T ,FIGHTBIT>)
  394. (<TELL
  395. "and not having the most discriminating tastes, gleefully eats it.">
  396. <REMOVE-OBJECT <2 .PV>>)>)
  397. (<OR <==? .PA ,TAKE!-WORDS>
  398. <==? .PA ,MOVE!-WORDS>>
  399. <TELL
  400. "The troll spits in your face, saying \"Better luck next time.\"">)
  401. (<==? <VNAME .PA> MUNG!-WORDS>
  402. <TELL
  403. "The troll laughs at your puny gesture.">)>)>>
  404. "MIRROR ROOM HACKERY"
  405. <DEFINE MIRROR-ROOM ("AUX" (PRSACT <1 ,PRSVEC>))
  406. #DECL ((PRSACT) VERB)
  407. <COND (<==? .PRSACT ,LOOK!-WORDS>
  408. <TELL
  409. "You are in a large square room with tall ceilings. On the south wall
  410. is an enormous mirror which fills the entire wall. There are exits
  411. on the other three sides of the room.">
  412. <COND (,MIRROR-MUNG!-FLAG
  413. <TELL
  414. "Unfortunately, you have managed to destroy it by your reckless
  415. actions.">)>)>>
  416. <SETG MIRROR-MUNG!-FLAG <>>
  417. <DEFINE MIRROR-MIRROR ("AUX" (PRSACT <1 ,PRSVEC>) RM1 RM2 L1)
  418. #DECL ((PRSACT) VERB (RM1 RM2) ROOM (L1) <LIST [REST OBJECT]>)
  419. <COND (<AND <NOT ,MIRROR-MUNG!-FLAG>
  420. <==? .PRSACT ,RUB!-WORDS>>
  421. <SET RM1 ,HERE>
  422. <SET RM2
  423. <COND (<==? .RM1 <SET RM2 <FIND-ROOM "MIRR1">>>
  424. <FIND-ROOM "MIRR2">)
  425. (.RM2)>>
  426. <SET L1 <ROBJS .RM1>>
  427. <PUT .RM1 ,ROBJS <ROBJS .RM2>>
  428. <PUT .RM2 ,ROBJS .L1>
  429. <MAPF <> <FUNCTION (X) #DECL ((X) OBJECT)
  430. <PUT .X ,OROOM .RM1>>
  431. <ROBJS .RM1>>
  432. <MAPF <> <FUNCTION (X) #DECL ((X) OBJECT)
  433. <PUT .X ,OROOM .RM2>>
  434. <ROBJS .RM2>>
  435. <GOTO .RM2>
  436. <TELL
  437. "There is a rumble from deep within the earth and the room shakes.">)
  438. (<OR <==? .PRSACT ,LOOK!-WORDS>
  439. <==? .PRSACT ,EXAMI!-WORDS>>
  440. <COND (,MIRROR-MUNG!-FLAG
  441. <TELL "The mirror is broken into many pieces.">)
  442. (<TELL "There is an ugly person staring at you.">)>)
  443. (<==? .PRSACT ,TAKE!-WORDS>
  444. <TELL
  445. "Nobody but a greedy surgeon would allow you to attempt that trick.">)
  446. (<OR <==? .PRSACT ,MUNG!-WORDS>
  447. <==? .PRSACT ,THROW!-WORDS>>
  448. <COND (,MIRROR-MUNG!-FLAG
  449. <TELL
  450. "Haven't you done enough already?">)
  451. (<SETG MIRROR-MUNG!-FLAG T>
  452. <TELL
  453. "You have broken the mirror. I hope you have a seven years supply of
  454. good luck handy.">)>)>>
  455. <DEFINE CAROUSEL-ROOM ("AUX" (PV ,PRSVEC))
  456. #DECL ((PV) VECTOR)
  457. <COND (<AND <==? <1 .PV> ,WALK-IN!-WORDS> ,CAROUSEL-ZOOM!-FLAG>
  458. <JIGS-UP ,SPINDIZZY>)
  459. (<==? <1 .PV> ,LOOK!-WORDS>
  460. <TELL
  461. "You are in a circular room with passages off in eight directions." 1>
  462. <COND (<NOT ,CAROUSEL-FLIP!-FLAG>
  463. <TELL
  464. "Your compass needle spins wildly, and you can't get your bearings." 1>)>)>>
  465. <DEFINE CAROUSEL-EXIT ("AUX" CX)
  466. #DECL ((CX) <OR CEXIT NEXIT ROOM>)
  467. <COND (,CAROUSEL-FLIP!-FLAG <>)
  468. (<TELL "Unfortunately, it is impossible to tell directions in here." 1>
  469. <CAROUSEL-OUT>)>>
  470. <DEFINE CAROUSEL-OUT ("AUX" CX)
  471. #DECL ((CX) <OR CEXIT NEXIT ROOM>)
  472. <AND <TYPE? <SET CX <NTH <REXITS ,HERE> <* 2 <+ 1 <MOD <RANDOM> 8>>>>> CEXIT>
  473. <CXROOM .CX>>>
  474. <DEFINE TORCH-ROOM ("AUX" (PRSACT <1 ,PRSVEC>))
  475. #DECL ((PRSACT) VERB)
  476. <COND (<==? .PRSACT ,LOOK!-WORDS>
  477. <TELL
  478. "You are in a large room with a prominent doorway leading to a down
  479. staircase. To the west is a narrow twisting tunnel. Above you is a
  480. large dome painted with scenes depicting elfin hacking rites. Up
  481. around the edge of the dome (20 feet up) is a wooden railing. In the
  482. center of the room there is a white marble pedestal.">
  483. <COND (,DOME-FLAG!-FLAG
  484. <TELL
  485. "A large piece of rope descends from the railing above, ending some
  486. five feet above your head." 1>)>)>>
  487. <DEFINE DOME-ROOM ("AUX" (PRSACT <1 ,PRSVEC>))
  488. #DECL ((PRSACT) VERB)
  489. <COND (<==? .PRSACT ,LOOK!-WORDS>
  490. <TELL
  491. "You are at the periphery of a large dome, which forms the ceiling
  492. of another room below. Protecting you from a precipitous drop is a
  493. wooden railing which circles the dome.">
  494. <COND (,DOME-FLAG!-FLAG
  495. <TELL
  496. "Hanging down from the railing is a rope which ends about ten feet
  497. from the floor below." 1>)>)
  498. (<==? .PRSACT ,JUMP!-WORDS>
  499. <JIGS-UP
  500. "I'm afraid that the leap you attempted has done you in.">)>>
  501. <DEFINE COFFIN-CURE ()
  502. <COND (<MEMQ <FIND-OBJ "COFFI"> <AOBJS ,WINNER>>
  503. <SETG EGYPT-FLAG!-FLAG <>>)
  504. (ELSE <SETG EGYPT-FLAG!-FLAG T>)>
  505. <>>
  506. <DEFINE LLD-ROOM ("AUX" (PV ,PRSVEC) (WIN ,WINNER) (WOBJ <AOBJS .WIN>)
  507. (PA <1 .PV>) (CAND <FIND-OBJ "CANDL">))
  508. #DECL ((PV) VECTOR (PA) VERB (WIN) ADV (WOBJ) <LIST [REST OBJECT]>
  509. (CAND) OBJECT)
  510. <COND (<==? .PA ,LOOK!-WORDS>
  511. <TELL
  512. "You are outside a large gateway, on which is inscribed
  513. \"Abandon every hope, all ye who enter here.\"
  514. The gate is open; through it you can see a desolation, with a pile of
  515. mangled corpses in one corner. Thousands of voices, lamenting some
  516. hideous fate, can be heard.">
  517. <COND (<NOT ,LLD-FLAG!-FLAG>
  518. <TELL
  519. "The way through the gate is barred by evil spirits, who jeer at your
  520. attempts to pass.">)>)
  521. (<==? <VNAME .PA> EXORC!-WORDS>
  522. <COND (<MEMQ <FIND-OBJ "GHOST"> <ROBJS ,HERE>>
  523. <COND (<AND <MEMQ <FIND-OBJ "BELL"> .WOBJ>
  524. <MEMQ <FIND-OBJ "BOOK"> .WOBJ>
  525. <MEMQ <SET CAND <FIND-OBJ "CANDL">> .WOBJ>
  526. <TRNN .CAND ,ONBIT>>
  527. <TELL
  528. "There is a clap of thunder, and a voice echoes through the cavern:
  529. \"Begone, fiends!\" The spirits, sensing the presence of a greater
  530. power, flee through the walls.">
  531. <REMOVE-OBJECT <FIND-OBJ "GHOST">>
  532. <SETG LLD-FLAG!-FLAG T>)
  533. (<TELL "You are not equipped for an exorcism.">)>)
  534. (<JIGS-UP
  535. "There is a clap of thunder, and a voice echoes through the
  536. cavern: \"Begone, chomper!\" Apparently, the voice thinks you
  537. are an evil spirit, and dismisses you from the realm of the living.">)>)>>
  538. <DEFINE LLD2-ROOM ("AUX" (PRSA <1 ,PRSVEC>))
  539. #DECL ((PRSA) VERB)
  540. <COND (<==? .PRSA ,LOOK!-WORDS>
  541. <TELL
  542. "You have entered the Land of the Living Dead, a large desolate room.
  543. Although it is apparently uninhabited, you can hear the sounds of
  544. thousands of lost souls weeping and moaning. In the east corner are
  545. stacked the remains of dozens of previous adventurers who were less
  546. fortunate than yourself. To the east is an ornate passage,
  547. apparently recently constructed. "
  548. 1
  549. <COND (,ON-POLE!-FLAG
  550. " Amid the desolation, you spot what
  551. appears to be your head, at the end of a long pole.") ("")>>)>>
  552. <DEFINE GHOST-FUNCTION ("AUX" (PV ,PRSVEC) (G <FIND-OBJ "GHOST">))
  553. #DECL ((PV) VECTOR (G) OBJECT)
  554. <COND (<==? <3 .PV> .G>
  555. <TELL "How can you attack a spirit with material objects?">
  556. <>)
  557. (<==? <2 .PV> .G>
  558. <TELL "You seem unable to affect these spirits.">)>>
  559. <DEFINE MAZE-11 ("AUX" (PRSACT <1 ,PRSVEC>))
  560. #DECL ((PRSACT) VERB)
  561. <COND (<==? .PRSACT ,LOOK!-WORDS>
  562. <TELL
  563. "You are in a small room near the maze. There are twisty passages
  564. in the immediate vicinity.">
  565. <COND (<OOPEN? <FIND-OBJ "GRATE">>
  566. <TELL
  567. "Above you is an open grating with sunlight pouring in.">)
  568. (,GRUNLOCK!-FLAG
  569. <TELL "Above you is a grating.">)
  570. (<TELL
  571. "Above you is a grating locked with a skull-and-crossbones lock.">)>)>>
  572. <DEFINE GRATE-FUNCTION ("AUX" (HERE ,HERE) (CLEAR <FIND-ROOM "CLEAR">)
  573. (PRSACT <1 ,PRSVEC>))
  574. #DECL ((PRSACT) VERB (HERE CLEAR) ROOM)
  575. <COND (<AND <==? .HERE .CLEAR>
  576. <0? <RVARS .CLEAR>>>
  577. <TELL "I can't see any grating here.">)
  578. (<COND
  579. (,GRUNLOCK!-FLAG
  580. <OPEN-CLOSE .PRSACT
  581. <FIND-OBJ "GRATE">
  582. <COND (<==? .HERE .CLEAR>
  583. "The grating opens.")
  584. ("The grating opens to reveal trees above you.")>
  585. "The grating is closed.">)
  586. (<TELL "The grating is locked.">)>)>>
  587. <DEFINE TREASURE-ROOM ("AUX" (PV ,PRSVEC) (HACK ,ROBBER-DEMON)
  588. HH CHALI
  589. (HOBJ <HOBJ .HACK>) (FLG <>) TL (HERE ,HERE) (ROOMS ,ROOMS))
  590. #DECL ((HACK) HACK (PV) <VECTOR VERB> (HH) <LIST [REST OBJECT]>
  591. (HOBJ) OBJECT (FLG) <OR ATOM FALSE> (TL ROOMS) <LIST [REST ROOM]>
  592. (HERE) ROOM)
  593. <COND (<AND <HACTION .HACK>
  594. <==? <VNAME <1 .PV>> WALK-IN!-WORDS>>
  595. <COND (<SET FLG <N==? <OROOM .HOBJ> .HERE>>
  596. <TELL
  597. "You hear a scream of anguish as you violate the robber's hideaway.
  598. Using passages unknown to you, he rushes to its defense.">
  599. <COND (<OROOM .HOBJ>
  600. <REMOVE-OBJECT .HOBJ>)>
  601. <TRO .HOBJ ,FIGHTBIT>
  602. <PUT .HACK ,HROOM .HERE>
  603. <PUT .HACK ,HROOMS <COND (<EMPTY? <SET TL <REST <MEMQ .HERE .ROOMS>>>>
  604. .ROOMS)
  605. (.TL)>>
  606. <INSERT-OBJECT .HOBJ .HERE>)
  607. (T
  608. <TRO .HOBJ ,FIGHTBIT>)>
  609. <AND <NOT <OCAN <SET CHALI <FIND-OBJ "CHALI">>>>
  610. <==? <OROOM .CHALI> .HERE>
  611. <TRZ .CHALI ,TAKEBIT>>
  612. <COND (<NOT <LENGTH? <ROBJS .HERE> 2>>
  613. <TELL
  614. "The thief gestures mysteriously, and the treasures in the room
  615. suddenly vanish.">)>
  616. <MAPF <>
  617. <FUNCTION (X) #DECL ((X) OBJECT)
  618. <COND (<AND <N==? .X .CHALI>
  619. <N==? .X .HOBJ>>
  620. <TRZ .X ,OVISON>)>>
  621. <ROBJS .HERE>>)>>
  622. <DEFINE TREAS ("AUX" (PRSA <1 ,PRSVEC>) (HERE ,HERE))
  623. #DECL ((PRSA) VERB (HERE) ROOM)
  624. <COND (<AND <==? .PRSA ,TREAS!-WORDS>
  625. <==? .HERE <FIND-ROOM "TEMP1">>>
  626. <GOTO <FIND-ROOM "TREAS">>
  627. <ROOM-DESC>)
  628. (<AND <==? .PRSA ,TEMPL!-WORDS>
  629. <==? .HERE <FIND-ROOM "TREAS">>>
  630. <GOTO <FIND-ROOM "TEMP1">>
  631. <ROOM-DESC>)
  632. (T <TELL "Nothing happens.">)>>
  633. <DEFINE PRAYER ()
  634. <COND (<AND <==? ,HERE <FIND-ROOM "TEMP2">>
  635. <GOTO <FIND-ROOM "FORE1">>>
  636. <ROOM-DESC>)
  637. (<TELL
  638. "If you pray enough, your prayers may be answered.">)>>
  639. <SETG GATE-FLAG!-FLAG <>>
  640. <DEFINE DAM-ROOM ("AUX" (PRSACT <1 ,PRSVEC>))
  641. #DECL ((PRSACT) VERB)
  642. <COND
  643. (<==? .PRSACT ,LOOK!-WORDS>
  644. <TELL
  645. "You are standing on the top of the Flood Control Dam #3, which was
  646. quite a tourist attraction in times far distant. There are paths to
  647. the north, south, east, and down.">
  648. <COND (,LOW-TIDE!-FLAG
  649. <TELL
  650. "It appears that the dam has been opened since the water level behind
  651. it is low and the sluice gate has been opened. Water is rushing
  652. downstream through the gates." 1>)
  653. (<TELL
  654. "The sluice gates on the dam are closed. Behind the dam, there can be
  655. seen a wide lake. A small stream is formed by the runoff from the
  656. lake." 1>)>
  657. <TELL
  658. "There is a control panel here. There is a large metal bolt on the
  659. panel. Above the bolt is a small green plastic bubble." 1>
  660. <COND (,GATE-FLAG!-FLAG <TELL "The green bubble is glowing." 1>)>)>>
  661. <DEFINE BOLT-FUNCTION ("AUX" (PRSACT <1 ,PRSVEC>) (PRSI <3 ,PRSVEC>)
  662. (RESER <FIND-ROOM "RESER">) (TRUNK <FIND-OBJ "TRUNK">))
  663. #DECL ((PRSACT) VERB (TRUNK) OBJECT (PRSI) OBJECT (RESER) ROOM)
  664. <COND (<==? .PRSACT ,TURN!-WORDS>
  665. <COND (<==? .PRSI <FIND-OBJ "WRENC">>
  666. <COND (,GATE-FLAG!-FLAG
  667. <COND (,LOW-TIDE!-FLAG
  668. <SETG LOW-TIDE!-FLAG <>>
  669. <TELL
  670. "The sluice gates close and water starts to collect behind the dam.">
  671. <RTRO .RESER ,RWATERBIT>
  672. <RTRZ .RESER ,RLANDBIT>
  673. <AND <MEMQ .TRUNK <ROBJS .RESER>>
  674. <TRZ .TRUNK ,OVISON>>
  675. T)
  676. (<SETG LOW-TIDE!-FLAG T>
  677. <TELL
  678. "The sluice gates open and water pours through the dam.">
  679. <TRZ <FIND-OBJ "COFFI"> ,SACREDBIT>
  680. <RTRO .RESER ,RLANDBIT>
  681. <RTRZ .RESER ,RWATERBIT>
  682. <TRO .TRUNK ,OVISON>)>)
  683. (<TELL
  684. "The bolt won't turn with your best effort.">)>)
  685. (<TELL
  686. "The bolt won't turn using the " 1 <ODESC2 .PRSI> ".">)>)>>
  687. <PSETG DROWNINGS
  688. '["up to your ankles."
  689. "up to your shin."
  690. "up to your knees."
  691. "up to your hips."
  692. "up to your waist."
  693. "up to your chest."
  694. "up to your neck."
  695. "over your head."
  696. "high in your lungs."]>
  697. <GDECL (DROWNINGS) <VECTOR [REST STRING]>>
  698. <DEFINE DBUTTONS ("AUX" (PV ,PRSVEC) (PRSACT <1 .PV>) (PRSO <2 .PV>) HACK)
  699. #DECL ((PRSACT) VERB (PRSO) OBJECT (PV) VECTOR (HACK) FIX)
  700. <COND (<==? .PRSACT ,PUSH!-WORDS>
  701. <COND (<==? .PRSO <FIND-OBJ "BLBUT">>
  702. <COND (<0? <SET HACK <RVARS ,HERE>>>
  703. <TELL
  704. "There is a rumbling sound and a stream of water appears to burst
  705. from the east wall of the room (apparently, a leak has occurred in a
  706. pipe.)">
  707. <PUT ,HERE ,RVARS 1>
  708. <CLOCK-INT ,MNTIN -1>
  709. T)
  710. (<TELL "The blue button appears to be jammed.">)>)
  711. (<==? .PRSO <FIND-OBJ "RBUTT">>
  712. <RTRC ,HERE ,RLIGHTBIT>
  713. <COND (<RLIGHT? ,HERE>
  714. <TELL "The lights within the room come on.">)
  715. (<TELL "The lights within the room shut off.">)>)
  716. (<==? .PRSO <FIND-OBJ "BRBUT">>
  717. <SETG GATE-FLAG!-FLAG <>>
  718. <TELL "Click.">)
  719. (<==? .PRSO <FIND-OBJ "YBUTT">>
  720. <SETG GATE-FLAG!-FLAG T>
  721. <TELL "Click.">)>)>>
  722. <DEFINE MAINT-ROOM ("AUX" (PV ,PRSVEC) (PRSACT <1 .PV>) (PRSO <2 .PV>)
  723. (PRSI <3 .PV>) (MNT <FIND-ROOM "MAINT">)
  724. (HERE? <==? ,HERE .MNT>) HACK)
  725. #DECL ((PRSACT) VERB (PRSI) <OR FALSE OBJECT> (HERE?) <OR ATOM FALSE>
  726. (MNT) ROOM (PRSO) <OR OBJECT FALSE> (HACK) FIX)
  727. <COND (<==? .PRSACT ,C-INT!-WORDS>
  728. <PUT .MNT ,RVARS <+ 1 <SET HACK <RVARS .MNT>>>>
  729. <COND (<AND .HERE?
  730. <TELL "The water level here is now "
  731. 1
  732. <NTH ,DROWNINGS <+ 1 </ <SET HACK <RVARS .MNT>>
  733. 2>>>>>)>
  734. <COND (<G=? <SET HACK <RVARS .MNT>> 16>
  735. <MUNG-ROOM .MNT
  736. "The room is full of water and cannot be entered.">
  737. <CLOCK-INT ,MNTIN 0>
  738. <AND .HERE?
  739. <JIGS-UP "I'm afraid you have done drowned yourself."
  740. >>)>)>>
  741. <DEFINE LEAK-FUNCTION ("AUX" HACK
  742. (PRSVEC ,PRSVEC) (PRSA <1 .PRSVEC>) (PRSI <3 .PRSVEC>))
  743. #DECL ((PRSVEC) <VECTOR [3 ANY]> (PRSA) VERB (PRSI) <OR OBJECT FALSE>
  744. (HACK) FIX)
  745. <COND (<==? <2 .PRSVEC> <FIND-OBJ "LEAK">>
  746. <COND (<AND <==? <VNAME .PRSA> PLUG!-WORDS>
  747. <G? <SET HACK <RVARS ,HERE>> 0>>
  748. <COND (<==? .PRSI <FIND-OBJ "PUTTY">>
  749. <PUT ,HERE ,RVARS -1>
  750. <CLOCK-INT ,MNTIN 0>
  751. <TELL
  752. "By some miracle of elven technology, you have managed to stop the
  753. leak in the dam.">)
  754. (<WITH-TELL .PRSI>)>)>)>>
  755. <DEFINE TUBE-FUNCTION ("AUX" (PRSVEC ,PRSVEC))
  756. #DECL ((PRSVEC) <VECTOR [3 ANY]>)
  757. <COND (<AND <==? <1 .PRSVEC> ,PUT!-WORDS>
  758. <==? <3 .PRSVEC> <FIND-OBJ "TUBE">>>
  759. <TELL "The tube refuses to accept anything.">)>>
  760. <DEFINE WITH-TELL (OBJ)
  761. #DECL ((OBJ) OBJECT)
  762. <TELL "With a " 1 <ODESC2 .OBJ> "?">>
  763. <DEFINE CAVE2-ROOM ("AUX" FOO BAR (PRSACT <1 ,PRSVEC>) C)
  764. #DECL ((FOO) <VECTOR FIX CEVENT> (BAR) CEVENT (PRSACT) VERB (C) OBJECT)
  765. <COND (<==? .PRSACT ,WALK-IN!-WORDS>
  766. <AND <MEMQ <SET C <FIND-OBJ "CANDL">> <AOBJS ,WINNER>>
  767. <PROB 50>
  768. <TRNN .C ,ONBIT>
  769. <CLOCK-DISABLE <SET BAR <2 <SET FOO <ORAND .C>>>>>
  770. <TRZ .C ,ONBIT>
  771. <TELL
  772. "The cave is very windy at the moment and your candles have blown out.">>)>>
  773. <DEFINE BOTTLE-FUNCTION ("AUX" (PRSACT <1 ,PRSVEC>) (WIN ,WINNER) (HERE ,HERE))
  774. #DECL ((PRSACT) VERB (WIN) ADV (HERE) ROOM)
  775. <COND (<==? <1 .PRSACT> THROW!-WORDS>
  776. <TELL "The bottle hits the far wall and is decimated.">
  777. <REMOVE-OBJECT <2 ,PRSVEC>>)
  778. (<==? <1 .PRSACT> MUNG!-WORDS>
  779. <COND (<MEMQ <2 ,PRSVEC> <AOBJS .WIN>>
  780. <PUT .WIN ,AOBJS <SPLICE-OUT <2 ,PRSVEC> <AOBJS .WIN>>>
  781. <TELL "You have destroyed the bottle. Well done.">)
  782. (<MEMQ <2 ,PRSVEC> <ROBJS .HERE>>
  783. <PUT .HERE ,ROBJS <SPLICE-OUT <2 ,PRSVEC> <ROBJS .HERE>>>
  784. <TELL "A brilliant maneuver destroys the bottle.">)>)>>
  785. <DEFINE FILL ("AUX" (REM <>) (PRSVEC ,PRSVEC) (W <FIND-OBJ "WATER">))
  786. #DECL ((REM) <OR ATOM FALSE> (PRSVEC) <VECTOR VERB OBJECT ANY> (W) OBJECT)
  787. <COND (<OBJECT-ACTION>)
  788. (<AND <3 .PRSVEC> <N==? <3 .PRSVEC> .W>>
  789. <TELL "Due to an implementation restriction, " 0 <ODESC2 <2 .PRSVEC>>
  790. " can't be put in the ">
  791. <TELL <ODESC2 <3 .PRSVEC>>>)
  792. (<OR <RTRNN ,HERE ,RFILLBIT>
  793. <SET REM <OR <==? <OCAN .W> <AVEHICLE ,WINNER>>
  794. <==? <OROOM .W> ,HERE>>>>
  795. <PUT .PRSVEC 1 ,TAKE!-WORDS>
  796. <PUT .PRSVEC 3 <2 .PRSVEC>>
  797. <PUT .PRSVEC 2 .W>
  798. <WATER-FUNCTION .REM>)
  799. (<TELL "I can't find any water here.">)>>
  800. <DEFINE WATER-FUNCTION ("OPTIONAL" (REM T)
  801. "AUX" (PRSVEC ,PRSVEC) (PRSACT <1 .PRSVEC>) (ME ,WINNER)
  802. (B <FIND-OBJ "BOTTL">) (W <2 .PRSVEC>)
  803. (AV <AVEHICLE .ME>) (CAN <3 .PRSVEC>))
  804. #DECL ((PRSACT) VERB (ME) ADV (B W) OBJECT (REM) <OR ATOM FALSE>
  805. (PRSVEC) <VECTOR [3 ANY]> (AV) <OR OBJECT FALSE> (CAN) <OR FALSE OBJECT>)
  806. <COND (<OR <==? .PRSACT ,TAKE!-WORDS>
  807. <==? .PRSACT ,PUT!-WORDS>>
  808. <COND (<AND .AV <==? .AV .CAN>>
  809. <TELL "There is now a puddle in the bottom of the "
  810. 1
  811. <ODESC2 .AV>
  812. ".">
  813. <COND (<MEMQ .W <AOBJS .ME>>
  814. <DROP-OBJECT .W .ME>)>
  815. <COND (<MEMQ .W <OCONTENTS .AV>>)
  816. (<PUT .AV ,OCONTENTS (.W !<OCONTENTS .AV>)>
  817. <PUT .W ,OCAN .AV>)>)
  818. (<AND .CAN <N==? .CAN .B>>
  819. <TELL "The water leaks out of the " 1 <ODESC2 .CAN>
  820. " and evaporates immediately.">
  821. <COND (<MEMQ .W <AOBJS .ME>>
  822. <DROP-OBJECT .W .ME>)
  823. (<REMOVE-OBJECT .W>)>)
  824. (<MEMQ .B <AOBJS .ME>>
  825. <COND (<NOT <EMPTY? <OCONTENTS .B>>>
  826. <TELL "The bottle is already full.">)
  827. (<NOT <OOPEN? .B>>
  828. <TELL "The bottle is closed.">)
  829. (T
  830. <AND .REM <REMOVE-OBJECT .W>>
  831. <PUT .B ,OCONTENTS (.W)>
  832. <PUT .W ,OCAN .B>
  833. <TELL "The bottle is now full of water.">)>)
  834. (<AND <==? <OCAN .W> .B>
  835. <==? .PRSACT ,TAKE!-WORDS>
  836. <NOT .CAN>>
  837. <PUT .PRSVEC 2 .B>
  838. <TAKE T>
  839. <PUT .PRSVEC 2 .W>)
  840. (<TELL "The water slips through your fingers.">)>)
  841. (<OR <==? .PRSACT ,DROP!-WORDS>
  842. <==? .PRSACT ,POUR!-WORDS>
  843. <==? .PRSACT ,GIVE!-WORDS>>
  844. <COND (<MEMQ .W <AOBJS .ME>>
  845. <DROP-OBJECT .W .ME>)>
  846. <COND (.AV
  847. <TELL "There is now a puddle in the bottom of the "
  848. 1
  849. <ODESC2 .AV>
  850. ".">)
  851. (<TELL "The water spills to the floor and evaporates immediately.">
  852. <REMOVE-OBJECT .W>)>)
  853. (<==? .PRSACT ,THROW!-WORDS>
  854. <TELL "The water splashes on the walls, and evaporates immediately.">
  855. <REMOVE-OBJECT .W>)>>
  856. <DEFINE ROPE-FUNCTION ("AUX" (PRSACT <1 ,PRSVEC>) (DROOM <FIND-ROOM "DOME">)
  857. (ROPE <FIND-OBJ "ROPE">) (WIN ,WINNER))
  858. #DECL ((PRSACT) VERB (ROPE) OBJECT (WIN) ADV (DROOM) ROOM)
  859. <COND (<N==? ,HERE .DROOM>
  860. <SETG DOME-FLAG!-FLAG <>>
  861. <COND (<==? .PRSACT ,TIE!-WORDS>
  862. <TELL "There is nothing it can be tied to.">)
  863. (<==? .PRSACT ,UNTIE!-WORDS>
  864. <TELL "It is not tied to anything.">)>)
  865. (<AND <==? .PRSACT ,TIE!-WORDS>
  866. <==? <3 ,PRSVEC> <FIND-OBJ "RAILI">>>
  867. <COND (,DOME-FLAG!-FLAG
  868. <TELL "The rope is already attached.">)
  869. (<TELL
  870. "The rope drops over the side and comes within ten feet of the floor.">
  871. <SETG DOME-FLAG!-FLAG T>
  872. <TRO .ROPE ,NDESCBIT>
  873. <COND (<NOT <OROOM .ROPE>>
  874. <PUT .WIN ,AOBJS <SPLICE-OUT .ROPE <AOBJS .WIN>>>
  875. <INSERT-OBJECT .ROPE .DROOM>)>)>)
  876. (<==? .PRSACT ,UNTIE!-WORDS>
  877. <COND (,DOME-FLAG!-FLAG
  878. <SETG DOME-FLAG!-FLAG <>>
  879. <TRZ .ROPE ,NDESCBIT>
  880. <TELL
  881. "Although you tied it incorrectly, the rope becomes free.">)
  882. (<TELL "It is not tied to anything.">)>)
  883. (<AND <==? .PRSACT ,DROP!-WORDS>
  884. <NOT ,DOME-FLAG!-FLAG>>
  885. <REMOVE-OBJECT .ROPE>
  886. <INSERT-OBJECT .ROPE <FIND-ROOM "TORCH">>
  887. <TELL "The rope drops gently to the floor below.">)
  888. (<AND <==? .PRSACT ,TAKE!-WORDS>
  889. ,DOME-FLAG!-FLAG
  890. <TELL "The rope is tied to the railing.">>)>>
  891. <DEFINE CYCLOPS ("AUX" (PRSACT <1 ,PRSVEC>) (PRSOB1 <2 ,PRSVEC>) (RM ,HERE)
  892. (FOOD <FIND-OBJ "FOOD">) (DRINK <FIND-OBJ "WATER">)
  893. (COUNT <RVARS .RM>) (GARLIC <FIND-OBJ "GARLI">) CYC)
  894. #DECL ((PRSACT) VERB (PRSOB1) <OR OBJECT FALSE> (RM) ROOM (FOOD DRINK) OBJECT
  895. (CYC GARLIC) OBJECT (COUNT) FIX)
  896. <COND (,CYCLOPS-FLAG!-FLAG
  897. <COND (<OR <==? .PRSACT ,AWAKE!-WORDS>
  898. <==? .PRSACT ,MUNG!-WORDS>
  899. <==? .PRSACT ,BURN!-WORDS>
  900. <==? .PRSACT ,FIGHT!-WORDS>>
  901. <TELL
  902. "The cyclops yawns and stares at the thing that woke him up.">
  903. <SETG CYCLOPS-FLAG!-FLAG <>>
  904. <TRZ <SET CYC <FIND-OBJ "CYCLO">> ,SLEEPBIT>
  905. <TRO .CYC ,FIGHTBIT>
  906. <PUT .RM ,RVARS <ABS <RVARS .RM>>>
  907. T)>)
  908. (<G? <ABS .COUNT> 5>
  909. <JIGS-UP
  910. "The cyclops, tired of all of your games and trickery, eats you.
  911. The cyclops says 'Mmm. Just like mom used to make 'em.'">)
  912. (<==? .PRSACT ,GIVE!-WORDS>
  913. <COND (<==? .PRSOB1 .FOOD>
  914. <COND (<G=? .COUNT 0>
  915. <REMOVE-OBJECT .FOOD>
  916. <TELL
  917. "The cyclops says 'Mmm Mmm. I love hot peppers! But oh, could I use
  918. a drink. Perhaps I could drink the blood of that thing'. From the
  919. gleam in his eye, it could be surmised that you are 'that thing'.">
  920. <PUT .RM ,RVARS <MIN -1 <- .COUNT>>>)>)
  921. (<==? .PRSOB1 .DRINK>
  922. <COND (<L? .COUNT 0>
  923. <REMOVE-OBJECT .DRINK>
  924. <TRO <SET CYC <FIND-OBJ "CYCLO">> ,SLEEPBIT>
  925. <TRZ .CYC ,FIGHTBIT>
  926. <TELL
  927. "The cyclops looks tired and quickly falls fast asleep (what did you
  928. put in that drink, anyway?).">
  929. <SETG CYCLOPS-FLAG!-FLAG T>)
  930. (<TELL
  931. "The cyclops apparently was not thirsty at the time and refuses your
  932. generous gesture.">
  933. <>)>)
  934. (<==? .PRSOB1 .GARLIC>
  935. <TELL "The cyclops may be hungry, but there is a limit.">
  936. <PUT .RM ,RVARS <AOS-SOS .COUNT>>)
  937. (<TELL "The cyclops is not so stupid as to eat THAT!">
  938. <PUT .RM ,RVARS <AOS-SOS .COUNT>>)>)
  939. (<OR <==? .PRSACT ,FIRST?!-WORDS>
  940. <==? .PRSACT ,FIGHT!-WORDS>> <>)
  941. (<AND <PUT .RM ,RVARS <AOS-SOS .COUNT>> <>>)
  942. (<OR <==? .PRSACT ,THROW!-WORDS>
  943. <==? .PRSACT ,MUNG!-WORDS>>
  944. <COND (<PROB 50>
  945. <TELL
  946. "Your actions don't appear to be doing much harm to the cyclops, but
  947. they do not exactly lower your insurance premiums, either.">)
  948. (<TELL
  949. "The cyclops ignores all injury to his body with a shrug.">)>)
  950. (<==? .PRSACT ,TAKE!-WORDS>
  951. <TELL
  952. "The cyclops is rather heavy and doesn't take kindly to being grabbed.">)
  953. (<==? .PRSACT ,TIE!-WORDS>
  954. <TELL
  955. "You cannot tie the cyclops, although he is fit to be tied.">)>>
  956. <DEFINE CYCLOPS-ROOM ("AUX" (PV ,PRSVEC) (RM ,HERE) (VARS <RVARS .RM>))
  957. #DECL ((PV) VECTOR (RM) ROOM (VARS) FIX)
  958. <COND (<==? <1 .PV> ,LOOK!-WORDS>
  959. <TELL
  960. "You are in a room with an exit on the west side, and a staircase
  961. leading up.">
  962. <COND (<AND ,CYCLOPS-FLAG!-FLAG <NOT ,MAGIC-FLAG!-FLAG>>
  963. <TELL
  964. "The cyclops, perhaps affected by a drug in your drink, is sleeping
  965. blissfully at the foot of the stairs.">)
  966. (,MAGIC-FLAG!-FLAG
  967. <TELL
  968. "On the north of the room is a wall which used to be solid, but which
  969. now has a cyclops-sized hole in it.">)
  970. (<0? .VARS>
  971. <TELL
  972. "A cyclops, who looks prepared to eat horses (much less mere
  973. adventurers), blocks the staircase. From his state of health, and
  974. the bloodstains on the walls, you gather that he is not very
  975. friendly, though he likes people." 1>)
  976. (<G? .VARS 0>
  977. <TELL
  978. "The cyclops is standing in the corner, eyeing you closely. I don't
  979. think he likes you very much. He looks extremely hungry even for a
  980. cyclops.">)
  981. (<L? .VARS 0>
  982. <TELL
  983. "The cyclops, having eaten the hot peppers, appears to be gasping.
  984. His enflamed tongue protrudes from his man-sized mouth.">)>
  985. <COND (,CYCLOPS-FLAG!-FLAG)
  986. (<OR <0? .VARS> <TELL <NTH ,CYCLOMAD <ABS .VARS>>>>)>)>>
  987. <PSETG CYCLOMAD
  988. '["The cyclops seems somewhat agitated."
  989. "The cyclops appears to be getting more agitated."
  990. "The cyclops is moving about the room, looking for something."
  991. "The cyclops was looking for salt and pepper. I think he is gathering
  992. condiments for his upcoming snack."
  993. "The cyclops is moving toward you in an unfriendly manner."
  994. "You have two choices: 1. Leave 2. Become dinner."]>
  995. <GDECL (CYCLOMAD) <VECTOR [REST STRING]>>
  996. <DEFINE AOS-SOS (FOO)
  997. #DECL ((FOO) FIX)
  998. <COND (<L? .FOO 0> <SET FOO <- .FOO 1>>)
  999. (<SET FOO <+ .FOO 1>>)>
  1000. <COND (,CYCLOPS-FLAG!-FLAG)
  1001. (<TELL <NTH ,CYCLOMAD <ABS .FOO>>>)>
  1002. .FOO>
  1003. <SETG ECHO-FLAG!-FLAG <>>
  1004. <DEFINE ECHO-ROOM ("AUX" (READER-STRING ,READER-STRING)
  1005. (B ,INBUF) L (RM <FIND-ROOM "ECHO">) (OUTCHAN ,OUTCHAN)
  1006. VERB (WALK ,WALK!-WORDS))
  1007. #DECL ((OUTCHAN) CHANNEL (WALK VERB) VERB
  1008. (READER-STRING) STRING (PRSACT) VERB (B) STRING (L) FIX (RM) ROOM)
  1009. <COND (,ECHO-FLAG!-FLAG)
  1010. (<UNWIND
  1011. <PROG ()
  1012. <REPEAT ((PRSVEC ,PRSVEC) RANDOM-ACTION)
  1013. #DECL ((PRSVEC) VECTOR)
  1014. <SET L
  1015. <READSTRING .B
  1016. ,INCHAN
  1017. .READER-STRING>>
  1018. <READCHR ,INCHAN>
  1019. <OR ,ALT-FLAG <READCHR ,INCHAN>>
  1020. <SETG MOVES <+ ,MOVES 1>>
  1021. <COND (<AND <EPARSE <LEX .B <REST .B .L> T> T>
  1022. <==? <SET VERB <1 .PRSVEC>> .WALK>
  1023. <2 .PRSVEC>
  1024. <MEMQ <CHTYPE <2 .PRSVEC> ATOM>
  1025. <REXITS .RM>>>
  1026. <SET RANDOM-ACTION <VFCN .VERB>>
  1027. <APPLY-RANDOM .RANDOM-ACTION>
  1028. <RETURN T>)
  1029. (<PRINTSTRING .B .OUTCHAN .L>
  1030. <SETG TELL-FLAG T>
  1031. <CRLF>
  1032. <COND (<==? <MEMBER "ECHO" <UPPERCASE .B>> .B>
  1033. <TELL "The acoustics of the room change subtly.">
  1034. <TRZ <FIND-OBJ "BAR"> ,SACREDBIT>
  1035. <SETG ECHO-FLAG!-FLAG T>
  1036. <RETURN T>)>)>>>
  1037. <PROG ()
  1038. <GOTO <FIND-ROOM "CHAS3">>
  1039. <SETG MOVES <+ ,MOVES 1>>>>)>>
  1040. <DEFINE LEAPER ("AUX" (OBJ <2 ,PRSVEC>) (RM ,HERE) (EXITS <REXITS .RM>) M)
  1041. #DECL ((RM) ROOM (EXITS) EXIT (M) <OR <PRIMTYPE VECTOR> FALSE>
  1042. (OBJ) <OR FALSE OBJECT>)
  1043. <COND (.OBJ
  1044. <COND (<MEMQ .OBJ <ROBJS .RM>>
  1045. <COND (<TRNN .OBJ ,VILLAINBIT>
  1046. <TELL "The " 1 <ODESC2 .OBJ> " is too big to jump over.">)
  1047. (<TELL <PICK-ONE ,WHEEEEE>>)>)
  1048. (<TELL "That would be a good trick.">)>)
  1049. (<SET M <MEMQ DOWN!-WORDS .EXITS>>
  1050. <COND (<OR <TYPE? <2 .M> NEXIT>
  1051. <AND <TYPE? <2 .M> CEXIT>
  1052. <NOT <CXFLAG <2 .M>>>>>
  1053. <JIGS-UP <PICK-ONE ,JUMPLOSS>>)>)
  1054. (<TELL <PICK-ONE ,WHEEEEE>>)>>
  1055. <DEFINE SKIPPER ()
  1056. <TELL <PICK-ONE ,WHEEEEE>>>
  1057. <SETG HS 0>
  1058. <GDECL (HS) FIX>
  1059. <DEFINE HELLO ("AUX" (PRSOBJ <2 ,PRSVEC>) (AMT <SETG HS <+ ,HS 1>>))
  1060. #DECL ((PRSOBJ) <OR OBJECT FALSE> (AMT) FIX)
  1061. <COND (.PRSOBJ
  1062. <COND (<==? .PRSOBJ <FIND-OBJ "SAILO">>
  1063. <COND (<0? <MOD .AMT 20>>
  1064. <TELL
  1065. "You seem to be repeating yourself.">)
  1066. (<0? <MOD .AMT 10>>
  1067. <TELL
  1068. "I think that phrase is getting a bit worn out.">)
  1069. (<TELL
  1070. "Nothing happens here.">)>)
  1071. (<==? .PRSOBJ <FIND-OBJ "AVIAT">>
  1072. <TELL "Here, nothing happens.">)
  1073. (<TRNN .PRSOBJ ,VILLAINBIT>
  1074. <TELL "The " 1 <ODESC2 .PRSOBJ> " bows his head to you in greeting.">)
  1075. (<TELL
  1076. "I think that only schizophrenics say 'Hello' to a " 1 <ODESC2 .PRSOBJ> ".">)>)
  1077. (<TELL <PICK-ONE ,HELLOS>>)>>
  1078. <PSETG HELLOS
  1079. '["Hello."
  1080. "Good day."
  1081. "Nice weather we've been having lately"
  1082. "Goodbye."]>
  1083. <PSETG WHEEEEE
  1084. '["Very good. Now you can go to the second grade."
  1085. "Have you tried hopping around the dungeon, too?"
  1086. "Are you enjoying yourself?"
  1087. "Wheeeeeeeeee!!!!!"
  1088. "Do you expect me to applaud?"]>
  1089. <PSETG JUMPLOSS
  1090. '["You should have looked before you leaped."
  1091. "I'm afraid that leap was a bit much for your weak frame."
  1092. "In the movies, your life would be passing in front of your eyes."
  1093. "Geronimo....."]>
  1094. <GDECL (HELLOS WHEEEEE JUMPLOSS) <VECTOR [REST STRING]>>
  1095. <DEFINE READER ("AUX" (PV ,PRSVEC) (PO <2 .PV>) (PI <3 .PV>))
  1096. #DECL ((PV) VECTOR (PO) OBJECT (PI) <OR FALSE OBJECT>)
  1097. <COND (<NOT <LIT? ,HERE>>
  1098. <TELL "It is impossible to read in the dark.">)
  1099. (<AND .PI <NOT <TRANSPARENT? .PI>>>
  1100. <TELL "How does one look through a " 1 <ODESC2 .PI> "?">)
  1101. (<NOT <READABLE? .PO>>
  1102. <TELL "How can I read a " 1 <ODESC2 .PO> "?">)
  1103. (<OBJECT-ACTION>)
  1104. (<TELL <OREAD .PO>>)>>
  1105. <DEFINE WELL ()
  1106. <COND (,RIDDLE-FLAG!-FLAG <TELL "Well what?">)
  1107. (<==? ,HERE <FIND-ROOM "RIDDL">>
  1108. <SETG RIDDLE-FLAG!-FLAG T>
  1109. <TELL
  1110. "There is a clap of thunder and the east door opens.">)
  1111. (<TELL "Well what?">)>>
  1112. <DEFINE SINBAD ("AUX" (C <FIND-OBJ "CYCLO">))
  1113. <COND (<AND <==? ,HERE <FIND-ROOM "CYCLO">>
  1114. <MEMQ .C <ROBJS ,HERE>>>
  1115. <SETG CYCLOPS-FLAG!-FLAG T>
  1116. <TELL
  1117. "The cyclops, hearing the name of his deadly nemesis, flees the room
  1118. by knocking down the wall on the north of the room.">
  1119. <SETG MAGIC-FLAG!-FLAG T>
  1120. <TRZ .C ,FIGHTBIT>
  1121. <REMOVE-OBJECT .C>)
  1122. (<TELL
  1123. "Wasn't he a sailor?">)>>
  1124. <DEFINE GRANITE ()
  1125. <TELL "I think you are taking this thing for granite.">>
  1126. <PSETG DUMMY
  1127. '["Look around."
  1128. "You think it isn't?"
  1129. "I think you've already done that."]>
  1130. <GDECL (DUMMY) <VECTOR [REST STRING]>>
  1131. <DEFINE BRUSH ("AUX" (PRSO <2 ,PRSVEC>) (PRSI <3 ,PRSVEC>))
  1132. #DECL ((PRSO) OBJECT (PRSI) <OR OBJECT FALSE>)
  1133. <COND (<==? .PRSO <FIND-OBJ "TEETH">>
  1134. <COND (<AND <==? .PRSI <FIND-OBJ "PUTTY">>
  1135. <MEMQ .PRSI <AOBJS ,WINNER>>>
  1136. <JIGS-UP
  1137. "Well, you seem to have been brushing your teeth with some sort of
  1138. glue. As a result, your mouth gets glued together (with your nose)
  1139. and you die of respiratory failure.">)
  1140. (<NOT .PRSI>
  1141. <TELL
  1142. "Dental hygiene is highly recommended, but I'm not sure what you want
  1143. to brush them with.">)
  1144. (<TELL
  1145. "A nice idea, but with a " 1 <ODESC2 .PRSI> "?">)>)
  1146. (<TELL
  1147. "If you wish, but I can't understand why??">)>>
  1148. <DEFINE RING ("AUX" (PRSOBJ <2 ,PRSVEC>))
  1149. #DECL ((PRSOBJ) <OR OBJECT FALSE>)
  1150. <COND (<==? .PRSOBJ <FIND-OBJ "BELL">>
  1151. <TELL
  1152. "Ding, dong.">)
  1153. (<TELL
  1154. "How, exactly, can I ring that?">)>>
  1155. <DEFINE EAT ("AUX" (PRSVEC ,PRSVEC) (EAT? <>) (DRINK? <>) (PRSOBJ <2 .PRSVEC>)
  1156. NOBJ (AOBJS <AOBJS ,WINNER>))
  1157. #DECL ((PRSOBJ) OBJECT (NOBJ) <OR OBJECT FALSE> (PRSVEC) <VECTOR [3 ANY]>
  1158. (AOBJS) <LIST [REST OBJECT]> (EAT? DRINK?) <OR ATOM FALSE>)
  1159. <COND (<OBJECT-ACTION>)
  1160. (<AND <SET EAT? <EDIBLE? .PRSOBJ>> <MEMQ .PRSOBJ .AOBJS>>
  1161. <COND (<==? <1 .PRSVEC> ,DRINK!-WORDS>
  1162. <TELL "How can I drink that?">)
  1163. (<TELL
  1164. "Thank you very much. It really hit the spot.">
  1165. <PUT ,WINNER ,AOBJS <SPLICE-OUT .PRSOBJ .AOBJS>>)>)
  1166. (<AND <SET DRINK? <DRINKABLE? .PRSOBJ>>
  1167. <SET NOBJ <OCAN .PRSOBJ>>
  1168. <MEMQ .NOBJ .AOBJS>>
  1169. <COND (<OOPEN? .NOBJ>
  1170. <TELL
  1171. "Thank you very much. I was rather thirsty (from all this talking,
  1172. probably).">)
  1173. (T
  1174. <TELL
  1175. "I'd like to, but I can't get to it.">)>
  1176. <PUT .PRSOBJ ,OCAN <>>
  1177. <PUT .NOBJ ,OCONTENTS <SPLICE-OUT .PRSOBJ <OCONTENTS .NOBJ>>>)
  1178. (<NOT <OR .EAT? .DRINK?>>
  1179. <TELL
  1180. "I don't think that the " 1 <ODESC2 .PRSOBJ> " would agree with you.">)
  1181. (<TELL
  1182. "I think you should get that first.">)>>
  1183. <DEFINE JARGON ()
  1184. <TELL "Well, FOO, BAR, and BLETCH to you too!">>
  1185. <DEFINE CURSES ()
  1186. <TELL <PICK-ONE ,OFFENDED>>>
  1187. <PSETG OFFENDED
  1188. '["Such language in a high-class establishment like this!"
  1189. "You ought to be ashamed of yourself."
  1190. "Its not so bad. You could have been killed already."
  1191. "Tough shit, asshole."
  1192. "Oh, dear. Such language from a supposed winning adventurer!"]>
  1193. <GDECL (OFFENDED) <VECTOR [REST STRING]>>
  1194. "ROBBER"
  1195. <DEFINE ROBBER ROBBER (HACK
  1196. "AUX" (RM <HROOM .HACK>) ROBJ
  1197. (SEEN? <RSEEN? .RM>) (WIN ,WINNER) (WROOM ,HERE)
  1198. (HOBJ <HOBJ .HACK>) (STILL <FIND-OBJ "STILL">)
  1199. HERE? (HH <HOBJS .HACK>) (TREAS <FIND-ROOM "TREAS">))
  1200. #DECL ((HACK) HACK (RM WROOM) ROOM (ROBJ HH) <LIST [REST OBJECT]>
  1201. (SEEN?) <OR ATOM FALSE> (WIN) ADV (HOBJ) OBJECT (ROBBER) ACTIVATION
  1202. (HERE?) <OR ROOM FALSE> (STILL) OBJECT (TREAS) ROOM)
  1203. <PROG ((ONCE <>) OBJT)
  1204. #DECL ((ONCE) <OR ATOM FALSE> (OBJT) <LIST [REST OBJECT]>)
  1205. <COND (<SET HERE? <OROOM .HOBJ>>
  1206. <SET RM .HERE?>)>
  1207. <SET ROBJ <ROBJS .RM>>
  1208. <SET OBJT .HH>
  1209. <COND
  1210. (<AND <==? .RM .TREAS>
  1211. <N==? .RM .WROOM>>
  1212. <COND (.HERE?
  1213. <COND (<==? <OROOM .STILL> .TREAS>
  1214. <SNARF-OBJECT .HOBJ .STILL>)>
  1215. <REMOVE-OBJECT .HOBJ>
  1216. <SET HERE? <>>)>
  1217. <MAPF <>
  1218. <FUNCTION (X)
  1219. #DECL ((X) OBJECT)
  1220. <COND (<G? <OTVAL .X> 0>
  1221. <PUT .HACK ,HOBJS <SET HH <SPLICE-OUT .X .HH>>>
  1222. <INSERT-OBJECT .X .RM>)>>
  1223. .HH>)
  1224. (<==? .RM .WROOM> ;"Adventurer is in room: CHOMP, CHOMP"
  1225. <COND
  1226. (<==? .RM .TREAS>) ; "Don't move, Gertrude"
  1227. (<NOT <HFLAG .HACK>>
  1228. <COND (<AND <NOT .HERE?> <PROB 30>>
  1229. <COND (<==? <OCAN .STILL> .HOBJ>
  1230. <INSERT-OBJECT .HOBJ .RM>
  1231. <TELL
  1232. "Someone carrying a large bag is casually leaning against one of the
  1233. walls here. He does not speak, but it is clear from his aspect that
  1234. the bag will be taken only over his dead body.">
  1235. <PUT .HACK ,HFLAG T>
  1236. <RETURN T .ROBBER>)>)
  1237. (<AND .HERE?
  1238. <FIGHTING? .HOBJ>
  1239. <COND (<NOT <WINNING? .HOBJ .WIN>>
  1240. <TELL
  1241. "Your opponent, determining discretion to be the better part of
  1242. valor, decides to terminate this little contretemps. With a rueful
  1243. nod of his head, he steps backward into the gloom and disappears.">
  1244. <REMOVE-OBJECT .HOBJ>
  1245. <TRZ .HOBJ ,FIGHTING>
  1246. <SNARF-OBJECT .HOBJ .STILL>
  1247. <RETURN T .ROBBER>)
  1248. (<PROB 90>)>>)
  1249. (<AND .HERE? <PROB 30>>
  1250. <TELL
  1251. "The holder of the large bag just left, looking disgusted.
  1252. Fortunately, he took nothing.">
  1253. <REMOVE-OBJECT .HOBJ>
  1254. <SNARF-OBJECT .HOBJ .STILL>
  1255. <RETURN T .ROBBER>)
  1256. (<PROB 70> <RETURN T .ROBBER>)
  1257. (T
  1258. <COND (<MEMQ .STILL <HOBJS .HACK>>
  1259. <PUT .HACK ,HOBJS <SPLICE-OUT .STILL <HOBJS .HACK>>>
  1260. <PUT .HOBJ ,OCONTENTS (.STILL)>
  1261. <PUT .STILL ,OCAN .HOBJ>)>
  1262. <PUT .HACK ,HOBJS <SET HH <ROB-ROOM .RM .HH 100>>>
  1263. <PUT .HACK ,HOBJS <SET HH <ROB-ADV .WIN .HH>>>
  1264. <PUT .HACK ,HFLAG T>
  1265. <COND (<AND <N==? .OBJT .HH> <NOT .HERE?>>
  1266. <TELL
  1267. "A seedy-looking individual with a large bag just wandered through
  1268. the room. On the way through, he quietly abstracted all valuables
  1269. from the room and from your possession, mumbling something about
  1270. \"Doing unto others before..\"">)
  1271. (.HERE?
  1272. <SNARF-OBJECT .HOBJ .STILL>
  1273. <COND (<N==? .OBJT .HH>
  1274. <TELL
  1275. "The other occupant just left, still carrying his large bag. You may
  1276. not have noticed that he robbed you blind first.">)
  1277. (<TELL
  1278. "The other occupant (he of the large bag), finding nothing of value,
  1279. left disgusted.">)>
  1280. <REMOVE-OBJECT .HOBJ>
  1281. <SET HERE? <>>)
  1282. (T
  1283. <TELL
  1284. "A 'lean and hungry' gentleman just wandered through. Finding
  1285. nothing of value, he left disgruntled.">)>)>)
  1286. (T
  1287. <COND (.HERE? ;"Here, already announced."
  1288. <COND (<PROB 30>
  1289. <PUT .HACK ,HOBJS <SET HH <ROB-ROOM .RM .HH 100>>>
  1290. <PUT .HACK ,HOBJS <SET HH <ROB-ADV .WIN .HH>>>
  1291. <COND (<MEMQ <FIND-OBJ "ROPE"> .HH>
  1292. <SETG DOME-FLAG!-FLAG <>>)>
  1293. <COND (<==? .OBJT .HH>
  1294. <TELL
  1295. "The other occupant (he of the large bag), finding nothing of value,
  1296. left disgusted.">)
  1297. (T
  1298. <TELL
  1299. "The other occupant just left, still carrying his large bag. You may
  1300. not have noticed that he robbed you blind first.">)>
  1301. <REMOVE-OBJECT .HOBJ>
  1302. <SET HERE? <>>
  1303. <SNARF-OBJECT .HOBJ .STILL>)
  1304. (<RETURN T .ROBBER>)>)>)>)
  1305. (<AND <MEMQ .HOBJ <ROBJS .RM>> ;"Leave if victim left"
  1306. <SNARF-OBJECT .HOBJ .STILL>
  1307. <REMOVE-OBJECT .HOBJ>
  1308. <SET HERE? <>>>)
  1309. (<AND <==? <OROOM .STILL> .RM>
  1310. <SNARF-OBJECT .HOBJ .STILL>
  1311. <>>)
  1312. (.SEEN? ;"Hack the adventurer's belongings"
  1313. <PUT .HACK ,HOBJS <SET HH <ROB-ROOM .RM .HH 75>>>
  1314. <COND
  1315. (<AND <==? <RDESC2 .RM> ,MAZEDESC> <==? <RDESC2 .WROOM> ,MAZEDESC>>
  1316. <MAPF <>
  1317. <FUNCTION (X)
  1318. #DECL ((X) OBJECT)
  1319. <COND (<AND <CAN-TAKE? .X> <OVIS? .X> <PROB 40>>
  1320. <TELL
  1321. "You hear, off in the distance, someone saying \"My, I wonder what
  1322. this fine " 3 <ODESC2 .X> " is doing here.\"">
  1323. <TELL "" 1>
  1324. <COND (<PROB 60>
  1325. <REMOVE-OBJECT .X>
  1326. <TRO .X ,TOUCHBIT>
  1327. <PUT .HACK ,HOBJS <SET HH (.X !.HH)>>)>
  1328. <MAPLEAVE>)>>
  1329. <ROBJS .RM>>)
  1330. (<MAPF <>
  1331. <FUNCTION (X)
  1332. #DECL ((X) OBJECT)
  1333. <COND (<AND <0? <OTVAL .X>> <CAN-TAKE? .X> <OVIS? .X> <PROB 20>>
  1334. <REMOVE-OBJECT .X>
  1335. <TRO .X ,TOUCHBIT>
  1336. <PUT .HACK ,HOBJS <SET HH (.X !.HH)>>
  1337. <COND (<==? .RM .WROOM>
  1338. <TELL "You suddenly notice that the "
  1339. 1
  1340. <ODESC2 .X>
  1341. " vanished.">)>
  1342. <MAPLEAVE>)>>
  1343. <ROBJS .RM>>
  1344. <COND (<MEMQ <FIND-OBJ "ROPE"> .HH>
  1345. <SETG DOME-FLAG!-FLAG <>>)>)>)>
  1346. <COND (<SET ONCE <NOT .ONCE>> ;"Move to next room, and hack."
  1347. <PROG ((ROOMS <HROOMS .HACK>))
  1348. <SET RM <1 .ROOMS>>
  1349. <COND (<EMPTY? <SET ROOMS <REST .ROOMS>>>
  1350. <SET ROOMS ,ROOMS>)>
  1351. <COND (<OR <RTRNN .RM ,RSACREDBIT>
  1352. <NOT <RTRNN .RM ,RLANDBIT>>> ;"Can I work here?"
  1353. <AGAIN>)>
  1354. <PUT .HACK ,HROOM .RM>
  1355. <PUT .HACK ,HFLAG <>>
  1356. <PUT .HACK ,HROOMS .ROOMS>
  1357. <SET SEEN? <RSEEN? .RM>>>
  1358. <AGAIN>)>> ;"Drop worthless cruft, sometimes"
  1359. <OR <==? .RM .TREAS>
  1360. <MAPF <>
  1361. <FUNCTION (X)
  1362. #DECL ((X) OBJECT)
  1363. <COND (<AND <0? <OTVAL .X>> <PROB 30>>
  1364. <PUT .HACK ,HOBJS <SET HH <SPLICE-OUT .X .HH>>>
  1365. <INSERT-OBJECT .X .RM>
  1366. <AND <==? .RM .WROOM>
  1367. <TELL
  1368. "The robber, rummaging through his bag, dropped a few items he found
  1369. valueless." >>)>>
  1370. .HH>>>
  1371. <DEFINE SNARF-OBJECT (WHO WHAT)
  1372. #DECL ((WHO WHAT) OBJECT)
  1373. <COND (<AND <N==? <OCAN .WHAT> .WHO>
  1374. <OR <OROOM .WHAT>
  1375. <OCAN .WHAT>>>
  1376. <REMOVE-OBJECT .WHAT>
  1377. <PUT .WHAT ,OCAN .WHO>
  1378. <PUT .WHO ,OCONTENTS (.WHAT !<OCONTENTS .WHO>)>)
  1379. (.WHO)>>
  1380. <DEFINE ROBBER-FUNCTION ("AUX" (PRSACT <1 ,PRSVEC>)
  1381. (DEM <GET-DEMON "THIEF">) (PV ,PRSVEC)
  1382. (PRSOBJ <2 .PV>) (HERE ,HERE) (FLG <>)
  1383. BRICK FUSE ST F (T <HOBJ .DEM>) (CHALI <FIND-OBJ "CHALI">))
  1384. #DECL ((PV) VECTOR (DEM) HACK (PRSACT) VERB (PRSOBJ) <OR OBJECT FALSE>
  1385. (CHALI T HOBJ ST BRICK FUSE) OBJECT (F) <VECTOR ANY CEVENT> (HERE) ROOM
  1386. (FLG) <OR ATOM FALSE>)
  1387. <COND (<==? .PRSACT ,FIGHT!-WORDS>
  1388. <COND (<==? <OCAN <SET ST <FIND-OBJ "STILL">>> .T> <>)
  1389. (<==? <OROOM .ST> .HERE>
  1390. <SNARF-OBJECT .T .ST>
  1391. <TELL
  1392. "The robber, somewhat surprised at this turn of events, nimbly
  1393. retrieves his stilletto.">
  1394. T)
  1395. (ELSE
  1396. <TELL
  1397. "Annoyed to be left unarmed in such an obviously dangerous
  1398. neighborhood, the thief slips off into the shadows.">
  1399. <TRO .CHALI ,TAKEBIT>
  1400. <REMOVE-OBJECT .T>)>)
  1401. (<==? .PRSACT ,DEAD\!!-WORDS>
  1402. <COND (<NOT <EMPTY? <HOBJS .DEM>>>
  1403. <TELL " His booty remains.">
  1404. <MAPF <> <FUNCTION (X) #DECL ((X) OBJECT)
  1405. <INSERT-OBJECT .X .HERE>
  1406. <TRO .X ,ECHO-ROOM-BIT>>
  1407. <HOBJS .DEM>>
  1408. <PUT .DEM ,HOBJS ()>)>
  1409. <TRO .CHALI ,TAKEBIT>
  1410. <COND (<==? .HERE <FIND-ROOM "TREAS">>
  1411. <MAPF <>
  1412. <FUNCTION (X) #DECL ((X) OBJECT)
  1413. <COND (<AND <N==? .X .CHALI>
  1414. <N==? .X .T>>
  1415. <COND (<TRNN .X ,ECHO-ROOM-BIT>
  1416. <TRZ .X ,ECHO-ROOM-BIT>)
  1417. (<TRO .X ,OVISON>
  1418. <COND (<NOT .FLG>
  1419. <SET FLG T>
  1420. <TELL
  1421. "As the thief dies, the power of his magic decreases, and his
  1422. treasures reappear:" 2>)>
  1423. <TELL " A " 2 <ODESC2 .X>>)>)>>
  1424. <ROBJS .HERE>>)>
  1425. <PUT .DEM ,HACTION <>>)
  1426. (<==? .PRSACT ,FIRST?!-WORDS> <PROB 20>)
  1427. (<==? .PRSACT ,OUT\!!-WORDS>
  1428. <PUT .DEM ,HACTION <>>
  1429. <TRZ <FIND-OBJ "STILL"> ,OVISON>
  1430. <TRO .CHALI ,TAKEBIT>
  1431. <PUT .T ,ODESC1 ,ROBBER-U-DESC>)
  1432. (<==? .PRSACT ,IN\!!-WORDS>
  1433. <COND (<==? <HROOM .DEM> .HERE>
  1434. <TELL
  1435. "The robber revives, briefly feigning continued unconsciousness, and
  1436. when he sees his moment, scrambles away from you.">)>
  1437. <COND (<TYPE? ,ROBBER OFFSET> <PUT .DEM ,HACTION ROBBER>)
  1438. (<PUT .DEM ,HACTION ROBBER>)>
  1439. <PUT .T ,ODESC1 ,ROBBER-C-DESC>
  1440. <COND (<AND <==? .HERE <FIND-ROOM "TREAS">>
  1441. <OROOM <SET CHALI .CHALI>>>
  1442. <TRZ .CHALI ,TAKEBIT>)>
  1443. <TRO <FIND-OBJ "STILL"> ,OVISON>)
  1444. (<AND <TYPE? .PRSOBJ OBJECT>
  1445. <==? <2 .PV> ,KNIFE!-OBJECTS>
  1446. <==? .PRSACT ,THROW!-WORDS>
  1447. <NOT <TRNN .T ,FIGHTBIT>>>
  1448. <COND (<PROB 10>
  1449. <TELL
  1450. "You evidently frightened the robber, though you didn't hit him. He
  1451. flees" 1
  1452. <COND (<EMPTY? <HOBJS .DEM>>
  1453. ".")
  1454. (T
  1455. <MAPF <> <FUNCTION (X) #DECL ((X) OBJECT)
  1456. <INSERT-OBJECT .X .HERE>> <HOBJS .DEM>>
  1457. <PUT .DEM ,HOBJS ()>
  1458. ", but the contents of his bag fall on the floor.")>>
  1459. <REMOVE-OBJECT .T>)
  1460. (T
  1461. <TELL
  1462. "You missed. The thief makes no attempt to take the knife, though it
  1463. would be a fine addition to the collection in his bag. He does seem
  1464. angered by your attempt.">
  1465. <TRO .T ,FIGHTBIT>)>)
  1466. (<AND <OR <==? .PRSACT ,THROW!-WORDS>
  1467. <==? .PRSACT ,GIVE!-WORDS>>
  1468. <TYPE? .PRSOBJ OBJECT>
  1469. <N==? .PRSOBJ <HOBJ .DEM>>>
  1470. <COND (<L? <OCAPAC .T> 0>
  1471. <PUT .T ,OCAPAC <- <OCAPAC .T>>>
  1472. <PUT .DEM ,HACTION <COND (<TYPE? ,ROBBER OFFSET> ,ROBBER)
  1473. (ROBBER)>>
  1474. <TRO <FIND-OBJ "STILL"> ,OVISON>
  1475. <PUT .T ,ODESC1 ,ROBBER-C-DESC>
  1476. <TELL
  1477. "Your proposed victim suddenly recovers consciousness.">)>
  1478. <COND (<AND <==? .PRSOBJ <SET BRICK <FIND-OBJ "BRICK">>>
  1479. <==? <OCAN <SET FUSE <FIND-OBJ "FUSE">>> .BRICK>
  1480. <ORAND .FUSE>
  1481. <NOT <0? <CTICK <2 <SET F <ORAND .FUSE>>>>>>>
  1482. ; "I.e., he's trying to give us the brick with a lighted fuse."
  1483. <TELL
  1484. "The thief seems rather offended by your offer. Do you think he's as
  1485. stupid as you are?">)
  1486. (<REMOVE-OBJECT .PRSOBJ>
  1487. <PUT .DEM ,HOBJS (.PRSOBJ !<HOBJS .DEM>)>
  1488. <TELL
  1489. "The thief places the " 1 <ODESC2 .PRSOBJ> " in his bag and thanks
  1490. you politely.">)>)
  1491. (<AND .PRSACT <==? .PRSACT ,TAKE!-WORDS>>
  1492. <TELL
  1493. "Once you got him, what would you do with him?">)>>
  1494. <DEFINE CHALICE ("AUX" (PRSA <1 ,PRSVEC>) (CH <2 ,PRSVEC>) TR T)
  1495. #DECL ((PRSA) VERB (CH) OBJECT (TR) ROOM (T) OBJECT)
  1496. <COND (<==? .PRSA ,TAKE!-WORDS>
  1497. <COND (<AND <NOT <OCAN .CH>>
  1498. <==? <OROOM .CH> <SET TR <FIND-ROOM "TREAS">>>
  1499. <==? <OROOM <SET T <FIND-OBJ "THIEF">>> .TR>
  1500. <FIGHTING? .T>
  1501. <HACTION ,ROBBER-DEMON>>
  1502. <TELL
  1503. "Realizing just in time that you'd be stabbed in the back if you
  1504. attempted to take the chalice, you return to the fray.">)>)>>
  1505. <DEFINE BURNER ("AUX" (PV ,PRSVEC) (PRSO <2 .PV>) (PRSI <3 .PV>))
  1506. #DECL ((PV) VECTOR (PRSO PRSI) OBJECT)
  1507. <COND (<FLAMING? .PRSI>
  1508. <COND (<OBJECT-ACTION>)
  1509. (<AND <==? <AVEHICLE ,WINNER> <FIND-OBJ "BALLO">>
  1510. <BALLOON>>)
  1511. (<AND <BURNABLE? .PRSO>
  1512. <COND (<MEMQ .PRSO <AOBJS ,WINNER>>
  1513. <TELL
  1514. "The " 1 <ODESC2 .PRSO> " catches fire.">
  1515. <JIGS-UP
  1516. "Unfortunately, you were holding it at the time.">)
  1517. (<HACKABLE? .PRSO ,HERE>
  1518. <TELL
  1519. "The " 1 <ODESC2 .PRSO> " catches fire and is consumed.">
  1520. <REMOVE-OBJECT .PRSO>)
  1521. (<TELL "You don't have that.">)>>)
  1522. (<TELL
  1523. "I don't think you can burn a " 1 <ODESC2 .PRSO> ".">)>)
  1524. (<TELL
  1525. "With a " 1 <ODESC2 .PRSI> "??!?">)>>
  1526. <DEFINE TURNER ("AUX" (PV ,PRSVEC) (PRSO <2 .PV>) (PRSI <3 .PV>))
  1527. #DECL ((PV) VECTOR (PRSO PRSI) OBJECT)
  1528. <COND (<TRNN .PRSO ,TURNBIT>
  1529. <COND (<TRNN .PRSI ,TOOLBIT>
  1530. <OBJECT-ACTION>)
  1531. (<TELL
  1532. "You certainly can't turn it with a " 1 <ODESC2 .PRSI> ".">)>)
  1533. (<TELL
  1534. "You can't turn that!">)>>
  1535. <PSETG DOORMUNGS
  1536. '["The door is invulnerable."
  1537. "You cannot damage this door."
  1538. "The door is still under warranty."]>
  1539. <GDECL (DOORMUNGS) <VECTOR [REST STRING]>>
  1540. <DEFINE DDOOR-FUNCTION ("AUX" (PA <1 ,PRSVEC>))
  1541. #DECL ((PA) VERB)
  1542. <COND (<==? .PA ,OPEN!-WORDS>
  1543. <TELL
  1544. "The door cannot be opened.">)
  1545. (<==? .PA ,BURN!-WORDS>
  1546. <TELL
  1547. "You cannot burn this door.">)
  1548. (<==? .PA ,MUNG!-WORDS>
  1549. <TELL <PICK-ONE ,DOORMUNGS>>)>>
  1550. <DEFINE INFLATER ("AUX" (PRSI <2 ,PRSVEC>) (PRSO <3 ,PRSVEC>))
  1551. #DECL ((PRSI PRSO) OBJECT)
  1552. <COND (<==? .PRSI <FIND-OBJ "IBOAT">>
  1553. <OBJECT-ACTION>)
  1554. (<==? .PRSI <FIND-OBJ "RBOAT">>
  1555. <TELL "Inflating it further would probably burst it.">)
  1556. (<TELL "How can you inflate that?">)>>
  1557. <DEFINE DEFLATER ("AUX" (PRSO <2 ,PRSVEC>))
  1558. #DECL ((PRSO) OBJECT)
  1559. <COND (<==? .PRSO <FIND-OBJ "RBOAT">>
  1560. <OBJECT-ACTION>)
  1561. (<TELL "Come on, now!">)>>
  1562. <DEFINE LOCKER ("AUX" (PRSO <2 ,PRSVEC>))
  1563. #DECL ((PRSO) OBJECT)
  1564. <COND (<AND <==? .PRSO <FIND-OBJ "GRATE">>
  1565. <==? ,HERE <FIND-ROOM "MGRAT">>>
  1566. <SETG GRUNLOCK!-FLAG <>>
  1567. <TELL "The grate is locked.">
  1568. <MAPF <>
  1569. <FUNCTION (X)
  1570. #DECL ((X) <OR DOOR CEXIT NEXIT ROOM>)
  1571. <COND (<AND <TYPE? .X DOOR>
  1572. <==? <DOBJ .X> .PRSO>>
  1573. <PUT .X ,DSTR "The grate is locked.">
  1574. <MAPLEAVE>)>>
  1575. <REXITS ,HERE>>)
  1576. (<TELL "It doesn't seem to work.">)>>
  1577. <DEFINE UNLOCKER ("AUX" (PRSO <2 ,PRSVEC>) (PRSI <3 ,PRSVEC>) (R <FIND-ROOM "MGRAT">))
  1578. #DECL ((PRSO PRSI) OBJECT (R) ROOM)
  1579. <COND (<AND <==? .PRSO <FIND-OBJ "GRATE">>
  1580. <==? ,HERE <FIND-ROOM "MGRAT">>>
  1581. <COND (<==? .PRSI <FIND-OBJ "KEYS">>
  1582. <SETG GRUNLOCK!-FLAG T>
  1583. <TELL "The grate is unlocked.">
  1584. <MAPF <>
  1585. <FUNCTION (X)
  1586. #DECL ((X) <OR DOOR CEXIT NEXIT ROOM>)
  1587. <COND (<AND <TYPE? .X DOOR>
  1588. <==? <DOBJ .X> .PRSO>>
  1589. <PUT .X ,DSTR "The grate is closed.">
  1590. <MAPLEAVE>)>>
  1591. <REXITS .R>>)
  1592. (<TELL "Can you unlock a grating with a " 1 <ODESC2 .PRSI> "?">)>)
  1593. (<TELL "It doesn't seem to work.">)>>
  1594. <DEFINE KILLER ("OPTIONAL" (STR "kill")
  1595. "AUX" (PV ,PRSVEC) (PRSO <2 .PV>) (PRSI <3 .PV>))
  1596. #DECL ((STR) STRING (PV) VECTOR (PRSO PRSI) <OR FALSE OBJECT>)
  1597. <COND (<NOT .PRSO>
  1598. <TELL "There is nothing here to " 1 .STR ".">)
  1599. (<NOT <TRNN .PRSO ,VILLAIN>>
  1600. <TELL
  1601. "I've known strange people, but fighting a " 1 <ODESC2 .PRSO> "??">)
  1602. (<NOT .PRSI>
  1603. <TELL "Trying to " 0 .STR>
  1604. <TELL " a " 1 <ODESC2 .PRSO> " with your bare hands is suicidal.">)
  1605. (<NOT <TRNN .PRSI ,WEAPONBIT>>
  1606. <TELL "Trying to " 0 .STR>
  1607. <TELL " a " 0 <ODESC2 .PRSO> " with a ">
  1608. <TELL <ODESC2 .PRSI> 1 " is suicidal.">)
  1609. (ELSE
  1610. <BLOW ,PLAYER .PRSO <ORAND .PRSI> T <>>)>>
  1611. <DEFINE ATTACKER () <KILLER "attack">>
  1612. <DEFINE SWINGER ("AUX" (PV ,PRSVEC) (PRSO <2 .PV>) (PRSI <3 .PV>))
  1613. #DECL ((PV) VECTOR (PRSO PRSI) <OR FALSE OBJECT>)
  1614. <PUT .PV 2 .PRSI>
  1615. <PUT .PV 3 .PRSO>
  1616. <ATTACKER>>
  1617. <DEFINE HACK-HACK (OBJ STR "OPTIONAL" (OBJ2 <>))
  1618. #DECL ((OBJ) OBJECT (STR) STRING (OBJ2) <OR FALSE STRING>)
  1619. <COND (<OBJECT-ACTION>)
  1620. (.OBJ2
  1621. <TELL .STR 0 <ODESC2 .OBJ> " with a ">
  1622. <TELL .OBJ2 1 <PICK-ONE ,HO-HUM>>)
  1623. (ELSE
  1624. <TELL .STR 1 <ODESC2 .OBJ> <PICK-ONE ,HO-HUM>>)>>
  1625. <PSETG HO-HUM
  1626. '[" does not seem to do anything."
  1627. " is not notably useful."
  1628. " isn't very interesting."
  1629. " doesn't appear worthwhile."
  1630. " has no effect."
  1631. " doesn't do anything."]>
  1632. <GDECL (HO-HUM) <VECTOR [REST STRING]>>
  1633. <DEFINE MUNGER ("AUX" (PRSO <2 ,PRSVEC>) (PRSW <3 ,PRSVEC>))
  1634. #DECL ((PRSW) <OR OBJECT FALSE> (PRSO) OBJECT)
  1635. <COND (<TRNN .PRSO ,VILLAIN>
  1636. <COND (.PRSW
  1637. <COND (<TRNN .PRSW ,WEAPONBIT>
  1638. <BLOW ,PLAYER .PRSO <ORAND .PRSW> T <>>)
  1639. (T
  1640. <TELL "Munging a " 0 <ODESC2 .PRSO> " with a ">
  1641. <TELL <ODESC2 .PRSW> 1 " is quite self-destructive.">)>)
  1642. (T
  1643. <TELL "Munging a " 1 <ODESC2 .PRSO> " with your bare hands is suicidal.">)>)
  1644. (<HACK-HACK .PRSO "Munging a ">)>>
  1645. <DEFINE KICKER ("AUX" (PRSO <2 ,PRSVEC>))
  1646. #DECL ((PRSO) OBJECT)
  1647. <HACK-HACK .PRSO "Munging a ">>
  1648. <DEFINE WAVER ("AUX" (PRSO <2 ,PRSVEC>))
  1649. #DECL ((PRSO) OBJECT)
  1650. <HACK-HACK .PRSO "Waving a ">>
  1651. <DEFINE R/L ("AUX" (PRSO <2 ,PRSVEC>))
  1652. #DECL ((PRSO) OBJECT)
  1653. <HACK-HACK .PRSO "Playing in this way with a ">>
  1654. <DEFINE RUBBER ("AUX" (PRSO <2 ,PRSVEC>))
  1655. #DECL ((PRSO) OBJECT)
  1656. <HACK-HACK .PRSO "Fiddling with a ">>
  1657. <DEFINE EXORCISE ()
  1658. <COND (<OBJECT-ACTION>) (T)>>
  1659. <DEFINE PLUGGER ()
  1660. <COND (<OBJECT-ACTION>)
  1661. (<TELL "This has no effect.">)>>
  1662. <DEFINE UNTIE ("AUX" (PRSO <2 ,PRSVEC>))
  1663. #DECL ((PRSO) OBJECT)
  1664. <COND (<OBJECT-ACTION>)
  1665. (<TRNN .PRSO ,TIEBIT>
  1666. <TELL "I don't think so.">)
  1667. (<TELL "This cannot be tied, so it cannot be untied!">)>>
  1668. <DEFINE PUSHER ("AUX" (PRSO <2 ,PRSVEC>))
  1669. #DECL ((PRSO) OBJECT)
  1670. <COND (<OBJECT-ACTION>)
  1671. (<HACK-HACK .PRSO "Pushing the ">)>>
  1672. <DEFINE TIE ("AUX" (PRSO <2 ,PRSVEC>))
  1673. #DECL ((PRSO) OBJECT)
  1674. <COND (<TRNN .PRSO ,TIEBIT>
  1675. <COND (<OBJECT-ACTION>)
  1676. (<TELL "You can't tie the " 1 <ODESC2 .PRSO> " to that.">)>)
  1677. (<TELL "How can you tie that to anything.">)>>
  1678. <DEFINE TIE-UP ("AUX" (PV ,PRSVEC) (PRSO <2 .PV>) (PRSI <3 .PV>))
  1679. #DECL ((PV) VECTOR (PRSO PRSI) OBJECT)
  1680. <COND (<TRNN .PRSI ,TIEBIT>
  1681. <COND (<TRNN .PRSO ,VILLAINBIT>
  1682. <TELL "The "
  1683. 1
  1684. <ODESC2 .PRSO>
  1685. " struggles and you cannot tie him up.">)
  1686. (<TELL "Why would you tie up a " 1 <ODESC2 .PRSO> "?">)>)
  1687. (<TELL "You could certainly never tie it with that!">)>>
  1688. <DEFINE MELTER ("AUX" (PRSO <2 ,PRSVEC>))
  1689. #DECL ((PRSO) OBJECT)
  1690. <COND (<OBJECT-ACTION>)
  1691. (<TELL "I'm not sure that a " 1 <ODESC2 .PRSO> " can be melted.">)>>
  1692. <SETG ON-POLE!-FLAG <>>
  1693. <DEFINE BODY-FUNCTION ("AUX" (PRSA <1 ,PRSVEC>))
  1694. #DECL ((PRSA) VERB)
  1695. <COND (<==? .PRSA ,TAKE!-WORDS>
  1696. <TELL "A force keeps you from taking the bodies.">)
  1697. (<OR <==? .PRSA ,MUNG!-WORDS>
  1698. <==? .PRSA ,BURN!-WORDS>>
  1699. <COND (,ON-POLE!-FLAG)
  1700. (<SETG ON-POLE!-FLAG T>
  1701. <INSERT-OBJECT <FIND-OBJ "HPOLE"> <FIND-ROOM "LLD2">>)>
  1702. <JIGS-UP
  1703. "The voice of the guardian of the dungeon booms out from the darkness
  1704. 'Your disrespect costs you your life!' and places your head on a pole.">)>>
  1705. <DEFINE MUMBLER ()
  1706. <TELL "You'll have to speak up if you expect me to hear you!">>
  1707. <DEFINE ALARM ("AUX" (PRSO <2 ,PRSVEC>))
  1708. #DECL ((PRSO) OBJECT)
  1709. <COND (<TRNN .PRSO ,SLEEPBIT>
  1710. <OBJECT-ACTION>)
  1711. (<TELL "The " 1 <ODESC2 .PRSO> " isn't sleeping.">)>>
  1712. <DEFINE ZORK ()
  1713. <TELL "That word is replaced henceforth with DUNGEON.">>
  1714. <DEFINE DUNGEON ()
  1715. <TELL "At your service!">>
  1716. <DEFINE PAINTING ("AUX" (PRSA <1 ,PRSVEC>) (ART <2 ,PRSVEC>))
  1717. #DECL ((PRSA) VERB (ART) OBJECT)
  1718. <COND (<==? .PRSA ,MUNG!-WORDS>
  1719. <PUT .ART ,OTVAL 0>
  1720. <PUT .ART ,ODESC2 "worthless piece of canvas">
  1721. <PUT .ART ,ODESC1 "There is a worthless piece of canvas here.">
  1722. <TELL
  1723. "Congratulations! Unlike the other vandals, who merely stole the
  1724. artist's masterpieces, you have destroyed one.">)>>
  1725. <PSETG DIMMER "The lamp appears to be getting dimmer.">
  1726. <PSETG LAMP-TICKS [50 30 20 10 4 0]>
  1727. <PSETG LAMP-TELLS [,DIMMER ,DIMMER ,DIMMER ,DIMMER "The lamp is dying."]>
  1728. <DEFINE LANTERN ("AUX" (PV ,PRSVEC) (VERB <1 .PV>) (HERE ,HERE)
  1729. (RLAMP <FIND-OBJ "LAMP">) FOO)
  1730. #DECL ((PV) VECTOR (VERB) VERB (HERE) ROOM (RLAMP) OBJECT
  1731. (FOO) <VECTOR ANY CEVENT>)
  1732. <COND (<==? .VERB ,THROW!-WORDS>
  1733. <TELL
  1734. "The lamp has smashed into the floor and the light has gone out.">
  1735. <REMOVE-OBJECT <FIND-OBJ "LAMP">>
  1736. <INSERT-OBJECT <FIND-OBJ "BLAMP"> .HERE>)
  1737. (<==? .VERB ,C-INT!-WORDS>
  1738. <LIGHT-INT .RLAMP ,LNTIN ,LAMP-TICKS ,LAMP-TELLS>)
  1739. (<==? .VERB ,TURN-ON!-WORDS>
  1740. <CLOCK-ENABLE <2 <SET FOO <ORAND .RLAMP>>>>
  1741. <>)
  1742. (<==? .VERB ,TURN-OFF!-WORDS>
  1743. <CLOCK-DISABLE <2 <SET FOO <ORAND .RLAMP>>>>
  1744. <>)>>
  1745. <DEFINE SWORD-GLOW (DEM
  1746. "AUX" (SW <HOBJ .DEM>) (G <OTVAL .SW>) (HERE ,HERE) (NG 0))
  1747. #DECL ((DEM) HACK (SW) OBJECT (NG G) FIX (HERE) ROOM)
  1748. <COND (<AND <NOT <OROOM .SW>> <NOT <OCAN .SW>>
  1749. <MEMQ .SW <AOBJS ,PLAYER>>>
  1750. <COND (<INFESTED? .HERE> <SET NG 2>)
  1751. (<MAPF <>
  1752. <FUNCTION (E)
  1753. #DECL ((E) <OR ROOM CEXIT DOOR NEXIT ATOM>)
  1754. <COND (<TYPE? .E ROOM>
  1755. <AND <INFESTED? .E> <MAPLEAVE T>>)
  1756. (<TYPE? .E CEXIT>
  1757. <AND <INFESTED? <2 .E>> <MAPLEAVE T>>)
  1758. (<TYPE? .E DOOR>
  1759. <AND <INFESTED? <GET-DOOR-ROOM .HERE .E>>
  1760. <MAPLEAVE T>>)>>
  1761. <REXITS .HERE>>
  1762. <SET NG 1>)>
  1763. <COND (<==? .NG .G>)
  1764. (<==? .NG 2> <TELL "Your sword has begun to glow very brightly.">)
  1765. (<1? .NG> <TELL "Your sword is glowing with a faint blue glow.">)
  1766. (<0? .NG> <TELL "Your sword is no longer glowing.">)>
  1767. <PUT .SW ,OTVAL .NG>)
  1768. (<PUT .DEM ,HACTION <>>)>>
  1769. <DEFINE SWORD ("AUX" (PA <1 ,PRSVEC>))
  1770. #DECL ((PA) VERB)
  1771. <COND (<AND <==? .PA ,TAKE!-WORDS>
  1772. <==? ,WINNER ,PLAYER>>
  1773. <PUT ,SWORD-DEMON ,HACTION <COND (<TYPE? ,SWORD-GLOW OFFSET>
  1774. ,SWORD-GLOW)
  1775. (SWORD-GLOW)>>
  1776. <>)>>
  1777. <DEFINE INFESTED? (R "AUX" (VILLAINS ,VILLAINS) (DEM <GET-DEMON "THIEF">))
  1778. #DECL ((R) ROOM (VILLAINS) <LIST [REST OBJECT]> (DEM) HACK)
  1779. <OR <AND <==? .R <HROOM .DEM>>
  1780. <HACTION .DEM>>
  1781. <MAPF <>
  1782. <FUNCTION (V)
  1783. #DECL ((V) OBJECT)
  1784. <COND (<==? .R <OROOM .V>> <MAPLEAVE T>)>>
  1785. .VILLAINS>>>
  1786. <PSETG CDIMMER "The candles grow shorter.">
  1787. <PSETG CANDLE-TICKS [20 10 5 0]>
  1788. <PSETG CANDLE-TELLS [,CDIMMER ,CDIMMER "The candles are very short."]>
  1789. <DEFINE MATCH-FUNCTION ("AUX" (PRSA <1 ,PRSVEC>) (PRSO <2 ,PRSVEC>)
  1790. (MATCH <FIND-OBJ "MATCH">) (MC <ORAND .MATCH>))
  1791. #DECL ((PRSA) VERB (MATCH) OBJECT (MC) FIX)
  1792. <COND (<AND <==? .PRSA ,LIGHT!-WORDS> <==? .PRSO .MATCH>>
  1793. <COND (<AND <PUT .MATCH ,ORAND <SET MC <- .MC 1>>>
  1794. <0? .MC>>
  1795. <TELL "I'm afraid that you have run out of matches.">)
  1796. (<TRO .MATCH ,FLAMEBIT>
  1797. <TRO .MATCH ,LIGHTBIT>
  1798. <TRO .MATCH ,ONBIT>
  1799. <CLOCK-INT ,MATIN 2>
  1800. <TELL "One of the matches starts to burn.">)>)
  1801. (<AND <==? .PRSA ,TURN-OFF!-WORDS> <TRNN .MATCH ,LIGHTBIT>>
  1802. <TELL "The match is out.">
  1803. <TRZ .MATCH ,FLAMEBIT>
  1804. <TRZ .MATCH ,LIGHTBIT>
  1805. <TRZ .MATCH ,ONBIT>
  1806. <CLOCK-INT ,MATIN 0>
  1807. T)
  1808. (<==? .PRSA ,C-INT!-WORDS>
  1809. <TELL "The match has gone out.">
  1810. <TRZ .MATCH ,FLAMEBIT>
  1811. <TRZ .MATCH ,LIGHTBIT>
  1812. <TRZ .MATCH ,ONBIT>)>>
  1813. <DEFINE CANDLES ("AUX" (PRSACT <1 ,PRSVEC>) (C <FIND-OBJ "CANDL">)
  1814. (WINNER ,WINNER) (AO <AOBJS .WINNER>) (W <3 ,PRSVEC>)
  1815. MATCH FOO ORPHANS)
  1816. #DECL ((PRSACT) VERB (MATCH C) OBJECT (W) <OR FALSE OBJECT> (WINNER) ADV
  1817. (AO) <LIST [REST OBJECT]> (FOO) <VECTOR FIX CEVENT>
  1818. (ORPHANS) <VECTOR [4 ANY]>)
  1819. <OR <ORAND .C> <PUT .C ,ORAND [0 <CLOCK-ENABLE <CLOCK-INT ,CNDIN 50>>]>>
  1820. <SET FOO <ORAND .C>>
  1821. <COND (<OR <==? .PRSACT ,BURN!-WORDS>
  1822. <==? .PRSACT ,LIGHT!-WORDS>>
  1823. <COND (<NOT <TRNN .C ,LIGHTBIT>>
  1824. <TELL
  1825. "Alas, there's not much left of the candles. Certainly not enough to
  1826. burn.">)
  1827. (<NOT .W>
  1828. <TELL "With what?">
  1829. <ORPHAN T
  1830. ,LIGHT!-ACTIONS
  1831. .C
  1832. <CHTYPE WITH!-WORDS PREP>>
  1833. <SETG PARSE-WON <>>
  1834. T)
  1835. (<AND <==? .W <SET MATCH <FIND-OBJ "MATCH">>>
  1836. <TRNN .MATCH ,ONBIT>>
  1837. <COND (<TRNN .C ,ONBIT>
  1838. <TELL "The candles are already lighted.">)
  1839. (<TRO .C ,ONBIT>
  1840. <TELL "The candles are lighted.">
  1841. <CLOCK-ENABLE <2 .FOO>>)>)
  1842. (<==? .W <FIND-OBJ "TORCH">>
  1843. <COND (<TRNN .C ,ONBIT>
  1844. <TELL
  1845. "You realize, just in time, that the candles are already lighted.">)
  1846. (<TELL
  1847. "The heat from the torch is so intense that the candles are vaporised.">
  1848. <COND (<OR <OROOM .C> <OCAN .C>>
  1849. <REMOVE-OBJECT .C>)
  1850. (<PUT .WINNER ,AOBJS <SPLICE-OUT .C .AO>>)>)>)
  1851. (<TELL
  1852. "You have to light them with something that's burning, you know.">)>)
  1853. (<==? .PRSACT ,TURN-OFF!-WORDS>
  1854. <CLOCK-DISABLE <2 .FOO>>
  1855. <COND (<TRNN .C ,ONBIT>
  1856. <TELL "The flame is extinguished.">
  1857. <TRZ .C ,ONBIT>)
  1858. (<TELL "The candles are not lighted.">)>)
  1859. (<==? .PRSACT ,C-INT!-WORDS>
  1860. <LIGHT-INT .C ,CNDIN ,CANDLE-TICKS ,CANDLE-TELLS>)>>
  1861. <DEFINE BLACK-BOOK ("AUX" (PV ,PRSVEC) (V <1 .PV>) (B <2 .PV>))
  1862. #DECL ((PV) <VECTOR [3 ANY]> (B) OBJECT (V) VERB)
  1863. <COND (<==? .V ,OPEN!-WORDS>
  1864. <TELL
  1865. "The book is open to page 569.">)
  1866. (<==? .V ,CLOSE!-WORDS>
  1867. <TELL
  1868. "As hard as you try, the book cannot be closed.">)
  1869. (<==? .V ,BURN!-WORDS>
  1870. <COND (<OROOM .B>
  1871. <REMOVE-OBJECT .B>)
  1872. (<DROP-OBJECT .B>)>
  1873. <JIGS-UP
  1874. "A booming voice says 'Wrong, cretin!' and you notice that you have
  1875. turned into a pile of dust.">)>>
  1876. <DEFINE LIGHT-INT (OBJ CEV TICK TELL "AUX" CNT TIM (FOO <ORAND .OBJ>))
  1877. #DECL ((OBJ) OBJECT (FCN) APPLICABLE (TICK) <VECTOR [REST FIX]>
  1878. (TELL) <VECTOR [REST STRING]> (TIM CNT) FIX (FOO) <VECTOR FIX CEVENT>)
  1879. <PUT .FOO 1 <SET CNT <+ <1 .FOO> 1>>>
  1880. <CLOCK-INT .CEV <SET TIM <NTH .TICK .CNT>>>
  1881. <COND (<0? .TIM>
  1882. <COND (<OR <NOT <OROOM .OBJ>> <==? <OROOM .OBJ> ,HERE>>
  1883. <TELL "I hope you have more light than from a " 1 <ODESC2 .OBJ> ".">)>
  1884. <TRZ .OBJ ,LIGHTBIT>
  1885. <TRZ .OBJ ,ONBIT>)
  1886. (<OR <NOT <OROOM .OBJ>>
  1887. <==? <OROOM .OBJ> ,HERE>>
  1888. <TELL <NTH .TELL .CNT>>)>>
  1889. <DEFINE HACKABLE? (OBJ RM "AUX" (AV <AVEHICLE ,WINNER>))
  1890. #DECL ((OBJ) OBJECT (RM) ROOM (AV) <OR FALSE OBJECT>)
  1891. <COND (.AV
  1892. <SEARCH-LIST <OID .OBJ> <OCONTENTS .AV> <>>)
  1893. (<SEARCH-LIST <OID .OBJ> <ROBJS .RM> <>>)>>
  1894.