-+-+-+-+-+-+-+-+ START OF PART 52 -+-+-+-+-+-+-+-+ X 52 : move_char(com_val - 48); `7B Move dir 4 `7D X 53 : BEGIN `7B Rest one turn `7D X move_char(com_val - 48); X tiny_sleep(10); `7B Sleep 1/10 a second`7D X flush; X END; X 54 : move_char(com_val - 48); `7B Move dir 6 `7D X 55 : move_char(com_val - 48); `7B Move dir 7 `7D X 56 : move_char(com_val - 48); `7B Move dir 8 `7D X 57 : move_char(com_val - 48); `7B Move dir 9 `7D X 60 : go_up; `7B< = go up `7D X 62 : go_down; `7B> = go down`7D X 63 : BEGIN `7B? = help `7D X help; X reset_flag := true; `7B Free move `7D X END; X `7B 65 : BEGIN `7B Debug feature for weight X tmp1 := 0; X for i1 := 1 to inven_max do X with inventory`5Bi1`5D do X tmp1 := tmp1 + weight*number; X writev(out_val,inven_weight:1,' `7C ',tmp1:1); X msg_print(out_val); X END;`7D X 66 : bash; `7BB = bash `7D X 67 : BEGIN `7BC = character`7D X change_name; X draw_cave; X reset_flag := true; `7B Free move `7D X END; X 68 : disarm_trap; `7BD = disarm `7D X 69 : eat; `7BE = eat`7D X 70 : refill_lamp; `7BF = refill `7D X 72 : BEGIN `7BH = moria hlp`7D X moria_help(''); X draw_cave; X reset_flag := true; `7B Free move `7D X END; X 76 : BEGIN `7BL = location `7D X reset_flag := true; `7B Free move `7D X if ((py.flags.blind > 0) or (no_light)) then X msg_print('You can''t see your map.') X else X BEGIN X writev(out_val, X 'Section `5B', X (trunc((char_row-1)/outpage_height)+1):1,',', X (trunc((char_col-1)/outpage_width )+1):1, X '`5D; Location = `5B',char_row:1,',',char_col: V1,'`5D'); X msg_print(out_val); X END; X END; X 77: mix_potions; `7BM = Mix Potions`7D X 78: ; X 80: BEGIN `7BP = print map or character sheet`7D X`09`09`09 if (get_com( X`09`09'Print Map (m) or Character Sheet (s)?',command)) then X`09`09`09 case command of X`09`09`09 's','S':character_print; X`09`09`09 'm','M':Begin X`09`09`09 if ((py.flags.blind > 0) or (no_light)) then X`09`09`09`09 msg_print('You can''t see to draw a map.') X`09`09`09`09 else X`09`09`09`09 print_map; X`09`09`09`09 End; X`09`09`09 otherwise; X`09`09`09 end; X reset_flag := true; `7B Free move `7D X END; X`09`0981 : begin `7BQ = toggle -more-`7D X`09`09`09 reset_flag := true; X`09`09`09 more_flag := not more_flag; X`09`09`09 if (more_flag) then X`09`09`09 prt('Question -More- enabled.',1,1) X`09`09`09 else X`09`09`09 prt('Question -More- disabled.',1,1); X`09`09`09end; X 82 : rest; `7BR = rest `7D X 83 : if (search_flag) then `7BS = srh mode `7D X begin X search_off; X reset_flag := true; `7B Free move `7D X end X else if (py.flags.blind > 0) then X msg_print('You are incapable of searching while blind.') X else X begin X search_on; X reset_flag := true; `7B Free move `7D X end; X 84 : tunnel; `7BT = tunnel `7D X 86 : game_version; `7BV = version`7D X`09`0987 : begin `7BW = toggle wall pattern`7D X`09`09`09 reset_flag := true; X`09`09`09 wall_flag := not wall_flag; X`09`09`09 draw_cave; X`09`09`09 if (wall_flag) then X`09`09`09 prt('Cool wall patterns enabled.',1,1) X`09`09`09 else X`09`09`09 prt('No more annoying wall patterns.',1,1); X`09`09`09end; X 92 : if (wizard) then X mon_info; `7B\ = monster info utility - NBT` V7D X 97 : aim; `7Ba = aim `7D X 98 :`09begin X`09`09`09 if (py.misc.pclass = 1) then`20 X`09`09`09 reset_flag := berzerk X`09`09`09 else X`09`09`09 examine_book; `7Bb = browse `7D X`09`09`09end; X 99 : closeobject; `7Bc = close`7D X 100: drop; `7Bd = drop `7D X 101: BEGIN `7Be = equipment`7D X reset_flag := true; X if (inven_command('e',0,0)) then draw_cave; X END; X 102: if (equipment`5B23`5D.tval in `5B19,20`5D) then ` V7Bf = fire`7D X fire_object X else X begin X msg_print('You are not wielding a gun!'); X reset_flag := true; X end; X 104: throw_object; `7Bh = hurl`7D X 105: BEGIN `7Bi = inventory`7D X reset_flag := true; `7B Free move `7D X if (inven_command('i',0,0)) then draw_cave; X END; X 106: jamdoor; `7Bj = jam`7D X`09`09107: begin `7Bk = kill list`7D X`09`09`09 reset_flag := true; X`09`09`09 display_kill_list; X`09`09`09end; X 108: BEGIN `7Bl = look `7D X look; X reset_flag := true; X END; X 109: begin `7Bm = magick`7D X if (py.misc.pskill in `5B1,2,7`5D) then X use_tech_skills; X if (py.misc.pskill in `5B5,6`5D) then X use_con_skills; X end; X 111: openobject; `7Bo = open `7D X 112: pray; `7Bp = pray `7D X 113: quaff; `7Bq = quaff`7D X 114: read; `7Br = read `7D X 115: if (py.flags.blind > 0) then `7Bs = search `7D X msg_print('You are incapable of searching while blind.') X else X search(char_row,char_col,py.misc.srh); X 116: BEGIN `7Bt = unwear `7D X if (inven_command('t',0,0)) then draw_cave; X END; X 117: use; `7Bu = use staff`7D X 119: BEGIN `7Bw = wear `7D X if (inven_command('w',0,0)) then draw_cave; X END; X 120: BEGIN `7Bx = exchange `7D X if (inven_command('x',0,0)) then draw_cave; X END; X otherwise if (wizard) then X BEGIN X reset_flag := true; `7B Wizard commands are free moves`7 VD X CASE com_val of X 1 : really_heal_character; `7B`5EA cure all`7D X`09`092 : beckon_creature; `7B`5EB = call creature by number `7D X 3 : make_nice_character; `7B`5EC - mwk`7D X 4 : change_location; `7B`5ED = up/down/change-town V -RLG `7D X 5 : change_character; `7B`5EE = wizchar `7D X 6 : mass_genocide;`09 `7B`5EF = genocide`7D X 7 : Begin X alloc_object(floor_set,5,10); `7B`5EG = treasure` V7D X prt_map; X End; X 8 : wizard_help; `7B`5EH = wizhelp `7D X 9 : begin X`09`09`09 msg_print('All items identified, master.'); X`09`09 for i1 := 1 to inven_max do `7B`5EI = identify`7D X`09`09`09 begin X`09`09`09 unquote(inventory`5Bi1`5D.name); X`09`09`09 known1(inventory`5Bi1`5D.name); X`09`09`09 known2(inventory`5Bi1`5D.name); X`09`09`09 end; X`09`09`09end; X 10 : BEGIN `09`09`7B`5EJ = gain exp`7D X py.misc.exp := trunc(1.5*py.misc.exp); X`09`09`09 if (py.misc.exp = 1) then py.misc.exp := 2; X prt_experience; X END; X 11 : BEGIN `09`09`7B`5EK = summon`7D X y := char_row; X x := char_col; X summon_monster(y,x,true); X creatures(false); X END; X 12 : wizard_light; `7B`5EL `7D X 14 : print_stuff_to_file; `7B`5EN `7D X`09`0915 :`09Begin`09`09 `7B`5EO = pick a random weirdness`7D X`09`09 tmp1 := query_max_wierd; X`09`09`09 prt_num('Which One (0-',tmp1,1,1); X`09`09`09 prt(') ? ',1,16); X`09`09`09 get_string(out_val,1,20,3); X`09`09`09 i1 := -1; X `09`09`09 readv(out_val,i1,error:=continue); X`09`09`09 if (i1 in `5B0..tmp1`5D) then X`09`09`09 random_wierdness(i1,true); X`09`09`09End; X 20 : teleport(100); `09`7B`5ET = teleport`7D X`09`0921 : show_values; `7B`5EU = character dubugging`7D X 22 : restore_char; `7B`5EV = restore `7D X 23 : wizard_create; `7B`5EW = create`7D X 24 : item_stats; `7B`5EX = examine a item -RLG`7D X otherwise prt('Type ''?'' for help...',1,1) X END X END X else X prt('Type ''?'' for help...',1,1); X END; X`7B End of commands `7D X until (not(reset_flag) or (moria_flag)); X`7B Teleport? `7D X if (teleport_flag) then teleport(100); X`7B Move the creatures `7D X if (not moria_flag) then creatures(true); X`7B Exit when moria_flag is set `7D X until (moria_flag); X END; $ CALL UNPACK [.INC]MAIN.INC;1 589493454 $ create 'f' X`7B Use date and time to produce random seed `7D X`5Bpsect(setup$code)`5D function get_seed : unsigned; X type X $quad = `5Bquad,unsafe`5D record X l0 : unsigned; X l1 : unsigned; X end; X var X time : $quad; X seed_val : unsigned; X`20 X `5Basynchronous,external (SYS$GETTIM)`5D function get_time( X var time : $quad) : integer; X external; X X begin X get_time(time); `7B Current time `7D X seed_val := uor(time.l0,time.l1); `7B Random number `7D X get_seed := uor(seed_val,%X'00000001'); `7B Odd number `7D X end; X`20 X X`7B returns true if there is a line of sight from `5By1,x1`5D to `5By2,x2`5D V -jeb `7D X`7B NOTE: THIS ROUTINE IS NOT AT ALL EVEN A LITTLE BIT DEBUGGED OR TESTED`7 VD X`7B But it has lasted awhile without complaint.... -RLG`7D X`5Bpsect(misc4$code)`5D function clear_path(y1,x1,y2,x2 : integer) : boolean V; X var`20 X i3`09`09 : integer; `7Bloop counter `7D X i1,i2 `09`09 : integer; `7Bcurrent place under scrutiny`7D X`09r1,r2`09`09 : real; `7Breal equivalents of i1,i2 `7D`09 X`09dist`09`09 : real; `7Bdistance from pos1 to pos2 `7D X`09x_vector,y_vector : real; `7Bamount to move per step `7D X begin X clear_path := true; X`09dist := sqrt(sqr(1.0*(y1-y2))+sqr(1.0*(x1-x2))); X`09y_vector := (y2-y1)/dist; X`09x_vector := (x2-x1)/dist; X`09for i3 := 1 to trunc(dist) do X`09 begin X`09 i1 := y1 + trunc(1.0*y1+1.0*i3*y_vector); X`09 i2 := x1 + trunc(1.0*x1+1.0*i3*x_vector); X`09 if (not (((i1 = y1) and (i2 = x1)) or`20 X`09 ((i1 = y2) and (i2 = x2)))) then X`09 if (cave`5Bi1,i2`5D.fval in wall_set) then clear_path := false; X`09 end; X end; X X`7B Centers a string within a #field length character string `7D X`5Bpsect(misc1$code)`5D function fill_str (p1 : vtype; field : integer) : vt Vype; X var X s1 `09: vtype; X i1,i2`09: integer; X BEGIN X s1 := ''; X i1 := trunc(length(p1) / 2); X`09i2 := field div 2; X fill_str := substr(pad(s1,' ',i2-i1) + pad(p1,' ',field),1,field); X END; X`20 X`7B An often needed function. Returns the Lesser of two integers `7D X`5Bpsect(misc4$code)`5D function lesser(a,b : integer) : integer; X begin X if (a >= b) then X lesser := b X else X lesser := a; X end; X X`7B Returns the Greater of two integers. `7D X`5Bpsect(misc4$code)`5D function greater(a,b : integer) : integer; X begin X if (a >= b) then X greater := a X else X greater := b; X end; X X X`7B Routine that draws the bus. See also 'take_bus' in train.inc `7D X`5Bpsect(misc4$code)`5D procedure draw_the_bus; Xvar X`09str : vtype; X`09f1 : text; X`09i1 : integer; XBEGIN X open (f1,file_name:=BUS_PIC,record_length:=80,history:=old,error:=continue V); X reset(f1); X if (status(f1) <> 0) then X begin X writev(str,'You endure a long bus ride and arrive in ', X`09`09 townlist`5Btown_num`5D.town_name); X msg_print(str); X end X else X begin X clear(1,1); X for i1 := 1 to 24 do X`09begin X`09 readln(f1,str); X`09 prt(str,i1,1); X`09end; X prt( fill_str(townlist`5Btown_num`5D.town_name,21) + '`7C',17,52); X pause(24); X end; X close(f1); XEND; X X`7B Computes current weight limit `7D X`5Bpsect(misc4$code)`5D function weight_limit : integer; X begin X weight_limit := lesser(3000, py.stat.cstr*player_weight_cap + py.misc.w Vt); X end; X`20 X`7B Returns the day number; 1=Sunday...7=Saturday `7D X`5Bpsect(setup$code)`5D function day_num : integer; X var +-+-+-+-+-+-+-+- END OF PART 52 +-+-+-+-+-+-+-+-