home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 May / Amiga_Games_Extra_CD_5-96.bin / spiele / publicdomain / amsrc / proving / proving3.m < prev    next >
Text File  |  1996-02-19  |  41KB  |  1,055 lines

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