Generators
The Generators shelf holds 33 generators. All of them work on the model you are editing. Add keeps what is there and Replace starts over, and each press is one undo step. See the Generators guide for how to combine them.
Asteroids
Section titled “Asteroids”Lumpy rocks adrift in the whole model, or a belt of them
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same rocks |
| Arrangement | Enum: Field, Belt | FIELD | Through the whole model, or a belt |
| Count | Int | 40 | How many asteroids to aim for |
| Size | Float | 8.0 | How big the biggest asteroid is, in voxels |
| Ore | Float | 0.3 | What fraction of asteroids carry streaks of ore |
| Rock | Int | 252 | Palette index for the rock |
| Ore | Int | 11 | Palette index for the ore streaks |
Bridge
Section titled “Bridge”A bridge across the river, or else over the narrowest gap it can find - stone, wood, rope or a moon bridge
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | Kept for the shelf’s re-roll; a bridge is decided by the ground |
| Style | Enum: Stone Arches, Wooden, Rope, Moon Bridge | STONE | What the bridge is built like |
| Direction | Enum: Along X, Along Y | X | Which way the bridge runs |
| Width | Int | 3 | How wide the deck is, in voxels |
| Height | Int | 6 | Arch rise, sag, or a moon bridge’s hump |
| Min Depth | Int | 2 | How deep a dip must be to need a bridge |
| Min Span | Int | 6 | The shortest gap worth bridging |
| Deck | Int | 95 | Palette index for the deck |
| Rails | Int | 137 | Palette index for the rails |
| Piers | Int | 252 | Palette index for piers and posts |
Buildings
Section titled “Buildings”Houses, a whole village, a castle or a pier, standing on the ground
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always build the same |
| Build | Enum: One Building, Village, Castle, Pier | ONE | What to build |
| Houses | Int | 8 | How many houses a village aims for |
| Spacing | Int | 18 | Roughly how far apart the houses stand, in voxels |
| Max Slope | Int | 1 | How uneven a plot may be and still be built on |
| Smallest | Int | 7 | The narrowest a house may be, in voxels |
| Largest | Int | 11 | The widest a house may be, in voxels |
| Storeys | Int | 2 | The most floors a house may have |
| Storey Height | Int | 4 | How tall one floor is, in voxels |
| Roof | Enum: Pitched, Hipped, Flat | PITCHED | The shape of the roofs |
| Window Spacing | Int | 3 | Voxels between windows along a wall |
| Chimneys | Boolean | True | Put a chimney on some of the pitched roofs |
| Castle Size | Float | 0.6 | How wide the curtain wall is, as a fraction of the model |
| Water Level | Float | 0.15 | Where the water is, for a pier to stand over |
| Pier Length | Float | 0.25 | How far the pier reaches, as a fraction of the model |
| Paths | Boolean | True | Join the doors with paths (village and castle) |
| Path Width | Float | 2.0 | How wide those paths are, in voxels |
| Path | Int | 95 | Palette index for the paths |
| Walls | Int | 247 | Palette index for the walls |
| Timber | Int | 137 | Palette index for floors, corners, plinths and posts |
| Roof | Int | 101 | Palette index for the roofs (and a pier’s deck) |
| Doors | Int | 95 | Palette index for the doors |
| Windows | Int | 164 | Palette index for the window panes |
Tunnels and caverns carved under the surface - or a cave block cut from solid rock when the model is empty
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always carve the same caves |
| Carve | Enum: Whole Model, Active Group | MODEL | Whether to carve the whole model or only the active group |
| Style | Enum: Tunnels, Caverns, Both | BOTH | Passages, chambers, or both |
| Tunnel Spacing | Float | 32.0 | Roughly how far apart the passages run, in voxels |
| Tunnel Width | Float | 3.0 | How wide a passage is, in voxels |
| Cavern Size | Float | 14.0 | How big a chamber is, in voxels |
| Caverns | Float | 0.08 | How much of the rock is hollowed into chambers |
| Cover | Int | 3 | Voxels under the surface that are never carved, so the caves stay underground. 0 lets them break the surface |
| Openings | Float | 0.15 | How much of the surface the caves may break through - entrances |
| Keep Bottom | Int | 1 | Layers at the bottom of the grid that are never carved |
| Solid Rock | Boolean | True | On an empty model, fill the grid with rock first and carve the caves out of it |
| Rock | Int | 251 | Palette index for the rock of a solid cave block |
| Colour Walls | Boolean | True | Repaint the rock around the hollows |
| Wall Colour | Int | 253 | Palette index for the cave walls |
| Wall Depth | Int | 1 | How deep the wall colour reaches into the rock |
| Stalactites | Boolean | True | Hang stalactites from the cave ceilings |
| Stalactite Colour | Int | 252 | Palette index for the stalactites |
| Stalactite Density | Float | 0.12 | What fraction of the ceiling grows a stalactite |
| Stalactite Length | Int | 4 | Longest a stalactite hangs, in voxels |
A street grid of towers, offices and houses on a levelled site
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always build the same city |
| Style | Enum: Modern, Sci-fi, Medieval | MODERN | What the city is built like |
| City Size | Float | 0.9 | How much of the model the city covers |
| Block Size | Int | 20 | How wide a block between roads is, in voxels |
| Road Width | Int | 4 | How wide the roads are, in voxels |
| Lot Size | Int | 10 | How wide one building’s plot is, in voxels |
| Max Floors | Int | 20 | The tallest a tower may be, in storeys |
| Storey Height | Int | 3 | How tall one storey is, in voxels |
| Downtown | Float | 0.7 | How strongly the tall buildings gather in the middle |
| Parks | Float | 0.12 | What fraction of the lots are parks |
| Road | Int | 173 | Palette index for the roads |
| Pavement | Int | 248 | Palette index for the pavements |
| Markings | Int | 11 | Palette index for road markings |
| Park | Int | 161 | Palette index for park grass |
| Facade 1 | Int | 247 | Palette index for one facade colour |
| Facade 2 | Int | 44 | Palette index for another facade colour |
| Facade 3 | Int | 9 | Palette index for a third facade colour |
| Trim | Int | 252 | Palette index for rooftop plant and trim |
| Roofs | Int | 253 | Palette index for the roofs |
| Doors | Int | 95 | Palette index for the doors |
| Glass | Int | 115 | Palette index for the windows |
| Glow | Int | 109 | Palette index for sci-fi light bands |
| Ground If Empty | Boolean | True | On an empty model, lay a site to build on |
| Ground | Int | 252 | Palette index for the levelled ground |
Clouds
Section titled “Clouds”Puffy clouds on level bases, or a ragged layer of cloud from 3D noise
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Style | Enum: Puffs, Layer | PUFFS | Puffy heaps, or a ragged layer of weather |
| Seed | Int | 1 | The same seed and settings always give the same sky |
| Coverage | Float | 0.35 | How much of the layer is cloud. Read off the field as a quantile, so it means the same at any detail setting |
| Puff Size | Float | 24.0 | How wide one puff is, in voxels |
| Detail | Int | 4 | Layers of noise. Each adds detail half the size of the last |
| Roughness | Float | 0.5 | How much the fine layers count. Low is smooth, high is wispy |
| Altitude | Float | 0.72 | Where the middle of the cloud layer sits in the grid |
| Thickness | Float | 0.18 | How deep the layer is, as a fraction of the grid |
| Flat Base | Float | 0.7 | Cut the undersides level, the way real cumulus sit on their condensation height, and let the tops break up |
| Core | Float | 0.12 | How far inside the cloud the second colour starts |
| Shade | Float | 0.35 | How far up each cloud its second colour reaches, from the underside. 0 is one colour all over |
Colour Gradient
Section titled “Colour Gradient”Repaint the voxels already there along a ramp between two palette colours
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | Change for a different scatter of the dither |
| Scope | Enum: Whole Model, Active Group | MODEL | Which voxels get repainted |
| Direction | Enum: X, Y, Z, Radial, Spherical | Z | Which way the ramp runs |
| Fit | Enum: What It Paints, Whole Model | SCOPE | What the ramp is measured across |
| First | Int | 1 | Palette index the ramp starts at |
| Last | Int | 8 | Palette index the ramp ends at. Every index between the two is used, which is what makes a palette’s own ramp the thing to pick |
| Reverse | Boolean | False | Run the ramp the other way without swapping the colours |
| Steps | Int | 0 | Flatten the ramp into this many bands for a posterised look. 0 uses every index between the two |
| Bias | Float | 1.0 | Bend the ramp without moving its ends. Below 1 holds the first colour longer, above 1 the last |
| Dither | Float | 0.0 | Mix the neighbouring colours along the ramp, so it breaks into a dither instead of banding into hard stripes |
Colour Randomiser
Section titled “Colour Randomiser”Repaint the voxels already there from a weighted set of palette colours
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | Change for a different scatter of the same colours |
| Scope | Enum: Whole Model, Active Group | MODEL | Which voxels get repainted |
| Pattern | Enum: Per Voxel, Patches, Bands | PER_VOXEL | How the colours are spread across the voxels |
| Patch Size | Float | 6.0 | Voxels across one blotch of a single colour |
| Band Height | Float | 4.0 | Voxels of altitude one stratum covers |
| colors | Collection | ||
| Active | Int | 0 |
Branching, brain, fan and tube coral and kelp on the seabed
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same reef |
| Spacing | Int | 8 | Voxels between colonies |
| Density | Float | 0.8 | What fraction of the spots grow something |
| Size | Float | 8.0 | How big a colony is, in voxels |
| Kelp | Float | 0.25 | What fraction of the spots grow kelp instead |
| Water | Int | 164 | The water’s surface colour, so it can be grown into |
| Deep Water | Int | 171 | The deep water’s colour |
| Coral 1 | Int | 55 | Palette index for one coral colour |
| Coral 2 | Int | 17 | Palette index for another coral colour |
| Coral 3 | Int | 91 | Palette index for a third coral colour |
| Kelp | Int | 125 | Palette index for the kelp |
Craters
Section titled “Craters”Impact bowls with raised rims and dark ejecta
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same craters |
| Craters | Int | 12 | How many craters |
| Size | Float | 0.15 | The biggest crater’s width, as a fraction of the model |
| Depth | Float | 0.35 | How deep a crater is, for its radius |
| Rim | Float | 0.25 | How high the rim stands, for its radius |
| Ejecta | Float | 0.5 | How much dark thrown dirt lies round each crater |
| Rim | Int | 252 | Palette index for raised rims |
| Ejecta | Int | 254 | Palette index for the thrown dirt |
| Ground If Empty | Boolean | True | On an empty model, lay ground to strike |
| Ground | Int | 251 | Palette index for that ground |
Crystals
Section titled “Crystals”Clusters of pointed crystals growing from floors, walls and ceilings
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always grow the same crystals |
| Grow On | Enum: Whole Model, Active Group | MODEL | The whole model, or only the active group |
| Faces | Enum: All Faces, Floors, Ceilings, Walls | ALL | Which faces crystals grow from |
| Density | Float | 0.01 | What fraction of the open faces grow a cluster |
| Size | Float | 8.0 | How long the biggest crystal in a cluster is, in voxels |
| Per Cluster | Int | 5 | How many crystals grow from one base |
| Splay | Float | 0.5 | How far the crystals in a cluster lean apart |
| Crystal | Int | 115 | Palette index for the crystals |
| Tip | Int | 109 | Palette index for the crystal tips |
Damage
Section titled “Damage”Knock bites out of walls, crumble their tops and pit the surface - a ruin from a building
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always break the same pieces |
| Damage | Enum: Whole Model, Active Group | MODEL | Whether to damage the whole model or only the active group |
| Bites | Float | 0.35 | How much of the surface is bitten away in chunks. 0 takes no bites |
| Bite Size | Float | 6.0 | How big a missing chunk is, in voxels |
| Reach | Int | 3 | How deep a bite can go in from the surface. Deeper than the wall is thick and it goes right through |
| Crumble | Int | 2 | How many voxels a wall top can lose, so tops come out ragged. 0 leaves the tops level |
| Crumble Size | Float | 8.0 | How long a run of a wall breaks off together, in voxels |
| Pits | Float | 0.06 | What fraction of the exposed voxels are pocked out one at a time - weathering |
| Keep Bottom | Int | 1 | Layers at the bottom of the grid that are never touched, so the ground stays under the ruin |
| Effect | Enum: Break Off, Paint Only | REMOVE | Whether the damaged voxels are knocked out or only painted |
| Damage Colour | Int | 254 | Palette index the damaged voxels are painted with |
| Colour Edges | Boolean | False | Repaint the voxels left around each piece of damage, so fresh breaks show a different stone from the weathered face |
| Edge Colour | Int | 253 | Palette index for the voxels around the damage |
| Edge Depth | Int | 1 | How many voxels deep the edge colour reaches from the damage |
Dungeon
Section titled “Dungeon”Rooms and the corridors between them, with walls and a floor
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same dungeon |
| Rooms | Int | 8 | How many rooms to aim for. An upper bound, not a promise: the split stops when a half can no longer hold two |
| Smallest | Int | 7 | Narrowest a room may be, in voxels |
| Largest | Int | 16 | Widest a room may be, in voxels |
| Spacing | Int | 1 | Rock left between a room and the edge of the space it was given, so two rooms are never wall to wall |
| Corridor | Int | 3 | How wide the corridors between rooms are |
| Wall | Int | 1 | How thick the walls are |
| Wall Height | Int | 6 | How tall the walls stand above the floor |
| Floor | Int | 1 | How thick the floor slab is |
| Loops | Float | 0.25 | Extra corridors joining rooms that are already near each other. At 0 there is exactly one route between any two rooms, which reads as a maze rather than a building |
| Roof | Boolean | False | Close it over with a ceiling. Off by default because a roofed dungeon cannot be seen into while you work on it |
| Thickness | Int | 1 | How thick the ceiling slab is |
| A Group Per Room | Boolean | False | Give each room its own group, so the rooms come out as separate parts. The floor of a room is what belongs to it - walls and roof are shared with what is on the other side of them |
Corridors and walls: a perfect maze, or a braided one with loops
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same maze |
| Corridor | Int | 3 | How wide a corridor is, in voxels |
| Wall | Int | 1 | How thick a wall is, in voxels |
| Wall Height | Int | 6 | How tall the walls stand above the floor |
| Floor | Int | 1 | How thick the floor is. 0 leaves the corridors open below |
| Braid | Float | 0.0 | Open this fraction of the dead ends, putting loops back in. 0 is a perfect maze with exactly one route through |
| Entrance and Exit | Boolean | True | Cut a way in and a way out through the outer wall |
Monuments
Section titled “Monuments”Pyramids, temples, pagodas, stone circles, obelisks and rock arches
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always build the same |
| Monument | Enum: Stepped Pyramid, Smooth Pyramid, Temple, Pagoda, Stone Circle, Obelisk, Rock Arch | STEPPED | What to build |
| Arrangement | Enum: One, Row | ONE | One, or a row getting smaller |
| Count | Int | 3 | How many in a row |
| Size | Float | 0.5 | How wide the biggest one is, as a fraction of the model |
| Weathered | Float | 0.0 | How broken with age it is |
| Stone | Int | 44 | Palette index for the stone |
| Trim | Int | 252 | Palette index for steps, ledges and lintels |
| Roof | Int | 101 | Palette index for roofs and eaves |
| Accent | Int | 53 | Palette index for stairs, capstones and shrines |
Ore Veins
Section titled “Ore Veins”Seams of ore colour threaded through the rock
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same veins |
| Paint | Enum: Whole Model, Active Group | MODEL | The whole model, or only the active group |
| Spacing | Float | 20.0 | Roughly how far apart the seams run, in voxels |
| Thickness | Float | 1.5 | How thick a seam is, in voxels |
| Ores | Int | 3 | How many kinds of ore |
| Ore 1 | Int | 11 | Palette index for the first ore |
| Ore 2 | Int | 94 | Palette index for the second ore |
| Ore 3 | Int | 115 | Palette index for the third ore |
| Share | Float | 1.0 | How much of the veins are the first ore |
| Share | Float | 1.0 | How much of the veins are the second ore |
| Share | Float | 0.5 | How much of the veins are the third ore |
Paths & Fields
Section titled “Paths & Fields”Worn tracks joining points on the ground, or a patchwork of fields
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same layout |
| Style | Enum: Paths, Fields | PATHS | Tracks between points, or a patchwork of fields |
| Where | Enum: Whole Model, Active Group, Selection | MODEL | Paint over the whole model, the active group, or the selected voxels |
| Points | Int | 8 | How many places the paths join up, spread evenly over the ground |
| Exits | Int | 3 | How many paths run off the edge of the area, so the tracks lead somewhere |
| Loops | Float | 0.3 | How many short cross-links are added, so the network is not a bare tree |
| Width | Float | 3.0 | How wide a path is, in voxels |
| Wander | Float | 0.3 | How much a path strays from the easiest line |
| Worn Down | Boolean | True | Sink the path a voxel into the ground |
| Path | Int | 95 | Palette index for the path |
| Field Size | Float | 20.0 | Roughly how wide a field is, in voxels |
| Coverage | Float | 0.7 | What fraction of the flat ground is farmed |
| Hedgerows | Float | 0.1 | How wide the unfarmed strips between fields are |
| Field A | Int | 131 | Palette index for one kind of field |
| Field B | Int | 125 | Palette index for another kind of field |
| Field C | Int | 47 | Palette index for a third kind of field |
| Furrows | Boolean | True | Stripe each field with furrows |
| Furrow | Int | 137 | Palette index for the furrows, when they do not match the crop |
| Match Crop | Boolean | True | Draw each field’s furrows in a darker shade of its own crop colour, taken from the palette, instead of one furrow colour for every field |
| Row Spacing | Int | 4 | A furrow line every this many voxels |
| Ground If Empty | Boolean | True | On an empty model, lay a slab of ground to paint on |
| Ground | Int | 161 | Palette index for that ground |
Picture
Section titled “Picture”Turn an image into voxels: a flat picture, or a solid carved from front, side and top views
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Make | Enum: Flat Picture, Carve From Views | PLANE | Whether the picture becomes a slab or cuts a solid |
| Picture | Pointer | The image to turn into voxels | |
| Standing In | Enum: Front (XZ), Side (YZ), Top (XY) | FRONT | Which way the picture faces |
| Thickness | Int | 1 | How many voxels deep the picture is extruded |
| Front | Pointer | Seen down -Y: across is X, up is Z | |
| Side | Pointer | Seen down -X: across is Y, up is Z | |
| Top | Pointer | Seen from above: across is X, up is Y | |
| Colour From | Enum: First View, Front (XZ), Side (YZ), Top (XY) | AUTO | Which view paints the solid. The others decide its shape but not its colour - a voxel can only have one |
| Width | Int | 32 | Voxels across. Everything else follows from it and the picture’s own proportions, so a picture never comes out stretched |
| Sampling | Enum: Nearest, Average | NEAREST | How pixels are shared out between voxels |
| Mirror | Boolean | False | Flip the picture left to right. Worth reaching for on the side view, which is seen from -X and so runs the opposite way round from how it was probably drawn |
| On The Floor | Boolean | True | Stand the picture on the bottom of the grid rather than centring it in Z, so it lands where terrain would |
| Offset | Int | (0, 0, 0) | Nudge the picture off centre, in voxels |
| Alpha Cutoff | Float | 0.5 | Pixels less opaque than this leave a hole. 1.0 keeps only what is fully opaque |
| Key Colour | Boolean | False | Also cut out one colour, for a picture with no alpha to read - which is every JPEG and most screenshots |
| Key | Float | (0.0, 1.0, 0.0) | The colour to treat as background |
| Tolerance | Float | 0.1 | How far from the key colour still counts as background |
| Colours | Enum: Match Palette, Build From Picture | MATCH | Where the voxels’ palette indices come from |
| Colour Count | Int | 32 | How many palette entries the picture is reduced to. Only entries no voxel is using are written |
Planet
Section titled “Planet”A round world with continents, seas and ice caps
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same world |
| Size | Float | 0.8 | The world’s diameter, as a fraction of the model |
| Relief | Float | 0.12 | How high the mountains stand, as a fraction of the radius |
| Continent Size | Float | 0.35 | How big the continents are, as a fraction of the radius |
| Seas | Boolean | True | Fill the low ground with sea |
| Sea Level | Float | 0.5 | How much of the land the sea covers |
| Crust | Int | 6 | Fill only this many voxels under the surface. 0 fills it solid |
| Ice | Int | 246 | Palette index for poles and peaks |
| Rock | Int | 251 | Palette index for mountains and under the soil |
| Grass | Int | 161 | Palette index for the lowlands |
| Sand | Int | 45 | Palette index for the shores |
| Sea | Int | 164 | Palette index for the sea’s surface |
| Deep Sea | Int | 171 | Palette index for the deep sea |
| Core | Int | 253 | Palette index for the rock deep inside |
Platform
Section titled “Platform”A flat-topped block of land with cliff sides - one arena-sized piece of level
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same platform |
| Shape | Enum: Square, Round, Irregular | SQUARE | The outline of the block |
| Size | Float | 0.8 | How much of the grid’s shorter side the block spans |
| Corners | Float | 0.25 | How far the corners are rounded off |
| Ragged Edge | Float | 0.15 | How much the edge wanders, on the Irregular shape |
| Altitude | Float | 0.62 | Where the walking surface sits, as a fraction of the grid |
| Body | Float | 0.3 | How thick the straight-sided body is, as a fraction of the grid |
| Taper | Float | 0.6 | How far below the body the underside narrows to its point |
| Roughness | Float | 0.5 | How ragged the underside is |
| Soil | Int | 2 | How many voxels of soil lie under the grass |
| Courses | Int | 4 | How tall a course of the cliff is, in voxels |
| Grass Tiles | Int | 4 | How wide a tile of the grass pattern is, in voxels |
| Grass Lip | Int | 3 | How far the grass hangs over the cliff edge |
| Grass | Int | 161 | Palette index for the top |
| Grass 2 | Int | 125 | Palette index for the second shade of grass |
| Soil | Int | 131 | Palette index for the soil under the grass |
| Cliff | Int | 45 | Palette index for the blocks of the cliff |
| Cliff 2 | Int | 9 | Palette index for the second shade of cliff block |
| Seams | Int | 95 | Palette index for the lines between the courses |
| Deep Rock | Int | 253 | Palette index for the rock low down and underneath |
A river carved across the ground from one side to the other
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same river |
| Direction | Enum: Along X, Along Y | X | Which sides of the model the river runs between |
| Width | Float | 6.0 | How wide the water is, in voxels |
| Depth | Int | 3 | How deep the channel is in the middle, in voxels |
| Banks | Float | 4.0 | How far either side the ground is cut back to the water |
| Meander | Float | 0.5 | How much the river winds. 0 takes the lowest line |
| Water | Int | 164 | Palette index for the water’s surface |
| Deep Water | Int | 171 | Palette index for the water under the surface |
| Bank | Int | 45 | Palette index for the cut banks |
| River Bed | Int | 131 | Palette index for the bottom of the channel |
| Ground If Empty | Boolean | True | On an empty model, lay a slab of ground to cut the river into |
| Ground | Int | 161 | Palette index for that ground |
Boulders - one hero rock, or a field of them over the surface
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same rocks |
| Arrangement | Enum: One Rock, Boulder Field | FIELD | One boulder in the middle, or a field of them |
| Spacing | Int | 14 | Voxels between rocks. There is at most one in each square this wide |
| Density | Float | 0.7 | What fraction of the possible spots get a rock. Turning this down removes rocks and leaves the rest as they were |
| Jitter | Float | 1.0 | How far each rock may wander inside its own square |
| Max Slope | Int | 3 | Steepest ground to rest on, as the height step to the next voxel along |
| From | Float | 0.0 | Lowest ground to rest on, as a fraction of grid height |
| To | Float | 1.0 | Highest ground to rest on, as a fraction of grid height |
| Size | Float | 10.0 | How wide a rock is, in voxels |
| Size Variation | Float | 0.4 | How much the size of each rock may differ from the rest |
| Squash | Float | 0.7 | How tall a rock is for its width. 1 is as tall as it is wide, lower is a flatter slab |
| Roughness | Float | 0.35 | How far the surface is pushed in and out. 0 is a smooth egg |
| Facets | Int | 3 | Flat faces cut into each rock. A few make it read as stone; none leaves it rounded |
| Strata | Int | 0 | Paint a band of the second colour every this many voxels up the rock. 0 for one colour throughout |
| Sink | Int | 1 | Voxels to bury each rock by, so it sits in the ground |
| Random Turns | Boolean | True | Turn each rock a random quarter turn about Z |
| Rock | Int | 251 | Palette index for the rock |
| Strata | Int | 253 | Palette index for the strata bands |
Scatter
Section titled “Scatter”Plant library shapes over the model - trees, rocks, flowers, props
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Shapes | Enum: Folder, Chosen Shapes | FOLDER | Where the shapes to plant come from |
| Folder | String | preset:Nature/Trees | The folder to take shapes from, subfolders included |
| shapes | Collection | ||
| Active Shape | Int | 0 | |
| Seed | Int | 1 | The same seed and settings always plant the same things |
| Spacing | Int | 12 | Voxels between plantings. There is at most one in each square this wide, so nothing lands on top of anything else |
| Jitter | Float | 1.0 | How far each planting may wander inside its own square. 0 is a regular grid - an orchard rather than a wood |
| Density | Float | 1.0 | What fraction of the possible spots to use. Turning this down removes plantings and leaves the rest where they were |
| Plant On | Enum: Top, All Floors | TOP | The top of the model, or every floor with room above it |
| Plant In | Enum: Whole Model, Selection | MODEL | Where on the model plantings are allowed |
| Max Slope | Int | 2 | Steepest ground to plant on, as the height step to the next voxel along. 0 plants only on the flat |
| From | Float | 0.0 | Lowest ground to plant on, as a fraction of grid height |
| To | Float | 1.0 | Highest ground to plant on, as a fraction of grid height |
| Sink | Int | 0 | Voxels to bury each shape by, so it sits in the ground rather than on it |
| Size | Int | 8 | Size a procedural shape is generated at. A saved shape ignores this and comes in at the size it was made |
| Size Variation | Float | 0.0 | How much the size of each planting may differ from the rest |
| Random Turns | Boolean | True | Turn each shape a random quarter turn about Z. Free and exact on a voxel grid - no voxel moves off the lattice |
| Random Mirror | Boolean | False | Mirror half of them, for shapes that are not symmetrical |
| Keep Shape Colours | Boolean | True | Plant each shape in the colours it was saved with. Turn off to paint them all one colour |
| Colour | Int | 1 | Palette index to paint the shapes when not keeping theirs |
A whole scene in one press - ground, rocks, trees, weathering, water and sky, from a preset
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Scene | Enum: Highlands, Island, Canyon, Forest, Winter, Ruins, Swamp, Desert Oasis, Volcano, River Valley, Crystal Cavern, Mine, Mushroom Grotto, Village, Farm, Harbour, Graveyard, Floating Islands, Castle, Modern City, Space, Tiny Planet, Sci-fi Colony, Coral Reef, Pirate Cove, Frozen Lake, Jungle Temple, Egyptian Desert, Stonehenge Moor, Zen Garden, Mountain Pass, Walled Town, Battlefield | HIGHLANDS | What kind of scene to build |
| Seed | Int | 1 | One number for the whole scene: every step is seeded from it |
| Sea Level | Float | 0.15 | How high the water comes, as a fraction of the grid. 0 for none |
| Vegetation | Float | 0.6 | How many trees and vines. 0 for none |
| Rocks | Float | 0.5 | How many rocks. 0 for none |
| Clouds | Boolean | True | Put a few clouds in the sky |
| Weathering | Boolean | True | Snow, moss and grime, as the scene calls for |
| Cutaway | Boolean | True | Open the front of underground scenes, so you can see into the caves |
| Water Colours | Boolean | True | Give the water palette entries a water surface, so the sea renders as water |
A galleon, sloop or rowboat afloat on the water, or wrecked below it
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same ship |
| Ship | Enum: Galleon, Sloop, Rowboat | GALLEON | What kind of ship |
| Length | Float | 0.35 | How long the ship is, as a fraction of the model |
| Wreck | Boolean | False | Lay it broken on the seabed instead |
| Water | Int | 164 | The water’s surface colour, to find the sea |
| Deep Water | Int | 171 | The deep water’s colour |
| Hull | Int | 95 | Palette index for the hull |
| Deck | Int | 137 | Palette index for the deck |
| Masts | Int | 137 | Palette index for masts and spars |
| Sails | Int | 247 | Palette index for the sails and windows |
| Trim | Int | 101 | Palette index for the rails |
Sky Islands
Section titled “Sky Islands”Floating islands with grassy tops, rocky undersides and waterfalls
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same islands |
| Island Size | Float | 40.0 | Roughly how wide an island is, in voxels |
| Density | Float | 0.6 | What fraction of the sky holds an island |
| Gap | Float | 0.12 | How far apart neighbouring islands stay |
| Altitude | Float | 0.6 | How high the island tops sit, as a fraction of the grid |
| Height Variation | Float | 0.12 | How much higher or lower each island may sit |
| Underside | Float | 0.35 | How far the rock under an island hangs, as a fraction of the grid |
| Roughness | Float | 0.5 | How ragged the undersides are |
| Waterfalls | Boolean | True | Pour water off the edge of some islands |
| Waterfall Chance | Float | 0.5 | What fraction of islands have a waterfall |
| Grass | Int | 161 | Palette index for the island tops |
| Soil | Int | 131 | Palette index for the soil under the grass |
| Rock | Int | 251 | Palette index for the undersides |
| Water | Int | 164 | Palette index for the waterfalls |
Surface Pattern
Section titled “Surface Pattern”Bricks, tiles, checker and weave, painted over the model you have
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | Change for a different scatter of weathered cells |
| Scope | Enum: Whole Model, Active Group | MODEL | Which voxels get the pattern |
| Pattern | Enum: Bricks, Tiles, Checker, Stripes, Diagonal, Weave, Raked Sand | BRICKS | Which pattern to paint |
| Facing | Enum: Floor (Z), Wall (Y), Wall (X) | 1 | The plane the pattern lies in. A pattern is flat and runs right through the model, so a wall shows the same courses on both faces |
| Width | Int | 6 | Voxels across one brick, tile or stripe |
| Height | Int | 3 | Voxels up one course |
| Grout | Int | 1 | Voxels of the second colour between them |
| Row Offset | Float | 0.5 | How far each course is shifted from the one below, as a fraction of a brick. Half is a running bond |
| Weathering | Float | 0.0 | Fraction of whole bricks that take the grout colour instead, for a wall that is not brand new |
| Keep Model Colour | Boolean | True | Leave the bricks whatever colour they already are and only paint the grout. This is usually what you want: it puts mortar lines on the wall you have already built |
| Pattern | Int | 1 | Palette index for the bricks, tiles or stripes |
| Grout | Int | 253 | Palette index for what lies between them |
Terrain
Section titled “Terrain”Rolling ground from noise, placed peaks, or a heightmap image
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same landscape |
| Hill Size | Float | 16.0 | How wide a hill is, in voxels. The one setting measured in voxels rather than as a fraction of the grid |
| Ground Level | Float | 0.15 | Height the lowest ground sits at, as a fraction of the grid. Black in a heightmap lands here |
| Hill Height | Float | 0.35 | How far the highest point rises above the ground level, as a fraction of the grid. With a heightmap this is the vertical scale: what pure white is worth |
| Detail | Int | 4 | Layers of noise. Each one adds detail half the size of the last |
| Roughness | Float | 0.5 | How much the fine layers count. Low is rolling hills, high is broken rock |
| Terraces | Int | 0 | Flatten the height into this many steps. 0 leaves it smooth. Shapes generated noise; never applied to a heightmap |
| Island | Float | 0.0 | Sink the ground towards the grid walls, so it ends in shoreline rather than running off the edge. Shapes generated noise; never applied to a heightmap |
| Wind | Float | 30.0 | Which way the wind blows, in degrees. Dune crests lie across it |
| Crater Size | Float | 0.28 | How wide the crater is, as a fraction of the volcano |
| Crater Depth | Float | 0.35 | How far the crater floor sits below its rim |
| Basin | Float | 0.0 | Dig a round hollow in the middle, this fraction of the grid deep - somewhere for a lake. Never applied to a heightmap |
| Basin Size | Float | 0.3 | How wide the basin is, as a fraction of the grid |
| Crust | Int | 0 | Fill only this many voxels below the surface, leaving the ground hollow. 0 fills solid to the floor |
| Skin | Int | 1 | How many voxels down the surface colour reaches |
| Source | Enum: Noise, Peaks, Dunes, Volcano, Heightmap | NOISE | Where the height of each column comes from |
| Peakiness | Float | 1.0 | Push the low ground down while leaving the summits alone. At 1 the whole map is hills; at 3 it is mountains standing in flat ground |
| Peaks | Int | 2 | How many mountains to place. Noise cannot be asked this |
| Peak Radius | Float | 0.3 | How wide the foot of each mountain is, as a fraction of the grid |
| Slope | Float | 1.4 | Shape of the side. 1 is a straight cone; higher is a rounded shoulder over a steeper foot |
| Spread | Float | 0.28 | How far the summits sit from the middle of the grid |
| Variation | Float | 0.25 | How much shorter the lesser summits may come out |
| Detail Noise | Float | 0.06 | Noise mixed into the slopes so they are not billiard smooth |
| Heightmap | Pointer | Image read as height. Bright is high | |
| Channel | Enum: Luminance, Red, Green, Blue, Alpha | LUMINANCE | Which channel of the image carries the height |
| Fit | Enum: Stretch, Fit, Crop | STRETCH | How an image that is not the grid’s shape is placed on it |
| Invert | Boolean | False | Read dark as high instead of bright |
| Black Point | Float | 0.0 | Image value that becomes the ground level |
| White Point | Float | 1.0 | Image value that becomes the highest point |
| Smooth | Int | 0 | Soften the image before reading it. An 8 bit heightmap has 256 steps, which terrace visibly on a tall grid |
Branching trees, standing on whatever surface the model already has
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same trees |
| Count | Int | 1 | How many trees to plant. More than one scatters them over the model’s surface; one stands in the middle |
| Height | Float | 24.0 | How tall a tree is, in voxels |
| Variation | Float | 0.25 | How much the heights differ from one tree to the next |
| Trunk | Float | 2.0 | Radius of the trunk, in voxels |
| Branch Levels | Int | 3 | How many times a branch forks. 0 is a bare trunk |
| Branch Angle | Float | 40.0 | How far a branch turns away from the one it grew from |
| Length Ratio | Float | 0.72 | How much shorter each branch is than its parent |
| Taper | Float | 0.62 | How much thinner each branch is than its parent |
| Lean | Float | 0.15 | How far from upright the whole tree tilts |
| Canopy | Float | 4.0 | Radius of the leaf blob at each branch tip |
| Bare | Boolean | False | Grow the branches with no leaves on them |
Growth that clings to the model - hanging from ledges, climbing the walls, or creeping over the ground
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always grow the same vines |
| Style | Enum: Hanging, Climbing, Creeping | HANG | Where the vines start and which way they grow |
| Spacing | Int | 8 | Voxels between vines. One vine at most in each square this wide - measured along a wall for the wall styles |
| Density | Float | 1.0 | What fraction of the possible starts grow a vine. Turning this down removes vines and leaves the rest where they were |
| Jitter | Float | 1.0 | How far a creeping vine’s start may wander inside its square |
| Length | Int | 24 | How many voxels a main stem grows. Forks are shorter |
| Wander | Float | 0.4 | How much a vine strays from its direction. 0 is a straight line, 1 goes wherever it likes |
| Branching | Float | 0.15 | How often a vine forks off a shorter side vine |
| Leaves | Boolean | True | Hang leaves on the stem, in the leaf colour |
| Leafiness | Float | 0.5 | How many of the stem’s voxels carry a leaf beside them |
| Thickness | Int | 1 | Thicken the first part of each stem by the free cells beside it. 1 is a single strand; more makes a root or an old trunk |
| Dangle | Int | 4 | How far a hanging vine may drop through the air past a ledge before it stops. 0 keeps it on the wall |
| Leaves | Int | 161 | Palette index for the leaves |
| Stem | Int | 137 | Palette index for the stems |
Walls & Fences
Section titled “Walls & Fences”A castle wall, field wall, palisade, fence or hedge round the model
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always give the same wall |
| Style | Enum: Castle Wall, Dry Stone, Palisade, Fence, Hedge | CASTLE | What kind of wall |
| Where | Enum: Model Edge, Ring | EDGE | Round the edge, or a ring round the middle |
| Ring Size | Float | 0.7 | How big the ring is, as a fraction of the model |
| Margin | Int | 1 | How far in from the edge |
| Height | Int | 8 | How tall the wall is, in voxels |
| Thickness | Int | 2 | How thick the wall is, in voxels |
| Tower Spacing | Int | 24 | Voxels between a castle wall’s towers |
| Gate | Int | 4 | How wide the gate in the -Y side is. 0 for none |
| Wall | Int | 251 | Palette index for the wall |
| Top | Int | 252 | Palette index for the top course, rails and caps |
| Towers | Int | 253 | Palette index for a castle wall’s towers |
Water Level
Section titled “Water Level”Flood every empty space below a waterline - sea, lakes and puddles
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Water Level | Float | 0.35 | Where the surface sits, as a fraction of the grid height, so the same number reads the same on a 40 and a 512 model |
| Depth | Int | 0 | How many voxels deep the water goes below its surface. Zero fills all the way to the floor; a few voxels is enough for an ocean nobody swims in, and far cheaper |
| Surface Skin | Int | 1 | How many voxels at the top take the surface colour |
| Frozen | Boolean | False | Freeze the top of the water into ice |
| Ice Depth | Int | 2 | How thick the ice is, in voxels |
| Ice | Int | 116 | Palette index for the ice |
| Fill | Enum: Everywhere, Middle Hollow | ALL | Where the water goes |
Weathering
Section titled “Weathering”Snow on the tops, moss on the shaded sides and grime in the crevices, painted over the model you have
| Option | Type | Default | What it does |
|---|---|---|---|
| Name | String | Unique name used in the code and scripting, can be re-defined in Python sub-classes if needed | |
| Seed | Int | 1 | The same seed and settings always weather the same way |
| Weather | Enum: Whole Model, Active Group | MODEL | Whether to weather the whole model or only the active group |
| Snow | Boolean | True | Paint snow on the tops, above the snow line |
| Snow Colour | Int | 248 | Palette index for the snow |
| Snow Line | Float | 0.5 | How high the snow starts, as a fraction of the grid height. 0 snows everywhere |
| Snow Cover | Float | 0.8 | How much of the snowy ground is covered. 1 leaves no gaps |
| Snow Depth | Int | 1 | How many voxels down from the top the snow reaches |
| Drift Size | Float | 10.0 | How big the patches of snow and bare ground are, in voxels |
| Moss | Boolean | True | Paint moss on the sides and under the overhangs |
| Moss Colour | Int | 167 | Palette index for the moss |
| Facing | Enum: All Sides, North, South, East, West, Tops | NORTH | Which sides the moss grows on. North is +Y |
| Moss Cover | Float | 0.5 | How much of those sides is covered |
| Moss Height | Float | 1.0 | Highest the moss grows, as a fraction of the grid height. 1 lets it grow everywhere |
| Patch Size | Float | 6.0 | How big the patches of moss are, in voxels |
| Grime | Boolean | True | Darken the crevices and inside corners |
| Grime Colour | Int | 254 | Palette index for the grime |
| Grime | Float | 0.8 | How open a crevice may be and still collect grime. 1 reaches almost to the flat faces |
| Crevice Size | Int | 2 | How far around each voxel to look for enclosing walls |