DragonMotion-RavenMap icon

RavenMap

A lightweight shared map with smart resource and dungeon pins, local filters, highlights, and optional X-ray. First public test release; bugs may occur.

CHANGELOG

Changelog

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.