You are viewing a potentially older version of this package. View all versions.
AsherFrailey-BetterPortals-0.4.7 icon

BetterPortals

A Valheim-styled portal directory with Home shortcuts, biome labels and sorting, longer portal names, and configurable native-style UI.

Date uploaded 2 hours ago
Version 0.4.7
Download link AsherFrailey-BetterPortals-0.4.7.zip
Downloads 377
Dependency string AsherFrailey-BetterPortals-0.4.7

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

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

Preferred version: 5.4.2350

README

BetterPortals

BetterPortals replaces one-to-one portal pairing with a Valheim-styled destination menu. Walk into a named portal, choose another named portal, and travel directly to it.

Features

  • Lists named portals in a centered, prewarmed lightweight menu based on Valheim's native pause-menu styling.
  • Centers and stabilizes the mouse cursor while the menu is open, restores normal hidden gameplay capture on close, and supports controller navigation.
  • Closes automatically when you leave the source portal or complete a trip.
  • Preserves the nearby glow on named portals even when they are not paired by matching tags.
  • Allows portal names up to 32 characters.
  • Lets each character mark one Home portal per world with matching Valheim-native favorite stars on both sides of its centered name.
  • Supports right-click, keyboard H, or controller X to set or clear Home. Home is initially selected when the list opens, so Enter or controller A travels there immediately unless you select another destination first.
  • Shows an optional white biome subtitle beneath each portal name, then sorts portals by biome and stable creation order.
  • Validates the protocol, source, issued destination set, distance, request lifetime, and rate limit on the server.
  • Does not permanently rewire Valheim's portal connections.
  • Provides client-local controls for typography, colors, layout, backdrop, hover timing, fade timing, and trigger range. Text outlines are disabled by default.

Requirements

  • Valheim 1.0.12 / network version 40.
  • BepInExPack Valheim 5.4.2350.
  • The identical BetterPortals version must be installed on the dedicated server and every participating client.

Configuration Manager is optional. If installed, press F1, select BetterPortals, and use its built-in Reset to Default action whenever you want to restore the packaged defaults.

Installation

Install with r2modman or the Thunderstore Mod Manager. For a dedicated server, install the same package version in the server's BepInEx environment as well.

Use

  1. Give every portal a unique name with Valheim's normal E interaction.
  2. Walk into a named portal.
  3. Choose a destination from the list.
  4. Press Escape or the controller back button to close the menu without travelling.

To set a Home portal, right-click its destination row, highlight it and press H, or highlight it with a controller and press X. Matching Valheim-native favorite stars appear on both sides of the centered portal name. Repeat the same action to clear Home. By default, a valid Home row is selected and scrolled into view when the list opens; press Enter or controller A to travel, or explicitly select any other row first to travel there instead. BetterPortals owns Enter while the selector is open, so confirming a destination does not also open chat.

Notes

  • Destination names are read from the current server world. Empty names are omitted.
  • A headless dedicated-server start, existing-world load, save path, and server/client package identity have been validated on Valheim 1.0.12. Steam Deck/controller multiplayer validation is still in progress.
  • Removing the mod does not require converting portal data because BetterPortals does not store a replacement connection graph.
  • Home selection is stored in the character's normal custom data and scoped to the current world. It persists with Valheim's normal character autosave or logout; favoriting does not force an immediate full character/cloud save. Entering the Home portal itself does not erase the assignment.
  • Portal creation order is stored in a separate server-side BetterPortals.portal-order.<worldUID>.tsv ledger under the BepInEx config directory; the mod does not add fields to portal ZDOs or otherwise modify the world save. Existing portals receive a deterministic initial order because Valheim does not retain their historical creation timestamps. Portals created after ledger initialization retain their actual observed order. Back up or restore that small ledger together with its matching world when exact list ordering matters.
  • Portal names default to white. Biome subtitles default to visible beneath portal names at 30% of the name's default size. Subtitle visibility, size, color, Home preference, Home icon size, Home shortcut, control hints, and responsive row-knot spacing are available in the BetterPortals configuration alongside the existing visual controls.

Building from source

The repository does not include Valheim, Unity, or BepInEx binaries. Install Valheim and BepInExPack Valheim 5.4.2350 legally, then run:

dotnet build -c Release

The project defaults to Steam's standard Windows Valheim directory. A different installation can be supplied with the GameDir and BepInExDir MSBuild properties.

The assembly, namespace, plug-in GUID, and output DLL retain the original FraileyPortalSelector identifiers for compatibility with existing installations. The public plug-in and package name is BetterPortals.

License

BetterPortals is released under the MIT License. Copyright (c) 2026 AsherFrailey.

Credits

Created by the AsherFrailey Thunderstore team.

CHANGELOG

Changelog

0.4.7

  • Restricted creation-order observation to Valheim's recognized portal prefabs. Ordinary objects received from players no longer initialize, enter, or trigger writes to the portal ledger.
  • Preserved the tested 0.4.6 selector appearance, controls, detection range, and responsiveness unchanged.

0.4.6

  • Restored native menu sizing after prewarming by using Valheim's live GuiScaler, including resolution changes and the player's GUI Scale setting.
  • Disabled the copied Continue button's internal layout driver and excluded decorative children from layout, keeping portal titles centered under the heading.
  • Preserved the prewarmed menu, cached asset lookups and highlighted-row-only text measurement that removed the entry hitch.
  • Increased the default portal detection range by another 25% (1.25 to 1.5625), migrating the old default and increasing the server distance limit proportionally.
  • Removed the full character/map/cloud save from favoriting clicks. Home changes persist with normal character saves, and only changed Home markers rebuild their appearance.

0.4.5

  • Removed the portal-entry hitch introduced in 0.4.4 by prebuilding the static selector shell, caching native Home/cursor assets, and measuring text only for the highlighted row instead of every destination on every frame.
  • Corrected the remaining horizontal list drift by centering layout-controlled row anchors, and changed the default panel offset from 120 to 0 so the complete selector is vertically centered.
  • Mirrored the right native knot so the left and right hover arrows face opposite directions.
  • Blocked the actual Chat.InputText open path while BetterPortals owns input, preventing Enter from reopening chat regardless of component update order.

0.4.4

  • Centered the complete selector and every destination row by normalizing the cloned native button geometry and making all rows use the same full-width layout.
  • Rebuilt each row's hover ornaments as an isolated, normalized left/right pair, including the first row and repeated selector openings.
  • Made portal names white by default, reduced biome subtitles by 40%, and reduced the Home marker by 40%.
  • Replaced the single Home marker with matching native favorite stars on both sides of the portal name so the title remains centered.
  • Centered the mouse cursor when the selector opens and explicitly returns it to hidden gameplay capture on walk-away, Escape, selection, and every other close path.
  • Made the first unmodified Enter/controller-confirm action prefer the saved Home row while preserving explicit mouse or controller destination selection.
  • Removed the top-left Home-set and Home-cleared notifications.

0.4.3

  • Fixed the unequal native knot-image bounds that put one selection arrow far from the row while the other overlapped its name; the two knots now anchor by their inner edges around each row's rendered title.
  • Removed the orange biome group headings and moved each biome into a centered white subtitle beneath its portal name at half the default name size.
  • Replaced the Home bed marker with Valheim's native build-menu favorite-star icon and a text-star fallback.
  • Prevented Enter from opening Valheim chat while the portal selector owns input.
  • Confirmed Home remains local to the player's character and scoped to the current world rather than being shared with other players.

0.4.2

  • Fixed private-world and listen-server portal directory and travel requests by validating the local host player when the routed request originates from the server's own UID.
  • Made each row calculate knot spacing from only its own active Home marker, portal name, biome subtitle, and spacing rather than inheriting the widest sibling layout.
  • Kept knot placement stable across closing and reopening the selector by removing the dependency on transient shared layout measurements.

0.4.1

  • Anchored native row knots just outside the complete rendered destination label instead of inheriting fixed positions from Valheim's Continue-button prefab.
  • Made knot placement follow the eased hover scale and adapt to portal-name length, biome text, the Home marker, display resolution, and UI scale.
  • Added a configurable Row Knot Gap visual setting.

0.4.0

  • Added a saved per-character, per-world Home portal. Right-click, press keyboard H, or press controller X on a selected row to set or clear it; Valheim's native Bed icon marks the row.
  • Added Home-first focus and scrolling. Enter and controller A share the normal confirm path, so they travel Home immediately on open or travel another row after the player changes selection.
  • Added optional biome group headings and smaller biome subtitles, sorted by Meadows, Black Forest, Swamp, Mountains, Plains, Mistlands, Ashlands, Deep North, Ocean, then Other.
  • Added a server-side BetterPortals ledger that gives legacy portals a stable bootstrap order and preserves the creation order of portals added afterward without modifying the Valheim world save.
  • Added configuration for group headings, biome subtitles, Home-first focus, adaptive control hints, keyboard Home shortcut, biome typography, and Home icon size.
  • Added an explicit v2 protocol field and versioned RPC names. The server only authorizes destinations issued in that selector session, bounds directory records, revalidates current portal data, and rejects malformed or mixed-version traffic without changing client state.

0.3.3

  • Disabled selector text outlines by default while keeping outline color and width configurable.
  • Added the MIT License for the first public release.
  • Retained the bounded first-entry readiness retry introduced in 0.3.2.
  • Retained eased hover expansion and contraction, fast fades, stable cursor capture, walk-away closing, native-style rows and decorations, and the 1.25x portal trigger range.

0.3.2

  • Added comprehensive client-local visual configuration.
  • Added eased hover animation and an initialization retry for the first portal entry after joining a world.

0.3.1

  • Reworked the selector around Valheim's native pause-menu rows and decorations.
  • Improved cursor, input, fade, and trigger-exit behavior.

0.3.0

  • Fixed TextMesh Pro font/material initialization.
  • Restored Valheim's normal E-to-rename interaction with a 32-character limit.

0.1.0

  • Initial private test build.