Skip to content

Tile maps

Looking for walkable ground?

This page lays out space from an ASCII string. For the ground an away team walks, see Ground tile maps.

For large, structured worlds, build the map from an ASCII string: map each character to a deck of terrain prefabs, then fill a tile grid from the art. It's a compact way to lay out sectors of space (used by HereThereBeMonsters and theta_quadrant).

Create a tile map

tile_map = maps_tile_map_create(0, 100_000, 1_000, 2_000)
#                                min_x  min_z  cell_x  cell_z

Define decks

A deck is a weighted set of terrain prefabs; each mapped character draws from one:

nebula_deck = maps_deck_create()
nebula_deck.add_card(prefab_terrain_nebula_sphere, {"density": 0.5, "cluster_color": "red"})

black_hole_deck = maps_deck_create()
black_hole_deck.add_card(prefab_black_hole, {"gravity_radius": 10_000})

add_card(card, data=None, count=1, cost=0) adds a prefab to the deck; count weights how often it's chosen.

Map characters to decks

tile_map.map_deck("n", nebula_deck)
tile_map.map_deck("b", black_hole_deck)

Fill from an ASCII string

map_art is a string (often imported from its own .mast file). Each character maps to a deck; spaces and unknown characters are skipped.

res = await tile_map.fill(map_art, x_count=100)
res &= role("black_hole")     # the result is a role set of everything spawned

Missions can use several tile maps with different cell sizes for different regions (theta_quadrant uses 16). For simpler asteroid/nebula fields without a grid, see the field helpers in World building.