Skip to content

janEntikan/tmx2bam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CLI tool for converting Tiled TMX files to Panda3D BAM files.

Usage:

$ pip install panda3d-tmx2bam
$ tmx2bam path/to/tmx/file.tmx path/to/bam/file.bam -prefabs=path/to/prefabs.bam

or

from tmx2bam import Tmx2Bam
from direct.showbase.ShowBase import ShowBase

base = ShowBase()
tmx_map = Tmx2Bam("path/to/tmx/file.tmx", prefabs="path/to/prefabs.bam")
tmx_map.node.reparent_to(render)
base.run()

Prefabs are optional. Without them all tiles will be cards. Find important tiles and their properties like so:

tiles_with_my_property = tmx_map.node.find_all_matches('**/=my_property_name')
for tile in tiles_with_my_property:
  my_property_value = tile.get_tag("my_property_name")

You can read more about searching Panda3d's scene graph here: https://docs.panda3d.org/1.10/python/programming/scene-graph/searching-scene-graph

Currently supports:

  • TMX file with CSV data (default)
  • Custom properties as PandaNode tags
  • Multiple tilesheets
  • Multiple layers and Groups
  • Animated tiles
  • Object layer/Objects (point, poly, rectangle, text, image)
  • Background images
  • Merge animated sprites
  • Allow more shapes than just cards

Left to do:

  • Infinite maps (chunks)
  • Hexagonal and Isometric tiles
  • Tile render order
  • Tilesheet image collection
  • Embedded tilesheet in tmx
  • Embedding texture in bam
  • Tiled features I'm not aware of
  • Error handling
  • A better readme

Exporter specific custom layer properties:

  • "flatten" will flatten_strong() the layer
  • "store_data" will store the data in the layer with set_python_tag()
  • "z" set's the layer's z height.

Prefabs: To use prefabs, simply make a bam (with blender and blend2bam for example), where each root object is a nodepath named after a type in the spritesheet's tsx. Tmx2bam will then replace the tiles or objects that have this type assigned with this nodepath.

Mind:

  • The Y axis is inverted in panda3d.
  • Animated sprites can only have one steady frame-rate that you can set on the first frame in Tiled.
  • Currently the image resolutions have to be power of two.
  • Rendering tons of individual tiles is slow. Use the "flatten" property as much as possible.
  • The ellipse and point objects are not drawn at this time, they're empty nodepaths.
  • I'm not a programmer but I play one on TV. Your mileage may vary.

Fun snippets:

  • Adding a "repeat" property to a "cube" prefabed tile to make towers and large walls and things.
for layer in tmx2bam.node.find_all_matches("**/=repeat"):
    repetitions = layer.get_tag("repeat")
    repeats_node = NodePath(layer.name+"-repeat")
    for repetition in range(int(repetitions)):
        repeat = NodePath("repeat")
        layer.copy_to(repeat)
        repeat.set_z(layer.get_z()+repetition-1)
        repeat.reparent_to(repeats_node)
    repeats_node.flatten_strong()
    repeats_node.reparent_to(layer)

Licensed WTFPL.

About

CLI tool for converting Tiled TMX files to Panda3D BAM files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages