-+-+-+-+-+-+-+-+ START OF PART 32 -+-+-+-+-+-+-+-+ X`09`09`09 name := name + ' of Enveloping'; X`09`09`09 toac := -m_bonus(1,10,level); X`09`09`09 tohit := -m_bonus(2,40,level+10); X`09`09`09 todam := -m_bonus(2,40,level+10); X`09`09`09 cost := 0; X`09`09`09 end; X`09`09 end; X`09`09 end; X`09 2 `09: begin`09`7B Chests`09`7D X`09`09 case (randint(level)+4) of X`09`09 1`09`09: begin X`09`09`09`09 name := name + '`5E (Empty)'; X`09`09`09`09 end; X`09`09 2`09`09: begin X`09`09`09`09 flags := uor(%X'00000001',flags); X`09`09`09`09 name := name + '`5E (Locked)'; X`09`09`09`09 end; X`09`09 3,4`09: begin X`09`09`09`09 flags := uor(%X'00000011',flags); X`09`09`09`09 name := name + '`5E (Poison Needle)'; X`09`09`09`09 end; X`09`09 5,6`09: begin X`09`09`09`09 flags := uor(%X'00000021',flags); X`09`09`09`09 name := name + '`5E (Poison Needle)'; X`09`09`09`09 end; X`09`09 7,8,9`09: begin X`09`09`09`09 flags := uor(%X'00000041',flags); X`09`09`09`09 name := name + '`5E (Gas Trap)'; X`09`09`09`09 end; X`09`09 10,11`09: begin X`09`09`09`09 flags := uor(%X'00000081',flags); X`09`09`09`09 name := name + '`5E (Explosion Device)'; X`09`09`09`09 end; X`09`09 12,13,14`09: begin X`09`09`09`09 flags := uor(%X'00000101',flags); X`09`09`09`09 name := name + '`5E (Summoning Runes)'; X`09`09`09`09 end; X`09`09 15,16,17`09: begin X`09`09`09`09 flags := uor(%X'00000071',flags); X`09`09`09`09 name := name + '`5E (Multiple Traps)'; X`09`09`09`09 end; X`09`09 otherwise begin X`09`09`09`09 flags := uor(%X'00000181',flags); X`09`09`09`09 name := name + '`5E (Multiple Traps)'; X`09`09`09`09 end; X`09`09 end; X`09`09 end; X`0910,11,12,13: begin`09`7B Arrows, bolts, ammo, and spikes`09`7D X`09`09 if (tval in `5B11,12`5D) then X`09`09 if (magik(chance)) then X`09`09 begin X`09`09`09tohit := m_bonus(1,35,level); X`09`09`09todam := m_bonus(1,35,level); X`09`09`09if (magik(special)) then X`09`09`09 case tval of`09`7BCASE 1`7D X`09`09`09 11,12 : case randint(10) of`09`7BCASE 2`7D X`09`09`09 1,2,3 :begin X`09`09`09`09 name := name + ' of Slaying'; X`09`09`09`09 tohit := tohit + 5; X`09`09`09`09 todam := todam + 5; X`09`09`09`09 cost := cost + 20; X`09`09`09`09 end; X`09`09`09 4,5 :begin X`09`09`09`09 flags := uor(flags,%X'00040000'); X`09`09`09`09 tohit := tohit + 2; X`09`09`09`09 todam := todam + 4; X`09`09`09`09 name := name + ' of Fire'; X`09`09`09`09 cost := cost + 25; X`09`09`09`09 end; X`09`09`09 6,7 :begin X`09`09`09`09 flags := uor(flags,%X'00008000'); X`09`09`09`09 tohit := tohit + 3; X`09`09`09`09 todam := todam + 3; X`09`09`09`09 name := name + ' of Slay Evil'; X`09`09`09`09 cost := cost + 25; X`09`09`09`09 end; X`09`09`09 8,9 :begin X`09`09`09`09 flags := uor(flags,%X'01004000'); X`09`09`09`09 tohit := tohit + 2; X`09`09`09`09 todam := todam + 2; X`09`09`09`09 name := name + ' of Slay Monster'; X`09`09`09`09 cost := cost + 30; X`09`09`09`09 end; X`09`09`09 10 :begin X`09`09`09`09 flags := uor(flags,%X'00002000'); X`09`09`09`09 tohit := tohit + 10; X`09`09`09`09 todam := todam + 10; X`09`09`09`09 name := name + ' of Dragon Slaying'; X`09`09`09`09 cost := cost + 35; X`09`09`09`09 end; X`09`09`09`09 end; `7BCASE 2`7D X`09`09 otherwise ; X`09`09`09 end;`09`7BCASE 1`7D X`09`09 end X`09`09 else if (magik(cursed)) then X`09`09 begin X`09`09`09tohit := -m_bonus(5,55,level); X`09`09`09todam := -m_bonus(5,55,level); X`09`09`09flags := uor(%X'80000000',flags); X`09`09`09cost := 0; X`09`09 end; X`09`09 number := 0; X`09`09 for i1 := 1 to 7 do number := number + randint(6); X`09`09 missle_ctr := missle_ctr + 1; X`09`09 if (missle_ctr > 65534) then X`09`09 missle_ctr := 1; X`09`09 subval := missle_ctr + 512; X`09`09 end; X`09 otherwise ; X`09 end X end; X X X`09`7B Places a particular trap at location y,x`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_trap(y,x,typ,subval : integer); X var X`09cur_pos`09`09`09: integer; X`09cur_trap`09`09: treasure_type; X begin X if (typ = 1) then X`09cur_trap := trap_lista`5Bsubval`5D X else X`09cur_trap := trap_listb`5Bsubval`5D; X popt(cur_pos); X cave`5By,x`5D.tptr := cur_pos; X t_list`5Bcur_pos`5D := cur_trap; X end; X X X`09`7B Places rubble at location y,x`09`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_rubble(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X`09begin X`09 tptr := cur_pos; X`09 fopen := false; X`09end; X t_list`5Bcur_pos`5D := rubble; X end; X X X`5Bpsect(misc4$code)`5D procedure place_open_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B1`5D; X`09fval := corr_floor3.ftval; X`09fopen := true; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_broken_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B1`5D; X`09fval := corr_floor3.ftval; X`09fopen := true; X`09t_list`5Bcur_pos`5D.p1 := 1; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_closed_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B2`5D; X`09fval := corr_floor3.ftval; X`09fopen := false; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_locked_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B2`5D; X`09fval := corr_floor3.ftval; X`09fopen := false; X`09t_list`5Bcur_pos`5D.p1 := randint(10) + 10; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_stuck_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B2`5D; X`09fval := corr_floor3.ftval; X`09fopen := false; X`09t_list`5Bcur_pos`5D.p1 := -randint(10) - 10; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_secret_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X popt(cur_pos); X with cave`5By,x`5D do X begin X`09tptr := cur_pos; X`09t_list`5Bcur_pos`5D := door_list`5B3`5D; X`09fval := corr_floor4.ftval; X`09fopen := false; X end; X end; X X X`5Bpsect(misc4$code)`5D procedure place_door(y,x : integer); X var X`09cur_pos`09`09`09: integer; X begin X case randint(3) of X 1 : case randint(4) of X`09 1`09`09: place_broken_door(y,x); X`09 otherwise`09 place_open_door(y,x); X`09 end; X 2 : case randint(12) of X`09 1,2`09`09: place_locked_door(y,x); X`09 3`09`09: place_stuck_door(y,x); X`09 otherwise`09 place_closed_door(y,x); X`09 end; X 3 : place_secret_door(y,x); X end; X end; X X X`09`7B Place an up staircase at given y,x`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_up_stairs(y,x : integer); X var X`09cur_pos`09`09`09`09: integer; X begin X with cave`5By,x`5D do X`09if (tptr <> 0) then X`09 begin X`09 pusht(tptr); X`09 tptr := 0; X`09 fopen := true; X`09 end; X popt(cur_pos); X cave`5By,x`5D.tptr := cur_pos; X t_list`5Bcur_pos`5D := up_stair; X end; X X`09`7B Place a down staircase at given y,x`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_down_stairs(y,x : integer); X var X`09cur_pos`09`09`09`09: integer; X begin X with cave`5By,x`5D do X`09if (tptr <> 0) then X`09 begin X`09 pusht(tptr); X`09 tptr := 0; X`09 fopen := true; X`09 end; X popt(cur_pos); X cave`5By,x`5D.tptr := cur_pos; X t_list`5Bcur_pos`5D := down_stair; X end; X X`09`7B Places a staircase 1=up, 2=down`09`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_stairs(typ,num,walls : integer); X var X`09i1,i2,y1,x1,y2,x2`09`09: integer; X`09flag`09`09`09`09: boolean; X begin X for i1 := 1 to num do X`09 begin X`09 flag := false; X`09 repeat X`09 i2 := 0; X`09 repeat X`09 y1 := randint(cur_height - 12); X`09 x1 := randint(cur_width - 12); X`09 y2 := y1 + 12; X`09 x2 := x1 + 12; X`09 repeat X`09`09 repeat X`09`09 with cave`5By1,x1`5D do X`09`09 if (fval in `5B1,2,4`5D) then X`09`09`09if (tptr = 0) then X`09`09 if (next_to4(y1,x1,wall_set) >= walls) then X`09`09`09 begin X`09`09`09 flag := true; X`09`09`09 case typ of X`09`09`09 1 : place_up_stairs(y1,x1); X`09`09`09 2 : place_down_stairs(y1,x1); X`09`09`09 end; X`09`09`09 end; X`09`09 x1 := x1 + 1; X`09`09 until ((x1 = x2) or (flag)); X`09`09 x1 := x2 - 12; X`09`09 y1 := y1 + 1; X`09 until ((y1 = y2) or (flag)); X`09 i2 := i2 + 1; X`09 until ((flag) or (i2 > 30)); X`09 walls := walls - 1; X`09 until(flag); X`09 end; X end; X X X`09`7B Places a treasure (Gold or Gems) at given row, column`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_gold(y,x : integer); X var X`09cur_pos,i1`09`09: integer; X begin X popt(cur_pos); X i1 := trunc((randint(dun_level+2)+2)/2.0); X if (randint(obj_great) = 1) then X`09i1 := i1 + randint(dun_level); X if (i1 > max_gold) then`20 X`09i1 := max_gold; X cave`5By,x`5D.tptr := cur_pos; X t_list`5Bcur_pos`5D := gold_list`5Bi1`5D; X with t_list`5Bcur_pos`5D do X`09cost := randint(8*cost) + cost; X end; X X X`09`7B Returns the array number of a random object`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D function get_obj_num(level : integer) : integer; X var X`09i1`09: integer; X begin X if (level > max_obj_level) then level := max_obj_level; X if (randint(obj_great) = 1) then level := max_obj_level; X if (level = 0) then X`09i1 := randint(t_level`5B0`5D) X else X`09i1 := randint(t_level`5Blevel`5D); X get_obj_num := i1; X end; X X X X`09`7B Places an object at given row, column co-ordinate`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure place_object(y,x : integer); X var X`09cur_pos`09`09`09`09: integer; X`09mag1,mag2`09`09`09: integer; X begin X popt(cur_pos); X cave`5By,x`5D.tptr := cur_pos; X t_list`5Bcur_pos`5D := object_list`5Bget_obj_num(dun_level)`5D; X magic_treasure(cur_pos,dun_level); X end; X X X`09`7B Allocates an object for tunnels and rooms`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure alloc_object`09( X`09`09`09alloc_set`09:`09obj_set; X`09`09`09typ,num `09:`09integer X`09`09`09`09`09`09); X var X`09i1,i2,i3`09`09: integer; X begin X for i3 := 1 to num do X`09begin X`09 repeat X`09 i1 := randint(cur_height); X`09 i2 := randint(cur_width); X`09 until ((cave`5Bi1,i2`5D.fval in alloc_set) and`20 X`09`09 (cave`5Bi1,i2`5D.tptr = 0)); X`09 case typ of X`09 1 : place_trap(i1,i2,1,randint(max_trapa)); X`09 2 : place_trap(i1,i2,2,randint(max_trapb)); X`09 3 : place_rubble(i1,i2); X`09 4 : place_gold(i1,i2); X`09 5 : place_object(i1,i2); X end X`09end X end; X X X`09`7B Creates objects nearby the coordinates given`09`09-RAK-`09`7D X`5Bpsect(misc4$code)`5D procedure random_object(y,x,num : integer); X var X`09i1,i2,i3`09`09: integer; X begin X repeat X`09i1 := 0; X repeat X`09 i2 := y - 3 + randint(5); X`09 i3 := x - 4 + randint(7); X`09 with cave`5Bi2,i3`5D do X`09 if (fval in floor_set) then X`09 if (tptr = 0) then X`09`09begin X`09`09 if (randint(100) < 75) then X`09`09 place_object(i2,i3) X`09`09 else X`09`09 place_gold(i2,i3); X`09`09 i1 := 9; X`09`09end; X`09 i1 := i1 + 1; X until (i1 > 10); X`09num := num - 1; X until (num = 0); X end; X X X`09`7B Converts stat num into string`09`09`09`09-RAK-`09`7D X`5Bpsect(misc5$code)`5D procedure cnv_stat`09( X`09`09`09stat`09 `09:`09byteint; X`09`09`09var out_val`09:`09stat_type X`09`09`09`09`09); X var X`09tmp_str`09`09`09`09: vtype; X`09part1,part2`09`09`09: integer; X begin X if (stat > 18) then X`09begin X`09 part1 := 18; X`09 part2 := stat - 18; X`09 writev(tmp_str,part1:2,'/',part2:1); X`09end X else X`09writev(tmp_str,stat:2); X if (length(tmp_str) < 6) then tmp_str := pad(tmp_str,' ',6); X out_val := tmp_str; X end; X X X`09`7B Print character stat in given row, column`09`09-RAK-`09`7D X`5Bpsect(misc5$code)`5D procedure prt_stat`09( X`09`09`09stat_name `09: vtype; X`09`09`09stat `09`09: byteint; X`09`09`09row,column `09: integer X`09`09`09`09`09); X var X`09`09out_val1`09`09: stat_type; X`09`09out_val2`09`09: vtype; X begin X`09cnv_stat(stat,out_val1); X`09out_val2 := stat_name + out_val1; X`09put_buffer(out_val2,row,column); X end; X X X`09`7B Print character info in given row, column`09`09-RAK-`09`7D X`5Bpsect(misc5$code)`5D procedure prt_field(info : vtype; row,column : integ Ver); X var X`09`09out_val1,out_val2`09: vtype; X begin X`09put_buffer(pad(info,' ',14),row,column); X end; X X X`09`7B Print number with header at given row, column`09`09-RAK-`09`7D X`5Bpsect(misc5$code)`5D procedure prt_num`09( X`09`09`09header`09`09:`09vtype; X`09`09`09num,row,column`09:`09integer X`09`09`09`09`09); X var X`09`09out_val`09`09`09: vtype; X begin X`09writev(out_val,header,num:1,' '); X`09put_buffer(out_val,row,column); X end; X X X`09`7B Adjustment for wisdom`09`09`09`09`09-JWT-`09`7D X`5Bpsect(misc2$code)`5D function wis_adj : integer; X begin X if (py.stat.cwis > 117) then X`09wis_adj := 7 X else if (py.stat.cwis > 107) then X`09wis_adj := 6 X else if (py.stat.cwis > 87) then X`09wis_adj := 5 X else if (py.stat.cwis > 67) then X`09wis_adj := 4 X else if (py.stat.cwis > 17) then +-+-+-+-+-+-+-+- END OF PART 32 +-+-+-+-+-+-+-+-