home *** CD-ROM | disk | FTP | other *** search
/ Amiga Special: Spiele Hits / Hits-CD.iso / aminet / spiele / ammud1_1.lha / AmigaMUD / Src / Proving / surface.m < prev    next >
Text File  |  1997-07-05  |  54KB  |  1,530 lines

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1997 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * surface.m - surface level of the proving grounds.
  9.  */
  10.  
  11. use t_streets
  12.  
  13. /*
  14.  * monsterDrink - used for the drinking troll and the drinking goblin.
  15.  *    Half the time they will try to drink, other half will do normal stuff.
  16.  */
  17.  
  18. define tp_proving proc monsterDrink()bool:
  19.  
  20.     if FindName(Here()@p_rContents, p_oName, "water") = succeed and
  21.     Random(2) = 0
  22.     then
  23.     ignore Parse(G, "drink water");
  24.     else
  25.     DoMonsterMove(Me());
  26.     fi;
  27.     MonsterReschedule(Me());
  28.     true
  29. corp;
  30.  
  31. define tp_proving tp_surface CreateTable()$
  32. use tp_surface
  33.  
  34. define tp_surface proc monsterSet1(thing room)void:
  35.  
  36.     InitMonsterModels(room, 300);
  37.     AddPossibleMonster(room, m_rat, 25);
  38.     AddPossibleMonster(room, m_snake, 25);
  39.     AddPossibleMonster(room, m_dog, 25);
  40.     AddPossibleMonster(room, m_gremlin, 25);
  41. corp;
  42.  
  43. define tp_surface proc monsterSetP(thing room)void:
  44.  
  45.     InitMonsterModels(room, 325);
  46.     AddPossibleMonster(room, m_rat, 20);
  47.     AddPossibleMonster(room, m_snake, 35);
  48.     AddPossibleMonster(room, m_dog, 20);
  49.     AddPossibleMonster(room, m_gremlin, 20);
  50.     AddPossibleMonster(room, m_deer, 25);
  51. corp;
  52.  
  53. define tp_surface m_birds CreateMonsterModel("birds,bir;pair,of.pair",
  54.     "The birds sing nicely, but they are nothing special to look at.",
  55.     MonsterInit, RandomMove,
  56.     0, 20, 0, 0, 0, 0)$
  57. GNewIcon(m_birds, makeBirdIcon())$
  58. define tp_surface proc birdsHit(thing theBirds)void:
  59.     Print("The birds flutter out of reach.\n");
  60.     OPrint(Capitalize(CharacterNameG(Me())) +
  61.     " takes a swipe at the birds, but they flutter out of reach.\n");
  62. corp;
  63. m_birds@p_mFightAction := birdsHit$
  64. /* Birds will sing once, then leave. Note that we do this a bit special,
  65.    not using the p_mSound property, since we want the birds to leave as
  66.    soon as they sing. */
  67. define tp_surface BIRDS_SING_ID NextSoundEffectId()$
  68. define tp_surface proc birdsSingOnce(thing client)void:
  69.     if SOn(client) then
  70.     SPlaySound(client, "birds", 1, BIRDS_SING_ID);
  71.     IfFound(client);
  72.     Else(client);
  73.         FailText(client, "The birds sing.");
  74.     Fi(client);
  75.     else
  76.     SPrint(client, "The birds sing.\n");
  77.     fi;
  78. corp;
  79. define tp_surface proc birdsSing()bool:
  80.     ForEachAgent(Here(), birdsSingOnce);
  81.     Me()@p_mMovesUntilVanish := 0;
  82.     MonsterReschedule(Me());
  83.     true
  84. corp;
  85. m_birds@p_mSpecialAction := birdsSing$
  86. m_birds@p_Image := "Characters/birds"$
  87.  
  88. define tp_surface m_drinkingTroll CreateThing(m_troll)$
  89. m_drinkingTroll@p_mSpecialAction := monsterDrink$
  90. m_drinkingTroll@p_Image := "Characters/drinkingTroll"$
  91.  
  92. define tp_surface proc monsterSet2(thing room)void:
  93.  
  94.     InitMonsterModels(room, 400);
  95.     AddPossibleMonster(room, m_wolf, 25);
  96.     AddPossibleMonster(room, m_blackBear, 25);
  97.     AddPossibleMonster(room, m_deer, 25);
  98.     AddPossibleMonster(room, m_moose, 25);
  99.     AddPossibleMonster(room, m_drinkingTroll, 25);
  100.     AddPossibleMonster(room, m_birds, 25);
  101. corp;
  102.  
  103. define tp_surface r_warning CreateThing(r_outdoors)$
  104. SetupRoom(r_warning, "on an east-west path", "")$
  105. Connect(r_path2, r_warning, D_WEST)$
  106. AutoGraphics(r_warning, AutoPaths)$
  107. ExtendDesc(r_path2, "A sign reading 'To the Proving Grounds' points along "
  108.     "a path heading west.")$
  109. Sign(r_path2, "sign;simple,painted,wooden",
  110.     "The sign is a simple painted wooden sign on a post.",
  111.     "To the Proving Grounds")$
  112. Scenery(r_path2, "post.path.pathway")$
  113. define tp_proving proc warning()status:
  114.     if not Me()@p_pInited then
  115.     Print(
  116. "\nWARNING: The area to the west of here is a combat zone. If you chose to "
  117. "enter that area, you may be subject to immediate attack. Entering the area "
  118. "will enable combat for your character. Once enabled, combat cannot be "
  119. "disabled.\n\n");
  120.     fi;
  121.     continue
  122. corp;
  123. AddWestChecker(r_path2, warning, false)$
  124.  
  125. /* Some generic rooms for this level of the proving grounds. */
  126.  
  127. define tp_surface r_provingRoad CreateThing(r_road)$
  128. SetThingStatus(r_provingRoad, ts_readonly)$
  129. AutoGraphics(r_provingRoad, AutoRoads)$
  130. AutoPens(r_provingRoad, C_FOREST_GREEN, C_TAN, 0, 0)$
  131. monsterSet1(r_provingRoad)$
  132.  
  133. define tp_surface r_provingField CreateThing(r_field)$
  134. SetThingStatus(r_provingField, ts_readonly)$
  135. monsterSet1(r_provingField)$
  136.  
  137. define tp_surface r_provingForest CreateThing(r_forest)$
  138. SetThingStatus(r_provingForest, ts_readonly)$
  139. monsterSet2(r_provingForest)$
  140. Scenery(r_forest, "path.trail")$
  141.  
  142. define tp_surface r_entrance CreateThing(r_provingRoad)$
  143. SetupRoom(r_entrance, "at the proving grounds entrance",
  144.     "A small, grimy tent is to the north, and a somewhat cleaner tent is "
  145.     "to the south. The path from the east turns into a cobbled road at "
  146.     "this point and continues to the west.")$
  147. Connect(r_warning, r_entrance, D_WEST)$
  148. r_warning@p_rNoMachines := true$
  149. Scenery(r_entrance,
  150.     "tent;small,grimy,somewhat,clean,cleaner.path,pathway,road;cobbled")$
  151. define tp_surface proc enterProvingGrounds()status:
  152.     if not Me()@p_pInited then
  153.     Print(
  154.         "Welcome to the proving grounds! You are hereby warned that "
  155.         "this area is not safe to just wander around in. It contains "
  156.         "monsters, etc. which will attempt to harm you. You should find "
  157.         "suitable weapons and armour to help protect yourself. You can "
  158.         "see your current statistics with the 'status' command.\n");
  159.     InitFighter(Me());
  160.     fi;
  161.     continue
  162. corp;
  163. AddWestChecker(r_warning, enterProvingGrounds, false)$
  164. AddEastChecker(r_entrance, LeaveFighting, false)$
  165. define tp_surface PR_ENTRANCE_ID NextEffectId()$
  166. define tp_surface proc drawEntrance()void:
  167.  
  168.     if not KnowsEffect(nil, PR_ENTRANCE_ID) then
  169.     DefineEffect(nil, PR_ENTRANCE_ID);
  170.     GSetImage(nil, "Proving/entrance");
  171.     IfFound(nil);
  172.         ShowCurrentImage();
  173.     Else(nil);
  174.         GSetPen(nil, C_FOREST_GREEN);
  175.         GAMove(nil, 0.0, 0.0);
  176.         GRectangle(nil, 0.5, 1.0, true);
  177.         GSetPen(nil, C_TAN);
  178.         GAMove(nil, 0.0, 0.38);
  179.         GRectangle(nil, 0.4, 0.24, true);
  180.         GAMove(nil, 0.37, 0.46);
  181.         GRectangle(nil, 0.131, 0.09, true);
  182.         GSetPen(nil, C_DARK_BLUE);
  183.         GAMove(nil, 0.06, 0.0);
  184.         GRectangle(nil, 0.37, 0.33, true);
  185.         GSetPen(nil, C_LEMON_YELLOW);
  186.         GAMove(nil, 0.06, 0.67);
  187.         GRectangle(nil, 0.37, 0.34, true);
  188.         GSetPen(nil, C_BRICK_RED);
  189.         GAMove(nil, 0.237, 0.33);
  190.         HorizontalDoor();
  191.         GAMove(nil, 0.237, 0.67);
  192.         HorizontalDoor();
  193.     Fi(nil);
  194.     EndEffect();
  195.     fi;
  196.     CallEffect(nil, PR_ENTRANCE_ID);
  197. corp;
  198. AutoGraphics(r_entrance, drawEntrance)$
  199.  
  200. /* Add an armoury to buy basic goods at */
  201.  
  202. define tp_surface r_armoury CreateThing(r_indoors)$
  203. SetupRoom(r_armoury, "in an armoury",
  204.     "This small establishment is run by a nasty-looking individual who "
  205.     "appears to be his own best customer. He is a short, but very heavyset "
  206.     "man with a dirty beard and greasy hair. He wears armoured boots, heavy "
  207.     "chain gauntlets, plate mail and an iron helm. The handle of a huge "
  208.     "sword can be seen behind his head, and a couple of handy daggers are "
  209.     "tucked into a loose belt. Perhaps he doesn't trust his clientele.")$
  210. Connect(r_entrance, r_armoury, D_NORTH)$
  211. UniConnect(r_armoury, r_entrance, D_EXIT)$
  212. AutoGraphics(r_armoury, AutoOpenRoom)$
  213. r_armoury@p_rNoMachines := true$
  214. r_armoury@p_Image := "Proving/armoury"$
  215. Scenery(r_armoury,
  216.     "tent;small,grimy.armoury."
  217.     "man,individual,shopkeeper,storekeeper,armourer;"
  218.     "nasty-looking,nasty,looking,short,but,very,heavyset."
  219.     "beard,hair;dirty,greasy."
  220.     "boot;armoured."
  221.     "gauntlet,glove;heavy,chain."
  222.     "helm,helmet;iron."
  223.     "sword;huge."
  224.     "head."
  225.     "weapon;weaponry."
  226.     "handle;huge,sword."
  227.     "dagger;handy."
  228.     "belt;loose")$
  229. MakeStore(r_armoury)$
  230. WeaponSell(r_armoury, "dagger",
  231.     "The dagger is nothing special - just a large, heavy knife. The blade "
  232.     "is fairly sharp, and should last.",
  233.     10, 0, 0, 0, 0, 0, 6, 6)@p_Image := "Proving/dagger"$
  234. define tp_proving o_stiletto WeaponSell(r_armoury,
  235.     "stiletto,stilleto,stileto,stilletto;fine",
  236.     "The stiletto is like a long dagger with a very narrow blade. It is "
  237.     "ideal for sticking into small places, like between ribs.",
  238.     15, 0, 0, 0, 0, 0, 8, 7)$
  239. o_stiletto@p_Image := "Proving/stiletto"$
  240. define tp_proving o_shortSword WeaponSell(r_armoury, "sword;short.shortsword",