-+-+-+-+-+-+-+-+ START OF PART 68 -+-+-+-+-+-+-+-+ X evaluate_char := false; Xend; X Xprocedure reject_char; Xbegin X msg_print('A guard meets you at the entrance and says:'); X case randint(4) of X 1 : msg_print('"M''lord, the Arch-Mage does not wish to be disturbed."') V; X 2 : msg_print('"My master has other business at the present time."'); X 3 : msg_print('"Piss off you inexperienced peon."'); X 4 : msg_print('"You have yet to prove yourself worthy."'); X end; X msg_print('The guard escorts you back outside and locks the door.'); X msg_print(''); Xend; X Xfunction new_victim : boolean; Xbegin X new_victim := (py.misc.cur_quest=0) and (py.misc.quests=0) and not(py.flag Vs.quested); Xend; X Xprocedure explain_quests; X Xvar X`09in_char`09`09: char; X`09 Xbegin X clear(1,1); X prt('Home of Leckin the Arch-Mage',2,26); X prt('Greetings, adventurer, and welcome to my humble quarters.',6,10); X prt('I see that you have come, like many before you, in an effort to',8,10 V); Xprt('defeat the great evil that lies deep within the darkest bowels of',9,10 V); Xprt('the caves of Moria. As you well know, none have yet succeeded.',10,10) V; Xprt('You, however . . . I feel that you are going to be different than',12,1 V0); Xprt('the rest. You have it within you to defeat the accursed Balrog,',13,10 V); Xprt('and restore peace and happiness to the people of this fair town.',14,10 V); Xprt('But you cannot do it alone. You will need someone to guide you.',15,10 V); Xprt('I am willing to be that person, if you will have me. I will aid',17,10 V); Xprt('you in your quest to defeat the Balrog. But in return, you must',18,10 V); Xprt('complete many other, simpler quests. These will strengthen you',19,10) V; Xprt('and prepare you for your final conflict, many moons hence.',20,10); X prt('`5BHit space to continue`5D',24,28); X inkey(in_char); X clear(1,1); Xprt('Home of Leckin the Arch-Mage',2,26); Xprt('I will give you a cash reward for the completion of each quest,',6,10); Xprt('to provide incentive for you. In addition, I may occasionally',7,10); Xprt('give you an item that will aid you in your overall quest.',8,10); Xprt('If you agree to these conditions, then select one of the following',9,1 V0); Xprt('quests. Either way, I wish you the best of luck.',10,10); X prt('`5BHit space to continue`5D',24,28); X inkey(in_char); Xend; X Xprocedure repeat_quest; X Xbegin X msg_print('Hmmm. . . I see you haven''t completed your quest.'); X msg_print('Have you forgotten it already?'); X msg_print('Go kill a ' + c_list`5Bpy.misc.cur_quest`5D.name + '!'); X msg_print(''); Xend; X Xprocedure parse_command(enter_flag : boolean); X var X command : char; X com_val : integer; X exit_flag : boolean; Xbegin X exit_flag := false; X repeat X if get_com( '', command) then X begin X com_val := ord(command); X case com_val of X 97, 98, 99, 100, 101: `7Ba,b,c,d,e`7D X`09 begin X`09`09 if ((turn_counter < quest_delay) and (not wizard1)) then X`09`09 begin X`09`09 msg_print('You were just in here... Come back later.'); X`09`09 msg_print(' ') X`09`09 end X`09 `09 else X`09`09 begin X`09`09 if ((turn_counter < quest_delay) and wizard1) then X`09`09 begin Xmsg_print('Being a Wizard you choose a quest regardless of the turn_counter. V'); X`09`09 msg_print(' '); X`09`09 end; X`09 py.misc.cur_quest := quest`5Bcom_val-96`5D; X`09`09 py.flags.quested := true; X`09`09 exit_flag := true; X`09`09 end; X`09 end; X`7Bp`7D 112 : msg_print('Which quest would you like? `5Ba-e`5D '); X`7Bi`7D 105 : msg_print('Kill ''em, of course!'); X`7B`5ER`7D 18 : draw_fortress(enter_flag); X`7B`5EZ`7D`09 26 : exit_flag := true; X otherwise prt('Invalid Command.',1,1) X end; X end X else exit_flag := true; X until (exit_flag); Xend; X Xvar X`09complete_flag `09: boolean; X`09enter_flag`09: boolean; X Xbegin X enter_flag := false; X seed := get_seed; X complete_flag := false; X `7Bgld := py.misc.money`5Btotal$`5D;`7D X msg_line := 1; X if (py.misc.quests <= max_quests) then X if evaluate_char X then begin X`09 if completed_quest then`20 X`09 begin X`09 reward_quest; X`09 complete_flag := true; X`09 end X`09 else X`09 begin X`09 if new_victim then explain_quests; X`09 if ((new_victim) or (py.misc.cur_quest < 1)) then`09 `20 X begin X`09 draw_fortress(enter_flag); X`09 enter_flag := true; X`09 parse_command(enter_flag); X `09 clear(1,1); X `09 draw_cave; X`09 end X`09 else`20 X`09 repeat_quest; X`09 end; X`09 end X else X begin X reject_char; X complete_flag := true; X end; X if ((not complete_flag) and (turn_counter > quest_delay))`20 X then turn_counter := 0; Xend; X X`5Bglobal,psect(quest$code)`5D function itos (i : integer): ctype; X X`09var X`09 tmp_str`09`09: ctype; X`09 exit_flag`09`09: boolean; X X`09begin X`09 writev(tmp_str, i); X`09 exit_flag := false; X`09 repeat X`09 if(tmp_str`5B1`5D in `5B'1','2','3','4','5','6','7','8','9','0'`5D)th Ven`20 X`09 exit_flag := true X`09 else X`09 tmp_str := substr(tmp_str,2,length(tmp_str)-1); X`09 until exit_flag; X`09 itos := tmp_str; X`09end; Xend. $ CALL UNPACK QUEST.PAS;1 2117827641 $ create 'f' X ; X ; Macro function for : X ; X ; y := RANDINT(x) where y receives an integer X ; 1 <= y <= x X ; X ; Seed is a global variable declared in PASCAL main. X ; X .title randint Uniform random number generator X .ident /randint/ X .psect misc1$code,pic,con,rel,lcl,shr,exe,rd,nowrt,2 X .entry randint,`5EM<> X mull2 #16807,seed X bicl2 #`5EX80000000,seed X subl3 #1,seed,r0 X emul r0,4(ap),#0,r0 X ediv #2147483647,r0,r0,r1 X addl2 #1,r0 X ret X .end X`20 $ CALL UNPACK RANDINT.MAR;1 1296322852 $ create 'f' X`09; X`09; Macro function for : X`09; X`09;`09For i := 1 to y do sum := sum + randint(x) X`09; where RANDINT returns random integer 1 <= r <= x X`09; X`09; Seed is a global variable declared in PASCAL main X`09; X`09.title`09RAND_REP X`09.ident`09/rand_rep/ X`09.psect misc1$code,pic,con,rel,lcl,shr,exe,rd,nowrt,2 X`09.entry`09rand_rep,`5EM X`09movl`094(ap),r4 X`09cmpl`09r4,#0 X`09bleq`092$ X`09movl`09#0,r0 X1$:`09mull2`09#16807,seed X`09bicl2`09#`5EX80000000,seed X`09subl3`09#1,seed,r2 X`09emul`09r2,8(ap),#0,r2 X`09ediv`09#2147483647,r2,r2,r3 X`09addl`09r2,r0 X`09sobgtr`09r4,1$ X`09addl`094(ap),r0 X`09ret X2$:`09movl`09#0,r0 X`09ret X`09.end X $ CALL UNPACK RANDREP.MAR;1 225796726 $ create 'f' X`7B CASINO.PAS`09`09`7D X`5Bexternal`5D procedure enter_casino; extern; X X X`7B CREATE.PAS`09`09`7D X`5Bexternal`5D procedure put_character; extern; X`5Bexternal`5D procedure put_stats; extern; X`5Bexternal`5D procedure upd_stats; extern; X`5Bexternal`5D procedure put_misc1; extern; X`5Bexternal`5D procedure upd_misc1; extern; X`5Bexternal`5D procedure put_misc2; extern; X`5Bexternal`5D procedure put_misc3; extern; X`5Bexternal`5D procedure display_char; extern; X`5Bexternal`5D procedure get_name; extern; X`5Bexternal`5D procedure change_name; extern; X`5Bexternal`5D procedure create_character; extern; X`5Bexternal`5D procedure get_ssn; external; X`5Bexternal`5D procedure set_gem_values; extern; X X`7B CREATURE.PAS`09`09`7D X`5Bexternal`5D procedure load_monsters; extern; X`5Bexternal`5D procedure mon_name; extern; X`5Bexternal`5D function find_mon(virtual_name : ctype): integer; extern; X`5Bexternal`5D procedure check_mon_lite(y,x : integer); extern; X`5Bexternal`5D procedure multiply_monster(y,x,z : integer; slp : boolean); e Vxtern; X`5Bexternal`5D procedure creatures(attack : boolean); extern; X X X`7B DEATH.PAS`09`09`7D X`5Bexternal`5D procedure upon_death; extern; X`5Bexternal`5D procedure make_tomb; extern; X`5Bexternal`5D procedure replace_name; extern; X`5Bexternal`5D procedure write_tomb; extern; X`5Bexternal`5D procedure print_dead_character; extern; X`5Bexternal`5D procedure top_twenty; extern; X X X`7B DESC.PAS`09`09`7D X`5Bexternal`5D procedure randes; extern; X`5Bexternal`5D procedure rantitle(var title`09: varying`5Ba`5D of char); ext Vern; X`5Bexternal`5D procedure magic_init(random_seed : unsigned); extern; X`5Bexternal`5D procedure known1(var object_str : varying`5Ba`5D of char); ex Vtern; X`5Bexternal`5D procedure known2(var object_str : varying`5Ba`5D of char); ex Vtern; X`5Bexternal`5D procedure unquote(var object_str : varying`5Ba`5D of char); e Vxtern; X`5Bexternal`5D procedure identify(item : treasure_type); extern; X`5Bexternal`5D procedure objdes( X`09`09var out_val`09: varying`5Ba`5D of char; X`09`09ptr`09`09: treas_ptr; X`09`09pref`09`09: boolean); extern; X X X`7B DUNGEON.PAS`09`09`7D X`5Bexternal`5D procedure move_rec(y1,x1,y2,x2 : integer); extern; X`5Bexternal`5D procedure update_stat(tstat : stat_set); extern; X`5Bexternal`5D procedure change_stat( X`09`09tstat`09: stat_set; X`09`09amount`09: integer; X`09`09factor`09: integer); extern; X`5Bexternal`5D procedure change_speed(num : integer); extern; X`5Bexternal`5D procedure py_bonuses( X`09`09tobj`09: treasure_type; X`09`09factor`09: integer); extern; X`5Bexternal`5D function get_panel(y,x : integer) : boolean; extern; X`5Bexternal`5D procedure search(y,x,chance : integer); extern; X`5Bexternal`5D procedure area_affect(dir,y,x : integer); extern; X`5Bexternal`5D procedure carry(y,x : integer); extern; X`5Bexternal`5D procedure move_light(y1,x1,y2,x2 : integer); extern; X`5Bexternal`5D procedure light_room(y,x : integer); extern; X`5Bexternal`5D procedure lite_spot(y,x : integer); extern; X`5Bexternal`5D procedure unlite_spot(y,x : integer); extern; X`5Bexternal`5D function pick_dir(dir : integer) : boolean; extern; X`5Bexternal`5D procedure panel_bounds; extern; X`5Bexternal`5D function panel_contains(y,x : integer) : boolean; extern; X`5Bexternal`5D function no_light : boolean; extern; X`5Bexternal`5D procedure change_trap(y,x : integer); extern; X`5Bexternal`5D procedure kicked_out; extern; X`5Bexternal`5D procedure call_guards(who : vtype); extern; X`5Bexternal`5D procedure call_wizards; extern; X`5Bexternal`5D procedure beg_food; extern; X`5Bexternal`5D procedure beg_money; extern; X`5Bexternal`5D procedure invite_for_meal; extern; X`5Bexternal`5D procedure party; extern; X`5Bexternal`5D procedure spend_the_night(who : vtype); extern; X`5Bexternal`5D procedure worship; extern; X`5Bexternal`5D procedure battle_game(plus : integer; kb_str : vtype); extern V; X`5Bexternal`5D procedure thief_games; extern; X`5Bexternal`5D function react(x : integer) : integer; extern; X`5Bexternal`5D procedure change_rep(amt : integer); extern; X`5Bexternal`5D function check_store_hours(st,sh : integer) : boolean; extern V; X`5Bexternal`5D procedure hit_trap(var y,x : integer); extern; X`5Bexternal`5D function minus_ac(typ_dam : integer) : boolean; extern; X`5Bexternal`5D procedure corrode_gas(kb_str : vtype); extern; X`5Bexternal`5D procedure poison_gas(dam : integer; kb_str : vtype); extern; X`5Bexternal`5D procedure fire_dam(dam : integer; kb_str : vtype); extern; X`5Bexternal`5D procedure acid_dam(dam : integer; kb_str : vtype); extern; X`5Bexternal`5D procedure cold_dam(dam : integer; kb_str : vtype); extern; X`5Bexternal`5D procedure light_dam(dam : integer; kb_str : vtype); extern; X`5Bexternal`5D procedure monster_death(y,x : integer; flags : unsigned); ext Vern; X`5Bexternal`5D function mon_take_hit(monptr,dam : integer) : integer; extern V; X`5Bexternal`5D function tot_dam( X`09`09item`09: treasure_type; X`09`09tdam`09: integer; X`09`09monster`09: creature_type) : integer; extern; X`5Bexternal`5D function py_attack(y,x : integer) : boolean; extern; X`5Bexternal`5D function find_range( X`09`09item_val`09: obj_set; X`09`09inner`09`09: boolean; X`09`09var first`09: treas_ptr; X`09`09var count`09: integer) : boolean; extern; X`5Bexternal`5D function player_test_hit(bth,level,pth,ac : integer;`20 X`09`09`09`09was_fired : boolean) : boolean; extern; X`5Bexternal`5D function test_hit(bth,level,pth,ac : integer) : boolean; exte Vrn; X`5Bexternal`5D procedure delete_monster(i2 : integer); extern; X`5Bexternal`5D procedure summon_object(y,x,num,typ : integer); extern; X`5Bexternal`5D function get_money_type( X`09`09prompt`09`09: string; X`09`09var back`09: boolean; X`09`09no_check`09: boolean) : integer; extern; X`5Bexternal`5D function coin_stuff(typ : char; var type_num : integer) X`09`09`09: boolean; extern; X`5Bexternal`5D function set_money(typ : char; coin_num : integer) : boolean; X`09`09`09`09`09`09extern; X`5Bexternal`5D function movement_rate(cspeed,mon : integer) : integer; exter Vn; X`5Bexternal`5D procedure get_player_move_rate; extern; X`5Bexternal`5D procedure xp_loss(amount : integer); extern; X`5Bexternal`5D function twall(y,x,t1,t2 : integer) : boolean; extern; X`5Bexternal`5D procedure dungeon; extern; X X X`7B FILES.PAS`09`09`7D X`5Bexternal`5D procedure intro(var finam : vtype); extern; X`5Bexternal`5D procedure print_map; extern; X`5Bexternal`5D procedure print_objects; extern; X`5Bexternal`5D procedure print_monsters; extern; X`5Bexternal`5D procedure file_character; extern; X X X`7B GENERATE.PAS`09`09`7D X`5Bexternal`5D procedure generate_cave; extern; X X X`7B HELP.PAS`09`09`7D X`5Bexternal`5D procedure ident_char; extern; X`5Bexternal`5D procedure help; extern; X`5Bexternal`5D procedure wizard_help; extern; X`5Bexternal`5D procedure moria_help(help_level : vtype); extern; X X X`7B INVEN.PAS`09`09`7D X`5Bexternal`5D function change_all_ok_stats(nok,nin : boolean) : integer; ex Vtern; X`5Bexternal`5D function cur_char1 : char; extern; X`5Bexternal`5D function cur_char2 : char; extern; X`5Bexternal`5D function cur_insure : char; extern; X`5Bexternal`5D function inven_command( X`09`09command`09`09: char; X`09`09var item_ptr`09: treas_ptr; X`09`09prompt`09`09: vtype) : boolean; extern; X`5Bexternal`5D procedure delete_inven_item(ptr : treas_ptr); extern; X`5Bexternal`5D procedure inven_destroy(item_ptr : treas_ptr); extern; X`5Bexternal`5D procedure inven_drop( X`09`09item_ptr`09: treas_ptr; X`09`09y,x`09`09: integer; X`09`09mon`09`09: boolean); extern; +-+-+-+-+-+-+-+- END OF PART 68 +-+-+-+-+-+-+-+-