Skip to content

This is a Python framework for generating TaleSpire terrain and place objects onto it.

License

Notifications You must be signed in to change notification settings

SkogrKrellr/TaleSpire_Generator

Repository files navigation

TaleSpire Terrain Generator

This is a python framework for generating TaleSpire terrain and place objects onto it.

Table of contents

  1. Instalation
  2. Basic Use
  3. Documentation
  4. Future plans

Some examples of terrain generation: (Skies are edited after the fact) desert desert2 forest jungle jungle_totem


Instalation

You will need to have Python3 ( v3.9 or above) installed, and Talespire installed on your machine.

  1. Clone the repo to your local machine
  2. Locate index.json file in Talespire installation folder. Most likely it is in: ..\Steam\steamapps\common\TaleSpire\Taleweaver\d71427a1-5535-4fa7-82d7-4ca1e75edbfd Place the index.json in the etc folder of the cloned repository
  3. Run the setup script with the command:
# All commands are run from TaleSpire_Generator directory
# This will install required packages
pip install -r requirements.txt
# This will create and populate the database
python .\firstTimeSetup.py
# Check if everything is working by running unittests
python -m unittest
  1. All Done!

Basic Use

Here we see a basic use case, where we want to generate a 20 tile x 30 tile terrain, with simple place objects.

Inspect example.py, which contains:

import json
from generator.generator import Generator
from objects.assetManager import AssetManager
import pyperclip as pc

from visualizer.visualizer import Visualizer

generator = Generator()

seed = 2022

# Size per tile
x, y, z = 10, 10, 10
exponent = 1.3

# How many consequitive tiles will be generated
xTiles, yTiles = 2, 3

# Set operating variables

generator.setXYZ(x, y, z) # How large will one tile be
generator.setExponent(exponent) # What is the exponent for redistribution
generator.setSeed(seed) # Seed for repeatable results
generator.setOctaves(1, 0.5, 0.25)
generator.setScales(1, 2, 4)
generator.setUsePreciseHeight(True) # If generating more than 1x1 consequitive tiles, this should be enabled
generator.setUseRidgeNoise(False) # Redistributes values to make ridges, good for deserts
generator.setUseHeightBasedTerrainAssetPlacement(False) # Place terrain assets based on height

# Possible options for terrain asset:
# 
# "asset":                  [String]  Asset that is going to be placed [REQUIRED]
# "clumping":               [Integer] How much similar tiles will clump together
# "density":                [Integer] Proportion of it in terrain (If height based distribution disabled),
# "heightMin":              [Integer] Minimum height at which this tile will appear (If height based distribution enabled),
# "heightMax":              [Integer] Maximum height at which this tile will appear (If height based distribution enabled),
# "blendHeightMultiplier":  [Float] How much tiles spread from minimum and maximum height (If height based distribution enabled),


# Asset UUIDs can be found here: https://talesbazaar.com/game/tiles

terrainAssets = [
    {  # Grass - Lush
        "asset": "01c3a210-94fb-449f-8c47-993eda3e7126",
        "density": 10
    },
    {  # Grass - Sparse
        "asset": "3911d10d-142b-4f33-9fea-5d3a10c53781",
        "density": 90
    },
]


# This is how we add custom complex assets
customTreeUUID = AssetManager.addCustomAsset(
                "Tree 4 Tall",
                "```H4sIAAAAAAAACzv369xFJgZmBgYGV8sOe+Zcb6+FuwOFhA/vvMUIFGP54+9t4qri2XJlvvU8595GJqDYnexlT8+YiztvObZwR4/xpJcgdYwMEmxACmiOAIsBQwMjEwMHUwADBEBoAGi/N01oAAAA```"
            )


# Possible options for place object assets:
# 
# "asset":                  [String] Asset UUID that is going to be placed [REQUIRED]
# "density":                [Integer] How often do objects appear 
# "verticalOffset":         [Float]   Vertical offset for objecy (if you want to place things into the earth)
# "clumping":               [Float]   How much similar tiles will clump together,
# "randomNoiseWeight":      [Float]   How much random random noise affects object placement
# "randomNudgeEnabled":     [Boolean] Will object be slightly nudged from its center
# "randomRotationEnabled":  [Boolean] Will objects have random rotation enabled
# "heightBasedMultiplier":  [Float]   Multiplier fir how much more likely are objects to appear lower in terrain 
# "heightBasedOffset":      [Float]   Constant offset of how likelieness of objects are to appear lower
# "placeOnCenter":          [Boolean] Objects will be placed on center of tiles


# Asset UUIDs can be found here: https://talesbazaar.com/game/props

placeObjects = [
    {  # Custom Tree
        "asset": customTreeUUID,
        "density": 17,
        "clumping": 64,
        "randomNoiseWeight": 0.3,
    },
    {  # Fern 02
        "asset": "98259887-53c2-41d4-a54f-6140b6acf020",
        "density": 30,
        "clumping": 3,
        "randomNoiseWeight": 0.5,
        "randomNudgeEnabled": False,
        "randomRotationEnabled": True,
        "placeOnCenter": False
    },
]

generator.pregenerate(
    terrainAssets,
    placeObjects,
    [xTiles, yTiles]
)

# If we want to visualize the used heightmap in 2d
Visualizer.showImage(generator.elevation, True, 0, z)

# If we want to visualize the used heightmap in 3d
Visualizer.show3dPlot(generator.elevation, True, 0, z)

# If we want to visualize the object placements
Visualizer.showImages(generator.objectPlacements)

print("Do you want to continue with these results? Enter - yes, Ctrl-C - no")
input()

output = generator.generate()

# Quick and dirty json output
# print(json.dumps(output, indent=4))

# More elegant output to clipboard
print(f"Your terrain consists of {xTiles} by {yTiles} tiles.")
print("Now Just paste them one by one into talespire, lining them up!")

for entry in output:
    print(f"\t{entry['x']+1} : {entry['y']+1} copied into clipboard! Press enter to copy next tile", end = '')
    pc.copy(entry["output"])
    input()

print("All Done!") 

Use this command to generate the output

python .\exapmle.py

Json Output:

[
{"x": 0, "y": 0, "output": "```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```"},
{"x": 0, "y": 1, "output": "```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```"},
{"x": 0, "y": 2, "output": "```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```"},
{"x": 1, "y": 0, "output": "```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```"},
{"x": 1, "y": 1, "output": "```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```"},
{"x": 1, "y": 2, "output": "```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```"}
]

Generated result viewed in TaleSpire: Basic_use


Documentation

Wiki : (Working on it)


Future plans

  1. Implement poisson disc sampling for placement of objects
  2. Modify generator to produce more varied terrain, rivers, bigger cliffs, etc
  3. Add a procedural city generator
  4. Add a procedural dungeon generator