Ok, thanks.
I have a few questions, just to figure things out.
Code:
  _items = 100;
  _chanceOfRare = 40;
  _chanceOfSuperRare = 10;
Is there a particular reason for the underscore, aside from to distinguish items from _items?

Code:
  items : array[1.._items] of string = ('name1','name2'...'namen');
  itemsWeight : array[1..items] of integer = (weight1, weight2...weightn);
I take it ('name1','name2'...'namen'); is a list of all possible items in the random selection?
And what exactly does the itemsWeight actually do? I understand that random(100)+1 picks a number randomly from 1-100 (atleast, thats what I think it does...) and then from there... I'm not positive.

However, would something like this work:

Code:
Const
_items = 100;
items = Array[1.._items] of String = ('Item1','Item2'...,'Item9');

begin
selection := items[random(_items)+1];
end.
As a very very simple way? I'm going to test this soon, just to see, and I'll post my results after. Thanks for your help, though.

EDIT:

My method comes up with a single answer, every time. In this case, it picks the halfway point and adds one. So I'll keep messing with it, and then I'll post results from there on. Also, the Array has to be under the Var section not the constants section.

Also, both your examples required modifications, the second one I couldn't get working, the first just returned a blank variable.