All pastes #1410099 Raw Edit

gocha

public lua v1 · immutable
#1410099 ·published 2009-05-02 04:08 UTC
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))