Pendulum-ValheimSagas icon

ValheimSagas

Every Viking has a story. Standalone server website with player statistics, a 2D world atlas, character armory, leaderboards and evolving sagas.

Last updated 7 hours ago
Total downloads 81
Total rating 1 
Categories Mods Server-side Client-side AI Generated Deep North Update
Dependency string Pendulum-ValheimSagas-0.3.36
Dependants 0 other packages depend on this package

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2350

README

Valheim Sagas

Saga journey with scene passages, rounded map markers and a prominent boss encounter

An illustrative saga in the working website: example story and events over copied playtest terrain. Example clock; no test stories or world data are included in the mod.

Every Viking has a story.

Your adventures, remembered: a standalone Valheim mod with a server-hosted website, a living 2D atlas, character armories, leaderboards and optional AI-written sagas.

Viking profile with saved portrait, equipment, Nemesis score and compact Appearance control

The Trophy hall now features original boss illustrations, ornate Norse frames and fog-shrouded silhouettes until a shared victory is recorded. Trophy unlocks persist across time filters; first victories, highest-star encounters and fastest measured fights show separate evidence for the selected period. Highest-star ties prefer the shortest complete timing at that same star level. Kall uses a spoiler-free frozen monument, and incomplete multi-phase times remain unranked. Compare Vikings places each Viking in a distinct portrait column with shared stat labels between them.

Explore your fellowship

  • World Atlas: Valheim terrain captured at runtime, textured brown fog of war, personal or combined exploration, named player markers, online/offline filters and separate kill/loot heat maps.
  • Vikings: persisted equipped-character portraits, game item icons, detailed hover/focus/tap tooltips, resistances, gear effects and personal statistics. Shared portraits and equipment remain available after logout while the host website is running.
  • Adventure recap: recent boss victories, notable finds, losses and new saga chapters since your last visit on this browser. First visits cover the past day.
  • Trophy hall and comparisons: first recorded boss victories, shared teams and eligible fastest fights; compare two Vikings using every supported time filter.
  • Leaderboards: boss progression and credited teams, observed fight times, kills and stars, rarity discoveries, carried gold and optional Epic Loot bounties.
  • Optional SLS enhancements: host-colored zone squares that follow SLS fog settings, hover levels above 1, current Nemesis scores and distinct Nemesis boss-kill rankings.
  • Sagas: persistent personal and server stories with a separate recorded-facts ledger. Explore recorded chapter moments on the atlas when their locations are shared and discovered. The host must configure OpenRouter first; no template stories are generated.
  • Make it yours: boxed, full-screen or full-screen scrolling scenery. Your personal login can select backgrounds up to your recorded boss progression; everyone sees the saved selection. New browsers default to full-screen scroll.

World Atlas with day/night dial, colored personal icons, a fanned pin group and a last-known Viking marker

Statistics support all history, 30 minutes, 1/6/12 hours, 1/3/7 days and custom dates. Live presence and last-known equipment are independent of the selected time window. Drops, verified earned collections and unknown pickups remain distinct; repeat pickups and bonus loot rolls cannot create extra kills.

Server rankings including optional Nemesis boss kills

Screenshots show an isolated copy of recorded playtest data, with display names replaced for publication. The atlas shows saved playtest exploration, a last-known Viking marker, colored personal icons and a fanned group connected to its true locations. One Viking owns these pins, so they share that Viking's color. The day/night dial uses a labeled example day/countdown because the offline snapshot has no live world clock. The Nemesis leaderboard is shown honestly with no recorded victories yet. These are website captures, not evidence that every multiplayer integration has been verified.

Install and open

  1. Install BepInEx 5 and Valheim Sagas on the host and every participating client. Use the same release on each. In a mod manager, install the package; manually, extract its BepInEx folder into your profile/game installation. Keep the four plugin DLLs and web folder together.
  2. Start a world. A dedicated server is optional: a normal hosted or solo world starts the website on that computer. The website stops when the host closes the world/game.
  3. On the host computer, open http://127.0.0.1:8877/. New configurations allow public viewing without a viewer token. Local hosting defaults to loopback; a new dedicated-server config listens on all interfaces using WebsitePort. Sagas does not open firewall/panel ports.
  4. Settings are in BepInEx/config/org.valheimsagas.collector.cfg. Existing saved settings are preserved on upgrade. Restart the host after changing server settings.
  5. For a dedicated host, set its allocated WebsitePort as described below. Visitors open http://SERVER-IP:PORT/. An HTTPS reverse proxy is optional for a domain and encrypted access; no separate website installation is required.

All participating players need Sagas for full telemetry, portraits and exploration. Epic Loot, Jewelcrafting and Star Level System are optional. Game/Unity assemblies and runtime game assets are not bundled. Biome backgrounds are bundled as responsive WebP images for offline use; unused original PNG artwork is excluded from releases.

Dedicated servers: IP and allocated port

Stop the server and edit the existing [Server] entries in BepInEx/config/org.valheimsagas.collector.cfg. For a hosting panel that allocates port 19908:

[Server]
EnableWebsite = true
WebsitePort = 19908
ListenPrefix =
WebsiteUrl =
RequireMatchingVersion = true
RequireViewerToken = false
DisplayName =
AdvertisedAddress =

Restart the server, then open http://YOUR-SERVER-IP:19908/. Replace 19908 with your allocated website TCP port. Leave the advanced ListenPrefix blank to use WebsitePort; new dedicated hosts bind all interfaces automatically. Existing saved prefixes are preserved: clear an old override when switching to simplified setup, or keep a working http://*:19908/ prefix. The wildcard * is a bind address, never a browser address. The host panel/firewall must allow TCP on this web port; Valheim's game/query ports remain unchanged. No separate website install or reverse proxy is needed for direct IP access.

Optional custom URL: set WebsiteUrl = https://sagas.example.com/ or WebsiteUrl = http://YOUR-SERVER-IP:19908/. This is the browser address advertised to Ctrl+Home; it does not change the listening port. With WebsiteUrl blank, direct-IP clients use their game connection's host plus the web listener port. Steam server-list/relay and crossplay join-code connections may not expose that IP: configure WebsiteUrl for a reliable address in those cases. No external public-IP lookup is performed. A personal WebsiteUrlOverride still takes priority.

With DisplayName blank, Sagas uses the Valheim server name, then world name. AdvertisedAddress = YOUR-SERVER-IP:GAME-PORT displays the game address and, if WebsiteUrl is blank, supplies a website hostname with the separate web port. It does not change the listener. Startup logs report whether the listener started, its effective port, public/private viewing, an active override, loopback-only binding and the available browser address or missing URL guidance.

Version matching: RequireMatchingVersion = true requires the same Sagas release on server and clients before world admission. The server log identifies missing/mismatched versions. Clients with the new handshake show the required and installed versions; a client without Sagas receives Valheim's standard incompatible-version error. Set this option false only if deliberately allowing missing/mixed clients and incomplete telemetry. This is compatibility checking, not anti-cheat attestation.

In Shudnal's ConfigurationManager, Sagas rows show S for host-owned settings and C for personal client settings. S rows are locked while connected to another host. These are your machine's hosting values, not a copy of the remote host's config; secrets are never synchronized.

Public viewing is enabled by RequireViewerToken = false; existing configurations are preserved on upgrade. For personal login and OpenRouter key submission over the internet, use an HTTPS reverse proxy so credentials are encrypted in transit.

Missing players or stale map positions

A congested game connection can delay player snapshots, exploration and portraits even while the website itself opens normally. Upgrade the host and every Sagas client to 0.3.9 or later and restart their connections. A server name comes from host configuration, so a wrong name is a separate issue from delayed player uploads. If all website data is blank, check the website/API error and server logs too.

For a live marker, the player needs Sagas installed, [Privacy] SharePosition = true, and Visible to other players enabled on Valheim's in-game map. The website's Online Vikings layer must be enabled and its player selection must include that player. Offline positions require the separate Offline - last known layer. Terrain additionally requires ShareMap = true. Upload pacing cannot override these privacy settings.

Multiplayer upload pacing (0.3.9 and later)

Upgrade both the host and every participating client to the same current release, then restart their Valheim processes. Version 0.3.9 addresses a reported three-second multiplayer stall with Steam k_EResultLimitExceeded log spam: background transfers now yield to the game send queue, use separate byte allowances and wait 30 seconds before retrying unacknowledged data. Older clients still send bursts, so updating only the host is insufficient.

Maps import gradually and a first high-resolution portrait can take several minutes on a busy connection. Existing saved portraits remain visible while a replacement uploads. The collector logs Sagas uploads paused when the game queue is busy and Sagas slow stage for work exceeding 50 ms, with repeated warnings limited to once per minute. These diagnostics contain timings/queue sizes, not credentials or coordinates. The multiplayer incident still requires an operator retest; automated transport checks are not in-game verification.

Find a Viking

Vikings always opens a search directory, including when you are signed in. Three featured shared profiles appear below the search, ordered by furthest recorded boss progression and then most recent retained boss victory. Search by name to find more Vikings. Cards lead with a saved head portrait (initials when unavailable), name and the same online/syncing/offline badge used on World and character pages. Their saved saga or biography excerpt is the main body, labelled AI fiction; no story is invented when none exists. The supporting boss tracker shows actual distinct recorded victories as 0/1 or 1/1 per boss and a total out of eight, without assuming earlier bosses were defeated. Direct character links still open that character, and the header search also includes avatar previews. Private profiles are excluded. Recommendations use lifetime progression independently of World statistics filters; pruned achievements cannot supply a recent date.

The boss leaderboard includes Kall Fimbulbringer as the eighth progression tier. Only the installed FrozenKing_p3 final phase counts as his victory; the earlier FrozenKing and FrozenKing_p2 phases are excluded from boss leaderboards and progression. His listed team contains recorded final-phase contributors, not inferred earlier-phase participants. Current telemetry cannot time the entire multi-phase encounter, so Kall is excluded from fastest-fight rankings. Retained old final-phase records are backfilled into permanent progression receipts on upgrade. His victory retains the Deep North scenery.

Map controls and configuration ownership

The full-width atlas opens with its controls tucked away. Use Terrain, Vikings, Activity or Icons to open one compact tray; close it to return to the whole map. Opening a tray preserves your map position and zoom. Statistics & heat maps, below the map, filters event totals, recent activity and heat layers by Viking and date. It does not filter live player positions or icon ownership. Explored terrain is independent unless you explicitly link it to statistics in the Terrain tray.

In Shudnal ConfigurationManager, S marks host-owned [Server] and [Lore] settings; C marks personal privacy and website-login shortcuts. Host settings are read-only while connected to somebody else's server. They show this computer's local hosting configuration, not the remote host's values. The actual host reads its own config; credentials, tokens and paths are never sent to clients. Configure hosting at the main menu or on the host itself, and restart the hosted world after changes. Ownership descriptions remain available without the optional manager. Personal Saga Profiles are configured through website login, separately from the host's Lore settings.

Both [Server] RetentionDays and StatisticsRetentionDays default to 0 (unlimited history). Existing saved values are preserved on upgrade. To remove a previously configured seven-day limit, explicitly change both values to 0 on the host. This preserves remaining records; it cannot restore already-pruned history.

Privacy and personal login

[Server] RequireViewerToken = false is the public-viewing default. Set it to true to require the shared ViewerToken for viewing. Public viewers still only receive data permitted by each player's sharing settings.

Portraits update after equipment or appearance changes settle, with a two-second debounce and a ten-second minimum capture cooldown. Unchanged appearances do not trigger periodic captures. Sitting or attached poses defer a new capture until you stand and settle; the last shared portrait remains visible. Preparation spans multiple frames, GPU readback is asynchronous, and image processing runs in the background. Portraits require a client graphics device supporting asynchronous readback; dedicated servers receive the images from clients. Initial host storage/website startup runs in the background. Map pixels arrive through bounded asynchronous strips, and uncached item icons are queued one per frame; the website and artwork may take slightly longer to become ready. The Sagas staged portrait log reports the maximum main-thread capture work in a frame. Actual rendering still runs on the game thread, so playtesting is required to measure the remaining frame cost.

The atlas has separate Discovered game icons (on) and Player-added icons (off) layers. Game locations, boss markers, beds and death/event markers come from each client's existing map, only on personally explored, shared terrain. They do not reveal undiscovered locations. [Privacy] SharePlayerPins = true publishes your manually placed pins and is on by default for new configs; existing saved choices are preserved. It also requires ShareMap. Set it to false to stop sharing personal pins. The browser?s Player-added icons layer still starts off until the viewer enables it. Shared personal pins render above fog, including annotations placed on unexplored ground. Automatic game/mod locations remain exploration-gated. Imported pins owned by another Viking are excluded. The browser's player-icon switch controls display, not sharing consent. Hover/tap an icon for its name, or use Browse visible icons to locate one.

Enable Color by Viking to match player-added pin rings, Viking markers and names. Automatic game icons retain their original colors. Each Viking gets a server-assigned color on first observation in that world, retained through renames, reconnects and restarts. New colors are selected randomly among the most perceptually separated available choices; existing Vikings never change color when someone joins. Large rosters inevitably have closer colors, so names and filters remain available. Shared game locations list their sharing Vikings in the tooltip without adding owner-colored rings. Icons by Viking toggles each person's icons independently of terrain, heat maps and live-position filters, with Show all/Hide all shortcuts. Preferences are saved per browser/world. Game icons are enlarged from 28 to 36 CSS pixels.

Mods using Valheim's regular map pins and runtime sprites are supported, including inspected Epic Loot bounty/treasure pin types. Unknown saved custom pins conservatively require personal-pin consent. Custom texture overlays (such as Jotunn map drawings) are not individual pins and need a dedicated adapter; SLS zones retain their existing integration. No Epic Loot/Jotunn dependency is added.

Icons load separately from terrain and statistics; their runtime sprites are cached, never bundled as copied game assets. Scans examine at most 16 pins per frame, bounded to 2,048 exported pins per character. Changed snapshots upload in paced 32-pin batches; unchanged snapshots only resync every two minutes for recovery. First icons may take 15-30 seconds plus queued upload time to appear, and partially imported terrain can keep automatic locations fog-hidden longer. Pin edits/removals replace the prior set only after every part arrives. The last shared pins remain available offline.

Choose Sun & moon dial, Horizon, or None in the Icons map tray. The readout estimates real minutes/seconds until day or night using the host's world time, day length and time scale. It updates each second without reloading terrain, resyncs with the host, and reports pauses, time skips and overdue updates instead of continuing a misleading countdown. Browser preferences are saved locally; unavailable/stale clock data is labelled. No new mod dependency, external service or port is required. Install the matching update on the host and participating clients.

Map sharing defaults on for new configurations. Profile, portrait and position sharing remain configurable. Live position also follows Valheim's Visible to other players map setting. The atlas only receives permitted exploration; fog is not a client-side substitute for access control.

The header shows Login when signed out. After login, it shows your saved Viking portrait (or an initial when no portrait is available). Click the icon for Saga Settings or Log out. Shared server tokens show a read-only account; Saga Settings explains how to switch to a personal login.

While playing, press Left Ctrl + Insert to copy a personal login token, then paste it into the website's Login dialog. Generating another code keeps existing logins active (up to 32 per character/world; the oldest are removed at the limit). Left Ctrl + End revokes all of that Viking's logins. A personal login enables owner-only scenery and storyteller settings; the shared viewer token does not grant ownership. Tokens are remembered in that browser until logout and are shared between its tabs. Chrome, Steam overlay and your phone each need an initial login; they do not share browser storage. Tokens are stored locally in the browser and sent in Authorization headers, never in profile URLs.

Scenery progression follows recorded credit: Meadows initially; Eikthyr unlocks Black Forest, Elder unlocks Swamp, Bonemass unlocks Mountains, Moder unlocks Plains, Yagluth unlocks Mistlands, Queen unlocks Ashlands, and Fader unlocks Deep North. Tracking cannot reconstruct unrecorded boss kills from before installation.

Optional SLS, Epic Loot and Jewelcrafting

None of these mods is required. Without them, statistics, vanilla gear/tooltips, portraits, maps, leaderboards and sagas continue to work. SLS, Epic Loot and Jewelcrafting are independently detected; installing one does not require the others.

When SLS is installed on the host, the atlas mirrors its enabled zone overlay, resolved level palette and above/below-fog setting. Website outlines are capped at 20% opacity (lower host values are preserved), applied once so overlapping borders do not become darker. The website adds a zone-level tooltip only above level 1. Below-fog outlines and tooltips follow the selected shared exploration; above-fog mode reveals the zone grid without revealing terrain. Host zone settings refresh about every 15 seconds. The website also offers a local SLS-layer visibility toggle.

With the SLS Nemesis system enabled, a received score appears on the Viking's portrait and map tooltip. It is the latest host-observed replicated score, not a lifetime total; missing scores remain unknown. Profile privacy still applies. Nemesis boss defeats have separate filtered player metrics and a team-credit leaderboard, and can inform saga evidence. Repeated death reports count once. These encounters do not unlock ordinary boss progression/scenery or enter normal boss-speed rankings. Older events lacking the Nemesis flag cannot safely be backfilled.

Epic Loot independently enhances rarity colors, gear effects, bounty tracking and loot presentation. It is never required for SLS features or basic website operation. See integration details.

Jewelcrafting (Smoothbrain) adds a separate socket section to equipment and hotbar tooltips: filled/empty slots, gem names, cached runtime gem icons and configured effect power ranges. Sagas also reads equipped extra ring/necklace slots and the mod's upgradeable jewelry armor. Socketed gear inherits Jewelcrafting's item color; an Epic Loot rarity color takes precedence when both are present, while both sets of metadata remain visible. Last-known socket information and icons remain available offline under profile-sharing permissions.

Recorded socketed drops/collections and their map details retain gem names; generated sagas may use those recorded facts. Sagas loot notifications are always enabled for earned enchanted/socketed pickups, with duplicate protection and rate limits. Jewelcrafting's special creature equipment spawns use the same actual-drop provenance and deduplication path as other loot. Loose gems in ordinary creature drops are tracked by their game names; gem bags, fusion-box inventories, socket crafting/destruction history and synergy totals are not exported. Socket count is not invented as an Epic Loot rarity or added to its rarity rankings.

Inspected against Jewelcrafting 2.0.10. Its public gem API exposes configured power ranges, not the seeded roll or effective combined total; tooltips label that distinction. No new effective-stat arithmetic is inferred. No Jewelcrafting DLL/assets are bundled and the website/Core never load it. Either mod, both mods, or neither may be used. Real in-game validation with this mod is still required; see integration details.

Enable sagas

On the host, set [Lore] OpenRouterKey or the host process's OPENROUTER_API_KEY environment variable. EnableOpenRouter must be true. An OpenRouter account/key is required, even for free routing; Sagas never accesses an existing browser account automatically.

The host default is openrouter/free, with AllowPaidModels = false, a 20-attempt daily budget and no paid fallback. Without a host key, stats, maps, portraits and leaderboards work normally; saga prose waits. Old template chapters are hidden and preserved locally rather than displayed as generated stories.

Host-funded models and OpenRouter presets

In 0.3.10 or later, the host can pay for everyone's default Viking sagas and the server saga using one OpenRouter key. Configure the host's [Lore] section, then restart:

[Lore]
EnableOpenRouter = true
OpenRouterKey = YOUR_OPENROUTER_KEY
Model = @preset/your-saga-preset
AllowPaidModels = true
DailyBudget = 20

Create the preset in the OpenRouter account that owns the key. Manage model selection, provider routing and price limits in that OpenRouter preset. Sagas does not send a provider/pricing override for paid host requests. There is no second host price ceiling to configure in Sagas. If the preset has no price restriction, Sagas does not add one. A direct model ID also works (for example deepseek/deepseek-v4-flash-0731); its normal OpenRouter/account pricing applies.

DailyBudget limits HTTP attempts per UTC day, including retries, shared across host-funded Viking and server sagas. It is a request count, not a dollar budget. Set monetary controls in OpenRouter. Sagas still controls the factual narrative prompt, structured output request, maximum output length and disabled tools/plugins; a preset does not replace those application requirements. Existing chapters remain cached and are not rewritten when the model changes.

New installations keep Model = openrouter/free and AllowPaidModels = false. With paid routing disabled, Sagas rejects paid direct models and imposes zero token-price limits on presets. Players can keep Host default without adding their own keys; personal paid overrides retain their separate personal key and explicit limits.

After signing in, click your profile icon -> Saga Settings. Choose Server storyteller to use the host's setup, or My own storyteller to enter your own OpenRouter key and model/preset. Create up to eight Saga Profiles, each with its own saved OpenRouter key and model/preset. Select a profile and save to switch both together. Request limits and profile/key removal are under Advanced options. A preset can select a model or an OpenRouter @preset/name. Paid routing requires the player's explicit checkbox, a per-million-token price ceiling and a daily attempt limit. The host key must still be configured. Personal keys are encrypted on the host and never returned to viewers, but the host administrator controls that machine: only entrust a key to a host you trust. HTTPS is required for remote browser key submission. Host-paid routing is described above.

Story prompts use relevant recorded events, career totals, bosses and credited teammates, notable loot, current equipment/effects, resistances, bounties and shared exploration summaries. Context is bounded and respects sharing consent; it does not transmit raw account/world IDs, precise coordinates or API keys as story content. Fiction is labeled separately from facts. See lore details.

Data and release status

Back up BepInEx/config/ValheimSagas with the host stopped, including sagas.db and personal-lore.key if present. The key file is required to decrypt saved personal OpenRouter credentials. Do not share backups, configs or tokens publicly. Uninstalling the plugin does not delete recorded history.

0.3.32 is a preview release verified with automated checks. It includes performance fixes for SLS/gear snapshots and staged, change-triggered portrait capture with asynchronous GPU readback and background image processing; fresh local and dedicated-server playtests must confirm frame-time improvements. Automated tests use labeled synthetic fixtures; real credentialed OpenRouter generation, two-client multiplayer acceptance and Linux hosting still require testing. Unresolved attackers and uncertain loot provenance stay unattributed rather than being guessed. Fight durations are observed telemetry, and carried gold is a snapshot, not a lifetime earnings counter.

License

Valheim Sagas is released under the MIT License, copyright 2026 Pendulumgames and Valheim Sagas contributors. The license is included in every distribution.

Third-party dependencies retain their own copyrights and license terms; see third-party notices. The Sagas license does not grant rights to Valheim assets or other third-party content shown in runtime captures or screenshots. Valheim belongs to Iron Gate AB. This is an independent community mod.

Appearance: On a Viking page, open Appearance to choose Boxed, Full Screen, or Full Screen Scroll for your own browser. When viewing your own Viking while logged in, the same popover lets you save unlocked scenery visible to everyone.

Open Sagas inside Valheim

Press Ctrl+Home while playing to open the website in the Steam overlay. Enable Steam Overlay for Valheim and launch the game through Steam (including Gale's usual Steam launch). Change or disable Website Login / OpenWebsite in F1. This uses Steam's browser; it does not embed a new browser or pause multiplayer. Close the overlay with your Steam overlay shortcut (normally Shift+Tab).

Local hosts automatically use their ListenPrefix address/port (wildcard HTTP bindings become loopback for this shortcut). For a custom domain or relay/crossplay connections, set Server / WebsiteUrl to the reachable website address, such as http://example.com:19908/ or your HTTPS reverse-proxy URL. Use WebsitePort = 19908 with a blank ListenPrefix on a dedicated host, or keep an explicit wildcard override; the public URL setting does not change binding or open ports. AdvertisedAddress is the displayed game-server address; its host can supply the automatic web address using the separate web port. A player may set Website Login / WebsiteUrlOverride instead. Use a plain HTTP(S) address without credentials, query or fragment. The host sends only that public URL, on an authenticated, rate-limited hotkey request. No background URL polling.

Website login is separate in Steam's browser: use the Login button, and Ctrl+Insert to copy your personal login when needed. The shortcut never includes a viewer token or key in the URL and does not automatically log you in. If Steam Overlay is unavailable, Sagas displays an explanation; your ordinary browser remains available. Actual overlay operation needs an in-game test on your installation.

Map locations and page layout

The atlas leads the World page, followed by Online Vikings and event statistics; Recorded Vikings is at the bottom. Nearby visible map icons become a numbered cluster. Click/tap a cluster to browse its locations, then choose a pin to center its exact coordinates, marked with a crosshair. Zooming separates pins where space permits; coincident pins stay accessible through the picker. The Icons tray's Browse visible icons also supports keyboard selection. Clusters respect the existing discovery, personal-sharing, owner and layer filters. Clustering runs in the browser over the separate cached icon feed; it adds no game capture or network traffic.

Map icons and optional-mod statistics

Click a nearby-pin group to spread up to 12 icons and browse its locations. Double-click it, or use Zoom into group, to zoom closer. Zoom stops at 20 m on the scale bar. Close pins fan out around 40 m when space permits and gather again around 50 m when zooming out; fine lines connect them to their real coordinates. Zoom out to gather them again. Larger or crowded groups keep a scrollable picker. Selecting an individual location briefly highlights its true position, then fades. Game icons retain their original colors; Color by Viking applies only to personal pins and Viking markers.

Statistics use the latest shared profiles to detect Epic Loot and Jewelcrafting, including offline snapshots. Epic Loot adds rarity discoveries and bounty completions. Jewelcrafting adds equipped gems and total equipped socket capacity, including empty sockets. These loadout counts are independent of the time filter, exclude hotbar duplicates and containers, and do not measure combat power. SLS Nemesis statistics follow the host's installed/enabled integration. No optional mod is required.

On first launch after this update, the original Ctrl+F8/F9/F10 defaults migrate to Ctrl+Insert/End/Home respectively; custom shortcuts are preserved. You can change them again in F1. Loot notifications no longer have a configuration toggle.

Dedicated multiplayer updates

Update both the dedicated server and every Sagas client to 0.3.32. Releases 0.3.28 and later use compressed, small, paced transport fragments; servers older than 0.3.28 cannot receive that upload format. Restart each game/server after replacing plugin files. Existing configuration and recorded data are preserved.

Dedicated-server character identity now comes from the connected player's owned, replicated character object. Ctrl+Insert reports a specific server identity/service/storage problem when possible; shortcut notices also appear in the BepInEx log without credentials. Ctrl+Home can obtain the host URL without waiting for character metadata. Set Server / WebsiteUrl to the public browser address (for example http://your-host:19908/); the HTTP bind prefix can remain http://*:19908/ on a dedicated host. A wildcard is a listening address, not a browser URL.

Sagas uploads are fragmented into less than 4 KiB of encoded RPC payload plus the accounted framing allowance, with a global minimum 250 ms send spacing and independent event/profile/map/artwork allowances. Steam checks separate unsent data from unacknowledged data, reserving queue headroom and retaining a total backlog ceiling. Other transports retain conservative queue gating. Logs report pressure and recovery; a brief pause is expected, while persistent pauses need the client and server logs. Portrait/map synchronization may take longer on busy connections. These changes have automated coverage; dedicated multiplayer and crossplay performance still require playtesting.

Map imports use lossless background compression and a bounded capture pass up to four times per second, alternating nearby terrain with previously explored areas. Only one tile is captured per pass and at most two map packets await acknowledgment; network byte limits and gameplay backpressure remain in force. Large initial imports are gradual. Compression changes transport size only, preserving map detail and fog of war. Cartography-only exploration remains excluded.

A rejected or revoked browser token is removed automatically. Public servers resume anonymous map/statistics viewing; private servers return to the login prompt. Logging out in one browser does not revoke other browsers. Use Ctrl+End in game when you want to revoke every login.

Inventory stacking fix (0.3.29)

Update the server and all Sagas clients, then restart. Sagas now keeps loot provenance on ground objects rather than inventory item metadata. Existing Sagas tags are removed automatically as character/container inventories load and items pass through inventory insertion checks. Open affected containers after updating; existing stacks may still need to be combined manually. Other mods' item metadata is preserved. No offline save editing is required. This fixes the verified InventorySlots metadata incompatibility; unrelated item restrictions still apply.

Large-world map performance (0.3.30)

The atlas now loads a compact world overview in small batches, then requests detailed terrain around your view as you zoom in. Unchanged exploration is not downloaded again on every refresh. Existing exploration is indexed gradually on the host; no world or character-save conversion is needed. Partly explored overview edges remain conservatively fogged until precise detail arrives.

Install the update on the host and refresh open website or Steam-overlay tabs. Keep clients on the current release as usual; 0.3.30 does not change the 0.3.29 game upload protocol. No new configuration, port or dependency is required. Dedicated hosts still use http://*:19908/ (or their allocated port) for ListenPrefix, and a real public address for WebsiteUrl.

Synthetic full-world checks covered 76,648 terrain cells and 1,000 pins, with optional 40,000 SLS squares and 5,000 heat-map events. Results and limitations are documented in map performance. These browser tests do not replace a dedicated-server playtest.

Saga storytelling (0.3.32)

Saga chapters use selected recorded moments to tell a connected Norse-inspired story. AI fiction remains labeled separately from recorded evidence. Writing improvements apply to future chapters; existing stories are preserved without automatic regeneration.

Independent atlas loading and version checks (0.3.33)

The existing overview/detail map renderer is preserved. World identity, player presence and terrain now load independently of historical statistics; a slow statistics request no longer holds up the atlas. Expand Connection details to see feed status and server/website versions. Transient failures keep last-received terrain visible; world or sharing changes still clear the relevant cached information.

Upgrade the complete package, including the web folder, on the host. Replacing only DLLs leaves the old website running. New hosts warn in the log about missing/mixed website files; current browsers also show a mismatch warning. Preserve your configuration and recorded data, restart, and reload browser/Steam tabs. Update all clients to the same version, as version matching is enabled by default.

Statistics reuse a bounded history cache and append newly recorded events. Filters still calculate exact retained totals; the displayed event list remains capped at 5,000. Synthetic benchmarks are not dedicated-server performance guarantees.

The World recap follows a per-world bookmark on this browser, independent of statistics filters. Mark caught up starts a new recap period. Trophy hall and Compare Vikings share the Hall of Renown time filter: first victory means first retained victory in that selected period. Boss participation includes recorded teammates; ordinary kills use finishing-blow credit. Unmeasured and incomplete multi-phase fights are excluded from fastest times.

Valheim Moments media sharing is not enabled yet. Its optional integration requires an identity-aware, consent-based export interface in Moments; see the integration assessment. No extra mod is required for Sagas.

Follow a saga through the atlas

Open Sagas in the map toolbar to enable chapter markers. Select a chapter for its framed story panel, thematic boss/biome illustration and recorded moments. Read the full saga opens a dedicated journey page; Explore recorded moments on Viking and server chapters leads there too.

Use play/pause, the timeline slider, replay speed and Follow journey to revisit the moments. Dragging or zooming the map releases camera following. A participant selector appears for shared adventures. The gold connections show the order of recorded moments, not exact footsteps; gaps, different Vikings, long intervals and distant locations stay disconnected. Only shared, explored evidence is shown. Chapters without retained locations can still be read.

Journeys use existing AI chapters and bundled illustrations, with no additional OpenRouter calls or generated-image charges. The host still needs OpenRouter configured for new sagas. Update the complete web folder along with the plugin for this release.

New sagas unfold as up to six story scenes, each with its own passage, evidence-linked location and biome or boss artwork. Play follows the scenes along a curved trail; major boss encounters receive larger markers. Chapter lists identify the Viking or server. The full chapter is made from those same passages. Existing chapters stay unchanged and retain their recorded-highlight presentation; no conversion or automatic regeneration occurs.

Scenes and biography use one bounded OpenRouter request (up to 2,000 output tokens); there is no request per map marker. The server validates reference aliases against supplied evidence and never accepts AI-generated coordinates. If a model returns a valid older text-only response, it remains readable without invented scenes. Existing key, budget, free-model and paid-preset controls remain in force.