Data Packs & Modding Guide
Everything that shapes a run lives in JSON under dystrail-web/static/assets/data/ and ships with the WASM build. Editing these files lets you reskin or satirize the game without touching Rust.
Where things live
journey/classic.json,journey/deep.json: base family configs (mpd ranges, partial ratio, wear/breakdown, crossings, guards).journey/overlays/*.json: strategy overlays that override family fields (Balanced, Aggressive, Conservative, ResourceManager).boss.json: distance gate, round count, stat weights, min/max chance, balanced bias (Classic bonus, Deep multiplier/bonus).crossings.json,camp.json,exec_orders.json,endgame.json: crossings odds/detours, camp actions, executive orders, endgame behavior.pacing.json,weather.json,vehicle.json: pace multipliers, weather impacts, vehicle wear/parts weights.personas.json,store.json,result.json,game.json: flavor, pricing, outcomes, and high-level game toggles.
How to make a new variant
- Copy and edit JSON in
static/assets/data/. Change numbers, names, or odds to your liking. - Run tests:
just lintorcargo test --workspace --all-features --lockedto ensure acceptance guards still pass. - Build the web client:
just build-release(or let the CIbuildjob run). The JSON is bundled intodystrail-web/dist. - Ship it: host
dist(GitHub Pages via included workflows) and share the Play link/download.
Knobs to twist for satire
- Crossings: raise
terminal, shrinkpass, or makedetour_days.maxhuge; tweak bribe bonuses/penalties. - Travel feel: drop
mpd_base, shrinkmpd_min, or slashpartial_ratioto 0.2 for a slog; invert for speed-runs. - Breakdowns: spike
breakdown.baseandbeta, or overweight a single part inpart_weights. - Endgame: set
wear_multiplierto 0 to make finale trivial, or raisehealth_floorto punish. - Boss: rename outcomes in
boss.json, pushdistance_requiredup/down, or skew stat weights to reward pants hoarding. - Economy/Flavor: rewrite
store.jsonprices,camp.jsonactions,personas.jsonlines,weather.jsonnames to match your satire.
Notes
- Keep
guardsreasonable if you want CI to stay green; otherwise relax them knowing tests may fail. - Determinism is preserved as long as you keep the same RNG structure—changing JSON won’t break replays for a given seed, it only changes the outcomes via new numbers.