Defines passive production (chicken → egg every 60s) or a recipe (2 wood + 1 rope → 1 shield).
production#
Defines how an item is produced: passively over time (mode passive) or through a recipe with ingredients (mode recipe). Each timer/quantity can be linked to a progression table to scale with level.
Why it matters#
Production is the backbone of clicker, farming, crafting, and idle games. Without a dedicated schema, every recipe becomes an ad-hoc JSON in the code, and balance changes require a rebuild. Here you define everything in the GDD, export to JSON, and adjust values without touching code.
Where it usually lives#
- Pages of type
📜 Recipe(one recipe per page). - Pages of type
📦 Producible Item(rare — for passive production items).
Singleton — 1 production per page.
Schema#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idYes | string | Internal ID. | |
nameYes | string | Addon name. | |
modeYes | "passive" | "recipe" | passive: produces X per interval (chicken lays egg). recipe: requires ingredients to produce. | |
outputRef | string (sectionId) | Passive mode: which item is produced. | |
minOutput | number | Passive mode: minimum amount per cycle. | |
maxOutput | number | Passive mode: maximum amount per cycle (rolled between min and max). | |
intervalSeconds | number | Passive mode: interval between cycles (accepts decimals). | |
requiresCollection | boolean | Passive mode: does the player need to collect actively, or does it go straight into inventory? | |
capacity | number | Passive mode: maximum stock that can accumulate before the player collects. | |
ingredientsYes | ProductionIngredient[] | Recipe mode: list of itemRef + quantity required. | |
outputsYes | ProductionOutput[] | Recipe mode: list of itemRef + quantity produced. | |
craftTimeSeconds | number | Recipe mode: crafting time in seconds (accepts decimals). | |
notes | string | Free-form notes. |
Links with progressionTable#
Almost all numeric fields can be linked to a column of a progression table:
minOutputProgressionLink,maxOutputProgressionLinkintervalSecondsProgressionLink,craftTimeSecondsProgressionLinkcapacityProgressionLink
When linked, the engine reads the value from the table at the player's current level, instead of the static value in the schema. This lets production and crafting scale as the player progresses.
"intervalSecondsProgressionLink": {
"progressionAddonId": "section-prog-table",
"columnId": "col-craft-time",
"columnName": "Craft Time"
}
Example: passive production#
Chicken lays 1–3 eggs every 60s, capacity of 10 eggs:
{
"id": "prod-chicken",
"name": "Chicken",
"mode": "passive",
"outputRef": "section-egg",
"minOutput": 1,
"maxOutput": 3,
"intervalSeconds": 60,
"requiresCollection": true,
"capacity": 10,
"ingredients": [],
"outputs": []
}
Example: recipe#
2 Wood + 1 Rope → 1 Bow, in 30 seconds:
{
"id": "prod-bow-recipe",
"name": "Recipe: Bow",
"mode": "recipe",
"ingredients": [
{ "itemRef": "section-wood", "quantity": 2 },
{ "itemRef": "section-rope", "quantity": 1 }
],
"outputs": [
{ "itemRef": "section-bow", "quantity": 1 }
],
"craftTimeSeconds": 30
}
Wizard#
The 📜 Recipe page type automatically creates:
- This
productionaddon inrecipemode - Pre-filled with 1 empty ingredient + 1 empty output
- The wizard asks for
craftTimeSecondsin the initial dialog
You fill in the item references afterwards.
Who references production#
craftTable.entries[].productionRef— a craft table aggregates multiple recipes via refs.