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

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1996 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * proving1.m - shallow sewer level of the proving grounds.
  9.  */
  10.  
  11. private tp_proving1 CreateTable().
  12. use tp_proving1
  13.  
  14. define tp_proving1 m_drinkingGoblin CreateMonsterModel("goblin",
  15.     "The goblin is a small, humanoid creature with pale skin, large eyes, "
  16.     "protruding ears, and sharp teeth. It walks in a perpetual crouch but "
  17.     "is nonetheless quite fast on its feet.",
  18.     MonsterInit, RandomMove,
  19.     10, 8, 9, 6, 5, 40).
  20. m_drinkingGoblin@p_mBlocker := true.
  21. AddModelAction(m_drinkingGoblin, "slouches around").
  22. AddModelAction(m_drinkingGoblin, "gibbers").
  23. AddModelAction(m_drinkingGoblin, "drools").
  24. AddModelAction(m_drinkingGoblin, "howls").
  25. m_drinkingGoblin@p_mSpecialAction := monsterDrink.
  26. m_drinkingGoblin@p_Image := "Characters/drinkingGoblin".
  27.  
  28. /* also used in proving2.m */
  29.  
  30. define tp_proving proc monsterSet3(thing room)void:
  31.  
  32.     InitMonsterModels(room, 275);
  33.     AddPossibleMonster(room, m_rat, 25);
  34.     AddPossibleMonster(room, m_snake, 25);
  35.     AddPossibleMonster(room, m_largeRat, 25);
  36.     AddPossibleMonster(room, m_largeSnake, 25);
  37.     AddPossibleMonster(room, m_drinkingGoblin, 25);
  38. corp;
  39.  
  40. define tp_proving1 proc grateLiftDown(thing sewerRoom)void:
  41.  
  42.     Print("You lift the grate on hinges and climb down into the sewer.\n");
  43.     if Me()@p_pHidden then
  44.     OPrint("The drainage grate lifts for a moment, then closes.\n");
  45.     else
  46.     OPrint(Capitalize(CharacterNameG(Me())) +
  47.         " lifts the drainage grate and descends into the sewer below.\n");
  48.     fi;
  49.     LeaveRoomStuff(sewerRoom, D_DOWN, MOVE_SPECIAL);
  50.     EnterRoomStuff(sewerRoom, D_UP, MOVE_NORMAL);
  51. corp;
  52. define tp_proving1 proc grateLiftUp(thing theAlley)status:
  53.     string name;
  54.     bool hidden;
  55.  
  56.     name := CharacterNameG(Me());
  57.     hidden := Me()@p_pHidden;
  58.     Print("You climb up to the grate, open it, and exit to the alley.\n");
  59.     LeaveRoomStuff(theAlley, D_UP, MOVE_NORMAL);
  60.     EnterRoomStuff(theAlley, D_DOWN, MOVE_SPECIAL);
  61.     if hidden then
  62.     OPrint("The drainage grate lifts for a moment, then closes.\n");
  63.     else
  64.     OPrint("The drainage grate lifts and " + name + " emerges.\n");
  65.     fi;
  66.     fail
  67. corp;
  68. define tp_proving o_drainageGrate CreateThing(nil).
  69. FakeModel(o_drainageGrate,
  70.     "grate,grating;large,drainage."
  71.     "grate,grating;large,drainage,drain,overhead."
  72.     "overhead;large,drainage,drain,grating,grate."
  73.     "frame;wooden.handle.bar;iron",
  74.     "The grate is made of iron bars secured into a wooden frame. It has a "
  75.     "handle on one side.").
  76. o_drainageGrate@p_oSmellString := "The grate smells of the sewer below.".
  77. o_drainageGrate@p_oTouchString := "The grate is VERY dirty.".
  78. o_drainageGrate@p_oLowerString := "The grate cannot be lowered any further.".
  79. o_drainageGrate@p_oNotLocked := true.
  80. o_drainageGrate@p_Image := "Proving/sewerGrateOutside".
  81. define tp_proving o_fakeGrate CreateThing(nil).
  82. FakeModel(o_fakeGrate, "grate,grating;large,drainage,drain", "").
  83. o_fakeGrate@p_oLiftString := "The grate is out of reach from here.".
  84. o_fakeGrate@p_oOpenString := "The grate is out of reach from here.".
  85. o_fakeGrate@p_oLowerString := "The grate is out of reach from here.".
  86. o_fakeGrate@p_oNotLocked := true.
  87. o_fakeGrate@p_Image := "Proving/sewerGrateInside".
  88.  
  89. define tp_proving1 o_trickle CreateThing(nil).
  90. SetupObject(o_trickle, nil, "water.stream.trickle", "").
  91. o_trickle@p_oInvisible := true.
  92. o_trickle@p_oNotGettable := true.
  93. define tp_proving1 proc trickleDrink()status:
  94.     thing me;
  95.     string name;
  96.     int current, max;
  97.  
  98.     me := Me();
  99.     name := Capitalize(CharacterNameG(me));
  100.     if not me@p_pHidden then
  101.     OPrint(name + " takes a drink from the noxious trickle.\n");
  102.     fi;
  103.     current := me@p_pHitNow;
  104.     if Parent(me) = m_drinkingGoblin then
  105.     max := me@p_pHitMax;
  106.     if current ~= max then
  107.         current := current + Random(3) + 2;
  108.         if current > max then
  109.         current := max;
  110.         fi;
  111.         me@p_pHitNow := current;
  112.     fi;
  113.     else
  114.     Print("ACK!!! It tastes horrible!\n");
  115.     max := Random(3) + 2;
  116.     if max >= current then
  117.         /* DOOM */
  118.         if me@p_pStandard then
  119.         Print("You are killed!\n");
  120.         if not me@p_pHidden then
  121.             OPrint(name + " dies!\n");
  122.         fi;
  123.         KillPlayer(me, me);
  124.         else
  125.         KillMonster(me);
  126.         fi;
  127.     else
  128.         me@p_pHitNow := current - max;
  129.     fi;
  130.     fi;
  131.     succeed
  132. corp;
  133. o_trickle@p_oEatChecker := trickleDrink.
  134. define tp_proving1 o_drink CreateThing(nil).
  135. SetupObject(o_drink, nil, "drink.swallow", "").
  136. o_drink@p_oInvisible := true.
  137. define tp_proving1 proc takeDrink(thing drink)status:
  138.     trickleDrink()
  139. corp;
  140. o_drink@p_oGetChecker := takeDrink.
  141. o_trickle@p_Image := "Proving/trickle".
  142.  
  143. /* also used in proving2.m */
  144.  
  145. define tp_proving r_provingTunnel1 CreateThing(r_tunnel).
  146. AutoGraphics(r_provingTunnel1, AutoTunnels).
  147. AutoPens(r_provingTunnel1, C_DARK_GREY,C_LIGHT_GREY,C_LIGHT_GREY,C_LIGHT_GREY).
  148. SetThingStatus(r_provingTunnel1, ts_readonly).
  149. monsterSet3(r_provingTunnel1).
  150.  
  151. define tp_proving r_provingTunnel2 CreateThing(r_tunnel).
  152. AutoGraphics(r_provingTunnel2, AutoTunnels).
  153. AutoPens(r_provingTunnel2, C_DARK_GREY,C_LIGHT_GREY,C_LIGHT_GREY,C_LIGHT_GREY).
  154. SetThingStatus(r_provingTunnel2, ts_readonly).
  155.  
  156. define tp_proving r_provingTunnelD CreateThing(r_tunnel).
  157. r_provingTunnelD@p_rDark := true.
  158. AutoGraphics(r_provingTunnelD, AutoTunnels).
  159. AutoPens(r_provingTunnelD, C_DARK_GREY,C_LIGHT_GREY,C_LIGHT_GREY,C_LIGHT_GREY).
  160. SetThingStatus(r_provingTunnelD, ts_readonly).
  161. monsterSet3(r_provingTunnelD).
  162.  
  163. define tp_proving1 r_sewer1 CreateThing(r_provingTunnel1).
  164. SetupRoomP(r_sewer1, "in a north-south sewer",
  165.     "This is fairly large tunnel made of wood and stone, with a trickle of "
  166.     "noxious water flowing along the floor. "
  167.     "There is a grating overhead with metal wrungs leading up to it.").
  168. HUniConnect(r_alley2, r_sewer1, D_DOWN).
  169. UniConnect(r_sewer1, r_alley2, D_UP).
  170. r_alley2@p_rDownOMessage := ".".
  171. r_alley2@p_rDownEMessage := ".".
  172. AddTail(r_sewer1@p_rContents, o_trickle).
  173. AddTail(r_sewer1@p_rContents, o_drink).
  174. AddTail(r_sewer1@p_rContents, o_fakeGrate).
  175. Scenery(r_sewer1, "wall.wood.stone.wrung;metal").
  176. define tp_proving1 o_drainageGrate1 CreateThing(o_drainageGrate).
  177. AddTail(r_alley2@p_rContents, o_drainageGrate1).
  178. define tp_proving1 proc grateLift1()status:
  179.     grateLiftDown(r_sewer1);
  180.     succeed
  181. corp;
  182. o_drainageGrate1@p_oLiftChecker := grateLift1.
  183. o_drainageGrate1@p_oOpenChecker := grateLift1.
  184. SetThingStatus(o_drainageGrate1, ts_wizard).
  185. define tp_proving1 proc grateLift2()status:
  186.     /* Only players, "standard" monsters (Packrat, etc.) and monsters who
  187.        can reward with money (i.e. intelligent ones) can lift the grate. */
  188.     if Me()@p_pStandard or Me()@p_pMoney ~= 0 then
  189.     grateLiftDown(r_sewer1);
  190.     fi;
  191.     fail
  192. corp;
  193. AddDownChecker(r_alley2, grateLift2, false).
  194. define tp_proving1 proc grateLift3()status:
  195.     if Me()@p_pStandard or Me()@p_pMoney ~= 0 then
  196.     grateLiftUp(r_alley2)
  197.     else
  198.     fail
  199.     fi
  200. corp;
  201. AddUpChecker(r_sewer1, grateLift3, false).
  202.  
  203. define tp_proving1 r_sewer2 CreateThing(r_provingTunnel1).
  204. SetupRoomP(r_sewer2, "in a north-south sewer",
  205.     "You can barely see by natural light here. A dark opening heads west.").
  206. AddTail(r_sewer2@p_rContents, o_trickle).
  207. AddTail(r_sewer2@p_rContents, o_drink).
  208. Connect(r_sewer1, r_sewer2, D_SOUTH).
  209. Scenery(r_sewer2, "opening;dark").
  210.  
  211. define tp_proving1 r_sewer3 CreateThing(r_provingTunnel1).
  212. SetupRoomP(r_sewer3, "in a north-south sewer",
  213.     "Light comes down from a manhole above, casting a dim light on the "
  214.     "scummy water covering your feet.").
  215. AddTail(r_sewer3@p_rContents, o_trickle).
  216. AddTail(r_sewer3@p_rContents, o_drink).
  217. Connect(r_sewer2, r_sewer3, D_SOUTH).
  218. AddTail(r_sewer3@p_rContents, o_manholeCover).
  219.  
  220. define tp_proving1 r_sewer4 CreateThing(r_provingTunnel1).
  221. SetupRoomP(r_sewer4, "in a north-south sewer",
  222.     "You can barely see by natural light here. A dark opening heads east.").
  223. AddTail(r_sewer4@p_rContents, o_trickle).
  224. AddTail(r_sewer4@p_rContents, o_drink).
  225. Connect(r_sewer3, r_sewer4, D_SOUTH).
  226. Scenery(r_sewer4, "opening;dark").
  227.  
  228. define tp_proving1 r_sewer5 CreateThing(r_provingTunnel1).
  229. SetupRoomP(r_sewer5, "in a north-south sewer",
  230.     "This is fairly large tunnel made of wood and stone, with a trickle of "
  231.     "noxious water flowing along the floor. "
  232.     "There is a grating overhead with metal wrungs leading up to it.").
  233. Connect(r_sewer4, r_sewer5, D_SOUTH).
  234. HUniConnect(r_alley4, r_sewer5, D_DOWN).
  235. UniConnect(r_sewer5, r_alley4, D_UP).
  236. r_alley4@p_rDownOMessage := ".".
  237. r_alley4@p_rDownEMessage := ".".
  238. AddTail(r_sewer5@p_rContents, o_trickle).
  239. AddTail(r_sewer5@p_rContents, o_drink).
  240. AddTail(r_sewer5@p_rContents, o_fakeGrate).
  241. Scenery(r_sewer5, "wall.wood.stone.wrung;metal").
  242. define tp_proving1 o_drainageGrate2 CreateThing(o_drainageGrate).
  243. AddTail(r_alley4@p_rContents, o_drainageGrate2).
  244. define tp_proving1 proc grateLift4()status:
  245.     grateLiftDown(r_sewer5);
  246.     succeed
  247. corp;
  248. o_drainageGrate2@p_oLiftChecker := grateLift4.
  249. o_drainageGrate2@p_oOpenChecker := grateLift4.
  250. SetThingStatus(o_drainageGrate2, ts_wizard).
  251. define tp_proving1 proc grateLift5()status:
  252.     if Me()@p_pStandard or Me()@p_pMoney ~= 0 then
  253.     grateLiftDown(r_sewer5);
  254.     fi;
  255.     fail
  256. corp;
  257. AddDownChecker(r_alley4, grateLift5, false).
  258. define tp_proving1 proc grateLift6()status:
  259.     if Me()@p_pStandard or Me()@p_pMoney ~= 0 then
  260.     grateLiftUp(r_alley4)
  261.     else
  262.     fail
  263.     fi
  264. corp;
  265. AddUpChecker(r_sewer5, grateLift6, false).
  266.  
  267. define tp_proving1 r_sewer0 CreateThing(r_provingTunnel1).
  268. SetupRoomP(r_sewer0, "in a north-south sewer",
  269.     "This appears to be the north end of the sewer. A trickle of water "
  270.     "comes down the walls and heads south, but there are no other exits.").
  271. AddTail(r_sewer0@p_rContents, o_trickle).
  272. AddTail(r_sewer0@p_rContents, o_drink).
  273. Connect(r_sewer1, r_sewer0, D_NORTH).
  274. Scenery(r_sewer0, "wall").
  275.  
  276. define tp_proving r_sewerShaft1 CreateThing(r_provingTunnelD).
  277. SetupRoom(r_sewerShaft1, "in a vertical shaft",
  278.     "Rusty metal wrungs in the wall allow you to climb down here, and a "
  279.     "small opening heads east.").
  280. Connect(r_sewer2, r_sewerShaft1, D_WEST).
  281. Scenery(r_sewerShaft1, "wrung;metal.opening;small").
  282.  
  283. define tp_proving r_sewerShaft3 CreateThing(r_provingTunnelD).
  284. SetupRoom(r_sewerShaft3, "in a vertical shaft",
  285.     "Rusty metal wrungs in the wall allow you to climb down here, and a "
  286.     "small opening heads west.").
  287. Connect(r_sewer4, r_sewerShaft3, D_EAST).
  288. Scenery(r_sewerShaft3, "wrung;metal.opening;small").
  289.  
  290. define tp_proving r_sewer6 CreateThing(r_provingTunnel1).
  291. SetupRoomP(r_sewer6, "in a north-south sewer",
  292.     "On the west wall there is a small iron grill. There appears to be "
  293.     "open space behind it, but you can find no way to get into it.").
  294. AddTail(r_sewer6@p_rContents, o_trickle).
  295. AddTail(r_sewer6@p_rContents, o_drink).
  296. Connect(r_sewer5, r_sewer6, D_SOUTH).
  297. Scenery(r_sewer6, "grill;small,iron.space;open").
  298.  
  299. define tp_proving1 r_sewer7 CreateThing(r_provingTunnelD).
  300. SetupRoomP(r_sewer7, "in a north-south sewer", "").
  301. AddTail(r_sewer7@p_rContents, o_trickle).
  302. AddTail(r_sewer7@p_rContents, o_drink).
  303. Connect(r_sewer6, r_sewer7, D_SOUTH).
  304.  
  305. define tp_proving1 r_sewer8 CreateThing(r_provingTunnelD).
  306. SetupRoomP(r_sewer8, "in a north-south sewer", "").
  307. AddTail(r_sewer8@p_rContents, o_trickle).
  308. AddTail(r_sewer8@p_rContents, o_drink).
  309. Connect(r_sewer7, r_sewer8, D_SOUTH).
  310.  
  311. define tp_proving1 r_sewer9 CreateThing(r_provingTunnelD).
  312. SetupRoomP(r_sewer9, "at a north and southwest corner in the sewer", "").
  313. AddTail(r_sewer9@p_rContents, o_trickle).
  314. AddTail(r_sewer9@p_rContents, o_drink).
  315. Connect(r_sewer8, r_sewer9, D_SOUTH).
  316.  
  317. define tp_proving1 r_sewer10 CreateThing(r_provingTunnelD).
  318. SetupRoomP(r_sewer10, "in a sewer running northeast to southwest", "").
  319. AddTail(r_sewer10@p_rContents, o_trickle).
  320. AddTail(r_sewer10@p_rContents, o_drink).
  321. Connect(r_sewer9, r_sewer10, D_SOUTHWEST).
  322.  
  323. define tp_proving1 r_sewer11 CreateThing(r_provingTunnelD).
  324. SetupRoomP(r_sewer11, "at a northeast and west corner in the sewer", "").
  325. AddTail(r_sewer11@p_rContents, o_trickle).
  326. AddTail(r_sewer11@p_rContents, o_drink).
  327. Connect(r_sewer10, r_sewer11, D_SOUTHWEST).
  328.  
  329. define tp_proving1 r_sewer12 CreateThing(r_provingTunnel1).
  330. SetupRoomP(r_sewer12, "in an east-west sewer",
  331.     "You can see an opening to the west.").
  332. AddTail(r_sewer12@p_rContents, o_trickle).
  333. AddTail(r_sewer12@p_rContents, o_drink).
  334. Connect(r_sewer11, r_sewer12, D_WEST).
  335.  
  336. define tp_proving1 r_sewer13 CreateThing(r_provingTunnel1).
  337. SetupRoomP(r_sewer13, "at the end of the sewer",
  338.     "This is fairly large tunnel made of wood and stone, with a trickle of "
  339.     "noxious water flowing along the floor. "
  340.     "The sewer extends into the darkness to the east. The west end of the "
  341.     "tunnel is blocked by an iron bar grating. Through the bars you can see "
  342.     "that the sewer drains into a small stream in a forest.").
  343. AddTail(r_sewer13@p_rContents, o_trickle).
  344. AddTail(r_sewer13@p_rContents, o_drink).
  345. Connect(r_sewer12, r_sewer13, D_WEST).
  346. Scenery(r_sewer13,
  347.     "sewer.stream;small.forest.darkness.stonework.work;stone.stone."
  348.     "mouth;tunnel.tunnel").
  349. AddTail(r_sewer13@p_rContents, o_barGrating).
  350. AddTail(r_sewer13@p_rContents, o_gratingLatch).
  351. define tp_proving1 proc showAgent1(thing agent)void:
  352.     if agent@p_pName ~= "" and not agent@p_pHidden then
  353.     Print(Capitalize(CharacterNameG(agent)) +" is outside the grating.\n");
  354.     fi;
  355. corp;
  356. define tp_proving1 proc extraDesc1()void:
  357.     ForEachAgent(r_forestByStream, showAgent1);
  358. corp;
  359. r_sewer13@p_rFurtherDesc := extraDesc1.
  360. define tp_proving1 proc showAgent2(thing agent)void:
  361.     if agent@p_pName ~= "" and not agent@p_pHidden then
  362.     Print(Capitalize(CharacterNameG(agent)) + " is inside the grating.\n");
  363.     fi;
  364. corp;
  365. define tp_proving1 proc extraDesc2()void:
  366.     ForEachAgent(r_sewer13, showAgent2);
  367. corp;
  368. r_forestByStream@p_rFurtherDesc := extraDesc2.
  369.  
  370. define tp_proving1 p_rGratingSpecial CreateBoolProp().
  371.  
  372. define tp_proving1 proc barGratingOpen()status:
  373.     thing me;
  374.     bool hidden;
  375.     string name;
  376.  
  377.     r_sewer13@p_rGratingSpecial := true;
  378.     me := Me();
  379.     hidden := me@p_pHidden;
  380.     if hidden then
  381.     OPrint("The grating opens, then closes again.\n");
  382.     fi;
  383.     name := Capitalize(CharacterNameG(me));
  384.     if Here() = r_sewer13 then
  385.     Print("You pull on the latch mechanism. It is rusty and hard to move "
  386.         "but you are able to release it and open the grating. You step "
  387.         "out of the sewer beside the stream and close the grating.\n");
  388.     if not hidden then
  389.         OPrint(name + " opens the grating, goes outside, closes the "
  390.         "grating, and disappears out of sight.\n");
  391.     fi;
  392.     LeaveRoomStuff(r_forestByStream, D_EXIT, MOVE_SPECIAL);
  393.     EnterRoomStuff(r_forestByStream, D_ENTER, MOVE_SPECIAL);
  394.     if not hidden then
  395.         OPrint(name + " opens the grating and climbs out of the sewer.\n");
  396.     fi;
  397.     else
  398.     Print("You pull on the latch mechanism. It is rusty and hard to move "
  399.         "but you are able to release it and open the grating. You climb "
  400.         "into the sewer and the grating bangs shut behind you.\n");
  401.     if not hidden then
  402.         OPrint(name + " opens the grating and climbs into the sewer."
  403.         " The grating bangs shut.\n");
  404.     fi;
  405.     LeaveRoomStuff(r_sewer13, D_ENTER, MOVE_SPECIAL);
  406.     EnterRoomStuff(r_sewer13, D_EXIT, MOVE_SPECIAL);
  407.     if not hidden then
  408.         OPrint(name + " opens the grating and climbs into the sewer.\n");
  409.     fi;
  410.     fi;
  411.     if hidden then
  412.     OPrint("The grating opens, then closes again.\n");
  413.     fi;
  414.     r_sewer13@p_rGratingSpecial := false;
  415.     succeed
  416. corp;
  417. o_gratingLatch@p_oOpenChecker := barGratingOpen.
  418. o_gratingLatch@p_oPullChecker := barGratingOpen.
  419.  
  420. define tp_proving1 m_watcher1 CreateThing(nil).
  421. CreateMachine("", m_watcher1, r_forestByStream, nil).
  422. define tp_proving1 proc watch1(string s)void:
  423.     if not r_sewer13@p_rGratingSpecial and
  424.     SubString(s, 0, 20) ~= "Inside the grating, "
  425.     then
  426.     ABPrint(r_sewer13, nil, nil, "Outside the grating, " + s + "\n");
  427.     fi;
  428. corp;
  429. ignore SetMachineOther(m_watcher1, watch1).
  430.  
  431. define tp_proving1 m_watcher2 CreateThing(nil).
  432. CreateMachine("", m_watcher2, r_sewer13, nil).
  433. define tp_proving1 proc watch2(string s)void:
  434.     if not r_sewer13@p_rGratingSpecial and
  435.     SubString(s, 0, 21) ~= "Outside the grating, "
  436.     then
  437.     ABPrint(r_forestByStream, nil, nil, "Inside the grating, " + s + "\n");
  438.     fi;
  439. corp;
  440. ignore SetMachineOther(m_watcher2, watch2).
  441.  
  442. unuse tp_proving1
  443.