1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# Third Collapse - World Building Guide
## Recipes
Recipes define how items are processed on stations to produce new items. They are the foundation for cooking, smithing, crafting, and fletching.
Recipe files live in `data/recipes/<id>.yaml`.
### Recipe vs MadeFrom
- **Recipes** (`data/recipes/`) use a station (fire, range, furnace, anvil, etc.). The player must be near the station object.
- **MadeFrom** (on the item YAML directly) is for item-on-item combinations that need no station. The player combines ingredients from their inventory.
### Recipe YAML Reference
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique recipe identifier |
| `type` | string | Recipe type (cooking, smithing, crafting, etc.) |
| `skill` | string | Skill checked for success |
| `level` | int | Required skill level |
| `xp` | int | XP awarded on success |
| `wait` | float64 | Ticks per craft cycle (default 6) |
| `station` | []string | Station object IDs required |
| `consume` | []ConsumeEntry | Ingredients consumed (see below) |
| `output` | string | ItemID produced on success |
| `fail` | string | ItemID produced on failure (optional) |
| `message` | string | Success message |
| `fail_message` | string | Failure message |
| `success` | SuccessFormula | Optional skill check formula (see Behaviors) |
The recipe's name in menus comes from the output item's `name` field, colored using the output item's `color`.
### ConsumeEntry — Multi-Item Ingredient Slots
Each consume entry defines an ingredient slot with multiple valid items. The first matching item found in the player's inventory is consumed.
```yaml
consume:
- items: [item_id, alternative_id, ...]
qty: 1
```
### Station-based recipe (cooking on a fire)
```yaml
id: cook_trout
type: cooking
skill: cooking
level: 15
xp: 70
wait: 6
station: [fire, cooking_range]
consume:
- items: [raw_trout]
qty: 1
output: trout
fail: burnt_fish
message: "Cooked to perfection. It looks great!"
fail_message: "You accidentally burn the trout."
```
### Station-specific recipe (range only, not fire)
```yaml
id: cook_bread
type: cooking
skill: cooking
level: 1
xp: 40
wait: 6
station: [cooking_range]
consume:
- items: [bread_dough]
qty: 1
output: bread
fail: burnt_meat
message: "You bake the dough into a fresh loaf of bread."
fail_message: "You burn the bread to a crisp."
```
### MadeFrom — Item-on-item combinations
Item-on-item combinations are defined directly on the output item via the `made_from` field. No recipe file needed.
```yaml
# data/items/bread_dough.yaml
id: bread_dough
name: bread dough
color: "fg=bright_yellow"
made_from:
- items: [pot_of_flour]
qty: 1
- items: [bucket_of_water, pitcher_of_water, vial_of_water]
qty: 1
```
The player uses `use flour on water` to combine them. The system finds that `bread_dough` can be made from these ingredients and produces it.
### Food/Healing Items
Items with `heal_value` and `eat_message` can be consumed via the `eat` command.
```yaml
id: bread
name: bread
color: "fg=bright_yellow"
description: "A fresh loaf of bread, still warm from the oven."
value: 5
heal_value: 5
eat_message: "You eat the bread. Warm and satisfying."
```
|