-+-+-+-+-+-+-+-+ START OF PART 45 -+-+-+-+-+-+-+-+
X`09`09    begin
X`09`09      tmp := object_list`5Bi2`5D;
X`09`09      object_list`5Bi2`5D := object_list`5Bi3`5D;
X`09`09      object_list`5Bi3`5D := tmp;
X`09`09    end
X`09`09  else
X`09`09    i2 := 0;
X`09`09  i2 := i2 - gap;
X`09`09end;
X`09    end;
X`09  gap := gap div 2;
X`09end;
X    end;
X
X
X
X`09`7B Chance of treasure having magic abilities`09`09-RAK-`09`7D
X`09`7B Chance increases with each dungeon level`09`09`09`7D
X`5Bglobal,psect(misc4$code)`5D procedure magic_treasure(x,level : integer);
X    var
X`09chance,special,cursed,i1,wpn_type`09: integer;
X
X   procedure Ego_sword(x : integer);
X     `09begin
X`09  with t_list`5Bx`5D do
X        `09case randint(5) of
X`09  `09`091 : begin `7BHoly Avenger`7D
X`09`09`09`09  flags := uor(flags,see_invisible_worn_bit+
X`09`09`09`09`09`09     sustain_stat_worn_bit+
X`09`09`09`09`09`09     resist_acid_worn_bit+
X`09`09`09`09`09`09     resist_fire_worn_bit+
X`09`09`09`09`09`09     strength_worn_bit+
X`09`09`09`09`09`09     slay_undead_worn_bit+
X`09`09`09`09`09`09     slay_evil_worn_bit);
X`09`09`09`09  tohit := tohit + 5;
X`09`09`09`09  todam := todam + 5;
X`09`09`09`09  toac`09:= randint(4);
X`09`09`09`09  p1`09:= randint(4) - 1;
X`09`09`09`09  name`09:= name + ' (HA)';
X`09`09`09`09  cost`09:= cost + p1*50000;
X`09`09`09`09  cost`09:= cost + 1000000;
X`09`09`09`09end;
X`09`09`092 : begin `7BDefender`7D
X`09`09`09`09  flags := uor(flags,feather_fall_worn_bit+
X`09`09`09`09`09`09     see_invisible_worn_bit+
X`09`09`09`09`09`09     resist_lightning_worn_bit+
X`09`09`09`09`09`09     free_action_worn_bit+
X`09`09`09`09`09`09     resist_cold_worn_bit+
X`09`09`09`09`09`09     resist_acid_worn_bit+
X`09`09`09`09`09`09     resist_fire_worn_bit+
X`09`09`09`09`09`09     regeneration_worn_bit+
X`09`09`09`09`09`09     stealth_worn_bit);
X`09`09`09`09  tohit := tohit + 3;
X`09`09`09`09  todam := todam + 3;
X`09`09`09`09  toac`09:= 5 + randint(5);
X`09`09`09`09  name`09:= name + ' `5B%P4`5D (DF)';
X`09`09`09`09  p1`09:= randint(3);
X`09`09`09`09  cost`09:= cost + p1*50000;
X`09`09`09`09  cost`09:= cost + 750000;
X`09`09`09`09end;
X`09`09`093 : begin `7BDemon Bane`7D
X`09`09`09`09  flags := uor(flags,resist_fire_worn_bit);
X`09`09`09`09  flags2 := uor(flags2,slay_demon_worn_bit);
X`09`09`09`09  tohit := tohit + 3;
X`09`09`09`09  todam := todam + 3;
X`09`09`09`09  name := name + ' (DB)';
X`09`09`09`09  cost := cost + 500000;
X`09`09`09`09end;
X`09`09`094 : begin `7BSoul Sword`7D
X`09`09`09`09  flags := uor(flags,intelligence_worn_bit+
X`09`09`09`09`09`09     wisdom_worn_bit+
X`09`09`09`09`09`09     charisma_worn_bit+
X`09`09`09`09`09`09     see_invisible_worn_bit+
X`09`09`09`09`09`09     regeneration_worn_bit);
X`09`09`09`09  flags2 := uor(flags2,soul_sword_worn_bit+
X`09`09`09`09`09`09       bad_repute_worn_bit);
X`09`09`09`09  tohit := tohit + 5;
X`09`09`09`09  todam := todam + 10;
X`09`09`09`09  p1 := -randint(3) - 2;
X`09`09`09`09  cost := cost + 800000 + p1*40000;
X`09`09`09`09  name := name + ' (SS)';
X`09`09`09`09end;
X`09`09`095 : begin `7BVorpal Sword`7D
X`09`09`09`09  flags := uor(flags,sustain_stat_worn_bit);
X`09`09`09`09  flags2 := uor(flags2,sharp_worn_bit);
X`09`09`09`09  p1 := 1;
X`09`09`09`09  tohit := tohit + 5;
X`09`09`09`09  todam := todam + 5;
X`09`09`09`09  cost := cost + 750000;
X`09`09`09`09  name := name + ' (V)';
X`09`09`09`09end;
X`09`09`09end; `7Bof case`7D
X`09`09  end; `7Bof procedure`7D
X
X    procedure Slaying_sword(x : integer);
X`09`09begin
X`09  `09  with t_list`5Bx`5D do
X`09`09`09case randint(4) of
X`09`09`09`091 : begin `7BSlay Monster`7D
X`09`09`09`09  flags := uor(flags,see_invisible_worn_bit+
X`09`09`09`09`09`09     slay_monster_worn_bit);
X`09`09`09`09  tohit := tohit + 3;
X`09`09`09`09  todam := todam + 3;
X`09`09`09`09  name := name + ' (SM)';
X`09`09`09`09  cost := cost + 500000;
X`09`09`09`09end;
X
X`09`09`09`092 : begin `7BSlay Dragon`7D
X`09`09`09`09  flags := uor(flags,slay_dragon_worn_bit);
X`09`09`09`09  tohit := tohit + 3;
X`09`09`09`09  todam := todam + 3;
X`09`09`09`09  name := name + ' (SD)';
X`09`09`09`09  cost := cost + 400000;
X`09`09`09`09end;
X
X`09`09`09`093 : begin `7BSlay Undead`7D
X`09`09`09`09  flags := uor(flags,slay_undead_worn_bit);
X`09`09`09`09  tohit := tohit + 2;
X`09`09`09`09  todam := todam + 2;
X`09`09`09`09  name := name + ' (SU)';
X`09`09`09`09  cost := cost + 300000;
X`09`09`09`09end;
X
X`09`09`09`094 : begin `7BSlay Regenerative`7D
X`09`09`09`09  flags2 := uor(flags2,slay_regen_worn_bit);
X`09`09`09`09  tohit := tohit + 2;
X`09`09`09`09  todam := todam + 2;
X`09`09`09`09  cost := cost + 150000;
X`09`09`09`09  name := name + ' (SR)';
X`09`09`09`09end;
X`09`09`09end; `7Bof case`7D
X`09`09end; `7Bof procedure`7D
X
X    procedure Magic_sword(x : integer);
X`09`09begin
X`09`09  with t_list`5Bx`5D do
X`09`09`09case randint(4) of
X`09`09`09`091 : begin `7BFlame Tongue`7D
X`09`09`09`09  flags := uor(flags,flame_brand_worn_bit);
X`09`09`09`09  tohit := tohit + 1;
X`09`09`09`09  todam := todam + 3;
X`09`09`09`09  name := name + ' (FT)';
X`09`09`09`09  cost := cost + 200000;
X`09`09`09`09end;
X
X`09`09`09`092 : begin `7BFrost Brand`7D
X`09`09`09`09  flags := uor(flags,cold_brand_worn_bit);
X`09`09`09`09  tohit := tohit + 1;
X`09`09`09`09  todam := todam + 1;
X`09`09`09`09  name := name + ' (FB)';
X`09`09`09`09  cost := cost + 120000;
X`09`09`09`09end;
X
X`09`09`09`093 : begin `7BWizards Blade`7D
X`09`09`09`09  flags2 := uor(flags2,Magic_proof_worn_bit);
X`09`09`09`09  weight := trunc(weight * 4 / 5);
X`09`09`09`09  tval := Dagger;
X`09`09`09`09  tohit := tohit + 3;
X`09`09`09`09  todam := todam + 1;
X`09`09`09`09  cost := cost + 80000;
X`09`09`09`09  name := name + ' (WB)';
X`09`09`09`09end;`09
X
X`09`09`09`094 : begin `7BBlessed Blade`7D
X`09`09`09`09  flags := uor(flags,magic_proof_worn_bit);
X`09`09`09`09  tval := maul;
X`09`09`09`09  tohit := tohit +2;
X`09`09`09`09  todam := todam +4;
X`09`09`09`09  cost := cost + 80000;
X`09`09`09`09  name := name + ' (BB)';
X`09`09`09`09end;
X`09`09`09end; `7Bof case`7D
X`09`09end; `7Bof procedure`7D
X
X`09`7B Boolean : is object enchanted`09`09  -RAK- `7D
X    function magik(chance : integer) : boolean;
X      begin
X`09magik := (randint(150) <= chance); `7B for deeper dungeon levels `7D
X      end;
X
X`09`7B Enchant a bonus based on degree desired -RAK- `7D
X    function m_bonus(base,max_std,level : integer) : integer;
X      var
X`09x,stand_dev`09`09: integer;
X      begin
X`09stand_dev := trunc(obj_std_adj*level) + obj_std_min;
X`09if (stand_dev > max_std) then stand_dev := max_std;
X`09x := trunc(abs(randnor(0,stand_dev))/10.0) + base;
X`09if (x < base) then
X`09  m_bonus := base
X`09else
X`09  m_bonus := x;
X      end;
X
X    begin
X      chance := obj_base_magic +(level*(obj_base_max-obj_base_magic)) div 10
V0;
X      if (chance > obj_base_max) then chance := obj_base_max;
X      special := trunc(chance/obj_div_special);
X      cursed  := trunc(chance/obj_div_cursed);
X      with t_list`5Bx`5D do
X`09`7B Depending on treasure type, it can have certain magical properties`7D
X`09case tval of
X `7B Miscellaneous Objects`7D
X`09  valuable_gems :
X`09`09begin
X`09`09  case subval of
X`09`09`091 : p1 := randint(10) + 10;
X`09`09`092 : p1 := randint(5) +2;
X`09`09`093 : p1 := randint(8) + 7;
X`09`09`094 : p1 := randint(3) + 3;
X`09`09`095 : p1 := randint(10) + 10;
X`09`09`096 : p1 := randint(5) + 5;
X`09`09`097 : p1 := randint(15) + 15;
X`09`09`098 : p1 := randint(3) + 2;
X`09`09`099 : p1 := randint(5) + 3;
X`09`09`0910: p1 := randint(3) + 2;
X`09`09`0911: p1 := randint(6) + 4;
X`09`09     end;
X`09`09end;
X`09  misc_usable :
X`09`09begin
X`09`09  if (magik(chance)) then
X`09`09    if (magik(special)) then
X`09`09      case subval of
X`09`09`0914   : begin `7Bstatues`7D
X`09`09`09`09 case randint(3) of
X`09`09`09`09   1 : `7Bsummoning undead`7D
X`09`09`09`09     begin
X`09`09`09`09`09flags := uor(flags,%X'00000100');
X`09`09`09`09`09name := name + ' Major of Undead Summoning';
X`09`09`09`09`09cost := 0;
X`09`09`09`09`09p1 := randint(4) + 2;
X`09`09`09`09     end;
X`09`09`09`09   2 : `7Bsummon demon`7D
X`09`09`09`09     begin
X`09`09`09`09`09flags := uor(flags,%X'00000200');
X`09`09`09`09`09name := name + ' Major of Demon Summoning';
X`09`09`09`09`09cost := 0;
X`09`09`09`09`09p1 := randint(3) + 1;
X`09`09`09`09     end;
X`09`09`09`09   3 : `7BLife giving`7D
X`09`09`09`09     begin
X`09`09`09`09`09flags := uor(flags,%X'00000400');
X`09`09`09`09`09name := name + ' Life Giving';
X`09`09`09`09`09cost := 900000;
X`09`09`09`09`09p1 := randint(5) + 3;
X`09`09`09`09     end;
X`09`09`09`09  end;
X`09`09`09`09end;
X`09`09`09 15`09    : begin
X`09`09`09`09`09case randint(4) of
X`09`09`09`09`09 1 : begin
X`09`09`09`09`09       name := name + ' from a Dragon';
X`09`09`09`09`09       p1 := randint(4) + 2;
X`09`09`09`09`09       cost := cost + p1*20000;
X`09`09`09`09`09      flags := uor(flags,%X'20000000');
X
X`09`09`09`09`09     end;
X`09`09`09`09`092 : begin
X`09`09`09`09`09`09name := name + ' of a Demon';
X`09`09`09`09`09`09p1 := randint(4) +2;
X`09`09`09`09`09`09cost := cost + p1*20000;
X`09`09`09`09`09      flags := uor(flags,%X'40000000');
X`09`09`09`09`09     end;
X`09`09`09`09  otherwise  ;
X`09`09`09`09     end;
X`09`09`09`09end;
X`09`09`0916,17,18    : begin `7Bcrucifixes`7D
X`09`09`09`09`09case randint(4) of
X`09`09`09`09         1,2,3 : begin`20
X`09`09`09`09`09      flags := uor(flags,%X'00000001');
X`09`09`09`09`09      name := name + ' of Turning';
X`09`09`09`09`09      p1 := randint(p1*2) + 2;
X`09`09`09`09`09      cost := cost + p1*20000;
X`09`09`09`09`09     end;
X`09`09`09`09`09 4 : begin
X`09`09`09`09`09      flags := uor(flags,%X'00000002');
X`09`09`09`09`09      name := name + ' of Demon Dispelling';
X`09`09`09`09`09      p1 := randint( trunc(subval/2));
X`09`09`09`09`09      cost := cost + p1 * 50000;
X`09`09`09`09`09     end;
X`09`09`09`09`09  end;
X`09`09`09`09`09end;
X`09`09`0919 : begin
X`09`09`09`09flags := uor(flags,%X'00000004');
X`09`09`09`09name := name + ' of Summon Undead';
X`09`09`09`09cost := 0;
X`09`09`09`09p1 := 2;
X`09`09`09     end;
X`09`09`0920 : begin
X`09`09`09`09flags := uor(flags,%X'00000008');
X`09`09`09`09name := name + ' of Demon Summoning';
X`09`09`09`09cost := 0;
X`09`09`09`09p1 := 2;
X `09`09`09     end;
X`09`09`0921 : begin
X`09`09`09`09case randint(3) of
X`09`09`09`09  1 : begin
X`09`09`09`09`09flags := uor(flags,%X'00000010');
X`09`09`09`09`09name := name +' containing a Djinni';
X`09`09`09`09`09cost := 200000;
X`09`09`09`09`09p1 := 1;
X`09`09`09`09      end;
X`09`09`09`09  2,3 : begin
X`7Bthis routine sucks!!!!!`7D`09`09flags := uor(flags,%X'00000020');
X`09`09`09`09`09name := name+' containing some Demons';
X`09`09`09`09`09cost := 0;
X`09`09`09`09`09p1 := 1
X`09`09`09`09     end;
X`09`09`09`09 end;
X`09`09`09`09end;
X`09`09`09end;
X`09`09end;
X `7B Armor and shields `7D
X`09  shield, hard_armor, soft_armor :
X`09`09 begin
X`09`09    if ((tval = soft_armor) and (subval=6)) then
X`09`09      begin
X`7Bsorry about the mess.  dean`7D
X`09`09`09if (randint(4)=1) then
X`09`09`09begin
X`09`09`09  t_list`5Bx`5D := yums`5B11+randint(3)`5D;
X`09  t_list`5Bx`5D.weight := t_list`5Bx`5D.weight*weight_adj;
X`09`09`09  t_list`5Bx`5D.cost:=trunc(t_list`5Bx`5D.cost*cost_adj);
X`09`09`09end;
X`09`09      end
X`09`09    else if ((tval=hard_armor) and (subval=13)) then
X`09`09      if (magik(chance) or (randint(5)=1)) then
X`09`09`09begin
X`09`09`09if (magik(special) or (randint(5)=1)) then
X`09`09`09  if (randint(3)=1) then
X`09`09`09    t_list`5Bx`5D := yums`5B17`5D
X`09`09`09  else
X`09`09`09    t_list`5Bx`5D := yums`5B16`5D
X`09`09`09else
X`09`09`09  t_list`5Bx`5D := yums`5B15`5D;
X`09  t_list`5Bx`5D.weight := t_list`5Bx`5D.weight*weight_adj;
X`09`09`09  t_list`5Bx`5D.cost:=trunc(t_list`5Bx`5D.cost*cost_adj);
X`09`09`09end;
X`09`09    if magik(chance) then
X`09`09      begin
X`09`09`09toac := m_bonus(1,30,level);
X`09`09`09if magik(special) then
X`09`09`09  case randint(9) of
X`09`09`091     : begin
X`09`09`09`09  flags := uor(flags,resist_lightning_worn_bit+
X`09`09`09`09`09`09     resist_cold_worn_bit+
X`09`09`09`09`09`09     resist_acid_worn_bit+
X`09`09`09`09`09`09     resist_fire_worn_bit);
X`09`09`09`09  name := name + ' (R)';
X`09`09`09`09  toac := toac + 5;
X`09`09`09`09  cost := cost + 250000;
X`09`09`09`09end;
X`09`09`092     : begin`09`7B Resist Acid`09`7D
X`09`09`09`09  flags := uor(flags,resist_acid_worn_bit);
X`09`09`09`09  name := name + ' (RA)';
X`09`09`09`09  cost := cost + 100000;
X`09`09`09`09end;
X`09`09`093,4   : begin`09`7B Resist Fire`09`7D
X`09`09`09`09  flags := uor(flags,resist_fire_worn_bit);
X`09`09`09`09  name := name + ' (RF)';
X`09`09`09`09  cost := cost + 60000;
X`09`09`09`09end;
X`09`09`095,6   : begin`09`7B Resist Cold`09`7D
X`09`09`09`09  flags := uor(flags,resist_cold_worn_bit);
X`09`09`09`09  name := name + ' (RC)';
X`09`09`09`09  cost := cost + 60000;
X`09`09`09`09end;
X`09`09`097,8,9 : begin`09`7B Resist Lightning`7D
X`09`09`09`09  flags := uor(flags,resist_lightning_worn_bit);
X`09`09`09`09  name := name + ' (RL)';
X`09`09`09`09  cost := cost + 50000;
X`09`09`09`09end;
X`09`09`09  end
X`09`09      end
X`09`09    else if (magik(cursed)) then
X`09`09      begin
X`09`09`09toac := -m_bonus(1,40,level);
X`09`09`09cost := 0;
X`09`09`09flags := uor(cursed_worn_bit,flags);
X`09`09      end
X`09`09  end;
X`7B Weapons `7D
X`09  hafted_weapon, pole_arm, sword, dagger, maul :
X`09`09begin
X`09`09    if magik(chance) then
X`09`09      begin
X`09`09`09tohit := m_bonus(0,40,level);
X`09`09`09todam := m_bonus(0,40,level);
X`09`09`09if magik(special) then
X`09`09`09  if ((subval = 99) and (randint(5)=1)) then`20
X`09`09`09       begin
X`09`09`09`09  flags := uor(flags,charisma_worn_bit+
X`09`09`09`09`09`09searching_worn_bit+
X`09`09`09`09`09`09stealth_worn_bit+
X`09`09`09`09`09`09regeneration_worn_bit+
X`09`09`09`09`09`09resist_acid_worn_bit+
X`09`09`09`09`09`09resist_cold_worn_bit);
X`09`09`09`09  p1 := -5;
X`09`09`09`09  cost := 120000;
X`09`09`09`09  name := name + ' of Trollkind';
X`09`09`09`09  damage := '3d4';
X`09`09`09`09end
X`09`09`09   else`20
X`09`09`09     begin
X`09`09`09       wpn_type := randint(100);
X`09`09`09         if (wpn_type < 61) then
X`09`09`09`09   Magic_sword(x)
X`09`09`09         else if (wpn_type < 81) then
X`09`09`09`09   Slaying_sword(x)
+-+-+-+-+-+-+-+-  END  OF PART 45 +-+-+-+-+-+-+-+-
