home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / volume18 / ccr / part03 < prev    next >
Encoding:
Internet Message Format  |  1993-07-18  |  60.6 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: v18i018:  ccr - colossal cave (adventure) implemented in TADS, Part03/11
  5. Date: 12 Jul 1993 19:28:38 GMT
  6. Organization: Tektronix, Inc, Redmond, OR, USA
  7. Lines: 2438
  8. Approved: billr@saab.CNA.TEK.COM
  9. Message-ID: <21se16$1cr@ying.cna.tek.com>
  10. NNTP-Posting-Host: saab.cna.tek.com
  11. Xref: uunet comp.sources.games:1818
  12.  
  13. Submitted-by: David Baggett <dmb@xbar.ai.mit.edu>
  14. Posting-number: Volume 18, Issue 18
  15. Archive-name: ccr/part03
  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 3 (of 11)."
  27. # Contents:  readme.unix src/ccr-room.t1
  28. # Wrapped by billr@saab on Mon Jul 12 12:02:43 1993
  29. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  30. if test -f 'readme.unix' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'readme.unix'\"
  32. else
  33. echo shar: Extracting \"'readme.unix'\" \(286 characters\)
  34. sed "s/^X//" >'readme.unix' <<'END_OF_FILE'
  35. X
  36. XNote to Unix users:
  37. X
  38. XAlthough the order.frm doesn't mention Unix versions, we do plan to
  39. Xmake Unix packages of our commercial games as well.  Since there are
  40. Xmany machines and many media types to consider, we're still working out
  41. Xthe details.
  42. X
  43. XStay tuned!
  44. X
  45. XDave Baggett
  46. Xdmb@ai.mit.edu
  47. END_OF_FILE
  48. if test 286 -ne `wc -c <'readme.unix'`; then
  49.     echo shar: \"'readme.unix'\" unpacked with wrong size!
  50. fi
  51. # end of 'readme.unix'
  52. fi
  53. if test -f 'src/ccr-room.t1' -a "${1}" != "-c" ; then 
  54.   echo shar: Will not clobber existing file \"'src/ccr-room.t1'\"
  55. else
  56. echo shar: Extracting \"'src/ccr-room.t1'\" \(57085 characters\)
  57. sed "s/^X//" >'src/ccr-room.t1' <<'END_OF_FILE'
  58. X/*
  59. X * Colossal Cave Revisited
  60. X *
  61. X * A remake of Willie Crowther and Don Woods' classic Adventure.
  62. X * Converted from Donald Ekman's PC port of the original FORTRAN source.
  63. X * TADS version by David M. Baggett for ADVENTIONS.
  64. X *
  65. X * Please document all changes in the history so we know who did what.
  66. X *
  67. X * This source code is copylefted under the terms of the GNU Public
  68. X * License.  Essentially, this means that you are free to do whatever
  69. X * you wish with this source code, provided you do not charge any
  70. X * money for it or for any derivative works.
  71. X *
  72. X * ADVENTIONS distributes this game, but you are free to do what you will
  73. X * with it, provided you adhere to the terms in the GNU Public License.
  74. X * Send correspondence regarding this game or original works distributed
  75. X * by ADVENTIONS to 
  76. X *
  77. X *    ADVENTIONS
  78. X *    PO Box 851
  79. X *    Columbia, MD 21044
  80. X *
  81. X * If you would like a catalog of releases, please enclose a SASE.  Thanks!
  82. X *
  83. X * Contributors
  84. X *
  85. X *    dmb    In real life:    David M. Baggett
  86. X *        Internet:    <dmb@ai.mit.edu>
  87. X *        Compu$erve:    76440,2671 (ADVENTIONS account)
  88. X *        GEnie:        ADVENTIONS
  89. X *
  90. X * Modification History
  91. X *
  92. X *  1-Jan-93    dmb    rec.arts.int-fiction BETA release (source only)
  93. X *                      For beta testing only -- not for general
  94. X *            distribution.
  95. X * 20-Apr-93    dmb    Added the stream decoration to Inside_Building
  96. X *            you can get water there.
  97. X *
  98. X */
  99. X
  100. X/*
  101. X * This file defines all the locations.
  102. X */
  103. X
  104. X/*
  105. X * First we need to define a new class for our rooms.
  106. X * In the original fortran version of the game, you could move around
  107. X * by naming adjacent places.  Since we want to retain this capability,
  108. X * we need to augment the existing set of room movement methods.
  109. X *
  110. X * We also make rooms dark by default.
  111. X *
  112. X * We also need a few things to help our NPC's move about the cave
  113. X * without getting stuck or wandering where they're not supposed to.
  114. X *
  115. X * IMPORTANT NOTE: If you add exit properties (i.e., things like
  116. X * out, east, down, etc.), be sure to update the exitlist in ccr-npc.t
  117. X * or NPC's won't know to look at them, and might get stuck!
  118. X */
  119. Xclass CCR_room: darkroom
  120. X    //
  121. X    // By default, exits don't go anywhere.
  122. X    //
  123. X    // The directional ones call noexit, the standard TADS
  124. X    // "You can't go that way" method.
  125. X    //
  126. X    // The magic words print "Nothing happens."
  127. X    //
  128. X    // For the other words, the game tells the player it
  129. X    // doesn't know how to apply the word in the given
  130. X    // location.
  131. X    //
  132. X    jump = { "I don't see how that will help here."; return nil; }
  133. X
  134. X    //
  135. X    // Directions
  136. X    //
  137. X    upstream = { return self.noexit; }
  138. X    downstream = { return self.noexit; }
  139. X    forwards = { return self.noexit; }
  140. X    outdoors = { return self.noexit; }
  141. X    left = { return self.noexit; }
  142. X    right = { return self.noexit; }
  143. X    cross = { return self.noexit; }
  144. X    over = { return self.noexit; }
  145. X    across = { return self.noexit; }
  146. X
  147. X    //
  148. X    // Magic words
  149. X    //
  150. X    // Note that it's important to have these implemented as travel
  151. X    // verbs because once the cave closes, these stop working just
  152. X    // like the usual travel verbs.
  153. X    //
  154. X    // Non-travel magic words are defined in ccr-verbs.t
  155. X    //
  156. X    xyzzy = { return self.nothinghappens; }
  157. X    y2 = { return self.nothinghappens; }
  158. X    plugh = { return self.nothinghappens; }
  159. X    plover = { return self.nothinghappens; }
  160. X
  161. X    //
  162. X    // Feature names
  163. X    //
  164. X    // These allow limited teleporting to prominent locations.
  165. X    //
  166. X    road = { return self.doesnotapplyhere; }
  167. X    forest = { return self.doesnotapplyhere; }
  168. X    valley = { return self.doesnotapplyhere; }
  169. X    stairs = { return self.doesnotapplyhere; }
  170. X    building = { return self.doesnotapplyhere; }
  171. X    gully = { return self.doesnotapplyhere; }
  172. X    stream = { return self.doesnotapplyhere; }
  173. X    rock = { return self.doesnotapplyhere; }
  174. X    bed = { return self.doesnotapplyhere; }
  175. X    crawl = { return self.doesnotapplyhere; }
  176. X    cobble = { return self.doesnotapplyhere; }
  177. X    tosurface = { return self.doesnotapplyhere; }
  178. X    dark = { return self.doesnotapplyhere; }
  179. X    passage = { return self.doesnotapplyhere; }
  180. X    low = { return self.doesnotapplyhere; }
  181. X    canyon = { return self.doesnotapplyhere; }
  182. X    awkward = { return self.doesnotapplyhere; }
  183. X    giant = { return self.doesnotapplyhere; }
  184. X    view = { return self.doesnotapplyhere; }
  185. X    pit = { return self.doesnotapplyhere; }
  186. X    crack = { return self.doesnotapplyhere; }
  187. X    steps = { return self.doesnotapplyhere; }
  188. X    dome = { return self.doesnotapplyhere; }
  189. X    hall = { return self.doesnotapplyhere; }
  190. X    barren = { return self.doesnotapplyhere; }
  191. X    debris = { return self.doesnotapplyhere; }
  192. X    hole = { return self.doesnotapplyhere; }
  193. X    wall = { return self.doesnotapplyhere; }
  194. X    broken = { return self.doesnotapplyhere; }
  195. X    floor = { return self.doesnotapplyhere; }
  196. X    toroom = { return self.doesnotapplyhere; }
  197. X    slit = { return self.doesnotapplyhere; }
  198. X    slab = { return self.doesnotapplyhere; }
  199. X    depression = { return self.doesnotapplyhere; }
  200. X    entrance = { return self.doesnotapplyhere; }
  201. X    secret = { return self.doesnotapplyhere; }
  202. X    cave = { return self.doesnotapplyhere; }
  203. X    bedquilt = { return self.doesnotapplyhere; }
  204. X    oriental = { return self.doesnotapplyhere; }
  205. X    cavern = { return self.doesnotapplyhere; }
  206. X    shell = { return self.doesnotapplyhere; }
  207. X    reservoir = { return self.doesnotapplyhere; }
  208. X    main = { return self.doesnotapplyhere; }
  209. X    office = { return self.doesnotapplyhere; }
  210. X    fork = { return self.doesnotapplyhere; }
  211. X
  212. X    nothinghappens = {
  213. X        "Nothing happens.";
  214. X        return nil;
  215. X    }
  216. X    doesnotapplyhere = {
  217. X        "I don't know how to apply that word here.";
  218. X        return nil;
  219. X    }
  220. X
  221. X    //
  222. X    // Exits for NPC's.  Since NPC's won't take regular exits
  223. X    // that are methods (instead of simple object names), we
  224. X    // have to add "hints" in some rooms to allow complete access
  225. X    // to all rooms.  By default, these are all nil.  (Note that
  226. X    // it is important for them to be nil ojects, and not methods
  227. X    // that return nil.  If they are methods, NPC's will try them.)
  228. X    //
  229. X    NPCexit1 = nil
  230. X    NPCexit2 = nil
  231. X    NPCexit3 = nil
  232. X    NPCexit4 = nil
  233. X    NPCexit5 = nil
  234. X    NPCexit6 = nil
  235. X    NPCexit7 = nil
  236. X    NPCexit8 = nil
  237. X
  238. X    //
  239. X    // Each room has a list of exit properties that can be considered by
  240. X    // NPC's.  The lists is determined at preinit time by looking
  241. X    // at all the exit methods and discarding those that are methods.
  242. X    // (The NPCexits are always considered, whether they are methods
  243. X    // or not, since they're guranteed not to print anything or
  244. X    // change game state when they're run.)
  245. X    //
  246. X    // Note: the list doesn't contain locations; it contains properties;
  247. X    // i.e., it contains [ &west &up ... ], not [ At_Y2 ... ].
  248. X    //
  249. X    NPCexits = []
  250. X;
  251. X
  252. X/*
  253. X * A class for the rooms in the "alike" maze.
  254. X */
  255. Xclass CCR_alike_maze_room: CCR_room
  256. X    sdesc = "Maze of Twisty Little Passages, All Alike"
  257. X    ldesc = {
  258. X        I(); "You are in a maze of twisty little passages, 
  259. X        all alike.";
  260. X    }
  261. X;
  262. X
  263. X/*
  264. X * A class for rooms that are forbidden to non-player characters.
  265. X * (This means dwarves and pirate, not bear.)
  266. X *
  267. X * All pits inherit this class because the original source claims
  268. X * that dwarves won't follow the player into a pit, even though
  269. X * they do.  It makes more sense for them to give up the chase
  270. X * when the player scrambles down into a pit, and for that matter
  271. X * it may sound a bit funny for a combat to occur in a little pit,
  272. X  * so I've add NoNPC too all the pit rooms.
  273. X */
  274. Xclass NoNPC: CCR_room
  275. X    noNPCs = true
  276. X;
  277. X
  278. X/*
  279. X * A class for the dead ends.
  280. X */
  281. Xclass CCR_dead_end_room: CCR_room
  282. X    sdesc = "At a Dead End"
  283. X    ldesc = {
  284. X        I(); "You have reached a dead end.";
  285. X    }
  286. X;
  287. X
  288. X/*
  289. X * A class for areas that are naturally lit.
  290. X */
  291. Xclass lightroom: CCR_room
  292. X    islit = true
  293. X;
  294. X
  295. X/*
  296. X * A class for rooms that are outside.
  297. X * These rooms are off limits once the cave is closed.
  298. X */
  299. Xclass Outside: CCR_room
  300. X    isoutside = true
  301. X;
  302. X
  303. X/*
  304. X * A class for rooms that aren't far enough in to earn the player
  305. X * the bonus for getting "well in."
  306. X *
  307. X * See the definition of Me in ccr-std.t for info on how this is used.
  308. X */
  309. Xclass NotFarIn: CCR_room, NoNPC
  310. X    notfarin = true
  311. X;
  312. X
  313. Xclass CCR_decoration: decoration;
  314. X
  315. X/*
  316. X * This class lets us easily define a decoration that's in multiple
  317. X * places at once.  You just list the locations it appears in in
  318. X * a list called loclist.
  319. X *
  320. X * This is particularly nice for things like water, which can be
  321. X * manipulated -- we only have one object name to consider (Stream)
  322. X * for all the water in the game that can be taken.  (See ioPutIn
  323. X * for the bottle in ccr-item.t)
  324. X */
  325. Xclass floatingdecoration: CCR_decoration
  326. X    locationOK = true    // OK for location to be method
  327. X    location = {
  328. X        if (find(self.loclist, Me.location))
  329. X            return Me.location;
  330. X        else
  331. X            return nil;
  332. X    }
  333. X;
  334. X
  335. X/*
  336. X * The locations
  337. X */
  338. XAt_End_Of_Road: CCR_room, lightroom, NotFarIn, Outside
  339. X    sdesc = "At End Of Road"
  340. X    ldesc = {
  341. X        I(); "You are standing at the end of a road before a 
  342. X        small brick building. Around you is a forest.  A 
  343. X        small stream flows out of the building and down a 
  344. X        gully.";
  345. X    }
  346. X    road = At_Hill_In_Road
  347. X    west = At_Hill_In_Road
  348. X    up = At_Hill_In_Road
  349. X    building = Inside_Building
  350. X    in = Inside_Building
  351. X    east = Inside_Building
  352. X    downstream = In_A_Valley
  353. X    gully = In_A_Valley
  354. X    stream = In_A_Valley
  355. X    south = In_A_Valley
  356. X    down = In_A_Valley
  357. X    forest = In_Forest_1
  358. X    north = In_Forest_1
  359. X    depression = Outside_Grate
  360. X
  361. X    // This was in the original fortran code, but conflicts
  362. X    // with the fact that the building is to the east:
  363. X    // east = In_Forest
  364. X;
  365. XBuilding: floatingdecoration
  366. X    sdesc = "building"
  367. X    ldesc = {
  368. X        if (Me.isIn(Inside_Building))
  369. X            "You're in it.";
  370. X        else
  371. X            "It's a small brick building.  It seems to be 
  372. X            a well house.";
  373. X    }
  374. X    noun = 'building' 'house' 'wellhouse'
  375. X    adjective = 'well' 'small' 'brick'
  376. X    loclist = [ At_End_Of_Road  At_Hill_In_Road  Inside_Building ]
  377. X
  378. X    verDoEnter(actor) = {}
  379. X    doEnter(actor) = {
  380. X        actor.travelTo(At_End_Of_Road.in);
  381. X    }
  382. X;
  383. XRoad: floatingdecoration
  384. X    sdesc = "road"
  385. X    noun = 'road' 'street' 'path'
  386. X    adjective = 'dirt'
  387. X    loclist = [ At_End_Of_Road  At_Hill_In_Road  In_Forest_2 ]
  388. X;
  389. XForest: floatingdecoration
  390. X    sdesc = "forest"
  391. X    adesc = "forest"
  392. X    ldesc = {
  393. X        "The trees of the forest are large hardwood oak and 
  394. X        maple, with an occasional grove of pine or spruce.  
  395. X        There is quite a bit of undergrowth, largely birch 
  396. X        and ash saplings plus nondescript bushes of various 
  397. X        sorts.  This time of year visibility is quite 
  398. X        restricted by all the leaves, but travel is quite 
  399. X        easy if you detour around the spruce and berry 
  400. X        bushes.";
  401. X    }
  402. X
  403. X    noun = 'forest' 'tree' 'trees' 'oak' 'maple' 'grove' 'pine'
  404. X        'spruce' 'birch' 'ash' 'saplings' 'bushes' 'leaves'
  405. X        'berry' 'berries'
  406. X    adjective = 'surrounding' 'open' 'hardwood' 'oak' 'maple' 'pine'
  407. X        'spruce' 'birch' 'ash' 'berry'
  408. X    loclist = [
  409. X        At_End_Of_Road  At_Hill_In_Road  In_A_Valley
  410. X        In_Forest_1  In_Forest_2
  411. X    ]
  412. X;
  413. XStream: floatingdecoration
  414. X    sdesc = "stream"
  415. X    ldesc = {
  416. X        if (Me.isIn(Inside_Building))
  417. X            "The stream flows out through a pair of 1 
  418. X            foot diameter sewer pipes.";
  419. X        else
  420. X            pass ldesc;
  421. X    }
  422. X    noun = 'stream' 'water' 'brook' 'river' 'lake'
  423. X    adjective = 'small' 'tumbling' 'splashing' 'babbling' 'rushing'
  424. X        'reservoir'
  425. X    loclist = [
  426. X        At_End_Of_Road  In_A_Valley  At_Slit_In_Streambed
  427. X        In_Pit  In_Cavern_With_Waterfall  At_Reservoir
  428. X        Inside_Building
  429. X    ]
  430. X
  431. X    verDoDrink(actor) = {}
  432. X    doDrink(actor) = {
  433. X        "You have taken a drink from the stream.  The water 
  434. X        tastes strongly of minerals, but is not unpleasant.  
  435. X        It is extremely cold.";
  436. X    }
  437. X
  438. X    verDoTake(actor) = {
  439. X        if (not bottle.isIn(Me))
  440. X            "You have nothing in which to carry the water.";
  441. X    }
  442. X    doTake(actor) = {
  443. X        bottle.ioPutIn(actor, self);
  444. X    }
  445. X    verDoPutIn(actor, io) = {}
  446. X    doPutIn(actor, io) = {
  447. X        if (io <> bottle)
  448. X            "You have nothing in which to carry the water.";
  449. X        else
  450. X            bottle.ioPutIn(actor, self);
  451. X    }
  452. X;
  453. XGully: floatingdecoration
  454. X    sdesc = "gully"
  455. X    noun = 'gully'
  456. X    loclist = [ At_End_Of_Road  At_Slit_In_Streambed  Outside_Grate ]
  457. X;
  458. X
  459. XAt_Hill_In_Road: CCR_room, lightroom, NotFarIn, Outside
  460. X    sdesc = "At Hill In Road"
  461. X    ldesc = {
  462. X        I(); "You have walked up a hill, still in the forest. 
  463. X        The road slopes back down the other side of the 
  464. X        hill.  There is a building in the distance.";
  465. X    }
  466. X    road = At_End_Of_Road
  467. X    building = At_End_Of_Road
  468. X    forwards = At_End_Of_Road
  469. X    east = At_End_Of_Road
  470. X    north = At_End_Of_Road
  471. X    down = At_End_Of_Road
  472. X    forest = In_Forest_1
  473. X    south = In_Forest_1
  474. X
  475. X    // Another bug in the original code:
  476. X    // north = In_Forest
  477. X;
  478. XHill: CCR_decoration
  479. X    sdesc = "hill"
  480. X    ldesc = "It's just a typical hill."
  481. X    noun = 'hill' 'bump' 'incline'
  482. X    location = At_Hill_In_Road
  483. X;
  484. XOtherSideOfHill: CCR_decoration
  485. X    sdesc = "other side of hill"
  486. X    thedesc = "the other side of the hill"
  487. X    adesc = { self.thedesc; }
  488. X    ldesc = "Why not explore it yourself?"
  489. X    noun = 'side'
  490. X    adjective = 'other'
  491. X    location = At_Hill_In_Road
  492. X;
  493. X
  494. XInside_Building: CCR_room, lightroom, NotFarIn, Outside
  495. X    sdesc = "Inside Building"
  496. X    ldesc = {
  497. X        I(); "You are inside a building, a well house for a 
  498. X        large spring.";
  499. X    }
  500. X    out = At_End_Of_Road
  501. X    outdoors = At_End_Of_Road
  502. X    west = At_End_Of_Road
  503. X    xyzzy = In_Debris_Room
  504. X    plugh = At_Y2
  505. X    downstream = { return self.stream; }
  506. X    stream = {
  507. X        "The stream flows out through a pair of 1 foot 
  508. X        diameter sewer pipes. It would be advisable to use 
  509. X        the exit.";
  510. X
  511. X        return nil;
  512. X    }
  513. X;
  514. XSpring: CCR_decoration
  515. X    sdesc = "spring"
  516. X    location = Inside_Building
  517. X    noun = 'spring'
  518. X    adjective = 'large'
  519. X;
  520. XSewerPipes: CCR_decoration
  521. X    sdesc = "pair of 1 foot diameter sewer pipes"
  522. X    location = Inside_Building
  523. X    noun = 'pipes' 'pipe'
  524. X    adjective = 'one' 'foot' '1-foot' 'diameter' 'sewer'
  525. X;
  526. X
  527. XIn_A_Valley: CCR_room, lightroom, NotFarIn, Outside
  528. X    sdesc = "In A Valley"
  529. X    ldesc = {
  530. X        I(); "You are in a valley in the forest beside a 
  531. X        stream tumbling along a rocky bed.";
  532. X    }
  533. X    upstream = At_End_Of_Road
  534. X    building = At_End_Of_Road
  535. X    north = At_End_Of_Road
  536. X    forest = In_Forest_1
  537. X    east = In_Forest_1
  538. X    west = In_Forest_1
  539. X    up = In_Forest_1
  540. X    downstream = At_Slit_In_Streambed
  541. X    south = At_Slit_In_Streambed
  542. X    down = At_Slit_In_Streambed
  543. X    depression = Outside_Grate
  544. X;
  545. XStreambed: floatingdecoration
  546. X    sdesc = "streambed"
  547. X    noun = 'bed' 'streambed' 'rock'
  548. X    adjective = 'stream' 'water' 'river' 'small' 'tumbling' 'splashing'
  549. X            'babbling' 'rushing' 'rocky' 'bare' 'dry'
  550. X    loclist = [ In_A_Valley  At_Slit_In_Streambed  Outside_Grate ]
  551. X;
  552. XValley: floatingdecoration
  553. X    sdesc = "valley"
  554. X    ldesc = {
  555. X        if (Me.isIn(In_A_Valley))
  556. X            "You're in it.";
  557. X        else
  558. X            pass ldesc;
  559. X    }
  560. X    noun = 'valley'
  561. X    adjective = 'deep'
  562. X    loclist = [ In_A_Valley  In_Forest_1  In_Forest_2 ]
  563. X;
  564. X
  565. XIn_Forest_1: CCR_room, lightroom, NotFarIn, Outside
  566. X    sdesc = "In Forest"
  567. X    ldesc = {
  568. X        I(); "You are in open forest, with a deep valley to 
  569. X        one side.";
  570. X    }
  571. X    valley = In_A_Valley
  572. X    east = In_A_Valley
  573. X    down = In_A_Valley
  574. X
  575. X    // An approximation of the original code:
  576. X    forest = {
  577. X        if (rand(100) <= 50)
  578. X            return In_Forest_1;
  579. X        else
  580. X            return In_Forest_2;
  581. X    }
  582. X
  583. X    forwards = In_Forest_1
  584. X    north = In_Forest_1
  585. X    west = In_Forest_1
  586. X    south = In_Forest_1
  587. X;
  588. X
  589. XIn_Forest_2: CCR_room, lightroom, NotFarIn, Outside
  590. X    sdesc = "In Forest"
  591. X    ldesc = {
  592. X        I(); "You are in open forest near both a valley and a 
  593. X        road.";
  594. X    }
  595. X    road = At_End_Of_Road
  596. X    north = At_End_Of_Road
  597. X    valley = In_A_Valley
  598. X    east = In_A_Valley
  599. X    west = In_A_Valley
  600. X    down = In_A_Valley
  601. X    forest = In_Forest_1
  602. X    south = In_Forest_1
  603. X;
  604. X
  605. XAt_Slit_In_Streambed: CCR_room, lightroom, NotFarIn, Outside
  606. X    sdesc = "At Slit In Streambed"
  607. X    ldesc = {
  608. X        I(); "At your feet all the water of the stream 
  609. X        splashes into a 2-inch slit in the rock.  Downstream 
  610. X        the streambed is bare rock.";
  611. X    }
  612. X    building = At_End_Of_Road
  613. X    upstream = In_A_Valley
  614. X    north = In_A_Valley
  615. X    forest = In_Forest_1
  616. X    east = In_Forest_1
  617. X    west = In_Forest_1
  618. X    downstream = Outside_Grate
  619. X    rock = Outside_Grate
  620. X    bed = Outside_Grate
  621. X    south = Outside_Grate
  622. X
  623. X    slit = { return self.down; }
  624. X    stream = { return self.down; }
  625. X    down = {
  626. X        "You don't fit through a two-inch slit!";
  627. X        return nil;
  628. X    }
  629. X;
  630. XSlit: CCR_decoration
  631. X    sdesc = "2-inch slit"
  632. X    ldesc = "It's just a 2-inch slit in the rock, through which the
  633. X        stream is flowing."
  634. X    location = At_Slit_In_Streambed
  635. X    noun = 'slit'
  636. X    adjective = 'two' 'inch' '2-inch' 'two-inch'
  637. X;
  638. X
  639. XOutside_Grate: CCR_room, lightroom, NotFarIn, Outside
  640. X    sdesc = "Outside Grate"
  641. X    ldesc = {
  642. X        I(); "You are in a 20-foot depression floored with 
  643. X        bare dirt.  Set into the dirt is a strong steel grate 
  644. X        mounted in concrete.  A dry streambed leads into the 
  645. X        depression.";
  646. X    }
  647. X    forest = In_Forest_1
  648. X    east = In_Forest_1
  649. X    west = In_Forest_1
  650. X    south = In_Forest_1
  651. X    building = At_End_Of_Road
  652. X    upstream = At_Slit_In_Streambed
  653. X    gully = At_Slit_In_Streambed
  654. X    north = At_Slit_In_Streambed
  655. X    
  656. X    in = { return self.down; }
  657. X    down = {
  658. X        Grate.doEnter(Me);
  659. X        return nil;
  660. X    }
  661. X;
  662. XDepression: CCR_decoration
  663. X    sdesc = "20-foot depression"
  664. X    ldesc = "You're standing in it."
  665. X    location = Outside_Grate
  666. X    noun = 'depression' 'dirt'
  667. X    adjective = '20-foot' 'twenty' 'foot' 'twenty-foot' 'bare'
  668. X;
  669. XGrate: fixeditem, keyedLockable
  670. X    isopen = nil
  671. X    islocked = true
  672. X    sdesc = "steel grate"
  673. X    ldesc = {
  674. X        if (self.isIn(Outside_Grate)) {
  675. X            "It just looks like an ordinary grate
  676. X            mounted in concrete.";
  677. X        }
  678. X        else {
  679. X            "It's just a 3x3 steel grate mounted
  680. X            in the ceiling.";
  681. X        }
  682. X
  683. X        " It is ";
  684. X        if (self.isopen)
  685. X            "open.";
  686. X        else if (self.islocked) 
  687. X            "closed and locked.";
  688. X        else 
  689. X            "closed.";
  690. X    }
  691. X    noun = 'grate' 'lock' 'gate' 'grille'
  692. X    adjective = 'metal' 'strong' 'steel' 'open' 'closed' 'locked'
  693. X        'unlocked'
  694. X
  695. X    locationOK = true // Tell compiler OK for location to be method
  696. X    location = {
  697. X        if (Me.isIn(Outside_Grate))
  698. X            return Outside_Grate;
  699. X        else        
  700. X            return Below_The_Grate;
  701. X    }
  702. X    mykey = set_of_keys
  703. X
  704. X    verDoEnter(actor) = {}
  705. X    doEnter(actor) = {
  706. X        if (not Grate.islocked) {
  707. X            if (not Grate.isopen) {
  708. X                "(Opening the grate first.)\b";
  709. X                Grate.isopen := true;
  710. X                        
  711. X            }
  712. X            if (actor.isIn(Outside_Grate))
  713. X                actor.travelTo(Below_The_Grate);
  714. X            else
  715. X                actor.travelTo(Outside_Grate);
  716. X        }
  717. X        else {
  718. X            "You can't go through a locked steel grate!";
  719. X        }
  720. X    }
  721. X    
  722. X    verIoPutIn(actor) = { "You can't put anything in that! "; }
  723. X    verDoPick = { "You have no tools to pick the lock with."; }
  724. X;
  725. X
  726. XBelow_The_Grate: CCR_room, lightroom, NotFarIn
  727. X    sdesc = "Below the Grate"
  728. X    ldesc = {
  729. X        I(); "You are in a small chamber beneath a 3x3 steel 
  730. X        grate to the surface. A low crawl over cobbles leads 
  731. X        inward to the west.";
  732. X    }
  733. X    crawl = In_Cobble_Crawl
  734. X    cobble = In_Cobble_Crawl
  735. X    in = In_Cobble_Crawl
  736. X    west = In_Cobble_Crawl
  737. X    pit = At_Top_Of_Small_Pit
  738. X    debris = In_Debris_Room
  739. X
  740. X    outdoors = { return self.up; }    // DMB: added
  741. X    out = { return self.up; }
  742. X    up = {
  743. X        Grate.doEnter(Me);
  744. X        return nil;
  745. X    }
  746. X;
  747. XCobbles: floatingdecoration
  748. X    sdesc = "cobbles"
  749. X    adesc = "cobbles"
  750. X    ldesc = "They're just ordinary cobbles."
  751. X    noun = 'cobble' 'cobbles' 'cobblestones' 'cobblestone' 'stones'
  752. X        'stone'
  753. X    adjective = 'cobble'
  754. X    loclist = [ Below_The_Grate  In_Cobble_Crawl  In_Debris_Room ]
  755. X;
  756. X
  757. XIn_Cobble_Crawl: CCR_room, lightroom, NotFarIn
  758. X    sdesc = "In Cobble Crawl"
  759. X    ldesc = {
  760. X        I(); "You are crawling over cobbles in a low passage. 
  761. X        There is a dim light at the east end of the 
  762. X        passage.";
  763. X    }
  764. X    out = Below_The_Grate
  765. X    tosurface = Below_The_Grate
  766. X    east = Below_The_Grate
  767. X    in = In_Debris_Room
  768. X    dark = In_Debris_Room
  769. X    west = In_Debris_Room
  770. X    debris = In_Debris_Room
  771. X    pit = At_Top_Of_Small_Pit
  772. X
  773. X    // DMB: added the following, in accordance with its presence
  774. X    // in In_Debris_Room and rooms beyond.
  775. X    depression = {
  776. X        Grate.doEnter(Me);
  777. X
  778. X        // If the player didn't move, the grate must be
  779. X        // locked.  Move the player underneath the grate.
  780. X        if (Me.isIn(self)) {
  781. X            "\b";
  782. X            Me.travelTo(Below_The_Grate);
  783. X        }
  784. X        // We've already moved the player, but we have to
  785. X        // return a value, so just return nil (which results
  786. X        // in no more movement).
  787. X        return nil;
  788. X    }
  789. X;
  790. X
  791. XIn_Debris_Room: CCR_room, NotFarIn
  792. X    sdesc = "In Debris Room"
  793. X    ldesc = {
  794. X        I(); "You are in a debris room filled with stuff 
  795. X        washed in from the surface. A low wide passage with 
  796. X        cobbles becomes plugged with mud and debris here, but 
  797. X        an awkward canyon leads upward and west."; P();
  798. X
  799. X        I(); "A note on the wall says, \"Magic word XYZZY.\"";
  800. X    }
  801. X    entrance = Below_The_Grate
  802. X    crawl = In_Cobble_Crawl
  803. X    cobble = In_Cobble_Crawl
  804. X    passage = In_Cobble_Crawl
  805. X    low = In_Cobble_Crawl
  806. X    east = In_Cobble_Crawl
  807. X    canyon = In_Awkward_Sloping_E_W_Canyon
  808. X    in = In_Awkward_Sloping_E_W_Canyon
  809. X    up = In_Awkward_Sloping_E_W_Canyon
  810. X    west = In_Awkward_Sloping_E_W_Canyon
  811. X    xyzzy = Inside_Building
  812. X    pit = At_Top_Of_Small_Pit
  813. X
  814. X    // The original occasionally allowed the player to teleport
  815. X    // large distances in one turn.  This is just one example.
  816. X    depression = {
  817. X        Grate.doEnter(Me);
  818. X
  819. X        // If the player didn't move, the grate must be
  820. X        // locked.  Move the player underneath the grate.
  821. X        if (Me.isIn(self)) {
  822. X            "\b";
  823. X            Me.travelTo(Below_The_Grate);
  824. X        }
  825. X
  826. X        // We've already moved the player, but we have to
  827. X        // return a value, so just return nil (which results
  828. X        // in no more movement).
  829. X        return nil;
  830. X    }
  831. X;
  832. XDebris: floatingdecoration
  833. X    sdesc = "debris"
  834. X    ldesc = "Yuck."
  835. X    noun = 'debris' 'stuff' 'mud'
  836. X    loclist = [ In_Debris_Room  In_Arched_Hall ]
  837. X;
  838. XXyzzyNote: CCR_decoration, readable
  839. X    sdesc = "note"
  840. X    ldesc = { self.readdesc; }
  841. X    readdesc = "The note says \"Magic word XYZZY\"."
  842. X    noun = 'note'
  843. X    location = In_Debris_Room
  844. X;
  845. X
  846. XIn_Awkward_Sloping_E_W_Canyon: CCR_room, NotFarIn
  847. X    sdesc = "In Awkward Sloping E/W Canyon"
  848. X    ldesc = {
  849. X        I(); "You are in an awkward sloping east/west 
  850. X        canyon.";
  851. X    }
  852. X
  853. X    entrance = Below_The_Grate
  854. X    down = In_Debris_Room
  855. X    east = In_Debris_Room
  856. X    debris = In_Debris_Room
  857. X    in = In_Bird_Chamber
  858. X    up = In_Bird_Chamber
  859. X    west = In_Bird_Chamber
  860. X    pit = At_Top_Of_Small_Pit
  861. X
  862. X    depression = {
  863. X        Grate.doEnter(Me);
  864. X
  865. X        // If the player didn't move, the grate must be
  866. X        // locked.  Move the player underneath the grate.
  867. X        if (Me.isIn(self)) {
  868. X            "\b";
  869. X            Me.travelTo(Below_The_Grate);
  870. X        }
  871. X        
  872. X        // We've already moved the player, but we have to
  873. X        // return a value, so just return nil (which results
  874. X        // in no more movement).
  875. X        return nil;
  876. X    }
  877. X;
  878. X
  879. XIn_Bird_Chamber: CCR_room, NotFarIn
  880. X    sdesc = "In Bird Chamber"
  881. X    ldesc = {
  882. X        I(); "You are in a splendid chamber thirty feet high. 
  883. X        The walls are frozen rivers of orange stone.  An 
  884. X        awkward canyon and a good passage exit from east and 
  885. X        west sides of the chamber.";
  886. X    }
  887. X
  888. X    entrance = Below_The_Grate
  889. X    debris = In_Debris_Room
  890. X    canyon = In_Awkward_Sloping_E_W_Canyon
  891. X    east = In_Awkward_Sloping_E_W_Canyon
  892. X    passage = At_Top_Of_Small_Pit
  893. X    pit = At_Top_Of_Small_Pit
  894. X    west = At_Top_Of_Small_Pit
  895. X
  896. X    depression = {
  897. X        Grate.doEnter(Me);
  898. X
  899. X        // If the player didn't move, the grate must be
  900. X        // locked.  Move the player underneath the grate.
  901. X        if (Me.isIn(self)) {
  902. X            "\b";
  903. X            Me.travelTo(Below_The_Grate);
  904. X        }
  905. X
  906. X        // We've already moved the player, but we have to
  907. X        // return a value, so just return nil (which results
  908. X        // in no more movement).
  909. X        return nil;
  910. X    }
  911. X;
  912. X
  913. XAt_Top_Of_Small_Pit: CCR_room, NotFarIn
  914. X    sdesc = "At Top of Small Pit"
  915. X    ldesc = {
  916. X        // Note: this used to say "An east passage ends here..."
  917. X        // but that's obviously a mistake.
  918. X
  919. X        I(); "At your feet is a small pit breathing traces of 
  920. X        white mist.  A west passage ends here except for a 
  921. X        small crack leading on."; P();
  922. X
  923. X        I(); "Rough stone steps lead down the pit.";
  924. X    }
  925. X    entrance = Below_The_Grate
  926. X    debris = In_Debris_Room
  927. X    passage = In_Bird_Chamber
  928. X    east = In_Bird_Chamber
  929. X    crack = { return self.west; }
  930. X    west = {
  931. X        "The crack is far too small for you to follow.";
  932. X        return nil;
  933. X    }
  934. X
  935. X    down = {
  936. X        if (large_gold_nugget.isIn(Me))
  937. X            return broken_neck.death;
  938. X        else
  939. X            return In_Hall_Of_Mists;
  940. X    }
  941. X
  942. X    depression = {
  943. X        Grate.doEnter(Me);
  944. X
  945. X        // If the player didn't move, the grate must be
  946. X        // locked.  Move the player underneath the grate.
  947. X        if (Me.isIn(self)) {
  948. X            "\b";
  949. X            Me.travelTo(Below_The_Grate);
  950. X        }
  951. X        
  952. X        // We've already moved the player, but we have to
  953. X        // return a value, so just return nil (which results
  954. X        // in no more movement).
  955. X        return nil;
  956. X    }
  957. X; 
  958. XSmallPit: CCR_decoration
  959. X    sdesc = "small pit"
  960. X    ldesc = "The pit is breathing traces of white mist."
  961. X    location = At_Top_Of_Small_Pit
  962. X    noun = 'pit'
  963. X;
  964. XPitCrack: CCR_decoration
  965. X    sdesc = "crack"
  966. X    ldesc = "The crack is very small -- far too small for you to follow."
  967. X    location = At_Top_Of_Small_Pit
  968. X    noun = 'crack'
  969. X    adjective = 'small'
  970. X;
  971. XMist: floatingdecoration
  972. X    sdesc = "mist"
  973. X    ldesc = {
  974. X        "Mist is a white vapor, usually water, seen from time 
  975. X        to time in caverns.  It can be found anywhere but is 
  976. X        frequently a sign of a deep pit leading down to 
  977. X        water.";
  978. X    }
  979. X    noun = 'mist' 'vapor' 'wisps'
  980. X    adjective = 'white' 'water'
  981. X    loclist = [
  982. X        At_Top_Of_Small_Pit In_Hall_Of_Mists
  983. X        On_East_Bank_Of_Fissure  At_Window_On_Pit_1
  984. X        At_West_End_Of_Hall_Of_Mists In_Misty_Cavern
  985. X        In_Mirror_Canyon  At_Reservoir At_Window_On_Pit_2
  986. X        On_Sw_Side_Of_Chasm
  987. X    ]
  988. X;
  989. X
  990. XIn_Hall_Of_Mists: CCR_room
  991. X    sdesc = "In Hall of Mists"
  992. X    ldesc = {
  993. X        I(); "You are at one end of a vast hall stretching 
  994. X        forward out of sight to the west.  There are openings 
  995. X        to either side.  Nearby, a wide stone staircase leads 
  996. X        downward.  The hall is filled with wisps of white 
  997. X        mist swaying to and fro almost as if alive.  A cold 
  998. X        wind blows up the staircase.  There is a passage at 
  999. X        the top of a dome behind you."; P();
  1000. X
  1001. X        I(); "Rough stone steps lead up the dome.";
  1002. X    }
  1003. X    left = In_Nugget_Of_Gold_Room
  1004. X    south = In_Nugget_Of_Gold_Room
  1005. X    forwards = On_East_Bank_Of_Fissure
  1006. X    hall = On_East_Bank_Of_Fissure
  1007. X    west = On_East_Bank_Of_Fissure
  1008. X    stairs = In_Hall_Of_Mt_King
  1009. X    down = In_Hall_Of_Mt_King
  1010. X    north = In_Hall_Of_Mt_King
  1011. X    y2 = Jumble_Of_Rock
  1012. X
  1013. X    up = {
  1014. X        if (large_gold_nugget.isIn(Me)) {
  1015. X            "The dome is unclimbable.";
  1016. X            return nil;
  1017. X        }
  1018. X        else {
  1019. X            return At_Top_Of_Small_Pit;
  1020. X        }
  1021. X    }
  1022. X;
  1023. XStaircase: CCR_decoration
  1024. X    sdesc = "wide stone staircase"
  1025. X    ldesc = "The staircase leads down."
  1026. X    location = In_Hall_Of_Mists
  1027. X    noun = 'stair' 'stairs' 'staircase'
  1028. X    adjective = 'wide' 'stone'
  1029. X;
  1030. XDomeSteps: CCR_decoration
  1031. X    sdesc = "rough stone steps"
  1032. X    ldesc = "The rough stone steps lead up the dome."
  1033. X    location = In_Hall_Of_Mists
  1034. X    noun = 'stair' 'stairs' 'staircase'
  1035. X    adjective = 'rough' 'stone'
  1036. X;
  1037. XDome: CCR_decoration
  1038. X    sdesc = "dome"
  1039. X    ldesc = {
  1040. X        if (large_gold_nugget.isIn(Me))
  1041. X            "I'm not sure you'll be able to get up it
  1042. X            with what you're carrying.";
  1043. X        else
  1044. X            "It looks like you might be able to climb up it.";
  1045. X    }
  1046. X    location = In_Hall_Of_Mists
  1047. X    noun = 'dome'
  1048. X
  1049. X    verDoClimb(actor) = {}
  1050. X    doClimb(actor) = {
  1051. X        actor.travelTo(In_Hall_Of_Mists.up);
  1052. X    }
  1053. X;
  1054. X
  1055. XOn_East_Bank_Of_Fissure: CCR_room
  1056. X    sdesc = "On East Bank of Fissure"
  1057. X    ldesc = {
  1058. X        I(); "You are on the east bank of a fissure slicing 
  1059. X        clear across the hall. The mist is quite thick here, 
  1060. X        and the fissure is too wide to jump.";
  1061. X
  1062. X         if (CrystalBridge.exists) {
  1063. X            P(); I();
  1064. X            "A crystal bridge now spans the fissure.";
  1065. X        }
  1066. X    }
  1067. X    hall = In_Hall_Of_Mists
  1068. X    east = In_Hall_Of_Mists
  1069. X
  1070. X    forwards = { return self.jump; }
  1071. X    jump = {
  1072. X        if (CrystalBridge.exists) {
  1073. X            "I respectfully suggest you go across the 
  1074. X            bridge instead of jumping.";
  1075. X
  1076. X            return nil;
  1077. X        }
  1078. X        else
  1079. X            return didnt_make_it.death;
  1080. X    }
  1081. X
  1082. X    over = { return self.across; }
  1083. X    west = { return self.across; }
  1084. X    cross = { return self.across; }
  1085. X    across = {
  1086. X        CrystalBridge.doCross(Me);
  1087. X        return nil;
  1088. X    }
  1089. X
  1090. X    //
  1091. X    // NPC's can go across too, but only if the bridge exists.
  1092. X    //
  1093. X    NPCexit1 = {
  1094. X        if (CrystalBridge.exists)
  1095. X            return West_Side_Of_Fissure;
  1096. X        else
  1097. X            return nil;
  1098. X    }
  1099. X;
  1100. XBridgeFissure: floatingdecoration
  1101. X    sdesc = "fissure"
  1102. X    ldesc = {
  1103. X        if (CrystalBridge.exists)
  1104. X            "A crystal bridge now spans the fissure.";
  1105. X        else
  1106. X            "The fissure looks far too wide to jump.";
  1107. X    }
  1108. X    noun = 'fissure'
  1109. X    adjective = 'wide'
  1110. X    loclist = [ West_Side_Of_Fissure  On_East_Bank_Of_Fissure ]
  1111. X;
  1112. XCrystalBridge: CCR_decoration
  1113. X    exists = nil
  1114. X    sdesc = "Crystal bridge"
  1115. X    ldesc = "It spans the fissure, thereby providing you a way across."
  1116. X    locationOK = true    // tell compiler OK for location to be method
  1117. X    location = {
  1118. X        if (self.exists) {
  1119. X            if (Me.isIn(West_Side_Of_Fissure))
  1120. X                return West_Side_Of_Fissure;
  1121. X            else
  1122. X                return On_East_Bank_Of_Fissure;
  1123. X        }
  1124. X        else
  1125. X            return nil;
  1126. X    }
  1127. X    noun = 'bridge'
  1128. X    adjective = 'crystal' 'magic' 'rod'
  1129. X
  1130. X    verDoCross(actor) = {}
  1131. X    doCross(actor) = {
  1132. X        if (self.exists) {
  1133. X            if (actor.isIn(On_East_Bank_Of_Fissure))
  1134. X                actor.travelTo(West_Side_Of_Fissure);
  1135. X            else
  1136. X                actor.travelTo(On_East_Bank_Of_Fissure);
  1137. X        }
  1138. X        else
  1139. X            "There is no way across the fissure.";
  1140. X    }
  1141. X;
  1142. X
  1143. XIn_Nugget_Of_Gold_Room: CCR_room
  1144. X    sdesc = "In Nugget of Gold Room"
  1145. X    ldesc = {
  1146. X        I(); "This is a low room with a crude note on the 
  1147. X        wall. "; NuggetNote.readdesc;
  1148. X    }
  1149. X    hall = In_Hall_Of_Mists
  1150. X    out = In_Hall_Of_Mists
  1151. X    north = In_Hall_Of_Mists
  1152. X;
  1153. XNuggetNote: CCR_decoration, readable
  1154. X    sdesc = "note"
  1155. X    ldesc = { self.readdesc; }
  1156. X    readdesc = {
  1157. X        "The note says, \"You won't get it up the steps\".";
  1158. X    }
  1159. X    location = In_Nugget_Of_Gold_Room
  1160. X    noun = 'note'
  1161. X    adjective = 'crude'
  1162. X;
  1163. X
  1164. XIn_Hall_Of_Mt_King: CCR_room
  1165. X    sdesc = "In Hall of Mt King"
  1166. X    ldesc = {
  1167. X        I(); "You are in the hall of the mountain king, with 
  1168. X        passages off in all directions.";
  1169. X
  1170. X        if (Snake.isIn(self)) {
  1171. X            P();
  1172. X            I(); "A huge green fierce snake bars the way!";
  1173. X        }
  1174. X    }
  1175. X    stairs = In_Hall_Of_Mists
  1176. X    up = In_Hall_Of_Mists
  1177. X    east = In_Hall_Of_Mists
  1178. X
  1179. X    left = { return self.north; }
  1180. X    north = {
  1181. X        if (self.snakecheck)
  1182. X            return Low_N_S_Passage;
  1183. X        else
  1184. X            return nil;
  1185. X    }
  1186. X    
  1187. X    right = { return self.south; }
  1188. X    south = {
  1189. X        if (self.snakecheck)
  1190. X            return In_South_Side_Chamber;
  1191. X        else
  1192. X            return nil;
  1193. X    }
  1194. X
  1195. X    forwards = { return self.west; }
  1196. X    west = {
  1197. X        if (self.snakecheck)
  1198. X            return In_West_Side_Chamber;
  1199. X        else
  1200. X            return nil;
  1201. X    }
  1202. X
  1203. X    /*
  1204. X     * An interesting little bit of trivia here:
  1205. X     * 35% of the time you can slip past the snake and into
  1206. X     * the secret canyon.  (This is in the original fortran
  1207. X     * code.)  But if you say "secret" you will *always* sneak
  1208. X     * by it.
  1209. X     */
  1210. X    sw = {
  1211. X        if (rand(100) <= 35) {
  1212. X            return In_Secret_E_W_Canyon;
  1213. X        }
  1214. X        else {
  1215. X            if (self.snakecheck)
  1216. X                return In_Secret_E_W_Canyon;
  1217. X            else
  1218. X                return nil;
  1219. X        }
  1220. X    }
  1221. X    secret = In_Secret_E_W_Canyon
  1222. X
  1223. X    snakecheck = {
  1224. X        if (Snake.isIn(Me.location)) {
  1225. X            "You can't get by the snake.";
  1226. X            return nil;
  1227. X        }
  1228. X        else
  1229. X            return true;
  1230. X    }
  1231. X;
  1232. XSnake: CCR_decoration
  1233. X    sdesc = "snake"
  1234. X    ldesc = "I wouldn't mess with it if I were you."
  1235. X    location = In_Hall_Of_Mt_King
  1236. X    noun = 'snake' 'cobra' 'asp'
  1237. X    adjective = 'huge' 'fierce' 'green' 'ferocious' 'venemous'
  1238. X        'venomous' 'large' 'big' 'killer'
  1239. X
  1240. X    verDoFeed(actor) = {}
  1241. X    doFeed(actor) = {
  1242. X        if (little_bird.isIn(Me)) {
  1243. X            "The snake has now devoured your bird.";
  1244. X            little_bird.moveInto(nil);
  1245. X        }
  1246. X        else if (little_bird.isIn(self.location))
  1247. X            "You have nothing to feed it.";
  1248. X        else
  1249. X            "There's nothing here it wants to eat (except 
  1250. X            perhaps you).";
  1251. X    }
  1252. X    verIoGiveTo(actor) = {}
  1253. X    doGiveTo(actor, dobj) = {
  1254. X        if (dobj = little_bird)
  1255. X            self.doFeed(actor);
  1256. X        else {
  1257. X            "The snake does not seem interested in ";
  1258. X            dobj.thedesc; ".";
  1259. X        }
  1260. X    }
  1261. X    
  1262. X    verDoAttack(actor) = {}
  1263. X    doAttack(actor) = {
  1264. X        "Attacking the snake both doesn't work and is very 
  1265. X        dangerous.";
  1266. X    }
  1267. X    verDoAttackWith(actor, io) = { self.verDoAttack(actor); }
  1268. X    doAttackWith(actor, io) = { self.doAttack(actor); }
  1269. X
  1270. X    verIoThrowAt(actor) = { self.verIoGiveTo(actor); }
  1271. X    ioThrowAt(actor, dobj) = {
  1272. X        if (dobj = axe)
  1273. X            self.doAttackWith(actor, dobj);
  1274. X        else
  1275. X            self.ioGiveTo(actor, dobj);
  1276. X    }
  1277. X    verIoThrowTo(actor) = { self.verIoGiveTo(actor); }
  1278. X    ioThrowTo(actor, dobj) = {
  1279. X        if (dobj = axe)
  1280. X            self.doAttackWith(actor, dobj);
  1281. X        else
  1282. X            self.ioGiveTo(actor, dobj);
  1283. X    }
  1284. X    
  1285. X    verDoKick(actor) = {}
  1286. X    doKick(actor) = { "That would be satisfying, but totally insane."; }
  1287. X
  1288. X    verifyRemove(actor) = { "Surely you're joking."; }
  1289. X;
  1290. X
  1291. XAt_West_End_Of_Twopit_Room: CCR_room
  1292. X    sdesc = "At West End of Twopit Room"
  1293. X    ldesc = {
  1294. X        I(); "You are at the west end of the twopit room.  
  1295. X         There is a large hole in the wall above the pit at 
  1296. X        this end of the room.";
  1297. X
  1298. X        if (PlantStickingUp.isIn(self)) {
  1299. X            P(); I(); PlantStickingUp.ldesc;
  1300. X        }
  1301. X    }
  1302. X    east = At_East_End_Of_Twopit_Room
  1303. X    across = At_East_End_Of_Twopit_Room
  1304. X    west = In_Slab_Room
  1305. X    slab = In_Slab_Room
  1306. X    down = In_West_Pit
  1307. X    pit = In_West_Pit
  1308. X
  1309. X    up = { return self.hole; }    // DMB: added
  1310. X    hole = {
  1311. X        "It is too far up for you to reach.";
  1312. X        return nil;
  1313. X    }
  1314. X;
  1315. XHoleAbovePit_1: CCR_decoration
  1316. X    sdesc = "hole above pit"
  1317. X    ldesc = {
  1318. X        "The hole is in the wall above the pit at 
  1319. X        this end of the room.";
  1320. X    }
  1321. X    noun = 'hole'
  1322. X    adjective = 'large'
  1323. X    location = At_West_End_Of_Twopit_Room
  1324. X
  1325. X    verDoEnter(actor) = { "It is too far up for you to reach."; }
  1326. X;
  1327. XPlantStickingUp: CCR_decoration
  1328. X    sdesc = {
  1329. X        if (Plant.size = 1)
  1330. X            "top of 12-foot-tall beanstalk";
  1331. X        else
  1332. X            "huge beanstalk";
  1333. X    }
  1334. X    ldesc = {
  1335. X        if (Plant.size = 1)
  1336. X            "The top of a 12-foot-tall beanstalk is 
  1337. X            poking out of the west pit.";
  1338. X        else
  1339. X            "There is a huge beanstalk growing out of the 
  1340. X            west pit up to the hole.";
  1341. X    }
  1342. X    noun = 'plant' 'beanstalk' 'stalk'
  1343. X    adjective = 'bean' 'giant' 'tiny' 'little' 'murmuring'
  1344. X        '12-foot-tall' 'twelve' 'foot' 'tall' 'bellowing'
  1345. X
  1346. X    location = {
  1347. X        if (Plant.size = 0)
  1348. X            return nil;
  1349. X        else if (Me.isIn(At_West_End_Of_Twopit_Room))
  1350. X            return At_West_End_Of_Twopit_Room;
  1351. X        else
  1352. X            return At_East_End_Of_Twopit_Room;        
  1353. X    }
  1354. X;
  1355. X
  1356. XIn_East_Pit: CCR_room, NoNPC
  1357. X    sdesc = "In East Pit"
  1358. X    ldesc = {
  1359. X        I(); "You are at the bottom of the eastern pit in the 
  1360. X        twopit room.  There is a small pool of oil in one 
  1361. X        corner of the pit.";
  1362. X    }
  1363. X    up = At_East_End_Of_Twopit_Room
  1364. X    out = At_East_End_Of_Twopit_Room
  1365. X;
  1366. XEastPit: CCR_decoration
  1367. X    sdesc = "eastern pit"
  1368. X    ldesc = "You're in it."
  1369. X    noun = 'pit' 'corner'
  1370. X    adjective = 'east' 'eastern'
  1371. X    location = In_East_Pit
  1372. X;
  1373. XOil: CCR_decoration
  1374. X    sdesc = "pool of oil"
  1375. X    noun = 'pool' 'oil'
  1376. X    adjective = 'small'
  1377. X    location = In_East_Pit
  1378. X
  1379. X    verDoTake(actor) = {
  1380. X        if (not bottle.isIn(Me))
  1381. X            "You have nothing in which to carry the oil.";
  1382. X    }
  1383. X    doTake(actor) = {
  1384. X        bottle.ioPutIn(actor, self);
  1385. X    }
  1386. X    verDoPutIn(actor, io) = {}
  1387. X    doPutIn(actor, io) = {
  1388. X        if (io <> bottle)
  1389. X            "You have nothing in which to carry the oil.";
  1390. X        else
  1391. X            bottle.ioPutIn(actor, self);
  1392. X    }
  1393. X;
  1394. X
  1395. XIn_West_Pit: CCR_room, NoNPC
  1396. X    sdesc = "In West Pit"
  1397. X    ldesc = {
  1398. X        I(); "You are at the bottom of the western pit in the 
  1399. X        twopit room.  There is a large hole in the wall about 
  1400. X        25 feet above you."; P();
  1401. X
  1402. X        I(); Plant.ldesc;
  1403. X    }
  1404. X    up = At_West_End_Of_Twopit_Room
  1405. X    out = At_West_End_Of_Twopit_Room
  1406. X    climb = {
  1407. X        if (Plant.size < 1 or Plant.size > 2) {
  1408. X            "There is nothing here to climb.  Use \"up\" 
  1409. X            or \"out\" to leave the pit.";
  1410. X
  1411. X            return nil;
  1412. X        }
  1413. X        else {
  1414. X            Plant.doClimb(Me);
  1415. X            return nil;
  1416. X        }
  1417. X    }
  1418. X;
  1419. XPlant: CCR_decoration
  1420. X    size = 0
  1421. X
  1422. X    sdesc = {
  1423. X        if (self.size = 0)
  1424. X            "plant";
  1425. X        else if (self.size = 1)
  1426. X            "beanstalk";
  1427. X        else if (self.size = 2)
  1428. X            "giant beanstalk";
  1429. X    }
  1430. X    ldesc = {
  1431. X        if (self.size = 0)
  1432. X            "There is a tiny little plant in the pit, 
  1433. X            murmuring \"Water, water, ...\"";
  1434. X        else if (self.size = 1)
  1435. X            "There is a 12-foot-tall beanstalk stretching 
  1436. X            up out of the pit, bellowing \"Water!! 
  1437. X            Water!!\"";
  1438. X        else if (self.size = 2)
  1439. X            "There is a gigantic beanstalk stretching all 
  1440. X            the way up to the hole.";
  1441. X    }
  1442. X    location = In_West_Pit
  1443. X    noun = 'plant' 'beanstalk' 'stalk'
  1444. X    adjective = 'bean' 'giant' 'tiny' 'little' 'murmuring'
  1445. X        '12-foot-tall' 'twelve' 'foot' 'tall' 'bellowing'
  1446. X
  1447. X    verDoClimb(actor) = {
  1448. X        if (self.size = 0)
  1449. X            "It's just a little plant!";
  1450. X    }
  1451. X    doClimb(actor) = {
  1452. X        if (self.size = 1) {
  1453. X            "You have climbed up the plant and out of the 
  1454. X            pit.\b";
  1455. X
  1456. X            Me.travelTo(At_West_End_Of_Twopit_Room);
  1457. X        }
  1458. X        else {
  1459. X            "You clamber up the plant and scurry through 
  1460. X            the hole at the top.\b";
  1461. X
  1462. X            Me.travelTo(In_Narrow_Corridor);
  1463. X        }
  1464. X    }
  1465. X
  1466. X    verDoWater(actor) = {}
  1467. X    doWater(actor) = {
  1468. X        if (bottle.isIn(Me))
  1469. X            bottle.doPourOn(actor, self);
  1470. X        else
  1471. X            "You have nothing to water the plant with.";
  1472. X    }
  1473. X    verDoOil(actor) = {}
  1474. X    doOil(actor) = { self.doWater(actor); }
  1475. X
  1476. X    // The plant's not going anywhere.
  1477. X    verifyRemove(actor) = {
  1478. X        "The plant has exceptionally deep roots and cannot be 
  1479. X        pulled free.";
  1480. X    }
  1481. X
  1482. X    water = {
  1483. X        self.size := self.size + 1;
  1484. X
  1485. X        if (self.size = 1)
  1486. X            "The plant spurts into furious growth for a 
  1487. X            few seconds.";
  1488. X        else if (self.size = 2)
  1489. X            "The plant grows explosively, almost filling 
  1490. X            the bottom of the pit.";
  1491. X        else {
  1492. X            "You've over-watered the plant!  It's 
  1493. X            shriveling up!  It's, it's...";
  1494. X
  1495. X            self.size := 0;
  1496. X        }
  1497. X
  1498. X        P(); I(); Plant.ldesc;
  1499. X    }
  1500. X;
  1501. XWestPit: CCR_decoration
  1502. X    sdesc = "western pit"
  1503. X    ldesc = "You're in it."
  1504. X    noun = 'pit' 'corner'
  1505. X    adjective = 'west' 'western'
  1506. X    location = In_West_Pit
  1507. X;
  1508. XHoleAbovePit_2: CCR_decoration
  1509. X    sdesc = "hole above pit"
  1510. X    ldesc = "The hole is in the wall above you."
  1511. X    noun = 'hole'
  1512. X    adjective = 'large'
  1513. X    location = At_West_End_Of_Twopit_Room
  1514. X
  1515. X    verDoEnter(actor) = {
  1516. X        "You're not anywhere near the pit -- it's far overhead.";
  1517. X    }
  1518. X;
  1519. X
  1520. XWest_Side_Of_Fissure: CCR_room
  1521. X    sdesc = "West Side of Fissure"
  1522. X    ldesc = {
  1523. X        I(); "You are on the west side of the fissure in the 
  1524. X        hall of mists.";
  1525. X
  1526. X        if (CrystalBridge.exists) {
  1527. X            P(); I();
  1528. X            "A crystal bridge now spans the fissure.";
  1529. X        }
  1530. X    }
  1531. X
  1532. X    west = At_West_End_Of_Hall_Of_Mists
  1533. X
  1534. X    forwards = { return self.jump; }
  1535. X    jump = {
  1536. X        if (CrystalBridge.exists) {
  1537. X            "I respectfully suggest you go across the 
  1538. X            bridge instead of jumping.";
  1539. X
  1540. X            return nil;
  1541. X        }
  1542. X        else
  1543. X            return didnt_make_it.death;
  1544. X    }
  1545. X
  1546. X    over = { return self.across; }
  1547. X    east = { return self.across; }
  1548. X    cross = { return self.across; }
  1549. X    across = {
  1550. X        CrystalBridge.doCross(Me);
  1551. X        return nil;
  1552. X    }
  1553. X
  1554. X    north = {
  1555. X        "You have crawled through a very low wide passage 
  1556. X        parallel to and north of the hall of mists.\b";
  1557. X
  1558. X        return At_West_End_Of_Hall_Of_Mists;
  1559. X    }
  1560. X
  1561. X    //
  1562. X    // NPC's can go across too, but only if the bridge exists.
  1563. X    //
  1564. X    NPCexit1 = {
  1565. X        if (CrystalBridge.exists)
  1566. X            return On_East_Bank_Of_Fissure;
  1567. X        else
  1568. X            return nil;
  1569. X    }
  1570. X;
  1571. X
  1572. XLow_N_S_Passage: CCR_room
  1573. X    sdesc = "Low N/S Passage"
  1574. X    ldesc = {
  1575. X        I(); "You are in a low N/S passage at a hole in the 
  1576. X        floor.  The hole goes down to an E/W passage.";
  1577. X    }
  1578. X    hall = In_Hall_Of_Mt_King
  1579. X    out = In_Hall_Of_Mt_King
  1580. X    south = In_Hall_Of_Mt_King
  1581. X    north = At_Y2
  1582. X    y2 = At_Y2
  1583. X    down = In_Dirty_Passage
  1584. X    hole = In_Dirty_Passage
  1585. X;
  1586. X
  1587. XIn_South_Side_Chamber: CCR_room
  1588. X    sdesc = "In South Side Chamber"
  1589. X    ldesc = {
  1590. X        I(); "You are in the south side chamber.";
  1591. X    }
  1592. X    hall = In_Hall_Of_Mt_King
  1593. X    out = In_Hall_Of_Mt_King
  1594. X    north = In_Hall_Of_Mt_King
  1595. X;
  1596. X
  1597. XIn_West_Side_Chamber: CCR_room
  1598. X    sdesc = "In West Side Chamber"
  1599. X    ldesc = {
  1600. X        I(); "You are in the west side chamber of the hall of 
  1601. X        the mountain king. A passage continues west and up 
  1602. X        here.";
  1603. X    }
  1604. X    hall = In_Hall_Of_Mt_King
  1605. X    out = In_Hall_Of_Mt_King
  1606. X    east = In_Hall_Of_Mt_King
  1607. X    west = Crossover
  1608. X    up = Crossover
  1609. X;
  1610. X
  1611. XAt_Y2: CCR_room
  1612. X    sdesc = "At \"Y2\""
  1613. X    ldesc = {
  1614. X        I(); "You are in a large room, with a passage to the 
  1615. X        south, a passage to the west, and a wall of broken 
  1616. X        rock to the east. There is a large \"Y2\" on ";
  1617. X
  1618. X        if (Me.isIn(Y2Rock))
  1619. X            "the rock you are sitting on.";
  1620. X        else
  1621. X            "a rock in the room's center.";
  1622. X
  1623. X        self.hollowvoice;
  1624. X    }
  1625. X    plugh = Inside_Building
  1626. X    south = Low_N_S_Passage
  1627. X    east = Jumble_Of_Rock
  1628. X    wall = Jumble_Of_Rock
  1629. X    broken = Jumble_Of_Rock
  1630. X    west = At_Window_On_Pit_1
  1631. X     plover = {
  1632. X        if (egg_sized_emerald.isIn(Me))
  1633. X            egg_sized_emerald.moveInto(In_Plover_Room);
  1634. X            
  1635. X        return In_Plover_Room;
  1636. X    }
  1637. X
  1638. X    hollowvoice = {
  1639. X        if (rand(100) <= 25) {
  1640. X            P(); I(); "A hollow voice says, \"Plugh.\"";
  1641. X        }
  1642. X    }
  1643. X;
  1644. XY2Rock: CCR_decoration, chairitem, readable
  1645. X    sdesc = "\"Y2\" rock"
  1646. X    ldesc = { self.readdesc; }
  1647. X    readdesc = "There is a large \"Y2\" painted on the rock."
  1648. X    noun = 'rock'
  1649. X    adjective = 'y2'
  1650. X
  1651. X    location = At_Y2
  1652. X
  1653. X    plugh = { return self.location.plugh; }
  1654. X
  1655. X    onroom = true    // We set ON the rock, not IN it.
  1656. X
  1657. X    //
  1658. X    // We want the player to be able to pick things in the
  1659. X    // room up while sitting on the rock.
  1660. X    //
  1661. X    reachable = {
  1662. X        return [Y2Rock] + At_Y2.contents;
  1663. X    }
  1664. X;
  1665. X
  1666. XJumble_Of_Rock: CCR_room
  1667. X    sdesc = "Jumble of Rock"
  1668. X    ldesc = {
  1669. X        I(); "You are in a jumble of rock, with cracks 
  1670. X        everywhere.";
  1671. X    }
  1672. X    down = At_Y2
  1673. X    y2 = At_Y2
  1674. X    up = In_Hall_Of_Mists
  1675. X;
  1676. X
  1677. XAt_Window_On_Pit_1: CCR_room
  1678. X    sdesc = "At Window on Pit"
  1679. X    ldesc = {
  1680. X        I(); "You're at a low window overlooking a huge pit, 
  1681. X        which extends up out of sight.  A floor is 
  1682. X        indistinctly visible over 50 feet below.  Traces of 
  1683. X        white mist cover the floor of the pit, becoming 
  1684. X        thicker to the right. Marks in the dust around the 
  1685. X        window would seem to indicate that someone has been 
  1686. X        here recently.  Directly across the pit from you and 
  1687. X        25 feet away there is a similar window looking into a 
  1688. X        lighted room.  A shadowy figure can be seen there 
  1689. X        peering back at you.";
  1690. X    }
  1691. X    east = At_Y2
  1692. X    y2 = At_Y2
  1693. X    jump = { return broken_neck.death; }
  1694. X;
  1695. XWindow: floatingdecoration
  1696. X    sdesc = "window"
  1697. X    ldesc = "It looks like a regular window."
  1698. X    noun = 'window'
  1699. X    adjective = 'low'
  1700. X    loclist = [ At_Window_On_Pit_1  At_Window_On_Pit_2 ]
  1701. X
  1702. X    verDoOpen(actor) = {}
  1703. X    doOpen(actor) = { "OK, the window is now open."; }
  1704. X    verDoClose(actor) = {}
  1705. X    doClose(actor) = { "OK, the window is now closed."; }
  1706. X;
  1707. XWindowPit: floatingdecoration
  1708. X    sdesc = "huge pit"
  1709. X    ldesc = {
  1710. X        "It's so deep you can barely make out the floor below,
  1711. X        and the top isn't visible at all.";
  1712. X    }
  1713. X    noun = 'pit'
  1714. X    adjective = 'deep' 'large'
  1715. X    loclist = [ At_Window_On_Pit_1  At_Window_On_Pit_2 ]
  1716. X;
  1717. XMarksInTheDust: floatingdecoration
  1718. X    sdesc = "marks in the dust"
  1719. X    adesc = { self.sdesc; }
  1720. X    ldesc = "Evidently you're not alone here."
  1721. X    loclist = [ At_Window_On_Pit_1  At_Window_On_Pit_2 ]
  1722. X;
  1723. XShadowyFigure: floatingdecoration
  1724. X    sdesc = "shadowy figure"
  1725. X    ldesc = {
  1726. X        "The shadowy figure seems to be trying to attract 
  1727. X        your attention.";
  1728. X    }
  1729. X    noun = 'figure' 'shadow' 'person' 'individual'
  1730. X    adjective = 'shadowy' 'mysterious'
  1731. X    loclist = [ At_Window_On_Pit_1  At_Window_On_Pit_2 ]
  1732. X;
  1733. XIn_Dirty_Passage: CCR_room
  1734. X    sdesc = "In Dirty Passage"
  1735. X    ldesc = {
  1736. X        I(); "You are in a dirty broken passage.  To the east 
  1737. X        is a crawl.  To the west is a large passage.  Above 
  1738. X        you is a hole to another passage.";
  1739. X    }
  1740. X    east = On_Brink_Of_Pit
  1741. X    crawl = On_Brink_Of_Pit
  1742. X    up = Low_N_S_Passage
  1743. X    hole = Low_N_S_Passage
  1744. X    west = In_Dusty_Rock_Room
  1745. X    bedquilt = In_Bedquilt
  1746. X    slab = In_Slab_Room    // DMB: this is only in some versions
  1747. X;
  1748. X
  1749. XOn_Brink_Of_Pit: CCR_room
  1750. X    sdesc = "On Brink of Pit"
  1751. X    ldesc = {
  1752. X        I(); "You are on the brink of a small clean climbable 
  1753. X        pit.  A crawl leads west.";
  1754. X    }
  1755. X    west = In_Dirty_Passage
  1756. X    crawl = In_Dirty_Passage
  1757. X    down = In_Pit
  1758. X    pit = In_Pit
  1759. X    climb = In_Pit
  1760. X    in = In_Pit    // DMB: added
  1761. X;
  1762. XCleanPit: CCR_decoration
  1763. X    sdesc = "small pit"
  1764. X    ldesc = "It looks like you might be able to climb down into it."
  1765. X    noun = 'pit'
  1766. X    adjective = 'small' 'clean' 'climable'
  1767. X    location = On_Brink_Of_Pit
  1768. X
  1769. X    verDoClimb(actor) = {}
  1770. X    doClimb(actor) = { Me.travelTo(self.location.climb); }
  1771. X    verDoEnter(actor) = {}
  1772. X    doEnter(actor) = { self.doClimb(actor); }
  1773. X;
  1774. XIn_Pit: CCR_room, NoNPC
  1775. X    sdesc = "In Pit"
  1776. X    ldesc = {
  1777. X        I(); "You are in the bottom of a small pit with a 
  1778. X        little stream, which enters and exits through tiny 
  1779. X        slits.";
  1780. X    }
  1781. X    climb = On_Brink_Of_Pit
  1782. X    up = On_Brink_Of_Pit
  1783. X    out = On_Brink_Of_Pit
  1784. X
  1785. X    slit = { return self.down; }
  1786. X    stream = { return self.down; }
  1787. X    upstream = { return self.down; }
  1788. X    downstream = { return self.down; }
  1789. X    down = {
  1790. X        // In the original, the same message given
  1791. X        // in At_Slit_In_Streambed was used here.
  1792. X        // Since it's not quite right (and was probably only
  1793. X        // reused to save space), I've changed it slightly.
  1794. X
  1795. X        "You don't fit through the tiny slits!";
  1796. X        return nil;
  1797. X    }
  1798. X;
  1799. XPitSlits: decoration
  1800. X    sdesc = "tiny slits"
  1801. X    adesc = { self.sdesc; }
  1802. X    ldesc = {
  1803. X        "The slits form a complex pattern in the rock.";
  1804. X    }
  1805. X    location = In_Pit
  1806. X    noun = 'slit' 'slits'
  1807. X    adjective = 'tiny'
  1808. X;
  1809. X
  1810. XIn_Dusty_Rock_Room: CCR_room
  1811. X    sdesc = "In Dusty Rock Room"
  1812. X    ldesc = {
  1813. X        I(); "You are in a large room full of dusty rocks.  
  1814. X        There is a big hole in the floor.  There are cracks 
  1815. X        everywhere, and a passage leading east.";
  1816. X    }
  1817. X    east = In_Dirty_Passage
  1818. X    passage = In_Dirty_Passage
  1819. X    down = At_Complex_Junction
  1820. X    hole = At_Complex_Junction
  1821. X    floor = At_Complex_Junction
  1822. X    bedquilt = In_Bedquilt
  1823. X;
  1824. XDustyRocks: CCR_decoration
  1825. X    sdesc = "dusty rocks"
  1826. X    ldesc = "They're just rocks.  (Dusty ones, that is.)"
  1827. X    location = In_Dusty_Rock_Room
  1828. X    noun = 'rocks' 'boulders' 'stones' 'rock' 'boulder' 'stone'
  1829. X    adjective = 'dusty' 'dirty'
  1830. X;
  1831. X
  1832. XAt_West_End_Of_Hall_Of_Mists: CCR_room
  1833. X    sdesc = "At West End of Hall of Mists"
  1834. X    ldesc = {
  1835. X        I(); "You are at the west end of the hall of mists.  
  1836. X        A low wide crawl continues west and another goes 
  1837. X        north.  To the south is a little passage 6 feet off 
  1838. X        the floor.";
  1839. X    }
  1840. X    south = Alike_Maze_1
  1841. X    up = Alike_Maze_1
  1842. X    passage = Alike_Maze_1
  1843. X    climb = Alike_Maze_1
  1844. X    east = West_Side_Of_Fissure
  1845. X    west = At_East_End_Of_Long_Hall
  1846. X    crawl = At_East_End_Of_Long_Hall
  1847. X
  1848. X    north = {
  1849. X        "You have crawled through a very low wide passage 
  1850. X        parallel to and north of the hall of mists.\b";
  1851. X
  1852. X        return West_Side_Of_Fissure;
  1853. X    }    
  1854. X;
  1855. X
  1856. XAlike_Maze_1: CCR_alike_maze_room
  1857. X    up = At_West_End_Of_Hall_Of_Mists
  1858. X    north = Alike_Maze_1
  1859. X    east = Alike_Maze_2
  1860. X    south = Alike_Maze_4
  1861. X    west = Alike_Maze_11
  1862. X;
  1863. X
  1864. XAlike_Maze_2: CCR_alike_maze_room
  1865. X    west = Alike_Maze_1
  1866. X    south = Alike_Maze_3
  1867. X    east = Alike_Maze_4
  1868. X;
  1869. X
  1870. XAlike_Maze_3: CCR_alike_maze_room
  1871. X    east = Alike_Maze_2
  1872. X    down = Dead_End_3
  1873. X    south = Alike_Maze_6
  1874. X    north = Dead_End_13
  1875. X;
  1876. X
  1877. XAlike_Maze_4: CCR_alike_maze_room
  1878. X    west = Alike_Maze_1
  1879. X    north = Alike_Maze_2
  1880. X    east = Dead_End_1
  1881. X    south = Dead_End_2
  1882. X    up = Alike_Maze_14
  1883. X    down = Alike_Maze_14
  1884. X;
  1885. X
  1886. XDead_End_1: CCR_dead_end_room
  1887. X    west = Alike_Maze_4
  1888. X    out = Alike_Maze_4
  1889. X;
  1890. X
  1891. XDead_End_2: CCR_dead_end_room
  1892. X    east = Alike_Maze_4
  1893. X    out = Alike_Maze_4
  1894. X;
  1895. X
  1896. XDead_End_3: CCR_dead_end_room
  1897. X    up = Alike_Maze_3
  1898. X    out = Alike_Maze_3
  1899. X;
  1900. X
  1901. XAlike_Maze_5: CCR_alike_maze_room
  1902. X    east = Alike_Maze_6
  1903. X    west = Alike_Maze_7
  1904. X;
  1905. X
  1906. XAlike_Maze_6: CCR_alike_maze_room
  1907. X    east = Alike_Maze_3
  1908. X    west = Alike_Maze_5
  1909. X    down = Alike_Maze_7
  1910. X    south = Alike_Maze_8
  1911. X;
  1912. X
  1913. XAlike_Maze_7: CCR_alike_maze_room
  1914. X    west = Alike_Maze_5
  1915. X    up = Alike_Maze_6
  1916. X    east = Alike_Maze_8
  1917. X    south = Alike_Maze_9
  1918. X;
  1919. X
  1920. XAlike_Maze_8: CCR_alike_maze_room
  1921. X    west = Alike_Maze_6
  1922. X    east = Alike_Maze_7
  1923. X    south = Alike_Maze_8
  1924. X    up = Alike_Maze_9
  1925. X    north = Alike_Maze_10
  1926. X    down = Dead_End_12
  1927. X;
  1928. X
  1929. XAlike_Maze_9: CCR_alike_maze_room
  1930. X    west = Alike_Maze_7
  1931. X    north = Alike_Maze_8
  1932. X    south = Dead_End_4
  1933. X;
  1934. X
  1935. XDead_End_4: CCR_dead_end_room
  1936. X    west = Alike_Maze_9
  1937. X    out = Alike_Maze_9
  1938. X;
  1939. X
  1940. XAlike_Maze_10: CCR_alike_maze_room
  1941. X    west = Alike_Maze_8
  1942. X    north = Alike_Maze_10
  1943. X    down = Dead_End_5
  1944. X    east = At_Brink_Of_Pit
  1945. X;
  1946. X
  1947. XDead_End_5: CCR_dead_end_room
  1948. X    up = Alike_Maze_10
  1949. X    out = Alike_Maze_10
  1950. X;
  1951. X
  1952. XAt_Brink_Of_Pit: CCR_room
  1953. X    sdesc = "At Brink of Pit"
  1954. X    ldesc = {
  1955. X        I(); "You are on the brink of a thirty foot pit with 
  1956. X        a massive orange column down one wall.  You could 
  1957. X        climb down here but you could not get back up.  The 
  1958. X        maze continues at this level.";
  1959. X    }
  1960. X    down = In_Bird_Chamber
  1961. X    climb = In_Bird_Chamber
  1962. X    west = Alike_Maze_10
  1963. X    south = Dead_End_6
  1964. X    north = Alike_Maze_12
  1965. X    east = Alike_Maze_13
  1966. X;
  1967. XOrangeColumn: CCR_decoration
  1968. X    sdesc = "massive orange column"
  1969. X    ldesc = "It looks like you could climb down it."
  1970. X    noun = 'column'
  1971. X    adjective = 'massive' 'orange' 'big' 'huge'
  1972. X    location = At_Brink_Of_Pit
  1973. X    
  1974. X    verDoClimb(actor) = {}
  1975. X    doClimb(actor) = { Me.travelTo(self.location.down); }
  1976. X;
  1977. XThirtyFootPit: CCR_decoration
  1978. X    sdesc = "pit"
  1979. X    ldesc = "You'll have to climb down to find out anything more..."
  1980. X    noun = 'pit'
  1981. X    adjective = 'thirty' 'foot' 'thirty-foot' '30-foot'
  1982. X    location = At_Brink_Of_Pit
  1983. X
  1984. X    verDoClimb(actor) = {}
  1985. X    doClimb(actor) = { Me.travelTo(self.location.down); }
  1986. X    verDoEnter(actor) = {}
  1987. X    doEnter(actor) = { self.doClimb(actor); }
  1988. X;
  1989. X
  1990. XDead_End_6: CCR_dead_end_room
  1991. X    east = At_Brink_Of_Pit
  1992. X    out = At_Brink_Of_Pit
  1993. X;
  1994. X
  1995. XAt_East_End_Of_Long_Hall: CCR_room
  1996. X    sdesc = "At East End of Long Hall"
  1997. X    ldesc = {
  1998. X        I(); "You are at the east end of a very long hall 
  1999. X        apparently without side chambers.  To the east a low 
  2000. X        wide crawl slants up.  To the north a round two foot 
  2001. X        hole slants down.";
  2002. X    }
  2003. X    east = At_West_End_Of_Hall_Of_Mists
  2004. X    up = At_West_End_Of_Hall_Of_Mists
  2005. X    crawl = At_West_End_Of_Hall_Of_Mists
  2006. X    west = At_West_End_Of_Long_Hall
  2007. X    north = Crossover
  2008. X    down = Crossover
  2009. X    hole = Crossover
  2010. X;
  2011. X
  2012. XAt_West_End_Of_Long_Hall: CCR_room
  2013. X    sdesc = "At West End of Long Hall"
  2014. X    ldesc = {
  2015. X        I(); "You are at the west end of a very long 
  2016. X        featureless hall.  The hall joins up with a narrow 
  2017. X        north/south passage.";
  2018. X    }
  2019. X    east = At_East_End_Of_Long_Hall
  2020. X    north = Crossover
  2021. X    south = Different_Maze_1
  2022. X;
  2023. X
  2024. XCrossover: CCR_room
  2025. X    sdesc = "N/S and E/W Crossover"
  2026. X    ldesc = {
  2027. X        I(); "You are at a crossover of a high N/S passage 
  2028. X        and a low E/W one.";
  2029. X    }
  2030. X    west = At_East_End_Of_Long_Hall
  2031. X    north = Dead_End_7
  2032. X    east = In_West_Side_Chamber
  2033. X    south = At_West_End_Of_Long_Hall
  2034. X;
  2035. XTheCrossover: CCR_decoration
  2036. X    sdesc = "crossover"
  2037. X    ldesc = "You know as much as I do at this point."
  2038. X    noun = 'crossover' 'over'
  2039. X    adjective = 'cross'
  2040. X    location = Crossover
  2041. X;
  2042. X
  2043. XDead_End_7: CCR_dead_end_room
  2044. X    south = Crossover
  2045. X    out = Crossover
  2046. X;
  2047. X
  2048. XAt_Complex_Junction: CCR_room
  2049. X    sdesc = "At Complex Junction"
  2050. X    ldesc = {
  2051. X        I(); "You are at a complex junction.  A low hands and 
  2052. X        knees passage from the north joins a higher crawl 
  2053. X        from the east to make a walking passage going west.  
  2054. X        There is also a large room above.  The air is damp 
  2055. X        here.";
  2056. X    }
  2057. X    up = In_Dusty_Rock_Room
  2058. X    climb = In_Dusty_Rock_Room
  2059. X    toroom = In_Dusty_Rock_Room
  2060. X    west = In_Bedquilt
  2061. X    bedquilt = In_Bedquilt
  2062. X    north = In_Shell_Room
  2063. X    shell = In_Shell_Room
  2064. X    east = In_Anteroom
  2065. X;
  2066. X
  2067. XIn_Bedquilt: CCR_room
  2068. X    sdesc = "In Bedquilt"
  2069. X    ldesc = {
  2070. X        I(); "You are in bedquilt, a long east/west passage 
  2071. X        with holes everywhere. To explore at random select 
  2072. X        north, south, up, or down.";
  2073. X    }
  2074. X    east = At_Complex_Junction
  2075. X    west = In_Swiss_Cheese_Room
  2076. X    south = {
  2077. X        if (rand(100) <= 80)
  2078. X            return crawled_around.message;
  2079. X        else
  2080. X            return self.slab;
  2081. X    }
  2082. X    slab = In_Slab_Room
  2083. X
  2084. X    up = {
  2085. X        if (rand(100) <= 80)
  2086. X            return crawled_around.message;
  2087. X        else if (rand(100) <= 50)
  2088. X            return In_Secret_N_S_Canyon_1;
  2089. X        else
  2090. X            return In_Dusty_Rock_Room;
  2091. X    }
  2092. X
  2093. X    north = {
  2094. X        if (rand(100) <= 60)
  2095. X            return crawled_around.message;
  2096. X        else if (rand(100) <= 75)
  2097. X            return In_Large_Low_Room;
  2098. X        else
  2099. X            return At_Junction_Of_Three_Secret_Canyons;
  2100. X    }
  2101. X
  2102. X    down = {
  2103. X        if (rand(100) <= 80)
  2104. X            return crawled_around.message;
  2105. X        else
  2106. X            return In_Anteroom;
  2107. X    }
  2108. X
  2109. X    //
  2110. X    // Let the NPC's go everywhere out of here too.
  2111. X    //
  2112. X    NPCexit1 = In_Secret_N_S_Canyon_1
  2113. X    NPCexit2 = In_Dusty_Rock_Room
  2114. X    NPCexit3 = In_Large_Low_Room
  2115. X    NPCexit4 = At_Junction_Of_Three_Secret_Canyons
  2116. X    NPCexit5 = In_Anteroom
  2117. X;
  2118. X
  2119. XIn_Swiss_Cheese_Room: CCR_room
  2120. X    sdesc = "In Swiss Cheese Room"
  2121. X    ldesc = {
  2122. X        I(); "You are in a room whose walls resemble swiss 
  2123. X        cheese.  Obvious passages go west, east, ne, and nw.  
  2124. X        Part of the room is occupied by a large bedrock 
  2125. X        block.";
  2126. X    }
  2127. X    ne = In_Bedquilt
  2128. X    west = At_East_End_Of_Twopit_Room
  2129. X    south = {
  2130. X        if (rand(100) <= 80)
  2131. X            return crawled_around.message;
  2132. X        else
  2133. X            return self.canyon;
  2134. X    }
  2135. X    canyon = In_Tall_E_W_Canyon
  2136. X
  2137. X    east = In_Soft_Room
  2138. X    nw = {
  2139. X        if (rand(100) <= 50)
  2140. X            return crawled_around.message;
  2141. X        else
  2142. X            return self.oriental;
  2143. X    }
  2144. X    oriental = In_Oriental_Room
  2145. X;
  2146. XBedrockBlock: CCR_decoration
  2147. X    sdesc = "bedrock block"
  2148. X    ldesc = "It's just a huge block."
  2149. X    noun = 'block'
  2150. X    adjective = 'bedrock' 'large'
  2151. X    location = In_Swiss_Cheese_Room
  2152. X
  2153. X    verDoLookunder(actor) = { "Surely you're joking."; }
  2154. X    verDoMove(actor) = { self.verDoLookunder(actor); }
  2155. X    verifyRemove(actor) = { self.verDoLookunder(actor); }
  2156. X;
  2157. X
  2158. XAt_East_End_Of_Twopit_Room: CCR_room
  2159. X    sdesc = "At East End of Twopit Room"
  2160. X    ldesc = {
  2161. X        I(); "You are at the east end of the twopit room.  
  2162. X        The floor here is littered with thin rock slabs, 
  2163. X        which make it easy to descend the pits. There is a 
  2164. X        path here bypassing the pits to connect passages from 
  2165. X        east and west.  There are holes all over, but the 
  2166. X        only big one is on the wall directly over the west 
  2167. X        pit where you can't get to it.";
  2168. X
  2169. X        if (PlantStickingUp.isIn(self)) {
  2170. X            P(); I(); PlantStickingUp.ldesc;
  2171. X        }
  2172. X    }
  2173. X    east = In_Swiss_Cheese_Room
  2174. X    west = At_West_End_Of_Twopit_Room
  2175. X    across = At_West_End_Of_Twopit_Room
  2176. X    down = In_East_Pit
  2177. X    pit = In_East_Pit
  2178. X;
  2179. XSlabs: CCR_decoration
  2180. X    sdesc = "thin rock slabs"
  2181. X    adesc = { self.sdesc; }
  2182. X    ldesc = "They almost form natural stairs down into the pit."
  2183. X    noun = 'slabs' 'slab' 'rocks' 'stairs'
  2184. X    adjective = 'thin' 'rock'
  2185. X    location = At_East_End_Of_Twopit_Room
  2186. X
  2187. X    verDoLookunder(actor) = { "Surely you're joking."; }
  2188. X    verDoMove(actor) = { self.verDoLookunder(actor); }
  2189. X    verifyRemove(actor) = { self.verDoLookunder(actor); }
  2190. X;
  2191. X
  2192. XIn_Slab_Room: CCR_room
  2193. X    sdesc = "In Slab Room"
  2194. X    ldesc = {
  2195. X        I(); "You are in a large low circular chamber whose 
  2196. X        floor is an immense slab fallen from the ceiling 
  2197. X        (slab room).  East and west there once were large 
  2198. X        passages, but they are now filled with boulders.  Low 
  2199. X        small passages go north and south, and the south one 
  2200. X        quickly bends west around the boulders.";
  2201. X    }
  2202. X    south = At_West_End_Of_Twopit_Room
  2203. X    up = In_Secret_N_S_Canyon_0
  2204. X    climb = In_Secret_N_S_Canyon_0
  2205. X    north = In_Bedquilt
  2206. X;
  2207. XSlab: CCR_decoration
  2208. X    sdesc = "slab"
  2209. X    ldesc = "It is now the floor here."
  2210. X    noun = 'slab'
  2211. X    adjective = 'immense'
  2212. X    location = In_Slab_Room
  2213. X;
  2214. XSlabBoulders: CCR_decoration
  2215. X    sdesc = "boulders"
  2216. X    ldesc = "They're just ordinary boulders."
  2217. X    noun = 'boulder' 'boulders' 'rocks' 'stones'
  2218. X    location = In_Slab_Room
  2219. X;
  2220. X
  2221. XIn_Secret_N_S_Canyon_0: CCR_room
  2222. X    sdesc = "In Secret N/S Canyon"
  2223. X    ldesc = {
  2224. X        I(); "You are in a secret N/S canyon above a large 
  2225. X        room.";
  2226. X    }
  2227. X    down = In_Slab_Room
  2228. X    slab = In_Slab_Room
  2229. X
  2230. X    south = {
  2231. X        In_Secret_Canyon.enteredfrom := self;
  2232. X        return In_Secret_Canyon;
  2233. X    }
  2234. X
  2235. X    north = In_Mirror_Canyon
  2236. X    reservoir = At_Reservoir
  2237. X
  2238. X    //
  2239. X    // Let NPC's go into the secret canyon too, without regard to
  2240. X    // whether the dragon's there.
  2241. X    //
  2242. X    NPCexit1 = In_Secret_Canyon
  2243. X;
  2244. X
  2245. XIn_Secret_N_S_Canyon_1: CCR_room
  2246. X    sdesc = "In Secret N/S Canyon"
  2247. X    ldesc = {
  2248. X        I(); "You are in a secret N/S canyon above a sizable 
  2249. X        passage.";
  2250. X    }
  2251. X    north = At_Junction_Of_Three_Secret_Canyons
  2252. X    down = In_Bedquilt
  2253. X    passage = In_Bedquilt
  2254. X    south = Atop_Stalactite
  2255. X;
  2256. X
  2257. XAt_Junction_Of_Three_Secret_Canyons: CCR_room
  2258. X    sdesc = "At Junction of Three Secret Canyons"
  2259. X    ldesc = {
  2260. X        I(); "You are in a secret canyon at a junction of 
  2261. X        three canyons, bearing north, south, and se.  The 
  2262. X        north one is as tall as the other two combined.";
  2263. X    }
  2264. X    se = In_Bedquilt
  2265. X    south = In_Secret_N_S_Canyon_1
  2266. X    north = At_Window_On_Pit_2
  2267. X;
  2268. X
  2269. XIn_Large_Low_Room: CCR_room
  2270. X    sdesc = "In Large Low Room"
  2271. X    ldesc = {
  2272. X        I(); "You are in a large low room.  Crawls lead 
  2273. X        north, se, and sw.";
  2274. X    }
  2275. X    bedquilt = In_Bedquilt
  2276. X    sw = In_Sloping_Corridor
  2277. X    north = Dead_End_Crawl
  2278. X    se = In_Oriental_Room
  2279. X    oriental = In_Oriental_Room
  2280. X;
  2281. X
  2282. XDead_End_Crawl: CCR_dead_end_room
  2283. X    sdesc = "Dead End Crawl"
  2284. X    ldesc = {
  2285. X        I(); "This is a dead end crawl.";
  2286. X    }
  2287. X    south = In_Large_Low_Room
  2288. X    crawl = In_Large_Low_Room
  2289. X    out = In_Large_Low_Room
  2290. X;
  2291. X
  2292. XIn_Secret_E_W_Canyon: CCR_room
  2293. X    sdesc = "In Secret E/W Canyon Above Tight Canyon"
  2294. X    ldesc = {
  2295. X        I(); "You are in a secret canyon which here runs E/W. 
  2296. X        It crosses over a very tight canyon 15 feet below.  
  2297. X        If you go down you may not be able to get back up.";
  2298. X    }
  2299. X    east = In_Hall_Of_Mt_King
  2300. X    west = {
  2301. X        In_Secret_Canyon.enteredfrom := self;
  2302. X        return In_Secret_Canyon;
  2303. X    }
  2304. X    down = In_N_S_Canyon
  2305. X
  2306. X    //
  2307. X    // Let NPC's go into the secret canyon too, without regard to
  2308. X    // whether the dragon's there.
  2309. X    //
  2310. X    NPCexit1 = In_Secret_Canyon
  2311. X;
  2312. X
  2313. XIn_N_S_Canyon: CCR_room
  2314. X    sdesc = "In N/S Canyon"
  2315. X    ldesc = {
  2316. X        I(); "You are at a wide place in a very tight N/S 
  2317. X        canyon.";
  2318. X    }
  2319. X    south = Canyon_Dead_End
  2320. X    north = In_Tall_E_W_Canyon
  2321. X;
  2322. X
  2323. XCanyon_Dead_End: CCR_dead_end_room
  2324. X    sdesc = "Canyon Dead End"
  2325. X    ldesc = {
  2326. X        I(); "The canyon here becomes too tight to go further 
  2327. X        south.";
  2328. X    }
  2329. X    north = In_N_S_Canyon
  2330. X;
  2331. X
  2332. XIn_Tall_E_W_Canyon: CCR_room
  2333. X    sdesc = "In Tall E/W Canyon"
  2334. X    ldesc = {
  2335. X        I(); "You are in a tall E/W canyon.  A low tight 
  2336. X        crawl goes 3 feet north and seems to open up.";
  2337. X    }
  2338. X    east = In_N_S_Canyon
  2339. X    west = Dead_End_8
  2340. X    north = In_Swiss_Cheese_Room
  2341. X    crawl = In_Swiss_Cheese_Room
  2342. X;
  2343. X
  2344. XDead_End_8: CCR_dead_end_room
  2345. X    ldesc = {
  2346. X        I(); "The canyon runs into a mass of boulders -- dead 
  2347. X        end.";
  2348. X    }
  2349. X    south = In_Tall_E_W_Canyon
  2350. X    out = In_Tall_E_W_Canyon    // DMB: added
  2351. X;
  2352. XMassOfBoulders: CCR_decoration
  2353. X    sdesc = "mass of boulders"
  2354. X    ldesc = "They just like ordinary boulders."
  2355. X    noun = 'boulders' 'mass'
  2356. X    location = Dead_End_8
  2357. X;
  2358. X
  2359. XAlike_Maze_11: CCR_alike_maze_room
  2360. X    north = Alike_Maze_1
  2361. X    west = Alike_Maze_11
  2362. X    south = Alike_Maze_11
  2363. X    east = Dead_End_9
  2364. X;
  2365. X
  2366. XDead_End_9: CCR_dead_end_room
  2367. X    west = Alike_Maze_11
  2368. X    out = Alike_Maze_11
  2369. X;
  2370. X
  2371. XDead_End_10: CCR_dead_end_room
  2372. X    south = Alike_Maze_3
  2373. X    out = Alike_Maze_3
  2374. X;
  2375. X
  2376. XAlike_Maze_12: CCR_alike_maze_room
  2377. X    south = At_Brink_Of_Pit
  2378. X    east = Alike_Maze_13
  2379. X    west = Dead_End_11
  2380. X;
  2381. X
  2382. XAlike_Maze_13: CCR_alike_maze_room
  2383. X    north = At_Brink_Of_Pit
  2384. X    west = Alike_Maze_12
  2385. X    nw = Dead_End_13
  2386. X;
  2387. X
  2388. XDead_End_11: CCR_dead_end_room
  2389. X    east = Alike_Maze_12
  2390. X    out = Alike_Maze_12
  2391. X;
  2392. X
  2393. XDead_End_12: CCR_dead_end_room
  2394. X    up = Alike_Maze_8
  2395. X    out = Alike_Maze_8
  2396. X;
  2397. X
  2398. XAlike_Maze_14: CCR_alike_maze_room
  2399. X    up = Alike_Maze_4
  2400. X    down = Alike_Maze_4
  2401. X;
  2402. X
  2403. XIn_Narrow_Corridor: CCR_room
  2404. X    sdesc = "In Narrow Corridor"
  2405. X    ldesc = {
  2406. X        I(); "You are in a long, narrow corridor stretching 
  2407. X        out of sight to the west.  At the eastern end is a 
  2408. X        hole through which you can see a profusion of 
  2409. X        leaves.";
  2410. X    }
  2411. X    down = In_West_Pit
  2412. X    climb = In_West_Pit
  2413. X    east = In_West_Pit
  2414. X    jump = { return broken_neck.death; }
  2415. X    west = In_Giant_Room
  2416. X    giant = In_Giant_Room
  2417. X;
  2418. XLeaves: CCR_decoration
  2419. X    sdesc = "leaves"
  2420. X    ldesc = {
  2421. X        "The leaves appear to be attached to the beanstalk 
  2422. X        you climbed to get here.";
  2423. X    }
  2424. X    location = In_Narrow_Corridor
  2425. X    noun = 'leaf' 'leaves' 'plant' 'tree' 'stalk' 'beanstalk' 'profusion'
  2426. X;
  2427. END_OF_FILE
  2428. if test 57085 -ne `wc -c <'src/ccr-room.t1'`; then
  2429.     echo shar: \"'src/ccr-room.t1'\" unpacked with wrong size!
  2430. fi
  2431. # end of 'src/ccr-room.t1'
  2432. fi
  2433. echo shar: End of archive 3 \(of 11\).
  2434. cp /dev/null ark3isdone
  2435. MISSING=""
  2436. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2437.     if test ! -f ark${I}isdone ; then
  2438.     MISSING="${MISSING} ${I}"
  2439.     fi
  2440. done
  2441. if test "${MISSING}" = "" ; then
  2442.     echo You have unpacked all 11 archives.
  2443.     echo "Now run buildit.sh to make gam file"
  2444.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2445. else
  2446.     echo You still need to unpack the following archives:
  2447.     echo "        " ${MISSING}
  2448. fi
  2449. ##  End of shell archive.
  2450. exit 0
  2451.