Browse Source

love.math.setRandomSeed now calls random() a couple times internally, to make similar seeds give less similar results when random() is called for the first time after setRandomSeed.

Alex Szpakowski 11 years ago
parent
commit
4ea18d8bbc
3 changed files with 5 additions and 4 deletions
  1. 5 0
      src/modules/math/RandomGenerator.cpp
  2. 0 1
      src/scripts/boot.lua
  3. 0 3
      src/scripts/boot.lua.h

+ 5 - 0
src/modules/math/RandomGenerator.cpp

@@ -81,6 +81,11 @@ void RandomGenerator::setSeed(RandomGenerator::Seed newseed)
 
 	seed = newseed;
 	rng_state = seed;
+
+	// Xorshift's first couple results after seeding will be similar to results
+	// from very similar seeds, so we immediately discard them here.
+	for (int i = 0; i < 2; i++)
+		rand();
 }
 
 RandomGenerator::Seed RandomGenerator::getSeed() const

+ 0 - 1
src/scripts/boot.lua

@@ -468,7 +468,6 @@ function love.run()
 
 	if love.math then
 		love.math.setRandomSeed(os.time())
-		for i=1,3 do love.math.random() end
 	end
 
 	if love.event then

+ 0 - 3
src/scripts/boot.lua.h

@@ -836,9 +836,6 @@ const unsigned char boot_lua[] =
 	0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
 	0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x65, 0x74, 0x52, 0x61, 0x6e, 
 	0x64, 0x6f, 0x6d, 0x53, 0x65, 0x65, 0x64, 0x28, 0x6f, 0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
-	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c, 0x33, 0x20, 0x64, 0x6f, 0x20, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x20, 0x65, 0x6e, 
-	0x64, 0x0a,
 	0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 
 	0x6e, 0x0a,