コード例 #1
0
ファイル: worldgen.py プロジェクト: millejoh/Islands
 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)
コード例 #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)
コード例 #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)
コード例 #4
0
ファイル: generator.py プロジェクト: krummja/Anathema_v1
 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
コード例 #5
0
ファイル: generator.py プロジェクト: krummja/Anathema_v1
 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
コード例 #6
0
ファイル: utilities.py プロジェクト: krummja/Hext
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
コード例 #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)
コード例 #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()
コード例 #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)
コード例 #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)
コード例 #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
コード例 #12
0
ファイル: worldgen.py プロジェクト: millejoh/Islands
# 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: