home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #7 / amigamamagazinepolishissue1998.iso / rozrywka / rpg / amigamud / src / proving / caves.m next >
Text File  |  1997-06-24  |  43KB  |  1,089 lines

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1997 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * caves.m - caves level of the proving grounds.
  9.  */
  10.  
  11. define tp_proving tp_caves CreateTable()$
  12. use tp_caves
  13.  
  14. define tp_proving proc monsterSet4(thing room)void:
  15.  
  16.     InitMonsterModels(room, 500);
  17.     AddPossibleMonster(room, m_hugeRat, 25);
  18.     AddPossibleMonster(room, m_hugeSnake, 25);
  19.     AddPossibleMonster(room, m_fighterGoblin, 25);
  20.     AddPossibleMonster(room, m_hugeSpider, 25);
  21.     AddPossibleMonster(room, m_troll, 25);
  22.     AddPossibleMonster(room, m_largeRat, 25);
  23.     AddPossibleMonster(room, m_largeSnake, 25);
  24.     AddPossibleMonster(room, m_goblin, 25);
  25. corp;
  26.  
  27. define tp_proving r_provingCave CreateThing(r_tunnel)$
  28. r_provingCave@p_rDark := true$
  29. r_provingCave@p_oSmellString :=
  30.     "Poor air circulation here has resulted in a stale air smell."$
  31. r_provingCave@p_oListenString := "It is quiet here."$
  32. AutoGraphics(r_provingCave, AutoTunnels)$
  33. AutoPens(r_provingCave, C_DARK_GREY, C_LIGHT_GREY, C_LIGHT_GREY, C_LIGHT_GREY)$
  34. SetThingStatus(r_provingCave, ts_readonly)$
  35. monsterSet4(r_provingCave)$
  36.  
  37. define tp_caves r_sewerCave1 CreateThing(r_provingCave)$
  38. SetupRoomP(r_sewerCave1, "in a rough cave passage leading to the northwest",
  39.     "You can climb a rock up through the cave roof here.")$
  40. RoomName(r_sewerCave1, "Cave", "Passage")$
  41. HUniConnect(r_sewerChamber2, r_sewerCave1, D_DOWN)$
  42. UniConnect(r_sewerCave1, r_sewerChamber2, D_UP)$
  43. r_sewerCave1@p_rUpMessage :=
  44.     "It's a bit of a scramble, but you are able to climb up the rock and "
  45.     "through a hole in the cave roof."$
  46. r_sewerCave1@p_rUpOMessage :=
  47.     "scrambles up a rock and through a hole in the cave roof."$
  48. Scenery(r_sewerCave1, "rock.roof;cave.hole")$
  49.  
  50. define tp_caves r_sewerCave2 CreateThing(r_provingCave)$
  51. SetupRoomP(r_sewerCave2, "in a southwest/southeast cave passage corner", "")$
  52. Connect(r_sewerCave1, r_sewerCave2, D_NORTHWEST)$
  53. RoomName(r_sewerCave2, "Passage", "Corner")$
  54.  
  55. define tp_caves r_sewerCave3 CreateThing(r_provingCave)$
  56. SetupRoomP(r_sewerCave3, "in a rough cave passage leading to the northeast",
  57.     "A hole in the floor here leads down to a large cavern.")$
  58. Connect(r_sewerCave2, r_sewerCave3, D_SOUTHWEST)$
  59. RoomName(r_sewerCave3, "Cave", "Passage")$
  60. r_sewerCave3@p_rDownMessage := "You drop down through the hole."$
  61. r_sewerCave3@p_rDownOMessage := "drops down through the hole."$
  62. Scenery(r_sewerCave3, "hole.cavern;large")$
  63.  
  64. define tp_caves PR_CAVERN_ID NextEffectId()$
  65. define tp_caves proc drawCavern()void:
  66.  
  67.     if not KnowsEffect(nil, PR_CAVERN_ID) then
  68.     DefineEffect(nil, PR_CAVERN_ID);
  69.     GSetImage(nil, "Proving/cavern");
  70.     IfFound(nil);
  71.         ShowCurrentImage();
  72.     Else(nil);
  73.         GSetPen(nil, C_DARK_GREY);
  74.         GAMove(nil, 0.0, 0.0);
  75.         GRectangle(nil, 0.5, 1.0, true);
  76.  
  77.         GSetPen(nil, C_LIGHT_GREY);
  78.         GPolygonStart(nil);
  79.         GAMove(nil, 0.078, 0.1);
  80.         GADraw(nil, 0.24, 0.1);
  81.         GADraw(nil, 0.24, 0.0);
  82.         GADraw(nil, 0.259, 0.0);
  83.         GADraw(nil, 0.259, 0.10);
  84.         GADraw(nil, 0.422, 0.10);
  85.         GADraw(nil, 0.469, 0.25);
  86.         GADraw(nil, 0.469, 0.47);
  87.         GADraw(nil, 0.497, 0.55);
  88.         GADraw(nil, 0.497, 0.61);
  89.         GADraw(nil, 0.469, 0.53);
  90.         GADraw(nil, 0.469, 0.75);
  91.         GADraw(nil, 0.497, 0.75);
  92.         GADraw(nil, 0.497, 0.88);
  93.         GADraw(nil, 0.078, 0.88);
  94.         GADraw(nil, 0.031, 0.73);
  95.         GADraw(nil, 0.031, 0.55);
  96.         GADraw(nil, 0.0, 0.55);
  97.         GADraw(nil, 0.0, 0.47);
  98.         GADraw(nil, 0.031, 0.47);
  99.         GADraw(nil, 0.031, 0.23);
  100.         GPolygonEnd(nil);
  101.  
  102.         GSetPen(nil, C_MEDIUM_GREY);
  103.         GAMove(nil, 0.186, 0.5);
  104.         GEllipse(nil, 0.063, 0.15, true);
  105.     Fi(nil);
  106.     EndEffect();
  107.     fi;
  108.     CallEffect(nil, PR_CAVERN_ID);
  109. corp;
  110.  
  111. define tp_caves CAVERN_MAP_GROUP NextMapGroup()$
  112.  
  113. define tp_caves r_cavernModel CreateThing(r_tunnel)$
  114. r_cavernModel@p_rName := "in a large cavern"$
  115. r_cavernModel@p_rDark := true$
  116. r_cavernModel@p_rName1 := "Large"$
  117. r_cavernModel@p_rName2 := "Cavern"$
  118. r_cavernModel@p_MapGroup := CAVERN_MAP_GROUP$
  119. r_cavernModel@p_rDrawAction := drawCavern$
  120. r_cavernModel@p_rEnterRoomDraw := EnterRoomDraw$
  121. r_cavernModel@p_rLeaveRoomDraw := LeaveRoomDraw$
  122. r_cavernModel@p_oSmellString :=
  123.     "Even though this is a large cavern, the air is still stale."$
  124. r_cavernModel@p_oListenString :=
  125.     "You can hear the fairly regular plop of drops of water falling into "
  126.     "puddles, but other than that it is fairly quiet. The airflow here is "
  127.     "very slow, but nevertheless steady."$
  128. Scenery(r_cavernModel, "boulder;large.slope;rock,strewn.rock.puddle")$
  129. monsterSet4(r_cavernModel)$
  130. SetThingStatus(r_cavernModel, ts_readonly)$
  131.  
  132. define tp_caves proc makeCavern(fixed x, y; string desc)thing:
  133.     thing cavern;
  134.  
  135.     cavern := CreateThing(r_cavernModel);
  136.     cavern@p_rDesc := desc;
  137.     cavern@p_rContents := CreateThingList();
  138.     cavern@p_rExits := CreateIntList();
  139.     cavern@p_rCursorX := x;
  140.     cavern@p_rCursorY := y;
  141.     SetThingStatus(cavern, ts_wizard);
  142.     cavern
  143. corp;
  144.  
  145. define tp_caves r_largeCavern1 makeCavern(0.429, 0.2,
  146.     "You can go down a rough, rock-strewn slope to the west, or along the "
  147.     "top of the slope to the south.")$
  148. UniConnect(r_sewerCave3, r_largeCavern1, D_DOWN)$
  149. HUniConnect(r_largeCavern1, r_sewerCave3, D_UP)$
  150. r_largeCavern1@p_rUpMessage :=
  151.     "You are able to climb up on a rock and through a hole above."$
  152. r_largeCavern1@p_rUpOMessage := "climbs up a rock and disappears above it."$
  153.  
  154. define tp_caves r_largeCavern2 makeCavern(0.247, 0.18,
  155.     "You are in the middle of the northern wall of the cavern. The floor "
  156.     "slopes up to the east and down to the west, and you can also go across "
  157.     "the slope to the south. There is a fissure in the wall, into which "
  158.     "you can fit.")$
  159. Connect(r_largeCavern1, r_largeCavern2, D_WEST)$
  160. HConnect(r_largeCavern1, r_largeCavern2, D_DOWN)$
  161. UniConnect(r_crawlway17, r_largeCavern2, D_DOWN)$
  162. Scenery(r_largeCavern2, "fissure")$
  163.  
  164. define tp_caves r_largeCavern3 makeCavern(0.076, 0.2,
  165.     "You are in the bottom northwest corner of the cavern.")$
  166. Connect(r_largeCavern2, r_largeCavern3, D_WEST)$
  167. HConnect(r_largeCavern2, r_largeCavern3, D_DOWN)$
  168.  
  169. define tp_caves r_largeCavern4 makeCavern(0.44, 0.5,
  170.     "You are in the middle of the upper, east wall of the cavern. A small "
  171.     "crawlway in the wall heads to the southeast.")$
  172. Connect(r_largeCavern1, r_largeCavern4, D_SOUTH)$
  173. Connect(r_largeCavern2, r_largeCavern4, D_SOUTHEAST)$
  174. Scenery(r_largeCavern4, "crawlway")$
  175.  
  176. define tp_caves r_largeCavern5 makeCavern(0.26, 0.5,
  177.     "You are in the middle of the cavern. From here, you can barely see the "
  178.     "walls, but the roof is clearly visible, since it slopes downward here. "
  179.     "You can climb on a large boulder here to get a better view.")$
  180. Connect(r_largeCavern4, r_largeCavern5, D_WEST)$
  181. HUniConnect(r_largeCavern4, r_largeCavern5, D_DOWN)$
  182. Connect(r_largeCavern2, r_largeCavern5, D_SOUTH)$
  183. Connect(r_largeCavern3, r_largeCavern5, D_SOUTHEAST)$
  184. Connect(r_largeCavern1, r_largeCavern5, D_SOUTHWEST)$
  185.  
  186. define tp_caves r_cavernBoulder makeCavern(0.19, 0.5,
  187.     "You have to crouch here since the cavern roof is quite low overhead. "
  188.     "You can't really see much more here than you could from beside the "
  189.     "boulder, but your added height does allow you to see a small passage "
  190.     "leading off from the northeast corner that should be reachable by "
  191.     "climbing a boulder there.")$
  192. r_cavernBoulder@p_rName := "on a boulder in a large cavern"$
  193. Connect(r_largeCavern5, r_cavernBoulder, D_UP)$
  194.  
  195. define tp_caves r_largeCavern6 makeCavern(0.069, 0.5,
  196.     "You are in the middle of the lower, west wall of the cavern. A small "
  197.     "crawlway in the wall heads further west.")$
  198. Connect(r_largeCavern5, r_largeCavern6, D_WEST)$
  199. HConnect(r_largeCavern5, r_largeCavern6, D_DOWN)$
  200. Connect(r_largeCavern3, r_largeCavern6, D_SOUTH)$
  201. Connect(r_largeCavern2, r_largeCavern6, D_SOUTHWEST)$
  202. Scenery(r_largeCavern6, "crawlway")$
  203.  
  204. define tp_caves r_largeCavern7 makeCavern(0.438, 0.82,
  205.     "You are in the upper southeast corner of the cavern. A large tunnel "
  206.     "heads further east.")$
  207. Connect(r_largeCavern4, r_largeCavern7, D_SOUTH)$
  208. Connect(r_largeCavern5, r_largeCavern7, D_SOUTHEAST)$
  209. Scenery(r_largeCavern7, "tunnel;large")$
  210.  
  211. define tp_caves r_largeCavern8 makeCavern(0.25, 0.82,
  212.     "You are in the middle of the southern wall of the cavern. The floor "
  213.     "slopes up to the east and down to the west and you can also go across "
  214.     "the slope to the north.")$
  215. Connect(r_largeCavern7, r_largeCavern8, D_WEST)$
  216. HConnect(r_largeCavern7, r_largeCavern8, D_DOWN)$
  217. Connect(r_largeCavern5, r_largeCavern8, D_SOUTH)$
  218. Connect(r_largeCavern4, r_largeCavern8, D_SOUTHWEST)$
  219. Connect(r_largeCavern6, r_largeCavern8, D_SOUTHEAST)$
  220.  
  221. define tp_caves r_largeCavern9 makeCavern(0.08, 0.75,
  222.     "You are in the lower southwest corner of the cavern.")$
  223. Connect(r_largeCavern8, r_largeCavern9, D_WEST)$
  224. HConnect(r_largeCavern8, r_largeCavern9, D_DOWN)$
  225. Connect(r_largeCavern6, r_largeCavern9, D_SOUTH)$
  226. Connect(r_largeCavern5, r_largeCavern9, D_SOUTHWEST)$
  227.  
  228. ignore DeleteSymbol(tp_caves, "makeCavern")$
  229.  
  230. define tp_caves r_sewerCave4 CreateThing(r_provingCave)$
  231. SetupRoomP(r_sewerCave4, "in a small crawlway",
  232.     "The crawlway makes a tight bend, going northwest and north.")$
  233. Connect(r_largeCavern4, r_sewerCave4, D_SOUTHEAST)$
  234.  
  235. define tp_caves r_sewerCave5 CreateThing(r_provingCave)$
  236. SetupRoomP(r_sewerCave5, "in a small crawlway",
  237.     "The crawlway makes a slight bend, going northwest and south.")$
  238. Connect(r_sewerCave4, r_sewerCave5, D_NORTH)$
  239.  
  240. define tp_caves r_sewerCave6 CreateThing(r_provingCave)$
  241. SetupRoomP(r_sewerCave6, "at the end of a fissure",
  242.     "The fissue expands to the southwest, and a small crawlway near the "
  243.     "floor heads southeast.")$
  244. Connect(r_sewerCave5, r_sewerCave6, D_NORTHWEST)$
  245.  
  246. define tp_caves r_sewerCave7 CreateThing(r_provingCave)$
  247. SetupRoomP(r_sewerCave7, "in a bend in a fissure",
  248.     "The fissure continues to the northeast and to the south.")$
  249. Connect(r_sewerCave6, r_sewerCave7, D_SOUTHWEST)$
  250. Connect(r_largeCavern2, r_sewerCave7, D_NORTH)$
  251.  
  252. define tp_caves r_sewerCave8 CreateThing(r_provingCave)$
  253. SetupRoomP(r_sewerCave8, "at a corner in a large tunnel",
  254.     "The tunnel makes a right-angle bend here, heading west and south.")$
  255. Connect(r_largeCavern7, r_sewerCave8, D_EAST)$
  256.  
  257. define tp_caves r_sewerCave9 CreateThing(r_provingCave)$
  258. SetupRoomP(r_sewerCave9, "in a large north-south tunnel", "")$
  259. Connect(r_sewerCave8, r_sewerCave9, D_SOUTH)$
  260.  
  261. define tp_caves r_sewerCave10 CreateThing(r_provingCave)$
  262. SetupRoomP(r_sewerCave10, "at a bend in a large tunnel",
  263.     "The tunnel leads north and southeast here.")$
  264. Connect(r_sewerCave9, r_sewerCave10, D_SOUTH)$
  265.  
  266. define tp_caves r_sewerCave11 CreateThing(r_provingCave)$
  267. SetupRoomP(r_sewerCave11,
  268.     "in a chamber formed by the meeting of several passages",
  269.     "A large tunnel from the northwest bends back to the northeast here. "
  270.     "A smaller tunnel arrives from the west, and a hole in the floor heads "
  271.     "downward.")$
  272. Connect(r_sewerCave10, r_sewerCave11, D_SOUTHEAST)$
  273. Scenery(r_sewerCave11, "tunnel,passage;large,small,smaller.hole")$
  274.  
  275. define tp_caves r_sewerCave12 CreateThing(r_provingCave)$
  276. SetupRoomP(r_sewerCave12, "at a bend in a large tunnel",
  277.     "The tunnel leads north and southwest here.")$
  278. Connect(r_sewerCave11, r_sewerCave12, D_NORTHEAST)$
  279.  
  280. define tp_caves r_sewerCave13 CreateThing(r_provingCave)$
  281. SetupRoomP(r_sewerCave13, "in a large north-south tunnel", "")$
  282. Connect(r_sewerCave12, r_sewerCave13, D_NORTH)$
  283.  
  284. define tp_caves r_sewerCave14 CreateThing(r_provingCave)$
  285. SetupRoomP(r_sewerCave14, "in a small pit",
  286.     "A very tight tube wanders away to the northwest.")$
  287. Connect(r_sewerCave11, r_sewerCave14, D_DOWN)$
  288.  
  289. define tp_caves r_sewerCave15 CreateThing(r_provingCave)$
  290. SetupRoomP(r_sewerCave15, "at the end of a high, wandering passage",
  291.     "The main passage from the west ends here, but there is very tight tube "
  292.     "wandering away to the southeast.")$
  293. Connect(r_sewerCave14, r_sewerCave15, D_NORTHWEST)$
  294.  
  295. define tp_caves r_sewerCave16 CreateThing(r_provingCave)$
  296. SetupRoomP(r_sewerCave16, "in a high, wandering passage", "")$
  297. Connect(r_sewerCave15, r_sewerCave16, D_WEST)$
  298.  
  299. define tp_caves r_sewerCave17 CreateThing(r_provingCave)$
  300. SetupRoomP(r_sewerCave17, "in a high, wandering passage",
  301.     "Handholds on one wall should allow you to climb up through a hole in "
  302.     "the roof of the passage here.")$
  303. Connect(r_sewerCave16, r_sewerCave17, D_NORTHWEST)$
  304. Scenery(r_sewerCave17, "handhold,hole")$
  305.  
  306. define tp_caves r_sewerCave18 CreateThing(r_provingCave)$
  307. SetupRoomP(r_sewerCave18, "at the end of a high, wandering passage",
  308.     "The main passage from the east ends here, but there is a passable crack "
  309.     "in the north wall, leading roughly northeastwards.")$
  310. Connect(r_sewerCave17, r_sewerCave18, D_WEST)$
  311. Scenery(r_sewerCave18, "crack;passable")$
  312.  
  313. define tp_caves r_sewerCave19 CreateThing(r_provingCave)$
  314. SetupRoomP(r_sewerCave19, "in a long, narrow crack", "")$
  315. Connect(r_sewerCave18, r_sewerCave19, D_NORTHEAST)$
  316.  
  317. define tp_caves r_sewerCave20 CreateThing(r_provingCave)$
  318. SetupRoomP(r_sewerCave20, "in a long, narrow crack", "")$
  319. Connect(r_sewerCave19, r_sewerCave20, D_NORTH)$
  320.  
  321. define tp_caves r_sewerCave21 CreateThing(r_provingCave)$
  322. SetupRoomP(r_sewerCave21, "at the end of a long, narrow crack",
  323.     "The crack extends a long way to the south, but closes up here. A small "
  324.     "crawlway does lead to the east, however.")$
  325. Connect(r_sewerCave20, r_sewerCave21, D_NORTH)$
  326. Connect(r_largeCavern6, r_sewerCave21, D_WEST)$
  327. Scenery(r_sewerCave21, "crack;long,narrow.crawlway;small")$
  328.  
  329. define tp_caves r_sewerCave22 CreateThing(r_provingCave)$
  330. SetupRoomP(r_sewerCave22, "at a bend in a smallish tunnel",
  331.     "A larger area can be seen to the east, but to the south you just see "
  332.     "another corner.")$
  333. Connect(r_sewerCave11, r_sewerCave22, D_WEST)$
  334.  
  335. define tp_caves r_sewerCave23 CreateThing(r_provingCave)$
  336. SetupRoomP(r_sewerCave23, "at a sharp corner in a smallish tunnel", "")$
  337. Connect(r_sewerCave22, r_sewerCave23, D_SOUTH)$
  338.  
  339. define tp_caves r_sewerCave24 CreateThing(r_provingCave)$
  340. SetupRoomP(r_sewerCave24, "in a smallish tunnel running southeast-northwest",
  341.     "A small opening leads directly south.")$
  342. Connect(r_sewerCave23, r_sewerCave24, D_NORTHWEST)$
  343. RoomName(r_sewerCave24, "Tunnel", "")$
  344. Scenery(r_sewerCave24, "opening,hole;small")$
  345.  
  346. define tp_caves r_sewerCave25 CreateThing(r_provingCave)$
  347. SetupRoomP(r_sewerCave25, "at a bend in a smallish tunnel", "")$
  348. Connect(r_sewerCave24, r_sewerCave25, D_NORTHWEST)$
  349.  
  350. define tp_caves r_sewerCave26 CreateThing(r_provingCave)$
  351. SetupRoomP(r_sewerCave26, "at a bend in a smallish tunnel", "")$
  352. Connect(r_sewerCave25, r_sewerCave26, D_NORTH)$
  353.  
  354. define tp_caves r_sewerCave27 CreateThing(r_provingCave)$
  355. SetupRoomP(r_sewerCave27, "at the east end of a long, wide, low tunnel",
  356.     "A smallish tunnel heads off to the southeast.")$
  357. Connect(r_sewerCave26, r_sewerCave27, D_NORTHEAST)$
  358.  
  359. define tp_caves r_sewerCave28 CreateThing(r_provingCave)$
  360. SetupRoomP(r_sewerCave28, "in a long, wide, low, east-west tunnel", "")$
  361. Connect(r_sewerCave27, r_sewerCave28, D_WEST)$
  362.  
  363. define tp_caves r_sewerCave29 CreateThing(r_provingCave)$
  364. SetupRoomP(r_sewerCave29, "in a long, wide, low, east-west tunnel", "")$
  365. Connect(r_sewerCave28, r_sewerCave29, D_WEST)$
  366.  
  367. define tp_caves r_sewerCave30 CreateThing(r_provingCave)$
  368. SetupRoomP(r_sewerCave30, "at the west end of a long, wide, low tunnel",
  369.     "A narrow passage heads north.")$
  370. Connect(r_sewerCave29, r_sewerCave30, D_WEST)$
  371.  
  372. define tp_caves r_sewerCave31 CreateThing(r_provingCave)$
  373. SetupRoomP(r_sewerCave31, "in a narrow north-south passage",
  374.     "A large crack in the floor leads to a high passage below.")$
  375. Connect(r_sewerCave30, r_sewerCave31, D_NORTH)$
  376. Connect(r_sewerCave17, r_sewerCave31, D_UP)$
  377. Scenery(r_sewerCave31, "crack;large.passage;high")$
  378.  
  379. define tp_caves r_sewerCave32 CreateThing(r_provingCave)$
  380. SetupRoomP(r_sewerCave32,"at a south-east-west Tee in the narrow passage","")$
  381. Connect(r_sewerCave31, r_sewerCave32, D_NORTH)$
  382.  
  383. define tp_caves r_sewerCave33 CreateThing(r_provingCave)$
  384. SetupRoomP(r_sewerCave33, "in a narrow east-west passage", "")$
  385. Connect(r_sewerCave32, r_sewerCave33, D_EAST)$
  386.  
  387. define tp_caves r_sewerCave34 CreateThing(r_provingCave)$
  388. SetupRoomP(r_sewerCave34, "at a north to west corner in the narrow passage",
  389.     "")$
  390. Connect(r_sewerCave33, r_sewerCave34, D_EAST)$
  391.  
  392. define tp_caves r_sewerCave35 CreateThing(r_provingCave)$
  393. SetupRoomP(r_sewerCave35, "on a narrow ledge",
  394.     "The ledge is about halfway up the south wall of a large cavern. You "
  395.     "can't see the far walls of the cavern from here, but you can make out a "
  396.     "large rock in the middle of it. A narrow passage heads south, but there "
  397.     "are no other exits. You can jump down to the cavern, but you would not "
  398.     "be able to get back up.")$
  399. Connect(r_sewerCave34, r_sewerCave35, D_NORTH)$
  400. UniConnect(r_sewerCave35, r_largeCavern8, D_DOWN)$
  401. Scenery(r_sewerCave35,
  402.     "ledge;narrow.cavern;large.passage;narrow.rock;large")$
  403.  
  404. define tp_caves r_spiderDen CreateThing(r_provingCave)$
  405. SetupRoomP(r_spiderDen, "in the spider den",
  406.     "This medium-sized chamber is evidently the home of many of the large "
  407.     "spiders that populate the caves hereabouts. Large webs festoon the "
  408.     "walls and ceiling, with many hanging strands lower down. The air here "
  409.     "has a distinctly acidic tang to it. The bones of many small, and a few "
  410.     "not-so-small, animals litter the floor, often to a depth of several "
  411.     "inches.")$
  412. Connect(r_sewerCave24, r_spiderDen, D_SOUTH)$
  413. AutoGraphics(r_spiderDen, AutoTunnelChamber)$
  414. RoomName(r_spiderDen, "Spider", "Den")$
  415. Scenery(r_spiderDen,
  416.     "ceiling.wall.dust."
  417.     "web,strand;large,spider,hanging."
  418.     "bone,litter,skeleton;small,not-so-small,not,so-small")$
  419. r_spiderDen@p_oSmellString :=
  420.     "The sharp smell of spiders is predominant here, but there is also a "
  421.     "noticeable component of decay, and another of dust."$
  422. r_spiderDen@p_Image := "Proving/spiderDen"$
  423. define tp_caves o_spiderEgg CreateThing(nil)$
  424. o_spiderEgg@p_oName := "egg;spider"$
  425. o_spiderEgg@p_oDesc :=
  426.     "The spider egg is a white sphere about a foot in diameter. It is light "
  427.     "in weight, but feels solid inside. It's surface is smooth and shiny - "
  428.     "quite reminiscent of a pearl."$
  429. o_spiderEgg@p_oHome := r_lostAndFound$
  430. o_spiderEgg@p_oEatString :=
  431.     "The egg is too large for you to bite, let alone swallow whole. When "
  432.     "licked, it seems to absorb your saliva, but you notice nothing special "
  433.     "about its taste, which is a mixture of acidity and dust."$
  434. o_spiderEgg@p_oSmellString :=
  435.     "The egg has no strong smell - perhaps a touch of the spider's acid tang."$
  436. o_spiderEgg@p_Image := "Proving/spiderEgg"$
  437. define tp_caves p_spiderDenIsReset CreateBoolProp()$
  438. r_spiderDen@p_spiderDenIsReset := true$
  439. SetThingStatus(o_spiderEgg, ts_readonly)$
  440. define tp_caves proc eggQuestDesc()string:
  441.     "Bring me a spider egg."
  442. corp;
  443. define tp_caves proc eggQuestGive()status:
  444.     thing egg;
  445.  
  446.     egg := It();
  447.     if Parent(egg) = o_spiderEgg then
  448.     GiveToQuestor("spider egg");
  449.     succeed
  450.     elif egg@p_oName = "egg;spider" then
  451.     GiveToQuestor("spider egg");
  452.     SPrint(TrueMe(), "Questor is not impressed.\n");
  453.     fail
  454.     else
  455.     continue
  456.     fi
  457. corp;
  458. define tp_caves proc eggQuestHint()string:
  459.     "Look beyond the dagger."
  460. corp;
  461. QuestGive("Egg", eggQuestDesc, eggQuestGive, eggQuestHint)$
  462. r_spiderDen@p_rLastVisit := 0$
  463. define tp_caves proc spiderEnter(thing room)void:
  464.     thing me, sword;
  465.     int i, now, count;
  466.     list thing lt;
  467.  
  468.     now := Time();
  469.     me := Me();
  470.     if me@p_pStandard and room@p_spiderDenIsReset and
  471.     now - room@p_rLastVisit >= 5 * 60
  472.     then
  473.     room@p_rLastVisit := now;
  474.     /* See the comment about the goblin dagger for why this is not a
  475.        perfect test. */
  476.     if not DoneQuest(eggQuestGive) and
  477.         CarryingChild(me, o_spiderEgg) = nil and
  478.         ChildHere(r_spiderDen, o_spiderEgg) = nil
  479.     then
  480.         DepositClone(room, o_spiderEgg);
  481.     fi;
  482.     for i from 0 upto Random(3) + 2 do
  483.         ignore CreateMonster(me, m_trackerSpider, room);
  484.     od;
  485.     lt := me@p_pCarrying;
  486.     count := Count(lt);
  487.     i := 0;
  488.     while i < count do
  489.         sword := lt[i];
  490.         if sword@p_oDamage >= o_longSword@p_oDamage then
  491.         i := count + 1;
  492.         else
  493.         i := i + 1;
  494.         fi;
  495.     od;
  496.     if i = count then
  497.         DepositClone(room, o_longSword);
  498.     fi;
  499.     fi;
  500. corp;
  501. AddAnyEnterAction(r_spiderDen, spiderEnter, false)$
  502. define tp_caves proc resetSpiderDenImage(thing room)void:
  503.     room@p_Image := "Proving/spiderDen";
  504.     room@p_spiderDenIsReset := true;
  505. corp;
  506. define tp_caves proc spiderDenKill(thing thePlayer, theModel)void:
  507.     if theModel = m_trackerSpider and
  508.     FindAgentAsChild(r_spiderDen, m_trackerSpider) = nil
  509.     then
  510.     /* killed the last spider - show new picture */
  511.     ShowImageAndRefresh("Proving/spiderDen-v");
  512.     r_spiderDen@p_Image := "Proving/spiderDen-v";
  513.     r_spiderDen@p_spiderDenIsReset := false;
  514.     DoAfter(5 * 60, r_spiderDen, resetSpiderDenImage);
  515.     fi;
  516. corp;
  517. r_spiderDen@p_rKillAction := spiderDenKill$
  518.  
  519. define tp_caves r_sewerCave36 CreateThing(r_provingCave)$
  520. SetupRoomP(r_sewerCave36, "in a small chamber",
  521.     "Passages lead off in several directions.")$
  522. Connect(r_sewerCave13, r_sewerCave36, D_NORTH)$
  523. AutoGraphics(r_sewerCave36, AutoTunnelChamber)$
  524.  
  525. define tp_caves r_sewerCave37 CreateThing(r_provingCave)$
  526. SetupRoomP(r_sewerCave37, "in a passage junction", "")$
  527. Connect(r_sewerCave36, r_sewerCave37, D_NORTHWEST)$
  528.  
  529. define tp_caves r_sewerCave38 CreateThing(r_provingCave)$
  530. SetupRoomP(r_sewerCave38, "in a northeast/southwest passage", "")$
  531. Connect(r_sewerCave37, r_sewerCave38, D_NORTHEAST)$
  532.  
  533. define tp_caves r_sewerCave39 CreateThing(r_provingCave)$
  534. SetupRoomP(r_sewerCave39, "in a southwest/southeast passage", "")$
  535. Connect(r_sewerCave38, r_sewerCave39, D_NORTHEAST)$
  536.  
  537. define tp_caves r_sewerCave40 CreateThing(r_provingCave)$
  538. SetupRoomP(r_sewerCave40, "in an east/northwest passage", "")$
  539. Connect(r_sewerCave39, r_sewerCave40, D_SOUTHEAST)$
  540.  
  541. define tp_caves r_sewerCave41 CreateThing(r_provingCave)$
  542. SetupRoomP(r_sewerCave41, "in a north/south/west passage Tee", "")$
  543. Connect(r_sewerCave40, r_sewerCave41, D_EAST)$
  544.  
  545. define tp_caves r_sewerCave42 CreateThing(r_provingCave)$
  546. SetupRoomP(r_sewerCave42, "at a west/south passage corner", "")$
  547. Connect(r_sewerCave41, r_sewerCave42, D_NORTH)$
  548.  
  549. define tp_caves r_sewerCave43 CreateThing(r_provingCave)$
  550. SetupRoomP(r_sewerCave43, "at a passage dead-end", "")$
  551. Connect(r_sewerCave42, r_sewerCave43, D_WEST)$
  552.  
  553. define tp_caves r_sewerCave44 CreateThing(r_provingCave)$
  554. SetupRoomP(r_sewerCave44, "in a passage crossing", "")$
  555. Connect(r_sewerCave41, r_sewerCave44, D_SOUTH)$
  556.  
  557. define tp_caves r_sewerCave45 CreateThing(r_provingCave)$
  558. SetupRoomP(r_sewerCave45, "in a south/east/west passage Tee", "")$
  559. Connect(r_sewerCave44, r_sewerCave45, D_WEST)$
  560.  
  561. define tp_caves r_sewerCave46 CreateThing(r_provingCave)$
  562. SetupRoomP(r_sewerCave46, "at a north/west passage corner", "")$
  563. Connect(r_sewerCave45, r_sewerCave46, D_SOUTH)$
  564.  
  565. define tp_caves r_sewerCave47 CreateThing(r_provingCave)$
  566. SetupRoomP(r_sewerCave47, "in an east/west passage", "")$
  567. Connect(r_sewerCave46, r_sewerCave47, D_WEST)$
  568. Connect(r_sewerCave36, r_sewerCave47, D_EAST)$
  569.  
  570. define tp_caves r_sewerCave48 CreateThing(r_provingCave)$
  571. SetupRoomP(r_sewerCave48, "in an east/northwest passage", "")$
  572. Connect(r_sewerCave36, r_sewerCave48, D_SOUTHEAST)$
  573.  
  574. define tp_caves r_sewerCave49 CreateThing(r_provingCave)$
  575. SetupRoomP(r_sewerCave49, "in a west/northeast passage", "")$
  576. Connect(r_sewerCave48, r_sewerCave49, D_EAST)$
  577.  
  578. define tp_caves r_sewerCave50 CreateThing(r_provingCave)$
  579. SetupRoomP(r_sewerCave50, "in a north/south/southwest passage Tee", "")$
  580. Connect(r_sewerCave49, r_sewerCave50, D_NORTHEAST)$
  581. Connect(r_sewerCave44, r_sewerCave50, D_SOUTH)$
  582.  
  583. define tp_caves r_sewerCave51 CreateThing(r_provingCave)$
  584. SetupRoomP(r_sewerCave51, "in a north/east/southwest passage Tee", "")$
  585. Connect(r_sewerCave50, r_sewerCave51, D_SOUTH)$
  586.  
  587. define tp_caves r_sewerCave52 CreateThing(r_provingCave)$
  588. SetupRoomP(r_sewerCave52, "in an east/west passage", "")$
  589. Connect(r_sewerCave51, r_sewerCave52, D_EAST)$
  590.  
  591. define tp_caves r_sewerCave53 CreateThing(r_provingCave)$
  592. SetupRoomP(r_sewerCave53, "at a west/north passage corner", "")$
  593. Connect(r_sewerCave52, r_sewerCave53, D_EAST)$
  594.  
  595. define tp_caves r_sewerCave54 CreateThing(r_provingCave)$
  596. SetupRoomP(r_sewerCave54, "in a northwest/south passage", "")$
  597. Connect(r_sewerCave53, r_sewerCave54, D_NORTH)$
  598.  
  599. define tp_caves r_sewerCave55 CreateThing(r_provingCave)$
  600. SetupRoomP(r_sewerCave55, "in a west/northeast/southeast Tee", "")$
  601. Connect(r_sewerCave54, r_sewerCave55, D_NORTHWEST)$
  602. Connect(r_sewerCave44, r_sewerCave55, D_EAST)$
  603.  
  604. define tp_caves r_sewerCave56 CreateThing(r_provingCave)$
  605. SetupRoomP(r_sewerCave56, "in a north/southwest passage", "")$
  606. Connect(r_sewerCave55, r_sewerCave56, D_NORTHEAST)$
  607.  
  608. define tp_caves r_sewerCave57 CreateThing(r_provingCave)$
  609. SetupRoomP(r_sewerCave57, "in a south/east passage junction",
  610.        "The east passage slopes gently upwards.")$
  611. Connect(r_sewerCave56, r_sewerCave57, D_NORTH)$
  612.  
  613. define tp_caves r_sewerCave58 CreateThing(r_provingCave)$
  614. SetupRoomP(r_sewerCave58, "at a northeast/west passage corner", "")$
  615. Connect(r_sewerCave51, r_sewerCave58, D_SOUTHWEST)$
  616.  
  617. define tp_caves r_sewerCave59 CreateThing(r_provingCave)$
  618. SetupRoomP(r_sewerCave59, "at the end of an east/west passage",
  619.     "A ladder leads upwards through a small hole.")$
  620. Connect(r_sewerCave58, r_sewerCave59, D_WEST)$
  621. Scenery(r_sewerCave59, "ladder.hole;small")$
  622.  
  623. define tp_caves r_sewerCave60 CreateThing(r_provingCave)$
  624. SetupRoomP(r_sewerCave60, "in an east/west passage",
  625.     "A ladder leads downwards through a small hole.")$
  626. Connect(r_sewerCave59, r_sewerCave60, D_UP)$
  627. Scenery(r_sewerCave60, "ladder.hole;small")$
  628.  
  629. define tp_caves r_sewerCave61 CreateThing(r_provingCave)$
  630. SetupRoomP(r_sewerCave61, "in an east/west passage", "")$
  631. Connect(r_sewerCave60, r_sewerCave61, D_WEST)$
  632.  
  633. define tp_caves r_sewerCave62 CreateThing(r_provingCave)$
  634. SetupRoomP(r_sewerCave62, "in an east/north-west bend in the passage",
  635.     "A ladder leads downwards through a small hole.")$
  636. Connect(r_sewerCave61, r_sewerCave62, D_WEST)$
  637. Scenery(r_sewerCave60, "ladder.hole;small")$
  638.  
  639. define tp_caves r_sewerCave63 CreateThing(r_provingCave)$
  640. SetupRoomP(r_sewerCave63, "at the end of a north/south passage",
  641.     "A ladder leads upwards through a small hole.")$
  642. Connect(r_sewerCave62, r_sewerCave63, D_DOWN)$
  643. Scenery(r_sewerCave59, "ladder.hole;small")$
  644.  
  645. define tp_caves r_sewerCave64 CreateThing(r_provingCave)$
  646. SetupRoomP(r_sewerCave64, "at an east/south passage corner", "")$
  647. Connect(r_sewerCave63, r_sewerCave64, D_NORTH)$
  648. Connect(r_sewerCave36, r_sewerCave64, D_WEST)$
  649.  
  650. define tp_caves r_sewerCave65 CreateThing(r_provingCave)$
  651. SetupRoomP(r_sewerCave65, "in an north/east/southwest passage Tee", "")$
  652. Connect(r_sewerCave36, r_sewerCave65, D_NORTHEAST)$
  653. Connect(r_sewerCave45, r_sewerCave65, D_WEST)$
  654.  
  655. define tp_caves r_sewerCave66 CreateThing(r_provingCave)$
  656. SetupRoomP(r_sewerCave66, "at the end of a north/south passage",
  657.     "A stone staircase leads upwards.")$
  658. Connect(r_sewerCave65, r_sewerCave66, D_NORTH)$
  659. Scenery(r_sewerCave66, "staircase;stone.stair;stone")$
  660.  
  661. define tp_caves r_sewerCave67 CreateThing(r_provingCave)$
  662. SetupRoomP(r_sewerCave67, "on a stone staircase", "")$
  663. Connect(r_sewerCave66, r_sewerCave67, D_UP)$
  664. Scenery(r_sewerCave67, "staircase;stone.stair;stone")$
  665.  
  666. define tp_caves r_sewerCave68 CreateThing(r_provingTunnel1)$
  667. SetupRoomDP(r_sewerCave68, "at the top of a stone staircase",
  668.     "There is a small iron grill on the east wall, through which you can see "
  669.     "a glimmer of light and a tunnel. You can see no way to get there, "
  670.     "but you do see a small hole in the stone, just below the grill. It "
  671.     "is too small to put your finger into, and it doesn't look like a "
  672.     "natural hole.")$
  673. Connect(r_sewerCave67, r_sewerCave68, D_UP)$
  674. Scenery(r_sewerCave68,
  675.     "staircase;stone.stair;stone."
  676.     "light;glimmer,of.glimmer."
  677.     "tunnel")$
  678. define tp_caves o_grill CreateThing(nil)$
  679. FakeModel(o_grill, "grill;small,iron", "")$
  680. define tp_caves proc grillDescribe()string:
  681.     string s;
  682.  
  683.     s := GetAgents(r_sewer6);
  684.     if s ~= "" then
  685.     "Through the grill you can see: " + GetAgents(r_sewer6)
  686.     else
  687.     "You can currently see nothing through the grill."
  688.     fi
  689. corp;
  690. o_grill@p_oDescAction := grillDescribe$
  691. AddTail(r_sewerCave68@p_rContents, o_grill)$
  692. define tp_proving o_ironKey CreateThing(nil)$
  693. o_ironKey@p_oName := "key;large,iron"$
  694. o_ironKey@p_oDesc :=
  695.     "The key is of simple construction, consisting of a long round shaft, a "
  696.     "loop at one end for turning it, and 3 finger rods at the other."$
  697. SetThingStatus(o_ironKey, ts_readonly)$
  698. o_ironKey@p_oHome := r_garbageRoom$
  699. o_ironKey@p_Image := "Proving/ironKey"$
  700. define tp_caves o_keyHole1 CreateThing(nil)$
  701. FakeObject(o_keyHole1, r_sewerCave68, "hole,keyhole;small,key", "")$
  702. o_keyHole1@p_oContents := CreateThingList()$
  703. define tp_caves proc putInKeyHole1(thing key, keyhole)status:
  704.     string name;
  705.     bool hidden;
  706.  
  707.     if Parent(key) = o_ironKey then
  708.     name := CharacterNameG(Me());
  709.     hidden := Me()@p_pHidden;
  710.     Print("The iron key slips into the hole and turns easily. A section "
  711.         "of the wall pivots out of the way and you walk through "
  712.         "into the sewer.\n");
  713.     if hidden then
  714.         OPrint("A section of the east wall pivots open, then quickly "
  715.         "closes again.\n");
  716.     else
  717.         OPrint(Capitalize(name) +
  718.         " does something to the east wall, and a section of "
  719.         "it opens up, and " + name + " walks through. The wall "
  720.         "then closes again before anyone can follow.\n");
  721.     fi;
  722.     LeaveRoomStuff(r_sewer6, D_EAST, MOVE_SPECIAL);
  723.     EnterRoomStuff(r_sewer6, D_WEST, MOVE_SPECIAL);
  724.     if hidden then
  725.         OPrint("A section of the west wall pivots open, then quickly "
  726.         "closes again.\n");
  727.     else
  728.         OPrint("A section of the west wall pivots open and " + name +
  729.         "emerges. The wall quickly closes again.\n");
  730.     fi;
  731.     succeed
  732.     else
  733.     Print("The " + FormatName(key@p_oName) +
  734.         " will not fit into the hole.\n");
  735.     fail
  736.     fi
  737. corp;
  738. o_keyHole1@p_oPutInMeChecker := putInKeyHole1$
  739. define tp_caves proc doUnlock1(thing keyhole, key)status:
  740.     putInKeyHole1(key, keyhole)
  741. corp;
  742. o_keyHole1@p_oUnlockMeWithChecker := doUnlock1$
  743. o_keyHole1@p_Image := "Proving/keyHole"$
  744. SetThingStatus(o_keyHole1, ts_readonly)$
  745.  
  746. define tp_caves p_mPath CreateStringProp()$
  747. define tp_caves p_mPathIndex CreateIntProp()$
  748. define tp_caves p_mWasForced CreateBoolProp()$
  749.  
  750. define tp_caves RockPile CreateThing(nil)$
  751.  
  752. RockPile@p_mPath := "nwnenesee s w w swsee nes e e n nww w s w w "$
  753. RockPile@p_mPathIndex := 0$
  754. RockPile@p_mWasForced := false$
  755. RockPile@p_pHitMax := 10$
  756. RockPile@p_pHitNow := 10$
  757. RockPile@p_oListenString := "The pile of rocks is silent."$
  758. RockPile@p_oSmellString :=
  759.     "The pile of rocks smells like rocks, with a very faint tang of "
  760.     "something vaguely animal-like."$
  761.  
  762. define tp_caves proc rockPileStep()void:
  763.     thing here, me;
  764.     int now, max, index, dir, i, d;
  765.     string path;
  766.     list int exits;
  767.  
  768.     me := Me();
  769.     if not me@p_mWasForced then
  770.     now := me@p_pHitNow;
  771.     max := me@p_pHitMax;
  772.     if now >= max - 1 then
  773.         here := Here();
  774.         path := me@p_mPath;
  775.         index := me@p_mPathIndex;
  776.         if index = Length(path) then
  777.         index := 0;
  778.         fi;
  779.         dir := PairToDir(SubString(path, index, 2));
  780.         path := DirName(dir);
  781.         if LightAt(here) then
  782.         OPrint("With a loud grinding noise, the rock pile leaves to " +
  783.             path + ".\n");
  784.         ForEachAgent(here, UnShowIconOnce);
  785.         else
  786.         OPrint("A loud grinding noise starts and receeds to " + path +
  787.             ".\n");
  788.         fi;
  789.         exits := here@p_rExits;
  790.         for i from 0 upto Count(exits) - 1 do
  791.         d := exits[i];
  792.         if d ~= dir then
  793.             ABPrint(here@(DirProp(d)), nil, nil,
  794.             "You hear a grinding sound coming from " +
  795.             DirName(DirBack(d)) + ".\n");
  796.         fi;
  797.         od;
  798.         here := here@(DirProp(dir));
  799.         SetLocation(here);
  800.         dir := DirBack(dir);
  801.         path := DirName(dir);
  802.         if LightAt(here) then
  803.         OPrint(
  804.             "With a loud grinding noise, the rock pile arrives from " +
  805.             path + ".\n");
  806.         ForEachAgent(here, ShowIconOnce);
  807.         else
  808.         OPrint("A loud grinding noise starts from " + path +
  809.             ", comes quite close, then stops.\n");
  810.         fi;
  811.         exits := here@p_rExits;
  812.         for i from 0 upto Count(exits) - 1 do
  813.         d := exits[i];
  814.         if d ~= dir then
  815.             ABPrint(here@(DirProp(d)), nil, nil,
  816.             "You hear a grinding sound coming from " +
  817.             DirName(DirBack(d)) + ".\n");
  818.         fi;
  819.         od;
  820.         me@p_mPathIndex := index + 2;
  821.     fi;
  822.     if now < max then
  823.         me@p_pHitNow := now + 1;
  824.     fi;
  825.     After(60.0, rockPileStep);
  826.     fi;
  827.     me@p_mWasForced := false;
  828. corp;
  829.  
  830. define tp_caves proc forceStep()status:
  831.     rockPileStep();
  832.     Me()@p_mWasForced := true;
  833.     After(60.0, rockPileStep);
  834.     continue
  835. corp;
  836.  
  837. define tp_caves proc rockPileFight(thing rockPile)void:
  838.     thing attacker, here, weapon, key;
  839.     string weaponName;
  840.     int hitMax, hitNow;
  841.  
  842.     attacker := Me();
  843.     here := Here();
  844.     weapon := attacker@p_pWeapon;
  845.     weaponName := FormatName(weapon@p_oName);
  846.     if IsAncestor(weapon, o_stiletto) then
  847.     hitMax := rockPile@p_pHitMax;
  848.     hitNow := rockPile@p_pHitNow;
  849.     Print("The stiletto is able to slip between a pair of the close "
  850.         "fitting rocks making up the rock pile. ");
  851.     if hitNow >= hitMax - 1 then
  852.         ignore ForceAction(rockPile, forceStep);
  853.         rockPile@p_pHitNow := hitNow - 2;
  854.         if not FindChildOnList(here@p_rContents, o_ironKey) and
  855.         not FindChildOnList(attacker@p_pCarrying, o_ironKey)
  856.         then
  857.         Print("Tinkle.\n");
  858.         OPrint("Tinkle.\n");
  859.         key := CreateThing(o_ironKey);
  860.         SetThingStatus(key, ts_wizard);
  861.         GiveThing(key, SysAdmin);
  862.         AddTail(here@p_rContents, key);
  863.         key@p_oCreator := attacker;
  864.         key@p_oWhere := here;
  865.         fi;
  866.     elif hitNow >= hitMax / 2 then
  867.         rockPile@p_pHitNow := hitNow - 1;
  868.         Print("The rock pile shakes violently.\n");
  869.     elif hitNow ~= 0 then
  870.         rockPile@p_pHitNow := hitNow - 1;
  871.         Print("The rock pile quivers gently.\n");
  872.     else
  873.         Print("The rock pile does not react.\n");
  874.     fi;
  875.     elif IsAncestor(weapon, o_shortSword) or
  876.     IsAncestor(weapon, o_longSword) or
  877.     IsAncestor(weapon, o_twoHandedSword)
  878.     then
  879.     if Parent(weapon) = nil or
  880.         weapon@p_oDamage < Parent(weapon)@p_oDamage / 2
  881.     then
  882.         Print("You bang away at the rock pile with your " + weaponName +
  883.         ", but nothing much happens.\n");
  884.     else
  885.         weapon@p_oDamage := weapon@p_oDamage - 1;
  886.         Print("Banging on rocks with your " + weaponName +
  887.         " is not a good idea - you have blunted it!\n");
  888.     fi;
  889.     else
  890.     Print("You pound on the rock pile with your " + weaponName +
  891.         ", but there is no noticeable effect.\n");
  892.     fi;
  893.     OPrint(Capitalize(CharacterNameG(attacker)) + " attacks the rock pile.\n");
  894. corp;
  895.  
  896. RockPile@p_mFightAction := rockPileFight$
  897.  
  898. define tp_caves proc rockPilePre()status:
  899.  
  900.     SPrint(TrueMe(), "You can't give things to the rock pile.\n");
  901.     fail
  902. corp;
  903.  
  904. define tp_caves proc rockPileCreate()void:
  905.  
  906.     SetupMachine(RockPile);
  907.     RockPile@p_pDesc :=
  908. "The rock pile looks to be just that - a pile of rocks. The individual rocks "
  909. "do fit together quite well however - there is barely room for a small blade "
  910. "between any of them. Overall, it is about 3 feet high and 4 feet across, in "
  911. "a generally rocky grey colour.";
  912.     RockPile@p_Image := "Characters/rockpile";
  913.     CreateMachine("pile,pil;rock.rockpile,rock-pile,roc", RockPile,
  914.           r_sewerCave36, rockPileStep);
  915.     ignore SetMachineActive(RockPile, rockPileStep);
  916.     GNewIcon(RockPile, makeRockPileIcon());
  917.     RockPile@p_pGivePre := rockPilePre;
  918. corp;
  919. rockPileCreate()$
  920. ignore DeleteSymbol(tp_caves, "rockPileCreate")$
  921.  
  922. define tp_caves r_sewerCaveA1 CreateThing(r_provingCave)$
  923. SetupRoomP(r_sewerCaveA1, "in a narrow east-west passage", "")$
  924. Connect(r_sewerCave32, r_sewerCaveA1, D_WEST)$
  925.  
  926. define tp_proving r_sewerCaveA2 CreateThing(r_provingCave)$
  927. SetupRoomP(r_sewerCaveA2, "in a narrow east-west passage", "")$
  928. Connect(r_sewerCaveA1, r_sewerCaveA2, D_WEST)$
  929.  
  930. define tp_caves r_sewerCave70 CreateThing(r_provingCave)$
  931. SetupRoomP(r_sewerCave70, "at a sharp west/north-west corner", "")$
  932. Connect(r_sewerCave60, r_sewerCave70, D_EAST)$
  933.  
  934. define tp_caves r_sewerCave71 CreateThing(r_provingCave)$
  935. SetupRoomP(r_sewerCave71, "at a north/west/south-east junction", "")$
  936. Connect(r_sewerCave70, r_sewerCave71, D_NORTHWEST)$
  937.  
  938. define tp_caves r_sewerCave72 CreateThing(r_provingCave)$
  939. SetupRoomP(r_sewerCave72, "at a north-east/north-west/south junction", "")$
  940. Connect(r_sewerCave71, r_sewerCave72, D_NORTH)$
  941.  
  942. define tp_caves r_sewerCave73 CreateThing(r_provingCave)$
  943. SetupRoomP(r_sewerCave73, "at a north/east/south-west junction", "")$
  944. Connect(r_sewerCave72, r_sewerCave73, D_NORTHEAST)$
  945.  
  946. define tp_caves r_sewerCave74 CreateThing(r_provingCave)$
  947. SetupRoomP(r_sewerCave74, "at a tight west/north-west bend", "")$
  948. Connect(r_sewerCave73, r_sewerCave74, D_EAST)$
  949.  
  950. define tp_caves r_sewerCave75 CreateThing(r_provingCave)$
  951. SetupRoomP(r_sewerCave75, "at an east/north-west passage bend", "")$
  952. Connect(r_sewerCave71, r_sewerCave75, D_WEST)$
  953.  
  954. define tp_caves r_sewerCave76 CreateThing(r_provingCave)$
  955. SetupRoomP(r_sewerCave76, "at a north/west/south-east passage junction", "")$
  956. Connect(r_sewerCave75, r_sewerCave76, D_NORTHWEST)$
  957.  
  958. define tp_caves r_sewerCave77 CreateThing(r_provingCave)$
  959. SetupRoomP(r_sewerCave77, "at a dead-end", "")$
  960. Connect(r_sewerCave76, r_sewerCave77, D_WEST)$
  961.  
  962. define tp_caves r_sewerCave78 CreateThing(r_provingCave)$
  963. SetupRoomP(r_sewerCave78, "at a north-east/south passage bend",
  964.        "A side passage heads south-west.")$
  965. Connect(r_sewerCave76, r_sewerCave78, D_NORTH)$
  966.  
  967. define tp_caves r_sewerCave79 CreateThing(r_provingCave)$
  968. SetupRoomP(r_sewerCave79, "at a dead-end", "")$
  969. Connect(r_sewerCave78, r_sewerCave79, D_SOUTHWEST)$
  970. r_sewerCave79@p_rLastVisit := 0$
  971. r_sewerCave79@p_oSmellString := "You notice the acrid tang of spiders."$
  972. define tp_caves proc cave79Enter(thing room)void:
  973.     thing me, weapon;
  974.     int i, now;
  975.  
  976.     now := Time();
  977.     me := Me();
  978.     if me@p_pStandard and now - r_sewerCave79@p_rLastVisit >= 300 then
  979.     r_sewerCave79@p_rLastVisit := now;
  980.     for i from 0 upto 2 do
  981.         ignore CreateMonster(me, m_hugeSpider, r_sewerCave79);
  982.     od;
  983.     weapon := me@p_pWeapon;
  984.     if weapon ~= nil and weapon@p_oDamage < o_goblinSword@p_oDamage then
  985.         DepositClone(r_sewerCave79, o_goblinSword);
  986.     fi;
  987.     fi;
  988. corp;
  989. AddAnyEnterAction(r_sewerCave79, cave79Enter, false)$
  990.  
  991. define tp_caves r_sewerCave80 CreateThing(r_provingCave)$
  992. SetupRoomP(r_sewerCave80, "at a south-east/south-west passage corner", "")$
  993. Connect(r_sewerCave78, r_sewerCave80, D_NORTHEAST)$
  994. Connect(r_sewerCave74, r_sewerCave80, D_NORTHWEST)$
  995.  
  996. define tp_caves r_sewerCave81 CreateThing(r_provingCave)$
  997. SetupRoomP(r_sewerCave81, "in a north-west/south-east passage",
  998.        "A branch passage heads south.")$
  999. Connect(r_sewerCave72, r_sewerCave81, D_NORTHWEST)$
  1000.  
  1001. define tp_caves r_sewerCave82 CreateThing(r_provingCave)$
  1002. SetupRoomP(r_sewerCave82, "at a dead-end", "")$
  1003. Connect(r_sewerCave81, r_sewerCave82, D_SOUTH)$
  1004.  
  1005. define tp_caves r_sewerCave83 CreateThing(r_provingCave)$
  1006. SetupRoomP(r_sewerCave83, "in a north/south passage", "")$
  1007. Connect(r_sewerCave73, r_sewerCave83, D_NORTH)$
  1008.  
  1009. define tp_caves r_sewerCave84 CreateThing(r_provingCave)$
  1010. SetupRoomP(r_sewerCave84, "at an east/west/south passage tee", "")$
  1011. Connect(r_sewerCave83, r_sewerCave84, D_NORTH)$
  1012.  
  1013. define tp_caves r_sewerCave85 CreateThing(r_provingCave)$
  1014. SetupRoomP(r_sewerCave85, "at a north/west passage corner",
  1015.        "The north passage slopes gently downwards.")$
  1016. Connect(r_sewerCave84, r_sewerCave85, D_EAST)$
  1017.  
  1018. define tp_caves r_sewerCave86 CreateThing(r_provingCave)$
  1019. SetupRoomP(r_sewerCave86, "at a south/west corner in the sloping passage", "")$
  1020. Connect(r_sewerCave85, r_sewerCave86, D_NORTH)$
  1021. Connect(r_sewerCave85, r_sewerCave86, D_DOWN)$
  1022. Connect(r_sewerCave57, r_sewerCave86, D_EAST)$
  1023. Connect(r_sewerCave57, r_sewerCave86, D_UP)$
  1024. RoomName(r_sewerCave86, "Sloping", "Corner")$
  1025.  
  1026. define tp_caves r_sewerCave87 CreateThing(r_provingCave)$
  1027. SetupRoomP(r_sewerCave87, "in an east-west tunnel passage",
  1028.        "A branch passage heads to the north-west.")$
  1029. Connect(r_sewerCave84, r_sewerCave87, D_WEST)$
  1030.  
  1031. define tp_caves r_sewerCave88 CreateThing(r_provingCave)$
  1032. SetupRoomP(r_sewerCave88, "at a south/east passage corner", "")$
  1033. Connect(r_sewerCave87, r_sewerCave88, D_WEST)$
  1034.  
  1035. define tp_caves r_sewerCave89 CreateThing(r_provingCave)$
  1036. SetupRoomP(r_sewerCave89, "at a junction of several passages", "")$
  1037. Connect(r_sewerCave81, r_sewerCave89, D_NORTHWEST)$
  1038. Connect(r_sewerCave88, r_sewerCave89, D_SOUTH)$
  1039. r_sewerCave89@p_rName1 := "Junction"$
  1040.  
  1041. define tp_caves r_sewerCave90 CreateThing(r_provingCave)$
  1042. SetupRoomP(r_sewerCave90, "at a gentle north-east/south passage corner", "")$
  1043. Connect(r_sewerCave89, r_sewerCave90, D_SOUTHWEST)$
  1044.  
  1045. define tp_caves r_sewerCave91 CreateThing(r_provingCave)$
  1046. SetupRoomP(r_sewerCave91, "in a north-south tunnel passage",
  1047.        "A branch passage heads to the west.")$
  1048. Connect(r_sewerCave90, r_sewerCave91, D_SOUTH)$
  1049.  
  1050. define tp_caves r_sewerCave92 CreateThing(r_provingCave)$
  1051. SetupRoomP(r_sewerCave92, "at a gentle north/south-east passage corner", "")$
  1052. Connect(r_sewerCave62, r_sewerCave92, D_NORTHWEST)$
  1053. Connect(r_sewerCave91, r_sewerCave92, D_SOUTH)$
  1054.  
  1055. define tp_caves r_sewerCave93 CreateThing(r_provingCave)$
  1056. SetupRoomP(r_sewerCave93, "at a north/east tunnel passage corner",
  1057.        "The north passage slopes gently downwards.")$
  1058. Connect(r_sewerCave91, r_sewerCave93, D_WEST)$
  1059.  
  1060. define tp_caves r_sewerCave94 CreateThing(r_provingCave)$
  1061. SetupRoomP(r_sewerCave94, "at a hairpin bend in the tunnel passage",
  1062.        "Both passages lead south, but one slopes upwards and one slopes "
  1063.        "downwards.")$
  1064. Connect(r_sewerCave93, r_sewerCave94, D_DOWN)$
  1065. UniConnect(r_sewerCave93, r_sewerCave94, D_NORTH)$
  1066. r_sewerCave94@p_rName1 := "Hairpin"$
  1067.  
  1068. define tp_caves r_sewerCave95 CreateThing(r_provingCave)$
  1069. SetupRoomP(r_sewerCave95, "at a north/east passage corner",
  1070.        "The north passage slopes gently upwards.")$
  1071. Connect(r_sewerCave94, r_sewerCave95, D_DOWN)$
  1072. Connect(r_sewerCave37, r_sewerCave95, D_WEST)$
  1073. UniConnect(r_sewerCave95, r_sewerCave94, D_NORTH)$
  1074.  
  1075. define tp_caves r_sewerCave96 CreateThing(r_provingCave)$
  1076. SetupRoomP(r_sewerCave96, "at a north/east passage corner", "")$
  1077. Connect(r_sewerCave89, r_sewerCave96, D_WEST)$
  1078.  
  1079. define tp_caves r_sewerCave97 CreateThing(r_provingCave)$
  1080. SetupRoomP(r_sewerCave97, "at a gentle south/north-east passage bend", "")$
  1081. Connect(r_sewerCave96, r_sewerCave97, D_NORTH)$
  1082.  
  1083. define tp_caves r_sewerCave98 CreateThing(r_provingCave)$
  1084. SetupRoomP(r_sewerCave98, "at a south-west/south-east passage corner", "")$
  1085. Connect(r_sewerCave97, r_sewerCave98, D_NORTHEAST)$
  1086. Connect(r_sewerCave87, r_sewerCave98, D_NORTHWEST)$
  1087.  
  1088. unuse tp_caves
  1089.