I'm working on building a D&D styled battle system, and i need to know how to call random numbers from a specific range. for example, to hit with an attack, the basic formula goes like this:
if d20 + Actor strength mod + BAB > target AC
Hit
Else
Miss
I know this isn't proper code, but i'm still working on it. anyways, where it says d20, i need it to call a random number from 1-20. i'll add Critical functionality later, but for now, this is it.
If you had read the RPGm XP help manual you would have known that rand(n) function can do exactly what you want. Well almost.
And VVulfy, that is a little too much computational overhead for my tastes (and I've never seen a die numbered 0 to sides-1). I'd do it like this:
Code:
module Roll
#--------------------------------------------------------------------------
# d - simulates a dice roll (num: 1 to sides)
# *sides : how many sides the dice has
#---------------------------------------------------------------------------
def d(sides)
return rand(sides)+1
end
end
Then rolls are just:
Code:
strength_roll = Roll.d(20)
Given that he requested one for a Dungeons and Dragons styled system, he would be more familiar with 4sided dice, 6 siders, 8siders and so forth. Hence, my version was designed to use method names that replicated the AD&D dice rolls, and include the number of dice at the same time. The call of ...
Code:
strength_roll = Dice.dice_roll(6, 3)
...would match that of the
Dice.d6(3). It rolls a six-sided die 3 times. But the Dice.d6 command (and others included) are meant to make it easier to use. I went with an easy-to-use gamer mentality for d4, d6, d8, d10, d12 and d20 rolls.
And call it an old-school methodology that I grew up with that reinitialized values ( the
result = 0 ) as well as a mentality to include failsafe routines.
I personally think
Code:
thing = Roll.d(20) + Roll.d(20)
makes more sense. It's self-documenting.
Plus, no matter what way you do it, it is still 'rand(n)+1' and not 'rand(n)' to get a dice roll. For example, rand(6) returns a number from 0-5. rand(6)+1 returns a number from 1-6 as required by dice.
Oh, I see what you mean about rand +1. Um, I caught that at 1-ish (about when you posted. I changed it in the script to
Code:
result += rand(dice)+1
.... I guess about the time you posted.
And wouldn't that be
Code:
thing = Roll.d(20) + (Roll.d(20) +2
for two values of 1-20 added together?
With mine, it would be
Shorter over the long run.
Nope! Just
Code:
thing = Roll.d(20) + Roll.d(20)
Because I defined d to be a random number from 1 to n.
Either way works.
Oooh. Guess I mis-saw yours just as you musta seen my pre-edit version (ironically when I was editing it?). :P