Files
nethack/dat/nhlib.lua
copperwater c4bb3c904f Implement dice and percent as global lua functions
Intended to simplify many of the math.random calls currently in use, and
make them more semantic and thus more readable.

The dice function d() takes either a two-argument form which is the same
as in the C source (number of dice, faces per die) or a one-argument
form that rolls a single die.

The percent(N) function returns true N% of the time.
2020-04-06 19:43:56 +03:00

44 lines
988 B
Lua

-- compatibility shim
math.random = function(...)
local arg = {...};
if (#arg == 1) then
return 1 + nh.rn2(arg[1]);
elseif (#arg == 2) then
return nh.random(arg[1], arg[2] + 1 - arg[1]);
else
-- we don't support reals
error("NetHack math.random requires at least one parameter");
end
end
function shuffle(list)
for i = #list, 2, -1 do
local j = math.random(i)
list[i], list[j] = list[j], list[i]
end
end
align = { "law", "neutral", "chaos" };
shuffle(align);
-- d(2,6) = 2d6
-- d(20) = 1d20 (single argument = implicit 1 die)
function d(dice, faces)
if (faces == nil) then
-- 1-arg form: argument "dice" is actually the number of faces
return math.random(1, dice)
else
local sum = 0
for i=1,dice do
sum = sum + math.random(1, faces)
end
return sum
end
end
-- percent(20) returns true 20% of the time
function percent(threshold)
return math.random(0,99) < threshold
end