Here's the code I used to generate the rolls. It's a big shorter and easier to read than the code I got from the site. I took out the stuff that wasn't needed and unuglified it (then I replaced i with ii throughout because the forum thinks that an 'i' in square brackets means I want to switch to italics):
function multiply(n1, n2) {
var sum = 0;
for (var i = 0; i < 32; ++i) if ((n1 >>> i) & 1) sum += (n2 << i);
return sum;
}
function roll(server_seed, client_seed) {
var ii, j, k;
mt[0] = 19650218;
for (ii = 1; ii < N; ii++) mt[ii] = multiply(1812433253, mt[ii - 1] ^ (mt[ii - 1] >>> 30)) + ii;
for (ii = 1, j = 0, k = N; k; k--) {
mt[ii] = (mt[ii] ^ multiply(mt[ii - 1] ^ (mt[ii - 1] >>> 30), 1664525)) + (j%2 ? client_seed : server_seed) + j%2;
if (++j, ++ii >= N) mt[0] = mt[N - (ii = 1)];
}
for (k = N - 1; k; k--) {
mt[ii] = (mt[ii] ^ multiply(mt[ii - 1] ^ (mt[ii - 1] >>> 30), 1566083941)) - ii;
if (++ii >= N) mt[0] = mt[N - (ii = 1)];
}
mt[0] = UPPER_MASK;
for (ii = 0; ii < N - M; ii++) mt[ii] = mt[ii + M] ^ (((mt[ii] & UPPER_MASK) | (mt[ii + 1] & LOWER_MASK)) >>> 1) ^ MATRIX_A * (mt[ii + 1] & 1);
for (;ii < N - 1; ii++) mt[ii] = mt[ii + (M - N)] ^ (mt[ii] & UPPER_MASK) | (mt[ii + 1] & LOWER_MASK) >>> 1 ^ MATRIX_A * (mt[ii + 1] & 1);
return (k = mt[0], k ^= k >>> 11, k ^= k << 7 & 0x9d2c5680, k ^= k << 15 & 0xefc60000, (k ^ k >>> 18) + 10001 * 0xfffff)%10001 / 100;
}
I verified my rolls like this:
roll(-1734677756, 439284), // 42.14
roll( 1381382730, 400138), // 42.06
roll( 210996502, 043923), // 47.93
roll( -749482183, 932860), // 70.01
roll( 838855046, 694872), // 76.10
roll(-1969168664, 544456), // 91.38
roll( 750895370, 139452), // 98.59
roll( 484402262, 456027), // 30.50
roll( 1799451977, 296354), // 32.54
roll(-1319575640, 658432), // 35.03
roll( -455200602, 934854)); // 68.39
Edit: here it is in a compact 10 lines of ugly code:
function multiply(n1, n2) {var sum = 0; for (var i = 0; i < 32; ++i) if ((n1 >>> i) & 1) sum += (n2 << i); return sum; }
function roll(server_seed, client_seed) { var i, j, k; mt[0] = 19650218;
for (i = 1; i < N; i++) mt[i] = multiply(1812433253, mt[i - 1] ^ (mt[i - 1] >>> 30)) + i;
for (i = 1, j = 0, k = N; k; k--) { mt[i] = (mt[i] ^ multiply(mt[i - 1] ^ (mt[i - 1] >>> 30), 1664525)) + (j%2 ? client_seed : server_seed) + j%2;
if (++j, ++i >= N) mt[0] = mt[N - (i = 1)]; }
for (k = N - 1; k; k--) { mt[i] = (mt[i] ^ multiply(mt[i - 1] ^ (mt[i - 1] >>> 30), 1566083941)) - i; if (++i >= N) mt[0] = mt[N - (i = 1)]; }
mt[0] = UPPER_MASK; for (i = 0; i < N - M; i++) mt[i] = mt[i + M] ^ (((mt[i] & UPPER_MASK) | (mt[i + 1] & LOWER_MASK)) >>> 1) ^ MATRIX_A * (mt[i + 1] & 1);
for (;i < N - 1; i++) mt[i] = mt[i + (M - N)] ^ (mt[i] & UPPER_MASK) | (mt[i + 1] & LOWER_MASK) >>> 1 ^ MATRIX_A * (mt[i + 1] & 1);
return (k = mt[0], k ^= k >>> 11, k ^= k << 7 & 0x9d2c5680, k ^= k << 15 & 0xefc60000, (k ^ k >>> 18) + 10001 * 0xfffff)%10001 / 100; }
Copy/paste those 10 lines into the console (hit F12), then run:
to see what that server seed and client seed combination should give you.