I have a terrain generator (That I got from the devhub), And allowed it to change the heightmap (So there can be mountains, then there will be small hills), But when you spawn you get something like this:
But everything else is fine:
Code
local Players = game:GetService("Players")
------------------------------------------------------------------------------------------------------------------------------------------------
local BASE_HEIGHT = 5 -- The main height factor for the terrain.
local CHUNK_SCALE = 1 -- The grid scale for terrain generation. Should be kept relatively low if used in real-time.
local RENDER_DISTANCE = 25 -- The length/width of chunks in voxels that should be around the player at all times
local X_SCALE = 90 / 4 -- How much we should strech the X scale of the generation noise
local Z_SCALE = 90 / 4 -- How much we should strech the Z scale of the generation noise
local GENERATION_SEED = math.random() -- Seed for determining the main height map of the terrain.
local BIOME_SIZE = 100
local i = 0
local MAX_BASE_HEIGHT = 20
local MIN_BASE_HEIGHT = 5
------------------------------------------------------------------------------------------------------------------------------------------------
local chunks = {}
local function ChangeScaleHeight()
local Seed = math.randomseed(GENERATION_SEED)
local Chance = math.random(-1, 1)
if Chance > 0 and BASE_HEIGHT + 1 < MAX_BASE_HEIGHT and BASE_HEIGHT + 1 > MIN_BASE_HEIGHT then
BASE_HEIGHT = BASE_HEIGHT + 1
elseif Chance < 0 then
BASE_HEIGHT = BASE_HEIGHT - 1
elseif Chance == 0 and BASE_HEIGHT - 1 < MAX_BASE_HEIGHT and BASE_HEIGHT - 1 > MIN_BASE_HEIGHT then
BASE_HEIGHT = BASE_HEIGHT
end
end
local function chunkExists(chunkX, chunkZ)
if not chunks[chunkX] then
chunks[chunkX] = {}
end
return chunks[chunkX][chunkZ]
end
local function mountLayer(x, heightY, z, material)
local beginY = -BASE_HEIGHT
local endY = heightY
local cframe = CFrame.new(x * 4 + 2, (beginY + endY) * 4 / 2, z * 4 + 2)
local size = Vector3.new(4, (endY - beginY) * 4, 4)
local p = Instance.new("Part", workspace)
p.Anchored = true
p.CFrame = cframe
p.Size = Vector3.new(4, 4, 4)
p.Material = Enum.Material.Grass
p.BrickColor = BrickColor.new("Forest green")
end
local function makeChunk(chunkX, chunkZ)
local rootPosition = Vector3.new(chunkX * CHUNK_SCALE, 0, chunkZ * CHUNK_SCALE)
chunks[chunkX][chunkZ] = true -- Acknowledge the chunk's existance.
for x = 0, CHUNK_SCALE - 1 do
for z = 0, CHUNK_SCALE - 1 do
local cx = (chunkX * CHUNK_SCALE) + x
local cz = (chunkZ * CHUNK_SCALE) + z
local noise = math.noise(GENERATION_SEED, cx / X_SCALE, cz / Z_SCALE)
local cy = noise * BASE_HEIGHT
mountLayer(cx, cy, cz, Enum.Material.Grass)
end
end
end
local function checkSurroundings(location)
local chunkX, chunkZ = math.floor(location.X / 4 / CHUNK_SCALE), math.floor(location.Z / 4 / CHUNK_SCALE)
local range = math.max(1, RENDER_DISTANCE / CHUNK_SCALE)
for x = -range, range do
for z = -range, range do
local cx, cz = chunkX + x
local cz = chunkZ + z
if not chunkExists(cx, cz) then
makeChunk(cx, cz)
i = i + 1
if i == BIOME_SIZE then
i = 0
ChangeScaleHeight()
end
end
end
end
end
while true do
for _, player in pairs(Players:GetPlayers()) do
if player.Character then
local humanoidRootPart = player.Character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
checkSurroundings(humanoidRootPart.Position)
end
end
end
game:GetService("RunService").Heartbeat:Wait()
end
What is causing this, and how can I fix this?