Restoration foresters increasingly plant seed sources whose home climate already matches a site's future climate rather than its current one — a practice called assisted migration. Each plot's home temperature comes from its position on an elevation gradient across the terrain (warmer in the valley, cooler on the ridge):
T_home(plot) = 22°C − 14°C · t, t = 0 valley … 1 ridge
T_future(plot) = T_home(plot) + warming_slider
Fix applied here (verified against the 3D source): the original 3D engine computed the seed's climate optimum as T_home(plot) + provenance_shift — i.e. relative to each individual plot's own home temperature. Algebraically that makes mismatch = T_future(plot) − T_optimum(plot) = warming − provenance_shift for every single plot: the elevation gradient cancels out completely and never affects the outcome, even though the whole simulation is built around that gradient. A standalone check (`node` script, scratch-only) confirmed the mismatch is bit-for-bit identical from ridge to valley in the original formula. A seed lot has one origin climate, not a different one per plot it's planted on, so this build instead anchors the seed's optimum to the site's reference (mid-gradient) climate:
T_ref = T_home(t = 0.5) = 15°C
T_optimum(provenance) = T_ref + provenance_shift
mismatch(plot) = T_future(plot) − T_optimum(provenance)
P(establish) = exp( −mismatch² / (2·σ²) )
Now the gradient matters again: for a fixed provenance shift, cooler ridge plots and warmer valley plots end up with different mismatch under the same warming scenario, which is what the elevation-gradient grid is supposed to show. Each planted tree draws a fixed random roll at planting time; that roll is compared against the establish/stress/fail thresholds derived from the current sliders every frame, so moving warming, provenance or niche width instantly recolours the stand without needing to replant. "Plant restoration grid" draws fresh positions and fresh random rolls. Genetic diversity rises with provenance distance but is penalised once mean mismatch exceeds the niche tolerance; years-to-canopy-closure is an inverse function of survival.
- Provenance shift — 0 is the historically "correct" local seed source; sliding right sources seed from a warmer/poleward-adapted population, pre-adapting the planting to future warming.
- Niche width (σ) — how climate-tolerant the species is; a narrow niche punishes any mismatch harshly, a wide one is forgiving.
- Drag the grid to pan, scroll/pinch to zoom, hover a tree for its exact numbers.