View difference between Paste ID: 2V4r8uce and NhyGStbS
SHOW: | | - or go back to the newest paste.
1
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2
-- @CloneTrooper1019, 2015 , Shyvha , 2017
3
-- Infinite Smooth Canyon Generator :3
4
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5
-- CONFIGURATION:
6
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7
 
8
baseHeight = 10
9
-- ^ The main height factor for the terrain.
10
 
11-
mountainHeight = 12
11+
mountainHeight = 5
12
-- ^ How tall should mountains be relative to the baseHeight of the terrain
13
 
14-
mountainMaterialWeight = 0.4
14+
mountainMaterialWeight = 0
15
-- ^ The chance that a mountain terrain chunk will generate using slate rather than rock
16
--    Should be a number between 0 and 1
17
--    0 = only rock, 1 = only slate, 0.5 = half n half
18-
canyonMaterialDensity = 0.1
18+
canyonMaterialDensity = 0
19
-- ^ The limestone rarity
20
-- 0 = No Limestone at all , 1 = Only limestone (NOT RECOMMANDED) , 0.2 = small bumps (Realist)
21
-- Note that limestone is not very different from sand, but it adds some realism
22-
chunkScale = 4
22+
chunkScale = 2
23
-- ^ The grid scale for terrain generation.
24
 
25-
renderDist = 90
25+
renderDist = 50
26
-- ^ The length/width of chunks in voxels that should be around the player at all times
27
 
28-
xScale = 30
28+
xScale = 10
29
-- ^ How much we should strech the X scale of the generation noise
30
 
31-
zScale = 30
31+
zScale = 20
32
-- ^ How much we should strech the Z scale of the generation noise
33
 
34-
waterLevel = -0.9
34+
waterLevel = 0
35
-- ^ Determines if we should generate ponds if the height level goes below this
36
--    Should be a number between -1 and 1
37
--    -1 = no water, 0 = all grass levels are filled with water, 1 = The entire map is flooded with water (Except for tall mountains)
38
 
39
seed = math.random()
40
-- ^ Seed for determining the height map of the terrain.
41
--    By default its random.
42
 
43
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44
 
45
local chunks = {}
46
 
47
function chunkExists(chunkX,chunkZ)
48
        if not chunks[chunkX] then
49
                chunks[chunkX] = {}
50
        end
51
        return chunks[chunkX][chunkZ]
52
end
53
 
54
function fillSmoothBlock(x,z,begY,endY,material)
55
        local location = CFrame.new(x*4+2, (begY+endY)*4/2, z*4+2)
56
        local fill = Vector3.new(4, (endY-begY)*4, 4)
57
        workspace.Terrain:FillBlock(location,fill,material)
58
end
59
 
60
function mountLayer(x,heightY,z,material)
61
        -- Fill in Lakes/Ponds
62
        local waterFill = baseHeight * waterLevel
63
        if heightY < waterFill then
64
                material = Enum.Material.Sand -- Make the material sand.
65
                fillSmoothBlock(x,z,heightY-2,waterFill,Enum.Material.Water) -- Fill some water in.
66
        end
67
        -- Fill in the main terrain.
68
        fillSmoothBlock(x,z,-baseHeight,heightY,material)
69
end
70
 
71
function makeChunk(chunkX,chunkZ)
72
        local rootPos = Vector3.new(chunkX*chunkScale,0,chunkZ*chunkScale)
73
        chunks[chunkX][chunkZ] = true -- Acknowledge the chunk's existance.
74
        for x = 0,chunkScale-1 do
75
                for z = 0,chunkScale-1 do
76
                        local cx = (chunkX*chunkScale) + x
77
                        local cz = (chunkZ*chunkScale) + z
78
                        local noise = math.noise(seed,cx/xScale,cz/zScale)
79
                        local isMountain = (noise > 0)
80
                        local material,materialScale do
81
                                if not isMountain then
82
                                        material = Enum.Material.Sand
83
                                        materialScale = 1
84
                                else
85
                                       	materialScale = mountainHeight
86
                                        if math.random() > mountainMaterialWeight then
87
                                                material = Enum.Material.Sandstone
88
                                        else
89
											if math.random() > canyonMaterialDensity then
90
                                                material = Enum.Material.Basalt
91
											else
92
												material = Enum.Material.Rock
93
											end
94
                                        end
95
                                end
96
                        end
97
                        local cy = noise*baseHeight*materialScale
98
                        mountLayer(cx,cy,cz,material)
99
                end
100
        end
101
end
102
 
103
function doAreaFill(location)
104
        local chunkX,chunkZ = math.floor(location.X/4/chunkScale),math.floor(location.Z/4/chunkScale)
105
        local range = math.max(1,renderDist/chunkScale)
106
        for x = -range,range do
107
                for z = -range,range do
108
                        local cx,cz = chunkX + x,chunkZ + z
109
                        if not chunkExists(cx,cz) then
110
                                makeChunk(cx,cz)
111
                        end
112
                end
113
        end    
114
end
115
 
116
while true do
117
        for _,v in pairs(game.Players:GetPlayers()) do
118
                spawn(function ()
119
                        local char = v.Character
120
                        if char then
121
                                local torso = char:findFirstChild("Torso")
122
                                if torso then
123
                                        doAreaFill(torso.Position)
124
                                end
125
                        end
126
                end)
127
        end
128
        wait(1)
129
end
130
 
131
---------------------------------------------------------------------------------------------------------------------------------------
132
133
--Thanks for CloneTrooper1019 for the main script
134
--I scripted the sand to be up there.
135
--WIP