act1.1 60 KB

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