diff --git a/crafter/engine.py b/crafter/engine.py index 7932f26..4859be2 100644 --- a/crafter/engine.py +++ b/crafter/engine.py @@ -206,7 +206,10 @@ def _tint(self, canvas, color, amount): return (1 - amount) * canvas + amount * color def _noise(self, canvas, amount, stddev): - noise = self._world.random.uniform(32, 127, canvas.shape[:2])[..., None] + state = self._world.random.get_state() + random = np.random.RandomState() + random.set_state(state) + noise = random.uniform(32, 127, canvas.shape[:2])[..., None] mask = amount * self._vignette(canvas.shape, stddev)[..., None] return (1 - mask) * canvas + mask * noise diff --git a/crafter/env.py b/crafter/env.py index e0d8e7b..8105575 100644 --- a/crafter/env.py +++ b/crafter/env.py @@ -160,6 +160,7 @@ def _balance_object( xmin, xmax, ymin, ymax = chunk random = self._world.random creatures = [obj for obj in objs if isinstance(obj, cls)] + creatures.sort(key=(lambda x: tuple(x.pos))) mask = self._world.mask(*chunk, material) target_min, target_max = target_fn(len(creatures), mask.sum()) if len(creatures) < int(target_min) and random.uniform() < spawn_prob: