Exact source used by this build. SHA-256: 50f59dd07b6f3f89b283db7f2511f84623ac6a02344f89ff204194e7e62a4409.
1 # Crafting content contract
2
3 `crafting.json` contains 40 crafting recipes, 20 cooking recipes, four artisan
4 machine definitions and one furnace, 10 static artisan products, three quality
5 fertilizers, three bombs, 28 placement definitions and 70 visual manifest slots.
6 Ten crafting recipes and one cooking recipe are known at the start. All creative names and descriptions are
7 `TBD`; the keys in `visuals` identify procedural placeholder icons and world
8 objects for replacement by the art pipeline. No game artwork or text was copied.
9
10 ## API and validation
11
12 Import `CRAFTING`, `CraftingSchema`, `validateCraftingReferences`, `craftingDomain`
13 and the exported types from `@tamarack/content/domains/crafting`. Simulation
14 receives the same payload at `rules.content.crafting`; type-only consumers can
15 import `CraftingContent` from `schema.ts` without loading catalogs.
16
17 Recipes have ingredients, one output, kind, unlock and visual key. An ingredient
18 selects exactly one item ID, tag or category and supplies a positive quantity.
19 Unlocks are `default`, `skill`, `purchase` or `friendship`. Placements contain
20 footprints, collision, pickup tool, optional coverage masks and machine linkage.
21 Machines contain processing recipes, fuel, outputs and machine-minute durations.
22 Consumables declare restoration and an optional real-time-duration buff in a
23 food or drink channel. Separate collections define fertilizer effects, bomb
24 parameters, external-system hooks and visual manifest keys.
25
26 Validation checks references, selectors, unique IDs, declared external tags,
27 shop IDs, tree kinds, static formula prices, consumable edibility consistency,
28 coverage and visual references. Tests enforce exact MVP recipe/product counts.
29 The three domain registration lines are owned by the integrating parent agent.
30
31 ## Selected machine inputs
32
33 | Machine | Input (one unless stated) | Output | Machine minutes | Base sell price |
34 |---|---|---|---:|---:|
35 | `machine_01` | `forage_summer_01` | `artisan_01` | 10,000 | 120 = 3 × 40 |
36 | `machine_01` | `crop_01` | `artisan_02` | 6,000 | 78 = floor(2.25 × 35) |
37 | `machine_01` | `crop_02` | `artisan_03` | 6,000 | 157 = floor(2.25 × 70) |
38 | `machine_02` | `crop_02` | `artisan_04` | 4,000 | 190 = 2 × 70 + 50 |
39 | `machine_02` | `forage_autumn_02` | `artisan_05` | 4,000 | 160 = 2 × 55 + 50 |
40 | `machine_03` | tag `milk` | `artisan_06` | 200 | 230 |
41 | `machine_03` | tag `egg` | `artisan_07` | 180 | 190 |
42 | `machine_04` | attached to `tree_01` | `artisan_08` | 14,400 (9 days) | 200 |
43 | `machine_04` | attached to `tree_02` | `artisan_09` | 11,200 (7 days) | 150 |
44 | `machine_04` | attached to `tree_03` | `artisan_10` | 8,000 (5 days) | 100 |
45 | `furnace` | 5 `ore_copper` + 1 coal | `bar_copper` | 30 | Existing catalog |
46 | `furnace` | 5 `ore_iron` + 1 coal | `bar_iron` | 120 | Existing catalog |
47 | `furnace` | 5 `ore_gold` + 1 coal | `bar_gold` | 300 | Existing catalog |
48 | `furnace` | 5 `ore_iridium` + 1 coal | `bar_iridium` | 480 | Existing catalog |
49
50 The tapper durations are full-day machine-minute equivalents; exact calendar
51 night alignment is not encoded separately. Offline advancement is supplied by
52 the server, using the machine clock parameters, and does not advance the farm's
53 calendar or crops while all players are absent.
54
55 ## Integration slots
56
57 - `externalTags: ["milk", "egg"]` are the future animal system's accepted input
58 tags. The dairy machine produces the listed cheese-like or mayonnaise-like
59 output for one matching input. No animal item IDs are reserved here.
60 - `externalCategories: ["fish"]` allows the quality fertilizer recipe to accept
61 the future fishing catalog. This declaration does not create or grant fish.
62 - Friendship unlocks name `villager_01` etc. as typed mail-delivery slots; the
63 social/mail system owns whether their heart requirements have been met.
64 - The kitchen requires the `home` landmark and owner house upgrade level 1.
65 Building ownership and upgrade grants belong to the housing integration.
66 - The crab pot, bait and staircase definitions identify the future owning system.
67 - `crafting_material_01` through `crafting_material_04` are scoped intermediate
68 slots, produced by recipes 35, 36, 39 and 40. They avoid claiming the sap,
69 quartz, battery or monster-drop IDs owned by future content systems. Their
70 current source recipes are original placeholder transformations; source
71 ingredient identities will need reconciliation when those catalogs land.
72 - Keg and preserves inputs are the explicit catalog entries in their processing
73 recipes. This MVP does not accept every crop or forage item. The wine-like
74 product's selected forage source is a placeholder mapping, not a declaration
75 that the entire forage category is fruit. Static output IDs preserve each
76 formula through the existing inventory, shop and shipping price path.
77
78 ## Numerical provenance
79
80 The project target document supplies machine timing and price formulas. Values
81 were also checked against these wiki pages on 2026-10-22:
82
83 - [Keg](https://stardewvalleywiki.com/Keg): wine 10,000 minutes and 3 times input
84 base price; juice 6,000 minutes and floor of 2.25 times input base price.
85 - [Tapper](https://stardewvalleywiki.com/Tapper): 9, 7 and 5 nights, represented as
86 14,400, 11,200 and 8,000 machine minutes using the documented 1,600-minute day.
87 - [Scarecrow](https://stardewvalleywiki.com/Scarecrow): 249 cells including its own
88 cell, reaching eight cells in cardinal directions and six diagonally. The data
89 contains the 248 other offsets with squared distance below 81.
90 - [Animals, crows](https://stardewvalleywiki.com/Animals#Crows): up to four attempts
91 at one per sixteen crops, 30 percent attempt chance, up to ten random target
92 checks, and minimum eligible growth stage two after the seed stage.
93 - [Quality Fertilizer](https://stardewvalleywiki.com/Quality_Fertilizer) and
94 [Deluxe Fertilizer](https://stardewvalleywiki.com/Deluxe_Fertilizer): levels 2/3,
95 recipe yields 2/5; the version-1.6 quality recipe uses four sap-equivalent
96 intermediates plus one fish. The first quality tier uses two intermediates.
97 The late-tier recipe uses a placeholder 20,000g purchase because the special
98 currency/shop system is not present.
99 - [Bomb mechanics](https://stardewvalleywiki.com/Crafting#Bombs),
100 [small](https://stardewvalleywiki.com/Cherry_Bomb),
101 [medium](https://stardewvalleywiki.com/Bomb) and
102 [large](https://stardewvalleywiki.com/Mega_Bomb): verified recipe costs, skill
103 levels 1/6/8 and radii 3/5/6–8. The largest data radius is a fixed seven-cell
104 circular approximation of the documented 6–8-cell extent.
105
106 The 2,400ms bomb fuse is a project parameter, not a verified benchmark. Main
107 wiki and public modding documentation did not supply exact fuse or player-damage
108 values. [Firsthand wiki testing](https://stardewvalleywiki.com/Talk:Cherry_Bomb)
109 reported roughly 8–9, 14–16 and 18 player damage, explicitly pending further
110 verification and defense controls. These observations cannot establish an exact
111 formula. The current damage values 9/15/21 use an explicit radius-times-three
112 project assumption, closer to the observed damage scale than the previous flat
113 50. This is configurable combat tuning, not verified numerical parity. No
114 decompiled source was used.
115
116 The furnace consumes five ore plus one coal for copper/iron/gold at 30/120/300
117 minutes, with the existing iridium bar also supported at 480 minutes. Cooking
118 restoration follows the shared item's edibility formula; food and drink buff
119 channels are separate and the data uses 210–1,007-second buff durations.
120