anchor.diff:    begin
       if (SB.Mana.Min > 0) then
       begin
  -      Value := Math.EnsureRange(Items.GetBonus(AItem, btMana)
  -        + Math.RandomRange(SB.Mana.Min, SB.Mana.Max + 1), 1, High(Byte));
  +      Value := Math.EnsureRange(Items.GetBonus(AItem, btMana) +
  +        Math.RandomRange(SB.Mana.Min, SB.Mana.Max + 1), 1, High(Byte));
         Items.SetBonus(AItem, btMana, Value);
       end;
  +  end;
  +
  +  procedure SetAtr(const ABType: TBonusType; const AMin, AMax: Byte);
  +  var
  +    Value: Byte;
  +  begin
  +    Value := Math.EnsureRange(Items.GetBonus(AItem, ABType) +
  +      Math.RandomRange(AMin, AMax + 1), 1, High(Byte));
  +    Items.SetBonus(AItem, ABType, Value);
     end;
   
   begin
  
positive.code:   begin
      if (SB.Life.Min > 0) then
      begin
        Value := Math.EnsureRange(Items.GetBonus(AItem, btLife)
          + Math.RandomRange(SB.Life.Min, SB.Life.Max + 1), 1, High(Byte));
        Items.SetBonus(AItem, btLife, Value);
      end;
    end;
  
negative.code:       end;
      // Strength
      of_Strength1 .. of_Strength7:
        SetAtr(btStr, SB.Strength.Min, SB.Strength.Max);
      // Dexterity
      of_Dexterity1 .. of_Dexterity7:
        SetAtr(btDex, SB.Dexterity.Min, SB.Dexterity.Max);
      // Willpower
      of_Willpower1 .. of_Willpower7:
        SetAtr(btWil, SB.Willpower.Min, SB.Willpower.Max);
      // Perception
      of_Perception1 .. of_Perception7:
        SetAtr(btPer, SB.Perception.Min, SB.Perception.Max);
      // Defense
      of_Defense1 .. of_Defense7:
        begin
  