rendered paste body-- SNES Madou Monogatari Level-up Simulatorrequire("bit")function madouRNG() return{seed = 0;init = function(rng, rs) rng.seed = math.floor(rs)end;get = function(rng, range) -- This multiplier returns a wrong result when the true result exceeds 255. local madouRNGMul = function(a, b) local a1a02, a1a04 = 0, 0 local a1a06 = a -- 0000h...ffffh local a1a08 = b * 0x100 -- b = 00h...ffh for x = 1, 8 do a1a02 = bit.band(bit.lshift(a1a02, 1), 0xffff) a1a04 = bit.band(bit.lshift(a1a04, 1), 0xffff) + bit.rshift(a1a04, 15) local C = bit.band(a1a08, 0x8000) ~= 0 a1a08 = bit.band(bit.lshift(a1a08, 1), 0xffff) if C then a1a02 = a1a02 + a1a06 if a1a02 > 0xffff then a1a04 = a1a04 + 1 end a1a02 = bit.band(a1a02, 0xffff) end end return bit.rshift(a1a04, 16) + a1a02 end rng.seed = rng.seed * 5 + 1 + bit.band(bit.rshift(rng.seed, 14), 1) return bit.band(bit.rshift(madouRNGMul(math.floor(range), bit.band(rng.seed, 0xff)), 8), 0xffff)end;getLua = function(rng, ...) local arg = {...} if #arg == 0 then return rng:get(256) * (1.0/255.0) elseif #arg == 1 then local u = math.floor(arg[1]) if 1 <= u then return rng:get(u)+1 else error("bad argument #1 to 'getLua' (internal is empty)") end elseif #arg == 2 then local l, u = math.floor(arg[1]), math.floor(arg[2]) if l <= u then return rng:get(u-l+1)+l else error("bad argument #2 to 'getLua' (internal is empty)") end else error("wrong number of arguments") endend}end-- [ main routine ] -----------------------------------------------------------local RNG = madouRNG()if #arg >= 1 then RNG:init(tonumber(arg[1]))else RNG:init(tonumber(io.read()))endlocal hp = RNG:get(5) + 15local mp = RNG:get(2) + 4local pow = RNG:get(2) + 2local def = RNG:get(2) + 2local spd = RNG:get(2) + 2local a134d = RNG:get(2) + 2local a1351 = RNG:get(2) + 2local a1352 = RNG:get(2) + 2print(string.format([[ HP : +%-2d (15...19) MP : +%-2d (4...5) POW : +%-2d (2...3; max=120) DEF : +%-2d (2...3; max=120) SPD : +%-2d (2...3; max=120)134D : +%-2d (2...3; max=120)1351 : +%-2d (2...3; max=120)1352 : +%-2d (2...3; max=120)]], hp, mp, pow, def, spd, a134d, a1351, a1352))