SHOW:
|
|
- or go back to the newest paste.
1 | - | HeightVariation=2 --The Higher this number is the more "Hilly" the maps are going to get.(Measured in Studs) |
1 | + | HeightVariation=4.75 --The Higher this number is the more "Hilly" the maps are going to get.(Measured in Studs) |
2 | BiomeSize=420 --This is half the length/width of the Biome Squares | |
3 | - | PartsPerBiome=150 |
3 | + | PartsPerBiome=125 |
4 | TreesInForest=55 | |
5 | TreesInSavannah=3 | |
6 | MaxBlockSize=100 | |
7 | MinimumBlockSize=80 | |
8 | BiomeSquares=3 --Choose an integer 1-5, 5 will have 25 Biome squares, and 1 will have 1. | |
9 | ||
10 | ||
11 | game.Lighting.TimeOfDay = "12:00:00" | |
12 | function Swamp(x,z) | |
13 | local Colors = {"Bright green","Dark green", "Camo", "Earth green", "Br. yellowish green"} | |
14 | local f=Instance.new("Part") | |
15 | f.Anchored = true | |
16 | f.Name="Waka" | |
17 | f.Color = Color3.new(0, 0, 1) | |
18 | f.CFrame = CFrame.new(x, 7, z) | |
19 | f.Transparency = 0.4 | |
20 | f.CanCollide = false | |
21 | f.Size = Vector3.new(BiomeSize*2, 20, BiomeSize*2) | |
22 | f.Parent = game.Workspace | |
23 | for i=1,PartsPerBiome do | |
24 | local h = Instance.new("SpawnLocation") | |
25 | h.Position = Vector3.new(math.random(x-BiomeSize, x+BiomeSize), 1+math.random(-1*HeightVariation, HeightVariation), math.random(z-BiomeSize, z+BiomeSize)) | |
26 | h.Anchored = true | |
27 | h.Name = "Waka" | |
28 | h.BrickColor = BrickColor.new(Colors[math.random(1, #Colors)]) | |
29 | h.Size = Vector3.new(math.random(MinimumBlockSize,MaxBlockSize), math.random(4, 50), math.random(MinimumBlockSize, MaxBlockSize)) | |
30 | h:clone().Parent = game.Workspace | |
31 | wait(0.001) | |
32 | end | |
33 | end | |
34 | function Mount(x,z) | |
35 | local Colors = {"Medium stone grey", "Black", "Light stone grey"} | |
36 | local f=Instance.new("Part") | |
37 | f.Anchored = true | |
38 | f.Name="Waka" | |
39 | f.BrickColor = BrickColor.new("Medium stone grey") | |
40 | f.CFrame = CFrame.new(x, 7, z) | |
41 | f.Transparency = 0 | |
42 | f.CanCollide = true | |
43 | f.Size = Vector3.new(BiomeSize*2, 20, BiomeSize*2) | |
44 | f.Parent = game.Workspace | |
45 | for i=1,PartsPerBiome do | |
46 | local h = Instance.new("SpawnLocation") | |
47 | h.Position = Vector3.new(math.random(x-BiomeSize, x+BiomeSize), 17+math.random(-1*HeightVariation, HeightVariation), math.random(z-BiomeSize, z+BiomeSize)) | |
48 | h.Anchored = true | |
49 | h.Name = "Waka" | |
50 | h.BrickColor = BrickColor.new(Colors[math.random(1, #Colors)]) | |
51 | h.Size = Vector3.new(math.random(MinimumBlockSize,MaxBlockSize), math.random(4, 50), math.random(MinimumBlockSize, MaxBlockSize)) | |
52 | h:clone().Parent = game.Workspace | |
53 | wait(0.001) | |
54 | end | |
55 | end | |
56 | function Sand(x,z) | |
57 | local Colors = {"Cool yellow", "CGA brown", "Deep orange", "Pastel yellow"} | |
58 | local f=Instance.new("Part") | |
59 | f.Anchored = true | |
60 | f.Name="Waka" | |
61 | f.BrickColor = BrickColor.new("Deep orange") | |
62 | f.CFrame = CFrame.new(x, 7, z) | |
63 | f.Transparency = 0 | |
64 | f.CanCollide = true | |
65 | f.Size = Vector3.new(BiomeSize*2, 20, BiomeSize*2) | |
66 | f.Parent = game.Workspace | |
67 | for i=1,PartsPerBiome do | |
68 | local h = Instance.new("SpawnLocation") | |
69 | h.Position = Vector3.new(math.random(x-BiomeSize, x+BiomeSize), 17+math.random(-1*HeightVariation, HeightVariation), math.random(z-BiomeSize, z+BiomeSize)) | |
70 | h.Anchored = true | |
71 | h.Name = "Waka" | |
72 | h.BrickColor = BrickColor.new(Colors[math.random(1, #Colors)]) | |
73 | h.Size = Vector3.new(math.random(MinimumBlockSize,MaxBlockSize), math.random(4, 50), math.random(MinimumBlockSize, MaxBlockSize)) | |
74 | h:clone().Parent = game.Workspace | |
75 | wait(0.001) | |
76 | end | |
77 | end | |
78 | function Forest(x,z) | |
79 | local Colors = {"Bright green"} | |
80 | local f=Instance.new("Part") | |
81 | f.Anchored = true | |
82 | f.Name="Waka" | |
83 | f.BrickColor = BrickColor.new("Bright green") | |
84 | f.CFrame = CFrame.new(x, 7, z) | |
85 | f.Transparency = 0 | |
86 | f.CanCollide = true | |
87 | f.Size = Vector3.new(BiomeSize*2, 20, BiomeSize*2) | |
88 | f.Parent = game.Workspace | |
89 | for i=1,PartsPerBiome do | |
90 | local h = Instance.new("SpawnLocation") | |
91 | h.Position = Vector3.new(math.random(x-BiomeSize, x+BiomeSize), 17+math.random(-1*HeightVariation, HeightVariation), math.random(z-BiomeSize, z+BiomeSize)) | |
92 | h.Anchored = true | |
93 | h.Name = "Waka" | |
94 | h.BrickColor = BrickColor.new(Colors[math.random(1, #Colors)]) | |
95 | h.Size = Vector3.new(math.random(MinimumBlockSize,MaxBlockSize), math.random(4, 50), math.random(MinimumBlockSize, MaxBlockSize)) | |
96 | h:clone().Parent = game.Workspace | |
97 | wait(0.001) | |
98 | end | |
99 | local Base = Instance.new("Part") | |
100 | Base.Name = "Trunk" | |
101 | Base.formFactor = "Custom" | |
102 | Base.TopSurface = 0 | |
103 | Base.BottomSurface = 0 | |
104 | Base.Anchored = true | |
105 | Base.BrickColor = BrickColor.new("Reddish brown") | |
106 | local Leaves = Base:Clone() | |
107 | Leaves.Name = "Leaves" | |
108 | Leaves.CanCollide = false | |
109 | Leaves.BrickColor = BrickColor.new("Dark green") | |
110 | local leafmesh = Instance.new("SpecialMesh") | |
111 | leafmesh.MeshType = "FileMesh" | |
112 | leafmesh.MeshId = "http://www.roblox.com/asset/?id=1290033" | |
113 | leafmesh.TextureId = "http://www.roblox.com/asset/?id=2861779" | |
114 | leafmesh.Parent = Leaves | |
115 | Instance.new("CylinderMesh",Base) | |
116 | function dot(c1,c2) | |
117 | local m = CFrame.Angles(math.pi/2,0,0) | |
118 | return (c1*m).lookVector:Dot((c2*m).lookVector) | |
119 | end | |
120 | local leaf_mult = { | |
121 | Vector3.new(1.5,1.5,1.2); | |
122 | Vector3.new(1.5,1,1.5); | |
123 | Vector3.new(1.2,1.5,1.5); | |
124 | Vector3.new(1.5,1.5,1.5); | |
125 | } | |
126 | ||
127 | function Branch(base,c) | |
128 | if c <= 0 then | |
129 | local leaves = Leaves:Clone() | |
130 | local vol = base.Size.x+base.Size.y+base.Size.z | |
131 | leaves.Mesh.Scale = leaf_mult[math.random(1,#leaf_mult)]*math.random(vol/3*10,vol/3*12)/10 | |
132 | leaves.Size = leaves.Mesh.Scale*0.75 | |
133 | leaves.CFrame = base.CFrame * CFrame.new(0,base.Size.y/2,0) | |
134 | leaves.Parent = base.Parent | |
135 | else | |
136 | local pos = base.CFrame*CFrame.new(0,base.Size/2,0) | |
137 | local height = base.Size.y | |
138 | local width = base.Size.x | |
139 | local nb = math.random(2,2) | |
140 | local r = math.random(45,135) | |
141 | local da = math.random(20+55/c,40+40/c) | |
142 | local ba = math.random(-da/3,da/3) | |
143 | for i=0,nb-1 do | |
144 | local branch = base:Clone() | |
145 | branch.Name = "Branch" | |
146 | local h = height*math.random(95,115)/100 | |
147 | local new = branch.CFrame * CFrame.new(0,height/2,0) * CFrame.Angles(0,0,math.rad(ba)) | |
148 | new = new * CFrame.Angles(0,i*(math.pi*2/nb)+r,math.rad(da/2)) * CFrame.new(0,h/2,0) | |
149 | local w = dot(new,branch.CFrame)*width*0.9 | |
150 | ||
151 | branch.Size = Vector3.new(w,h,w) | |
152 | branch.CFrame = new | |
153 | branch.Parent = base.Parent | |
154 | ||
155 | Branch(branch,c-1) | |
156 | end | |
157 | end | |
158 | end | |
159 | ||
160 | ||
161 | function _G.Tree(location,complexity,width,height) | |
162 | local tree = Instance.new("Model") | |
163 | tree.Name = "Waka" | |
164 | tree.archivable = false | |
165 | tree.Parent = workspace | |
166 | local base = Base:Clone() | |
167 | base.Parent = tree | |
168 | base.Size = Vector3.new(width,height,width) | |
169 | -- move up by half its height, and rotate randomly | |
170 | base.CFrame = location * CFrame.new(0,height/2,0) * CFrame.Angles(0,math.rad(math.random(1,360)),0) | |
171 | -- start branching | |
172 | Branch(base,complexity) | |
173 | return tree | |
174 | end | |
175 | for i=1,TreesInForest do | |
176 | _G.Tree(CFrame.new(math.random(x-BiomeSize, x+BiomeSize), 17, math.random(z-BiomeSize, z+BiomeSize)),3,4,20) | |
177 | end | |
178 | end | |
179 | function Savannah(x,z) | |
180 | local Colors = {"Bright green"} | |
181 | local f=Instance.new("Part") | |
182 | f.Anchored = true | |
183 | f.Name="Waka" | |
184 | f.BrickColor = BrickColor.new("Bright green") | |
185 | f.CFrame = CFrame.new(x, 7, z) | |
186 | f.Transparency = 0 | |
187 | f.CanCollide = true | |
188 | f.Size = Vector3.new(BiomeSize*2, 20, BiomeSize*2) | |
189 | f.Parent = game.Workspace | |
190 | for i=1,PartsPerBiome do | |
191 | local h = Instance.new("SpawnLocation") | |
192 | h.Position = Vector3.new(math.random(x-BiomeSize, x+BiomeSize), 17+math.random(-1*HeightVariation, HeightVariation), math.random(z-BiomeSize, z+BiomeSize)) | |
193 | h.Anchored = true | |
194 | h.Name = "Waka" | |
195 | h.BrickColor = BrickColor.new(Colors[math.random(1, #Colors)]) | |
196 | h.Size = Vector3.new(math.random(MinimumBlockSize,MaxBlockSize), math.random(4, 50), math.random(MinimumBlockSize, MaxBlockSize)) | |
197 | h:clone().Parent = game.Workspace | |
198 | wait(0.001) | |
199 | end | |
200 | local Base = Instance.new("Part") | |
201 | Base.Name = "Trunk" | |
202 | Base.formFactor = "Custom" | |
203 | Base.TopSurface = 0 | |
204 | Base.BottomSurface = 0 | |
205 | Base.Anchored = true | |
206 | Base.BrickColor = BrickColor.new("Reddish brown") | |
207 | local Leaves = Base:Clone() | |
208 | Leaves.Name = "Leaves" | |
209 | Leaves.CanCollide = false | |
210 | Leaves.BrickColor = BrickColor.new("Dark green") | |
211 | local leafmesh = Instance.new("SpecialMesh") | |
212 | leafmesh.MeshType = "FileMesh" | |
213 | leafmesh.MeshId = "http://www.roblox.com/asset/?id=1290033" | |
214 | leafmesh.TextureId = "http://www.roblox.com/asset/?id=2861779" | |
215 | leafmesh.Parent = Leaves | |
216 | Instance.new("CylinderMesh",Base) | |
217 | function dot(c1,c2) | |
218 | local m = CFrame.Angles(math.pi/2,0,0) | |
219 | return (c1*m).lookVector:Dot((c2*m).lookVector) | |
220 | end | |
221 | local leaf_mult = { | |
222 | Vector3.new(1.5,1.5,1.2); | |
223 | Vector3.new(1.5,1,1.5); | |
224 | Vector3.new(1.2,1.5,1.5); | |
225 | Vector3.new(1.5,1.5,1.5); | |
226 | } | |
227 | ||
228 | function Branch(base,c) | |
229 | if c <= 0 then | |
230 | local leaves = Leaves:Clone() | |
231 | local vol = base.Size.x+base.Size.y+base.Size.z | |
232 | leaves.Mesh.Scale = leaf_mult[math.random(1,#leaf_mult)]*math.random(vol/3*10,vol/3*12)/10 | |
233 | leaves.Size = leaves.Mesh.Scale*0.75 | |
234 | leaves.CFrame = base.CFrame * CFrame.new(0,base.Size.y/2,0) | |
235 | leaves.Parent = base.Parent | |
236 | else | |
237 | local pos = base.CFrame*CFrame.new(0,base.Size/2,0) | |
238 | local height = base.Size.y | |
239 | local width = base.Size.x | |
240 | local nb = math.random(2,2) | |
241 | local r = math.random(45,135) | |
242 | local da = math.random(20+55/c,40+40/c) | |
243 | local ba = math.random(-da/3,da/3) | |
244 | for i=0,nb-1 do | |
245 | local branch = base:Clone() | |
246 | branch.Name = "Branch" | |
247 | local h = height*math.random(95,115)/100 | |
248 | local new = branch.CFrame * CFrame.new(0,height/2,0) * CFrame.Angles(0,0,math.rad(ba)) | |
249 | new = new * CFrame.Angles(0,i*(math.pi*2/nb)+r,math.rad(da/2)) * CFrame.new(0,h/2,0) | |
250 | local w = dot(new,branch.CFrame)*width*0.9 | |
251 | ||
252 | branch.Size = Vector3.new(w,h,w) | |
253 | branch.CFrame = new | |
254 | branch.Parent = base.Parent | |
255 | ||
256 | Branch(branch,c-1) | |
257 | end | |
258 | end | |
259 | end | |
260 | ||
261 | ||
262 | function _G.Tree(location,complexity,width,height) | |
263 | local tree = Instance.new("Model") | |
264 | tree.Name = "Waka" | |
265 | tree.archivable = false | |
266 | tree.Parent = workspace | |
267 | local base = Base:Clone() | |
268 | base.Parent = tree | |
269 | base.Size = Vector3.new(width,height,width) | |
270 | -- move up by half its height, and rotate randomly | |
271 | base.CFrame = location * CFrame.new(0,height/2,0) * CFrame.Angles(0,math.rad(math.random(1,360)),0) | |
272 | -- start branching | |
273 | Branch(base,complexity) | |
274 | return tree | |
275 | end | |
276 | for i=1,TreesInSavannah do | |
277 | _G.Tree(CFrame.new(math.random(x-BiomeSize, x+BiomeSize), 1, math.random(z-BiomeSize, z+BiomeSize)),3,4,20) | |
278 | end | |
279 | end | |
280 | function find(X,Z) | |
281 | local R=math.random(1,5) | |
282 | if R==1 then | |
283 | Swamp(X,Z) | |
284 | end | |
285 | if R==2 then | |
286 | Mount(X,Z) | |
287 | end | |
288 | if R==3 then | |
289 | Sand(X,Z) | |
290 | end | |
291 | if R==4 then | |
292 | Forest(X,Z) | |
293 | end | |
294 | if R==5 then | |
295 | Savannah(X,Z) | |
296 | end | |
297 | end | |
298 | if BiomeSquares==1 then | |
299 | find(BiomeSize*-3,BiomeSize*-3) | |
300 | end | |
301 | if BiomeSquares==2 then | |
302 | find(BiomeSize*-3,BiomeSize*-3) | |
303 | find(BiomeSize*-1,BiomeSize*-3) | |
304 | find(BiomeSize*-3,BiomeSize*-1) | |
305 | find(BiomeSize*-1,BiomeSize*-1) | |
306 | end | |
307 | if BiomeSquares==3 then | |
308 | find(BiomeSize*-3,BiomeSize*-3) | |
309 | find(BiomeSize*-1,BiomeSize*-3) | |
310 | find(BiomeSize,BiomeSize*-3) | |
311 | find(BiomeSize*-3,BiomeSize*-1) | |
312 | find(BiomeSize*-1,BiomeSize*-1) | |
313 | find(BiomeSize,BiomeSize*-1) | |
314 | find(BiomeSize*-3,BiomeSize) | |
315 | find(BiomeSize*-1,BiomeSize) | |
316 | find(BiomeSize,BiomeSize) | |
317 | end | |
318 | if BiomeSquares==4 then | |
319 | find(BiomeSize*-3,BiomeSize*-3) | |
320 | find(BiomeSize*-1,BiomeSize*-3) | |
321 | find(BiomeSize,BiomeSize*-3) | |
322 | find(BiomeSize*3,BiomeSize*-3) | |
323 | find(BiomeSize*-3,BiomeSize*-1) | |
324 | find(BiomeSize*-1,BiomeSize*-1) | |
325 | find(BiomeSize,BiomeSize*-1) | |
326 | find(BiomeSize*3,BiomeSize*-1) | |
327 | find(BiomeSize*-3,BiomeSize) | |
328 | find(BiomeSize*-1,BiomeSize) | |
329 | find(BiomeSize,BiomeSize) | |
330 | find(BiomeSize*3,BiomeSize) | |
331 | find(BiomeSize*-3,BiomeSize*3) | |
332 | find(BiomeSize*-1,BiomeSize*3) | |
333 | find(BiomeSize,BiomeSize*3) | |
334 | find(BiomeSize*3,BiomeSize*3) | |
335 | end | |
336 | if BiomeSquares==5 then | |
337 | find(BiomeSize*-3,BiomeSize*-3) | |
338 | find(BiomeSize*-1,BiomeSize*-3) | |
339 | find(BiomeSize,BiomeSize*-3) | |
340 | find(BiomeSize*3,BiomeSize*-3) | |
341 | find(BiomeSize*5,BiomeSize*-3) | |
342 | find(BiomeSize*-3,BiomeSize*-1) | |
343 | find(BiomeSize*-1,BiomeSize*-1) | |
344 | find(BiomeSize,BiomeSize*-1) | |
345 | find(BiomeSize*3,BiomeSize*-1) | |
346 | find(BiomeSize*5,BiomeSize*-1) | |
347 | find(BiomeSize*-3,BiomeSize) | |
348 | find(BiomeSize*-1,BiomeSize) | |
349 | find(BiomeSize,BiomeSize) | |
350 | find(BiomeSize*3,BiomeSize) | |
351 | find(BiomeSize*5,BiomeSize) | |
352 | find(BiomeSize*-3,BiomeSize*3) | |
353 | find(BiomeSize*-1,BiomeSize*3) | |
354 | find(BiomeSize,BiomeSize*3) | |
355 | find(BiomeSize*3,BiomeSize*3) | |
356 | find(BiomeSize*5,BiomeSize*3) | |
357 | find(BiomeSize*-3,BiomeSize*5) | |
358 | find(BiomeSize*-1,BiomeSize*5) | |
359 | find(BiomeSize,BiomeSize*5) | |
360 | find(BiomeSize*3,BiomeSize*5) | |
361 | find(BiomeSize*5,BiomeSize*5) | |
362 | end |