You are viewing a potentially older version of this package. View all versions.
j1gA-LivingMap-0.15.2 icon

LivingMap

Buildings, hoe-made paths, clear-cuts and planted groves on the map and minimap. Reads the object database, so the host sees the whole world at once. Client-side, no Harmony patches.

Date uploaded 2 days ago
Version 0.15.2
Download link j1gA-LivingMap-0.15.2.zip
Downloads 394
Dependency string j1gA-LivingMap-0.15.2

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 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.2350

README

LivingMap

Client-side map mod for Valheim. It draws onto the map texture itself, so everything below is part of the map: it pans, zooms, hides under the fog of war and under every marker, on the big map and the minimap alike.

The big map: vanilla on the left, LivingMap on the right - the base, its paved circle, paths and the cleared forest around it

The minimap: vanilla on the left, LivingMap on the right

  • Buildings, coloured by material (wood, stone, iron, marble, ...), with a dark outline so a house separates from the levelled ground it stands on.
  • Hoe-made paths: dirt paths, paving and cultivated soil.
  • Forest that is gone: where the vanilla map still shows woods but the trees have been cut, the forest pattern is erased. Where you planted a grove, it appears.
  • Sharper map texture: 3 m per pixel by default (vanilla is 12 m), up to 1.5 m.

Everything is read from the game's object database rather than from what is loaded around you. On the host (single player, or the player hosting) that is the entire world at once, and whatever is torn down disappears from the map. On a client of a dedicated server it is everything the server has sent you this session, remembered between sessions in a file per world.

No Harmony patches, nothing sent over the network, no effect on players without the mod. If anything fails, the mod switches that layer off and leaves the vanilla map as it was.

Settings

BepInEx\config\j1ga.livingmap.cfg, grouped into General, Layers, Scanning, Rendering, Colors, Advanced and Debug. The ones worth knowing:

Setting Meaning
MapTextureScale 1 / 2 / 4 / 8 = 12 / 6 / 3 / 1.5 m per pixel; 16 MB / 67 MB / 268 MB / 1 GB of video memory. Change needs a world re-enter.
ShowBuildings, ShowPaths, ShowClearedForest, ShowPlantedForest The layers.
RespectFog Only draw on explored ground.
MinPieceSizeMeters Smallest size a build piece is drawn at, in metres.
ClearedForestRadius, ClearedForestMaxTrees How empty an area must be to count as cleared forest.
PlantedForestMinTrees Trees per 12 x 12 m map pixel to count as a planted grove.
Debug Verbose log with timings.

Colours are configurable per material and per path type.

Compatibility

Tested with Valheim 1.0.16 (network version 40), BepInEx 5.4.23.5 (BepInExPack_Valheim 5.4.2351).

Who needs it

Who What
Player with the mod sees buildings, paths and forest changes on their own map
Host / single player the same, for the whole world at once
Dedicated server not needed
Players without the mod unaffected — nothing is sent over the network

Known conflicts

  • Other mods that replace or resize the map texture or its shader may clash with MapTextureScale — set it to 1 to rule this out.
  • SatelliteMap (Qua8ion) draws its own picture over the big map when zoomed in; the two have not been tested together.

Bugs and feedback

GitHub Issues: https://github.com/tbsj1ga/LivingMapValheim/issues — please attach BepInEx/LogOutput.log.

More mods by j1gA

Mod
StationSpeed StationSpeed — Faster smelters, kilns, fermenters and crops — consistent even for players without the mod.
WeaponArts WeaponArts — One key, one active ability per weapon: stagger, taunt, heals, berserk, crits.
ExtendedBosses ExtendedBosses — Raid-style boss fights: phases, adds, nests, shields, marks — built from vanilla parts.
HostOwner HostOwner — The host takes ownership of stations and bosses near it, so its mods work for everyone.

Source, documentation and the changelog: https://github.com/tbsj1ga/LivingMapValheim

Developed with the help of an AI assistant (Claude by Anthropic); the design decisions, verification against the game code and in-game testing are the author's.

CHANGELOG

Changelog

The version is set in one place — LivingMapPlugin.Version in src/LivingMapPlugin.cs.

0.15.3

  • Package page rewritten for players: what the mod shows, what it does not do (the terrain itself is not made more detailed), multiplayer, the few settings worth knowing. The misleading "sharper map texture" line is gone; MapTextureScale is described everywhere as the sharpness of buildings and paths. No gameplay changes.

0.15.2

  • Package page: a section with the author's other mods (icons, one line each, links). No code changes.

0.15.1

  • Package page: screenshots of the big map and the minimap, vanilla vs LivingMap; sections on compatibility, who needs the mod, known conflicts and where to report bugs; links to the GitHub repository. No code changes.

0.15.0

  • Settings regrouped, by who needs them. Seven sections: General (Enabled, SaveOverlay), Layers (every switch followed by its own thresholds — the forest thresholds moved here from Scanning), Scanning (the two sources and ZdoScanInterval), Rendering (MapTextureScale and TerrainGridSize moved here), Colors, Advanced (ZdoObjectsPerFrame, ScanRadius, MaxPieces, MaxTerrainCells) and Debug (Debug, DebugMarker, IncrementalRedraw, LinearColorFix, MapLayerFlipY). The Storage section is gone. The outline colour is Building_Outline, so it no longer shares a name with the BuildingOutline switch. On the first start the values are carried over from the old file and the obsolete lines removed (including those of the ten settings 0.14.0 dropped); a value already present under the new section wins.
  • Six settings became constants: MoveDelta, ScanInterval, IdleRescanInterval and MaxColliders (pacing and buffer of the fallback scanners, which do nothing with the default ZDO sources), MapRebuildInterval (0.5 s) and SaveInterval (60 s).
  • TerrainGridSize is safe to change. Path cells are keyed by grid cell and the file did not record the step, so a changed step silently misplaced every stored cell. The file now records it (format v7); on a mismatch the path cells are dropped and collected again. Older files are read as is.
  • Descriptions corrected: ScanRadius no longer claims to serve the path layer (not since 0.12.0 with PathScanSource = ZDO); the forest layers no longer ask for "the GPU map layer", the only one since 0.14.0.

0.14.0

  • livingmap console command: status — what the map remembers and where from; reset [buildings|paths|forest] [metres|all] — forget a layer within a radius (100 m by default) or across the whole world and collect it again. Resetting the forest no longer means deleting the world file and the paths with it.
  • OnlyPlayerBuilt — show only what players built, without the ruins and villages that come with locations (they carry no creator in the ZDO). Off. Switching it drops the stored pieces; the rule is remembered in the file (v6).
  • Cleanup. The CPU painting path and the DetailedOverlay screen-space layer are gone along with their ten settings. The layer lives on the GPU only; without it the mod stays idle instead of painting the old way.

0.13.0

  • Rename: MapOverlay → LivingMap. GUID j1ga.livingmap, name "Living Map", assembly LivingMap.dll, namespace and class LivingMapPlugin, package LivingMap. On the first start the settings and the per-world data are copied from the old files; the old files are left alone. If the old MapOverlay.dll is still loaded, the mod stays idle and says so in the log.

0.12.0

  • Paths across the whole map. Ground paint is read from the _TerrainCompiler records in the object database (the same blob the game saves) instead of the loaded terrain around the player: on the host the whole world at once, on a client of a dedicated server the zones sent this session. Only records whose revision changed are re-read. Cells match the old scan to the metre. Setting: PathScanSource (ZDO / Heightmap). One difference from the old scan: paint that locations apply to the terrain without a record (the old TerrainModifier) is absent from the records and no longer shown. In debug mode, loaded zones get a check of the record against the live terrain.
  • Infrastructure: the source is split into 10 partial class files by area; check-refs.ps1 compares references and reflection targets with the current game after every build; build.ps1 -Package builds the Thunderstore package (thunderstore\); LICENSE (MIT); the .csproj writes to build\.

0.11.0

  • Incremental redraw. New buildings, path cells and everything that comes out of the fog of war are drawn on top of the existing texture; the layer order (paths → outlines → fills) is restored locally by refilling the neighbours. A full rebuild happens only when something disappeared or changed, the texture was lost or a layer was switched. At scale 8 that is the difference between a gigabyte at a time and a couple of dozen quads.
  • The forest mask is rebuilt separately and only when the forest changes.
  • Fog of war on the GPU path: shapes in unexplored places now appear within 15 s of exploring, not at the next map change.
  • The physics building scanner no longer rebuilds the layer when nothing in its radius changed.
  • Setting: IncrementalRedraw (off = the old behaviour).
  • Default MapTextureScale 2 → 4. The debug log now carries the time of every step (… ms CPU).

0.10.0

  • Cleared forest. Where the vanilla map draws forest but the object database holds no more than ClearedForestMaxTrees trees within the ClearedForestRadius window (TreeBase only; stumps, bushes and saplings do not count), the forest pattern is erased — clear-cuts around a base and clearings around locations show as they are. Trees are counted during the same ZDO pass; on the host every generated zone is checked (ZoneSystem.m_generatedZones), on a client of a dedicated server the zones that were inside the active area, with the result remembered in the file (format v4; v3 still reads). Drawn into a copy of the _MaskTex mask with a multiplicative blend, so the vanilla shader removes the forest itself. Settings: ShowClearedForest, ClearedForestRadius, ClearedForestMaxTrees. GPU layer only.
  • Planted forest. Where the map knows no forest but a pixel holds PlantedForestMinTrees trees or more, the forest pattern appears — the vanilla one, with an additive blend into the same mask copy. Only in biomes where vanilla draws forest at all, unless PlantedForestAnyBiome is on. Settings: ShowPlantedForest, PlantedForestMinTrees, PlantedForestAnyBiome. File format v5 (v3/v4 still read).
  • The ZDO pass now runs with ShowBuildings off as well (the forest layer needs it); buildings are left alone then.

0.9.0

  • Buildings are read from the game's object database (ZDOMan), not from physics. On the host that is the whole world at once, no walking needed, and demolished pieces disappear from the map on their own; on a client of a dedicated server it is everything the server has sent this session, and clearing empty pixels is trusted only inside the active area. Footprints come from the piece-layer colliders of the prefab (ZNetScene) with the object's rotation applied; cached per prefab hash. The database is walked in slices across frames with no allocations between passes (a list pool, a reused reference snapshot). New settings: BuildingScanSource (ZDO / Physics), ZdoScanInterval, ZdoObjectsPerFrame. The physics scanner stays as the fallback: by setting, or on its own if the m_objectsByID field is missing or reading the database fails.
  • build.ps1 — builds build\LivingMap.dll with the stock csc.exe from the .NET Framework; -Install copies into plugins. assembly_utils added to the .csproj and the reference list (the Vector2s type in the signature of ZNetScene.InActiveArea).

0.8.0

  • The minimum shape size is in metres (MinPieceSizeMeters), not texture pixels. Before, raising MapTextureScale made small building pieces less visible, not more.
  • A contrasting material palette plus a dark outline around buildings (BuildingOutline), so a house separates from the hoe-levelled ground under it (wood and a dirt path used to be almost the same brown).

0.7.0

  • The layer is drawn straight into the map texture: RenderTexture + Graphics.Blit of the vanilla texture + drawing through GL with the Hidden/Internal-Colored shader. It is now part of the map: it pans, zooms, goes under markers and under the fog of war, works on the minimap.
  • MapTextureScale 1/2/4/8 → 2048/4096/8192/16384 pixels, stepping down when the texture allocation is refused.
  • LinearColorFix — colour-space correction (Color.linear); otherwise the colours washed out under linear rendering.
  • The screen-space layer (DetailedOverlay) is now off by default.

0.3.0

  • Fixed the position of the screen-space layer: Minimap.MapPointToLocalGuiPos already returns 0..rect.width from the lower-left corner of the image, so subtracting rect.xMin was wrong — the layer drifted up and right by half a screen.
  • Removed a systematic ~0.5 m terrain offset: GetVegetationMask samples at p - 0.5, GetPaintMask(Vector3) does not.

0.2.0

  • Hoe-made paths are finally visible. Only the green and blue channels of the paint mask were checked, but PaintType.Dirt is red, and that is the most common way of making roads.
  • An optional layer for merely levelled ground (ShowClearedGround).

0.1.0

  • First working version: buildings scanned through Physics.OverlapSphere, colour by WearNTear.MaterialType, accumulation in a per-world file, fog of war respected, a 25-error fuse.
  • Fixed right after release: ground-paint classification summed all four mask channels, and alpha is 1 in every mask — so all ground around the player was painted as paved.