Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
AntTrails
Footfall slowly wears dirt paths into the world; heavy traffic cobbles them to stone.
| Date uploaded | 15 hours ago |
| Version | 1.0.0 |
| Download link | RAGEmedia-AntTrails-1.0.0.zip |
| Downloads | 395 |
| Dependency string | RAGEmedia-AntTrails-1.0.0 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350ValheimModding-Jotunn
Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.
Preferred version: 2.29.2README
AntTrails
Walk somewhere often enough and the ground remembers.
AntTrails watches where players actually walk and slowly wears the terrain down into dirt paths — no hoe, no stamina, no materials. Routes that see heavy traffic over a long time have a small chance of cobbling over into stone. Routes that fall out of use fade back toward bare ground.
The result is a world that records how it has been lived in: desire lines between a base and the nearest copper vein, a worn ring around the smelter, a road to the boat that got wider the summer everyone was raiding.
Who needs to install this
Every player and the server. This writes to the shared terrain paint mask, which is persisted in the world save and replicated to every peer. Wear counters are kept by the host (or dedicated server), and clients report where they walked. A player without the mod still sees the paths, but their footsteps never count toward creating one — so on a server where only some people have it, trails form only under the players who do.
Config values that change behaviour are admin-only and pushed from the server, so everyone plays by the same numbers.
How it works
Terrain in Valheim carries a per-square-metre paint mask with separate dirt, cultivated and paved channels. The hoe slams the dirt channel to full in a 2 m circle. AntTrails instead nudges it upward a little at a time, so a path fades in rather than appearing:
| Traffic on one 1×1 m tile | What you see |
|---|---|
| A few crossings | Faint scuffing, grass still there |
| Halfway to the threshold | Grass clears; visible bare track |
Threshold reached (StepsToPath, default 25) |
Full dirt path |
Very heavy lifetime use (StoneSteps, default 400) |
Small per-crossing chance of stone |
Crossings from all players pool together — four people walking a route wear it four times as fast.
Your position is sampled a few times a second and every tile on the line between two samples is credited too, so a route sprinted at full tilt wears exactly as evenly as one strolled. The trace follows where you actually put your feet, which means a route walked loosely spreads its wear over a corridor a couple of metres wide rather than concentrating it into one line.
Losing a path
Progress on an unfinished tile leaks away continuously, at a flat
StepsToPath ÷ FormationWindowDays per in-game day — about two crossings a day at the
defaults, one every quarter hour of real time.
That makes formation a contest of rate rather than of total. A tile crossed less often than it leaks never gains ground at all, however long you persist; a tile crossed twice that often wears through in eight or nine in-game days. So the route between your base and the copper vein you have been working all evening settles in, and the one-off detour you took to a swamp last week leaves nothing behind.
A finished path fades far more slowly, taking RevertDays (default 30) of neglect to sink
to ResidualTrace (default 0.3) — a faint permanent scar, below the threshold where grass
regrows. Old routes stay legible forever unless you set ResidualTrace to 0.
Stone is terminal. It never decays. Remove it with a hoe or pickaxe like any other terrain.
What it will not touch
- Cultivated soil — walking through a turnip field never paves it.
- Existing stone, whether a player laid it or AntTrails did.
- Inside workbench and ward range, while
RespectBuildPrivilegeis on (the default). Turn it off if you want trails to form through your settlement too. - Anything you are swimming through, standing on a built floor over, or Ashlands lava.
Standing still costs nothing: a tile only counts when you enter it, so idling at a workbench does not bore a hole in the ground.
Configuration
BepInEx/config/com.ragemedia.anttrails.cfg. Gameplay values are admin-only and
server-synced; sampling rate and logging are local to each client.
| Key | Default | Meaning |
|---|---|---|
Enabled |
true |
Master switch. Existing terrain is left as-is when off. |
StepsToPath |
25 |
Crossings to fully wear one tile. |
FormationWindowDays |
12 |
Days of neglect to lose all unfinished progress. |
RevertDays |
30 |
Days of neglect for a finished path to fade to the floor. |
ResidualTrace |
0.3 |
Permanent floor a faded path keeps. 0 lets paths vanish. |
StoneSteps |
400 |
Lifetime crossings before stone becomes possible. |
StoneChance |
0.01 |
Per-crossing chance of stone once eligible. |
RespectBuildPrivilege |
true |
Skip tiles inside workbench/ward range. |
FlushIntervalSeconds |
5 |
How often paint changes are pushed to terrain. |
DecaySweepSeconds |
60 |
How often loaded tiles are re-checked for decay. |
SampleIntervalSeconds |
0.25 |
How often this client samples its own position. Local. |
A note on the network
Valheim serialises a zone's entire terrain blob every time any part of it is painted, and
replicates that to all peers. Painting once per footstep would be ruinous, so AntTrails
accumulates changes and flushes them in batches, one message per zone per flush. Raising
FlushIntervalSeconds trades responsiveness for bandwidth; lowering it does the reverse.
Wear data
Counters live in BepInEx/config/AntTrails/<worldname>.trails on the host, saved alongside
the world. Deleting it resets progress but does not touch terrain — paths already painted
stay painted.
Building from source
Requires the .NET SDK and a Valheim install. The mod compiles against the game's own assemblies plus the BepInEx and Jotunn DLLs from a mod-manager profile, so that what it is built against is exactly what loads at runtime.
cp Environment.props.example Environment.props # then edit the paths
dotnet build -c Release
The DLL lands in bin/Release/AntTrails.dll. Copy it into your profile's
BepInEx/plugins/AntTrails/ to test.
Environment.props is machine-specific and deliberately untracked.
Requirements
License
MIT.
Source
CHANGELOG
Changelog
1.0.0
Valheim 1.0 support
The 1.0 update renamed or reshaped three of the game APIs AntTrails depends on — the world name it keys save data on, the zone identifier used to decide which tiles are loaded, and the terrain rebuild call it makes after painting. Rebuilt against 1.0.7 (Unity 6). This release does not run on 0.221.x, and 0.2.x does not run on 1.0.
Existing trails survive the update. The world name the game hands out is unchanged in
value despite the rename, so BepInEx/config/AntTrails/<worldname>.trails is found and
loaded exactly as before. Wear counters, formation progress and stone upgrades all carry
over.
Dependencies
BepInExPack 5.4.2350 and Jotunn 2.29.2.
Note for servers
The minor version is part of the mod's network compatibility check, so 0.2.x clients cannot join a 1.0.0 server or vice versa. Everyone updates together.
0.2.0
Retuned formation, so that paths actually form
The old defaults could not produce a path in ordinary play. Formation progress leaks at a
flat StepsToPath / FormationWindowDays per in-game day, which at 60 and 4 meant a tile
shed a crossing every two real minutes. Unless you re-crossed the same square metre more
often than that, its progress sat at zero forever, however many hours you spent on the
route — a five-minute round trip to a mine never stood a chance. Formation was a contest of
rate, and the rate was set past what walking anywhere can produce.
| Setting | Old | New |
|---|---|---|
StepsToPath |
60 |
25 |
FormationWindowDays |
4 |
12 |
StoneSteps |
1200 |
400 |
StoneChance |
0.004 |
0.01 |
Break-even is now one crossing every quarter hour of real time rather than every two minutes, and a route you keep using wears through over a few hours of play. Stone needs roughly 500 lifetime crossings on a tile instead of about 1450, which no tile was ever going to reach — the busiest ground in any base sits inside a workbench radius the mod deliberately skips.
Updating will not change settings you already have. BepInEx writes the config file the
first time the mod runs and never overwrites it afterwards, so an existing
BepInEx/config/com.ragemedia.anttrails.cfg keeps the old values. To take up the new
tuning, either edit those four keys to the values in the table or delete the file and let
it regenerate. On a dedicated server, edit the server's copy: these keys are admin-only
and pushed out to clients.
Wear is now traced between position samples
The client sampled its position four times a second and credited only the tile underfoot. At a run that is more than a metre of travel per sample, so consecutive credited tiles were not even adjacent: crossings went missing and trails came out dotted rather than continuous. Each sample now credits every tile on the line back to the previous sample, so a route wears the same whether you stroll it or sprint it. Eligibility — farmland, lava, build privilege — is checked at each tile's centre, where the wear actually lands.
Fixed
- The fallback day length used when the game's own value is unavailable was 1200 seconds against an actual 1800, running decay 50% fast for as long as it applied.
Note for servers
The minor version is part of the mod's network compatibility check, so 0.1.x clients cannot join a 0.2.0 server or vice versa. Everyone updates together.
0.1.2
- Added an MIT license.
- Set
website_urlin the manifest so the Thunderstore listing links to the source repo.
No functional or behavioural changes; the plugin itself is identical to 0.1.1.
0.1.1
- Widened the allowed range on
StepsToPath,RevertDays, andStoneSteps. The previous minimums (5, 1 day, and 50 respectively) were arbitrary and sat above the values needed to observe path formation, decay, and the stone upgrade inside a single play session.
0.1.0
- Initial release.