Shapes

A shape gives a flat cloud band a form, from a preset or from steps you build. It is the shape section of a layer file in plugins/MythicSeasons/cloud-layers/ (see Layers), and it only works on a band, a layer with a thickness of 0 or more.

  • A shaped band is a whole number of voxel-height rows, starting on the first row at or above its floor, and ignores noise-scale, noise-scale-y and noise-seed.
  • In the layer file, shape numbers must be plain numbers. A quoted value or an operator falls back to the default and an out-of-range number moves to the nearest end, both with a warning.
  • Numbers with Yes in the Season column can also change per season, world or profile, see Numbers a season can change.

How a shape draws

At every spot the form may fill a share of the sky:

share = cover x coverage x the larger of (weather strength, patch)

  • The weather strength (0 to 1) comes from the layer's reading through forms-at and full-at, see Layer Types.
  • Patches fill their whole share whatever the weather. They keep cirrus in a calm sky and are all a none layer draws.

Shape settings

Keys under shape. Lengths are in blocks, and a voxel in the ranges is the layer's voxel-size.

Option Default Range Season What it does
preset none fibrous, hooked, rippled, veil No A built-in form (not case-sensitive), see Presets. With steps too, the preset wins with a warning.
steps none No Named steps that build your own form, see Building a form from steps.
cover 0.3 0 to 1 Yes Share of the sky filled at full weather strength or in a patch, times the layer's coverage.
angle 0 -360 to 360 Yes Turns the form away from the wind direction, before snap.
snap 90 0 to 180 No Rounds the direction to a multiple of this many degrees (90: north-south or east-west). 0 keeps the exact direction, with stepped edges and more cloud entities.
seed 1 whole number No Picks another pattern. A quoted number warns and uses 1.
patches.share 0 0 to 1 Yes Share of the sky that patches take. 0 = no patches.
patches.size 2600 8 voxels to 65536 Yes Larger gives fewer, wider patches.
patches.edge 0.3 0 to 1 Yes Softness of the patch edges. 0 = hard.
vertical flat flat, dome No flat fills every row alike, dome thins toward the top.
avoid none layer names No Layers whose cloud the band keeps out of, see below.
drift-scale 1 0 to 4 No Speed of the pattern and patches compared with their wind (0 = still, the shipped high layers use 0.25).
  • avoid takes a layer name or a list (avoid: [cumulus]) of layers that follow the simulated clouds (thickness: -1). The band is cleared where such a layer has cloud at the band's height, at or above that layer's floor (min-y and ground-clearance).
  • A layer missing from the current clouds.layers clears nothing. A flat band, a name without a file or the layer itself is ignored with a warning.
  • A none layer with a shape and no patches.share draws nothing, without a warning.
type: none
opacity: 0.25
visible-from-inside: false
color: "EEF1F6"
voxel-height: 8
thickness: 8
min-y: 200
shape:
  preset: veil
  cover: 0.7
  patches:
    share: 1
    size: 4000
  avoid: [cumulus]

The patches cover the whole sky, so this veil ignores the weather.

Direction and drift

The form lies along a line: the world's forcing.wind.direction (without the slow swings of the upper wind) plus angle, rounded to a multiple of snap. 0 is east, 90 south, 180 west and 270 north, see Forcing. Streaks run along the line, rows across it, and hook tails trail upwind.

  • The pattern slides along its line and the patches move with the full wind, both times drift-scale.
  • The layer file picks the wind that moves a band: at clouds.outflow.wind-y with top-clearance, otherwise at the ground with ground-clearance, otherwise at the band's middle (min-y plus half of thickness).
  • Drift is not saved. After a restart the patterns start from their original place.

Presets

Preset Form Shipped layer
fibrous Long streaks along the wind, a little curved and ragged cirrus
hooked Mares' tails: sparse tufts in the top two rows, with tails stepping down as they trail upwind cirrus-hooks, five rows thick
rippled Rows of cloudlets across the wind none
veil A faint wide veil thinned by ragged streaks cirrostratus
Preset Key Default Range Season What it does
fibrous length 1000 4 voxels to 65536 Yes How long the streaks run.
fibrous spacing 160 2 voxels to 65536 Yes How far apart they sit.
fibrous bend 0.35 0 to 2 Yes How much they curve.
fibrous fray 0.3 0 to 1 No How ragged their edges are. 0 = smooth.
hooked spacing 240 4 voxels to 65536 Yes Distance between tufts. Tufts and tails grow with it.
hooked length 600 0.5 to 6 times the spacing in the file No Length of a tail.
hooked curl 0.8 -2 to 2 No How far a tail curls sideways.
rippled spacing 200 4 voxels to 65536 Yes Distance between the rows.
rippled size 140 2 voxels to 65536 Yes Size of the cloudlets.
rippled wobble 0.5 0 to 4 Yes How wavy the rows are.
veil size 1400 4 voxels to 65536 Yes Size of the broad sheets.
veil length 1200 4 voxels to 65536 Yes Length of the streaks that thin them.
veil spacing 200 2 voxels to 65536 Yes Distance between those streaks.
veil streaks 0.4 0 to 1 No How strongly the streaks cut in (0 = smooth sheets, 1 = mostly streaks).

A key of another preset, or a preset key without a preset, is ignored with a warning.

Building a form from steps

Without a preset, steps builds the form from named steps, run in file order. Each has a kind:

Kind Draws
noise Soft blobs
cells Separate cloudlets
waves Parallel rows across the wind
warp Nothing itself: it bends every step after it
  • The first noise, cells or waves step draws the form, and later ones join it by their combine.
  • A step named with a number or START, EARLY, MIDDLE, LATE or END is ignored with a warning.
  • A step's pattern comes from seed and its name, so renaming a step changes its pattern.
  • With a warning, an unknown kind skips the step, an unknown style, axis or combine uses the default, and a key the kind does not have is ignored.
Key Kinds Default Range Season What it does
style noise smooth smooth, billow, ridged No Soft blobs, puffs or thin crests.
style cells grains grains, blobs, comets No Round cloudlets, packed cloudlets, or tufts with tails in the band's rows like hooked.
size noise, cells 256 2 voxels to 65536 Yes Size along the wind.
across noise, cells the size 2 voxels to 65536 Yes, when the file sets it Size across the wind. Left out, it follows size, also a season's size.
octaves noise 2 1 to 5 No Layers of finer detail, rounded. 1 adds none.
jitter cells 0.9 0 to 1 No 0 keeps the cloudlets on a grid, 1 scatters them.
vary cells 0 0 to 1 No 0 makes all cloudlets alike, 1 makes some fainter.
tail cells, comets only 3 0.5 to 6 No Length of a tail, in cloudlet sizes.
bend cells, comets only 0.6 -2 to 2 No How far a tail curls sideways.
wavelength waves 160 4 voxels to 65536 Yes Distance between the rows.
angle waves 0 -360 to 360 Yes Turns the rows. 0 runs them across the wind.
wobble waves 0.5 0 to 4 Yes How wavy the rows are.
wobble-size waves 800 2 voxels to 65536 Yes Size of the pattern that makes them wavy.
size warp 512 2 voxels to 65536 Yes How wide one bend is.
amount warp 64 0 to 4096 Yes How far a bend pushes, in blocks.
axis warp both both, along, across No Whether a bend pushes along the wind, across it or both.
combine all but warp multiply set, multiply, max, add No How the step joins the form so far. The first pattern step ignores it.
weight all but warp 1 0 to 4 No Strength of the step. Only add uses it.
combine Result
set Replaces the form so far
multiply Cloud only where both are strong
max Cloud where either is strong
add Blends the step in by its weight: roughens or softens the form without moving it
type: surface-humidity
forms-at: 0.85
full-at: 1.0
opacity: 0.35
color: "DDE3E8"
voxel-size: 16
voxel-height: 8
max-distance: 256
thickness: 24
ground-clearance: 0
ground-clearance-cap: 2032
ground-grid: 32
shape:
  steps:
    twist:
      kind: warp
      size: 400
      amount: 80
    lanes:
      kind: noise
      style: ridged
      size: 700
      across: 160
    clumps:
      kind: cells
      style: blobs
      size: 220
      combine: multiply
  cover: 0.5
  vertical: dome
  seed: 12

Ground mist in long bent lanes, cut into banks.

Numbers a season can change

Under cloud-layers.<layer>.shape a season, world or profile can change these numbers:

Group Numbers
Every shape cover, angle, patches.share, patches.size, patches.edge
fibrous length, spacing, bend
hooked spacing
rippled spacing, size, wobble
veil size, length, spacing
Steps steps.<step>.size, .across (only when the file sets it), .wavelength, .angle, .wobble, .wobble-size and .amount, where the step has them

Everything else is file only: preset, steps and every other key of a step, fray, the length and curl of hooked, streaks, seed, snap, vertical, avoid and drift-scale.

atmosphere:
  cloud-layers:
    cirrus:
      coverage: "*0.75"
      shape:
        cover: 0.2
        spacing: "*1.5"
        patches:
          share:
            START: 0.1
            END: 0.4

In a season file. Where outflow is full, the cirrus streaks fill 0.15 of the sky (cover 0.2 times coverage 0.75).

  • Values take every form of Value forms, formulas included. The result is kept inside the range without a message.
  • Right after each load, a file-only key, a number the shape does not have, or a number for a layer without a shape is ignored with a warning naming the block (see Profiles).
  • During a season blend the numbers blend evenly, but the direction, angle included, switches at the halfway point.

Checking a shape

/ms atmosphere profile [world] prints a line like this under each shaped layer:

shape <name>: frame <a> deg (season wind direction plus angle <b>, snapped to <c>), up to <p>% of the sky where present

<name> is the preset, or recipe for steps. <a> is the direction of the form's line, <b> is angle, <c> is snap and <p> is cover times coverage. The shape numbers set by a season, world or profile follow, with their source. The Outflow: line at the end shows how much of the sky has storm outflow.

Console messages

Messages from a layer file start with cloud-layers/<file>.yml shape.

Message Meaning
shapes only draw on band layers (layers with a thickness); this layer keeps its plain look The layer has thickness: -1.
type noise gives a shaped layer half strength everywhere; use type none with shape.patches ... A shape on a layer of type noise.
preset '<name>' is not one of fibrous, hooked, rippled, veil; the layer keeps its plain look Unknown preset.
has no preset and no noise, cells or waves step, so it draws nothing; the layer keeps its plain look Nothing to draw.
unknown shape setting '<key>', ignoring, or '<key>' is not a setting of the <preset> preset ... A typo, or a setting of another preset.
<key> '<value>' is not a number; using <n> A quoted value or an operator in the layer file.
<key> <value> is outside <min>..<max>; using <n>, or is smaller than <n> voxels of this layer; using <m> A number out of range.
cover <x> is more than this form can fill (about <n>% of the sky); it draws that much and no more cover above what the form can fill.
features <n> blocks across are smaller than two voxels ..., rows <n> blocks apart are closer than three voxels ..., at cover <x> the <what> rows are about <n> blocks wide, thinner than a voxel ... Sizes too fine for the voxels at the layer's farthest distance, so they break into coarse dashes there. Make them larger, or lower voxel-size or max-distance.
avoid lists '<name>', but there is no cloud-layers/<name>.yml, or avoid lists '<name>', a flat band; ... A layer that avoid cannot use.
Updated Nov 11, 2026