You are viewing a potentially older version of this package. View all versions.
Zephyrfit-PlayerMapLayers-0.2.7 icon

PlayerMapLayers

Per-account exploration layers, subtle non-stacking player colors and explicit selective pin sharing.

Date uploaded 6 days ago
Version 0.2.7
Download link Zephyrfit-PlayerMapLayers-0.2.7.zip
Downloads 44
Dependency string Zephyrfit-PlayerMapLayers-0.2.7

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

Player Map Layers

Player Map Layers keeps one cartography layer per platform account, while always showing the current character name in the interface. Players can preview one or several layers before importing them, isolate one player's map, avoid reapplying the same revision and undo the last import.

Public beta 0.2.7. The same version must be installed on the server and on every participating client.

Current features

  • Server-authoritative layer storage, separated by world.
  • Stable account identity derived by the server; raw platform identifiers are never sent to other clients.
  • Current character name displayed in the UI and previous character names retained only as metadata.
  • A successful Record discoveries action uploads only the player's personal exploration mask, never pins or mod markers.
  • A successful Read map action is intercepted non-destructively:
    1. the original personal/shared exploration masks and live pin references are captured;
    2. Valheim reads the table normally;
    3. the resulting exploration mask is captured;
    4. the original exploration masks and exact live pin collection are restored;
    5. the player chooses whether to apply the preview.
  • Rapid isolation of a single player's layer.
  • Multi-layer temporary preview.
  • Explicit Apply / Cancel controls.
  • One-level import rollback, also persisted locally for recovery after a restart.
  • Revision and SHA-256 fingerprint tracking to avoid reapplying an unchanged layer.
  • Player-selected named color and built-in emblem, accepted and synchronized by the server.
  • Selecting a player color or emblem synchronizes it immediately; cached previews refresh when the server returns the accepted identity.
  • Pins are private by default and can be shared individually from the Shared pins tab.
  • Every explicitly shared pin can use its original icon or a compatible BetterMap icon such as pickaxe, chest, portal, forage, dungeon, beehive, tar or sap; its original semantic identity remains unchanged for duplicate protection.
  • Temporary shared pins receive an optional relief halo in their author's server-accepted color without recoloring the icon itself.
  • Valheim's native Cartography table switch is the master on/off control for every shared pin.
  • Remote pins can be filtered locally: all players, selected players, or none.
  • Player Map Layers renders remote pins temporarily and removes semantic duplicates instead of importing them into the local map.
  • Active exploration previews use each player's server-accepted color at low opacity.
  • Player-color saturation is independently adjustable from 100% to 250%, with a stronger 180% default.
  • Player-only areas default to 8% opacity, the shared-table layer to 3%, and multi-player overlaps to one neutral 1.5% veil; colors are never alpha-stacked.
  • The exploration tint is a temporary local UI layer and never enters fog data, map saves or network payloads.
  • Opening the normal large map with Valheim's configured Map action starts the layer session with the full panel collapsed. Use Layer menu / Menu des couches to open it; Close / Fermer collapses it again without cancelling the active preview.
  • Reading a cartography table still opens the large map and the full panel automatically so the received layer can be reviewed immediately.
  • The last player-layer selection is remembered per world and local character and is previewed again when the map is reopened.
  • French UI when Valheim is in French; English otherwise.
  • No separate global keyboard shortcut: the mod follows Valheim's configured Map action, including AZERTY layouts and remapped controls.
  • Mouse clicks and wheel input over the mod window are consumed before Valheim's map can create, remove or move pins underneath it.

Compatibility policy

BetterMap

BetterMap remains the owner of its pins and icons. Player Map Layers discovers BetterMap's active icon types at runtime and only references a chosen type for temporary shared-pin rendering; it does not register replacement types, recolor BetterMap pins or duplicate portal markers. Player layers, preview baselines and undo points contain exploration bits only; no full serialized map is restored over the current pin collection.

TargetPortal

Player Map Layers does not patch TeleportWorld, does not use P and does not move portal pins. It auto-opens only when the player uses Valheim's configured Map action, so TargetPortal's programmatic destination map remains independent.

SimpleAccessControl

SimpleAccessControl remains responsible for permission checks on the cartography table. Player Map Layers only reacts when Valheim's original OnRead handler was allowed to run, or after a successful OnWrite, and does not consume Shift + Use, Shift + A or Shift + Q.

Installation

Player Map Layers is distributed as a standard Thunderstore package. BetterMap, TargetPortal and SimpleAccessControl are optional integrations, not required dependencies.

Gale (recommended)

  1. Open the Valheim profile that will use the mod.
  2. Search for PlayerMapLayers in Gale.
  3. Select Download, then keep the mod enabled in the profile.
  4. Repeat this for every participating client and install the same package version on the server.
  5. Launch the game through Launch modded.

No compiler, development archive or manual installer is required for normal players. Updates are delivered through Gale like any other Thunderstore mod.

Dedicated servers

Install the same Thunderstore package version in the server's Valheim/BepInEx profile. Restart the server after installation or update. Player layers and explicitly shared pins are stored server-side and remain separated by world.

Usage

  1. Build a vanilla cartography table.
  2. Use Record discoveries to upload or update your personal layer.
  3. Use Read map on the cartography table, or open the large map and select Layer menu / Menu des couches.
  4. Select one or more players.
  5. Choose Preview, Isolate, or Apply selected.
  6. Use Undo last import if the result is not wanted.

Selective pin sharing

  1. Open the large map and select Shared pins.
  2. Check only the personal saved pins that should be shared.
  3. Choose the display icon with the arrows beside each pin, then select Synchronize checked pins. Unchecked pins remain private; unchecking a previously shared pin removes it from the server list on the next synchronization.
  4. Keep Valheim's native Cartography table switch enabled to see shared pins.
  5. Choose All, Players, or None. The Players filter exposes one checkbox per remote account.

System markers and temporary pins are never offered for sharing. If BetterMap or TargetPortal already owns an equivalent marker at the same position, its native marker is retained and Player Map Layers does not draw a duplicate.

Identity

Internally, the server maps the authenticated platform account to a salted UUID. The UI never shows that UUID. It displays the latest character name seen for the account.

Several characters using the same platform account therefore keep the same color, emblem and ownership. Each submitted character name remains available internally for diagnostics and migrations.

Configuration

Generated file:

BepInEx/config/zephyrfit.playermaplayers.cfg

Important settings:

  • PreviewBeforeImport = true
  • UploadOnCartographyWrite = true
  • AllowIdentityChanges = true
  • MaximumLayerSizeKb = 4096
  • PreferredColor = #56B4E9
  • PreferredEmblem = Compass
  • RemotePinFilter = All
  • ShowLegacyPinsInSelectedFilter = true
  • AuthorColorHalos = true
  • Exploration overlay.Enabled = true
  • Exploration overlay.SinglePlayerOpacity = 0.08
  • Exploration overlay.SharedTableOpacity = 0.03
  • Exploration overlay.OverlapOpacity = 0.015
  • Exploration overlay.ColorSaturation = 1.8
  • Interface.ParchmentTheme = true

The parchment theme is generated locally, scales with the window and ships without an external UI dependency. Set ParchmentTheme = false to restore the classic Valheim IMGUI theme.

Group sharing is reserved behind EnableGroupSharing = false; no group menu is displayed while it is disabled.

Server data

Server layers are stored per world under:

BepInEx/config/PlayerMapLayers/world_<world UID>/layers/

Explicitly shared pin lists are stored separately under world_<world UID>/pins/. They never enter exploration payloads or local map saves.

Writes are atomic and preserve a .bak copy of the previous layer.

Roadmap

  • Optional accessibility initials or patterns, disabled by default and designed to avoid map clutter.
  • Optional per-category pin filters and a dedicated legacy-table pin category.
  • Optional internal group sharing, hidden by default.

Support

Discord: @zephyrfit
User ID: 251341133085540352

When requesting support, attach BepInEx/LogOutput.log and specify the Valheim, Player Map Layers, BetterMap and TargetPortal versions.

CHANGELOG

Changelog

0.2.13 - Responsive map interface

  • Made the cartography window adapt its width and height to the current game resolution and configured interface scale.
  • Added a global vertical scrollbar whenever the complete menu cannot fit on-screen, keeping every identity, exploration, pin and import control reachable.
  • Preserved dedicated scroll areas for player layers, pin owners and local shareable pins while sizing them proportionally on shorter displays.
  • Changed the identity color palette from a fixed four-column layout to two, three or four columns depending on available width.
  • Removed fixed-width pressure from the emblem and local-pin rows so labels no longer push controls outside narrow windows.

0.2.12 - Gale-safe per-user settings

  • Moved personal identity preferences, pin filters, tint controls and interface settings from the Gale-synchronized BepInEx profile into Valheim's per-Windows-user LocalLow/PlayerMapLayers directory.
  • Moved remembered layer selections, shared-table snapshots, import ledgers and undo recovery into the same non-synchronized local root.
  • Added selective migration of legacy client state: only files matching the current local Valheim player ID are moved, preventing a synced profile owner's state from being adopted by new subscribers.
  • Preserved existing account identity by requesting the server layer index after the local player becomes available and restoring the server-accepted color and emblem.
  • Bumped the layer RPC endpoints to v5 so the server can return the requesting player's exact salted account UUID privately in its index; stored PML4 layer files remain fully compatible.
  • Removed obsolete personal keys from zephyrfit.playermaplayers.cfg; the remaining file contains only common/server-oriented settings.
  • Kept exploration and explicitly selected pins flowing through the existing validated server RPCs. Server storage and redistribution are unchanged.

0.2.11 - Filter label and localization audit

  • Renamed the compact Layer menu / Menu des couches launcher to Filter / Filtre.
  • Audited the French and English dictionaries for exact key parity. French remains selected only when Valheim uses French; every other game language falls back to English.

0.2.10 - Persistent views and simplified exploration workflow

  • Replaced the two preview buttons with live layer selection: checking or unchecking any player or the shared table updates the map immediately.
  • Added Me + table, All and None presets while preserving arbitrary combinations such as local player + table + selected remote players.
  • Persisted the last valid shared-table snapshot locally per world and local character, so the exact remembered view can return after closing the map or restarting the game.
  • Moved exploration-color controls into the collapsible My identity section and renamed them Individual color configuration.
  • Moved permanent import into a separate advanced section and clarified that it is optional for normal layer viewing.
  • Permanent import now reports when all selected discoveries were already present, creates an undo point only for a real change, and restores the selected colored view afterward.
  • Removed the misleading Imported marker from the local player's own row.

0.2.9 - Clear layer selection, stable pin ownership and compact settings

  • Removed the duplicate synthetic My personal exploration row. The player's normal account/character row now uses the current local personal mask while retaining the server-authoritative name, color and emblem.
  • Kept the shared-table layer independently selectable and preserved the one-click personal + table preset.
  • Changed tint composition so the shared table is a background only: selected player colors remain visible on cells also known by the table, while true multi-player overlaps stay neutral.
  • Fixed author halos by resolving the actual Unity graphic component instead of tinting the pin's layout container.
  • Stopped removing and reinserting unattributed live pins. All / Players / None now filters only pins synchronized through Player Map Layers; native, BetterMap and TargetPortal pins remain untouched.
  • Added purple, turquoise, lime and white identity colors.
  • Added collapsible identity and exploration-color sections and centered the selected emblem label in the full row.

0.2.8 - Pin lifecycle reconciliation and personal + table preset

  • Fixed detached cartography and TargetPortal/BetterMap pin graphics moving as one screen-space block after panning or zooming.
  • Replaced the destructive m_pins.Clear() restoration with reference-based reconciliation: existing pin objects are left untouched and only additions made during the intercepted table read are removed through Valheim's normal RemovePin lifecycle.
  • Added a compatibility fallback that destroys an added pin's root UI object before removing its data entry if Valheim changes the RemovePin signature.
  • Split the local personal exploration mask from the shared cartography-table mask.
  • Added explicit My personal exploration / Mon exploration personnelle and a one-click personal + shared table preview.
  • Confirmed localization policy: French is used only when Valheim selects French; every other game language falls back to English.

0.2.7 - Stable pin layout and collapsible layer menu

  • Replaced the old broad Minimap.Update suppression with targeted map-click guards plus a guarded native pin-layout refresh. The map cannot receive add/remove/ping/pan actions through the panel, and its pins can no longer remain at stale screen coordinates.
  • Author-color halos are re-anchored immediately after Valheim and BetterMap finish laying out the native pins.
  • The large map now opens with a compact Layer menu / Menu des couches button instead of the full panel.
  • Closing the panel collapses it without cancelling the current preview, selection or shared-pin display.
  • Reading a cartography table still opens the full panel automatically for the preview workflow.
  • Promoted the documentation to a Gale-first public beta: regular users install the published package directly, while build and local-installer instructions live only in the separate DEVKIT documentation.
  • Added a guarded interactive Thunderstore publisher: team prompt, masked one-use token, clean rebuild, explicit confirmation and automatic credential cleanup.

0.2.6 - Author-halo compilation hotfix

  • Fixed a C# local-variable shadowing error in the new author-halo renderer that prevented the 0.2.5 DEVKIT from compiling.
  • No network, storage or configuration schema changed from 0.2.5.

0.2.5 - Input isolation, saturated colors and author halos

  • Prevented mouse clicks, dragging and wheel input over the mod window from reaching Valheim's map underneath.
  • Applied the parchment texture to every focused, active and selected window state so the panel no longer changes appearance or becomes translucent while manipulated.
  • Added an independent 100–250% exploration-color saturation control with a stronger 180% default; existing opacity controls are unchanged.
  • Added optional relief halos behind temporary shared pins using each author's server-accepted color without recoloring BetterMap or TargetPortal icons.
  • Added explicit multi-selection guidance and a live selected-layer count; any player combination can include or exclude the shared-table layer.
  • Reduced list viewport heights to keep every action visible after adding the new controls.

0.2.4 - Per-pin icons and remembered layer selection

  • Added an independent display-icon selector to every local pin offered for explicit sharing.
  • Discovers BetterMap's live pickaxe, chest, portal, forage, dungeon, spawner, Vegvisir, beehive, tar and sap types without creating competing pin types.
  • Keeps the original pin type inside its semantic fingerprint, so changing only the display icon cannot defeat duplicate protection.
  • Persists the selected icon in a backward-compatible PMP2 store; existing PMP1 pin files are still loaded with their original icons.
  • Remembers the last single- or multi-layer selection per world and local character and automatically previews it when the map is reopened.
  • Centers the selected emblem name between its navigation arrows.
  • Bumped the additive pin protocol to schema 2; server and participating clients must all run 0.2.4.

0.2.3 - Nordic parchment interface and live identity refresh

  • Added a compact Nordic parchment theme with warm paper panels, dark wood buttons, amber selected tabs and a classic-theme fallback.
  • Increased the window height and reduced the empty layer-list viewport so Apply, Cancel and Undo remain visible.
  • Selecting a color or emblem now synchronizes the server-authoritative profile immediately.
  • Fixed stale cached layer metadata that could keep an active preview on the previous color after the server accepted a new one.
  • Refreshes the tint texture when a new server layer index changes identity metadata without changing exploration data.

0.2.2 - Lighter exploration overlay and clearer layer list

  • Reduced the default player tint from 16% to 8% and automatically migrates the exact 0.2.1 default.
  • Added a separate 3% opacity for Shared table exploration and reduced neutral overlaps to 1.5%.
  • Added in-map − / + opacity controls for player colors and the shared-table layer; changes are saved locally.
  • Removed the redundant color squares from exploration rows while retaining useful owner colors in the pin filter.

0.2.1 - Subtle non-stacking exploration colors

  • Added a temporary local color overlay for active exploration previews, using each player's server-accepted profile color.
  • Uses 16% opacity for cells exclusive to one selected player and one neutral 4% veil for overlaps; colors never stack.
  • Keeps the tint aligned with Valheim's large-map UV rectangle while panning and zooming.
  • Places the generated layer below normal pin UI, makes it non-interactive and destroys it on cancel, apply, map close or plugin unload.
  • Added an in-map toggle plus configurable single-player and overlap opacities.
  • Does not modify fog arrays, serialized map data, network payloads, BetterMap markers or TargetPortal pins.

0.2.0 - Explicit selective pin sharing

  • Added a dedicated Shared pins tab; personal saved pins are private until individually checked and synchronized.
  • Stores one complete pin list per platform-account UUID and world; synchronizing replaces it atomically so unshared or deleted pins do not linger.
  • Keeps Valheim's native Cartography table switch as the master visibility control.
  • Added local All / Players / None filters, with per-owner selection when Players is active.
  • Treats existing unattributed cartography-table pins as one reversible legacy category; they can be hidden without deleting their live objects.
  • Renders remote pins temporarily without importing them into the local map or exploration payload.
  • Deduplicates by semantic pin identity so an existing BetterMap, TargetPortal or vanilla marker remains authoritative.
  • Excludes system, player, death, boss, merchant, event, ping and other temporary markers from sharing.
  • Renamed Shared cartography table to Shared table exploration to distinguish exploration from pins.
  • Kept exploration network/storage schema 4; the additive pin protocol uses its own schema 1 and does not migrate existing player layers.

0.1.8 - Reliable isolation and localized Map input

  • Fixed player-layer contamination when Sync my personal exploration was used during an active preview; the saved pre-preview personal mask is uploaded instead.
  • Invalidates a cached payload whenever the server advertises a new fingerprint, so Isolate downloads and uses the current revision rather than stale data.
  • Rebuilds the fog texture with Valheim's distinct personal/shared color channels and logs the explored-cell count of every isolated preview.
  • Follows Valheim's configured Map action through ZInput, with Unity M/comma fallback for QWERTY/AZERTY compatibility.
  • Renamed the ambiguous profile synchronization button to make clear that it uploads personal exploration only.
  • Network schema 4 remains compatible with 0.1.7; the server data does not need another format migration.

0.1.7 - Non-destructive pins

  • Removed every full-map SetMapData restore from preview, cancel, apply and undo paths.
  • Baselines and undo points now contain only the personal and shared exploration BitArray masks.
  • Cartography reads snapshot and restore the live pin collection by reference, preserving unsaved dynamic markers such as Hildir, the Bog Witch and mod-created location pins.
  • Added a dedicated exploration-state format; legacy full-map undo snapshots are rejected instead of being applied destructively.
  • Kept the automatic M entry point and the large-map fallback button introduced in 0.1.6.
  • Bumped the network and stored-layer schema; server and clients must all use 0.1.7.

0.1.6 - Valheim 1.0 exploration compatibility

  • Fixed cartography capture and previews for Valheim 1.0.15, whose exploration fields are BitArray instances rather than bool[] arrays.
  • Opening the normal large map with Valheim's M key now opens the layer panel automatically; the compact button remains as a fallback.
  • Restored the cartography-table flow: Read map captures the shared exploration result, restores the player's original map, opens the large map and displays the preview panel.
  • Added explicit diagnostics for the detected exploration storage and both large-map entry points.
  • Bumped the network and stored-layer schema; client and server must both use 0.1.6 and discoveries must be recorded again.

0.1.5 - Safe exploration layers and map entry point

  • Replaced full serialized-map player payloads with compact exploration-only masks.
  • Fixed the Map exploration array size mismatch failure that prevented selected layers from being merged.
  • Preview, isolation, apply and undo now preserve the current pin collection, including BetterMap and world-location markers.
  • Added a Player layers button whenever the large map is open, so the panel is available away from the cartography table.
  • Removed the redundant compatibility sentence from the panel.
  • Replaced hexadecimal color cycling with a visible, named color palette and localized emblem names.
  • Bumped the network and stored-layer schema; players must record discoveries again after installing 0.1.5.

0.1.4 - Read result semantics fix

  • No longer treats the three-argument MapTable.OnRead return value as proof that the interaction was denied; Valheim 1.0.15 can return false after a normal read.
  • Uses Harmony's __runOriginal state to distinguish a normal cartography read from an interaction actually blocked before Valheim's handler ran.
  • Keeps SimpleAccessControl authoritative: a denied interaction still does not open the Player Map Layers panel.

0.1.3 - Cartography interaction fix

  • Targeted the exact three-argument MapTable.OnRead overload wired to Valheim 1.0.15's Read map interaction.
  • Reading a cartography table now explicitly opens the large map with the Player Map Layers panel and non-destructive preview.
  • Avoided duplicate nested handling through the internal four-argument OnRead overload.
  • Made large-map state detection tolerant of both m_mode and m_largeRoot.
  • Extended the map-open timeout and added clear table, panel and network diagnostics to LogOutput.log.
  • Added a soft load-order dependency so SimpleAccessControl is detected after it is loaded.
  • Prevented the client IMGUI component from being created in the dedicated-server process.
  • The installer backs up and removes the obsolete direct-profile DLL before importing the managed Gale package.

0.1.2 - Managed Gale installation

  • Replaced the direct client DLL copy with a complete local-package import through Gale.
  • Added Gale profile selection, Steam/Valheim discovery and a running-game guard.
  • Added build artifact and SHA-256 verification.
  • Added explicit output paths for the generated BepInEx configuration and launcher log.
  • Kept optional direct DLL installation only for a separately selected local dedicated server.
  • The installer now fails clearly when Gale cannot import the package instead of silently creating an unmanaged client plugin.

0.1.1 - Valheim 1.0 compilation compatibility

  • Removed compile-time dependency on the obsolete ZRoutedRpc.GetServerPeerID API.
  • Added version-tolerant server-peer resolution with safe failure when no route can be resolved.
  • Removed the compile-time dependency on Valheim's legacy Localization type.
  • Removed the implicit UnityEngine.TextRenderingModule dependency from the UI styles.

0.1.0 - Development preview

  • Added per-account, per-world map-layer storage.
  • Added salted internal UUIDs with character-name display and alias history.
  • Added upload after successful cartography-table recording.
  • Added non-destructive preview after reading the table.
  • Added individual isolation and multi-layer preview.
  • Added explicit import, cancellation and persistent one-level rollback.
  • Added revision and payload-fingerprint anti-duplicate protection.
  • Added synchronized player color and emblem metadata.
  • Added French and English interfaces.
  • Added soft compatibility rules for BetterMap, TargetPortal and SimpleAccessControl.
  • Added Gale/Thunderstore packaging and local development installer.