Math.noise is easy way to make world generation, draws curved lines and repeats by map size and coordinates like this:

Let’s start:

Make script in Workspace

```
math.noise(x, y, z)
```

Ok we have XYZ coordinates, now we need Seed number.

```
local seed = math.random(1,999999) --Random seed that helps draw of Curved Lines.
math.noise(x, y, seed)
```

Now we have Seed number, but we need size of map and XY coordinates, map size.

```
local seed = math.random(1,999999) --Random seed that helps draw of Curved Lines.
local map_size = 50 --Repeats Curve Lines by XY coords.
for x = 0, map_size do
for y = 0, map_size do
local h = math.noise(x, y, seed)
end
end
```

Good, now we need Height, and terrain Smooth.

```
local smooth = 50 --How smooth will be Curved Lines.
local seed = math.random(1,999999) --Random seed that helps draw of Curved Lines.
local height = 50 --Max height of Curved Lines.
local map_size = 50 --Repeats Curve Lines by XY coords.
for x = 0, map_size do
for y = 0, map_size do
local h = math.noise(x / smooth, y / smooth, seed) * height
end
end
```

And to finish this world generation we will make terrain parts and part size.

```
local size = 2 --Size of part.
local smooth = 50 --How smooth will be Curved Lines.
local seed = math.random(1,999999) --Random seed that helps draw of Curved Lines.
local height = 50 --Max height of Curved Lines.
local map_size = 50 --Repeats Curve Lines by XY coords.
for x = 0, map_size do
for y = 0, map_size do
local h = math.noise(x / smooth, y / smooth, seed) * height
local p = Instance.new("Part")
p.Position = Vector3.new(x * size, h, y * size)
p.Anchored = true
p.Size = Vector3.new(size, size, size)
p.Parent = game.Workspace
end
end
```

And start the place, WOW we made it: