From 0504712346a7f7571fa9223fba1b9535d260bd1a Mon Sep 17 00:00:00 2001
From: Duane Robertson <duane@duanerobertson.com>
Date: Mon, 3 Apr 2017 01:44:02 -0500
Subject: [PATCH] Localize get_perlin_map data.

---
 mapgen.lua   | 12 ------------
 undergen.lua | 11 ++++++++++-
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/mapgen.lua b/mapgen.lua
index cb0d9f8..e0c88dc 100644
--- a/mapgen.lua
+++ b/mapgen.lua
@@ -4,8 +4,6 @@
 
 
 local DEBUG = false
-local max_depth = 31000
-local seed_noise = {offset = 0, scale = 32768, seed = 5202, spread = {x = 80, y = 80, z = 80}, octaves = 2, persist = 0.4, lacunarity = 2}
 
 
 -- This tables looks up nodes that aren't already stored.
@@ -42,16 +40,6 @@ local function generate(p_minp, p_maxp, seed)
 	local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
 	local csize = vector.add(vector.subtract(maxp, minp), 1)
 
-	-- use the same seed (based on perlin noise).
-	do
-		local seed = minetest.get_perlin(seed_noise):get2d({x=minp.x, y=minp.z})
-		if not (seed and type(seed) == 'number') then
-			return
-		end
-
-		math.randomseed(seed)
-	end
-
 	local write = false
 	if not underworlds_mod.underzones then
 		return
diff --git a/undergen.lua b/undergen.lua
index e1534d6..bef4213 100644
--- a/undergen.lua
+++ b/undergen.lua
@@ -8,6 +8,7 @@ local max_depth = 31000
 
 
 local terrain_noise = {offset = 15, scale = 10, seed = 3721, spread = {x = 40, y = 40, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
+local terrain_map
 
 
 underworlds_mod.undergen = function(minp, maxp, data, p2data, area, node, underzone)
@@ -19,7 +20,15 @@ underworlds_mod.undergen = function(minp, maxp, data, p2data, area, node, underz
 	local map_max = {x = csize.x, y = csize.y + 2, z = csize.z}
 	local map_min = {x = minp.x, y = minp.y - 1, z = minp.z}
 
-	local terrain = minetest.get_perlin_map(terrain_noise, {x=csize.x, y=csize.z}):get2dMap_flat({x=minp.x, y=minp.z})
+  if not terrain_map then
+    terrain_map = minetest.get_perlin_map(terrain_noise, {x=csize.x, y=csize.z})
+
+    if not terrain_map then
+      return
+    end
+  end
+
+	local terrain = terrain_map:get2dMap_flat({x=minp.x, y=minp.z})
 	if not terrain then
 		return
 	end
-- 
GitLab