From cdf4c26be7296a22565a36556b508849c850120b Mon Sep 17 00:00:00 2001 From: Acrimon Date: Tue, 6 Aug 2019 09:55:43 +0200 Subject: [PATCH] Rewrite diffusion function. Now has potential for a full avalanche. --- world/src/util/seed_expan.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/world/src/util/seed_expan.rs b/world/src/util/seed_expan.rs index ecee48e8d5..899c2d435e 100644 --- a/world/src/util/seed_expan.rs +++ b/world/src/util/seed_expan.rs @@ -1,8 +1,12 @@ /// Simple non-cryptographic diffusion function. pub fn diffuse(mut x: u32) -> u32 { - x ^= 2281701376; - x = x.rotate_left(7); - x.wrapping_mul(0x811c9dc5) + x = x.wrapping_add(0x7ed55d16).wrapping_add(x << 12); + x = (x ^ 0xc761c23c) ^ (x >> 19); + x = x.wrapping_add(0x165667b1).wrapping_add(x << 5); + x = x.wrapping_add(0xd3a2646c) ^ (x << 9); + x = x.wrapping_add(0xfd7046c5).wrapping_add(x << 3); + x = (x ^ 0xb55a4f09) ^ (x >> 16); + x } /// Expand a 32 bit seed into a 32 byte RNG state.