def Percipitaion(preciphm, temphm): libtcod.heightmap_add(preciphm, 2) for x in xrange(WORLD_WIDTH): for y in xrange(WORLD_HEIGHT): temp = libtcod.heightmap_get_value(temphm, x, y) precip = libtcod.noise_new(2, libtcod.NOISE_DEFAULT_HURST, libtcod.NOISE_DEFAULT_LACUNARITY) libtcod.heightmap_add_fbm(preciphm, precip, 2, 2, 0, 0, 32, 1, 1) libtcod.heightmap_normalize(preciphm, 0.0, 1.0) return
def Percipitaion(preciphm): libtcod.heightmap_add(preciphm, 2) for x in xrange(WORLD_WIDTH): for y in xrange(WORLD_HEIGHT): if y > WORLD_HEIGHT/2 - WORLD_HEIGHT/10 and y < WORLD_HEIGHT/2 + WORLD_HEIGHT/10: val = y val = abs(y - WORLD_HEIGHT/2) libtcod.heightmap_set_value(preciphm, x, y, val/4) precip = libtcod.noise_new(2,libtcod.NOISE_DEFAULT_HURST, libtcod.NOISE_DEFAULT_LACUNARITY) libtcod.heightmap_add_fbm(preciphm,precip ,8, 8, 0, 0, 32, 1, 1) libtcod.heightmap_normalize(preciphm, 0.0, 1.0) return
def test_heightmap(): hmap = libtcodpy.heightmap_new(16, 16) repr(hmap) noise = libtcodpy.noise_new(2) # basic operations libtcodpy.heightmap_set_value(hmap, 0, 0, 1) libtcodpy.heightmap_add(hmap, 1) libtcodpy.heightmap_scale(hmap, 1) libtcodpy.heightmap_clear(hmap) libtcodpy.heightmap_clamp(hmap, 0, 0) libtcodpy.heightmap_copy(hmap, hmap) libtcodpy.heightmap_normalize(hmap) libtcodpy.heightmap_lerp_hm(hmap, hmap, hmap, 0) libtcodpy.heightmap_add_hm(hmap, hmap, hmap) libtcodpy.heightmap_multiply_hm(hmap, hmap, hmap) # modifying the heightmap libtcodpy.heightmap_add_hill(hmap, 0, 0, 4, 1) libtcodpy.heightmap_dig_hill(hmap, 0, 0, 4, 1) libtcodpy.heightmap_rain_erosion(hmap, 1, 1, 1) libtcodpy.heightmap_kernel_transform(hmap, 3, [-1, 1, 0], [0, 0, 0], [.33, .33, .33], 0, 1) libtcodpy.heightmap_add_voronoi(hmap, 10, 3, [1, 3, 5]) libtcodpy.heightmap_add_fbm(hmap, noise, 1, 1, 1, 1, 4, 1, 1) libtcodpy.heightmap_scale_fbm(hmap, noise, 1, 1, 1, 1, 4, 1, 1) libtcodpy.heightmap_dig_bezier(hmap, [0, 16, 16, 0], [0, 0, 16, 16], 1, 1, 1, 1) # read data libtcodpy.heightmap_get_value(hmap, 0, 0) libtcodpy.heightmap_get_interpolated_value(hmap, 0, 0) libtcodpy.heightmap_get_slope(hmap, 0, 0) libtcodpy.heightmap_get_normal(hmap, 0, 0, 0) libtcodpy.heightmap_count_cells(hmap, 0, 0) libtcodpy.heightmap_has_land_on_border(hmap, 0) libtcodpy.heightmap_get_minmax(hmap) libtcodpy.noise_delete(noise) libtcodpy.heightmap_delete(hmap)
def build_atmosphere(self, width, height): if self.planet_class in ['terran', 'ocean', 'jungle', 'tundra', 'artic'] : atmosphere = self.spherical_noise( noise_dx=10.0, noise_dy=10.0, noise_dz=10.0, noise_octaves=4.0, noise_zoom=2.0, noise_hurst=self.noise_hurst, noise_lacunarity=self.noise_lacunarity, width=width, height=height ) libtcod.heightmap_normalize(atmosphere, 0, 1.0) libtcod.heightmap_add(atmosphere,0.30) libtcod.heightmap_clamp(atmosphere,0.4,1.0) return atmosphere elif self.planet_class in ['arid', 'desert']: atmosphere = self.spherical_noise( noise_dx=10.0, noise_dy=10.0, noise_dz=10.0, noise_octaves=4.0, noise_zoom=2.0, noise_hurst=self.noise_hurst, noise_lacunarity=self.noise_lacunarity, width=width, height=height ) libtcod.heightmap_normalize(atmosphere, 0, 1.0) libtcod.heightmap_add(atmosphere,0.7) libtcod.heightmap_clamp(atmosphere,0.8,1.0) return atmosphere else: return None
def build_heightmap(self, width, height): hm = self.spherical_noise( self.noise_dx, self.noise_dy, self.noise_dz, self.noise_octaves, self.noise_zoom, self.noise_hurst, self.noise_lacunarity, width, height) if self.planet_class == 'terran': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,-0.40) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 1000 if width == self.detail_heightmap_width else 100 libtcod.heightmap_rain_erosion(hm,1000,0.46,0.12,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'ocean': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,-0.40) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 3000 if width == self.detail_heightmap_width else 1000 libtcod.heightmap_rain_erosion(hm,3000,0.46,0.12,self.rnd) libtcod.heightmap_normalize(hm, 0, 200) elif self.planet_class == 'jungle': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,0.20) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 3000 if width == self.detail_heightmap_width else 1000 libtcod.heightmap_rain_erosion(hm,raindrops,0.25,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'lava': libtcod.heightmap_normalize(hm, 0, 1.0) raindrops = 1000 if width == self.detail_heightmap_width else 500 libtcod.heightmap_rain_erosion(hm,raindrops,0.65,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'tundra': libtcod.heightmap_normalize(hm, 0, 1.0) # libtcod.heightmap_add(hm,0.20) # libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 2000 if width == self.detail_heightmap_width else 50 libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'arid': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,0.20) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 2000 if width == self.detail_heightmap_width else 50 libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'desert': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,0.15) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 1000 if width == self.detail_heightmap_width else 50 libtcod.heightmap_rain_erosion(hm,raindrops,0.10,0.10,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'artic': libtcod.heightmap_normalize(hm, 0, 1.0) libtcod.heightmap_add(hm,0.40) libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 1000 if width == self.detail_heightmap_width else 100 libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'barren': libtcod.heightmap_normalize(hm, 0, 1.0) # libtcod.heightmap_add(hm,0.40) # libtcod.heightmap_clamp(hm,0.0,1.0) raindrops = 2000 if width == self.detail_heightmap_width else 500 libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd) libtcod.heightmap_normalize(hm, 0, 255) elif self.planet_class == 'gas giant': libtcod.heightmap_normalize(hm, 0, 1.0) # libtcod.heightmap_add(hm,0.40) # libtcod.heightmap_clamp(hm,0.0,1.0) # # 3x3 kernel for smoothing operations smoothKernelSize = 9 smoothKernelDx = [ -1, 0, 1, -1, 0, 1, -1, 0, 1 ] # smoothKernelDy = [ # -1, -1, -1, # 0, 0, 0, # 1, 1, 1 # ] smoothKernelDy = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, ] smoothKernelWeight = [ 1.0, 2.0, 1.0, 4.0, 20.0, 4.0, 1.0, 2.0, 1.0 ] for i in range(20,-1,-1) : libtcod.heightmap_kernel_transform(hm,smoothKernelSize,smoothKernelDx,smoothKernelDy,smoothKernelWeight,0,1.0) libtcod.heightmap_normalize(hm, 0, 255) else: libtcod.heightmap_normalize(hm, 0, 255) return hm