You are viewing a potentially older version of this package. View all versions.
RavenIronStudios-Tarn-0.4.2 icon

Tarn

Water at any height: real lakes above sea level, built from a per-world lake list, swimmable, on the map, synced from the server. Also keeps vegetation off a map maker's roads and lake beds.

Date uploaded a day ago
Version 0.4.2
Download link RavenIronStudios-Tarn-0.4.2.zip
Downloads 30
Dependency string RavenIronStudios-Tarn-0.4.2

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2360 icon
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.2360

README

🏞️ Tarn

TARN VERSION CLIENT & SERVER

The gods poured one sea around Midgard and filled it to a single line. Every hollow in the high fells stayed dry, and the Vikings who climbed there drank snow. Now the hollows hold water, cold and still, each at its own height.

Real lakes above the sea. Swim in them, sail on them, see them on the map.

Valheim has one water level, so every lake above the sea is a dry hollow. Tarn puts real vanilla water in them, at their own height. It was made for the Ravenrest map, by Raven Iron.

It also keeps trees, rocks and bushes off ground a map maker marks, such as roads, and off every lake's bed. The server owns the lakes and sends them to every player.


NEW IN 0.4.2

This version is Tarn built for Valheim 1.0.21.

You It
Update the server and your players together Valheim 1.0.21 uses network version 41: the server and every player's game must be on it to meet
Keep your lakes and settings nothing else changes

BEFORE YOU INSTALL

If… Then…
πŸ§ͺ you want something finished Tarn is a prototype. It works and is used on test worlds, but the details may still change.
🀝 you play on a server install Tarn on the server and on every player, the same version. Without Tarn on the server, players get no lakes.
🌲 you want ground kept clear on a world you have explored clearing only touches zones generated after a lake or mask exists. Make a new world, reset those zones, or use tarn clearbeds for lake beds.
🌾 you see grass in the water paint the lake bed with dirt. Vanilla's grass ignores Tarn's water and its clearing.

I

Each lake fills its basin, and behaves like the sea.

πŸ”Ή Fills the basin everything below the lake's level that joins its deepest point
πŸ”Ή Vanilla water swimming, the wet status, boats, floating and the underwater view all behave as at sea
πŸ”Ή On the map lakes are drawn as water on the minimap and the large map
πŸ”Ή The sound of water near a lake you hear it, a little quieter than the sea
πŸ”Ή How deep it looks calm and green, or blue and rough: tarn depth changes it live
πŸ”Ή Light on the frame rate lakes are built as you come near and dropped behind you, a few milliseconds a frame
πŸ“– Read the saga β€” how a lake is built

The water is vanilla's own: the sea's tiles and its water volumes, set at the lake's height. That is why everything that works at sea works on a lake.

Each player's game builds the water. The server, or the host in single player, owns the lake list and sends it to every player; a dedicated server builds no water of its own. Lakes within reach are built, a little at a time, and dropped again once you are well past them.

Big lakes are shaped ahead of time, for lakes near any player, so zone generation finds them ready.


II

Stand in a hollow, type one command, and it fills.

πŸ”Ή tarn here fills the hollow you stand in, up to just under the point where it would spill
πŸ”Ή tarn at <x> <z> the same, at a point on the map
πŸ”Ή A lake list per world a map maker can write every lake into one file; tarn here adds to it
πŸ”Ή Everyone sees it a new lake goes to every player at once
πŸ“– Read the saga β€” what makes a hollow

A hollow is ground lower than its rim. tarn here finds where the water would spill out and sets the lake just under it. Stand in the low part. A hollow that would spill into the sea gets no lake, and the command says so.

On a server it is the server's lake. A player's tarn here is sent to the server, which runs it for admins on adminlist.txt; the lake list is saved there.


III

No trees in the lake. No rocks on the road.

πŸ”Ή Lake beds no trees, rocks, bushes or pickable debris are placed on a lake's bed, from the shore down, for every lake, tarn here lakes included; on by default
πŸ”Ή A map maker's mask ground a map maker marks, such as roads, is kept free the same way
πŸ”Ή Only what would stand there everything else is placed exactly as vanilla places it
πŸ”Ή tarn clearbeds for ground you have already explored: counts what stands on lake beds, then removes it when you add confirm
πŸ“– Read the saga β€” how clearing works, and what it never touches

It uses vanilla's own clear areas, the same ones that keep trees out of locations. Only what would have stood on a marked spot is left out.

Only new ground. Whoever generates a zone places its vegetation, so clearing works on zones generated after a lake or a mask exists. A lake made on explored ground keeps the trees already standing in it, until tarn clearbeds.

tarn clearbeds takes only vanilla vegetation: trees, rocks, bushes and pickables, on the bed as Tarn clears it. Nothing a player built is touched, nor stumps, logs, drops or creatures. A tree grown from a planted sapling looks the same as a wild one, so it goes too if it stands on a bed. Removing can't be undone.

The shore. Clearing reaches a little past the water's edge, 2 m by default (Clearing.LakeBedShore). Lower it for less bare shore; at 0 a bush may still stand in the shallows. Clearing removes trees, rocks and bushes, not grass: paint the bed with dirt for that.


THE TOOLBOX

First ten minutes: install Tarn with your mod manager (on the server and every player) β†’ walk to a dry hollow above the sea β†’ open the console (F5) β†’ tarn here β†’ swim.

Command
tarn here [radius] [margin] fill the hollow you stand in, up to just under its spill point
tarn at <x> <z> [radius] [margin] the same, at a point
tarn list [n] the nearest lakes, and whether they are built
tarn depth [scale] how deep lakes look (colour, foam, waves); applies live
tarn reload re-read this world's lake list and Tarn's settings on the server
tarn clearbeds <lake> Β· tarn clearbeds all count what stands on lake beds in explored ground; add confirm to remove it
tarn remove <name> Β· tarn remove all remove a lake, or every lake
tarn info the vanilla water Tarn copies

On a server, the commands that change anything need the player on adminlist.txt.

πŸ“ Write a lake list

The lake list is BepInEx/config/Tarn/<world name>.txt, read on the server or the host. One lake per line:

name;x;z;level;minX;minZ;maxX;maxZ;depth

x and z are the lake's deepest point, level is the absolute world height of the water's surface, and the box is the area the lake may fill. Lines starting with # are ignored. After editing, run tarn reload.

πŸ—ΊοΈ Make a clearing mask

The mask is BepInEx/config/Tarn/<world name>.clear, optional. Its header is TARNCLR1, then an int32 size and a float32 half-extent in metres, then size Γ— size bits: row 0 is the north edge, high bit first (numpy packbits order).

It is read on the server, the host, or in single player, and sent to every joining player, because whoever generates a zone places its vegetation. It only affects zones generated after it exists, so make a new world, or reset those zones. If a player generates a zone in the seconds before the mask arrives, the log names it.

🧹 Clear the beds of lakes on explored ground

Run tarn clearbeds <lake> (or all) to count the trees, rocks, bushes and pickables standing on lake beds. Check the count, then run it again with confirm on the end to remove them. It can't be undone. On a server it runs on the server, for admins only, and the answer comes back to your console.

🎨 Tune how lakes look

tarn depth shows the current value. Vanilla's water colour, foam and waves follow depth, so tarn depth 0.2 makes lakes calm and green, and tarn depth 1 makes them look like the sea. On a server it is the server's setting: a player's tarn depth <value> is sent there, admins only, and reaches everyone.


MULTIPLAYER

Without Tarn on the server Needs Tarn on the server Needs Tarn on both ends
a player's Tarn finds no lakes, and its log says so after about a minute the lake list and the clearing mask Β· every setting Β· the commands that change anything the water itself, built on each player's game Β· lakes on the map Β· the lake sound Β· clearing in zones a player generates

Every setting follows the server. Players get the server's settings when they join and whenever one changes: an admin's tarn command, a config manager, or the server's .cfg edited, which is noticed within seconds. A player's own file is never touched and is used again in single player.

Same version on both. If the server's Tarn differs from a player's, the player's log warns: update to match.


COMPATIBILITY

Mod or map
Config managers A change made with one on the server reaches every player.
The Ravenrest map The map Tarn was made for: its pipeline writes the lake list and the mask, and paints its lake beds with dirt.
Better Continents Ravenrest is a Better Continents map. Better Continents' vegetation map is read once per 64 m zone, too coarse to keep a road clear; Tarn's clearing does that job.

SETTINGS

All in BepInEx/config/com.raveniron.tarn.cfg, and all safe to leave alone.

πŸ”’ Server-synced β€” on a server, the server's values apply to everyone
Section Setting What it does
Look DepthScale how deep lakes look (0.5 by default); tarn depth sets it live
Sound LakeVolume the lake water sound; 0 is off
Performance BuildRange lakes within this many metres are built (400 by default)
Performance BuildBudgetMs milliseconds per frame spent building and shaping lakes (2 by default)
Clearing LakeBeds keep vegetation off every lake's bed (on by default)
Clearing LakeBedShore how far past the water's edge clearing reaches, in metres, 0 to 10 (2 by default); tarn clearbeds uses it too

πŸ–₯️ Local: none while you are connected. In single player your own file is used.


CREDITS

Needs: BepInExPack Valheim 5.4.2360 Β· Source: GitHub Β· Website: https://ravenirongames.com/

Made for the Ravenrest map, by Raven Iron.

CHANGELOG

Changelog

0.4.2 (2026-11-01)

Updated due to the Valheim 1.0.21 patch. Rebuilt and checked against Valheim 1.0.21 (network version 41); no code changes beyond the version string. The BepInExPack dependency is now 5.4.2360, and the store page's website link is https://ravenirongames.com/.

0.4.1 (2026-10-12)

  • How far lake-bed clearing reaches past the water is a setting now: Clearing.LakeBedShore, in metres. The default is 2, the same as 0.4.0.
    • A lake's shape is sampled every 4 m, so at the default the cleared edge lands 0 to 4 m past the real waterline, about 2 m on average.
    • Lower it for less bare shore. At 0, a bush can still stand in the shallows here and there.
    • tarn clearbeds uses the same distance.
    • In multiplayer, the server's value applies to everyone; it's sent with the lakes. A 0.4.0 server counts as 2.
  • Every setting follows the server. The server sends all of Tarn's settings to each player who joins, and again to everyone whenever one changes. While connected, a player's game uses the server's values in memory only; their own config file is untouched, so their settings are back in single player. A setting changes on the server when:
    • an admin runs a tarn command. tarn depth from a player now goes to the server, admins only, and comes back to everyone.
    • a config-manager mod changes it.
    • the server's .cfg file is edited. The server notices within a few seconds, and tarn reload re-reads it at once.
    • A 0.4.0 server sends no settings, so players keep their own (and its lake message's lake-bed values).
  • The store page links to the source on GitHub.

0.4.0 (2026-10-11)

  • Lake beds are kept clear on their own. No trees, rocks, bushes or pickable debris are placed on a lake's bed, from the shore down. That includes lakes made with tarn here, so they no longer need a .clear file. The cleared ground is the same flood that shapes the water. It goes about 4 m past the waterline, so nothing stands in the shallows. It's on by default; the config setting is Clearing.LakeBeds.
    • As with the mask, only zones generated after a lake exists are affected. tarn here on ground you've already explored leaves the trees that stand there.
    • Grass still needs dirt paint on the bed: vanilla's grass follows the ground paint, not clear areas.
  • New command, tarn clearbeds <lake|all>, for lakes made on ground already explored. It counts the trees, rocks, bushes and pickables already standing on lake beds. tarn clearbeds <lake|all> confirm removes them, which can't be undone.
    • Only what vanilla places as vegetation goes, and only on the bed as Tarn clears it. Nothing a player built is touched, nor stumps, logs, drops or creatures. A tree grown from a planted sapling looks exactly like a wild one, though, so it goes too if it stands on a bed.
    • On a server it runs on the server, for admins on adminlist.txt only, and the answer comes back to that player's console.
  • In multiplayer, the server's setting applies to everyone. It's sent with the lakes. The server and every player clear the same ground, because each machine generates some of the zones. A 0.3.0 player still gets the lakes but clears no beds. A 0.4.0 player on a 0.3.0 server clears none either.
  • Big lakes are shaped ahead of time, a few milliseconds a frame, for lakes near any player. Zone generation then finds them ready. If a zone needs a lake that isn't ready yet, it's shaped on the spot, and the log says how long that took when it's slow.
  • A lake re-sent by the server keeps its shape if it hasn't changed, so tarn here no longer makes every player re-sample every lake.
  • New log lines: the load line says whether lake beds are kept clear, and one line names the first zone that had a lake bed cleared.

0.3.0 (2026-10-06)

  • The clearing mask is synced from the server. Vegetation is placed by whichever machine generates a zone, which in multiplayer is usually a player. The server (or host) now sends its <world>.clear to every joining player: deflated (Ravenrest's 2 MB mask is 68 KB) and sent in 48 KB chunks. A connected player never reads their own .clear file, as with lakes. If a zone is generated before the mask arrives, the log names it.
  • One log line proves the clearing ran: the first zone with marked ground, and how many clear areas it got.
  • The server needs 0.3.0 too: an older server never answers, and the player is told so after about a minute.

0.2.0 (2026-10-06)

  • Clearing: a per-world mask (BepInEx/config/Tarn/<world>.clear) of ground kept free of vegetation, such as a map maker's roads and lake beds. It adds vanilla clear areas to ZoneSystem.PlaceVegetation, so only what would have stood on a marked spot goes. Better Continents' vegetation map can't do this, because it is read once per 64 m zone, at the zone's centre. Verified in game on Raventest22.
  • Fix: the clear-area type is private in the real game, so it is reached by reflection. A first build compiled against the publicized assemblies threw MethodAccessException in game.
  • The load line names the real version. It said "0.1.0" whatever the build.

0.1.0 (2026-10-05)

  • Lakes at their own height from BepInEx/config/Tarn/<world>.txt, built as you come near.
  • Lakes drawn on the map, and the lake sound.
  • Server-owned lake list, synced to every player. The tarn console commands.