Props & Details
intermediate featureBeyond buildings and damage, the generator dresses the city with props, fortifications, infrastructure, vegetation and graffiti. Each is an independent feature toggle (see Generator Settings).
Fortifications
- Perimeter wall with gates at street crossings and watchtowers (slits and merlons) at corners and gates.
- Gate checkpoints — sandbag nests on both sides, anti-tank hedgehogs and striped barriers over an oil drum.
- River bridges — concrete decks with asphalt roadway, railings, paired piers to the riverbed and causeway approaches on both banks.
Props
Wrecked cars (on the asphalt, clearance-checked), dumpsters, wooden benches, oil drums and sandbag stacks; a street-market souk; a stone well in the old town; and lattice tower cranes with counter-jibs over the skyline.
Power lines and cables
Street power poles carry catenary cables strung pole-to-pole along street centrelines; both endpoints exist by construction, so cables never dangle into space. Building cables cross narrow alleys facade-to-facade, some hung with laundry. Poles that would fall inside a crater are dropped from the plan.
Vegetation
Dry scrub, weeds, date palms and olive trees reclaim the ruins, denser along the seam and thinning with distance. All vegetation is bespoke content (no third-party stock assets) and is clearance-checked so it never grows inside a building footprint.
Graffiti
Texture-stamped graffiti marks facades, interiors, rooftops and the perimeter wall, with a density control. The stamp sets live in the Textures and Rooftop Textures foldouts of the generator.
How props are built (internal code map)
Every prop, vegetation piece and fortification is native voxel content: there are no imported meshes or prefabs. Each shape is first drawn as a list of marks in micro-voxel space (Voxel Play 4 subdivides every voxel into a 16×16×16 grid), then rasterized into per-voxel MicroVoxels stamps and written straight into the world. That is why props are as destructible and collapsible as the buildings around them.
Cached vs. procedural. Most shapes are cached templates, built once at load and flagged isShared, then reused by every instance: all the street props (wrecked cars, dumpsters, oil drums, benches, sandbag stacks, tower cranes, the stone well, checkpoint hedgehogs and barriers, rooftop dishes) plus the eight date-palm variants. Olive trees are the exception — each one is generated from scratch (gnarled forked trunk, capsule branches, dithered leaf pads) and then run through a rooted-connectivity flood fill so no leaf floats free of the tree.
Placement. During chunk generation the scatter passes walk each chunk with a deterministic per-chunk RNG, so a given seed always rebuilds the same city, density-weighted toward the front-line seam. Before a template is stamped it is clearance-checked against existing voxels and, for trees, against the plan’s building footprints, so nothing grows through a wall or floats over a crater.
If you open the source, this is where the pieces live:
CombatZoneGenerator.Shapes.cs— the static shape library (cars, dumpsters, drums, benches, sandbags, cranes, wells, market stalls, hedgehogs, barriers, dishes) and their rasterizers.CombatZonePalmShapes.cs— the eight shared date-palm templates.CombatZoneGenerator.Props.cs— scatter and set-piece placement (ScatterProps, checkpoints, cranes, wells, rooftop props, rubble).CombatZoneGenerator.Vegetation.cs— palm and olive scatter and sculpting (ScatterTrees,SculptPalm,SculptOlive).Sculptor.cs(World Play) — the thin wrapper that turns those stamps into Voxel Play calls.
The sculpting layer sits on a handful of Voxel Play 4 entry points, all reached through the environment singleton:
| Voxel Play 4 API | What Combat Zone uses it for |
|---|---|
MicroVoxels | The 16³ per-voxel sub-grid that every shape is rasterized into. |
env.VoxelPlace(…, microVoxels) | Writes a shape into the world. The FillMicroSet / FillMicroMergeSet helpers place many cells at once, merging when a multi-material prop shares cells across material passes. |
env.GetVoxel | Clearance checks — is the target cell empty, is there solid footing below. |
env.GetTerrainHeight | Anchors a prop to the ground when a chunk-local ground level is not yet available. |
env.SetVoxelOnFire | Anchors flames to burning wrecks and trash drums. |
Suggest an improvement
Help us improve this documentation page.