How to make chunks not load on top of each other

I am trying to make a chunk loading system, but how to I make it so that the chunks avoid loading inside each other.

video of issue
robloxapp-20200907-1900083.wmv (208.5 KB)

script

local function plainsBiome()
	
	local chunkXSize = 48
	local chunkYSize = 48
	local chunkZSize = 48
	local seed = math.random(0,100000000)
	local noiseScale = 20
	local amplitude = 1
	local blockSize = 3
	
	for x = 0, chunkXSize do
		for y = 0, chunkYSize do
			for z = 0, chunkZSize do
				local xNoise = math.noise(y/noiseScale, z/noiseScale, seed) * amplitude
				local yNoise = math.noise(x/noiseScale, z/noiseScale, seed) * amplitude
				local zNoise = math.noise(x/noiseScale, y/noiseScale, seed) * amplitude
				
				local density = xNoise + yNoise + zNoise + y
				local densityX = xNoise + yNoise + zNoise + x
				local densityZ = xNoise + yNoise + zNoise + z
				if density < 10 and -density < 10 then
					local part = Instance.new("Part")
					part.Anchored = true
					part.Size = Vector3.new(blockSize, blockSize, blockSize)
					part.CFrame = CFrame.new(x * blockSize, y * blockSize, z * blockSize)
					if part.Position.Y < 50 then
						part.BrickColor = BrickColor.new("Forest green")
					end
					part.TopSurface = Enum.SurfaceType.Smooth
					part.BottomSurface = Enum.SurfaceType.Smooth
					part.Parent = workspace.Blocks
				end	
			end
		end
		wait()
	end
end


local function hillsBiome()
	
	local chunkXSize = 48
	local chunkYSize = 48
	local chunkZSize = 48
	local seed = math.random(0,100000000)
	local noiseScale = 15
	local amplitude = 8
	local blockSize = 3
	
	for x = 0, chunkXSize do
		for y = 0, chunkYSize do
			for z = 0, chunkZSize do
				local xNoise = math.noise(y/noiseScale, z/noiseScale, seed) * amplitude
				local yNoise = math.noise(x/noiseScale, z/noiseScale, seed) * amplitude
				local zNoise = math.noise(x/noiseScale, y/noiseScale, seed) * amplitude
				
				local density = xNoise + yNoise + zNoise + y
				local densityX = xNoise + yNoise + zNoise + x
				local densityZ = xNoise + yNoise + zNoise + z
				if density < 10 and -density < 10 then
					local part = Instance.new("Part")
					part.Anchored = true
					part.Size = Vector3.new(blockSize, blockSize, blockSize)
					part.CFrame = CFrame.new(x * blockSize, y * blockSize, z * blockSize)
					if part.Position.Y < 60 then
						part.BrickColor = BrickColor.new("Forest green")
					end
					part.TopSurface = Enum.SurfaceType.Smooth
					part.BottomSurface = Enum.SurfaceType.Smooth
					part.Parent = workspace.Blocks
				end	
			end
		end
		wait()
	end
end

wait(5)

plainsBiome()
hillsBiome()
1 Like

You’ll need to add an offset value for x and/or z in the part where you are creating the cframes.

part.CFrame = CFrame.new(x_offset + x * blockSize, y * blockSize, z_offset + z * blockSize)

Can maybe add something for y too if you need that. Could have a biome function return a region object or something (simple rect) that can be used by subsequent functions to figure out where the drawing needs to start.

2 Likes