Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
ValheimSagas
Every Viking has a story. Standalone server website with player statistics, a 2D world atlas, character armory, leaderboards and evolving sagas.
| Date uploaded | 5 days ago |
| Version | 0.3.9 |
| Download link | Pendulum-ValheimSagas-0.3.9.zip |
| Downloads | 19 |
| Dependency string | Pendulum-ValheimSagas-0.3.9 |
This mod requires the following mods to function
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.2350README
Valheim Sagas
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. No ValheimWebMap dependency.

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.
- 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. 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.

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.

Screenshots show an isolated copy of recorded playtest data, with display names replaced for publication. The atlas includes a last-known player marker and the host's SLS boundaries clipped by exploration. 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
- 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
BepInExfolder into your profile/game installation. Keep the four plugin DLLs andwebfolder together. - 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.
- On the host computer, open http://127.0.0.1:8877/. New configurations allow public viewing without a viewer token. This does not expose a public internet port: the default binding remains loopback.
- Settings are in
BepInEx/config/org.valheimsagas.collector.cfg. Existing saved settings are preserved on upgrade. Restart the host after changing server settings. - For a dedicated host, use its allocated website TCP port and the wildcard listener 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 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
ListenPrefix = http://*:19908/
RequireViewerToken = false
DisplayName =
AdvertisedAddress =
Restart the server, then open http://YOUR-SERVER-IP:19908/. Replace 19908 with your allocated website port. Keep the http:// and trailing /; the wildcard * belongs in the configuration, not the browser address. 127.0.0.1 only accepts local requests and will not make the website accessible to remote players. The host must allow TCP on the chosen port; keep the Valheim game/query ports unchanged. You do not need to create a panel reverse proxy for direct IP access.
With DisplayName blank, 0.3.9 reads the host's configured Valheim server name, falling back to its world name. Set DisplayName = Your Fellowship to override it. Set AdvertisedAddress = YOUR-SERVER-IP:GAME-PORT if you want the website to display the address players use to join Valheim. This display-only field does not configure the website listener; the game and website ports are usually different. Neither your public IP nor a panel hostname is discovered automatically. Restart after changing these settings.
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 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)
Upgrade both the host and every participating client, 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.
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.
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.
While playing, press Left Ctrl + F8 to copy a personal login token, then paste it into the website's Login dialog. This replaces the previous token for that character/world. Left Ctrl + F9 revokes it. A personal login enables owner-only scenery and storyteller settings; the shared viewer token does not grant ownership. Tokens are stored in the browser tab session 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 and Epic Loot
Neither mod is required. Without them, statistics, vanilla gear/tooltips, portraits, maps, leaderboards and sagas continue to work. SLS and Epic Loot are independently detected; installing one does not require the other.
When SLS is installed on the host, the atlas mirrors its enabled zone overlay, resolved level palette, transparency and above/below-fog setting. 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.
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 zero token-price ceilings, 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.
Signed-in players may optionally save their own OpenRouter key and up to eight named storyteller presets in Login. 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 generation always remains free-only.
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.8 is a tested preview release. 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.
CHANGELOG
0.3.36 - A story told through places
Update the complete host package, including
web, and matching clients. Exact version matching is enabled by default. Preserve configuration and data, restart, and refresh browser tabs.
- New Viking and server sagas generate up to six connected story scenes in the same request as the biography. Each scene carries its own title, passage and validated evidence references; the full chapter consists of those passages. Target three to six scenes, fewer for sparse evidence.
- Selecting or replaying a scene changes the story passage and recorded biome/boss artwork. Rounded marker frames echo the story panel; boss-kill scenes have larger, double-bordered major markers. Chapter buttons identify the Viking or server.
- All map locations and boss status come from server records. Unavailable/private scene evidence hides the scene and breaks the trail. The AI never supplies coordinates. Existing chapters remain unchanged: no conversion, regeneration or additional provider calls.
- Generation remains queued and cached, with existing credentials and routing controls. Output allowance rises from 1,000 to 2,000 tokens for the structured story; paid opt-in and OpenRouter preset/account pricing behavior stay unchanged. Invalid scene output is rejected; a valid text-only response can remain readable without scene fabrication.
- Add a working saga screenshot at the top of both release READMEs. Its example story/events are labeled. No test database, seeded saga, game assets or development host ships.
0.3.34
Install the complete package, including
web, on the host and use matching client/server versions. Preserve configuration and data, restart, and refresh browser tabs.
- Replace numbered boss cards with eight original transparent illustrations, layered ornamental SVG frames and static, weighted mist over unrevealed silhouettes. Kall uses a symbolic frozen monument, preserving his appearance as a mystery. No game assets are bundled.
- Reveal a trophy when a shared victory becomes known, with a brief transition that respects reduced-motion settings. Ordinary refreshes do not replay it.
- Keep trophy unlocks independent of the selected period, using permanent known-boss receipts plus retained shared victory evidence. Private profiles do not unlock public trophies.
- Add highest-star encounter records with their own team/date/duration. Ties prefer the shortest valid duration at the highest star tier; absent durations stay absent. Overall fastest fights remain separate. Kall phase-only timing stays excluded.
- Reorganize Viking comparisons into distinct portrait columns, centered measure labels, larger values and responsive layouts.
- Bundle eight alpha-preserving 1024x1536 WebP illustrations (about 5.2 MiB total), served locally with lazy loading. No CDN, API key, runtime capture or new dependency is required.
- Animated saga journeys and dedicated chapter pages remain planned; existing recorded chapter map links are unchanged in this release.
0.3.35 - Follow the saga
-
Curate each journey to six meaningful highlights, favoring boss encounters, rare discoveries and biome variety over repetitive records. Preserve privacy and journey breaks through omitted moments. Separate crowded markers with location spokes, move playback above navigation, and fit the chapter into the clear map area. Moment artwork follows its recorded biome and boss, clearing boss art when moving on.
-
Journey connections now form gentle, zoom-stable curves; the replay arrow follows their tangent. Curves remain clipped to explored terrain and preserve recorded endpoints and breaks.
-
Sagas toolbar selection follows the open tray rather than remaining highlighted when its layer is enabled.
-
New independent Sagas atlas layer with chapter markers, an ornate framed story panel, original local boss/biome imagery, chronological recorded moments and a full chapter journey page. Open a chapter from the map or either Viking/server saga.
-
Gold journey replay supports play/pause, restart, scrubbing, speed selection, a participant perspective and optional camera following. Manual panning releases camera following. Replay pauses offscreen or in a hidden tab; reduced motion removes the moving arrow.
-
Animation uses its own transparent canvas, not a terrain redraw on every frame. The separate chapter index is lazy, paged and capped; each journey contains up to six curated highlights from retained shared locations.
-
Privacy is enforced in the server endpoints and stale browser responses are discarded. Different Vikings, hidden/missing event gaps, intervals over 30 minutes and jumps over 1,200 metres break connections. Connections indicate recorded event order, not a tracked walking path. Imagery and story excerpts remain distinguishable from event evidence; no new provider calls are required.
-
Install the complete matching package on clients and server, including the new journey.js and journey.css website files. Refresh open website tabs. This release does not change gameplay capture hooks or require any optional loot/zone mod.
0.3.33
Install the whole package on the host, including
web, then restart and reload browser tabs. Keep configuration/data. Server and clients must match because version enforcement remains enabled by default. Updating only DLLs can leave the old slow website renderer running.
- Preserve the existing scalable atlas renderer; load world/presence/terrain independently of historical statistics. Show individual feed status and keep last-known terrain during transient failures.
- Add server/website version and JavaScript-integrity checks, a browser mismatch banner and one host startup warning for stale/mixed web files.
- Reuse bounded cached retained history with incremental new events, exact period counts, retention invalidation and fresh sharing checks. Bound event coordinate checks to displayed events and reuse discovery masks.
- Add a World adventure recap, per-browser/world visit bookmark, new chapter links and notable recorded moments.
- Add Trophy hall and Compare Vikings views inside the Hall of Renown, using its existing time filters. Show recorded first teams and eligible fastest times without inventing solo credit or incomplete fight durations.
- Link saga chapters to shared, explored recorded event locations. Narrative prose never determines coordinates.
- Guard delayed statistics/profile responses against overwriting newer presence or reviving revoked profile data; bound overlapping detail requests.
- Moments integration investigated and planned, not shipped: a capture-time identity/consent export interface is required in Moments. No new captures or mandatory mod dependencies. Host diagnostics downloads, epithets and Steam achievements are excluded.
0.3.32
Upgrade warning: Update the server and every joining client to the same Sagas version, then restart.
RequireMatchingVersionnow defaults totrue; missing or mismatched clients cannot join. Clients without the new handshake may only see Valheim's generic incompatible-version error—check the server log for the Sagas requirement. A host can explicitly setRequireMatchingVersion = falseto permit mixed/missing clients, with potentially incomplete telemetry.Website setup change: New dedicated-server configs with a blank
ListenPrefixlisten on all interfaces usingWebsitePort; public viewing remains the default. Existing saved listener overrides and privacy choices are preserved. Clear an oldListenPrefixonly when intentionally switching to the new port-based setup. Sagas does not open firewall/panel ports. Relay/crossplay joins may still need an explicitWebsiteUrl.
- Give future Viking and server sagas a stronger narrative arc, selective memorable moments and fewer loot/stat lists. Remove the repeated "Fictional embellishment:" prefix, including on existing chapter displays; saved stories and recorded evidence remain intact, with no automatic regeneration or extra API requests.
- Require an exact Sagas version match before joining by default; hosts can disable RequireMatchingVersion. Missing/mismatched versions are rejected before world admission, with named version errors where the client supports them.
- Fix Shudnal ConfigurationManager S/C labels: draw ownership indicators at the row entry point, before its unsynchronized-setting visibility filter. Keep host settings locked and secrets unsynchronized.
- Add WebsitePort for simplified dedicated setup. A blank advanced ListenPrefix binds all interfaces for dedicated servers and loopback for local hosting; existing overrides remain unchanged.
- Resolve Ctrl+Home using an explicit WebsiteUrl first, then an advertised host or direct-IP connection plus the web port. Relay/join-code connections without a routable host receive clear custom-URL guidance; no external IP-discovery service is used.
- Log effective website port, listener readiness, private/public mode and override/loopback setup issues. Hotkey failures distinguish disabled, starting, failed and invalid-URL cases.
- Automated checks do not replace the dedicated version-handshake/crossplay and in-game F1 verification listed in IN-GAME-TESTS.md.
0.3.31
- Default personal map-pin sharing on for new configurations; preserve existing saved choices and the independent browser layer toggle.
- Clarify public/private website settings, optional shared viewer credentials, dedicated wildcard binding, and the OpenRouter daily request-count limit. No configuration keys are renamed or removed.
0.3.30
- Fix severe website map stalls when zoomed out over large explored worlds. Terrain now uses cached overview chunks with bounded, on-demand close-up detail instead of repeatedly decoding thousands of individual tiles.
- Stream exploration in small incremental pages; unchanged terrain is no longer downloaded every five seconds. Existing map records are indexed gradually, without changing worlds or character saves.
- Preserve exact exploration checks for icons and events. Overview fog is conservative at partially explored edges; detailed terrain restores precise edges as it loads. Sharing changes reset cached map data.
- Coalesce drag/wheel redraws, reuse SLS paths and fog masks, and cache heat-map gradients and event grouping. Keep pin clustering, player colors, separate layers and existing zoom limits.
- Synthetic full-world benchmark (76,648 tiles): 1,000 markers improved from roughly 43 seconds per redraw to a 5.5 ms median. With 40,000 SLS squares and 5,000 events, median 9.1 ms / maximum 24.8 ms in the measured run. These are headless-browser timings, not dedicated-server or in-game acceptance.
- Update the host's plugin and refresh open website/Steam-overlay tabs to load the matching website and API. No configuration changes are required.
0.3.29
- Fix Sagas loot-tracking metadata preventing InventorySlots from stacking otherwise identical items. New provenance stays on the ground item's network object and is not copied into inventories or player redrops.
- Automatically remove only obsolete
sagas.origin/sagas.sourcetags as inventories load and items enter inventory checks. Preserve all other item metadata, including enchantments, sockets, quality, and large-stack data. Existing ground items migrate their provenance when loaded by their owner; no offline save editing is required. - Keep server-side loot deduplication and quantity limits. Ground stacks with uncertain mixed provenance remain ordinary pickups instead of inflating earned loot.
- Includes 0.3.28 concurrent browser logins and compressed map uploads. Update the server and all Sagas clients together, then restart. In-game multiplayer stacking validation is still required.
0.3.28
- Allow up to32 concurrent personal login credentials per character/world. Issuing a code no longer invalidates another browser; Ctrl+End explicitly revokes all. Server stores hashes only.
- Remember browser logins across tabs/restarts, synchronize same-browser tabs, and recover from rejected tokens: public viewing retries anonymously; private viewing returns to login. Chrome and Steam still require separate initial sign-ins.
- Losslessly compress upload payloads on a worker before bounded V4 fragmentation. Bound decompression output; retain global pacing, per-lane byte allowances and gameplay pressure gates. Requires server and clients updated together.
- Run bounded map capture independently from the three-second profile tick, alternate nearby/history scans, and limit unchanged partial-tile work to prevent one edge tile blocking history import.
0.3.27
- Fix dedicated-server identity resolution using the ready peer's owned Player ZDO; reject mismatched ownership, non-player objects and conflicting IDs. Apply consistently to logins, telemetry, presence and Nemesis lookup.
- Return explicit personal-login identity/service/storage errors and log credential-free shortcut notices. Dedicated login persistence runs off the game thread. Website URL requests no longer depend on player metadata.
- Guard the not-yet-created world during client startup without repeated exceptions.
- Send telemetry in bounded, interleaved fragments instead of large RPC bursts; keep global pacing, per-lane budgets, durable event acknowledgments and privacy cancellation. Bound assembly size, lifetime, concurrency and receive rate.
- Distinguish Steam pending data from ordinary acknowledgment backlog; retain strict pending/delay/total gates and conservative non-Steam fallback. Report actual queue details and recovery.
- Requires 0.3.27 on server and clients. No configuration migration required. Dedicated multiplayer performance is pending real playtest.
Changelog
0.3.26
-
Refresh the README atlas image with the day/night dial and real-time countdown visible (labeled example clock on recorded offline playtest data).
-
Cap atlas zoom at 20 m on the 100-pixel scale bar across wheel, buttons, keyboard and cluster zoom.
-
Spread nearby pins around 40 m and gather them at 50 m, with separate thresholds to avoid flickering. Manual cluster opening, exact-position lines and close-pin selection remain available.
0.3.25
- Move default shortcuts away from Moments and Valheim function keys: Ctrl+Home opens the Steam website, Ctrl+Insert copies a personal login, Ctrl+End revokes it. One-time migration changes only the old default combinations; custom bindings are preserved.
- Remove EnableLootNotifications. Earned enchanted/socketed pickup notices are always enabled, retaining provenance checks, deduplication, freshness and rate limits.
- Show Epic Loot rarity/bounty panels only for shared profiles reporting Epic Loot; add Jewelcrafting equipped-gem and socket-capacity rankings and overview/profile highlights. These use latest loadouts, exclude hotbar duplicates and containers, and are not combat-power scores. SLS Nemesis panels remain host-capability gated.
- Replace persistent pin crosshairs with a fading location halo. Small groups fan out with exact-position leader lines, double-click/zoom controls, automatic high-zoom separation and animated gathering on zoom-out. Neighboring icons reserve space; dense groups retain an accessible scrollable picker. Reduced-motion preference respected.
- Cache the map background during brief pin animations; no extra game capture or network polling. Refresh the README atlas screenshot from an isolated playtest copy with colored personal pins and a fanned group.
0.3.24
- Optional Smoothbrain Jewelcrafting support: socketed gear/hotbar tooltips, gem icons and configured power ranges, extra equipped ring/necklace slots, jewelry armor, item colors and portrait change detection. No hard mod dependency.
- Preserve socket metadata in actual drop/collection records, map inspection, offline snapshots and saga evidence. Special creature equipment spawns use existing provenance/deduplication; opt-in Sagas notifications include earned socketed pickups.
- Keep Epic Loot rarity/effects alongside Jewelcrafting sockets. Configured ranges are not reported as rolled/effective totals; gem-bag/fusion-box contents are excluded.
- Installed 2.0.10 API inspection, synthetic present/absent adapter tests, persistence/media/privacy checks and desktop/mobile browser coverage. Real gameplay verification remains pending.
0.3.23
- Configurable Ctrl+F10 Steam overlay website shortcut, local listener fallback, dedicated host public URL and personal override. Explicit authenticated/rate-limited URL request; credentials never sent in URLs. Steam browser login remains separate.
- Move Online Vikings below the atlas and Recorded Vikings to the bottom of World.
- Cluster crowded visible map pins with count badges, a scrollable location picker and an exact-position crosshair. Preserves discovery, ownership and personal pin consent; no extra telemetry.
- Installed Steamworks API inspection, URL validation checks and synthetic desktop/mobile map regression coverage. Actual in-game Steam overlay and dedicated-host URL exchange still require playtesting.
0.3.22
- Fix duplicated portraits in Online Vikings and Recorded Vikings after the directory update.
- Share one online/syncing/offline badge across World rosters, search cards and character profiles. Fix status disappearing when revisiting the same Viking through search by clearing the cached markup consistently.
- Reorganize search cards around the character and an excerpt from their saved saga/biography, clearly labelled AI fiction. Show an honest empty state when no generated saga exists.
- Add an eight-boss checklist and completion total from authoritative lifetime receipts; skipped bosses remain 0/1. No additional generation requests or polling endpoints.
0.3.21
- Keep automatic game icons in their original colors. Color by Viking applies to personal pins, Viking markers and names.
- Make Vikings a search directory for everyone, with three featured profiles ranked by recorded progression and recent boss victories. Add saved head portraits, achievement/presence cards, keyboard navigation and avatar previews in header search.
- Add Kall Fimbulbringer to boss progression and leaderboards using the installed final-phase prefab. Exclude early phases from boss wins; omit phase-only times from fastest full-fight rankings. Backfill retained final-phase progression on upgrade and keep the Deep North backdrop after victory.
0.3.20
- Make the atlas full width with compact Terrain, Vikings, Activity and Icons trays; retain map position/zoom while changing options, with keyboard close and mobile layouts.
- Replace ambiguous adventure filters with an explicit Statistics & heat maps drawer and active scope summary. Terrain, live positions and icon ownership remain independent.
- Label host-owned and personal settings in Shudnal ConfigurationManager. Lock local hosting controls during remote sessions; never synchronize host secrets. No new required mod or network feed.
- Confirm both history-retention defaults are zero/unlimited; preserve existing configured retention values and document how to change them.
0.3.19
- Increase game map icons from 28 to 36px; add optional matching Viking colors for pin rings, player markers and names, plus independent per-Viking icon checkboxes. Store world-specific server-owned colors once and choose separated new colors without recoloring existing players. Preserve all sharers on deduplicated game locations.
- Shared personal annotations now appear above fog, including undiscovered coordinates, only with ShareMap and SharePlayerPins consent. Automatic game/mod locations remain personally exploration-gated.
- Include sprite-backed custom Minimap pin types, including inspected Epic Loot bounty/treasure pins. Unknown saved custom pins require personal consent; separate drawing overlays need adapters.
- Replace static phase text with real-time estimates until day/night, honoring host day length/time scale and showing paused, skipping or overdue states. One-second browser countdown does not reload the map.
0.3.18
- Add separately loaded discovered game pins and opt-in personal map pins, runtime game sprites, browser layer toggles and hover/tap/keyboard-list inspection. Enforce owner sharing and personal fog on the server; exclude copied cartography pins. Preserve offline pins, deduplicate shared game locations, atomically replace multipart snapshots and retry lost acknowledgements.
- Bound pin scanning to 16 entries per frame, encode snapshots off-thread, share existing upload budgets and capture at most one item/map icon per frame across both queues. No proprietary map artwork is bundled.
- Add two original host-synchronized daylight graphics (sun/moon dial and horizon) and None, with persistent per-browser preferences and stale/unavailable states.
- New automated privacy, persistence, multipart, HTTP, API and browser checks. Real in-game pins, icon appearance and frame-time impact still require playtesting.
0.3.17
- Reduce website SLS zone outlines to at most 20% opacity, respecting lower host values. Composite the layer once so shared/overlapping boundaries do not become darker; preserve level colors, hover/tap details and fog rules. In-game SLS settings are unchanged.
- Resolve initial SLS and Epic Loot metadata inside each registered plugin assembly instead of searching all loaded assemblies. Add limited world/equipment startup phase logs to distinguish remaining initialization costs; real startup timing gains still require a fresh playtest.
0.3.16
- Construct host storage and website services on a worker. Keep local telemetry pending until adoption; retire abandoned startup and drain active storage off-thread before reopening the database.
- Read the coherent world atlas asynchronously in bounded strips, avoiding the full-image synchronous GPU readback and 64 MB main-thread copy. Export only complete, personally fog-masked tiles; pending capture never publishes temporary fallback tiles. Preserve explicit degraded terrain fallback on unsupported/failed readback.
- Queue uncached item icons and render at most one per frame, outside equipment snapshots and active portrait/map preparation. Equipment can arrive before its icons.
- Log atlas setup/readback, icon batch maximum, outbox startup and per-phase portrait costs. Startup timing improvements still need a fresh game session; individual Unity render calls remain on the main thread.
0.3.15
- Spread portrait preparation, bone copying, equipment effects and visibility/framing passes across frames. Freeze the character pose before preparation; retain native skinned rendering and weapon effects.
- Replace synchronous portrait pixel readback with bounded asynchronous GPU requests. Copy callback data into detached arrays, then reconstruct transparency and encode PNGs in the background. Keep GPU resources alive until callbacks finish, including cancellation and partial submission failures. Unsupported graphics devices retain the saved portrait instead of falling back to blocking readback.
- Capture only after appearance changes settle: two-second debounce and ten-second minimum cooldown, with no periodic refresh. Defer seated/attached poses until standing and settled; keep the last shared portrait during deferred capture and upload. Profile privacy revocation still removes access.
- Add per-frame capture-work timing. Automated checks cover scheduling, resource lifetime, pixels, persistence and installed APIs; real GPU appearance and frame-time improvements require a playtest. Individual Unity render operations still execute on the main thread.
0.3.14
- Refresh portraits after settled equipment/cosmetic changes, with a two-second debounce, ten-second capture cooldown and ten-minute safety refresh instead of rebuilding every minute. Failed captures retry no faster than once per minute.
- Move final-resolution transparency reconstruction, size-limit fallback, PNG encoding and hashing to a single background job using detached pixel arrays and Unity's thread-safe array encoder. Keep rendering/readback synchronous on the game thread; no async GPU readback or multi-frame render preparation.
- Retain the last good portrait during processing; reject outdated results after appearance, character, world or consent changes. Preserve normal 1024x1536 output and body visibility checks.
- Log preparation, visibility/framing, final render/readback and background processing timings separately. In-game appearance, orientation and frame-time confirmation remain required.
0.3.13
- Address periodic game-thread stalls: cache Epic Loot and SLS reflection metadata instead of repeatedly searching assemblies and members. Runtime item effects, rarity colors and settings are still read fresh.
- Capture SLS zones incrementally (up to 128 zones per frame with a 2 ms target), publishing only complete detached snapshots. Run snapshot validation/copying on a bounded background task; Unity/mod reads stay on the main thread.
- Add separate portrait timing warnings to distinguish occasional image capture from equipment work. Preserve upload backpressure and pacing.
- This is a performance fix candidate; a new in-game and dedicated-server playtest is still required.
0.3.12
- Group page layout and owner-only Viking scenery in a compact Appearance popover, with clear personal-view versus public-profile labels. Keep the small trigger beside profile tabs on mobile and use a clean scenery selector with a compact save action.
- Replace saved setups with Saga Profiles, each containing its own encrypted OpenRouter key and model/preset. Switching profiles switches credentials; deleting a profile removes its credential.
- Keep paid opt-in, request limits, HTTPS key submission and server storyteller defaults.
0.3.11
- Replace the signed-in Login button with a saved-portrait account icon and a compact Saga Settings / Log out menu. Preserve anonymous public browsing and shared-token read-only access.
- Separate token login from storyteller settings. Start with Server storyteller or My own storyteller, reveal personal key/model controls only when needed, and place saved setups/request limits under advanced options.
- Preserve existing setups and spending controls, add clearer errors and keyboard/focus behavior, and clear unsaved secrets when dialogs close.
0.3.10
- Add host AllowPaidModels opt-in for direct models and OpenRouter presets, funding default Viking and shared server sagas with the host key. Free routing remains the default.
- Preserve paid preset pricing/provider settings by omitting Sagas provider overrides; manage monetary limits in OpenRouter, with the existing shared daily attempt budget in Sagas.
- Keep personal-key price ceilings, persistent chapters, retry queues and server-only credentials. Document setup in both publication READMEs.
0.3.9
-
Clarify the existing MIT license, Pendulumgames attribution and third-party content boundaries in the public READMEs and packaged notices.
-
Use the configured Valheim server name when the website DisplayName override is blank; retain the world name as a fallback.
-
Document dedicated-host wildcard listeners (
http://*:PORT/), allocated TCP ports, advertised game addresses, and troubleshooting for missing player markers. -
Pace client telemetry with separate byte allowances and a shared packet interval; pause uploads when Valheim's socket send queue is busy.
-
Send one terrain tile per packet, keep at most two map batches pending, and remove immediate duplicate map sends. Retry unacknowledged events/maps/media after 30 seconds.
-
Preserve portraits during upload, capture at most once per minute, and allow longer assembly time for deliberately paced high-resolution transfers.
-
Log slow collector stages and network backpressure at most once per minute per stage. Dedicated-server multiplayer validation is still required for the reported Steam send-limit incident.
0.3.8
- Add optional host SLS zone outlines using its live bounds, levels, palette, transparency and fog setting; show zone levels above 1 on hover/tap.
- Display consented latest Nemesis scores on map tooltips and the portrait corner, using the host-observed player ZDO rather than client snapshot claims.
- Track distinct Nemesis boss deaths and team credit in filtered player metrics and leaderboards; preserve classification through retention and feed factual context to sagas.
- Keep Nemesis encounters out of ordinary progression/scenery unlocks and normal boss-speed rankings.
- Verify both SLS and Epic Loot remain optional, with independent detection and no hard assembly references.
0.3.7
- Expand personal and server saga evidence with career, equipment, effects, resistances, exploration, boss teams, bounties and loot context while preserving consent and narrative continuity.
- Require host OpenRouter configuration for story generation. Hide legacy template stories; leave failed generation pending instead of inventing fallback prose.
- Add encrypted personal OpenRouter keys and named model/preset choices, explicit paid opt-in, token-price ceilings and daily attempt limits.
- Unlock scenery progressively from recorded boss credit, beginning with Meadows. Public viewing and full-screen scrolling scenery are defaults for new settings; preserve existing preferences.
- Replace unexplored atlas background with a procedural textured brown parchment treatment without distributing game textures.
- Prepare a shared Thunderstore/Hexium package, original package icon, public documentation and recorded-playtest website screenshots.
Earlier previews
Established standalone telemetry, provenance-aware loot, runtime terrain, portraits and gear icons, character/server sagas, leaderboards, personal login, responsive biome scenery and isolated Gale Test installation workflows.