Bird, I don't think using a random operator with a uniform distribution is the best idea for battle sims, a normal distribution would much better show standard outcomes and million-to-one shots succeeding

.
Rebuild it and post something for us to look at. I am open to changing it.
Try the following (I can't test them right now, but I am willing to bet they'll work; if they don't tell me what the stuff says is wrong):
[pre]Function Dice(number, side)
Dim counter As Integer = 0
Dim thing As Integer = 0
Do Until counter = number
thing = thing + Cint((StaticRand() * side) + 1)
counter = counter + 1
Loop
Dice = temp
End Function[/pre]
Or, for something a bit more elegant (though I'm less sure if it will work, I dunno if VB does recursion):
[pre]Function Dice(number, side, thing)
thing = thing + Cint((StaticRand() * side) + 1)
if number = 1 Then return thing
return Dice(number - 1, side, thing)
End Function[/pre]
Both of these requires the previously-written StaticRand() function around, though you could use Rnd with the same problems as before. BTW, I'm not sure how to call functions in VB; if neither of those work, try removing the "()" from "StaticRand()" in the code.
To get a nice, "centered", random number, just use more "dice". 3d6 is nice a value from 3-18, though if you want something from 0.01-1.00 you could do...
=(Dice(X,100)/X)*0.01, where X is any value from 2 to infinity (the higher the value, the closer to 50 the average random number will be).
Of course, you could do another function, to make things less clunky, like so:
[pre]Function BANANABONANZA(PIRATE)
BANANABONANZA = (Dice(PIRATE, 100)/PIRATE) * 0.01
End Function[/pre]
So you only have to call BANANABONANZA(5) if you want (Dice(5, 100)/5) * 0.01; in fact, you can remove PIRATE if you're comfortable with a number already, so if you like five then you could just call BANANABONANZA() every time to get Dice(5, 100)/5.
Oh, if you're going to use the second code you have do "=Dice(3, 6, 0)" (for 3d6, for example), with that zero sticking out the end every time. Yeah it's ugly, though when I said more elegant I meant the code, not the calling.
---
Oh, I forgot how StaticRand() worked. If what I posted above is to work as intended, then you StaticRand() will have to return a value between 0 and 1... If it does, then we be happy, aye?
---
EDIT: You know what, I hate Object-Oriented Programming for making me think in "real-world" terms, as evidenced by this "dice" shenanigans. The best ways (at least this is what I think; I'm a nubcake) to implement BANANABONANZA, even without Dice(), are:
[pre]Function BANANABONANZA(PARROT)
Dim thing as Double = 0
Dim counter as Integer = 0
Do Until counter = PARROT
thing = thing + StaticRand()
PARROT = PARROT + 1
Loop
BANANABONANZA = thing/PARROT
End Function[/pre]
OR
[pre]Function BANANABONANZA(PARROT, ZIMBABWE)
ZIMBABWE = ZIMBABWE + StaticRand()
if PARROT = 1 Then return ZIMBABWE
return BANANABONANZA(PARROT - 1, ZIMBABWE)
End Function[/pre]
... with ZIMBABWE being started off as 0 every time as thing was in the second Dice() code.