-+-+-+-+-+-+-+-+ 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 +-+-+-+-+-+-+-+-
