Exemplo n.º 1
0
 def __init__(self,
              width,
              height,
              erosion_factor=0.01,
              max_erosion_alt=0.9,
              sedimentation_factor=0.01,
              mudslide_coef=0.4,
              seed=None):
     self.width = width
     self.height = height
     self._hm = new_heightmap(width, height)  # World Heightmap
     self._hm2 = new_heightmap(width, height)  # World map without erosion
     self._precipitation = new_heightmap(width, height)
     self._hm_temperature = new_heightmap(width, height)
     self._biome_map = np.zeros((width, height))
     self.cloud_dx, self.cloud_tot_dx = 0.0, 0.0
     self._clouds = np.zeros((height, width))
     self.random = random.Random(seed)  # Random number generator
     self.erosion_factor = erosion_factor
     self.max_erosion_alt = max_erosion_alt
     self.sedimentation_factor = sedimentation_factor
     self.mudslide_coef = mudslide_coef
     self.noise = tcod.noise_new(2)  # noise.NoiseGenerator(2)
     #
     map_data = [MapData() for _ in range(height * width)
                 ]  #np.full((width, height),dtype=MapData)
     self.map_data = np.array(map_data)
     self.map_data.shape = (height, width)
Exemplo n.º 2
0
def test_noise():
    noise = libtcodpy.noise_new(1)
    libtcodpy.noise_set_type(noise, libtcodpy.NOISE_SIMPLEX)
    libtcodpy.noise_get(noise, [0])
    libtcodpy.noise_get_fbm(noise, [0], 4)
    libtcodpy.noise_get_turbulence(noise, [0], 4)
    libtcodpy.noise_delete(noise)
Exemplo n.º 3
0
def test_noise():
    noise = libtcodpy.noise_new(1)
    libtcodpy.noise_set_type(noise, libtcodpy.NOISE_SIMPLEX)
    libtcodpy.noise_get(noise, [0])
    libtcodpy.noise_get_fbm(noise, [0], 4)
    libtcodpy.noise_get_turbulence(noise, [0], 4)
    libtcodpy.noise_delete(noise)
Exemplo n.º 4
0
 def drainage(self):
     drainage_hm = heightmap_new(self.width, self.height, order="C")
     drainage_hm[:] += 2
     drainage_noise = tcod.noise_new(2, tcod.NOISE_DEFAULT_HURST,
                                     tcod.NOISE_DEFAULT_LACUNARITY)
     heightmap_add_fbm(drainage_hm, drainage_noise, 2, 2, 0, 0, 32, 1, 1)
     heightmap_normalize(drainage_hm, 0.0, 1.0)
     self.world_data["drainage"] = drainage_hm
Exemplo n.º 5
0
 def precipitation(self):
     precipitation_hm = heightmap_new(self.width, self.height, order="C")
     precipitation_hm[:] += 2
     precipitation_noise = tcod.noise_new(2, tcod.NOISE_DEFAULT_HURST,
                                          tcod.NOISE_DEFAULT_LACUNARITY)
     heightmap_add_fbm(precipitation_hm, precipitation_noise, 2, 2, 0, 0,
                       32, 1, 1)
     heightmap_normalize(precipitation_hm, 0.0, 1.0)
     self.world_data["precipitation"] = precipitation_hm
Exemplo n.º 6
0
def precipitation(precip_heightmap, temp_heightmap):
    precip_heightmap[:] += 2
    for x in range(WORLD_WIDTH):
        for y in range(WORLD_HEIGHT):
            temp = tcod.heightmap_get_value(temp_heightmap, x, y)
    precipitation = tcod.noise_new(2, tcod.NOISE_DEFAULT_HURST,
                                   tcod.NOISE_DEFAULT_LACUNARITY)
    tcod.heightmap_add_fbm(precip_heightmap, precipitation, 2, 2, 0, 0, 32, 1,
                           1)
    tcod.heightmap_normalize(precip_heightmap, 0.0, 1.0)

    return precip_heightmap, temp_heightmap
Exemplo n.º 7
0
def Percipitaion(preciphm, temphm):

    tcod.heightmap_add(preciphm, 2)

    for x in range(WORLD_WIDTH):
        for y in range(WORLD_HEIGHT):
            temp = tcod.heightmap_get_value(temphm, x, y)

    precip = tcod.noise_new(2, tcod.NOISE_DEFAULT_HURST,
                            tcod.NOISE_DEFAULT_LACUNARITY)

    # tcod.heightmap_add_fbm(preciphm,precip ,2, 2, 0, 0, 32, 1, 1)

    tcod.heightmap_normalize(preciphm, 0.0, 1.0)
Exemplo n.º 8
0
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.console = tcod.console_new(self.width, self.height)
        self.elevation = tcod.heightmap_new(self.width, self.height)
        self.map = tcod.map_new(self.width, self.height)
        
        # put some interesting values into elevation
        noise = tcod.noise_new(2,tcod.NOISE_DEFAULT_HURST, tcod.NOISE_DEFAULT_LACUNARITY, 0)
        for x in range (0, self.width):
            for y in range (0, self.height):
                k = 3.4
                value = tcod.noise_get(noise,[x/k,y/k], tcod.NOISE_PERLIN)
                tcod.heightmap_set_value(self.elevation, x, y, value)
        tcod.noise_delete(noise)

        self.update()
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
def MasterWorldGen():  # ------------------------------------------------------- * MASTER GEN * -------------------------------------------------------------

    print(" * World Gen START * ")
    starttime = time.time()

    # Heightmap
    hm = tcod.heightmap_new(WORLD_WIDTH, WORLD_HEIGHT)

    for i in range(250):
        tcod.heightmap_add_hill(
            hm,
            randint(WORLD_WIDTH / 10, WORLD_WIDTH - WORLD_WIDTH / 10),
            randint(WORLD_HEIGHT / 10, WORLD_HEIGHT - WORLD_HEIGHT / 10),
            randint(12, 16),
            randint(6, 10),
        )
    print("- Main Hills -")

    for i in range(1000):
        tcod.heightmap_add_hill(
            hm,
            randint(WORLD_WIDTH / 10, WORLD_WIDTH - WORLD_WIDTH / 10),
            randint(WORLD_HEIGHT / 10, WORLD_HEIGHT - WORLD_HEIGHT / 10),
            randint(2, 4),
            randint(6, 10),
        )
    print("- Small Hills -")

    tcod.heightmap_normalize(hm, 0.0, 1.0)

    noisehm = tcod.heightmap_new(WORLD_WIDTH, WORLD_HEIGHT)
    noise2d = tcod.noise_new(
        2, tcod.NOISE_DEFAULT_HURST, tcod.NOISE_DEFAULT_LACUNARITY
    )
    # tcod.heightmap_add_fbm(noisehm, noise2d,6, 6, 0, 0, 32, 1, 1)
    tcod.heightmap_normalize(noisehm, 0.0, 1.0)
    # tcod.heightmap_multiply_hm(hm, noisehm, hm)
    print("- Apply Simplex -")

    PoleGen(hm, 0)
    print("- South Pole -")

    PoleGen(hm, 1)
    print("- North Pole -")

    TectonicGen(hm, 0)
    TectonicGen(hm, 1)
    print("- Tectonic Gen -")

    tcod.heightmap_rain_erosion(hm, WORLD_WIDTH * WORLD_HEIGHT, 0.07, 0, 0)
    print("- Erosion -")

    tcod.heightmap_clamp(hm, 0.0, 1.0)

    # Temperature
    temp = tcod.heightmap_new(WORLD_WIDTH, WORLD_HEIGHT)
    Temperature(temp, hm)
    tcod.heightmap_normalize(temp, 0.0, 1.0)
    print("- Temperature Calculation -")

    # Precipitation

    preciphm = tcod.heightmap_new(WORLD_WIDTH, WORLD_HEIGHT)
    Percipitaion(preciphm, temp)
    tcod.heightmap_normalize(preciphm, 0.0, 1.0)
    print("- Percipitaion Calculation -")

    # Drainage

    drainhm = tcod.heightmap_new(WORLD_WIDTH, WORLD_HEIGHT)
    drain = tcod.noise_new(
        2, tcod.NOISE_DEFAULT_HURST, tcod.NOISE_DEFAULT_LACUNARITY
    )
    # tcod.heightmap_add_fbm(drainhm,drain ,2, 2, 0, 0, 32, 1, 1)
    tcod.heightmap_normalize(drainhm, 0.0, 1.0)
    print("- Drainage Calculation -")

    # VOLCANISM - RARE AT SEA FOR NEW ISLANDS (?) RARE AT MOUNTAINS > 0.9 (?) RARE AT TECTONIC BORDERS (?)

    elapsed_time = time.time() - starttime
    print(" * World Gen DONE *    in: ", elapsed_time, " seconds")

    # Initialize Tiles with Map values
    World = [[0 for y in range(WORLD_HEIGHT)] for x in range(WORLD_WIDTH)]
    for x in range(WORLD_WIDTH):
        for y in range(WORLD_HEIGHT):
            World[x][y] = Tile(
                tcod.heightmap_get_value(hm, x, y),
                tcod.heightmap_get_value(temp, x, y),
                tcod.heightmap_get_value(preciphm, x, y),
                tcod.heightmap_get_value(drainhm, x, y),
                0,
            )

    print("- Tiles Initialized -")

    # Prosperity

    Prosperity(World)
    print("- Prosperity Calculation -")

    # Biome info to Tile

    for x in range(WORLD_WIDTH):
        for y in range(WORLD_HEIGHT):

            if (
                World[x][y].precip >= 0.10
                and World[x][y].precip < 0.33
                and World[x][y].drainage < 0.5
            ):
                World[x][y].biomeID = 3
                if randint(1, 2) == 2:
                    World[x][y].biomeID = 16

            if World[x][y].precip >= 0.10 and World[x][y].precip > 0.33:
                World[x][y].biomeID = 2
                if World[x][y].precip >= 0.66:
                    World[x][y].biomeID = 1

            if (
                World[x][y].precip >= 0.33
                and World[x][y].precip < 0.66
                and World[x][y].drainage >= 0.33
            ):
                World[x][y].biomeID = 15
                if randint(1, 5) == 5:
                    World[x][y].biomeID = 5

            if (
                World[x][y].temp > 0.2
                and World[x][y].precip >= 0.66
                and World[x][y].drainage > 0.33
            ):
                World[x][y].biomeID = 5
                if World[x][y].precip >= 0.75:
                    World[x][y].biomeID = 6
                if randint(1, 5) == 5:
                    World[x][y].biomeID = 15

            if (
                World[x][y].precip >= 0.10
                and World[x][y].precip < 0.33
                and World[x][y].drainage >= 0.5
            ):
                World[x][y].biomeID = 16
                if randint(1, 2) == 2:
                    World[x][y].biomeID = 14

            if World[x][y].precip < 0.10:
                World[x][y].biomeID = 4
                if World[x][y].drainage > 0.5:
                    World[x][y].biomeID = 16
                    if randint(1, 2) == 2:
                        World[x][y].biomeID = 14
                if World[x][y].drainage >= 0.66:
                    World[x][y].biomeID = 8

            if World[x][y].height <= 0.2:
                World[x][y].biomeID = 0

            if World[x][y].temp <= 0.2 and World[x][y].height > 0.15:
                World[x][y].biomeID = randint(11, 13)

            if World[x][y].height > 0.6:
                World[x][y].biomeID = 9
            if World[x][y].height > 0.9:
                World[x][y].biomeID = 10

    print("- BiomeIDs Atributed -")

    # River Gen

    for x in range(1):
        RiverGen(World)
    print("- River Gen -")

    # Free Heightmaps
    tcod.heightmap_delete(hm)
    tcod.heightmap_delete(temp)
    tcod.heightmap_delete(noisehm)

    print(" * Biomes/Rivers Sorted *")

    return World
Exemplo n.º 12
0
# A direct translation of Jice's worldgen tool.
import math
import numpy as np
import random
import tcod
import attr
from tcod import Color
from tcod.noise import Noise
from itertools import count
from collections import namedtuple
from enum import Enum
from numba import jit, jitclass
from numba import int32, float32, void

noise1d = tcod.noise_new(1)  # noise.NoiseGenerator(1)
noise2d = tcod.noise_new(2)  # noise.NoiseGenerator(2)

# Height and Biome Constants
# --------------------------


class Climate(Enum):
    arctic_alpine = 0
    cold = 1
    temperate = 2
    warm = 3
    tropical = 4


def get_climate_from_temp(temperature):
    if temperature <= -5: