-+-+-+-+-+-+-+-+ START OF PART 65 -+-+-+-+-+-+-+-+ X.lm 1 .p X The Weaponsmith's Shop is where the town's weapons are X fashioned. Hand and missile weapons may be purchased and sold X here, along with arrows, bolts, and shots. X.lm 0 .blank 2 X3 Inn X.lm 1 .p X The Inn is a place where you may rest for a time - regaining X hit points and mana - while you are waiting for an object to show X up in another store (or waiting for a store owner to forget that X he doesn't like you). Lodging for one day doesn't include breakfast X for that you need to buy room and board. X.lm 0 .blank 2 X.lt X3 Trading_Post X.el X.lm 1 .p X This is the most complicated store of them all. This store X will buy anything that isn't cursed (though you must identify it X first, if you don't know what it is), and put it up for sale for X other Moria players to bid on. After a day or so, the person X who placed the highest bid on the item can come and pick it up at X the store, and the person who sold it can come and collect 75% of X the amount of money that the other person paid for it (the owner X of the shop has to make *some* profit). However, if the highest X bid on the item is below the "normal" price for the item, then X the storekeeper will throw the item out, and pay the original owner X a fraction of the bid. Therefore, it would not be X profitable to sell "trivial" items, because people will not put X significant bids on them, and you'll end up losing the item. X.p X Occasionally when you try to enter this shop, you will be X informed that "The shopkeeper is helping someone else". This is X not the same as being thrown out of the shop - you are just being X told that the shopkeeper is busy helping another person, and X cannot help both of you at the same time. Therefore, all you X have to do to remedy this is to come back a few minutes later and X try to go in again. The other player should be done by then. X.lm 0 .blank 2 X2 Supplies X.lm 1 .p X Your character will begin his adventure with some supplies X already on him. Use the Inventory 'i' command to check what X these supplies are. It will be necessary to buy other supplies X before continuing into the dungeon, however, so be sure to enter X each of the stores. X.lm 0 .blank 2 X2 Townsmen X.lm 1 X.p X The town contains many different kinds of people. In order X to keep your character alive long enough to enter the dungeons of X Moria in the first place, you should know a little about these X people. X.p X Of course in any fantasy town there should be animals about. X And the town level is no exception. Almost all of the animals X are harmless, but if you see a Raging Bull you do best to avoid X him. Since you are a stranger to the town most of the animals X will follow you around, but no one wants their pet hurt, so watch X out. X.p X Blubbering Idiots are the least interesting of the people on X town level. All they ever do is walk up to you and drool on you. X A bit demoralizing, perhaps, but not dangerous. Mangy Looking X Lepers just beg for money, so they're about the same thing. Kids X like to follow strangers around but some of them might play jokes X or kick you. But all three of these are only annoying; they do no X harm. X.p X Filthy Street Urchins beg for money too, but they have the X ability to actually *take* some of it from you. Keep away from X them unless you want to lose some of your gold. They're easy to X kill if you want to get rid of them, but really aren't worth the X effort. X.p X Singing, Happy Drunks aren't dangerous. They tend to move X somewhat randomly around the town, carrying the money left over X from their latest purchase of Fine Ale (general store), with no X intentions of harming anyone. X.p X Squint Eyed Rogues are a different story, however. They X will come right up to you and attack you from 20 squares away, X and then steal items out of your backpack! Watch out for them - X many a Mage has had to start over again due to having his spell X book stolen by a Squint Eyed Rogue. X.p X Mean Looking Mercenaries and Battle Scarred Veterans are X nice enough, if you stay far away from them. They tend to enjoy X picking fights for no apparent reason, though, so watch out for X them, since they are the most dangerous people you will find in X the town. Some of them are capable of killing low level X characters in a single blow. X.p X Most of the towns people should be avoided by the largest X possible distance when you wander from store to store. Fights X will break out though, so be prepared. Since your character grew X up in this world of intrigue, no experience is awarded for X killing on the town level and if you attack non-harmful villagers X your reputation will go down. X.p X Reputation is important on town level. It will effect your X bartering if it drops and the townspeople will think you are X dangerous if it gets too low, so you should remember that you are X one of the good guys. $ CALL UNPACK MORIAHLP.RNH;1 24712043 $ create 'f' X`5BINHERIT ('MORIA.ENV','SYS$SHARE:STARLET')`5D X XMODULE net_open; X XTYPE X X`09trade_types = ( profit_type, for_sale, cash ); X X`09trade_record_type = RECORD X`09`09time`09`09: quad_type; X`09`09CASE trade_type : trade_types OF X`09`09`09profit_type`09:`09( X`09`09`09`09money`09`09: INTEGER X`09`09`09`09`09`09); X`09`09`09for_sale`09: `09( X`09`09`09`09object`09`09: treasure_type; X`09`09`09`09seller`09`09: ssn_type; X`09`09`09`09bid_time`09: quad_type; X`09`09`09`09best_bid`09: INTEGER; X`09`09`09`09best_bidder`09: ssn_type X`09`09`09`09`09`09); X`09`09`09cash`09`09:`09( X`09`09`09`09amount`09`09: INTEGER; X`09`09`09`09owner`09`09: ssn_type; X`09`09`09`09`09`09); X`09`09END; X X`09trade_file_type = FILE OF trade_record_type; X X`5BGLOBAL,PSECT(trade$code)`5D FUNCTION net_open`09( X`09`09`09VAR`09FAB`09: FAB$TYPE; X`09`09`09VAR`09RAB`09: RAB$TYPE; X`09`09`09VAR`09F`09: trade_file_type X`09`09`09`09`09) : INTEGER; X`09VAR X X`09`09status`09`09: INTEGER; X X`09BEGIN X X`09`09FAB.FAB$V_SQO := FALSE; X`09`09status := $OPEN (FAB); X`09`09IF ODD (status) THEN status := $CONNECT (RAB); X`09`09net_open := status; X X`09END; X XEND. $ CALL UNPACK NETOPEN.PAS;1 538323038 $ create 'f' X X`09`7B Play a Druid song`09`09`09`09`09-CAPN/DMF- `7D X`5Bpsect(misc2$code)`5D procedure play; X var X`09`09i2,dir`09`09`09`09: integer; X`09`09i1,item_ptr`09`09`09: treas_ptr; X`09`09choice,chance`09`09`09: integer; X`09`09dumy,y_dumy,x_dumy`09`09: integer; X`09`09redraw`09`09`09`09: boolean; X`09`09ident`09`09`09`09: boolean; X begin X`09reset_flag := true; X`09if (py.flags.hoarse > 0) then X`09 msg_print('You are too hoarse to sing!') X`09else if (py.flags.afraid > 0) then X`09 msg_print('You are too scared to play music!') X`09else if (py.flags.confused > 0) then X`09 msg_print('You are too confused...') X`09else if (class`5Bpy.misc.pclass`5D.dspell) then X`09 if (inven_ctr > 0) then X`09 begin X`09 if (find_range(`5BInstrument`5D,false,i1,i2)) then X`09`09begin X`09`09 redraw := false; X`09`09 if (get_item(item_ptr,'Use which Instrument?', X`09`09`09`09`09redraw,i2,trash_char,false)) then X`09`09 begin X`09`09 if (cast_spell('Play which song?',item_ptr, X`09`09`09`09`09`09choice,chance,redraw)) then X`09`09`09with magic_spell`5Bpy.misc.pclass,choice`5D do X`09`09`09 begin X`09`09`09 reset_flag := false; X`09`09`09 if (randint(100) < chance) then X`09`09`09 begin X`09`09`09 case randint(5) of X`09`09`09`09 1 : msg_print('*Twang!*'); X`09`09`09`09 2 : msg_print('*Boink!*'); X`09`09`09`09 3 : msg_print('*Ding!*'); X`09`09`09`09 4 : msg_print('*Plunk!*'); X`09`09`09`09 5 : msg_print('*Clang!*'); X`09`09`09 end; `7B of the bad notes `7D X`09`09`09 case randint(2) of X`09`09`09`09 1 : msg_print('You play a sour note!'); X`09`09`09`09 2 : msg_print('You play an awful note!'); X`09`09`09 end X`09`09`09 end X`09`09`09 else X`09`09`09 begin X`09`09`09`09y_dumy := char_row; X`09`09`09`09x_dumy := char_col; X`09`7B Songs....`09`09`09`09`09`7D X`09case choice of X`7B Moon Beam `7D X`09 1 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09begin X`09`09 msg_print('A line of light appears!'); X`09`09 light_line(dir,char_row,char_col,1) X`09`09end; X`7B Detect Monster `7D X`09 2 :`09detect_creatures(c_monster); X`7B Battle Song `7D X`09 3 :`09bless(randint(12)+12); X`7B Light `7D X`09 4 :`09light_area(char_row,char_col); X`7B Minor Cure `7D X`09 5 :`09hp_player(damroll('5d3'),'a magic spell.'); X`7B Find Safe Path `7D X`09 6 :`09begin X`09`09 detect_sdoor; X`09`09 detect_trap; X`09`09end; X`7B Magical Jig `7D X`09 7 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 zap_monster(dir,char_row,char_col,0,c_confuse); X`7B Warp Wood `7D X`09 8 :`09begin X`09`09 msg_print('The wood around you bends and warps...'); X`09`09 td_destroy; X`09`09end; X`7B Battle Dance `7D X`09 9 :`09begin X`09`09 py.flags.hero := py.flags.hero + (randint(10) +5); X`09`09 bless(randint(20)+20); X`09`09end; X`7B Cure Poison `7D X`09 10 :`09cure_me(py.flags.poisoned); X`7B Charm `7D X`09 11 :`09sleep_monsters1(char_row,char_col); X`7B Detect Curse `7D X`09 12 :`09detect_curse; X`7B Summon Insects `7D X`09 13 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_bolt(0,dir,char_row,char_col, X`09`09 damroll('1d6') + py.misc.lev div 3 * 2,'Insect Swarm'); X`7B Call Lightning `7D X`09 14 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_bolt(1,dir,char_row,char_col, X`09`09 damroll('2d8')+ py.misc.lev div 2,'Lightning Bolt'); X`7B Magic Res. `7D X`09 15 :`09py.flags.magic_prot := randint(15) + 10; X`7B Starlight `7D X`09 16 : begin X`09`09 msg_print('A twinkling light appears.'); X starlite(char_row,char_col); X end; X`7B Create Food `7D X`09 17 :`09create_food(10,8,0,0,0); X`7B Remove Curse `7D X 18 : for i2 := Equipment_min to equip_max-1 do X with equipment`5Bi2`5D do X flags := uand(flags,%X'7FFFFFFF'); X`7B Infravision `7D X`09 19 : py.flags.tim_infra := py.flags.tim_infra + randint(30) + 30; X`7B Major Cure `7D X`09 20 : hp_player(damroll('10d4'),'a magic spell. '); X`7B Resist Petrification `7D X`09 21 :`09py.flags.resist_petri := py.flags.resist_petri + randint(15) + 1 V0; X`7B Transplant `7D X`09 22 :`09begin X`09`09 msg_print('You step into a nearby patch of fungus...'); X`09`09 teleport(py.misc.lev*6); X`09`09end; X`7B Sunray `7D X`09 23 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_ball(10,dir,char_row,char_col, X`09`09 damroll('2d8'),'flash of sunlight'); X`7B Dispel Magic `7D X`09 24 :`09with py.flags do X`09`09 begin X`09`09 cure_me(blind); X`09`09 cure_me(poisoned); X`09`09 cure_me(afraid); X`09`09 end; X`7B Fire Stream `7D X`09 25 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_line(5,dir,char_row,char_col, X`09`09 damroll('3d4') + py.misc.lev div 2,'Stream of Fire'); X`7B Protection from Nature `7D X`09 26 :`09with py.flags do X`09`09 begin X`09`09 resist_heat := resist_heat + randint(15) +10; X`09`09 resist_cold := resist_cold + randint(15) +10; X`09`09 resist_lght := resist_lght + randint(15) +10; X`09`09 end; X`7B Turn Stone to Mud `7D X`09 27 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 wall_to_mud(dir,char_row,char_col); X`7B Goodberry `7D X`09 28 : create_food(11,11,8,10,10); X`7B Creeping Doom `7D `20 X`09 29 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 creeping_doom(dir,char_row,char_col,py.misc.lev * 3, X`09`09`09`09py.misc.lev div 4,'Creeping Doom'); X`7B Pillar of Fire `7D X`09 30 : if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_bolt(5,dir,char_row,char_col, X`09`09`09damroll('5d8')+py.misc.lev div 3,'Pillar of Fire'); X`7B Word of Recall `7D X`09 31 : py.flags.word_recall := randint(20) + 20; X`7B Lightning Ball `7D X`09 32 :`09if (get_dir('Which direction?',dir,dumy,y_dumy,x_dumy)) then X`09`09 fire_ball(1,dir,char_row,char_col,py.misc.lev,'Lightning Ball'); X`7B Word of Blindness `7D X`09 33 :`09begin X`09`09 if (zap_area(0,0,c_confuse)) then X`09`09 msg_print('You blind the creatures!'); X`09`09end; X`7B Protection from Monsters `7D X`09 34 :`09py.flags.protmon := (randint(20)+py.misc.lev ); X`7B Control Temperature `7D X`09 35 : repeat X`09`09 if (get_dir('Hotter(1) or Colder(2)?',dir,dumy,y_dumy, X`09`09`09x_dumy)) then X`09`09 begin X`09`09 if (dir = 1) then X`09`09`09zap_area(%X'0020',30,c_hp) X`09`09 else if (dir = 2) then X`09`09`09zap_area(%X'0010',30,c_hp); X`09`09 end X`09`09 else X`09`09 dir := 1; X`09`09until ((dir=1) or (dir=2)); X`7B Ring of Fire `7D X`09 36 : py.flags.ring_fire := randint(4) + 1; X`7B Resist Charm `7D X`09 37 : with py.flags do X`09`09begin X`09`09 free_time := free_time + randint(10) + py.misc.lev; X`09`09 magic_prot := magic_prot + randint(10) + py.misc.lev; X`09`09end; X`7B Battle Frenzy `7D X`09 38 :`09begin X`09`09 bless(randint(30)+30); `20 X`09`09 py.flags.shero := (randint(20)+20); X`09`09end; X`7B Dispel Monster `7D X`09 39 :`09zap_area(%X'0002',3*py.misc.lev,c_hp); X`7B Note of Destruction `7D X`09 40 :`09destroy_area(char_row,char_col); X`09 otherwise ; X`09end; X`09`7B End of songs...`09`09`09 `7D X`09`09`09`09if (not(reset_flag)) then X`09`09`09`09 with py.misc do X`09`09`09`09 begin X`09`09`09`09 exp := exp + sexp; X`09`09`09`09 prt_experience; X`09`09`09`09 sexp := 0; X`09`09`09`09 end X`09`09`09 end; X`09`09`09 with py.misc do X`09`09`09 if (not(reset_flag)) then X`09`09`09`09begin X`09`09`09`09 if (smana > cmana) then X`09`09`09`09 begin Xmsg_print('You lose your voice attempting the song!'); X`09`09`09`09 py.flags.hoarse := X`09`09`09`09`09randint(5*trunc(smana-cmana)); X`09`09`09`09 cmana := 0; X`09`09`09`09 if (randint(3) = 1) then lower_stat(ca,'Your self-esteem i Vs lowered!'); X`09`09`09`09 end X`09`09`09`09 else X`09`09`09`09 cmana := cmana - smana; X`09`09`09`09 prt_mana; +-+-+-+-+-+-+-+- END OF PART 65 +-+-+-+-+-+-+-+-