diff --git a/data/mapgen.lua b/data/mapgen.lua index 40ba7a6..5b03d5c 100644 --- a/data/mapgen.lua +++ b/data/mapgen.lua @@ -43,7 +43,7 @@ local function generate_path () end local cx, cy = 1, 1 - local seed = get_random_seed() + local seed = get_random_seed(CURRENT_LEVEL) info("Map generation seed: " .. seed) randomseed(seed) local direction = 0 diff --git a/data/maproombuilder.lua b/data/maproombuilder.lua index 6a0f746..1ac3b1a 100644 --- a/data/maproombuilder.lua +++ b/data/maproombuilder.lua @@ -534,7 +534,7 @@ function module.load_textures(map) t_pit0 = add_texture(map, "Objects/Pit0.png") t_pit1 = add_texture(map, "Objects/Pit1.png") - local seed = get_random_seed(); + local seed = get_random_seed(CURRENT_LEVEL); info("Map room random seed: " .. seed) math.randomseed(seed) local xo = (random(3) - 1) * 112 diff --git a/src/map_lua.c b/src/map_lua.c index 82c85c7..688cbd5 100644 --- a/src/map_lua.c +++ b/src/map_lua.c @@ -470,7 +470,8 @@ l_read_file(lua_State *L) static int l_get_random_seed(lua_State *L) { - lua_pushnumber(L, get_random_seed()); + unsigned int level = (unsigned int) luaL_checkinteger(L, 1); + lua_pushnumber(L, get_random_map_seed(level)); return 1; } diff --git a/src/random.c b/src/random.c index c9d2431..bf7964e 100644 --- a/src/random.c +++ b/src/random.c @@ -23,14 +23,31 @@ #include "util.h" static unsigned int seed = 0; +static unsigned int map_seeds[20]; +static unsigned int runtime_seed = 0; + +static void +generate_random_seeds(void) +{ + // Use seed for generating map seeds + srand(seed); + info("Core random seed: %d", seed); + for (int i = 0; i < 20; ++i) { + map_seeds[i] = rand(); + } + + // Set a more random seed for runtime random + runtime_seed = (unsigned int) time(NULL); + srand(runtime_seed); + info("Runtime random seed: %d", runtime_seed); +} static void init_seed(void) { if (seed == 0) { seed = (unsigned int) time(NULL); - srand(seed); - info("Core random seed: %d", seed); + generate_random_seeds(); } } @@ -38,7 +55,7 @@ void set_random_seed(unsigned int s) { seed = s; - info("Core random seed: %d", seed); + generate_random_seeds(); } unsigned int @@ -48,6 +65,12 @@ get_random_seed(void) return seed; } +unsigned int +get_random_map_seed(unsigned int level) +{ + return map_seeds[level-1]; +} + unsigned int get_random(unsigned int max) { diff --git a/src/random.h b/src/random.h index 2e3587e..03a8a43 100644 --- a/src/random.h +++ b/src/random.h @@ -19,6 +19,9 @@ #ifndef RANDOM_H_ #define RANDOM_H_ +unsigned int +get_random_map_seed(unsigned int level); + unsigned int get_random_seed(void);