X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_caveobject.c;h=cea246fafa57221ee772f9f7a48fbc9fac136b9e;hb=3cc39ea8d14723117f2d804a9f05c2290696d33c;hp=6d5ca42284c9dcd3d6208207a46fd274ace80d0e;hpb=93a37840d8ff4a84fc878f148e3abfeecb701821;p=rocksndiamonds.git diff --git a/src/game_bd/bd_caveobject.c b/src/game_bd/bd_caveobject.c index 6d5ca422..cea246fa 100644 --- a/src/game_bd/bd_caveobject.c +++ b/src/game_bd/bd_caveobject.c @@ -1488,6 +1488,9 @@ GdCave *gd_cave_new_rendered(const GdCave *data, const int level, const unsigned gd_cave_store_rc(cave, x, 0, cave->initial_border, NULL); gd_cave_store_rc(cave, x, cave->h - 1, cave->initial_border, NULL); } + + // store if random number generator needs correction for static random seed + cave->slime_correct_random = (data->level_rand[level] >= 0); } else { @@ -1496,6 +1499,18 @@ GdCave *gd_cave_new_rendered(const GdCave *data, const int level, const unsigned // initialize c64 predictable random for slime. // the values were taken from afl bd, see docs/internals.txt gd_cave_c64_random_set_seed(cave, 0, 0x1e); + + // correct random number generator if cave was rendered with static random seed + if (cave->slime_correct_random) + { + int i; + + // set static random seed used when rendering the cave + gd_cave_c64_random_set_seed(cave, 0, data->level_rand[level]); + + for (i = 0; i < cave->w * (cave->h - 2); i++) + gd_cave_c64_random(cave); + } } if (data->level_slime_seed_c64[level] != -1)