reseed during level change to prevent deduction of rng state
For platforms that read from the system's random number generator, reseed during level change, before the map of a new level is created and after level creation has finished.
This commit is contained in:
1
src/do.c
1
src/do.c
@@ -1420,6 +1420,7 @@ boolean at_stairs, falling, portal;
|
||||
/* we'll reach here if running in wizard mode */
|
||||
error("Cannot continue this game.");
|
||||
}
|
||||
reseed_random();
|
||||
minit(); /* ZEROCOMP */
|
||||
getlev(fd, hackpid, new_ledger, FALSE);
|
||||
(void) nhclose(fd);
|
||||
|
||||
@@ -917,6 +917,17 @@ init_random()
|
||||
set_random(seed);
|
||||
}
|
||||
|
||||
/* Reshuffles the random number generator. */
|
||||
void
|
||||
reseed_random()
|
||||
{
|
||||
/* only reseed if we are certain that the seed generation is unguessable
|
||||
* by the players. */
|
||||
#ifdef DEV_RANDOM
|
||||
init_random();
|
||||
#endif
|
||||
}
|
||||
|
||||
time_t
|
||||
getnow()
|
||||
{
|
||||
|
||||
@@ -982,6 +982,8 @@ mklev()
|
||||
struct mkroom *croom;
|
||||
int ridx;
|
||||
|
||||
reseed_random();
|
||||
|
||||
init_mapseen(&u.uz);
|
||||
if (getbones())
|
||||
return;
|
||||
@@ -1009,6 +1011,8 @@ mklev()
|
||||
entered; rooms[].orig_rtype always retains original rtype value */
|
||||
for (ridx = 0; ridx < SIZE(rooms); ridx++)
|
||||
rooms[ridx].orig_rtype = rooms[ridx].rtype;
|
||||
|
||||
reseed_random();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user