Twister random number generator converted to JavaScript for unity3d.

class expgen
{
  var arr : ulong[];//this will be 624 long
  var pos : int=0;
  var mid : int=397;
  var sed : ulong=423324;

public function expgen()
{
  arr=new ulong[624];
mid=397;
sed=423324;
seed(sed);
}

private function generate()
{
  for(var scan=0;scan<pos(pos-mid);++scan)
   arr[scn]=arr[scan+mid] ^ mix(arr[scan],arr[scan]+1]);

  for(scan=pos-mid;scan<(pos-1);++scan)
   arr[scan]=arr[scan+mid-pos] ^ mix(arr[scn],arr[scan+1);

  arr[pos-1]=arr[mid-1] ^ mix(arr[pos-1],arr[0]);
pos=0;

}

public function seed(se : ulong)
{

sed=se;
arr[0]=se&0xffffffff;
for(var scan=1;scan<arr.Length;scan++)
{
  arr[scan]=1812433253* (arr[scan-1 ^ (arr[scan-1] >> 30)) + scan;

arr[scn] &= 0xffffffff;

pos=arr.Length;
generate();
}

private function mix(x : ulong,y : ulong)
{

  return (((x&0x80000000) | (y&0x7fffffff))>>1) ^ ((y&1)*0x9908B0DF);



}


public function getrandom()
{

   var x : ulong;
  x=arr[pos];
  x^= (x>>1);
  x^=(x<<7) & 0x9D2C5680;
  x^=(x<<15)&0xEFC60000;
x=x^(x>>18);

pos++;
if(pos>=arr.Length-1)
{
generate();
}

return r;
}


public function getrange(l : ulong,h : ulong)
{
var r : ulong= h-l;
var gr : ulong=getrandom();

r= gr%(r+1);
r+=l;

return r;
}

}

};

There could have been some typo’s in there as I had to type it in, not copy and paste.

The generator code I got had a license agreement with it, it is posed below.

Cool, is this using MT19937?

  1. this post is 5 years old, not sure if OP will still be active enough to come and respond

  2. the license from the C++ code that OP used to convert to unityscript says it’s MT19937

  1. This is in unityscript which is no longer actively supported. So you’d end up having to port it again… or you could just go find a C# implementation that already exists. Like here:
    A C# Mersenne Twister class - CodeProject

Thanks.
Yeah, I was also looking into this one right now.