A recipe is a list of primitive parts — cones, spheres, lobes, boxes,
cylinders, bent segments, fronds, rocks — each with a size, an offset, a
colour, and a role, merged into one vertex-coloured geometry and fitted to
an overall height. It is what the built-in plants were already doing in
code (see ScatterShapes.ts), written down so a map builder can compose a
new plant in an editor, and so the shape travels in a save file or a
.hexpack alongside the descriptor that places it.
Roles matter beyond the picture. attachSeasonalTint finds foliage by
its colour, and recipeFoliageColor hands it the first canopy
part's colour as the summer reference, which is how a recipe's broadleaf
turns gold in autumn while its trunk does not.
The repeat modifier stamps a part around the Y axis — fronds around a
palm's crown, branches around a dead tree, leaves around an agave — and
keeps the recipe small: a sparse tier can lower the count rather than
scale a copy.
Scatter shapes as data.
A recipe is a list of primitive parts — cones, spheres, lobes, boxes, cylinders, bent segments, fronds, rocks — each with a size, an offset, a colour, and a role, merged into one vertex-coloured geometry and fitted to an overall height. It is what the built-in plants were already doing in code (see
ScatterShapes.ts), written down so a map builder can compose a new plant in an editor, and so the shape travels in a save file or a.hexpackalongside the descriptor that places it.Roles matter beyond the picture.
attachSeasonalTintfinds foliage by its colour, and recipeFoliageColor hands it the firstcanopypart's colour as the summer reference, which is how a recipe's broadleaf turns gold in autumn while its trunk does not.The
repeatmodifier stamps a part around the Y axis — fronds around a palm's crown, branches around a dead tree, leaves around an agave — and keeps the recipe small: a sparse tier can lower the count rather than scale a copy.