Option to set specific random seed for random number generator

pull/2187/head
elsid 6 years ago
parent f6da025f02
commit 33f6fb258d
No known key found for this signature in database
GPG Key ID: B845CB9FEE18AB40

@ -45,6 +45,7 @@
Feature #4730: Native animated containers support
Feature #4812: Support NiSwitchNode
Feature #4836: Daytime node switch
Feature #4887: Add openmw command option to set initial random seed
Task #4686: Upgrade media decoder to a more current FFmpeg API
0.45.0

@ -105,3 +105,4 @@ Command line options
--export-fonts [=arg(=1)] (=0) Export Morrowind .fnt fonts to PNG
image and XML file in current directory
--activate-dist arg (=-1) activation distance override
--random-seed arg (=<impl defined>) seed value for random number generator

@ -228,7 +228,6 @@ OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
, mNewGame (false)
, mCfgMgr(configurationManager)
{
Misc::Rng::init();
MWClass::registerClasses();
Uint32 flags = SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE|SDL_INIT_GAMECONTROLLER|SDL_INIT_JOYSTICK;
@ -653,6 +652,8 @@ void OMW::Engine::go()
Log(Debug::Info) << "OSG version: " << osgGetVersion();
Misc::Rng::init(mRandomSeed);
// Load settings
Settings::Manager settings;
std::string settingspath;
@ -821,3 +822,8 @@ void OMW::Engine::setSaveGameFile(const std::string &savegame)
{
mSaveGameFile = savegame;
}
void OMW::Engine::setRandomSeed(unsigned int seed)
{
mRandomSeed = seed;
}

@ -100,6 +100,7 @@ namespace OMW
bool mGrab;
bool mExportFonts;
unsigned int mRandomSeed;
Compiler::Extensions mExtensions;
Compiler::Context *mScriptContext;
@ -203,6 +204,8 @@ namespace OMW
/// Set the save game file to load after initialising the engine.
void setSaveGameFile(const std::string& savegame);
void setRandomSeed(unsigned int seed);
private:
Files::ConfigurationManager& mCfgMgr;
};

@ -3,6 +3,7 @@
#include <components/files/escape.hpp>
#include <components/fallback/validate.hpp>
#include <components/debug/debugging.hpp>
#include <components/misc/rng.hpp>
#include "engine.hpp"
@ -131,7 +132,12 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat
("export-fonts", bpo::value<bool>()->implicit_value(true)
->default_value(false), "Export Morrowind .fnt fonts to PNG image and XML file in current directory")
("activate-dist", bpo::value <int> ()->default_value (-1), "activation distance override");
("activate-dist", bpo::value <int> ()->default_value (-1), "activation distance override")
("random-seed", bpo::value <unsigned int> ()
->default_value(Misc::Rng::generateDefaultSeed()),
"seed value for random number generator")
;
bpo::parsed_options valid_opts = bpo::command_line_parser(argc, argv)
.options(desc).allow_unregistered().run();
@ -231,6 +237,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Files::Configurat
engine.setFallbackValues(variables["fallback"].as<FallbackMap>().mMap);
engine.setActivationDistanceOverride (variables["activate-dist"].as<int>());
engine.enableFontExport(variables["export-fonts"].as<bool>());
engine.setRandomSeed(variables["random-seed"].as<unsigned int>());
return true;
}

@ -8,9 +8,9 @@ namespace Misc
std::mt19937 Rng::generator = std::mt19937();
void Rng::init()
void Rng::init(unsigned int seed)
{
generator.seed(static_cast<unsigned int>(std::chrono::high_resolution_clock::now().time_since_epoch().count()));
generator.seed(seed);
}
float Rng::rollProbability()
@ -28,4 +28,8 @@ namespace Misc
return max > 0 ? std::uniform_int_distribution<int>(0, max - 1)(generator) : 0;
}
unsigned int Rng::generateDefaultSeed()
{
return static_cast<unsigned int>(std::chrono::high_resolution_clock::now().time_since_epoch().count());
}
}

@ -18,7 +18,7 @@ public:
static std::mt19937 generator;
/// seed the RNG
static void init();
static void init(unsigned int seed = generateDefaultSeed());
/// return value in range [0.0f, 1.0f) <- note open upper range.
static float rollProbability();
@ -31,6 +31,9 @@ public:
/// return value in range [0, 99]
static int roll0to99() { return rollDice(100); }
/// returns default seed for RNG
static unsigned int generateDefaultSeed();
};
}

Loading…
Cancel
Save