You are viewing a potentially older version of this package. View all versions.
DragonMotion-RavenMap-1.9.7 icon

RavenMap

A lightweight shared map with smart resource, pickable and dungeon pins, local filters, highlights, and optional X-ray. Beta testing is in progress; errors may still occur.

Date uploaded 3 days ago
Version 1.9.7
Download link DragonMotion-RavenMap-1.9.7.zip
Downloads 108
Dependency string DragonMotion-RavenMap-1.9.7

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2333 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.2333

README

RavenMap

A lightweight shared map for Valheim with useful automatic pins and local filters for every player.

RavenMap is currently in beta testing, so errors may still occur.

Install

RavenMap must be installed on the server and every client.

  1. Install BepInExPack Valheim 5.4.2333.
  2. Create BepInEx/plugins/RavenMap and extract all five archive files into it.
  3. Start the game once to create BepInEx/config/dragonmotion.ravenmap.cfg.

RavenMap is not compatible with other shared-map or automatic-pin mods, including Huginn Map and One Map To Rule Them All.

Features

  • Shared normal fog of war and automatic pins.
  • Unified colorful map icons with dark outlines for vanilla markers, Valheim locations, RavenMap pins, and supported More World Locations traders and ports. Six local size controls match the six filter groups: Valheim, deposits, pickables, dungeons, other RavenMap marks, and supported world locations.
  • Real mineable resource detection for vanilla, Balrond Amazing Nature, and compatible modded deposits.
  • Separate pins and biome filters for wild berries, mushrooms, herbs, and plants. Renewable sources are crossed after harvest and restored by the game's real respawn event; one-shot or physically destroyed sources are removed.
  • Vanilla and supported modded dungeon pins, automatic cleared crosses, and a shared manual override (Left Alt + left-click; change ManualToggleModifier).
  • Configurable removal of depleted resource pins.
  • Named portals, ships, and carts.
  • Duplicate protection for RavenMap, vanilla, and cartography-table pins.
  • Removed content mods no longer leave ghost pins or raw localization tags. The server safely retires exact missing sources, while clients with different mod lists hide unsupported shared pins locally.
  • Draggable and scrollable local filters, saved separately for each player and world.
  • Russian or English UI, matching the game's language.

Highlights and X-ray

Pulse smoothly highlights a complete vein. Sweep sends a soft scanning wave that enters before one mesh edge and leaves beyond the other. Pulse and Sweep have separate color, intensity, interval, and timing settings; Sweep also has configurable speed, width, and softness.

HighlightPickables optionally applies the selected Pulse or Sweep to nearby available berries, mushrooms, and plants. It respects cutout and transparent foliage, handles nearby groups fairly, and uses the same controls as ore. The setting is local and disabled by default.

XrayEnabled is the local master switch and is disabled by default. While it is enabled, F4 only shows or hides X-ray temporarily and does not change the config. Change or disable the key with XrayToggleKey. X-ray reveals only already discovered, loaded veins inside its radius.

Reset and diagnostics

The host or a server administrator can remove shared automatic pins for rediscovery with:

ravenmap resetpins confirm

This keeps shared fog, vanilla pins, and character map data. If a resource or dungeon state looks wrong, enable ShowStateOnMap in [10 - Diagnostics]. While that setting is enabled, dungeon diagnostics include a bounded trace# chain and write the same lifecycle steps as [DungeonTrace] entries in Player.log; turning it off immediately stops both. DetailedLogging controls other classification, deduplication, and network details, but does not enable the dungeon lifecycle trace.

Only loaded objects can be discovered or updated. On each physical dungeon entry, including loading a character already inside, RavenMap takes two matching snapshots of Valheim's exact generator volume and assigns every object to one dungeon. Actual room OBBs protect against overlapping or expanded modded interiors. Zero objects do not block a completed snapshot; one object requires one when its percentage is non-zero; larger percentage requirements are rounded down to whole objects. Respawning CreatureSpawner and SpawnArea components are detected separately from one-shot spawners, and a new live generation replaces the current enemy snapshot. Moving or overlapping enemies remain tied to that snapshot by their live ZDOID. Several players may enter the same dungeon at different times without replacing one another's live kill/open events; simultaneous visits to different dungeons remain isolated by source and exact volume. Opening a natural dungeon chest writes a persistent RavenMap inspection flag because vanilla does not store historical opening of a non-empty chest. Exact automatic progress and its crossed marker survive restart; a later physical entry replaces that saved snapshot before the dungeon is evaluated again. Legacy radius-based automatic data is not trusted, while manual overrides remain persistent.

Visual effects use the bundled Windows shader; if it is unavailable, map features continue without them.

RavenMap 1.9.7 targets Valheim 0.221.12, Steam build 21981559, Unity 6000.0.61f1, and BepInEx 5.4.23.3.

CHANGELOG

Changelog

1.9.11

  • Enemy completion percentages are now calculated from the fixed baseline captured for the active physical dungeon or cave visit. A fresh completion census may update the surviving set but can no longer shrink the denominator or erase kills from that visit.
  • Duplicate cave-entry signals from teleport arrival, generator readiness, player spawn recovery, and reference-position updates now converge on one visit token instead of restarting progress.
  • Moving enemies are merged by immutable live ZDOID, so their changing position cannot add the same creature to the baseline twice. Genuinely late-spawned enemies are still added once.
  • Local diagnostics now retain the same visit baseline and defeated count as the authoritative server view during a re-census.
  • RavenMap remains in beta testing, so errors may still occur.
  • Protocol is now v18; update the server and every client to 1.9.11.

1.9.10

  • Cave entry now prefers the exact loaded destination volume. Troll caves, frost caves, Hildir's cave and compatible modded interiors no longer depend on the exterior trigger point being inside a Location lookup radius.
  • Defeating the last known enemy or reaching the configured chest threshold starts one fresh authoritative completion snapshot. The server atomically replaces stale visit membership with the current live cave or dungeon contents before deciding the crossed-out state.
  • Ordinary resource damage callbacks are coalesced before live vein measurement, while terminal destruction still uses the existing immediate removal path.
  • Hidden automatic pins are revisited only when a new local fog pixel is explored. Sparse shared-fog batches now perform one texture upload after their frame-budgeted CPU work instead of one upload per chunk.
  • Sweep geometry, LOD projection ranges and the X-ray player mask are cached between unchanged passes. Shimmer now has a separate bounded total draw-command budget for multi-submesh modded objects.
  • X-ray keeps the lightweight dedicated shader pass: resources use a depth-tested command buffer without mutating source materials, and the player stencil mask prevents character flooding.
  • RavenMap remains in beta testing, so errors may still occur.
  • Protocol remains v17; update the server and every client to 1.9.10 for consistent shared dungeon state.

1.9.9

  • Upgrade World generation is now guarded for the complete Executor.StartExecution to StopExecution lifetime. Asynchronous Location Placement Accelerator work can no longer create RavenMap resource, pickable, dungeon, portal, ship, or cart pins in unvisited generated zones.
  • Every RavenMap automatic pin category is now hidden by actual local/shared fog after a world reset, matching the existing Valheim and supported More World Locations behavior. Hidden pins are re-evaluated only after a local or remote exploration event; no polling loop or full-world scan was added.
  • Successful world_reset reconciliation still retires every RavenMap automatic source in each exact zone that Upgrade World reports as reset. Regeneration cannot immediately add those pins back while the operation is active.
  • Added a GUID-scoped guard for Valheim's asynchronous dungeon cleanup race during Upgrade World execution. If the reset already removed a zone from ZoneSystem.m_loadingObjectsInZones, RavenMap skips only the redundant unregister that would otherwise throw KeyNotFoundException; normal vanilla cleanup is unchanged.
  • Replaced the colored vanilla hammer marker artwork with a normalized Valheim-style pickaxe icon and updated its English/Russian filter label.
  • RavenMap remains in beta testing, so errors may still occur.
  • Protocol remains v17; update the server and every client to 1.9.9 for the complete compatibility behavior.

1.9.8

  • Added optional Upgrade World compatibility selected only by its stable upgrade_world GUID; RavenMap has no hard assembly or version dependency and remains unchanged when the mod is absent.
  • zones_generate ghost spawning is no longer treated as player discovery, so it cannot create RavenMap automatic pins across unvisited terrain.
  • Known Valheim and supported More World Locations icons produced by pre-generation remain hidden under unexplored fog and appear after that map pixel is actually explored.
  • world_reset, including safeZones, now records only zones that Upgrade World successfully reset and retires stale RavenMap automatic sources there in one authoritative batch. Location redistribution also removes exact dungeon sources that no longer resolve in the rebuilt registry.
  • The integration is operation-driven, adds no update loop or background world scan, clears its bounded zone set after completion or abort, and uses RavenMap's existing snapshot threshold for large cleanup batches.
  • RavenMap remains in beta testing, so errors may still occur.
  • Protocol remains v17; update the server and every client to 1.9.8 for the complete compatibility behavior.

1.9.7

  • Surface procedural camps using Valheim's DungeonGenerator no longer enter RavenMap's interior-dungeon resolver. CampGrid/CampRadial generators such as DG_MeadowsFarm, DG_MeadowsVillage, and camp/ruin generators are ignored before exterior registration, volume caching, or unresolved-dungeon warnings.
  • Real interior generators still require DungeonGenerator.Algorithm.Dungeon and retain the exact source/volume/ZDO checks introduced in 1.9.6.
  • RavenMap remains in beta testing, so errors may still occur.
  • Protocol remains v17; update the server and every client to 1.9.7.

1.9.6

  • Package wording now identifies RavenMap as a beta under active testing and warns that errors may still occur.
  • Dungeon lifecycle traces are now collected and written to Player.log only while ShowStateOnMap is enabled. Turning the setting off immediately stops local trace#, [DungeonTrace], and informational dungeon snapshot logging.
  • Real warnings about an unavailable volume, failed interior recovery, or a snapshot that cannot stabilize remain visible because they indicate an actual failure rather than diagnostic tracing.
  • Fixed multiplayer visits to the same dungeon: one shared "last visit" token no longer invalidates kills or chest inspections from players who entered 0.5, 2, or 10 seconds earlier. Live events are bound to the current dungeon source, exact generator volume, immutable ZDOID, prefab, and actual dead/inspected ZDO state.
  • Parallel visits to different dungeons remain isolated by source and exact volume. An enemy or chest from one dungeon cannot mutate a neighboring or concurrently occupied dungeon.
  • Visit subject IDs now include the immutable live ZDOID, so two same-prefab enemies in the same 0.25-metre diagnostic cell no longer collide and reject the complete snapshot.
  • Visit snapshots now compare the authoritative inspected state of every chest, not only chest membership. Rejected dungeon submissions receive an explicit server NACK and start at most three fresh snapshot attempts instead of being silently acknowledged or retried forever.
  • All dungeon recovery coroutines now stop during teardown/reset, and obsolete accumulated/fraction helpers were removed.
  • Protocol is now v17; update the server and every client to 1.9.6.

1.9.5

  • Fixed the traced delayed-clear failure for moving enemies. The visit snapshot stored a positional subject id, but the death event rebuilt it at the death position; validation accepted the live ZDO and the state layer then rejected the changed id as state-mutation. Enemy and chest mutations now resolve through the immutable live ZDOID captured by the accepted snapshot.
  • Successful opening of a natural dungeon chest now writes a RavenMap inspection flag into that chest's owned ZDO. Unlike vanilla's item payload, this explicitly preserves a non-empty chest's opened state across restart and exposes it to later RavenMap visitors.
  • A chest opened before the entry snapshot finishes is retained immediately and starts a replacement snapshot when necessary, instead of being discarded because the published chest set is not ready yet.
  • Existing sidecar inspection evidence remains durable and exact. Vanilla does not store historical opening of a non-empty chest, so openings made before RavenMap observed them cannot be reconstructed retroactively; opening such a chest once records the new persistent flag.
  • Protocol remains v16; update the server and every client to 1.9.5.

1.9.4

  • Fixed the confirmed 1.9.3 volume-unavailable failure. A disabled Room.m_enabled value is generation-selection metadata and no longer invalidates an already instantiated saved room; a zero-sized or otherwise invalid room is isolated instead of deleting Valheim's valid canonical runtime generator volume.
  • Canonical m_zoneCenter/m_zoneSize remains authoritative. Valid instantiated room OBBs, including rooms now disabled for future generation, can expand it up to the existing bounded limit; an invalid or outlier room is reported without disabling the dungeon or widening ownership into a neighbor.
  • Added a bounded lifecycle trace to ShowStateOnMap and Player.log. It records generator/zone identity, exact size, accepted and skipped rooms, teleport coordinates and interior flags, owner resolution, snapshot reads, entrance submission and server acceptance or rejection.
  • Local authority now verifies that the normalized dungeon entrance actually exists on the server before applying its snapshot, closing another silent source-order failure.
  • Protocol is now v16; update the server and every client to 1.9.4.

1.9.3

  • Fixed the confirmed 1.9.2 load-inside failure: saved interior generators can spawn while their exterior Location GameObjects are not streamed, so Location.s_allLocations is empty for those zones.
  • Generator ownership now bootstraps from the durable ZoneSystem.m_locationInstances world registry and exact generator zone. A live Location is retained only as a compatibility fallback.
  • Fixed the disconnected player-spawn callback: Player.OnSpawned now starts bounded load-inside recovery directly instead of leaving that call in the unrelated bulk-map-exploration path.
  • The server source for a dungeon is created immediately before the uniquely occupied visit snapshot. Registry-backed generator loading returns before ordinary radius discovery, so neighboring saved interiors loaded in the same batch cannot be marked or contribute objects.
  • This preserves exact runtime m_zoneSize and room-OBB ownership while allowing the initial cache and snapshot to exist in solo, listen-host, dedicated-server and load-inside paths. Respawning spawners trigger a fresh exact composition snapshot rather than accumulating historical enemies.
  • Added lifecycle logging for generator registration, snapshot start, settled counts, submission acceptance and bounded recovery failures. The map diagnostic is refreshed by accepted authoritative changes.
  • Protocol is now v15; update the server and every client to 1.9.3.

1.9.2

  • Fixed the generator bootstrap deadlock that left every dungeon at 0/0: an interior DungeonGenerator now resolves its exterior Location before building the exact volume cache, instead of asking that still-empty cache to identify its own generator.
  • The same registration path now handles teleport entry, character loading directly inside an interior, listen hosts, dedicated multiplayer, and solo worlds. Solo snapshots are applied directly to local authority without RPC loopback.
  • Dungeon diagnostics now refresh on every accepted authoritative state change, use the stages emitted by the current snapshot pipeline, and keep total enemies distinct from living enemies. Removed obsolete accumulated-set and resolved/missing counters from the map label.
  • A failed generator association or invalid runtime volume is now a visible diagnostic stage and a one-time warning instead of a silent permanent 0/0.
  • Protocol is now v14 so 1.9.1 clients or servers cannot silently accept a session whose old generator bootstrap would reject every snapshot. Update the server and every client to 1.9.2.

1.9.1

  • Rebuilt dungeon ownership around Valheim's actual generator bounds instead of accumulated room/cache history. Each ZDO is assigned to one generator, so neighboring interiors cannot contribute chests or enemies.
  • Added bounded recovery when a character loads already inside an interior, including listen-host reference-position recovery.
  • Audited Balrond Amazing Nature 1.3.8: its larger 60/80-room limits remain constrained by vanilla generator bounds. Exact overflow-room OBBs are retained as a compatibility fallback for mods that truly place rooms outside those bounds.
  • Visit snapshots now identify real respawn capability from CreatureSpawner.m_respawnTimeMinuts and SpawnArea, wait for initial creature-spawner activation, and replace the current live enemy generation when spawns change.
  • Durable inspection evidence is retained only for chests still present in the new exact snapshot; stale and foreign chest ids are removed.
  • Protocol is now v13; update the server and every client to 1.9.1.

1.9.0

  • Replaced accumulated dungeon history with one authoritative snapshot per physical interior visit. A new entrant atomically replaces the server's old enemy and chest sets.
  • Dungeon membership now comes from the generated Room volumes owned by one DungeonGenerator; nearby interiors can no longer leak their enemies or chests into the current crypt.
  • The server independently validates that every submitted snapshot is complete for those exact rooms. Empty and already-cleared interiors are valid only after a stable fresh snapshot.
  • Completion thresholds now use integer floor semantics with a one-object safeguard: zero objects do not block, one object requires one when its percentage is non-zero, and two objects require one at 60-90%.
  • Exact room-owned dungeon progress and its automatic cross now survive restart in persistence schema v9. Radius-era v3-v8 automatic evidence is discarded, and the next physical entry atomically replaces the restored snapshot with the current dungeon state.
  • Removed the old generation-reset, register, resolve, room-count, respawn-source, and periodic recheck pipeline. Protocol is now v12; update the server and every client to 1.9.0.

1.8.10

  • Fixed the remaining dungeon-clear failure where diagnostics already showed zero enemies and every current chest inspected but an older Active pin status was never recomputed. An identical fresh census now repairs the shared cross and broadcasts the corrected pin.
  • Rebuilt interior ownership around the exact generated room volumes and a physical active-entry context. Outdoor objects, neighboring loaded dungeons, and stale streamed ZDO bindings can no longer inflate the current dungeon's enemy or chest totals.
  • Current chest census is now authoritative on both sides: the local replay cache and server state are compacted from historical 4 records to the actual live 2, including inspected state, without retaining stale resolved IDs.
  • Added persistence schema v7 for exact live chest proof. Unproven automatic crosses from v5/v6 are safely reopened for one fresh entry check; explicit manual overrides are preserved. Back up the RavenMap world-state sidecar before downgrading to an older release.
  • Hardened listen-host acceptance, stale-generation rejection, mutation acknowledgement, reclustering, and frozen-subject validation. Protocol remains v11, but the server and every client should all be updated to 1.8.10.
  • Kept the recovery bounded to the occupied dungeon's existing five-second worker. No frame update, global scene search, physics scan, or world-wide dungeon poll was added.

1.8.9

  • Fixed dungeon completion when Valheim or another mod bypasses RavenMap's teleport-entry callback. A validated occupied-dungeon census now proves entry by itself.
  • While the local player remains inside, the existing bounded five-second census also retries its unchanged snapshot. A missed or early network submission can no longer leave stale server history permanently active.
  • No new frame update, global scene scan, or physics scan was added. Multiplayer protocol is v11 so mixed 1.8.8/1.8.9 installations fail safely; update the server and every client to 1.8.9.

1.8.8

  • Fixed dungeon clearing when the current visit correctly sees every chest but stale server history still contains old chest identities.
  • A validated entry snapshot now replaces the server's current chest composition and inspected states atomically. Old records can no longer enlarge the completion denominator or block the shared cross.
  • Updated the multiplayer protocol to v10. The server and every client must run RavenMap 1.8.8.

1.8.7

  • Replaced the multi-message chest census with one atomic completion report containing every current chest ID and its live ZDO proof.
  • Every physical dungeon entry now forces one fresh current-session census, even when its counts match the previous visit.
  • Chest openings and enemy deaths remain immediate event-driven updates; the five-second in-dungeon pass is only a bounded recovery check.

1.8.6

  • Fixed cleared dungeons remaining blocked when the current two inspected chests were mixed with stale historical chest IDs.
  • Added an exact, live-ZDO-validated chest census so nearby or previously loaded dungeon containers cannot contaminate completion state.
  • Kept the census event-driven and bounded; no scene scan or per-frame work was added.

1.8.5

  • Fixed neighboring loaded interiors contributing enemies and chests to the current dungeon. Interior ownership now uses the exact generated-room volumes instead of Valheim's coarse 64 m location-zone lookup.
  • Deferred enemy, chest, and respawn-source registration until the complete room layout is available. The bounded deferred set is rechecked after generation and when dungeon entry is confirmed, without a scene scan or per-frame work.
  • Added fail-closed handling for missing or overlapping room layouts. RavenMap no longer publishes an empty census from incomplete geometry, and a subject claimed by two different interiors is rejected as ambiguous.
  • Added automatic repair for subjects previously assigned to the wrong dungeon. A settled exact-room census also resolves historical excess counts persisted by older releases.

1.8.4

  • Fixed existing portal pins disappearing after a world reload. Persisted-source repair now starts only after Valheim has loaded the world ZDO database and uses the game's complete portal registry instead of relying on streamed sectors.
  • Added an idempotent live-portal recovery pass. Servers affected by 1.8.3 recreate missing shared portal pins from existing portal ZDOs without scanning the full world database or creating duplicates.
  • Deferred destructive pin reconciliation until the final content catalog is ready. Optional and modded dungeon records now fail open and remain dormant when their descriptor is temporarily unavailable, preventing valid dungeon pins from being erased during startup.
  • Kept genuine portal destruction event-driven: destroyed portal sources are still retired immediately, while ambiguous startup state is never treated as proof that an object is gone.

1.8.3

  • Fixed rare ghost portal pins. Permanent server-side destruction now retires the exact shared source before its ZDO token disappears; startup reconciliation validates both modern stable: and legacy zdo: sources, migrates one exact match, removes only a proven zero-match portal, keeps ambiguous matches safe, and caches completed checks for the current world lifecycle.
  • Fixed dungeon enemy and chest over-counting caused by moving subjects, repeated lifecycle callbacks, and nearby objects. Logical identities stay frozen across ordinary streaming, current room membership is checked against a cached generated-room layout, and live counts are refreshed every five seconds only while the player is inside that dungeon.
  • Kept the active-dungeon refresh lightweight: it uses only bounded registered subjects, stops immediately outside the interior, performs no scene or physics scan, and sends no repeated census when the live counts are unchanged.
  • Hardened the five-second interior worker against third-party lifecycle exceptions. A failed modded object check is logged once and retried on the same bounded cadence instead of leaving a dead coroutine handle that can permanently stop dungeon updates.
  • Aligned dungeon verification with Valheim's own network model. Registration events carry the subject's current vanilla ZDO identity as short-lived server proof, while RavenMap keeps a separate stable logical identity for progress; one live ZDO cannot claim multiple subjects, and the five-second census no longer replays the complete registration history.
  • Fixed the vanilla crypt_skeleton_chest trap appearing as a Skeleton resource. Creature, loot-container, and loose-item drop tables no longer qualify as mineable deposits, and previously saved false pins are retired without resource tombstones.
  • Made icon sizes map one-to-one to the six visible filter groups. Other marks now affects only portals, ships, and carts; dungeons are independent, while manual marks, Valheim locations, and Hildir pins share the Valheim size. Existing profiles migrate without leaving obsolete settings.
  • Expanded the local Valheim filter into nested Map marks and Locations groups. All five manual icons plus death, bed, boss, the four built-in locations, and three persistent Hildir pins can be hidden independently without changing shared map data.
  • Hardened optional-content cleanup. Resource, pickable, dungeon, vehicle, and More World Locations sections are derived only from enabled registered content; unsupported shared records are hidden locally, and exact modern server sources from removed content are retired without fog snapshots or tombstones.
  • Kept the guarded Dverger aggression check from 1.8.2, preventing the early Character.Awake error shown by older 1.7.8 installations.

1.8.2

  • Added one unified colorful icon set for Valheim's four built-in locations and three persistent Hildir pin types, with a dedicated local Valheim filter section and independent icon-size control.
  • Corrected the filter panel: Other marks now has a real master switch, and the More World Locations section is localized in Russian and English.
  • Kept local presentation isolated from shared map data and excluded unused atlas-only Hildir sprites, transient player/event pins, and unrelated mod locations.
  • Deferred neutral Dverger aggression checks until BaseAI.Awake has initialized its network view, preventing a guarded Character.Awake error during dungeon generation.

1.8.1

  • Fixed More World Locations initialization failing on disabled or placeholder locations with an empty asset reference. Supported trader and port icons and their local filters now initialize normally without consulting the asset loader.
  • Hardened every RavenMap location-name fallback against the same invalid-reference failure while keeping location discovery event-driven.

1.8.0

  • Replaced vanilla map markers, RavenMap portal pins, and supported More World Locations markers with one colorful icon set with subtle dark outlines.
  • Split icon sizing into independent local controls for vanilla markers, other RavenMap pins, deposits, Pickables, and More World Locations markers. Existing AutomaticPinIconScale values migrate to all five controls.
  • Added local More World Locations filters for traders and ports. The section appears only for enabled registered MWL locations and disappears cleanly with its temporary pins when the mod is absent, without shared pins or tombstones.
  • Retained and regression-tested the physical held/released X-ray hotkey latch: F4 toggles exactly once per press only while XrayEnabled is enabled, independently of rendered FPS.

1.7.9

  • Fixed intermittent X-ray hotkey presses being lost, including the first press after startup or a binding change. RavenMap now derives one reliable edge from the physical held/released transition, while still consuming blocked presses and preventing repeats while the key remains held.
  • Fixed RavenMap synchronization filling Valheim's shared Steam reliable queue during player join. Every remote RavenMap message now passes through one per-connection queue-aware budget; small controls and deltas use a bounded ordered outbox, while snapshots, shared fog, and client imports use real-time pacing independent of rendered FPS.
  • Snapshot pin pages are now kept small, and shared fog fan-out tracks each recipient independently, so one congested player cannot stall other clients or lose a coalesced fog update.
  • Completed the final performance hardening pass: streamed material metadata uses weak keys, hidden cartography duplicates no longer require a full scan on every map layout, ordinary persistence refreshes only changed source records, and interrupted sender loops safely resume bounded queued work.

1.7.8

  • Fixed a multiplayer connection failure caused by sending the complete 512 KiB fog map as one Steam message. Snapshot, import, and live full-fog updates now use validated 64 KiB chunks.
  • Added a conservative packet-size guard and versioned v6 RPC channels, preventing oversized packets and unsafe mixed-version fog traffic from blocking Valheim's reliable send queue.
  • Gated all remote state, acknowledgement, broadcast, and snapshot traffic behind a successful v6 RavenMap handshake, so vanilla, absent-mod, and not-yet-initialized peers never receive RavenMap payloads.
  • Paced snapshot, initial import, and coalesced live full-fog traffic with per-frame send-buffer headroom; skipped snapshot cloning when a dedicated server has no eligible recipient, and added regression coverage for exact wire sizes, missing, duplicate, reordered, malformed, and retried chunks.

1.7.7

  • Fixed vanilla and Balrond vegetation highlights drawing the complete foliage card. RavenMap now follows the real _MainTex alpha and _Cutoff contract used by their exact vegetation shaders.
  • Decoupled Pulse and Sweep cadence from player movement, camera turns, and nearby registration changes. Movement no longer restarts an effect or skips its configured interval.
  • Removed the obsolete movement-driven shimmer restart state and kept nearby selection bounded to one pass before each scheduled effect; X-ray retains its separate low-frequency cache refresh.

1.7.6

  • Fixed plant highlighting on transparent and cutout foliage. Sweep and Pulse now follow the visible leaves instead of lighting their flat texture cards, and nearby bushes no longer suppress one another through the ore seam stencil.
  • Made highlight selection react sooner to movement and camera turns, rotate fairly through dense groups, and keep complete resource objects inside hard renderer/draw budgets.
  • Reduced highlight overhead by caching stable mesh, transform, material, alpha, and stencil state; removed the old per-renderer material-property fallback and its frame-time writes.
  • Split recurring discovery queries by category, so a large dungeon radius no longer expands resource or Pickable scans.
  • Bounded portal renames to their old and new local clusters, interned identical filter descriptors, and changed persistence to a trailing debounce with a maximum flush window.
  • Added automatic replacement-snapshot recovery when a client map/fog callback fails, preventing a valid network delta from leaving that client stale.
  • Rebuilt and validated the bundled Unity 6000.0.61f1 Windows shader and extended the regression suite for these paths.

1.7.5

  • Fixed ghost pins and raw [tag_*] filter rows after a content mod is disabled or removed. RavenMap now checks each source prefab or dungeon location against the final game registries instead of trusting old names, translations, or compatibility allow-lists.
  • Clients with a different mod list hide unsupported shared records locally without changing the server state. Once the content is available again, those records can appear normally.
  • The authoritative server retires only modern sources whose missing owner is conclusively proven after world setup. Legacy or ambiguous records remain dormant, resource tombstones are not created, mixed markers keep their installed contributors, and normal cleanup uses ordered pin-only updates without retransmitting shared fog.
  • The compatibility check is event-driven: one bounded names-only registry pass after successful world setup, with no scene-object scan, polling, or gameplay tick hook.

1.7.4

  • Fixed fully depleted deposits being restored from older persisted progress after reconnecting or reloading. A measured zero remainder now stays depleted, while genuinely unknown legacy measurements still use the saved fallback.
  • Fixed a long-session dungeon-tracking retention issue. Streamed enemies and chests now expire on their own bounded unload deadlines, so continuous zone streaming cannot keep postponing cleanup for older observations.
  • Fixed natural berries, mushrooms, and plants being hidden merely because the ground beneath them was cultivated. Player placement and Plant.Grow are now tracked directly, including the pre-creator Awake window and a persistent private marker for mature player-grown Pickables, without polling or scene scans.
  • Release builds no longer embed a local PDB path. Updated Russian and English highlight descriptions to cover both deposits and optional Pickable highlighting.

1.7.3

  • Fixed vanilla blueberry, common mushroom, thistle, and other natural Pickables disappearing when Plant Everything adds a Piece component to their original prefabs. Player-grown and cultivated instances remain excluded; location-only fiddleheads, wild crops, and Ashlands vines additionally require their verified natural outdoor location.
  • Reclassified the final enabled vegetation set once after all world setup, so late prefab changes from content mods cannot leave stale filter entries. The complete ZNetScene registry is still scanned only once.
  • Added the local opt-in HighlightPickables setting. Available plants reuse the selected Pulse or Sweep settings, harvested plants stop highlighting until Valheim's real respawn event, and Pickables never enter X-ray.
  • Rechecked vanilla and Balrond lifecycle behavior: renewable sources stay crossed until the real game respawn, while physically destroyed sources are removed permanently and do not return when a generated zone reloads.

1.7.2

  • Restricted Pickable discovery to real, enabled world vegetation. Vanilla blueberries, mushrooms, seeds, Mistlands plants, and supported Balrond Nature forage remain available, while loose stone/ore, rotten props, meat piles, technical randomizers, creature loot, and cultivated variants no longer create pins or filter rows.
  • Added safe startup cleanup for known false Pickable records, including old pre-v5 records stored as Resources. Unknown removed mods and ordinary deposits remain untouched.
  • Ignored forage inside generated dungeon interiors. Renewable plants still use Valheim's real respawn event; collecting a one-shot source removes it, and physically destroying an active or crossed bush removes only that source from its shared marker.
  • Removed bright Sweep seams between MineRock5 fracture cells with one-coverage stencil compositing. The shader build report now binds both the canonical source and compiled bundle hashes, with no extra pass, polling, material, or managed per-frame allocation.

1.7.1

  • Fixed renewable Pickables reopening on dedicated servers when Valheim gives their ZDO to a client. RavenMap still follows the game's real SetPicked(false) event, including unloaded-zone and custom spawn-check behavior, without its own respawn timer or scene scan.
  • Fixed live SharePins=false changes so an older in-flight snapshot or buffered delta cannot briefly restore disabled markers. Legacy Pickable pins now obey the same server policy.
  • Reduced mining-event garbage: loaded MineRock5 veins are measured directly from Valheim's retained segment state, while unloaded veins use a bounded one-buffer parser instead of copying the Base64 payload through ZPackage.
  • Pruned transient streamed-object and stable-token caches on normal unload, added cleanup for locations without a ZNetView, and stopped unchanged canonical pins from churning spatial-index sets.
  • Bounded repeated failures from broken modded dungeon objects. A failed census now leaves the retry queue after six backoff attempts and is rearmed only by a real lifecycle event; repeating callback warnings are suppressed per world.
  • Added an executable byte-for-byte protocol-v5 HelloAck compatibility suite plus truncation/trailing-data checks. Removed obsolete production paths and completed the performance, persistence, multiplayer, log, and package regression audit.

1.7.0

  • Added an enabled-by-default shared Pickables category for vanilla and modded berries, mushrooms, wild plants, and other real Pickable objects. Wild barley, flax, carrot, turnip, and onion sources are no longer mistaken for player crops.
  • Added independent server-controlled Pickable discovery and merge radii plus cascading local filters by biome and item type. Pickable pins and filter rows prefer the harvested item's inventory icon.
  • Renewable sources can be crossed after harvest. The cross is removed only when Valheim actually runs SetPicked(false), so normal timers, relogs, unloaded zones, and custom spawn checks remain authoritative without a RavenMap polling loop.
  • One-shot or destroyed Pickables remove only their own source; merged markers remain until their final source is gone. Pickable lifecycle state never creates permanent ore tombstones.
  • Fixed live server-policy changes and local filters without scene scans or hidden cartography markers. All shared merge radii now follow the server, and a protected source reserve prevents dense renewable vegetation from blocking core markers.
  • Added safe migration of legacy berry pins stored as Resources, server-authoritative owner validation, Balrond Amazing Nature ordering support, and protocol v5 synchronization of Pickable policy. Install 1.7.0 on the server and every client.

1.6.10

  • New installs now use the current tested Sweep defaults: intensity 3, a 20 m highlight radius, and wave width 1.5.
  • X-ray remains opt-in and disabled by default.
  • Fresh configs no longer pass through the obsolete visual-settings migration. Genuine 1.6.2 configs still migrate once, while every existing versioned user value remains unchanged.
  • Startup config binding now coalesces BepInEx's per-entry saves into one write, avoiding dozens of redundant full-file rewrites without adding any gameplay polling.

1.6.9

  • Sweep now begins one wave radius before the first vein edge and finishes one radius beyond the opposite edge. Its first and last frames are fully transparent, giving both ends the same smooth fade.
  • Sweep duration now includes both off-mesh margins, preserving configured world-space speed through the complete entry, crossing, and exit path unless the existing maximum-duration safety limit applies.
  • Each prepared vein keeps one width snapshot for its complete pass, so live configuration edits cannot move its endpoints halfway through the animation.
  • The change adds no shader pass, material, polling, allocation, physics work, or gameplay tick hook.

1.6.8

  • Replaced Sweep's remaining flat band and separate bright crest with one continuously feathered wave that fades smoothly from its moving centre to both edges.
  • Added an independent SweepSoftness control. Its fully soft default removes the flat centre, while lower values can deliberately sharpen the wave.
  • Expanded the Sweep width range from 0.75 to 2.0; the maximum now covers almost the complete vein while the existing 0.75 default remains conservative.
  • Removed the obsolete feather calculation and simplified the shader profile without adding passes, materials, polling, physics work, or gameplay tick hooks.
  • Rebuilt and reload-validated the Unity 6000.0.61f1 Windows shader bundle.

1.6.7

  • Sweep width is now proportional to the complete vein length across normal and large deposits. Large deposits no longer collapse the configured effect into a thin 2.5-metre strip, while small-resource coverage remains unchanged.
  • Replaced the flat moving band with a broad directional scan: a soft trailing flow follows a brighter moving crest from one end of the vein to the other. Geometry Pulse remains a uniform whole-vein effect.
  • The scan still draws only original resource meshes, uses the existing aggregate vein axis and bounded renderer budget, and adds no polling, physics work, material instances, or gameplay tick hooks.
  • Rebuilt and reload-validated the Unity 6000.0.61f1 Windows shader bundle with the Sweep, player-mask, and X-ray passes.

1.6.6

  • Fixed the Configuration Manager category order. Pulse is now declared between the main Shimmer and Sweep sections instead of appearing above Interface.
  • Existing Pulse keys and values remain in their original physical cfg section for backward compatibility; no user setting is reset or duplicated.
  • Added a regression test for the complete Configuration Manager category sequence in author-declared mode.

1.6.5

  • The complete tested-profile configuration is now the factory default for new installs: compact icon-only pins, 30 m discovery radii, 50% resource depletion removal, 60% dungeon thresholds, the tested dungeon list, enabled Sweep highlighting, and its tuned visual/X-ray values.
  • Existing configuration files are preserved. The one-time visual split migration now resolves to the same new Pulse defaults without repeating on already migrated profiles.
  • Added regression coverage for every changed default, including exact allow/block lists and RGBA colors. The network protocol remains at version 4 and the persisted state format remains at version 6.

1.6.4

  • Removed duplicate streamed-object registration and the second full prefab-catalog scan. Cached prefab descriptions are now checked before component probing while preserving LocationProxy and stable-ID handling.
  • Replaced global dungeon observation histories and prefix scans with bounded per-dungeon state and direct ZDOID indexes. Census, unload, respawn, reset, and diagnostics now scale with the current dungeon instead of the entire session.
  • X-ray performs a full selection rebuild only after relevant changes, two metres of movement, an LOD change, or a five-second safety refresh. New advanced renderer and draw-command budgets keep unusually complex modded deposits bounded.
  • Shared fog batches now write directly to Valheim's readable R8G8/RGBA32 texture buffer and upload once per batch, with the original pixel path retained as a compatibility fallback.
  • The pin portion of large world snapshots is streamed through a shared 16-packet-per-frame scheduler, while one serialized fog payload is reused for broadcast peers. Live pin changes are revision-buffered until the snapshot completes. Mutation retries use an ordered O(1) queue instead of rescanning every pending packet on a broken connection.
  • Persistence reuses unchanged source and dungeon records, keeps only the newest queued disk snapshot, and bounds slow-disk backlog to the current write plus the newest pending state.
  • Overlap diagnostics now inspect only the current map viewport, and hidden cartography pin objects are no longer redundantly deactivated every vanilla pin refresh.
  • The Sweep shader no longer normalizes an already normalized axis for every vertex. The network protocol remains at version 4 and the persisted state format remains at version 6.

1.6.3

  • Sweep now uses transformed local mesh bounds instead of the larger world-space renderer box, greatly reducing travel through empty ground or air around rotated deposits.
  • Every prepared vein now has its own travel time. A long nearby deposit no longer slows down shorter deposits, and the wave still reaches the far edge before the configurable safety limit.
  • Added separate Pulse and Sweep color, intensity, interval, and timing controls. Sweep also has its own speed and width controls; existing 1.6.2 color, interval, and intensity values follow the animation mode that was selected, while the new Sweep speed and duration use readable defaults.
  • MineRock5 highlighting now uses Valheim's combined surviving-vein renderer and excludes its decorative child renderers. Segmented fallback deposits also skip mesh parts that do not intersect the current Sweep band.
  • Confirmed that every visible part of one vanilla MineRock or MineRock5 already shares one wave. Separate networked deposits remain separate to avoid incorrectly joining nearby Balrond resources.
  • The new geometry calculation runs only when a bounded effect is prepared, examines eight cached mesh-bound corners per renderer, and adds no physics scan, material clone, Update, or FixedUpdate work.
  • The network protocol remains at version 4 and the persisted state format remains at version 6.

1.6.2

  • Fixed the F4 X-ray hotkey when other mods call Player.TakeInput repeatedly. A physical press is now latched until release, so it cannot switch on and immediately off even across adjacent callbacks or frames.
  • XrayEnabled is now a true local master switch. While it is enabled, the hotkey changes only temporary X-ray visibility and no longer rewrites the configuration, triggers a config save, rescans resources, or restarts Pulse/Sweep.
  • Pulse and Sweep now use the same geometry overlay, gain curve, and peak opacity when the bundled shader is available. Intensity 1 is clearly visible in both modes, while Sweep no longer acts as an opaque raw-HDR replacement. The original lit-material Pulse remains as a safe shader fallback.
  • Sweep travel now accounts for wave width and the physical length of the prepared vein. Narrow bands and long composite deposits move substantially slower, with a bounded automatic duration ceiling and no new update loop or material instance.
  • Replaced the long package description with a shorter user-focused guide and a single clear compatibility warning for shared-map and automatic-pin mods.
  • Excluded the retained Unity shader toolchain from the SDK project's default item scan, restoring reproducible clean builds while keeping the editor available for future bundle work.
  • The network protocol remains at version 4 and the persisted state format remains at version 6.

1.6.1

  • Fixed the shared manual dungeon cross on the current Valheim build. RavenMap now calls vanilla's HidePinTextInput(bool) with the required cached false argument instead of relying on reflection to supply an optional parameter.
  • Added a configurable local XrayToggleKey (F4 by default, None disables it). The key reuses Valheim's gated player-input path, so it is ignored while typing, using menus or inventory, viewing the large map, teleporting, or during other blocked states.
  • X-ray now writes the visible local-player meshes into a lightweight stencil mask before drawing vein geometry. Deposits remain visible through terrain without tinting the player's body, armor, or equipped meshes; the mask updates through the existing 0.5 s bounded refresh and adds no new update loop.
  • Slowed Sweep traversal to twice the configured pulse duration and replaced its additive blend with HDR alpha blending. At identical color and intensity settings, Sweep and Pulse now have comparable perceived brightness while keeping their distinct animation styles.
  • Marked the package as the first public test release so users know that bugs may still occur.
  • The network protocol remains at version 4 and the persisted state format remains at version 6.

1.6.0

  • Fixed dungeon-entry confirmation on dedicated servers: RavenMap no longer treats a successful teleport call as actual arrival. Entry is submitted only after Player.IsTeleporting() has completed and vanilla position synchronization has already been queued in the same server RPC stream. The two retry signals remain idempotent.
  • Removed the fragile association of modded dungeons with a single 64-meter zone. The entry intent retains the canonical exterior entrance, while the interior is validated within a safe server-side radius; moving between zones inside a large dungeon no longer triggers a false re-entry. Long Proper Portals teleports and offset More World Locations entrances are supported.
  • Sweep now runs entirely on an embedded geometry shader built with Valheim's exact Unity version. The wave is calculated on the pixels of the original meshes across the entire vein and no longer illuminates the ground, air, or neighboring objects. Pulse remains a separate, smooth whole-object pulse.
  • Added local X-ray, disabled by default, with separate color, HDR intensity 1–10, and distance 5–96 m settings. The effect reveals only the occluded geometry of already discovered veins, respects the current LOD and destroyed parts, and does not bypass underground-resource discovery rules.
  • Added 25 recognizable resource icons based on actual Valheim and Balrond Nature item icons. Known resource families use distinct semantic icons on the map and in filters; an unknown resource from a third-party mod retains its own in-game icon. RavenMap's own icon has also been updated.
  • Highlighting creates neither light sources nor per-renderer materials and does not use Physics, Update, or FixedUpdate. X-ray updates a bounded set of already registered veins once every 0.5 s; the default budget of 256 covers large composite Balrond deposits.
  • X-ray eligibility is restored from the persisted shared pin after reconnecting and is correctly revoked after pins are reset. Normal vein-progress changes update eligibility in place: the renderer/LOD cache and native CommandBuffer are not rebuilt on every hit.
  • The dungeon diagnostic label is updated through events, with repeated updates coalesced to the next frame. For a deduplicated entrance, it resolves the actual alias and displays current entry, blocker, enemy, and chest data instead of stale zeroes.
  • Client-side PinChanged messages and ACKs no longer request a full snapshot after every mutation batch. A full fog+pins snapshot is now reserved for startup, recovery, and server-side reclustering, eliminating the recurring network/CPU spike during active exploration.
  • The network protocol remains at version 4 and the state format at version 6. Install RavenMap 1.6.0 on the server and every client to ensure identical dungeon-entry behavior.

1.5.0

  • Fixed the primary cause of stuck vein pins: MineRock/MineRock5/Destructible destroy their ZDO while processing the final hit, when the old postfix could no longer read a zero remainder. RavenMap now records final destruction at the precise ZNetScene.Destroy event before the ZDO is removed; normal zone unloading does not enter this path.
  • A vein's initial volume is calculated from its full persisted segment count rather than its remaining visible parts. Deposits first discovered after partial mining, veins of different sizes, and updated prefabs with a new part count are handled correctly. One-hit Balrond shell objects still hand their pin off to the real vein and are not counted toward its volume.
  • Dungeon-clear detection now uses a confirmed scan of the already loaded interior: it counts active, living, aggressive Character instances and unresolved networked chests. Dead, disabled, destroyed, or lingering invisible objects do not block the crossed-out state; decorative Container instances without a ZDO are ignored; empty, inspected, disabled, or vanished chests count as completed.
  • Fixed an entry race: the teleport event could previously reach the server before peer.m_refPos moved into the interior and then be rejected permanently. After the interior stabilizes, RavenMap repeats the idempotent entry confirmation and submits the final census in guaranteed order.
  • Distant terminal events from the same interior are accepted for large modded dungeons, and the final census submits the number of living enemies and unresolved chests. Direct destruction and regeneration by Creature Level and Loot Control, altered Dverger aggression from Balrond Nature, and standard More World Locations generators/chests are supported. Spawners affect only the respawn policy and do not themselves prevent a dungeon from being cleared.
  • An exception from a modded Character/Container or its inventory no longer stops every empty-dungeon check permanently. The error is isolated to one dungeon, its state remains queued, and the operation retries with a bounded delay of 0.5–5 seconds; completion of a stale scan cannot remove a newer event.
  • Added the local ShowStateOnMap setting. In diagnostic mode, a resource displays shared and local remaining/initial volume, percentage, parts, merged-source count, probe type, ZDO, shell, and handoff data; a dungeon displays entry confirmation, census readiness, living/killed/vanished enemies, chest state, and the exact blocker preventing the crossed-out state. Text switches between Russian and English according to the in-game language.
  • Network draining is limited to 64 mutations per frame and uses constant-cost queues instead of copying and sorting up to 8192 events for every ACK. Dungeon events are submitted in the safe order generation → registrations → terminal → entry → settled, and full-snapshot requests after pin changes are coalesced.
  • A repeated Hello no longer produces a full snapshot. Added a single monotonic cooldown, one snapshot per broadcast, an incomplete-assembly watchdog, protection against a late SnapshotEnd, and a retry after timeout.
  • Persistence streams state into a temporary file without two simultaneous large arrays. The backup is also restored when the primary is semantically invalid but checksum-valid; a corrupt primary can no longer overwrite a healthy backup.
  • Only auto-pins within the current viewport, plus a small margin of neighboring cells, are materialized on the map. An unchanged viewport is checked in O(1), and additions remain frame-budgeted, so vanilla Minimap.UpdatePins no longer traverses every pin in the world.
  • Suppression of vanilla dungeon icons is restricted to the Minimap.UpdateLocationPins context and does not alter the result of ZoneSystem.GetLocationIcons for other mods. Match lookup uses a spatial index.
  • A matching pin imported from the cartography table remains in the vanilla save, but its UI is hidden in favor of the RavenMap pin. This prevents duplicates while allowing local filters to keep controlling visibility; positional match lookup now also uses a spatial grid.
  • Renaming a portal now correctly splits its old multi-source cluster or merges it with a nearby portal bearing the new matching tag; a complex change is broadcast as one atomic snapshot.
  • Silver and underground-resource policies used for classification and display now come from the server-confirmed session. Silver remains in the local filter catalog and no longer disappears because of a differing client cfg.
  • Completely removed the diffuse Sweep lighting fallback: a Spot Light inevitably illuminated the ground and air around a large vein. The new shared geometry shader calculates each original mesh pixel's longitudinal world coordinate and discards everything outside a narrow moving band. The wave therefore travels only across the geometry of the entire vein, whether segmented or monolithic. Pulse remains a separate, smooth pulse of the whole vein.
  • Added local X-ray, disabled by default, with separate XrayEnabled, color picker, HDR intensity 1–10, and radius 5–96 m settings. It draws only the geometry of already discovered, loaded veins that is occluded by terrain or the scene; it does not reveal new resources. Destroyed and disabled parts are excluded, and the current LOD is respected. Sweep and X-ray use one shared material without per-renderer materials, light sources, global physics scans, or Update/FixedUpdate.
  • The default budget for a large fog merge has been reduced to 8192 cells per frame. Sparse/dense queue bits are removed only after a successful texture update; an exception preserves the work, requests a recovery snapshot, and retries it after 0.5–5 seconds. A temporarily unavailable map no longer restarts the coroutine every frame, the client stops processing when the server forbids it, and the character's old green map fog is scanned only once per player/world pair.
  • The network protocol remains at version 4 and the state format at version 6; existing 1.4.0 cfg and state files are read without a format migration. Install 1.5.0 on the server and every client to ensure identical dungeon and resource detection logic.

1.4.0

  • Added a forced shared dungeon-clear toggle: hold the configurable key (Left Alt by default) and left-click an existing RavenMap pin. The toggle changes one canonical pin for every player and does not create a duplicate.
  • Added the host/admin-only ravenmap resetpins confirm command. It resets shared auto-pins, dungeon progress, and resource tombstones for rediscovery while preserving shared fog of war and manual vanilla pins.
  • An already empty, loaded dungeon now completes its census after containers become ready and receives the crossed-out state without requiring new enemies to appear or already empty chests to be reopened. Fixed an incorrect transition that still skipped result submission after the fallback inside-player check succeeded.
  • Manual dungeon state is persisted separately from automatic percentages, synchronized with every player, and reset when a genuinely new dungeon generation occurs. Modifier+LMB preserves vanilla closing of the name field and the map UI update.
  • Highlight modes are now fully separated: Pulse pulses the entire vein in unison, while Sweep sends a narrow wave from one end of the object to the other, including a large vein with a single renderer. Materials are not cloned.
  • Auto-pin reset now uses a network epoch: old pin and dungeon-progress packets already in flight can no longer resurrect deleted records. Repeated notifications are idempotent, and loaded eligible objects are rediscovered only under the new epoch.
  • Client changes now remain in a bounded queue until server acknowledgement and retry safely after rate limiting or disconnection. Strings and arrays are length-checked before allocation; validators fail closed and isolate exceptions from third-party prefab components.
  • The server revalidates the silver and underground-resource mode after normalizing PinSubmit: a hidden vein is accepted only within the authoritative range of its Beacon or at first-hit distance. A client cannot reveal remote underground resources with an arbitrary packet.
  • Early shared-fog changes are buffered until the map is fully loaded and merged with a bitwise OR. The first server snapshot is sent after the handshake regardless of a large client import; cartography-table imports and local fog do not overwrite one another.
  • Local filters are rebound to the server-confirmed world UID, so preferences for different players and worlds do not mix. Legacy default scroll speeds of 28 and 120 are migrated automatically to 360.
  • Portal tags now participate in deduplication semantics; migration of old mixed clusters separates nearby portals with different names without deleting shared fog.
  • User-facing descriptions now call this mechanic simply a dungeon check: it is an event-driven census of loaded enemies, chests, and spawners that settles after a short period with no new objects.
  • The network protocol has been updated to version 4 and the state format to version 6. Multiplayer requires RavenMap 1.4.0 on the server and every client; state versions v3–v5 are read and migrated automatically.

1.3.0

  • Persistent auto-pins have moved from unstable ZDOID values to dedicated 128-bit tokens stored in the ZDO. When old v3/v4 state is loaded, it is safely rebound only to the single object of the same type within a strict radius; ambiguous records are preserved rather than deleted. This prevents shared pins from disappearing after reconnecting and saving the world.
  • Completely reworked dungeon-clear detection with stable enemy and chest identifiers, confirmed physical entry, event-driven tracking of loaded enemies and chests, separate defeated-enemy and inspected-chest percentages, correct handling of dungeons without chests, and reopening only after confirmed respawn. There is no global or per-frame scanning.
  • Underground resources with an in-game Beacon are no longer revealed by ordinary radius detection by default. They are pinned after a real finder/Wishbone signal or the first hit; a separate setting enables radius-based discovery. Silver continues to use the independent SilverDiscovery mode.
  • Vein highlighting gained two modes: a spatial wave across the entire vein and a whole-vein pulse. Intensity now ranges from 1–10, color is selected with a picker, and HDR glow has been added; materials are neither cloned nor modified globally.
  • The filter panel is taller by default, the resource section starts expanded, and the default mouse-wheel speed has increased to 360. Position, expanded branches, and filters remain local to the specific player and world.
  • Added the local P:n S:m overlap diagnostic, showing the number of visible canonical pins and merged sources. Recalculation is event-driven and uses a spatial grid.
  • Bursts of network updates in diagnostic mode are coalesced into a single pass on the next frame. The filter catalog rebuilds Unity UI only when a semantic leaf appears, disappears, or changes, rather than for every new vein of the same type.
  • RavenMap suppresses a matching vanilla dungeon-entrance icon when its auto-pin is already displayed at the same position; matching requires the same normalized prefab, so different neighboring locations are not hidden.
  • Changing deduplication distances now triggers an event-driven rebuild of existing persisted clusters and atomically broadcasts a new snapshot. Normal source addition and rebuilding use complete-link clustering with a limit of 512, preventing unbounded chains; ambiguous progress from a split dungeon is reset to active rather than falsely copying the cleared state.
  • Configuration Manager settings now use Russian or English according to the in-game language and are organized into a concise hierarchy: interface, sharing, discovery, resources, dungeons, pins, deduplication, highlighting, performance, and diagnostics. Rare lists and network limits are marked advanced, while physical keys from the old cfg are preserved.
  • Disabled portal, transport, respawning Pickable-resource, and silver categories now hide already persisted pins without losing server state.
  • Before saving during shutdown, RavenMap completes any confirmed handoff from a one-hit shell to the real vein. An old source can be removed only by its stable authoritative token, so a reused ZDOID cannot delete an unrelated v3 record.
  • The network protocol has been updated to version 3 and the state format to version 5. Multiplayer requires RavenMap 1.3.0 on the server and every client.

1.2.0

  • Technical Balrond variants (rock_nickel_bal, rock_nickel_nomoss_bal, rock_silver_small_bal) and vanilla silvervein are now canonicalized by the item prefab they actually yield. The filter retains a single game-localized Nickel Ore or Silver Ore row with the real in-game icon.
  • The classifier no longer treats every MineRock5 as a resource: it verifies the source, aggregates the drop table, and selects the dominant mineable product. Ordinary rocks with a 1–5% incidental metal chance, the empty bloodshard_deposit_bal, the unused rock_nickel_nomoss_frac_bal, moss, and stumps are excluded.
  • Loose pieces such as Pickable_Clay_bal, Pickable_TinNew_bal, and other loose-resource variants have been removed from the default allow-list. TrackRespawningPickables accepts only objects with a genuine respawn time, and the allow-list no longer bypasses this restriction, so Clay means ClayDeposit_bal, not a loose piece on the ground.
  • Added the SourcePrefab=ItemPrefab format for explicitly supporting a nonstandard deposit from another mod without exposing a technical name in the UI. An unchanged default list from 1.1.0 is migrated automatically; a custom list is not overwritten.
  • One-hit shells for nickel, silver, coal, gold, and vanilla copper hand their canonical pin off to the spawned MineRock5; their 1 HP is excluded from initial volume and does not remove the vein on the first hit. The server completes the handoff only after the real destructible object appears and returns a positive measurement, while a Pickable cannot impersonate a vein fragment.
  • Added ten original full-color 128×128 dungeon-family icons: Burial Chamber, Sunken Crypt, Troll Cave, Frost Cave, Infested Mine, Morgen Hole, Sealed Tower, Mausoleum, MWL Underground Ruins, and Forbidden Catacombs. No assets from Huginn Map are used.
  • Mouse-wheel speed in the long filter panel has increased from 28 to 120 UI pixels per step and is exposed through the local FilterScrollSpeed setting (20–600), which applies without restarting.
  • Numbered prefab variants of the same dungeon type are combined into one local-filter row; different types sharing an icon (for example, Frost Cave and Howling Cavern, or Infested Mine and Infested Citadel) remain independent toggles.
  • Semantic state reconciliation can now atomically remove a source's obsolete technical ownership and add the same ZDO under the corrected resource type.

1.1.0

  • Auto-pins and filter rows gained in-game icons for items, resources, structures, and registered locations; a global local icon-scale setting was added.
  • Added separate settings controlling label visibility for regular auto-pins and portals.
  • The filter panel moved to the upper-left corner of the large map, can be dragged with the left mouse button, and now has cascading biome-based resource/dungeon sections with independent toggles.
  • Long lists gained a ScrollRect, scroll bar, and protection against simultaneous map zooming; window position and filters remain local to the player and world.
  • Eliminated LiberationSans SDF Font Asset was not found spam: TMP components are activated only after the in-game font is assigned.
  • Resource highlighting was replaced with a smooth spatial wave; wave width and a ConfigEntry<Color> displayed by Configuration Manager through a picker were added.
  • Added Russian and English names for the UI and known dungeons, with live switching according to the in-game language; corrected the actual vanilla localization tokens and the English Underground Ruins leak from MWL.
  • Location classification now uses strict dungeon semantics. Ordinary POIs are not tracked; exactly two official MWL dungeons are supported: BFD_Exterior and CD_Exterior1. The fixed MWL_MinddripHallow1 interior is also excluded as a custom location.
  • Above-ground CampGrid/CampRadial locations, MWL_MeadowsTomb*, the nonexistent Mistlands_DvergrTownEntrance3, and internal DG_* locations no longer create dungeon pins or progress.
  • Enemy/chest progress is always associated with the canonical exterior ZoneSystem.LocationInstance, so an interior at elevation +5000 does not create a second icon.
  • Fixed false Balrond resources (Moss_bal, stubs/stumps); built-in exclusions also work with an old config, and persisted false pins are removed during semantic reconciliation.
  • Added event-driven support for future modded dungeons with m_hasInterior, a genuine DungeonGenerator.Algorithm.Dungeon, a dungeon group, or an allow-list entry, without globally scanning the world.
  • Removed incompatible parameterless TrimEnd calls found by running the tests under a .NET Framework-compatible runner.

1.0.1

  • Fixed a critical incompatibility with the actual Valheim build: access to private map fields now uses Harmony accessors created once, without reflection in the hot path.
  • Eliminated the world-load hang and FieldAccessException spam when used alongside LPA.MinimapParallelizer.
  • All map loading, exploration, and import callbacks are guarded: a RavenMap exception can no longer interrupt vanilla Minimap loading.
  • Removed the remaining direct access to private members of ZNetScene, MineRock5, and Minimap; added an automated IL audit against the actual game assemblies.
  • MineRock5 progress measurement now uses persisted ZDO state and a cached segment count.
  • Added a bulk mode for ExploreAll without millions of queue and accessor operations: after the vanilla pass, one compact full snapshot is submitted.
  • A failed cartography-table import now discards the partially assembled fog and pin batch instead of publishing incomplete data.

1.0.0

  • Initial RavenMap release with a new standalone architecture.
  • Added a server-authoritative shared map of ordinary fog of war with bit packing, batched-delta merging, and a staged full snapshot on connection.
  • Added shared automatic pins for resources, dungeons, portals, ships, and carts.
  • Added built-in prefab aliases for Balrond Amazing Nature and More World Locations without hard dependencies on those mods.
  • Added three silver-discovery modes, including vanilla-style WishboneOnly.
  • Added vein-depletion tracking, a configurable removal threshold, and compact tombstone records that prevent pins from reappearing.
  • Added dungeon enemy and chest tracking, crossed-out cleared dungeons, and reopening when compatible respawn is confirmed.
  • Added a local large-map filter panel by category, biome, resource type, and dungeon type.
  • Added spatial deduplication and cartography-table compatibility without removing user-created pins.
  • Added optional budgeted resource highlighting without instantiating materials.
  • Added server-side validation of incoming events, packet/rate limits, a handshake, and a local fallback mode when the server does not have the mod.
  • Added atomic world-state persistence with SHA-256 and a backup copy.
  • Transport-position updates, mining progress, and state writes are coalesced and rate-limited to reduce load.
  • Bulk pin restoration is distributed across frames; cartography-table import uses the vanilla pass without reparsing the full fog array.
  • Added server-side MineRock segment normalization, one-time reconciliation of persisted ZDOs after world load, and synchronization of server-side radii/depletion thresholds during the handshake.