mirror of
https://bitbucket.org/grumdrig/pq-web.git
synced 2026-09-29 08:44:00 -06:00
Switch to a better PRNG
This commit is contained in:
@@ -1,18 +1,104 @@
|
|||||||
// TODO These code bits don't really belong here, but this is the only shared bit of js
|
// TODO These code bits don't really belong here, but this is the only shared bit of js
|
||||||
|
|
||||||
var randseed = Math.floor(Math.random() * 0xFFFFFFFF);
|
|
||||||
|
|
||||||
function Random(n) {
|
// From http://baagoe.com/en/RandomMusings/javascript/
|
||||||
return Rand32Rough() % n;
|
// Johannes Baagøe <baagoe@baagoe.com>, 2010
|
||||||
|
function Mash() {
|
||||||
|
var n = 0xefc8249d;
|
||||||
|
|
||||||
|
var mash = function(data) {
|
||||||
|
data = data.toString();
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
n += data.charCodeAt(i);
|
||||||
|
var h = 0.02519603282416938 * n;
|
||||||
|
n = h >>> 0;
|
||||||
|
h -= n;
|
||||||
|
h *= n;
|
||||||
|
n = h >>> 0;
|
||||||
|
h -= n;
|
||||||
|
n += h * 0x100000000; // 2^32
|
||||||
|
}
|
||||||
|
return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
|
||||||
|
};
|
||||||
|
|
||||||
|
mash.version = 'Mash 0.9';
|
||||||
|
return mash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function Rand32Rough() {
|
// From http://baagoe.com/en/RandomMusings/javascript/
|
||||||
// http://www.merlyn.demon.co.uk/js-randm.htm#MR
|
function Alea() {
|
||||||
var T32 = 0x100000000;
|
return (function(args) {
|
||||||
var constant = 134775813;
|
// Johannes Baagøe <baagoe@baagoe.com>, 2010
|
||||||
var X = constant * randseed + 1;
|
var s0 = 0;
|
||||||
return (randseed = X % T32);
|
var s1 = 0;
|
||||||
|
var s2 = 0;
|
||||||
|
var c = 1;
|
||||||
|
|
||||||
|
if (args.length == 0) {
|
||||||
|
args = [+new Date];
|
||||||
|
}
|
||||||
|
var mash = Mash();
|
||||||
|
s0 = mash(' ');
|
||||||
|
s1 = mash(' ');
|
||||||
|
s2 = mash(' ');
|
||||||
|
|
||||||
|
for (var i = 0; i < args.length; i++) {
|
||||||
|
s0 -= mash(args[i]);
|
||||||
|
if (s0 < 0) {
|
||||||
|
s0 += 1;
|
||||||
|
}
|
||||||
|
s1 -= mash(args[i]);
|
||||||
|
if (s1 < 0) {
|
||||||
|
s1 += 1;
|
||||||
|
}
|
||||||
|
s2 -= mash(args[i]);
|
||||||
|
if (s2 < 0) {
|
||||||
|
s2 += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mash = null;
|
||||||
|
|
||||||
|
var random = function() {
|
||||||
|
var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32
|
||||||
|
s0 = s1;
|
||||||
|
s1 = s2;
|
||||||
|
return s2 = t - (c = t | 0);
|
||||||
|
};
|
||||||
|
random.uint32 = function() {
|
||||||
|
return random() * 0x100000000; // 2^32
|
||||||
|
};
|
||||||
|
random.fract53 = function() {
|
||||||
|
return random() +
|
||||||
|
(random() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
|
||||||
|
};
|
||||||
|
random.version = 'Alea 0.9';
|
||||||
|
random.args = args;
|
||||||
|
random.state = function (newstate) {
|
||||||
|
if (newstate) {
|
||||||
|
s0 = newstate[0];
|
||||||
|
s1 = newstate[1];
|
||||||
|
s2 = newstate[2];
|
||||||
|
c = newstate[3];
|
||||||
|
} else {
|
||||||
|
return [s0,s1,s2,c];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return random;
|
||||||
|
|
||||||
|
} (Array.prototype.slice.call(arguments)));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var seed = new Alea();
|
||||||
|
|
||||||
|
function Random(n) {
|
||||||
|
return seed.uint32() % n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function randseed(set) {
|
||||||
|
return seed.state(set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -21,12 +107,12 @@ function Pick(a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function GenerateName() {
|
var KParts = [
|
||||||
var KParts = [
|
'br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z'.split('|'),
|
||||||
'br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z',
|
'a|a|e|e|i|i|o|o|u|u|ae|ie|oo|ou'.split('|'),
|
||||||
'a|a|e|e|i|i|o|o|u|u|ae|ie|oo|ou',
|
'b|ck|d|g|k|m|n|p|t|v|x|z'.split('|')];
|
||||||
'b|ck|d|g|k|m|n|p|t|v|x|z'];
|
|
||||||
|
|
||||||
|
function GenerateName() {
|
||||||
var result = '';
|
var result = '';
|
||||||
for (var i = 0; i <= 5; ++i)
|
for (var i = 0; i <= 5; ++i)
|
||||||
result += Pick(KParts[i % 3]);
|
result += Pick(KParts[i % 3]);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ var stats = {"history":[]};
|
|||||||
function RollEm() {
|
function RollEm() {
|
||||||
var Total = $("#Total");
|
var Total = $("#Total");
|
||||||
var ReRoll = $("#ReRoll");
|
var ReRoll = $("#ReRoll");
|
||||||
stats.seed = randseed;
|
stats.seed = randseed();
|
||||||
stats.total =
|
stats.total =
|
||||||
Roll("STR") +
|
Roll("STR") +
|
||||||
Roll("CON") +
|
Roll("CON") +
|
||||||
@@ -79,7 +79,7 @@ $(document).ready(function () {
|
|||||||
|
|
||||||
|
|
||||||
function UnrollClick() {
|
function UnrollClick() {
|
||||||
randseed = stats.history.pop();
|
randseed(stats.history.pop());
|
||||||
$("#Unroll").attr("disabled", !stats.history.length);
|
$("#Unroll").attr("disabled", !stats.history.length);
|
||||||
RollEm();
|
RollEm();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user