name = 'Random' version = '1.0' author = 'Triplefox' description = ('Random generated map.') def gen_script(basename, seed): from pyspades import mapmaker # define the gradients grass = mapmaker.Gradient() grass.set_step_rgb(0, (2,100,86)) grass.hsb(1, (102,73,58), 32, (106,78,71)) grass.hsb(32, (106,78,71), 64, (106,48,86)) snow = mapmaker.Gradient() snow.set_step_rgb(0, (101,193,214)) snow.hsb(1, (221,55,48), 16, (184,30,84)) snow.hsb(16, (184,30,84), 48, (160,20,87)) snow.hsb(48, (160,20,87), 56, (140,18,98)) snow.hsb(56, (140,18,98), 64, (142,13,100)) hill = mapmaker.Gradient() hill.set_step_rgb(0, (2,100,86)) hill.hsb(1, (102,73,58), 64, (17,36,87)) water = mapmaker.Gradient() water.set_step_rgb(0, (2,100,86)) water.hsb(1, (64,26,70), 16, (119,65,40)) water.hsb(16, (119,65,40), 64, (125,153,61)) # define biomes (gradient + avg. height infos) grass_biome = mapmaker.Biome(grass, 0.97, -0.1, 0.02) snow_biome = mapmaker.Biome(snow, 0.5, -0.4, 0.11) hill_biome = mapmaker.Biome(hill, 0.9, -0.3, 0.07) water_biome = mapmaker.Biome(water, 1.2, -0.16, 0.04) tundra_biome = mapmaker.Biome(snow, 1.14, -0.19, 0.1) # biome map - tiled biome instances bmap = mapmaker.BiomeMap([grass_biome,snow_biome, hill_biome,water_biome, tundra_biome],32,32) # predefined points to force a similar general character of map points = [(15,7,snow_biome),(15,15,grass_biome),(15,22,hill_biome), (0,24,water_biome),(31,24,water_biome), (0,8,water_biome),(31,8,water_biome)] for n in xrange(0,31,8): points.append((n,0,tundra_biome)) points.append((n,31,water_biome)) # additional randomized points points.extend(bmap.random_points(2,grass_biome,0,8,32,16)) points.extend(bmap.random_points(1,hill_biome,0,8,32,16)) points.extend(bmap.random_points(1,water_biome,8,8,16,16)) bmap.point_flood(points) bmap.jitter() # transform the biome map into a heightmap hmap, gradients = bmap.create_heightmap() hmap.midpoint_displace(0.3,0.68,4) hmap.jitter_colors(10) # draw the river import random YINCREMENT = 8 XINCREMENT = 12 XMIN = 256-64 XMAX = 256+64 x = random.randint(XMIN,XMAX) for y in xrange(YINCREMENT,513,YINCREMENT): nx = max(XMIN,min(XMAX,random.randint(x-XINCREMENT, x+XINCREMENT))) hmap.line_add(x,y-YINCREMENT,nx,y,8,0.005) hmap.line_set(x,y-YINCREMENT,nx,y,2,2.0) x = nx hmap.smoothing() hmap.truncate() hmap.rewrite_gradient_fill(gradients) hmap.rgb_noise_colors(-2,2) hmap.smooth_colors() vxl = hmap.write_vxl() def tree(x,y): # space the trees into a "x" pattern x = ((x>>1)<<1) + y % 2 green_set = [mapmaker.make_color(98,193,69), mapmaker.make_color(96,229,55), mapmaker.make_color(94,242,48), mapmaker.make_color(93,209,57), mapmaker.make_color(92,219,57), mapmaker.make_color(88,210,66)] brown = mapmaker.make_color(189,124,67) trunk_h = random.randint(4,5) if x > 1 and y > 1 and x < 510 and y < 510: z = int(hmap.get(x,y)*63 - 3 - trunk_h) if z >= 0 and z + 3 + trunk_h < 62: green = random.choice(green_set) for n in [[x,y,z,z+3,z+3,green], [x+1,y,z,z+3,z+3,green], [x-1,y,z,z+3,z+3,green], [x,y+1,z,z+3,z+3,green], [x,y-1,z,z+3,z+3,green], [x,y,z+3,z+3+trunk_h,z+3+trunk_h-1,brown], [x+1,y+1,z+1,z+2,z+2,green], [x-1,y+1,z+1,z+2,z+2,green], [x+1,y-1,z+1,z+2,z+2,green], [x-1,y-1,z+1,z+2,z+2,green], [x+2,y,z+1,z+2,z+2,green], [x-2,y,z+1,z+2,z+2,green], [x,y-2,z+1,z+2,z+2,green], [x,y+2,z+1,z+2,z+2,green]]: vxl.set_column_fast(*n) for x in xrange(0, bmap.width): for y in xrange(0, bmap.height): if bmap.get_repeat(x, y) is hill_biome: left, top, right, bottom = bmap.rect_of_point(x,y) for ct in xrange(random.randint(1,17)): tree(random.randint(left,right),\ random.randint(top,bottom)) return vxl