Skip to content
Contractsv1.7.0

Cloning

⭐ Premium

Requires the player to take cuttings (clones) from the specified plants. Counts the number of clones produced.

{
"type": "Cloning",
"title": "Take hemp cuttings",
"description": "",
"amountRequired": 20,
"conditions": {},
"items": ["clone.hemp"],
"genes": []
}
FieldTypeDescription
typestringExactly 'Cloning'.
titlestringShort, human-readable name. Must not be empty.
descriptionstringA blurb of 1 to 3 sentences. May be empty if the title is self-explanatory.
amountRequiredinteger (≥ 1)How many cuttings the player must take.
cooldownobject | nullOptional pacing limit on how fast progress adds up: at most maxAmount units of progress count in any sliding window of windowSeconds. Absent means progress adds up freely. While the window's budget is used up, further progress is ignored and the player sees a countdown to the next available moment.
burstobject | nullOptional clustering requirement: actions only count when they arrive clustered, at least amount units within one trailing window of windowSeconds forming one burst. When present, amountRequired counts completed bursts instead of raw actions. Actions that age out of the window without completing a burst never count. Absent means no clustering.
conditionsmapOptional conditions that restrict when progress counts. Progress is recorded only when the objective's main requirement and all of these conditions are met. Use an empty map for none.
hideDetailsbooleanWhen true, hides this objective's in-game condition strip and details popup, so the description is the only explanation players get. Title, description and progress still show. Absent means false.
itemsstring[]Clone item shortNames to create (e.g. clone.corn, clone.hemp). Empty = any clone.
genesobject[]Optional gene filter: a list of { mode, composition } requirements where a plant counts if it matches at least one of these (OR). An empty or absent list (the default) counts any plant. composition is 1-6 letters from G/Y/H/W/X (Growth, Yield, Hardiness, Water, Empty) matched as a multiset (order ignored), and mode is 'Exact' (the full six-slot genome, short compositions padded with Empty) or 'AtLeast' (at least the listed count of each named type).
  • Progress increments by the number of clones a cutting produces. That count scales with the plant’s genetics: better Yield genes yield more clones per cutting, so a single cutting can advance the objective by more than one.
  • See also Harvest for taking the yield and Plant for planting seeds.

The optional genes field restricts the objective to specific gene compositions. It is a list of requirements where any matching requirement counts (OR). An empty or absent list counts any gene composition (the default).

Each requirement is { mode: "Exact" | "AtLeast", composition: string }:

  • composition is 1 to 6 letters drawn from G (Growth), Y (Yield), H (Hardiness), W (Water), X (Empty). Order is ignored, only the count of each letter matters, so GGYYYY, YGYGYG, and YYYYGG are the same requirement.
  • mode controls how the composition is matched:
    • Exact (default): the plant’s full six-slot genome must equal the composition. A composition shorter than six letters pads the remaining slots with X (Empty), so Exact "GGYY" means exactly GGYYXX. (2 Growth, 2 Yield, 2 Empty in any order)
    • AtLeast: the plant must have at least the listed count of each named gene type; the other slots can be anything. AtLeast "YYYY" counts any plant with 4 or more Yield genes.
{
"type": "Cloning",
"title": "Clone elite corn",
"amountRequired": 20,
"items": ["clone.corn"],
"genes": [{ "mode": "AtLeast", "composition": "YYYYY" }]
}

A Cloning objective matches against the parent plant’s genes, the plant you take the cutting from.