home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume18 / ccr / part02 < prev    next >
Encoding:
Internet Message Format  |  1993-07-18  |  60.3 KB

  1. Path: uunet!news.tek.com!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v18i017:  ccr - colossal cave (adventure) implemented in TADS, Part02/11
  5. Date: 12 Jul 1993 19:28:32 GMT
  6. Organization: Tektronix, Inc, Redmond, OR, USA
  7. Lines: 2279
  8. Approved: billr@saab.CNA.TEK.COM
  9. Message-ID: <21se10$1cq@ying.cna.tek.com>
  10. NNTP-Posting-Host: saab.cna.tek.com
  11. Xref: uunet comp.sources.games:1817
  12.  
  13. Submitted-by: David Baggett <dmb@xbar.ai.mit.edu>
  14. Posting-number: Volume 18, Issue 17
  15. Archive-name: ccr/part02
  16. Environment: TADS
  17.  
  18.  
  19.  
  20. #! /bin/sh
  21. # This is a shell archive.  Remove anything before this line, then unpack
  22. # it by saving it into a file and typing "sh file".  To overwrite existing
  23. # files, type "sh file -c".  You can also feed this as standard input via
  24. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  25. # will see the following message at the end:
  26. #        "End of archive 2 (of 11)."
  27. # Contents:  src/ccr-room.t2
  28. # Wrapped by billr@saab on Mon Jul 12 12:02:42 1993
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. if test -f 'src/ccr-room.t2' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'src/ccr-room.t2'\"
  32. else
  33. echo shar: Extracting \"'src/ccr-room.t2'\" \(57507 characters\)
  34. sed "s/^X//" >'src/ccr-room.t2' <<'END_OF_FILE'
  35. X
  36. XAt_Steep_Incline_Above_Large_Room: CCR_room
  37. X    sdesc = "At Steep Incline Above Large Room"
  38. X    ldesc = {
  39. X        I(); "You are at the top of a steep incline above a 
  40. X        large room.  You could climb down here, but you would 
  41. X        not be able to climb up.  There is a passage leading 
  42. X        back to the north.";
  43. X    }
  44. X    north = In_Cavern_With_Waterfall
  45. X    cavern = In_Cavern_With_Waterfall
  46. X    passage = In_Cavern_With_Waterfall
  47. X    down = In_Large_Low_Room
  48. X    climb = In_Large_Low_Room
  49. X;
  50. X
  51. XIn_Giant_Room: CCR_room
  52. X    sdesc = "In Giant Room"
  53. X    ldesc = {
  54. X        I(); "You are in the giant room.  The ceiling here is 
  55. X        too high up for your lamp to show it.  Cavernous 
  56. X        passages lead east, north, and south.  On the west 
  57. X        wall is scrawled the inscription, \"Fee fie foe foo\" 
  58. X        [sic].";
  59. X    }
  60. X    south = In_Narrow_Corridor
  61. X    east = At_Recent_Cave_In
  62. X    north = In_Immense_N_S_Passage
  63. X;
  64. XInscription: CCR_decoration, readable
  65. X    sdesc = "scrawled inscription"
  66. X    ldesc = "It says, \"Fee fie foe foo [sic].\""
  67. X    noun = 'inscription' 'writing' 'scrawl'
  68. X    adjective = 'scrawled'
  69. X    location = In_Giant_Room
  70. X;
  71. X
  72. XAt_Recent_Cave_In: CCR_room
  73. X    sdesc = "At Recent Cave-in"
  74. X    ldesc = {
  75. X        I(); "The passage here is blocked by a recent 
  76. X        cave-in.";
  77. X    }
  78. X    south = In_Giant_Room
  79. X    giant = In_Giant_Room
  80. X    out = In_Giant_Room
  81. X;
  82. XCaveIn: CCR_decoration
  83. X    sdesc = "cave-in"
  84. X    ldesc = { self.location.ldesc; }
  85. X    noun = 'in' 'cave-in'
  86. X    adjective = 'cave'
  87. X    location = At_Recent_Cave_In
  88. X;
  89. X
  90. XIn_Immense_N_S_Passage: CCR_room
  91. X    sdesc = "In Immense N/S Passage"
  92. X    ldesc = {
  93. X        I(); "You are at one end of an immense north/south 
  94. X        passage. ";
  95. X
  96. X        if (not RustyDoor.isoiled)
  97. X             "The way north is barred by a massive, rusty, 
  98. X            iron door.";
  99. X        else
  100. X            "The way north leads through a massive, 
  101. X            rusty, iron door.";
  102. X    }
  103. X    south = In_Giant_Room
  104. X    giant = In_Giant_Room
  105. X    passage = In_Giant_Room
  106. X
  107. X    enter = { return self.north; }
  108. X    cavern = { return self.north; }
  109. X    north = {
  110. X        if (RustyDoor.isoiled) {
  111. X            return In_Cavern_With_Waterfall;
  112. X        }
  113. X        else {
  114. X            "The door is extremely rusty and refuses to open.";
  115. X            return nil;
  116. X        }
  117. X    }
  118. X
  119. X    //
  120. X    // Only let NPC's go through the door once it's open.
  121. X    //
  122. X    NPCexit1 = {
  123. X        if (RustyDoor.isoiled)
  124. X            return In_Cavern_With_Waterfall;
  125. X        else
  126. X            return nil;
  127. X    }
  128. X;
  129. XRustyDoor: CCR_decoration
  130. X    isoiled = nil
  131. X
  132. X    sdesc = "rusty door"
  133. X    ldesc = "It's just a big iron door."
  134. X    location = In_Immense_N_S_Passage
  135. X    noun = 'door' 'hinge' 'hinges'
  136. X    adjective = 'massive' 'rusty' 'iron'
  137. X
  138. X    verDoOpen(actor) = {
  139. X        if (self.oiled)
  140. X            "It's already open.";
  141. X        else
  142. X            "The hinges are quite thoroughly rusted now 
  143. X            and won't budge.";
  144. X    }
  145. X    verDoClose(actor) = {
  146. X        if (self.oiled)
  147. X            "No problem there -- it already is.";
  148. X        else
  149. X            "With all the effort it took to get the door 
  150. X            open, I wouldn't suggest closing it again.";
  151. X    }
  152. X    verDoOil(actor) = {}
  153. X    doOil(actor) = {
  154. X        if (bottle.isIn(Me))
  155. X            bottle.doPourOn(actor, self);
  156. X        else
  157. X            "You have nothing to oil it with.";
  158. X    }
  159. X;
  160. X
  161. XIn_Cavern_With_Waterfall: CCR_room
  162. X    sdesc = "In Cavern With Waterfall"
  163. X    ldesc = {
  164. X        I(); "You are in a magnificent cavern with a rushing 
  165. X        stream, which cascades over a sparkling waterfall 
  166. X        into a roaring whirlpool which disappears through a 
  167. X        hole in the floor.  Passages exit to the south and 
  168. X        west.";
  169. X    }
  170. X    south = In_Immense_N_S_Passage
  171. X    out = In_Immense_N_S_Passage
  172. X    giant = In_Giant_Room
  173. X    west = At_Steep_Incline_Above_Large_Room
  174. X;
  175. XWaterfall: CCR_decoration
  176. X    sdesc = "waterfall"
  177. X    ldesc = "Wouldn't want to go down in in a barrel!"
  178. X    noun = 'waterfall' 'whirpool'
  179. X    adjective = 'sparkling' 'whirling'
  180. X    location = In_Cavern_With_Waterfall
  181. X;
  182. X
  183. XIn_Soft_Room: CCR_room
  184. X    sdesc = "In Soft Room"
  185. X    ldesc = {
  186. X        I(); "You are in the soft room.  The walls are 
  187. X        covered with heavy curtains, the floor with a thick 
  188. X        pile carpet.  Moss covers the ceiling.";
  189. X    }
  190. X    west = In_Swiss_Cheese_Room
  191. X    out = In_Swiss_Cheese_Room
  192. X;
  193. XCarpet: CCR_decoration
  194. X    sdesc = "carpet"
  195. X    ldesc = "The carpet is quite plush."
  196. X    noun = 'carpet' 'shag' 'pile'
  197. X    adjective = 'pile' 'heavy' 'thick'
  198. X    location = In_Soft_Room
  199. X;
  200. XCurtains: CCR_decoration
  201. X    sdesc = "curtains"
  202. X    ldesc = "They seem to absorb sound very well."
  203. X    noun = 'curtain' 'curtains'
  204. X    adjective = 'heavy' 'thick'
  205. X    location = In_Soft_Room
  206. X
  207. X    verifyRemove(actor) = { "Now don't go ripping up the place!"; }
  208. X    verDoLookbehind(actor) = {}
  209. X    doLookbehind(actor) = {
  210. X        "You don't find anything exciting behind the curtains.";
  211. X    }
  212. X;
  213. XMoss: CCR_decoration
  214. X    sdesc = "moss"
  215. X    ldesc = "It just looks like your typical, everyday moss."
  216. X    noun = 'moss'
  217. X    adjective = 'typical' 'everyday'
  218. X    location = In_Soft_Room
  219. X
  220. X    verifyRemove(actor) = { "It's too high up for you to reach."; }
  221. X    verDoEat(actor) = { "Eeeewwwww."; }
  222. X;
  223. X
  224. XIn_Oriental_Room: CCR_room
  225. X    sdesc = "In Oriental Room"
  226. X    ldesc = {
  227. X        I(); "This is the oriental room.  Ancient oriental 
  228. X        cave drawings cover the walls.  A gently sloping 
  229. X        passage leads upward to the north, another passage 
  230. X        leads se, and a hands and knees crawl leads west.";
  231. X    }
  232. X    se = In_Swiss_Cheese_Room
  233. X    west = In_Large_Low_Room
  234. X    crawl = In_Large_Low_Room
  235. X    up = In_Misty_Cavern
  236. X    north = In_Misty_Cavern
  237. X    cavern = In_Misty_Cavern
  238. X;
  239. XCaveDrawings: CCR_decoration
  240. X    sdesc = "ancient oriental drawings"
  241. X    ldesc = "They seem to depict people and animals."
  242. X    noun = 'paintings' 'drawings' 'art'
  243. X    adjective = 'cave' 'ancient' 'oriental'
  244. X    location = In_Oriental_Room
  245. X;
  246. X
  247. XIn_Misty_Cavern: CCR_room
  248. X    sdesc = "In Misty Cavern"
  249. X    ldesc = {
  250. X        I(); "You are following a wide path around the outer 
  251. X        edge of a large cavern. Far below, through a heavy 
  252. X        white mist, strange splashing noises can be heard.  
  253. X        The mist rises up through a fissure in the ceiling.  
  254. X        The path exits to the south and west.";
  255. X    }
  256. X    south = In_Oriental_Room
  257. X    oriental = In_Oriental_Room
  258. X    west = In_Alcove
  259. X;
  260. XCeilingFissure: CCR_decoration
  261. X    sdesc = "fissure"
  262. X    ldesc = "You can't really get close enough to examine it."
  263. X    noun = 'fissure'
  264. X    location = In_Misty_Cavern
  265. X;
  266. X
  267. XIn_Alcove: CCR_room
  268. X    sdesc = "In Alcove"
  269. X    ldesc = {
  270. X        I(); "You are in an alcove.  A small northwest path seems 
  271. X        to widen after a short distance.  An extremely tight 
  272. X        tunnel leads east.  It looks like a very tight 
  273. X        squeeze.  An eerie light can be seen at the other 
  274. X        end.";
  275. X    }
  276. X    nw = In_Misty_Cavern
  277. X    cavern = In_Misty_Cavern
  278. X    passage = { return self.east; }
  279. X    east = {
  280. X        //
  281. X        // The player must be carrying only the emerald or
  282. X        // nothing at all to fit through the tight tunnel.
  283. X        //
  284. X        if (length(Me.contents) > 1)
  285. X            return wontfit.message;
  286. X        else if (length(Me.contents) = 1) {
  287. X            if (egg_sized_emerald.isIn(Me))
  288. X                return In_Plover_Room;
  289. X            else
  290. X                return wontfit.message;
  291. X        }
  292. X        else
  293. X            return In_Plover_Room;
  294. X    }
  295. X
  296. X    //
  297. X    // Let NPC's go in the plover room regardless of what
  298. X    // they're carrying.  (Life's not fair in the Colossal Cave.)
  299. X    //
  300. X    NPCexit1 = In_Plover_Room
  301. X;
  302. X
  303. XIn_Plover_Room: CCR_room, lightroom
  304. X    sdesc = "In Plover Room"
  305. X    ldesc = {
  306. X        I(); "You're in a small chamber lit by an eerie green 
  307. X        light.  An extremely narrow tunnel exits to the west. 
  308. X        A dark corridor leads northeast.";
  309. X    }
  310. X
  311. X    passage = { return self.west; }
  312. X    out =  { return self.west; }
  313. X    west = {
  314. X        //
  315. X        // The player must be carrying only the emerald or
  316. X        // nothing at all to fit through the tight tunnel.
  317. X        //
  318. X        if (length(Me.contents) > 1)
  319. X            return wontfit.message;
  320. X        else if (length(Me.contents) = 1) {
  321. X            if (egg_sized_emerald.isIn(Me))
  322. X                return In_Alcove;
  323. X            else
  324. X                return wontfit.message;
  325. X        }
  326. X        else
  327. X            return In_Alcove;
  328. X    }
  329. X
  330. X    ne = In_Dark_Room
  331. X    dark = In_Dark_Room
  332. X
  333. X     plover = At_Y2
  334. X
  335. X    //
  336. X    // Let NPC's leave the plover room regardless of what
  337. X    // they're carrying.  (Life's not fair in the Colossal Cave.)
  338. X    //
  339. X    NPCexit1 = In_Alcove
  340. X;
  341. X
  342. XIn_Dark_Room: CCR_room
  343. X    sdesc = "In Dark Room"
  344. X    ldesc = {
  345. X        I(); "You're in the dark-room.  A corridor leading 
  346. X        south is the only exit."; P();
  347. X
  348. X        I(); StoneTablet.ldesc; 
  349. X    }
  350. X    south = In_Plover_Room
  351. X    plover = In_Plover_Room
  352. X    out = In_Plover_Room
  353. X;
  354. XStoneTablet: CCR_decoration
  355. X    sdesc = "stone tablet"
  356. X    ldesc = {
  357. X        "A massive stone tablet imbedded in the wall reads: 
  358. X        \"Congratulations on bringing light into the 
  359. X        dark-room!\"";
  360. X    }
  361. X    location = In_Dark_Room
  362. X    noun = 'tablet'
  363. X    adjective = 'massive' 'stone'
  364. X;
  365. X
  366. XIn_Arched_Hall: CCR_room
  367. X    sdesc = "In Arched Hall"
  368. X    ldesc = {
  369. X        I(); "You are in an arched hall.  A coral passage 
  370. X        once continued up and east from here, but is now 
  371. X        blocked by debris.  The air smells of sea water.";
  372. X    }
  373. X    down = In_Shell_Room
  374. X    shell = In_Shell_Room
  375. X    out = In_Shell_Room
  376. X;
  377. X
  378. XIn_Shell_Room: CCR_room
  379. X    sdesc = "In Shell Room"
  380. X    ldesc = {
  381. X        I(); "You're in a large room carved out of 
  382. X        sedimentary rock.  The floor and walls are littered 
  383. X        with bits of shells imbedded in the stone.  A shallow 
  384. X        passage proceeds downward, and a somewhat steeper one 
  385. X        leads up.  A low hands and knees passage enters from 
  386. X        the south.";
  387. X    }
  388. X    up = In_Arched_Hall
  389. X    hall = In_Arched_Hall
  390. X    down = In_Ragged_Corridor
  391. X    
  392. X    south = {
  393. X        if (giant_bivalve.isIn(Me)) {
  394. X            if (giant_bivalve.opened)
  395. X                "You can't fit this five-foot oyster 
  396. X                through that little passage!";
  397. X            else
  398. X                "You can't fit this five-foot clam 
  399. X                through that little passage!";
  400. X
  401. X            return nil;
  402. X        }
  403. X        else 
  404. X            return At_Complex_Junction;
  405. X    }
  406. X
  407. X    //
  408. X    // Let NPC's through.
  409. X    //
  410. X    NPCexit1 = At_Complex_Junction
  411. X;
  412. X
  413. XIn_Ragged_Corridor: CCR_room
  414. X    sdesc = "In Ragged Corridor"
  415. X    ldesc = {
  416. X        I(); "You are in a long sloping corridor with ragged 
  417. X        sharp walls.";
  418. X    }
  419. X    up = In_Shell_Room
  420. X    shell = In_Shell_Room
  421. X    down = In_A_Cul_De_Sac
  422. X;
  423. X
  424. XIn_A_Cul_De_Sac: CCR_room
  425. X    sdesc = "In a Cul-de-Sac"
  426. X    ldesc = {
  427. X        I(); "You are in a cul-de-sac about eight feet 
  428. X        across.";
  429. X    }
  430. X    up = In_Ragged_Corridor
  431. X    out = In_Ragged_Corridor
  432. X    shell = In_Shell_Room
  433. X;
  434. X
  435. XIn_Anteroom: CCR_room
  436. X    sdesc = "In Anteroom"
  437. X    ldesc = {
  438. X        I(); "You are in an anteroom leading to a large 
  439. X        passage to the east.  Small passages go west and up.  
  440. X        The remnants of recent digging are evident."; P();
  441. X
  442. X        I(); "A sign in midair here says \"Cave under 
  443. X        construction beyond this point. Proceed at own risk.  
  444. X        [Witt Construction Company]\"";
  445. X    }
  446. X    up = At_Complex_Junction
  447. X    west = In_Bedquilt
  448. X    east = At_Witts_End
  449. X;
  450. XWittSign: CCR_decoration, readable
  451. X    sdesc = 'sign'
  452. X    ldesc = "It's hanging way above your head."
  453. X    readdesc = {
  454. X        "It says \"Cave under construction beyond this point. 
  455. X        Proceed at own risk.  [Witt Construction Company]\"";
  456. X    }
  457. X    noun = 'sign'
  458. X    adjective = 'hanging'
  459. X    location = In_Anteroom
  460. X
  461. X    verifyRemove(actor) = { "No chance.  It's too far up."; }
  462. X;
  463. X
  464. X/*
  465. X * This was off limits to NPC's in the original, but I don't see
  466. X * any reason to keep that restriction since it seemed to be
  467. X * related to some hackery in the way the movement worked.
  468. X *
  469. X * It could be argued that the pirate shouldn't show up in the mazes,
  470. X * since his taking stuff away from the player could make mapping the
  471. X * maze a real pain.
  472. X */
  473. XDifferent_Maze_1: CCR_room
  474. X    sdesc = "Maze of Twisty Little Passages, All Different"
  475. X    ldesc = {
  476. X        I(); "You are in a maze of twisty little passages, 
  477. X        all different.";
  478. X    }
  479. X    south = Different_Maze_3
  480. X    sw = Different_Maze_4
  481. X    ne = Different_Maze_5
  482. X    se = Different_Maze_6
  483. X    up = Different_Maze_7
  484. X    nw = Different_Maze_8
  485. X    east = Different_Maze_9
  486. X    west = Different_Maze_10
  487. X    north = Different_Maze_11
  488. X    down = At_West_End_Of_Long_Hall
  489. X;
  490. X
  491. XAt_Witts_End: CCR_room
  492. X    sdesc = "At Witt's End"
  493. X    ldesc = {
  494. X        I(); "You are at Witt's End.  Passages lead off in 
  495. X        *all* directions.";
  496. X    }
  497. X    east = {
  498. X        if (rand(100) <= 95) 
  499. X            return crawled_around.message;
  500. X        else
  501. X            return In_Anteroom;
  502. X    }
  503. X    west = {
  504. X        "You have crawled around in some little holes and 
  505. X        found your way blocked by a recent cave-in.  You are 
  506. X        now back in the main passage.";
  507. X
  508. X        return nil;
  509. X    }
  510. X
  511. X    north = { return self.east; }
  512. X    south = { return self.east; }
  513. X    ne = { return self.east; }
  514. X    se = { return self.east; }
  515. X    sw = { return self.east; }
  516. X    nw = { return self.east; }
  517. X    up = { return self.east; }
  518. X    down = { return self.east; }
  519. X
  520. X    //
  521. X    // Let NPC's out of here with no trouble
  522. X    //
  523. X    NPCexit1 = In_Anteroom
  524. X;
  525. X
  526. XIn_Mirror_Canyon: CCR_room
  527. X    sdesc = "In Mirror Canyon"
  528. X    ldesc = {
  529. X        I(); "You are in a north/south canyon about 25 feet 
  530. X        across.  The floor is covered by white mist seeping 
  531. X        in from the north.  The walls extend upward for well 
  532. X        over 100 feet.  Suspended from some unseen point far 
  533. X        above you, an enormous two-sided mirror is hanging 
  534. X        parallel to and midway between the canyon walls. ";
  535. X
  536. X        "("; CanyonMirror.ldesc; ")"; 
  537. X
  538. X        P(); I(); "A small window can be seen in either wall, 
  539. X        some fifty feet up.";
  540. X    }
  541. X    south = In_Secret_N_S_Canyon_0
  542. X    north = At_Reservoir
  543. X    reservior = At_Reservoir
  544. X;
  545. XMirror_1: CCR_decoration
  546. X    sdesc = "enormous mirror"
  547. X    ldesc = "It looks like an ordinary, albeit enormous, mirror."
  548. X    location = In_Mirror_Canyon
  549. X    noun = 'mirror'
  550. X    adjective = 'enormous' 'huge' 'big' 'large' 'suspended'
  551. X        'hanging' 'vanity' 'dwarvish'
  552. X
  553. X    verDoBreak(actor) = { self.verifyRemove(actor); }
  554. X    verifyRemove(actor) = { "You can't reach it from here."; }
  555. X;
  556. XCanyonMirror: CCR_decoration
  557. X    sdesc = "suspended mirror"
  558. X    ldesc = {
  559. X        "The mirror is obviously provided for the use of the 
  560. X        dwarves, who as you know, are extremely vain.";
  561. X    }
  562. X    noun = 'mirror'
  563. X    adjective = 'massive' 'hanging' 'suspended' 'dwarves\'' 'two-sided'
  564. X        'two' 'sided'
  565. X    location = In_Mirror_Canyon
  566. X;
  567. X
  568. XAt_Window_On_Pit_2: CCR_room
  569. X    sdesc = "At Window on Pit"
  570. X    ldesc = {
  571. X        I(); "You're at a low window overlooking a huge pit, 
  572. X        which extends up out of sight.  A floor is 
  573. X        indistinctly visible over 50 feet below.  Traces of 
  574. X        white mist cover the floor of the pit, becoming 
  575. X        thicker to the left. Marks in the dust around the 
  576. X        window would seem to indicate that someone has been 
  577. X        here recently.  Directly across the pit from you and 
  578. X        25 feet away there is a similar window looking into a 
  579. X        lighted room.  A shadowy figure can be seen there 
  580. X        peering back at you.";
  581. X    }
  582. X    west = At_Junction_Of_Three_Secret_Canyons
  583. X    jump = { return broken_neck.death; }
  584. X;
  585. X
  586. XAtop_Stalactite: CCR_room
  587. X    sdesc = "Atop Stalactite"
  588. X    ldesc = {
  589. X        I(); "A large stalactite extends from the roof and 
  590. X        almost reaches the floor below.  You could climb down 
  591. X        it, and jump from it to the floor, but having done so 
  592. X        you would be unable to reach it to climb back up.";
  593. X    }
  594. X    north = In_Secret_N_S_Canyon_1
  595. X
  596. X    jump = { return self.down; }
  597. X    climb = { return self.down; }
  598. X    down = {
  599. X        if (rand(100) <= 40)
  600. X            return Alike_Maze_6;
  601. X        else if (rand(100) <= 50)
  602. X            return Alike_Maze_9;
  603. X        else
  604. X            return Alike_Maze_4;
  605. X    }
  606. X
  607. X    //
  608. X    // Let NPC's through to the maze
  609. X    //
  610. X    NPCexit1 = Alike_Maze_6
  611. X    NPCexit2 = Alike_Maze_9
  612. X    NPCexit3 = Alike_Maze_4
  613. X;
  614. XStalactite: CCR_decoration
  615. X    sdesc = "stalactite"
  616. X    ldesc = {
  617. X        "You could probably climb down it, but you can forget 
  618. X        coming back up.";
  619. X    }
  620. X    noun = 'stalactite' 'stalagmite' 'stalagtite'
  621. X    adjective = 'large'
  622. X    location = Atop_Stalactite
  623. X
  624. X    verDoLookunder(actor) = { "Do get a grip on yourself."; }
  625. X    verDoMove(actor) = { self.verDoLookunder(actor); }
  626. X    verifyRemove(actor) = { self.verDoLookunder(actor); }
  627. X;
  628. X
  629. XDifferent_Maze_2: CCR_room
  630. X    sdesc = "Little Maze of Twisting Passages, All Different"
  631. X    ldesc = {
  632. X        I(); "You are in a little maze of twisting passages, 
  633. X        all different.";
  634. X    }
  635. X    sw = Different_Maze_3
  636. X    north = Different_Maze_4
  637. X    east = Different_Maze_5
  638. X    nw = Different_Maze_6
  639. X    se = Different_Maze_7
  640. X    ne = Different_Maze_8
  641. X    west = Different_Maze_9
  642. X    down = Different_Maze_10
  643. X    up = Different_Maze_11
  644. X    south = Dead_End_14
  645. X;
  646. X
  647. XAt_Reservoir: CCR_room
  648. X    sdesc = "At Reservoir"
  649. X    ldesc = {
  650. X        I(); "You are at the edge of a large underground 
  651. X        reservoir.  An opaque cloud of white mist fills the 
  652. X        room and rises rapidly upward.  The lake is fed by a 
  653. X        stream, which tumbles out of a hole in the wall about 
  654. X        10 feet overhead and splashes noisily into the water 
  655. X        somewhere within the mist.  The only passage goes 
  656. X        back toward the south.";
  657. X    }
  658. X    south = In_Mirror_Canyon
  659. X    out = In_Mirror_Canyon
  660. X
  661. X    //
  662. X    // The original had another exit, but the verb it was attached
  663. X    // to didn't exists.  I have no idea what was intended here...
  664. X    //
  665. X    // ??? = In_Mirror_Canyon
  666. X;
  667. X
  668. X//
  669. X// Here's where the pirate(s) keeps his treasure (as well as any loot
  670. X// he's swiped from the player).  Once the chest has been been found
  671. X// here, turn off the pirate(s) completely.  (This is how the original
  672. X// handled it, and it's thankfully merciful so I've kept it the same.)
  673. X//
  674. XDead_End_13: CCR_dead_end_room, NoNPC
  675. X    se = Alike_Maze_13
  676. X    out = Alike_Maze_13    // DMB: added
  677. X
  678. X    ldesc = "This is the pirate's dead end."
  679. X
  680. X    enterRoom(actor) = {
  681. X        if (treasure_chest.isIn(Me) and not treasure_chest.spotted) {
  682. X            P(); I(); "You've found the pirate's treasure chest!";
  683. X            unnotify(Pirates, &move);
  684. X            treasure_chest.spotted := true;
  685. X            PirateMessage.moveInto(nil);
  686. X        }
  687. X
  688. X        pass enterRoom;
  689. X    }
  690. X;
  691. X
  692. XOn_Sw_Side_Of_Chasm: CCR_room
  693. X    sdesc = "On SW Side of Chasm"
  694. X    ldesc = {
  695. X        I(); "You are on one side of a large, deep chasm.  A 
  696. X        heavy white mist rising up from below obscures all 
  697. X        view of the far side.  A southwest path leads away 
  698. X        from the chasm into a winding corridor. ";
  699. X
  700. X        RicketyBridge.xdesc;
  701. X
  702. X        if (Troll.location = nil) {
  703. X            P(); I();
  704. X            "The troll is nowhere to be seen.";
  705. X        }
  706. X    }
  707. X    sw = In_Sloping_Corridor
  708. X
  709. X    across = { return self.over; }
  710. X    cross = { return self.over; }
  711. X    ne = { return self.over; }
  712. X    over = {
  713. X        RicketyBridge.doCross(Me);
  714. X        return nil;
  715. X    }
  716. X    
  717. X    jump = {
  718. X        if (RicketyBridge.exists) {
  719. X            "I respectfully suggest you go across the 
  720. X            bridge instead of jumping.";
  721. X
  722. X            return nil;
  723. X        }
  724. X        else
  725. X            return didnt_make_it.death;
  726. X    }
  727. X
  728. X    //
  729. X    // No NPC exits because we don't want the pirate to be able
  730. X    // to go across the bridge and steal the player's return toll.
  731. X    // (All rooms on the other side of the bridge are off limits
  732. X    // to NPC's.)
  733. X    //
  734. X    // It would be OK for dwarves to show up over there, except
  735. X    // that they might run into the bear, a situation for which we don't
  736. X    // have any code.  (This is how the original was as well.)
  737. X    //
  738. X;
  739. XRicketyBridge: CCR_decoration
  740. X    exists = true
  741. X
  742. X    sdesc = "rickety bridge"
  743. X    ldesc = "It just looks like an ordinary, but unstable, bridge."
  744. X
  745. X    xdesc = {
  746. X        if (self.exists) {
  747. X            "A rickety wooden bridge extends across the 
  748. X            chasm, vanishing into the mist."; P();
  749. X
  750. X            I(); "A sign posted on the bridge reads, 
  751. X            \"Stop! Pay troll!\"";
  752. X        }
  753. X        else {
  754. X            "The wreckage of a bridge (and a dead bear) 
  755. X            can be seen at the bottom of the chasm.";
  756. X        }
  757. X    }
  758. X
  759. X    noun = 'bridge'
  760. X    adjective = 'rickety' 'unstable' 'wobbly' 'rope'
  761. X
  762. X    locationOK = true    // tell compiler OK for location to be method
  763. X    location = {
  764. X        if (self.exists) {
  765. X            if (Me.isIn(On_Sw_Side_Of_Chasm))
  766. X                return On_Sw_Side_Of_Chasm;
  767. X            else
  768. X                return On_Ne_Side_Of_Chasm;
  769. X        }
  770. X        else
  771. X            return nil;
  772. X    }
  773. X
  774. X    verDoCross(actor) = {}
  775. X    doCross(actor) = {
  776. X        if (self.exists) {
  777. X            if (Troll.ispaid or Troll.location = nil)
  778. X                self.cross;
  779. X            else {
  780. X                if (Troll.isIn(self.location)) {
  781. X                    "The troll refuses to let you 
  782. X                    cross.";
  783. X                }
  784. X                else {
  785. X                    "The troll steps out from 
  786. X                    beneath the bridge and blocks 
  787. X                    your way.";
  788. X
  789. X                    Troll.moveInto(self.location);
  790. X                }
  791. X            }
  792. X        }
  793. X        else
  794. X            "There is no longer any way across the chasm.";
  795. X    }
  796. X
  797. X    cross = {
  798. X        if (Bear.isfollowing) {
  799. X            "Just as you reach the other side, the bridge 
  800. X            buckles beneath the weight of the bear, which 
  801. X            was still following you around.  You scrabble 
  802. X            desperately for support, but as the bridge 
  803. X            collapses you stumble back and fall into the 
  804. X            chasm.";
  805. X
  806. X            // Get rid of the bridge in case the
  807. X            // player gets reincarnated and
  808. X            // continues the game.
  809. X            self.exists := nil;
  810. X
  811. X            // No more bear!
  812. X            Bear.exists := nil;
  813. X
  814. X            die();
  815. X        }
  816. X        else if (Me.isIn(On_Sw_Side_Of_Chasm)) {
  817. X            Troll.ispaid := nil;
  818. X            Me.travelTo(On_Ne_Side_Of_Chasm);
  819. X        }
  820. X        else {
  821. X            Troll.ispaid := nil;
  822. X            Me.travelTo(On_Sw_Side_Of_Chasm);
  823. X        }
  824. X    }
  825. X;
  826. XTroll: Actor
  827. X    ispaid = nil
  828. X
  829. X    sdesc = "burly troll"
  830. X    ldesc = {
  831. X        "Trolls are close relatives with rocks and have skin 
  832. X        as tough as that of a rhinoceros.";
  833. X    }
  834. X
  835. X    actorDesc = {
  836. X        P(); I();
  837. X        "A burly troll stands by the bridge and insists you 
  838. X        throw him a treasure before you may cross.";
  839. X    }
  840. X
  841. X    noun = 'troll'
  842. X    adjective = 'burly'
  843. X
  844. X    location = On_Sw_Side_Of_Chasm
  845. X
  846. X    verDoKick(actor) = {}
  847. X    doKick(actor) = {
  848. X        "The troll laughs alound at your pitiful attempt
  849. X        to injure him.";
  850. X    }
  851. X
  852. X    verDoAttack(actor) = {
  853. X        "The troll fends off your blows effortlessly.";
  854. X    }
  855. X    verDoAttackWith(actor, io) = {}
  856. X    doAttackWith(actor, io) = {
  857. X        //
  858. X        // If the player throws the axe at the troll,
  859. X        // he just catches it.
  860. X        //
  861. X        if (io = axe)
  862. X            self.ioGiveTo(actor, io);
  863. X        else
  864. X            self.verDoAttack(actor);
  865. X    }
  866. X
  867. X    verIoGiveTo(actor) = {}
  868. X    ioGiveTo(actor, dobj) = {
  869. X        if (isclass(dobj, CCR_treasure_item)) {
  870. X            "The troll catches your treasure and scurries 
  871. X            away out of sight.";
  872. X
  873. X            dobj.moveInto(nil);
  874. X            self.ispaid := true;
  875. X        }
  876. X        else if( dobj = tasty_food) {
  877. X            self.doFeed(Me);
  878. X        }
  879. X        else {
  880. X            "The troll deftly catches "; dobj.thedesc;
  881. X            ", examines it carefully, and tosses it back, 
  882. X            declaring, \"Good workmanship, but it's not 
  883. X            valuable enough.\"";
  884. X        }
  885. X    }
  886. X
  887. X    verIoThrowAt(actor) = { self.verIoGiveTo(actor); }
  888. X    ioThrowAt(actor, dobj) = { self.ioGiveTo(actor, dobj); }
  889. X    verIoThrowTo(actor) = { self.verIoGiveTo(actor); }
  890. X    ioThrowTo(actor, dobj) = { self.ioGiveTo(actor, dobj); }
  891. X
  892. X    verDoFeed(actor) = {}
  893. X    doFeed(actor) = {
  894. X        if (tasty_food.isIn(Me)) {
  895. X            "Gluttony is not one of the troll's vices. 
  896. X            Avarice, however, is.";
  897. X        }
  898. X        else {
  899. X            "You have nothing the troll wants to eat.";
  900. X        }
  901. X    }
  902. X;
  903. X
  904. XIn_Sloping_Corridor: CCR_room
  905. X    sdesc = "In Sloping Corridor"
  906. X    ldesc = {
  907. X        I(); "You are in a long winding corridor sloping out 
  908. X        of sight in both directions.";
  909. X    }
  910. X    down = In_Large_Low_Room
  911. X    up = On_Sw_Side_Of_Chasm
  912. X;
  913. X
  914. XIn_Secret_Canyon: CCR_room
  915. X    enteredfrom = nil
  916. X
  917. X    sdesc = "In Secret Canyon"
  918. X    ldesc = {
  919. X        I(); "You are in a secret canyon which exits to the 
  920. X        north and east."; P();
  921. X
  922. X        I();
  923. X        if (Dragon.isIn(self))
  924. X            "A huge green fierce dragon bars the way!";
  925. X        else
  926. X            DragonCorpse.ldesc;
  927. X    }
  928. X    north = {
  929. X        if (self.enteredfrom = In_Secret_N_S_Canyon_0) {
  930. X            return self.enteredfrom;
  931. X        }
  932. X        else {
  933. X            if (self.dragoncheck)
  934. X                return In_Secret_N_S_Canyon_0;
  935. X            else
  936. X                return nil;
  937. X        }
  938. X    }
  939. X    east = {
  940. X        if (self.enteredfrom = In_Secret_E_W_Canyon) {
  941. X            return self.enteredfrom;
  942. X        }
  943. X        else {
  944. X            if (self.dragoncheck)
  945. X                return In_Secret_E_W_Canyon;
  946. X            else
  947. X                return nil;
  948. X        }
  949. X    }
  950. X
  951. X    forwards = {
  952. X        if (self.enteredfrom = In_Secret_N_S_Canyon_0)
  953. X            return self.east;
  954. X        else
  955. X            return self.north;
  956. X    }
  957. X    out = {
  958. X        if (self.enteredfrom = In_Secret_N_S_Canyon_0)
  959. X            return self.north;
  960. X        else
  961. X            return self.east;
  962. X    }
  963. X
  964. X    dragoncheck = {
  965. X        if (Dragon.isIn(self)) {
  966. X            "The dragon looks rather nasty.  You'd best 
  967. X            not try to get by.";
  968. X
  969. X            return nil;
  970. X        }
  971. X        else
  972. X            return true;
  973. X    }
  974. X
  975. X    //
  976. X    // Let NPC's by the dragon without incident (they're all on
  977. X    // the same team, after all).
  978. X    //
  979. X    NPCexit1 = In_Secret_N_S_Canyon_0
  980. X    NPCexit2 = In_Secret_E_W_Canyon
  981. X;
  982. XDragon: CCR_decoration
  983. X    rhetoricalturn = -999    // hack -- see yesVerb in ccr-verbs.t
  984. X    
  985. X    sdesc = "dragon"
  986. X    ldesc = "I wouldn't mess with it if I were you."
  987. X    location = In_Secret_Canyon
  988. X    noun = 'dragon' 'monster' 'beast' 'lizard'
  989. X    adjective = 'huge' 'green' 'fierce' 'scaly' 'giant' 'ferocious'
  990. X
  991. X    verDoKick(actor) = {}
  992. X    doKick(actor) = {
  993. X        "Right idea, wrong limb.";
  994. X    }
  995. X
  996. X    verDoAttack(actor) = {}
  997. X    doAttack(actor) = {
  998. X        "With what?  Your bare hands?";
  999. X        self.rhetoricalturn := global.turnsofar;
  1000. X    }
  1001. X    verDoAttackWith(actor, io) = {}
  1002. X    doAttackWith(actor, io) = {
  1003. X        if (io = axe)
  1004. X            "The axe bounces harmlessly off the dragon's 
  1005. X            thick scales.";
  1006. X        else if (io = Hands) {
  1007. X            self.kill;
  1008. X        }
  1009. X        else {
  1010. X            "You'd probably be better off using your
  1011. X            bare hands than that thing!";
  1012. X        }
  1013. X    }
  1014. X
  1015. X    verIoThrowAt(actor) = { self.verIoGiveTo(actor); }
  1016. X    ioThrowAt(actor, dobj) = {
  1017. X        if (dobj = axe)
  1018. X            self.doAttackWith(actor, dobj);
  1019. X        else
  1020. X            self.ioGiveTo(actor, dobj);
  1021. X    }
  1022. X    verIoThrowTo(actor) = { self.verIoGiveTo(actor); }
  1023. X    ioThrowTo(actor, dobj) = {
  1024. X        if (dobj = axe)
  1025. X            self.doAttackWith(actor, dobj);
  1026. X        else
  1027. X            self.ioGiveTo(actor, dobj);
  1028. X    }
  1029. X
  1030. X    kill = {
  1031. X        "Congratulations!  You have just vanquished a 
  1032. X        dragon with your bare hands!  (Unbelievable, 
  1033. X        isn't it?)";
  1034. X
  1035. X        DragonCorpse.moveInto(self.location);
  1036. X        self.moveInto(nil);
  1037. X    }
  1038. X;
  1039. XDragonCorpse: CCR_decoration
  1040. X    sdesc = "dragon"
  1041. X    ldesc = {
  1042. X        "The body of a huge green dead dragon is lying off to 
  1043. X        one side.";
  1044. X    }
  1045. X    location = nil
  1046. X    noun = 'dragon' 'corpse'
  1047. X    adjective = 'dead'
  1048. X    
  1049. X    verDoKick(actor) = { "You've already done enough damage!"; }
  1050. X    verDoAttack(actor) = { self.verDoKick(actor); }
  1051. X    verDoAttackWith(actor, io) = { self.verDoKick(actor); }
  1052. X;
  1053. X
  1054. XOn_Ne_Side_Of_Chasm: CCR_room, NoNPC
  1055. X    sdesc = "On NE Side of Chasm"
  1056. X    ldesc = {
  1057. X        I(); "You are on the far side of the chasm.  A 
  1058. X        northeast path leads away from the chasm on this 
  1059. X        side. ";
  1060. X
  1061. X        RicketyBridge.xdesc;
  1062. X
  1063. X        if (Troll.location = nil) {
  1064. X            P(); I();
  1065. X            "The troll is nowhere to be seen.";
  1066. X        }
  1067. X    }
  1068. X    ne = In_Corridor
  1069. X
  1070. X    across = { return self.over; }
  1071. X    cross = { return self.over; }
  1072. X    sw = { return self.over; }
  1073. X    over = {
  1074. X        RicketyBridge.doCross(Me);
  1075. X        return nil;
  1076. X    }
  1077. X    
  1078. X    jump = {
  1079. X        if (RicketyBridge.exists) {
  1080. X            "I respectfully suggest you go across the 
  1081. X            bridge instead of jumping.";
  1082. X
  1083. X            return nil;
  1084. X        }
  1085. X        else
  1086. X            return didnt_make_it.death;
  1087. X    }
  1088. X
  1089. X    fork = At_Fork_In_Path
  1090. X    view = At_Breath_Taking_View
  1091. X    barren = In_Front_Of_Barren_Room
  1092. X;
  1093. X
  1094. XIn_Corridor: CCR_room, NoNPC
  1095. X    sdesc = "In Corridor"
  1096. X    ldesc = {
  1097. X        I(); "You're in a long east/west corridor.  A faint 
  1098. X        rumbling noise can be heard in the distance.";
  1099. X    }
  1100. X    west = On_Ne_Side_Of_Chasm
  1101. X    east = At_Fork_In_Path
  1102. X    fork = At_Fork_In_Path
  1103. X    view = At_Breath_Taking_View
  1104. X    barren = In_Front_Of_Barren_Room
  1105. X;
  1106. X
  1107. XAt_Fork_In_Path: CCR_room, NoNPC
  1108. X    sdesc = "At Fork in Path"
  1109. X    ldesc = {
  1110. X        I(); "The path forks here.  The left fork leads 
  1111. X        northeast.  A dull rumbling seems to get louder in 
  1112. X        that direction.  The right fork leads southeast down 
  1113. X        a gentle slope.  The main corridor enters from the 
  1114. X        west.";
  1115. X    }
  1116. X    west = In_Corridor
  1117. X    ne = At_Junction_With_Warm_Walls
  1118. X    left = At_Junction_With_Warm_Walls
  1119. X    se = In_Limestone_Passage
  1120. X    right = In_Limestone_Passage
  1121. X    down = In_Limestone_Passage
  1122. X    view = At_Breath_Taking_View
  1123. X    barren = In_Front_Of_Barren_Room
  1124. X;
  1125. X
  1126. XAt_Junction_With_Warm_Walls: CCR_room, NoNPC
  1127. X    sdesc = "At Junction With Warm Walls"
  1128. X    ldesc = {
  1129. X        I(); "The walls are quite warm here.  From the north 
  1130. X        can be heard a steady roar, so loud that the entire 
  1131. X        cave seems to be trembling.  Another passage leads 
  1132. X        south, and a low crawl goes east.";
  1133. X    }
  1134. X    south = At_Fork_In_Path
  1135. X    fork = At_Fork_In_Path
  1136. X    north = At_Breath_Taking_View
  1137. X    view = At_Breath_Taking_View
  1138. X    east = In_Chamber_Of_Boulders
  1139. X    crawl = In_Chamber_Of_Boulders
  1140. X;
  1141. X
  1142. XAt_Breath_Taking_View: CCR_room, NoNPC
  1143. X    sdesc = "At Breath-Taking View"
  1144. X    ldesc = {
  1145. X        I(); "You are on the edge of a breath-taking view. Far 
  1146. X        below you is an active volcano, from which great 
  1147. X        gouts of molten lava come surging out, cascading back 
  1148. X        down into the depths.  The glowing rock fills the 
  1149. X        farthest reaches of the cavern with a blood-red 
  1150. X        glare, giving everything an eerie, macabre 
  1151. X        appearance. The air is filled with flickering sparks 
  1152. X        of ash and a heavy smell of brimstone.  The walls are 
  1153. X        hot to the touch, and the thundering of the volcano 
  1154. X        drowns out all other sounds.  Embedded in the jagged 
  1155. X        roof far overhead are myriad twisted formations 
  1156. X        composed of pure white alabaster, which scatter the 
  1157. X        murky light into sinister apparitions upon the walls. 
  1158. X        To one side is a deep gorge, filled with a bizarre 
  1159. X        chaos of tortured rock which seems to have been 
  1160. X        crafted by the devil himself.  An immense river of 
  1161. X        fire crashes out from the depths of the volcano, 
  1162. X        burns its way through the gorge, and plummets into a 
  1163. X        bottomless pit far off to your left.  To the right, 
  1164. X        an immense geyser of blistering steam erupts 
  1165. X        continuously from a barren island in the center of a 
  1166. X        sulfurous lake, which bubbles ominously.  The far 
  1167. X        right wall is aflame with an incandescence of its 
  1168. X        own, which lends an additional infernal splendor to 
  1169. X        the already hellish scene.  A dark, forboding passage 
  1170. X        exits to the south.";
  1171. X    }
  1172. X    south = At_Junction_With_Warm_Walls
  1173. X    passage = At_Junction_With_Warm_Walls
  1174. X    out = At_Junction_With_Warm_Walls
  1175. X    fork = At_Fork_In_Path
  1176. X    jump = { return self.down; }
  1177. X    down = {
  1178. X        "Don't be ridiculous!";
  1179. X        return nil;
  1180. X    }
  1181. X;
  1182. XVolcano: decoration
  1183. X    sdesc = "active volcano"
  1184. X    ldesc = {
  1185. X        "Great gouts of molten lava come surging out of the 
  1186. X        volvano and go cascading back down into the depths.  
  1187. X        The glowing rock fills the farthest reaches of the 
  1188. X        cavern with a blood-red glare, giving everything an 
  1189. X        eerie, macabre appearance.";
  1190. X    }
  1191. X    location = At_Breath_Taking_View
  1192. X    noun = 'volcano' 'rock'
  1193. X    adjective = 'active' 'glowing' 'blood' 'blood-red' 'red' 'eerie'
  1194. X        'macabre'
  1195. X;
  1196. XSparks: decoration
  1197. X    sdesc = "sparks of ash"
  1198. X    adesc = { self.sdesc; }
  1199. X    ldesc = {
  1200. X        "The sparks too far away for you to get a good look at 
  1201. X        them.";
  1202. X    }
  1203. X    location = At_Breath_Taking_View
  1204. X    noun = 'spark' 'sparks' 'ash' 'air'
  1205. X    adjective = 'flickering'
  1206. X;
  1207. XJaggedRoof: decoration
  1208. X    sdesc = "jagged roof"
  1209. X    ldesc = {
  1210. X        "Embedded in the jagged roof far overhead are myriad 
  1211. X        twisted formations composed of pure white alabaster, 
  1212. X        which scatter the murky light into sinister 
  1213. X        apparitions upon the walls.";
  1214. X    }
  1215. X    location = At_Breath_Taking_View
  1216. X    noun = 'roof' 'formations' 'light' 'apparaitions'
  1217. X    adjective = 'jagged' 'twsited' 'murky' 'sinister'
  1218. X;
  1219. XDeepGorge: decoration
  1220. X    sdesc = "deep gorge"
  1221. X    ldesc = {
  1222. X        "The gorge is filled with a bizarre chaos of tortured 
  1223. X        rock which seems to have been crafted by the devil 
  1224. X        himself.";
  1225. X    }
  1226. X    location = At_Breath_Taking_View
  1227. X    noun = 'gorge' 'chaos' 'rock'
  1228. X    adjective = 'deep' 'bizarre' 'tortured'
  1229. X;
  1230. XRiverOfFire: decoration
  1231. X    sdesc = "river of fire"
  1232. X    ldesc = {
  1233. X        "The river of fire crashes out from the depths of the 
  1234. X        volcano, burns its way through the gorge, and 
  1235. X        plummets into a bottomless pit far off to your 
  1236. X        left.";
  1237. X    }
  1238. X    location = At_Breath_Taking_View
  1239. X    noun = 'river' 'fire' 'depth' 'pit'
  1240. X    adjective = 'fire' 'firey' 'bottomless'
  1241. X;
  1242. XGeyser: decoration
  1243. X    sdesc = "immense geyser"
  1244. X    ldesc = {
  1245. X        "The geyser of blistering steam erupts continuously 
  1246. X        from a barren island in the center of a sulfurous 
  1247. X        lake, which bubbles ominously.";
  1248. X    }
  1249. X    location = At_Breath_Taking_View
  1250. X    noun = 'geyser' 'steam' 'island' 'lake'
  1251. X    adjective = 'immense' 'blistering' 'barren' 'sulfrous'
  1252. X        'sulferous' 'sulpherous' 'sulphrous' 'bubbling'
  1253. X;
  1254. X
  1255. XIn_Chamber_Of_Boulders: CCR_room, NoNPC
  1256. X    sdesc = "In Chamber of Boulders"
  1257. X    ldesc = {
  1258. X        I(); "You are in a small chamber filled with large 
  1259. X        boulders.  The walls are very warm, causing the air 
  1260. X        in the room to be almost stifling from the heat.  The 
  1261. X        only exit is a crawl heading west, through which is 
  1262. X        coming a low rumbling.";
  1263. X    }
  1264. X    west = At_Junction_With_Warm_Walls
  1265. X    out = At_Junction_With_Warm_Walls
  1266. X    crawl = At_Junction_With_Warm_Walls
  1267. X    fork = At_Fork_In_Path
  1268. X    view = At_Breath_Taking_View
  1269. X;
  1270. XChamberBoulders: CCR_decoration
  1271. X    sdesc = "boulders"
  1272. X    ldesc = "They're just ordinary boulders.  They're warm."
  1273. X    noun = 'boulder' 'boulders' 'rocks' 'stones'
  1274. X    location = In_Chamber_Of_Boulders
  1275. X;
  1276. X
  1277. XIn_Limestone_Passage: CCR_room, NoNPC
  1278. X    sdesc = "In Limestone Passage"
  1279. X    ldesc = {
  1280. X        I(); "You are walking along a gently sloping 
  1281. X        north/south passage lined with oddly shaped limestone 
  1282. X        formations.";
  1283. X    }
  1284. X    north = At_Fork_In_Path
  1285. X    up = At_Fork_In_Path
  1286. X    fork = At_Fork_In_Path
  1287. X    south = In_Front_Of_Barren_Room
  1288. X    down = In_Front_Of_Barren_Room
  1289. X    barren = In_Front_Of_Barren_Room
  1290. X    view = At_Breath_Taking_View
  1291. X;
  1292. XLimestoneFormations: decoration
  1293. X    sdesc = "limestone formations"
  1294. X    ldesc = {
  1295. X        "Every now and then a particularly strange shape
  1296. X        catches your eye.";
  1297. X    }
  1298. X    location = In_Limestone_Passage
  1299. X    noun = 'formations' 'shape' 'shapes'
  1300. X    adjective = 'lime' 'limestone' 'stone' 'oddly' 'shaped'
  1301. X        'oddly-shaped'
  1302. X;
  1303. X
  1304. X
  1305. XIn_Front_Of_Barren_Room: CCR_room, NoNPC
  1306. X    sdesc = "In Front of Barren Room"
  1307. X    ldesc = {
  1308. X        I(); "You are standing at the entrance to a large, 
  1309. X        barren room.  A sign posted above the entrance reads: 
  1310. X        \"Caution!  Bear in room!\"";
  1311. X    }
  1312. X    west = In_Limestone_Passage
  1313. X    up = In_Limestone_Passage
  1314. X    fork = At_Fork_In_Path
  1315. X    east = In_Barren_Room
  1316. X    in = In_Barren_Room
  1317. X    barren = In_Barren_Room
  1318. X    enter = In_Barren_Room
  1319. X    view = At_Breath_Taking_View
  1320. X;
  1321. XBarrenSign: CCR_decoration, readable
  1322. X    sdesc = "sign"
  1323. X    ldesc = { self.readdesc; }
  1324. X    readdesc = {
  1325. X        "The sign reads, \"Caution!  Bear in room!\"";
  1326. X    }
  1327. X
  1328. X    noun = 'sign'
  1329. X    adjective = 'barren' 'room'
  1330. X
  1331. X    location = In_Front_Of_Barren_Room
  1332. X;
  1333. X
  1334. XIn_Barren_Room: CCR_room, NoNPC
  1335. X    sdesc = "In Barren Room"
  1336. X    ldesc = {
  1337. X        I(); "You are inside a barren room.  The center of 
  1338. X        the room is completely empty except for some dust.  
  1339. X        Marks in the dust lead away toward the far end of the 
  1340. X        room.  The only exit is the way you came in.";
  1341. X    }
  1342. X    west = In_Front_Of_Barren_Room
  1343. X    out = In_Front_Of_Barren_Room
  1344. X    fork = At_Fork_In_Path
  1345. X    view = At_Breath_Taking_View
  1346. X;
  1347. XDust: CCR_decoration
  1348. X    sdesc = "dust"
  1349. X    ldesc = { "It just looks like ordinary dust."; }
  1350. X    location = In_Barren_Room
  1351. X    noun = 'dust' 'marks'
  1352. X;
  1353. XBear: Actor
  1354. X    rhetoricalturn = -999    // hack -- see yesVerb in ccr-verbs.t
  1355. X
  1356. X    exists = true
  1357. X
  1358. X    istame = nil        // has the bear been fed?
  1359. X    isfollowing = nil    // is the bear following the player?
  1360. X    wasreleased = nil    // has the bear been unchained yet?
  1361. X
  1362. X    sdesc = "large bear"
  1363. X    ldesc = {
  1364. X        "The bear is extremely large, ";
  1365. X
  1366. X        if (self.istame)
  1367. X            "but appears to be friendly.";
  1368. X        else
  1369. X            "and seems quite ferocious!";
  1370. X    }
  1371. X
  1372. X    //
  1373. X    // Can't use actorDesc because we our location is a method,
  1374. X    // so we're not ever really contained in a room.  We've
  1375. X    // hacked adv.t to make this work by checking the bear
  1376. X    // explicitly.
  1377. X    //
  1378. X    actorDesc = {
  1379. X        if (self.isIn(Me.location)) {
  1380. X            P(); I();
  1381. X
  1382. X            if (self.isfollowing) {
  1383. X                "You are being followed by a very 
  1384. X                large, tame bear.";
  1385. X            }
  1386. X            else if (self.istame) {
  1387. X                if (not self.wasreleased and
  1388. X                self.isIn(In_Barren_Room)) {
  1389. X
  1390. X                    "There is a gentle cave bear 
  1391. X                    sitting placidly in one 
  1392. X                    corner.";
  1393. X                }
  1394. X                else
  1395. X                    "There is a contented-looking 
  1396. X                    bear wandering about 
  1397. X                    nearby.";
  1398. X            }
  1399. X            else {
  1400. X                "There is a ferocious cave bear 
  1401. X                eyeing you from the far end of the 
  1402. X                room!";
  1403. X            }
  1404. X        }
  1405. X    }
  1406. X
  1407. X    noun = 'bear'
  1408. X    adjective = 'large' 'tame' 'ferocious' 'cave'
  1409. X
  1410. X    locationOK = true    // tell compiler OK for location to be method
  1411. X    location = {
  1412. X        if (self.exists) {
  1413. X            if (self.isfollowing)
  1414. X                return Me.location;
  1415. X            else
  1416. X                return In_Barren_Room;
  1417. X        }
  1418. X        else
  1419. X            return nil;
  1420. X    }
  1421. X
  1422. X    verDoKick(actor) =  {
  1423. X        if (self.istame)
  1424. X            self.onlyfriend;
  1425. X        else
  1426. X            "You obviously have not fully grasped the 
  1427. X            gravity of the situation.  Do get a grip on 
  1428. X            yourself.";
  1429. X    }
  1430. X    verDoAttack(actor) = {
  1431. X        if (self.istame)
  1432. X            self.onlyfriend;
  1433. X        else if (not axe.isIn(Me))
  1434. X            self.bearhands;
  1435. X    }
  1436. X    doAttack(actor) = { self.doAttackWith(actor, axe); }
  1437. X
  1438. X    verDoAttackWith(actor, io) = {
  1439. X        if (self.istame)
  1440. X            self.onlyfriend;
  1441. X    }
  1442. X    doAttackWith(actor, io) = {
  1443. X        //
  1444. X        // If the player throws the axe at the bear, the
  1445. X        // axe misses and becomes inaccessible.  (Doh!)
  1446. X        //
  1447. X        if (io = axe) {
  1448. X            "The axe misses and lands near the bear where 
  1449. X            you can't get at it.";
  1450. X
  1451. X            axe.moveInto(self.location);
  1452. X            axe.nograb := true;        // little hack
  1453. X        }
  1454. X        else if (io = Hands)
  1455. X            self.nicetry;
  1456. X        else
  1457. X            self.verDoAttack(actor);
  1458. X    }
  1459. X
  1460. X    onlyfriend = {
  1461. X        "The bear is confused; he only wants to be your 
  1462. X        friend.";
  1463. X    }
  1464. X    bearhands = {
  1465. X        "With what?  Your bare hands?  Against *his* bear 
  1466. X        hands??";
  1467. X
  1468. X        self.rhetoricalturn := global.turnsofar;
  1469. X    }
  1470. X    nicetry = {
  1471. X        "Nice try, but sorry.";
  1472. X    }
  1473. X    
  1474. X    verIoGiveTo(actor) = {}
  1475. X    ioGiveTo(actor, dobj) = {
  1476. X        if (dobj = tasty_food) {
  1477. X            self.doFeed(Me);
  1478. X        }
  1479. X        else {
  1480. X            if (self.istame)
  1481. X                "The bear doesn't seem very 
  1482. X                interested in your offer.";
  1483. X            else
  1484. X                "Uh-oh -- your offer only makes the bear 
  1485. X                angrier!";
  1486. X        }
  1487. X    }
  1488. X
  1489. X    verIoThrowAt(actor) = { self.verIoGiveTo(actor); }
  1490. X    ioThrowAt(actor, dobj) = {
  1491. X        if (dobj = axe)
  1492. X            self.doAttackWith(actor, dobj);
  1493. X        else
  1494. X            self.ioGiveTo(actor, dobj);
  1495. X    }
  1496. X    verIoThrowTo(actor) = { self.verIoGiveTo(actor); }
  1497. X    ioThrowTo(actor, dobj) = {
  1498. X        if (dobj = axe)
  1499. X            self.doAttackWith(actor, dobj);
  1500. X        else
  1501. X            self.ioGiveTo(actor, dobj);
  1502. X    }
  1503. X
  1504. X    verDoFeed(actor) = {}
  1505. X    doFeed(actor) = {
  1506. X        if (tasty_food.isIn(Me)) {
  1507. X            "The bear eagerly wolfs down your food, after 
  1508. X            which he seems to calm down considerably and 
  1509. X            even becomes rather friendly.";
  1510. X
  1511. X            tasty_food.moveInto(nil);
  1512. X            self.istame := true;
  1513. X            axe.nograb := nil;
  1514. X        }
  1515. X        else if (self.istame) {
  1516. X            "You have nothing left to give the bear.";
  1517. X        }
  1518. X        else {
  1519. X            "The bear seems more likely to eat *you*
  1520. X            than anything you've got on you!";
  1521. X        }
  1522. X    }
  1523. X
  1524. X    verDoDrop(actor) = {
  1525. X        if (not self.isfollowing)
  1526. X            "The bear isn't following you.";
  1527. X    }
  1528. X    doDrop(actor) = {
  1529. X        if (Troll.isIn(Me.location)) {
  1530. X            "The bear lumbers toward the troll, who lets 
  1531. X            out a startled shriek and scurries away.  The 
  1532. X            bear soon gives up the pursuit and wanders 
  1533. X            back.";
  1534. X
  1535. X            Troll.moveInto(nil);
  1536. X            self.isfollowing := nil;
  1537. X        }
  1538. X        else {
  1539. X            "The bear wanders away from you.";
  1540. X        }
  1541. X    }
  1542. X
  1543. X    verDoTake(actor) = {
  1544. X        if (not self.istame)
  1545. X            "Surely you're joking!";
  1546. X        else if (not self.wasreleased)
  1547. X            "The bear is still chained to the wall.";
  1548. X    }
  1549. X    doTake(actor) = {
  1550. X        self.isfollowing := true;
  1551. X        "Ok, the bear's now following you around.";
  1552. X    }
  1553. X;
  1554. X
  1555. XDifferent_Maze_3: CCR_room
  1556. X    sdesc = "Maze of Twisting Little Passage, All Different"
  1557. X    ldesc = {
  1558. X        I(); "You are in a maze of twisting little passages, 
  1559. X        all different.";
  1560. X    }
  1561. X    west = Different_Maze_1
  1562. X    se = Different_Maze_4
  1563. X    nw = Different_Maze_5
  1564. X    sw = Different_Maze_6
  1565. X    ne = Different_Maze_7
  1566. X    up = Different_Maze_8
  1567. X    down = Different_Maze_9
  1568. X    north = Different_Maze_10
  1569. X    south = Different_Maze_11
  1570. X    east = Different_Maze_2
  1571. X;
  1572. X
  1573. XDifferent_Maze_4: CCR_room
  1574. X    sdesc = "Little Maze of Twisty Passages, All Different"
  1575. X    ldesc = {
  1576. X        I(); "You are in a little maze of twisty passages, 
  1577. X        all different.";
  1578. X    }
  1579. X    nw = Different_Maze_1
  1580. X    up = Different_Maze_3
  1581. X    north = Different_Maze_5
  1582. X    south = Different_Maze_6
  1583. X    west = Different_Maze_7
  1584. X    sw = Different_Maze_8
  1585. X    ne = Different_Maze_9
  1586. X    east = Different_Maze_10
  1587. X    down = Different_Maze_11
  1588. X    se = Different_Maze_2
  1589. X;
  1590. X
  1591. XDifferent_Maze_5: CCR_room
  1592. X    sdesc = "Twisting Maze of Little Passages, All Different"
  1593. X    ldesc = {
  1594. X        I(); "You are in a twisting maze of little passages, 
  1595. X        all different.";
  1596. X    }
  1597. X    up = Different_Maze_1
  1598. X    down = Different_Maze_3
  1599. X    west = Different_Maze_4
  1600. X    ne = Different_Maze_6
  1601. X    sw = Different_Maze_7
  1602. X    east = Different_Maze_8
  1603. X    north = Different_Maze_9
  1604. X    nw = Different_Maze_10
  1605. X    se = Different_Maze_11
  1606. X    south = Different_Maze_2
  1607. X;
  1608. X
  1609. XDifferent_Maze_6: CCR_room
  1610. X    sdesc = "Twisting Little Maze of Passages, All Different"
  1611. X    ldesc = {
  1612. X        I(); "You are in a twisting little maze of passages, 
  1613. X        all different.";
  1614. X    }
  1615. X    ne = Different_Maze_1
  1616. X    north = Different_Maze_3
  1617. X    nw = Different_Maze_4
  1618. X    se = Different_Maze_5
  1619. X    east = Different_Maze_7
  1620. X    down = Different_Maze_8
  1621. X    south = Different_Maze_9
  1622. X    up = Different_Maze_10
  1623. X    west = Different_Maze_11
  1624. X    sw = Different_Maze_2
  1625. X;
  1626. X
  1627. XDifferent_Maze_7: CCR_room
  1628. X    sdesc = "Twisty Little Maze of Passages, All Different"
  1629. X    ldesc = {
  1630. X        I(); "You are in a twisty little maze of passages, 
  1631. X        all different.";
  1632. X    }
  1633. X    north = Different_Maze_1
  1634. X    se = Different_Maze_3
  1635. X    down = Different_Maze_4
  1636. X    south = Different_Maze_5
  1637. X    east = Different_Maze_6
  1638. X    west = Different_Maze_8
  1639. X    sw = Different_Maze_9
  1640. X    ne = Different_Maze_10
  1641. X    nw = Different_Maze_11
  1642. X    up = Different_Maze_2
  1643. X;
  1644. X
  1645. XDifferent_Maze_8: CCR_room
  1646. X    sdesc = "Twisty Maze of Little Passages, All Different"
  1647. X    ldesc = {
  1648. X        I(); "You are in a twisty maze of little passages, 
  1649. X        all different.";
  1650. X    }
  1651. X    east = Different_Maze_1
  1652. X    west = Different_Maze_3
  1653. X    up = Different_Maze_4
  1654. X    sw = Different_Maze_5
  1655. X    down = Different_Maze_6
  1656. X    south = Different_Maze_7
  1657. X    nw = Different_Maze_9
  1658. X    se = Different_Maze_10
  1659. X    ne = Different_Maze_11
  1660. X    north = Different_Maze_2
  1661. X;
  1662. X
  1663. XDifferent_Maze_9: CCR_room
  1664. X    sdesc = "Little Twisty Maze of Passages, All Different"
  1665. X    ldesc = {
  1666. X        I(); "You are in a little twisty maze of passages, 
  1667. X        all different.";
  1668. X    }
  1669. X    se = Different_Maze_1
  1670. X    ne = Different_Maze_3
  1671. X    south = Different_Maze_4
  1672. X    down = Different_Maze_5
  1673. X    up = Different_Maze_6
  1674. X    nw = Different_Maze_7
  1675. X    north = Different_Maze_8
  1676. X    sw = Different_Maze_10
  1677. X    east = Different_Maze_11
  1678. X    west = Different_Maze_2
  1679. X;
  1680. X
  1681. XDifferent_Maze_10: CCR_room
  1682. X    sdesc = "Maze of Little Twisting Passages, All Different"
  1683. X    ldesc = {
  1684. X        I(); "You are in a maze of little twisting passages, 
  1685. X        all different.";
  1686. X    }
  1687. X    down = Different_Maze_1
  1688. X    east = Different_Maze_3
  1689. X    ne = Different_Maze_4
  1690. X    up = Different_Maze_5
  1691. X    west = Different_Maze_6
  1692. X    north = Different_Maze_7
  1693. X    south = Different_Maze_8
  1694. X    se = Different_Maze_9
  1695. X    sw = Different_Maze_11
  1696. X    nw = Different_Maze_2
  1697. X;
  1698. X
  1699. XDifferent_Maze_11: CCR_room
  1700. X    sdesc = "Maze of Little Twisty Passages, All Different"
  1701. X    ldesc = {
  1702. X        I(); "You are in a maze of little twisty passages, 
  1703. X        all different.";
  1704. X    }
  1705. X    sw = Different_Maze_1
  1706. X    nw = Different_Maze_3
  1707. X    east = Different_Maze_4
  1708. X    west = Different_Maze_5
  1709. X    north = Different_Maze_6
  1710. X    down = Different_Maze_7
  1711. X    se = Different_Maze_8
  1712. X    up = Different_Maze_9
  1713. X    south = Different_Maze_10
  1714. X    ne = Different_Maze_2
  1715. X;
  1716. X
  1717. X/*
  1718. X * We don't allow NPC's here because it would be *really* bogus
  1719. X * if the pirate stole the batteries right after the player bought
  1720. X * them.
  1721. X */
  1722. XDead_End_14: CCR_dead_end_room, NoNPC
  1723. X    sdesc = "At a Dead End, in Front of a Massive Vending Machine"
  1724. X    ldesc = {
  1725. X        I(); "You have reached a dead end. There is a massive 
  1726. X        vending machine here.";
  1727. X
  1728. X        if (PirateMessage.isIn(self)) {
  1729. X            P();
  1730. X            I(); "Hmmm...  There is a message here 
  1731. X            scrawled in the dust in a flowery script.";
  1732. X        }
  1733. X    }
  1734. X
  1735. X    north = Different_Maze_2
  1736. X    out = Different_Maze_2
  1737. X;
  1738. XVendingMachine: CCR_decoration, readable
  1739. X    sdesc = "vending machine"
  1740. X    ldesc = { self.readdesc; }
  1741. X    readdesc = {
  1742. X        "The instructions on the vending machine read, 
  1743. X        \"Insert coins to receive fresh batteries.\"";
  1744. X    }
  1745. X    location = Dead_End_14
  1746. X    noun = 'machine' 'slot'
  1747. X    adjective = 'vending' 'massive' 'battery' 'coin'
  1748. X
  1749. X    verIoPutIn(actor) = {}
  1750. X    ioPutIn(actor, dobj) = {
  1751. X        if (dobj = rare_coins) {
  1752. X            "Soon after you insert the coins in the coin 
  1753. X            slot, the vending machines makes a griding 
  1754. X            sound, and a set of fresh batteries falls at 
  1755. X            your feet.";
  1756. X
  1757. X            dobj.moveInto(nil);
  1758. X            fresh_batteries.moveInto(self.location);
  1759. X        }
  1760. X        else {
  1761. X            "The machine seems to be designed to take 
  1762. X            coins.";
  1763. X        }
  1764. X    }
  1765. X
  1766. X    verDoKick(actor) = {}
  1767. X    doKick(actor) = {
  1768. X        "<WHUMP!> You boot the machine, but to no avail.";
  1769. X    }
  1770. X    verDoBreak(actor) = {}
  1771. X    doBreak(actor) = {
  1772. X        "The machine is quite stury and survives your attack
  1773. X        without getting so much as a scratch.";
  1774. X    }
  1775. X    verDoAttack(actor) = { self.verDoBreak(actor); }
  1776. X    doAttack(actor) = { self.doBreak(actor); }
  1777. X    verDoAttackWith(actor, io) = { self.verDoAttack(actor); }
  1778. X    doAttackWith(actor) = { self.doAttack(actor); }
  1779. X
  1780. X    verDoLookbehind(actor) = {
  1781. X        "You don't find anything behind the vending machine.";
  1782. X    }
  1783. X    verDoLookunder(actor) = {
  1784. X        "You don't find anything behind the under machine.";
  1785. X    }
  1786. X    verDoMove(actor) = { "The vending machine is far too heavy to move."; }
  1787. X;
  1788. XPirateMessage: CCR_decoration, readable
  1789. X    sdesc = "message in the dust"
  1790. X    ldesc = {
  1791. X        "The message reads, \"This is not the maze where the 
  1792. X        pirate leaves his treasure chest.\"";
  1793. X    }
  1794. X    noun = 'message' 'scrawl' 'writing' 'script'
  1795. X    adjective = 'scrawled' 'flowery'
  1796. X    location = nil    // moved to Dead_End_14 when pirate spotted
  1797. X;
  1798. X
  1799. X/*
  1800. X * Endgame locations
  1801. X *
  1802. X * We make these NoNPC rooms so that dwarves and pirate don't get
  1803. X * teleported here when (if) they get stuck trying to move around
  1804. X * the cave.  (The dwarves in here aren't real actors because they
  1805. X * kill the player immediately if they're awake.)
  1806. X */
  1807. XAt_Ne_End: CCR_room, lightroom, NoNPC
  1808. X    sdesc = "At NE End"
  1809. X    ldesc = {
  1810. X        I(); "You are at the northeast end of an immense 
  1811. X        room, even larger than the giant room.  It appears to 
  1812. X        be a repository for the \"Adventure\" program.  
  1813. X        Massive torches far overhead bathe the room with 
  1814. X        smoky yellow light.  Scattered about you can be seen 
  1815. X        a pile of bottles (all of them empty), a nursery of 
  1816. X        young beanstalks murmuring quietly, a bed of oysters, 
  1817. X        a bundle of black rods with rusty stars on their 
  1818. X        ends, and a collection of brass lanterns.  Off to one 
  1819. X        side a great many dwarves are sleeping on the floor, 
  1820. X        snoring loudly.  A sign nearby reads: \"Do not 
  1821. X        disturb the dwarves!\""; P();
  1822. X
  1823. X        I(); "An immense mirror is hanging against one wall, 
  1824. X        and stretches to the other end of the room, where 
  1825. X        various other sundry objects can be glimpsed dimly in 
  1826. X        the distance.";
  1827. X    }
  1828. X    sw = At_Sw_End
  1829. X;
  1830. XMirror_2: CCR_decoration
  1831. X    sdesc = "enormous mirror"
  1832. X    ldesc = "It looks like an ordinary, albeit enormous, mirror."
  1833. X    noun = 'mirror'
  1834. X    adjective = 'enormous' 'huge' 'big' 'large' 'suspended'
  1835. X        'hanging' 'vanity' 'dwarvish'
  1836. X
  1837. X    locationOK = true    // OK for location to be method
  1838. X    location = {
  1839. X        if (Me.isIn(At_Ne_End))
  1840. X            return At_Ne_End;
  1841. X        else
  1842. X            return At_Sw_End;
  1843. X    }
  1844. X
  1845. X    verDoBreak(actor) = {}
  1846. X    doBreak(actor) = {
  1847. X        "You strike the mirror a resounding blow, whereupon 
  1848. X        it shatters into a myriad tiny fragments.";
  1849. X
  1850. X        //
  1851. X        // A very bad move...
  1852. X        //
  1853. X        end_dwarves();
  1854. X    }
  1855. X    verDoAttack(actor) = { self.verDoBreak(actor); }
  1856. X    doAttack(actor) = { self.doBreak(actor); }
  1857. X    verDoAttackWith(actor, io) = { self.verDoAttack(actor); }
  1858. X    doAttackWith(actor) = { self.doAttack(actor); }
  1859. X    verDoKick(actor) = { self.verDoBreak(actor); }
  1860. X    doKick(actor) = { self.doBreak(actor); }
  1861. X;
  1862. XRepositoryStuff_1: CCR_decoration
  1863. X    sdesc = "collection of adventure game materials"
  1864. X    ldesc = {
  1865. X        "You've seen everything in here already, albeit
  1866. X        in somewhat different contexts.";
  1867. X    }
  1868. X    location = At_Ne_End
  1869. X    noun = 'stuff' 'junk' 'materials' 'torches' 'objects'
  1870. X    adjective = 'adventure' 'repository' 'massive' 'sundry'
  1871. X
  1872. X    verifyRemove(actor) = {
  1873. X        "Realizing that by removing the loot here you'd be 
  1874. X        ruining the game for future players, you leave the 
  1875. X        \"Adventure\" materials where they are.";
  1876. X    }
  1877. X;
  1878. XRepositoryDwarves: CCR_decoration
  1879. X    sdesc = "sleeping dwarves"
  1880. X    adesc = { self.sdesc; }
  1881. X    ldesc = {
  1882. X        "I wouldn't bother the dwarves if I were you.";
  1883. X    }
  1884. X    location = At_Ne_End
  1885. X    noun = 'dwarf' 'dwarves'
  1886. X    adjective = 'sleeping' 'snoring' 'dozing' 'snoozing'
  1887. X
  1888. X    verDoWake(actor) = {}
  1889. X    doWake(actor) = {
  1890. X        "You prod the nearest dwarf, who wakes up grumpily, 
  1891. X        takes one look at you, curses, and grabs for his 
  1892. X        axe.";
  1893. X
  1894. X        end_dwarves();
  1895. X    }
  1896. X    verDoAttack(actor) = {}
  1897. X    doAttack(actor) = { self.doWake(actor); }
  1898. X    verDoKick(actor) = {}
  1899. X    doKick(actor) = { self.doWake(actor); }
  1900. X;
  1901. XRepositoryPlant: CCR_decoration
  1902. X    location = At_Ne_End
  1903. X;
  1904. X
  1905. XAt_Sw_End: CCR_room, lightroom, NoNPC
  1906. X    sdesc = "At SW End"
  1907. X    ldesc = {
  1908. X        I(); "You are at the southwest end of the repository. 
  1909. X        To one side is a pit full of fierce green snakes. On 
  1910. X        the other side is a row of small wicker cages, each 
  1911. X        of which contains a little sulking bird.  In one 
  1912. X        corner is a bundle of black rods with rusty marks on 
  1913. X        their ends.  A large number of velvet pillows are 
  1914. X        scattered about on the floor. A vast mirror stretches 
  1915. X        off to the northeast. At your feet is a large steel 
  1916. X        grate, next to which is a sign which reads, 
  1917. X        \"TREASURE VAULT. Keys in main office.\"";
  1918. X    }
  1919. X    ne = At_Ne_End
  1920. X    down = {
  1921. X        RepositoryGrate.doEnter(Me);
  1922. X        return nil;
  1923. X    }
  1924. X;
  1925. XRepositoryGrate: fixeditem, keyedLockable
  1926. X    isopen = nil
  1927. X    islocked = true
  1928. X    sdesc = "steel grate"
  1929. X    ldesc = {
  1930. X        "It just looks like an ordinary steel grate.";
  1931. X
  1932. X        " It is ";
  1933. X        if (self.isopen)
  1934. X            "open.";
  1935. X        else if (self.islocked) 
  1936. X            "closed and locked.";
  1937. X        else 
  1938. X            "closed.";
  1939. X    }
  1940. X    noun = 'grate' 'lock' 'gate' 'grille'
  1941. X    adjective = 'metal' 'strong' 'steel' 'open' 'closed' 'locked'
  1942. X        'unlocked'
  1943. X
  1944. X    location = At_Sw_End
  1945. X
  1946. X    mykey = nil    // no key for this one
  1947. X
  1948. X    verDoEnter(actor) = {}
  1949. X    doEnter(actor) = {
  1950. X        if (not Grate.islocked) {
  1951. X            if (not Grate.isopen) {
  1952. X                "(Opening the grate first.)\b";
  1953. X                Grate.isopen := true;
  1954. X                        
  1955. X            }
  1956. X            if (actor.isIn(Outside_Grate))
  1957. X                actor.travelTo(Below_The_Grate);
  1958. X            else
  1959. X                actor.travelTo(Outside_Grate);
  1960. X        }
  1961. X        else {
  1962. X            "You can't go through a locked steel grate!";
  1963. X        }
  1964. X    }
  1965. X    
  1966. X    verIoPutIn(actor) = { "You can't put anything in that! "; }
  1967. X    verDoPick = { "You have no tools to pick the lock with."; }
  1968. X;
  1969. X
  1970. XRepositoryStuff_2: CCR_decoration
  1971. X    sdesc = "collection of adventure game materials"
  1972. X    ldesc = {
  1973. X        "You've seen everything in here already, albeit
  1974. X        in somewhat different contexts.";
  1975. X    }
  1976. X    location = At_Sw_End
  1977. X
  1978. X    verifyRemove(actor) = {
  1979. X        "Realizing that by removing the loot here you'd be 
  1980. X        ruining the game for future players, you leave the 
  1981. X        \"Adventure\" meterials where they are.";
  1982. X    }
  1983. X
  1984. X    noun = 'pit' 'snake' 'snakes' 
  1985. X    adjective = 'fierce' 'green'
  1986. X;
  1987. X
  1988. X/*
  1989. X * Miscellaneous messages
  1990. X */
  1991. Xbroken_neck: object
  1992. X    death = {
  1993. X        "You are at the bottom of the pit with a broken neck.";
  1994. X        die();
  1995. X        return nil;
  1996. X    }
  1997. X;
  1998. Xdidnt_make_it: object
  1999. X    death = {
  2000. X        "You didn't make it.";
  2001. X        die();
  2002. X        return nil;
  2003. X    }
  2004. X;
  2005. Xcrawled_around: object
  2006. X    message = {
  2007. X        "You have crawled around in some little holes and 
  2008. X        wound up back in the main passage.";
  2009. X
  2010. X        return nil;
  2011. X    }
  2012. X;
  2013. Xwontfit: object
  2014. X    message = {
  2015. X        "Something you're carrying won't fit through the 
  2016. X        tunnel with you. You'd best take inventory and drop 
  2017. X        something.";
  2018. X
  2019. X        return nil;
  2020. X    }
  2021. X;
  2022. X
  2023. X/*
  2024. X * Room feature decorations.
  2025. X * These don't give any new information, but they make the program
  2026. X * seem less brain-damaged.
  2027. X */
  2028. XTheRoom: CCR_decoration
  2029. X    sdesc = "room"
  2030. X    ldesc = {
  2031. X        // Upon "examine room" we just give the standard
  2032. X        // description for the current location.
  2033. X        Me.location.lookAround(true);
  2034. X    }
  2035. X    noun = 'room' 'anteroom' 'dark-room' 'darkroom'
  2036. X    adjective = 'debris' 'low' 'twopit' 'large' 'lighted' 'slab'
  2037. X        'giant' 'soft' 'oriental' 'dark' 'immense' 'barren'
  2038. X        'bear-in' 'bearin'
  2039. X    locationOK = true     // tell compiler OK for location to be method
  2040. X    location = {
  2041. X        return Me.location;    // always where player is
  2042. X    }
  2043. X;
  2044. XHands: CCR_decoration    // the player's hands
  2045. X    sdesc = "your hands"
  2046. X    adesc = { self.sdesc; }
  2047. X    thedesc = { self.sdesc; }
  2048. X
  2049. X    ldesc = "The look pretty normal to me."
  2050. X
  2051. X    noun = 'hands'
  2052. X    adjective = 'my' 'bare' 'hands'
  2053. X
  2054. X    locationOK = true     // tell compiler OK for location to be method
  2055. X    location = {
  2056. X        return Me.location;    // always where player is
  2057. X    }
  2058. X;
  2059. X
  2060. Xclass rfd: floatingdecoration
  2061. X    ldesc = "You know as much as I do at this point."
  2062. X;
  2063. XCrawl: rfd
  2064. X    sdesc = "crawl"
  2065. X    noun = 'crawl' 'crawls'
  2066. X    adjective = 'cobble' 'low' 'wide' 'higher' 'dead' 'end' 'tight'
  2067. X    loclist = [
  2068. X        Below_The_Grate  In_Cobble_Crawl  In_Debris_Room
  2069. X        In_Dirty_Passage  On_Brink_Of_Pit
  2070. X        At_West_End_Of_Hall_Of_Mists  At_East_End_Of_Long_Hall
  2071. X        At_Complex_Junction  In_Large_Low_Room  Dead_End_Crawl
  2072. X        In_Tall_E_W_Canyon  In_Oriental_Room
  2073. X        At_Junction_With_Warm_Walls  In_Chamber_Of_Boulders
  2074. X    ]
  2075. X;
  2076. XChamber: rfd
  2077. X    sdesc = "chamber"
  2078. X    noun = 'chamber'
  2079. X    adjective = 'small' 'splendid' 'south' 'side' 'west' 'large'
  2080. X            'low' 'circular'
  2081. X    loclist = [
  2082. X        Below_The_Grate  In_Bird_Chamber  In_South_Side_Chamber
  2083. X        In_West_Side_Chamber  In_Slab_Room  In_Plover_Room
  2084. X        In_Chamber_Of_Boulders
  2085. X    ]
  2086. X;
  2087. XPassage: rfd
  2088. X    sdesc = "passage"
  2089. X    noun = 'passage' 'opening' 'openings' 'corridor' 'corridors'
  2090. X        'path' 'paths'
  2091. X    adjective = 'low' 'wide' 'plugged' 'good' 'east' 'small' 'twisty'
  2092. X        'little' 'n/s' 'e/w' 'dirty' 'broken' 'high' 'long'
  2093. X        'large' 'walking' 'sizeable' 'sizable' 'cavernous'
  2094. X        'blocked' 'immense' 'gently' 'sloping' 'coral'
  2095. X        'shallow' 'somewhat' 'steeper' 'dark' 'forboding'
  2096. X    loclist = [
  2097. X        In_Cobble_Crawl In_Debris_Room 
  2098. X        In_Awkward_Sloping_E_W_Canyon In_Bird_Chamber 
  2099. X        At_Top_Of_Small_Pit In_Hall_Of_Mists 
  2100. X        On_East_Bank_Of_Fissure In_Nugget_Of_Gold_Room 
  2101. X        In_Hall_Of_Mt_King At_West_End_Of_Twopit_Room 
  2102. X        In_East_Pit In_West_Pit West_Side_Of_Fissure 
  2103. X        Low_N_S_Passage In_South_Side_Chamber 
  2104. X        In_West_Side_Chamber At_Y2 Jumble_Of_Rock 
  2105. X        At_Window_On_Pit_1 In_Dirty_Passage On_Brink_Of_Pit 
  2106. X        In_Pit In_Dusty_Rock_Room 
  2107. X        At_West_End_Of_Hall_Of_Mists Alike_Maze_1 
  2108. X        Alike_Maze_2 Alike_Maze_3 Alike_Maze_4 Dead_End_1 
  2109. X        Dead_End_2 Dead_End_3 Alike_Maze_5 Alike_Maze_6 
  2110. X        Alike_Maze_7 Alike_Maze_8 Alike_Maze_9 Dead_End_4 
  2111. X        Alike_Maze_10 Dead_End_5 At_Brink_Of_Pit Dead_End_6 
  2112. X        At_East_End_Of_Long_Hall At_West_End_Of_Long_Hall 
  2113. X        Crossover Dead_End_7 At_Complex_Junction In_Bedquilt 
  2114. X        In_Swiss_Cheese_Room At_East_End_Of_Twopit_Room 
  2115. X        In_Slab_Room In_Secret_N_S_Canyon_0 
  2116. X        In_Secret_N_S_Canyon_1 
  2117. X        At_Junction_Of_Three_Secret_Canyons In_Large_Low_Room 
  2118. X        Dead_End_Crawl 
  2119. X        In_Secret_E_W_Canyon In_N_S_Canyon 
  2120. X        Canyon_Dead_End In_Tall_E_W_Canyon Dead_End_8 
  2121. X        Alike_Maze_11 Dead_End_9 Dead_End_10 Alike_Maze_12 
  2122. X        Alike_Maze_13 Dead_End_11 Dead_End_12 Alike_Maze_14 
  2123. X        In_Narrow_Corridor At_Steep_Incline_Above_Large_Room 
  2124. X        In_Giant_Room At_Recent_Cave_In 
  2125. X        In_Immense_N_S_Passage In_Cavern_With_Waterfall 
  2126. X        In_Soft_Room In_Oriental_Room In_Misty_Cavern 
  2127. X        In_Alcove In_Plover_Room In_Dark_Room In_Arched_Hall 
  2128. X        In_Shell_Room In_Ragged_Corridor In_A_Cul_De_Sac 
  2129. X        In_Anteroom Different_Maze_1 At_Witts_End 
  2130. X        In_Mirror_Canyon At_Window_On_Pit_2 Atop_Stalactite 
  2131. X        Different_Maze_2 At_Reservoir Dead_End_13 At_Ne_End 
  2132. X        At_Sw_End On_Sw_Side_Of_Chasm In_Sloping_Corridor 
  2133. X        In_Secret_Canyon  On_Ne_Side_Of_Chasm In_Corridor 
  2134. X        At_Fork_In_Path At_Junction_With_Warm_Walls 
  2135. X        At_Breath_Taking_View In_Chamber_Of_Boulders 
  2136. X        In_Limestone_Passage In_Front_Of_Barren_Room 
  2137. X        In_Barren_Room Different_Maze_3 Different_Maze_4 
  2138. X        Different_Maze_5 Different_Maze_6 Different_Maze_7 
  2139. X        Different_Maze_8 Different_Maze_9 Different_Maze_10 
  2140. X        Different_Maze_11 Dead_End_14
  2141. X    ]
  2142. X;
  2143. XCanyon: rfd
  2144. X    sdesc = "canyon"
  2145. X    noun = 'canyon' 'canyons'
  2146. X    adjective = 'awkward' 'sloping' 'secret' 'e/w' 'n/s' 'tight'
  2147. X            'tall' 'three'
  2148. X    loclist = [
  2149. X        In_Debris_Room  In_Awkward_Sloping_E_W_Canyon
  2150. X        In_Bird_Chamber  In_Secret_N_S_Canyon_0
  2151. X        In_Secret_N_S_Canyon_1  At_Junction_Of_Three_Secret_Canyons
  2152. X        In_Secret_E_W_Canyon  In_N_S_Canyon
  2153. X        Canyon_Dead_End  In_Tall_E_W_Canyon  Dead_End_8
  2154. X        In_Mirror_Canyon  In_Secret_Canyon
  2155. X    ]
  2156. X;
  2157. XWalls: rfd
  2158. X    sdesc = "walls"
  2159. X    noun = 'wall' 'walls' 'cracks' 'ceiling' 
  2160. X    adjective = 'orange' 'stone' 'swiss' 'cheese' 'cave' 'cavern'
  2161. X            'ragged' 'sharp' 'canyon' 'warm' 'hot' 'building'
  2162. X            'well' 'house' 'wellhouse'
  2163. X    loclist = [
  2164. X        Inside_Building In_Cobble_Crawl In_Debris_Room 
  2165. X        In_Awkward_Sloping_E_W_Canyon In_Bird_Chamber 
  2166. X        At_Top_Of_Small_Pit In_Hall_Of_Mists 
  2167. X        On_East_Bank_Of_Fissure In_Nugget_Of_Gold_Room 
  2168. X        In_Hall_Of_Mt_King At_West_End_Of_Twopit_Room 
  2169. X        In_East_Pit In_West_Pit West_Side_Of_Fissure 
  2170. X        Low_N_S_Passage In_South_Side_Chamber 
  2171. X        In_West_Side_Chamber At_Y2 Jumble_Of_Rock 
  2172. X        At_Window_On_Pit_1 In_Dirty_Passage On_Brink_Of_Pit 
  2173. X        In_Pit In_Dusty_Rock_Room 
  2174. X        At_West_End_Of_Hall_Of_Mists Alike_Maze_1 
  2175. X        Alike_Maze_2 Alike_Maze_3 Alike_Maze_4 Dead_End_1 
  2176. X        Dead_End_2 Dead_End_3 Alike_Maze_5 Alike_Maze_6 
  2177. X        Alike_Maze_7 Alike_Maze_8 Alike_Maze_9 Dead_End_4 
  2178. X        Alike_Maze_10 Dead_End_5 At_Brink_Of_Pit Dead_End_6 
  2179. X        At_East_End_Of_Long_Hall At_West_End_Of_Long_Hall 
  2180. X        Crossover Dead_End_7 At_Complex_Junction In_Bedquilt 
  2181. X        In_Swiss_Cheese_Room At_East_End_Of_Twopit_Room 
  2182. X        In_Slab_Room In_Secret_N_S_Canyon_0 
  2183. X        In_Secret_N_S_Canyon_1 
  2184. X        At_Junction_Of_Three_Secret_Canyons In_Large_Low_Room 
  2185. X        Dead_End_Crawl 
  2186. X        In_Secret_E_W_Canyon In_N_S_Canyon 
  2187. X        Canyon_Dead_End In_Tall_E_W_Canyon Dead_End_8 
  2188. X        Alike_Maze_11 Dead_End_9 Dead_End_10 Alike_Maze_12 
  2189. X        Alike_Maze_13 Dead_End_11 Dead_End_12 Alike_Maze_14 
  2190. X        In_Narrow_Corridor At_Steep_Incline_Above_Large_Room 
  2191. X        In_Giant_Room At_Recent_Cave_In 
  2192. X        In_Immense_N_S_Passage In_Cavern_With_Waterfall 
  2193. X        In_Soft_Room In_Oriental_Room In_Misty_Cavern 
  2194. X        In_Alcove In_Plover_Room In_Dark_Room In_Arched_Hall 
  2195. X        In_Shell_Room In_Ragged_Corridor In_A_Cul_De_Sac 
  2196. X        In_Anteroom Different_Maze_1 At_Witts_End 
  2197. X        In_Mirror_Canyon At_Window_On_Pit_2 Atop_Stalactite 
  2198. X        Different_Maze_2 At_Reservoir Dead_End_13 At_Ne_End 
  2199. X        At_Sw_End On_Sw_Side_Of_Chasm In_Sloping_Corridor 
  2200. X        In_Secret_Canyon  On_Ne_Side_Of_Chasm  In_Corridor 
  2201. X        At_Fork_In_Path At_Junction_With_Warm_Walls 
  2202. X        At_Breath_Taking_View In_Chamber_Of_Boulders 
  2203. X        In_Limestone_Passage In_Front_Of_Barren_Room 
  2204. X        In_Barren_Room Different_Maze_3 Different_Maze_4 
  2205. X        Different_Maze_5 Different_Maze_6 Different_Maze_7 
  2206. X        Different_Maze_8 Different_Maze_9 Different_Maze_10 
  2207. X        Different_Maze_11 Dead_End_14
  2208. X    ]
  2209. X;
  2210. XDeadEnd: rfd
  2211. X    sdesc = "dead end"
  2212. X    noun = 'end'
  2213. X    adjective = 'dead'
  2214. X    loclist = [
  2215. X        Dead_End_1 Dead_End_2 Dead_End_3 Dead_End_4 
  2216. X        Dead_End_5 Dead_End_6 Dead_End_7 Dead_End_Crawl 
  2217. X        Canyon_Dead_End Dead_End_8 Dead_End_9 Dead_End_10 
  2218. X        Dead_End_11 Dead_End_12 Dead_End_13 Dead_End_14
  2219. X    ]
  2220. X;
  2221. XHall: rfd
  2222. X    sdesc = "hall"
  2223. X    noun = 'hall'
  2224. X    adjective = 'vast' 'long' 'featureless' 'arched'
  2225. X    loclist = [
  2226. X        In_Hall_Of_Mists  On_East_Bank_Of_Fissure
  2227. X        In_Hall_Of_Mt_King  West_Side_Of_Fissure
  2228. X        In_West_Side_Chamber  At_West_End_Of_Hall_Of_Mists
  2229. X        At_East_End_Of_Long_Hall At_West_End_Of_Long_Hall
  2230. X        In_Arched_Hall
  2231. X    ]
  2232. X;
  2233. XHole: rfd
  2234. X    sdesc = "hole"
  2235. X    noun = 'hole' 'holes'
  2236. X    adjective = 'large' 'big' 'round' 'two' 'foot' 'two-foot'
  2237. X    loclist = [
  2238. X        At_East_End_Of_Twopit_Room
  2239. X        In_West_Pit  Low_N_S_Passage  In_Dirty_Passage
  2240. X        In_Dusty_Rock_Room  At_East_End_Of_Long_Hall
  2241. X        In_Bedquilt  In_Narrow_Corridor  In_Cavern_With_Waterfall
  2242. X        At_Reservoir
  2243. X    ]
  2244. X;
  2245. XJunction: rfd
  2246. X    sdesc = "junction"
  2247. X    noun = 'junction'
  2248. X    adjective = 'complex'
  2249. X    loclist = [
  2250. X        At_Complex_Junction  At_Junction_Of_Three_Secret_Canyons
  2251. X        At_Junction_With_Warm_Walls
  2252. X    ]
  2253. X;
  2254. XAir: rfd    // If they MUST examine EVERYTHING
  2255. X    sdesc = "air"
  2256. X    adesc = "air"
  2257. X    noun = 'air' 'environment' 'atmosphere' 'wind'
  2258. X    adjective = 'sea' 'damp' 'hot' 'stifling'
  2259. X    locationOK = true     // tell compiler OK for location to be method
  2260. X    location = {
  2261. X        return Me.location;    // always where player is
  2262. X    }
  2263. X    verDoSmell(actor) = {}
  2264. X    doSmell(actor) = {
  2265. X        "The air smells pretty much like you would expect.";
  2266. X    }
  2267. X;
  2268. END_OF_FILE
  2269. if test 57507 -ne `wc -c <'src/ccr-room.t2'`; then
  2270.     echo shar: \"'src/ccr-room.t2'\" unpacked with wrong size!
  2271. fi
  2272. # end of 'src/ccr-room.t2'
  2273. fi
  2274. echo shar: End of archive 2 \(of 11\).
  2275. cp /dev/null ark2isdone
  2276. MISSING=""
  2277. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2278.     if test ! -f ark${I}isdone ; then
  2279.     MISSING="${MISSING} ${I}"
  2280.     fi
  2281. done
  2282. if test "${MISSING}" = "" ; then
  2283.     echo You have unpacked all 11 archives.
  2284.     echo "Now run buildit.sh to make gam file"
  2285.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2286. else
  2287.     echo You still need to unpack the following archives:
  2288.     echo "        " ${MISSING}
  2289. fi
  2290. ##  End of shell archive.
  2291. exit 0
  2292.