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 |