-+-+-+-+-+-+-+-+ START OF PART 56 -+-+-+-+-+-+-+-+ X00019F72 X500C X500 X10000 X2 XL X190d8 X15 5 2d12`7C19 5 46d8`7C24 5 0d0 X40`20 X150 X--- 391 --- X20 X100 XAncient Multi-Hued Dragon X7F000300 X00F89E05 X6005 X500 X12000 X3 XD X260d8 X1 3 2-1d12`7C1 2 3d12 X40`20 X150 X--- 392 --- X20 X90 XAnti- X32130000 X02815775 X7414 X600 X1500 X2 Xp X160d8 X24 5 0d0`7C5 3 2-5d5`7C1 1 3d3 X42`20 X150 X--- 393 --- X20 X80 XLesser Demon Lord X321F0300 X02815775 X7414 X600 X1500 X2 XB X75d8 X24 5 0d0`7C5 3 2-5d5`7C4 2 3d3 X42 X160 X--- 394 --- X15 X30 XEmpress Hag X4B100302 X001103A2 X4006 X100 X10000 X3 Xp X100d6 X1 6 7d6`7C10 8 6d6`7C25 19 1d3 X45`20 X150 X--- 395 --- X20 X60 XBlue Faerie Dragon X49820302 X01801E93 X4001 X5 X1000 X3 XF X24d8 X4 8 2d5`7C3 3 2-2d8 X48`20 X0 X--- 396 --- X60 X80 XSandgorgon X441E0300 X00000000 X1002 X1 X1200 X4 XS X30d8 X1 3 2-4d8`7C1 2 2d10 X50`20 X0 X--- 397 --- X10 X45 XTyranosaurus Rex X000A0200 X00000000 XE022 X25 X6000 X2 XD X200d8 X1 2 25d8`7C1 17 2-3d4 X50`20 X0 X--- 398 --- X20 X70 XIndigo Faerie Dragon X51820302 X01801F13 X4001 X0 X2000 X3 XF X39d8 X4 8 4d5`7C3 3 2-3d8 X56`20 X0 X--- 399 --- X5 X40 XLongsword +7,+7 of Doom X00880310 X80FA0001 X5404 X700 X5000 X3 X`7C X200d4 X1 1 2-12d8`7C19 10 46d8 X60`20 X0 X--- 400 --- X15 X65 XDeath Knight X47970300 X00810374 X5014 X75 X1400 X3 Xp X90d8 X1 1 2-2d10 X60`20 X150 X--- 401 --- X25 X80 XPurple Faerie Dragon X61820302 X01811D12 X4001 X0 X4500 X4 XF X54d8 X4 8 6d5`7C3 3 2-4d8 X64`20 X0 X--- 402 --- X20 X100 XChromatic Hydra 7-headed`20 X7F000300 X01E89C05 X6005 X500 X13000 X3 XD X300d8 X1 2 7-2d10 X70`20 X150 X--- 403 --- X25 X90 XNoble Faerie Dragon X71830302 X01811D12 X4001 X0 X10000 X4 XF X75d8 X4 8 10d5`7C3 3 2-5d8 X80`20 X0 X--- 405 --- X1 X0 XWimp200 X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X200 X--- 406 --- X1 X0 XWimp220 X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X220 X--- 407 --- X1 X0 XWimp240 X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X240 X--- 408 --- X1 X0 XWimp255 X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X255 X--- 409 --- X1 X0 XWimp X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X0 X--- 410 --- X1 X0 XWimp X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X0 X--- 411 --- X1 X0 XWimp X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X0 X--- 412 --- X1 X0 XWimp X00008000 X00000000 X0000 X1000 X0 X1 Xp X1d1 X1 1 0d0 X99 X0 X--- 413 --- X25 X100 XEmperor Faerie Dragon X7D830302 X01811D12 X4001 X0 X25000 X5 XF X105d8 X4 8 14d5`7C3 3 2-7d8 X100`20 X0 X--- 414 --- X20 X80 XEvil Iggy X7F130300 X0201D713 X5004 X0 X18000 X3 Xp X400d8 X2 1 4d6`7C13 19 0d0 X100`20 X175 X--- 415 --- X20 X125 XBalrog XFF1F0300 X0281C743 X5404 X0 X55000 X4 XB X475d8 X5 1 10d12`7C1 17 8d12`7C24 5 0d0 X100 X255 $ CALL UNPACK MONSTERS.DAT;1 321380237 $ create 'f' X`7B Moria Version 4.8`09COPYRIGHT (c) Robert Alan Koeneke`09`09`7D X`7B Public Domain `7 VD X`7B `7 VD X`7B I lovingly dedicate this game to hackers and adventurers `7 VD X`7B everywhere... `7 VD X`7B `7 VD X`7B `7 VD X`7B Designer and Programmer : Robert Alan Koeneke `7 VD X`7B University of Oklahoma `7 VD X`7B `7 VD X`7B Assitant Programmers : Jimmey Wayne Todd `7 VD X`7B University of Oklahoma `7 VD X`7B `7 VD X`7B Gary D. McAdoo `7 VD X`7B University of Oklahoma `7 VD X`7B `7 VD X`7B Moria may be copied and modified freely as long as the above `7 VD X`7B credits are retained. No one who-so-ever may sell or market `7 VD X`7B this software in any form without the expressed written consent `7 VD X`7B of the author Robert Alan Koeneke. `7 VD X`7B `7 VD X X`5Binherit('sys$share:starlet'), environment('moria.env')`5D X Xprogram moria(input,output); X X`09`7B Globals`09`09`09`09`09`09-RAK-`09`7D X`09%INCLUDE 'CONSTANTS.INC' X`09%INCLUDE 'TYPES.INC' X`09%INCLUDE 'VARIABLES.INC' X`09%INCLUDE 'VALUES.INC' X X`09`7B Libraries of routines; now modularized`09 -KRC/DCJ-`09`7D X`09%INCLUDE 'ROUTINES.INC' X X`09`7B Initialize, restore, and get the ball rolling...`09-RAK-`09`7D X begin X X X`09`7B SYSPRV stays off except when needed...`09`7D X priv_switch(0); X X`09`7B Get the time player entered game`09`09`7D X sys$gettim(start_time); X X`09`7B Check the terminal type and see if it is supported`7D X termdef; X X`09`7B Get the directory location of the image`09`7D X get_paths; X`09 X`09`7B Here comes the monsters.... `7D X load_monsters; X X`09`7B Check to see if an update is in progress`09`09-DMF-`09`7D X if (check_kickout) then X begin X`09writeln('Imoria is locked . . . Try playing conquest.'); X`09writeln('Who knows *how* long this might take?'); X`09exit; X end; X X`09`7B Some necessary initializations`09`09`7D X msg_line := 1; X quart_height := trunc(screen_height/4); X quart_width := trunc(screen_width /4); X dun_level := 0; X new(inven_temp); X inven_temp`5E.data := blank_treasure; X inven_temp`5E.ok := false; X inven_temp`5E.insides := 0; X inven_temp`5E.next := nil; X inven_temp`5E.is_in := false; X caught_message := nil; X old_message := nil; X old_mess_count := 0; X turn_counter := 100000; X X`09`7B Init an IO channel for QIO`09`09`09`7D X init_channel; X X`09`7B Grab a random seed from the clock`09`09`7D X seed := get_seed; X X`09`7B Sort the objects by level`09`09`09`7D X sort_objects; X X`09`7B Init monster and treasure levels for allocate `7D X init_m_level; X init_t_level; X X`09`7B Init the store inventories`09`09`09`7D X store_init; X if (cost_adj <> 1.00) then price_adjust; X if (weight_adj <> 1) then item_weight_adjust; X bank_init; X X`09`7B Build the secret wizard and god passwords`09`7D X bpswd; X X`09`7B Check operating hours `09`09`09`7D X`09`7B If not wizard then No_Control_Y `7D X`09`7B Check or create hours.dat, print message`09`7D X intro(finam); X X`09`7B Generate a character, or retrieve old one...`09`7D X if (length(finam) > 0) then X begin `7B Retrieve character `7D X`09generate := get_char(finam,true); X`09py.flags.dead := true; X`09is_from_file := true; X`09save_char(false); X`09change_name; X`09magic_init(randes_seed); X end X else X begin `7B Create character `7D X`09is_from_file := false; X`09finam := 'sys$scratch:MORIACHR.SAV'; X`09create_character; X`09char_inven_init; X`09if (class`5Bpy.misc.pclass`5D.mspell) then X`09 begin `7B Magic realm `7D X`09 learn_spell(msg_flag); X`09 gain_mana(spell_adj(iq)); X`09 end X`09else if (class`5Bpy.misc.pclass`5D.pspell) then X`09 begin `7B Clerical realm`7D X`09 learn_prayer; X`09 gain_mana(spell_adj(ws)); X`09 end X`09else if (class`5Bpy.misc.pclass`5D.dspell) then X`09 begin`09`09`7B Druidical realm `7D X`09 learn_druid; X`09 gain_mana(druid_adj); X`09 end X`09else if (class`5Bpy.misc.pclass`5D.bspell) then X`09 begin`09`09`7B Bardic realm `7D X`09 learn_song(msg_flag); X`09 gain_mana(bard_adj); X`09 end; X`09py.misc.cmana := py.misc.mana; X`09randes_seed := seed; `7B Description seed `7D X`09town_seed := seed; `7B Town generation seed `7D X`09magic_init(randes_seed); X`09generate := true; X end; X if (py.misc.pclass = 10) then bare_hands := '2d2'; X with class`5Bpy.misc.pclass`5D do X`09if (mspell or pspell or dspell or bspell or mental) then X`09 is_magii := true X`09else X`09 is_magii := false; X X`09`7B Begin the game`09`09`09`09`7D X replace_name; X set_gem_values; X set_difficulty(py.misc.diffic);`09`7B Set difficulty of game`09`7D X with py.misc do `7B This determines the maximum player level `7 VD X`09player_max_exp := trunc(player_exp`5Bmax_player_level-1`5D*expfact); X clear(1,1); X prt_stat_block; X X`09`7B Turn on message trapping, if requested`09`7D X if (want_trap) then set_the_trap; X X`09`7B Loop till dead, or exit`09`09`09`7D X repeat X if (generate) then generate_cave; `7B New level `7D X dungeon; `7B Dungeon logic `7D X generate := true; X until (death); X upon_death; `7B Character gets buried `7D X end. $ CALL UNPACK MORIA.PAS;1 2068030326 $ create 'f' Xmodule moriadef X Xdefine verb moria X`09parameter p1,`09`09label=finam value(type=$file) X`09qualifier wizard,`09label=wizard,`09nonnegatable, X`09`09`09`09value(default="doublespeak") X`09qualifier score,`09label=score,`09nonnegatable, X`09`09`09`09value(default="100") X`09qualifier restore,`09label=restore,`09nonnegatable, X`09`09`09`09value(type=$file, default=sys$scratch:moriachr.sav) X`09qualifier undead,`09label=undead,`09nonnegatable, X`09`09`09`09value(type=$file, default=sys$scratch:moriachr.sav) X`09qualifier trap,`09`09label=trap,`09negatable, X`09`09`09`09value(default="10") X`09qualifier top`09`09label=top,`09negatable,`09default X`09`09`09`09value(default="20") X`09qualifier hear`09`09label=warn,`09negatable X`09qualifier difficulty`09label=difficulty, X`09`09`09`09nonnegatable,`09value(default=3) X`09disallow (any2(score,trap,restore) or (top and restore) or X`09`09 (top and score)) $ CALL UNPACK MORIADEF.CLD;1 872630758 $ create 'f' X`20 X.no paging X.rm 70 X.lm 1 X.lm 0 .blank 2 X1 Abbreviations X.lm 1 X.p X Sometimes abbreviations are used to indicate especially X powerful items. These abbreviations are usually used with armor X and weapons. For more detailed information on them, see the X sections entitled Weapons and Armor. X.blank 2 X.lm 0 X2 Weapons X`20 X.lm 15 X.blank 2 .list 0 ' ' X.le; (DB) - Demon Bane. X.le; (DF) - Defender. X.le; (FB) - Frost Brand. X.le; (FT) - Flame Tongue. X.le; (HA) - Holy Avenger. X.le; (SD) - Slay Dragon. X.le; (SE) - Slay Evil. X.le; (SM) - Slay Monster. X.le; (SR) - Slay Regenerative. X.le; (SS) - Soul Sword. X.le; (SU) - Slay Undead. X.le; (V) - Vorpal Weapon. X.le; (WB) - Wizard Blade. X.le; (BB) - Blessed Blade. X.els X.lm 0 .blank 2 X2 Armor X.lm 15 X.blank 2 X.list 0 ' ' X.le; (RA) - Resist Acid. X.le; (RC) - Resist Cold. X.le; (RF) - Resist Fire. X.le; (RL) - Resist Lightning. X.le; (R) - Resistance, resists all of the above. X.els X.lm 0 X.blank 2 X1 Adventuring X.lm 1 X.p X Once your character is adequately supplied with food, light, X armor, and weapons, he is ready to enter the dungeon. Move on X top of the '>' symbol and use the down '>' command. Your X character enters a maze of interconnecting staircases and finally X passes through a one-way door. He is now on in the dungeon somewhere X between 50 and 200 feet depending on the steepness of the stairs. X He must survive many horrible and X challenging encounters to find the treasure lying about. X.lm 0 X.blank 2 X.lt X2 Armor_Class X.el X.lm 1 X.p X Armor class is a number that describes the amount and the X quality of armor begin worn. X.p X The larger your armor class, the more protective it is. A X negative armor class would actually help get you hit. Armor X protects you in three manners: X.blank 2 X.list 0 'o' X`20 X.le; It makes you less likely to be hit by the monsters. X.le; You take less damage when you DO get hit. X.le; Fire and Acid damage are reduced when wearing body armor. X.els X.lm 1 X.p X Obviously a high armor class is a must for surviving the lower X levels of Moria. X.p X Each piece of armor has an armor class adjustment, and a X magical bonus. Armor bought in town will have these values X displayed with its description. Armor that is found within the X dungeon must be identified before these values will be displayed. X Armor class values are always diplayed between a set of brackets X '`5B#,+#`5D'. The first value is the armor class of the item. The X second number is the magical bonus of the item, and will always X have a sign preceding the value. For example, an item listed as X `5B3,+2`5D would increase your armor class by 5 points (3+2) if worn. X There are a few cases where the form '`5B+#`5D' is used, meaning the X object itself gives no protection, but it does grant a magical X bonus to your armor class if worn. X.p X`20 X Some pieces of armor will possess special abilites denoted X by the following abbreviations: X.lm 15 X.blank 2 X.list 0 ' ' X`20 X.le; (RA) - Resist Acid. X.els X.lm 1 X.p X`20 X This magical ability is usually enchanted into armor, X but may occasionally be found as an ability of a weapon. A X character using such an object will take only one half +-+-+-+-+-+-+-+- END OF PART 56 +-+-+-+-+-+-+-+-