Valheim

๐ŸŒ€ TortalPortal

TortalPortal โ€” a runic gateway standing between two carved stones

Valheim Mod Multiplayer Compatible Framework Interface Version

"The old way was to carve a name into the stone and hope another bore the same. A tally of runes, scratched and rescratched, and still you stepped through blind. Better to know the road before you walk it, Viking."

TortalPortal is a complete overhaul of Valheim's portal network. Vanilla's tag-pairing is gone โ€” walk up to any portal and a framed window opens listing every portal in the world, with the great map beside it marking your chosen destination. Each portal keeps a photograph of where it comes out โ€” under that destination's own sky and weather, not yours โ€” so you see the country you are stepping into before you commit to it. An experimental live view of the same place can be switched on if you want it moving.

๐Ÿ“œ Contents

๐Ÿ”— Check out my other mod Mists of Avalor? The open beta is live on Hexium.


โš”๏ธ Features

๐Ÿ—บ๏ธ Every Portal in the Realm, Listed

Step into range and the destination window opens: every portal in the world, sorted by name, each showing its lock state, its biome, how far it is from you, and who raised it. Search by name to cut a long list down. Selecting a destination pins it on the Large Minimap, which opens alongside the window, so you always see the route in context rather than guessing from a tag.

The list is built by the server, which is the only machine that holds the whole world, and handed to each player as they log in โ€” so it is complete from the first portal you touch. Install it on a world that has been running for months and the startup scan finds every gate already standing in it; you do not have to go and visit them first.

Every portal is marked on the great map while the window is open, labelled with its name โ€” the map centres clear of the window rather than behind it, so you are looking at the country around your destination instead of the back of a frame. The marks are never saved and vanish when the window closes; your own pins are your own business.

The markers are live: click one to select that portal, click the chosen one again to travel โ€” pick your destination off the country itself rather than out of a list. The one you've chosen is picked out from the rest โ€” 30% larger and drawn in red โ€” so there is never any doubt which gate you are about to step through, while every other marker stays exactly the size and colour of a normal pin.

Walk away and the window closes itself. Arrive somewhere and it stays shut, so you are never greeted by a menu the instant you land โ€” step off and walk back to bring it up again.

๐Ÿ“ธ See Exactly Where You're Going

Every portal quietly photographs its own destination when you raise it, on a wide-angle lens standing out in front of the gate, and stores the shot on the portal itself so every player on the server sees it. A background pass keeps the images current as the world changes around them, and portals that have never been photographed โ€” every gate on a world that predates the mod โ€” are shot first, so an established server fills its album in as people move about it.

The list shows each shot as a thumbnail โ€” and clicking it opens the photograph full screen at your resolution, the portal's name across the top, captioned with the biome and coordinates. Arrows on either side (or the keyboard's arrow keys) flip through every portal's picture like an album without leaving the frame. Read the terrain, spot the tar pit, notice the Fuling camp, then decide.

No portal waits for a visitor. Valheim only builds the world around players, so a gate nobody has stepped near could never be photographed โ€” until now. The camera quietly anchors one unphotographed portal at a time, streams in a small patch of world around it out where nobody is, waits for the terrain to genuinely finish, takes the shot, and lets it all unload seconds later. Works on hosted worlds and dedicated servers alike; an established server fills its whole album on its own, horizon and all.

๐Ÿ”ฎ Watch Through the Gate โ€” experimental, off by default

โš—๏ธ This one ships switched off. Turn it on with EnableLivePreviews. It works, and it is the best way to see where a gate goes โ€” the 1.3.1 fixes cleared its two real faults (a shimmer in the image, and feeds that refused to open after the first one), and what keeps it behind a switch now is honest cost: several seconds of warm-up on a large or distant destination, and it is the most expensive thing the mod does. The stored photograph is the finished feature, and everything below about photographs is fully supported.

Open a portal's picture full-size and the photograph gives way to a live view of the destination โ€” real weather, real time of day, swaying trees, rendered by your own game through the same anchor the camera uses. Right-drag looks around, the wheel zooms (30ยฐโ€“100ยฐ). The still stands in while the far world streams in (a pulsing amber GOING LIVE badge on the frame, then a red LIVE), and closing the album unloads everything within seconds โ€” the feed's lifecycle is a deadman switch, so there is no exit path that leaves a camera running.

Understand what it actually does before switching it on: this is not a video. Your game builds the destination and holds it standing while you watch โ€” terrain, trees, buildings and creatures all genuinely there, sized by AnchorZoneRing โ€” and on a dedicated server all of it crosses the wire to you first. It is by far the most expensive thing this mod does.

And the destination gets its own sky. Valheim keeps one sky, one sun, one set of weather and one field of grass, and welds the lot to wherever you are standing โ€” so a camera in the Ashlands would otherwise show real Ashlands ground under your weather, with no ash falling and no ashen sky. Every anchored view now borrows the destination's own fog, sun, ambient light, weather and grass for the fraction of a second it is drawing, and hands your own view straight back. Ash falls in the Ashlands. It rains in the swamp at night. Turn it off with AnchoredEnvironment if you'd rather have the frames.

๐Ÿ”ฑ Favorites

Click the small heart on any row - it turns gold: starred. Favorites sort to the top โ€” and once you have some, the window opens as a slender strip of just your favorites, one click to travel, with an arrow that expands to the full list when you want the whole realm. The gates you use fifty times a day cost one click; everything else is one more. Favorites are stored on your own machine, per world, and renaming a portal keeps its star.

And you can star the gate you're standing at. The destination list leaves out your current portal โ€” you can't travel to where you already are โ€” which used to make your home base the one gate you couldn't favourite without walking to another portal first. The configuration window now carries its own Favorite toggle beside the PIN lock, so it's one click at the gate itself. It applies on Save, so Cancel discards it like everything else in that window.

๐Ÿ”’ Lock Your Gates

Walk up to a portal you built and press E to open its configuration panel: set its name, choose its map icon, and toggle a PIN lock in one place. Anyone else selecting that destination must enter the PIN before the gate will take them.

Quick-launching a locked favorite (or clicking its map marker) gets the quick PIN window: the map closes, a small window opens with the keyboard already sitting in the field โ€” type the PIN, hit Enter, and you are away. Wrong PIN says so on screen and clears the field for another try; Esc puts you back exactly where you were.

๐ŸŽฏ Every Gate Its Own Mark

Portal markers don't have to be vanilla's icons. By default every marker is TortalPortal's own rune pin โ€” a glyph generated at runtime, sat on a dark disc inside a coloured ring so it reads as a deliberate mark rather than debris on a busy map โ€” coloured by PinColour. PortalPinIcon swaps that for any of vanilla's five familiar icons, or for your own artwork.

Eight hand-drawn icons ship in the box โ€” a boar with meat for eyes, a crowned neck, a party longship, a rainbow mead, a surprised greydwarf, a deathsquito on a sword, a troll sign and a wacky viking helmet โ€” and each portal picks its own from a grid in the configuration window. Your mine wears a pickaxe, your swamp outpost a skull, your capital its own crest. A glance at the map tells you what each gate is, not merely that it exists.

And the artwork travels. Drop your own PNGs into a folder on the server and every player downloads the ones they don't already have โ€” once, cached by content โ€” so a gate you mark with your own crest looks the same to everyone at the table with nothing for them to install and no modpack to rebuild. Add a file, run tortal_pinreload, and it is on everybody's map at their next login. The icons that ship with the mod are never sent, because everyone already has them.

The choice lives on the portal itself and travels in the destination index, so even portals nobody has ever visited are drawn with their proper marker. Full walkthrough: ๐Ÿ–ผ๏ธ Give Your Portals Their Own Map Icons.

๐Ÿบ Bring the Pack (and Ride It Through)

Your loyal companions travel with you. Any tamed creature following you steps through at your side (TameFollowRadius sets how wide a circle is gathered).

Riding? Stay in the saddle. Teleport while mounted and the beast comes with you โ€” you are lifted out of the saddle for the trip, it is sent through beside the exit, and you are seated again the moment you land. Built against the game's mount interface rather than any one saddle, so custom saddle items and modded mounts (OdinMounts and friends) ride through exactly like a Lox. Ships and carts stay where you left them; only a tamed creature qualifies.

๐Ÿ’€ The Corpse Run

Gear recovery without the bare-handed walk back into whatever killed you. Die, and the server raises a private, temporary portal near where you will wake up โ€” beside your bed, or at the start temple if you have none โ€” leading straight to your tombstone. Walk up to it and you are sent through; nobody else can use it, and nobody else gets a window on it. It is a one-way trip by design: the grave-side gate is an exit, there is no automatic trip home, and both gates come down together the moment you empty the grave (or after CorpseRunGateTtlMinutes, which by default has no limit โ€” the gate stands until the grave is empty). Hover either gate and it tells you whose it is and what it does.

Both ends are placed properly. The server scans outward from the tombstone (and from the bed) in one-metre rings for a spot with CorpseRunClearanceMeters of room โ€” measured edge to edge from every tree, boulder, building piece, portal and generated location, using each object's real footprint rather than its pivot, so a rock that spans eight metres counts as eight metres of rock. That figure is a preference, not a requirement: ten metres of room from everything does not exist in a forest, so it is tried in descending steps โ€” the full figure, then 70%, 50% and 35% of it, down to the CorpseRunMinRoomMeters hard floor โ€” and the gate takes the closest spot that honours the largest step the ground can actually offer. Only if nothing inside the radius offers even the floor does the search widen and then settle for the most open dry spot it found, and the log says by how much it fell short and against what. The ground under the gate is the game's own terrain recipe re-run on the server, terraforming included, so a gate beside a bed on a levelled base stands on the levelled floor, and the frame's four corners are checked so it neither floats off a slope nor wedges against a cliff. Dungeon deaths open the grave gate at the dungeon's entrance; ocean deaths float it on the water. A gate raised by a previous server run and forgotten is reaped at startup, so restarts never leave strays โ€” and a tombstone still standing after a restart, from a death within the last CorpseRunMaxGraveAgeMinutes (default half an hour), gets a fresh gate. If either end of a standing gate goes missing, the server raises it again on the spot it was placed.

Corpse gates are never in the destination list, never on the map, never in the export and never counted against anyone's cap. They cannot be hammered down for their materials โ€” dying is not a way to farm surtling cores โ€” and they are always self-healing (below), whatever the dial says. They also refuse any removal the mod did not ask for: vanilla lets any client tell the server to forget any object in the world without checking who sent it, and the gates this mod raises are exempted from that. Ordinary player portals are untouched โ€” a portal is still its builder's to take down.

๐Ÿ•ฏ๏ธ Concealed Gates

Seeded by admins, found by players. Portals the world was seeded with that nobody has been told about. An admin scatters them once; from then on they stand out in the wilderness as real gates, and they are deliberately kept out of the destination list and off the map โ€” not hidden from the window, but withheld from the network entirely, so no client is ever sent their position, their name, or the fact that they exist. You find one the only way there is: walk into it, and press E on the stones. The server checks you are genuinely standing there, writes your name into the gate, and hands it to you โ€” and from that moment it is an ordinary destination in your list, marked [FOUND], with its own map marker and its own photograph.

What you find is yours. By default every player discovers every gate for themselves, so one player's list of found gates is theirs and nobody else's; ConcealedDiscoveryShared makes the first finder reveal a gate for the whole server instead, which suits a group that travels together. Either way the record lives on the gate itself in the world save โ€” it survives a reinstall, a server restart and a new machine, and it is not something a client can award itself. Walking past inside render distance is not finding something: the gate glows, it says touch the runes when you look at it, and it opens no window until you do.

Seeded where you can actually reach them. They are placed by the same scanner the corpse run uses โ€” real edge-to-edge clearance from every tree, rock, building piece and generated location, on dry level ground, at least 128 m apart โ€” with ground height from the server's own terrain recipe including terraforming, so a gate stands on the floor a player walks on rather than metres into a hillside. They cannot be hammered down for their materials, they shrug off damage, and they refuse any removal the mod did not ask for. See ๐ŸŒฑ Seed a World with Portals.

๐Ÿ›ก๏ธ Self-Healing Portals

A troll does not care that the gate it is swinging at is the only way home. With SelfHealingPortals on (the default), portals shrug off damage: monsters stop choosing them as targets, any hit that does land is refused at the one place every kind of damage goes through โ€” blows, fire, weather, ash, collapse โ€” and a portal found below full health, whether hurt before this build or by something that slipped past, is healed the next time it is looked at. Removal with the hammer is untouched: a portal is still its builder's to take down. Turn it off and portals go back to being as mortal as any other piece, live, with no reload.

๐Ÿฉบ Portal Health

A standing check for what can actually go wrong with a portal under this mod. On its own timer the server walks every portal in the world looking for trouble: a gate buried in the terrain (raise-ground work, a scatter against a height that was not there yet, a piece that sank), a destination photograph too large to send โ€” a picture from before the 1.4.3 wire budget can disconnect every client that walks near the gate, in a loop โ€” a map icon the server does not offer, a stray corpse gate, a player over the portal cap, a portal at dungeon height, leftover tortal_scatter litter, and a few informational notes (gates with no recorded builder, duplicate names, a PIN-locked gate nobody owns). Findings go to the server log and to tortal_health.

Repair is bounded, dry-run by default, and undoable. tortal_repair only ever reports what it would do; tortal_repair --apply writes โ€” lifting a buried gate up to the ground (never down onto it), stripping an oversized photograph (saved beside the snapshot first, re-photographed on a later pass), clearing an unknown icon, removing a stray corpse gate โ€” and takes a snapshot of every portal's name, PIN, icon, builder and position before it touches anything, so tortal_restore can always put the whole batch back. Anything that belongs to a player is reported and left alone. Snapshots are also taken automatically on every world save. See ๐Ÿฉบ Check and Repair the Portal Network.

๐Ÿšง Decide What Travels

Admins get a dual filtering system beyond vanilla's flat metal ban. Populate the whitelist to create an exclusive "these may pass" list, and use the blacklist to further restrict specific items โ€” or switch the whole thing to BypassAll and let everything through. All of it is server-synced, so the rules are the server's, not each client's.

๐Ÿ–ผ๏ธ A Frame Worth Looking At

Both portal windows are set in an ornate gilt frame: polished double rails, acanthus scrollwork mitring every corner, and a palmette crest struck into the top and bottom edges. It is drawn on a dark leather panel with gold-edged insets, and the destination list reads as a proper set of cards rather than a wall of text.

None of it is a shipped image. Every rail, flourish and crest is generated in code at runtime, lit by a single consistent light โ€” the interface carries no textures, no shaders and no asset bundles, and cannot ever show you a missing-texture pink square. (The only files the mod installs are the eight map icons, and those are plain PNGs you can open, edit or delete.)

If the text is too small or too large for your display, UITextScale moves it between 0.6ร— and 3ร—, UIFontSizeDelta adds up to +24 flat points on top, and the rows, fields, buttons and windows all grow with it so nothing clips. Changes apply immediately. The metal itself is yours too: UIGoldColour re-skins the entire frame โ€” silver, bronze, verdigris โ€” from one dial, live.

โœจ The Runic Gateway

Vanilla's portal effects are gone entirely โ€” every last flare โ€” and in their place stands a runic gateway: small Elder Futhark glyphs drawn in off the edges of the opening, swirling around the gate's own axis and spiralling slowly inward, each one taking its own shade from a band either side of your chosen colour so the gateway shimmers through a range rather than glowing one flat tone. Around them stand two counter-rotating rune circles, a magic circle scribed across the threshold, slow embers rising through the site, and a swirling rune trail โ€” an unseen point orbiting the pillars, weaving up and down, drawing a continuous glowing ribbon strung with runes behind it.

And it breathes with your approach. The gateway sits fully dormant โ€” nothing drawn, nothing simulated โ€” beyond VFXWakeDistance, and from there it does not switch on: it builds, strengthening the closer you come and bleeding gently away behind you as you leave. Walking off does not snap it shut; emission simply falls away and the runes already in the air drift out on their own, the way a flier's trail dissolves behind them. Any player drives it, so a friend walking up lights the gate for you too.

Two dials, and they move independently: VFXIntensity is how much gateway there is โ€” density, rune spacing, ring thickness โ€” while VFXBrightness is purely how hard it burns. Dim it to a smoulder without thinning it, or thicken it without the glare. VFXColour paints the lot, and every one of these applies live to portals already standing.

The gateway measures each portal's own arch and centres itself in it, so wood, stone and black marble portals all read correctly โ€” and so will any portal a future update or another mod adds.

๐Ÿ‘‘ Admin Supremacy

A built-in bypass lets admins ignore PIN locks, item filters and portal placement limits entirely.


๐Ÿ— Instructions

A start-to-finish guide to actually using the thing:

  1. Place a portal โ€” the game snaps a hidden high-resolution photo of its destination for the preview system.
  2. Configure it โ€” walk up and press E. Set its name, pick the icon it shows on the map, and toggle a PIN lock (see Give Your Portals Their Own Map Icons).
  3. Travel โ€” walk into the portal's range. Pick a destination from the list โ€” or click its marker on the map, and click it again to go.
  4. Look before you leap โ€” click a destination's thumbnail (or hit Teleport with the picture open) to see it full screen. Arrow keys or the on-screen arrows flip through every portal's picture like an album; give it a moment on a photo and it goes LIVE โ€” a real-time window onto the destination you can look around with a right-drag and zoom with the wheel.
  5. Locked gates โ€” launching a PIN-locked portal from a favorite or a map marker opens the quick PIN window with the keyboard already in the field: type it, hit Enter, go. A wrong PIN clears itself for another try.
  6. Favorites โ€” the heart on a row stars it, gold means starred. With favorites set, the window opens as a one-click launcher strip; ยป expands to the full list.
  7. Riding โ€” stay in the saddle and hit Teleport; you and the mount arrive together and you are re-seated automatically.
  8. On arrival โ€” the menu stays shut so you can get on with it. Step away and walk back to bring it up again.
  9. Typing โ€” the destination window focuses its filter box as it opens, so you can just start typing a name. While any of the mod's fields has the keyboard your character stands still and hotkeys hold their peace. Escape hands it back without closing the window.

๐Ÿ› ๏ธ How-To

๐Ÿ–ผ๏ธ Give Your Portals Their Own Map Icons

Eight icons are installed already. You can add any number of your own and give each portal its own.

1. Mark a portal

  1. Open its configuration window. Two ways in, and the button is the reliable one: with the destination window open, click Configure in the top row, just left of Close. (Pressing E at the gate does the same thing, but only when no text field has the keyboard โ€” Valheim gates its Use key behind Player.TakeInput(), so a focused search box quietly swallows the keypress.)
  2. Use the Map icon grid โ€” โ€” means no icon of its own, and the portal falls back to whatever your PortalPinIcon setting says. Click any other cell to choose it. If there are more icons than fit in the two rows, the last cell reads +N โ–ธ and opens a scrolling panel with all of them.
  3. Hit Save. The choice is stored on the portal, so every player sees that marker โ€” including players who have never been anywhere near the gate.

2. Add your own artwork

  1. Make or find your PNGs โ€” transparency is respected, so a clean glyph or crest on a transparent background reads best.
  2. Drop them into the TortalPortalPins folder beside TortalPortal.dll, alongside the eight that came with the mod.
  3. The filename is the icon's name, so Mine.png shows up as Mine. Underscores read as spaces in the picker, so deep_mine.png shows as deep mine โ€” but the filename is what is actually stored, so renaming a file later un-marks every portal using it. Name them once and leave them.
  4. Restart the game โ€” your own folder is read at startup. (Icons arriving from a server need no restart.)

๐Ÿ’ก Your portal's name and its icon are completely separate. A gate called Bonemass Camp can wear troll_sign; two gates both called Home can wear different icons; a gate you happen to name troll_sign gets no icon from it. Rename a portal and it keeps its marker; change its marker and it keeps its name.

๐Ÿ’ก About image size. Vanilla draws every map marker into a fixed square box โ€” 48 px on the great map, 32 px on the minimap โ€” so an image of any resolution is scaled into that box and can never spill across your map. Size doesn't hurt what you see; it hurts what you pay. A 4096ร—4096 PNG holds roughly 64 MB of video memory to draw something 48 pixels across, and the mod will say so in the log. The eight shipped icons are 48ร—48, which is exactly the box โ€” that is the sweet spot. Anything a server shares is capped at 256ร—256 and 96 KB. Non-square images are letterboxed to fit rather than stretched, but square fills the marker best.

๐Ÿ’ก Want one of these as your own default marker? Set PortalPinIcon = Custom and put the icon's name in DefaultPinIcon โ€” troll_sign, say. That is the marker every portal wears until it picks one of its own. It works for icons the server sent you as well as your own files, which is why it is a name rather than a filename: there is no file of yours to point at.

๐Ÿ’ก Upgrading from a single icon? The old single-file TortalPortalPin.png beside the plugin still works exactly as it always has โ€” leave DefaultPinIcon empty and PortalPinIcon = Custom keeps using it. Nothing needs moving.

๐Ÿ’ก The gate you're standing at is marked too, labelled (here). It isn't in the destination list โ€” you can't travel to where you already are โ€” but it is on the map, so an icon you just set on your home base shows up straight away.

๐Ÿ“ก Share Icons From Your Server

Your players do not need your PNGs. The server can hand them out.

  1. Drop your PNGs into the TortalPortalPins folder beside the server's TortalPortal.dll โ€” the same folder name clients use, because a dedicated server installs the same package.
  2. Run tortal_pinreload from any admin's console (or restart the server). It rescans the folder and tells every connected client what it now has.
  3. That's it. Each client quietly downloads only the icons it is missing, one at a time, and caches them by content โ€” so the download happens once per machine, ever, even across different servers and different worlds.

What that buys you: mark a gate with your guild's crest and everyone sees the crest, with nothing to install, no modpack rebuild and no version bump. A player who joins with a bare install still gets the full set.

  • Icons everyone already has are never sent. The eight that ship with the mod, and anything a player already put in their own folder, are matched by content and skipped.
  • Same name, different picture? The server's copy wins, so everyone at the table is looking at the same thing. Your own file is left untouched on disk and the log says once which one it used.
  • Limits. 256ร—256, 96 KB and 64 icons per world. Oversized files are named in the server log and simply not offered.
  • Don't want any of it? ShareIconsFromServer = false and every player sees only what is on their own disk.

๐ŸŒฑ Seed a World with Portals

Two console commands ship with the mod โ€” the same ones every 1.2.0 feature was shaken down with. Both are cheat commands: enable devcommands in the console first, which on a server means being on its adminlist.

  • tortal_scatter [count] [radius] โ€” raises portals at random spots across the world. Default 25 within 2 000 m; up to 500 at a time, radius up to 10 000 m. Spots are spread evenly across the disc rather than crowding the middle, each gate is named for its biome and registered in the index like any hand-built portal, and every 5th one is PIN-locked with 1234 so locks have test subjects too.
  • tortal_scatterclear โ€” removes every portal tortal_scatter raised and nothing else: scattered gates carry a marker, hand-built portals are never touched. Run from a client it sweeps what is loaded around you and asks the server to sweep the whole world (admin-gated), reporting the total back to your console.

Together with remote snapshots this is a world-seeding tool: scatter a network across the map on day one โ€” tortal_scatter 100 10000 covers the whole world โ€” and the camera walks it on its own, portal by portal, until the server opens with a fully photographed network no player has ever visited. Keep the gates, or tortal_scatterclear when you have placed your own.

Gates that have to be found first. Three more commands seed the other kind โ€” real portals that are withheld from the destination list and the map until a player walks up and presses E on one. None of them are cheat commands: typed at the server's own console they run there, typed in a client's they are routed to the server, admin-gated against its own adminlist, and the answer prints back in your console.

  • tortal_scatterconcealed [count] [radius] โ€” seeds concealed gates. Default 25 within 4 000 m; up to 200 at a time, radius up to 10 000 m. Each is placed by the corpse run's clearance scanner on dry, level ground at least 128 m from every portal already standing, named for its biome with a name checked unique against the whole world, and made immune and un-hammerable. The summary comes back when the last one is placed.
  • tortal_concealedclear โ€” removes every concealed gate, found or not. Ordinary portals, tortal_scatter litter and corpse gates are all untouched, and anyone holding one as a destination has it taken off their list as it goes.
  • tortal_concealed โ€” how many are standing, how many have been found, and by whom.

EnableConcealedPortals is on by default and does nothing at all until you seed a world; switching it off stops discovery and leaves standing gates where they are, so tortal_concealedclear is what actually removes them. ConcealedDiscoveryShared decides whether the first finder reveals a gate for everybody or every player finds their own.

๐Ÿฉบ Check and Repair the Portal Network

Five console commands, none of them cheats. Typed at the server's own console they run there; typed in a client's console they are sent to the server โ€” admin-gated against the server's own adminlist โ€” and the answer prints back in your console. Everything lands in the server log as well.

  • tortal_health โ€” scans every portal in the world right now and lists what it found, worst first.
  • tortal_repair โ€” a dry run: lists exactly what a repair would do and touches nothing.
  • tortal_repair --apply โ€” does it, at most RepairMaxActionsPerRun fixes per pass, after saving a snapshot named pre-repair-<time>. The reply names the snapshot that undoes it.
  • tortal_snapshot [name] โ€” saves every portal's name, PIN, icon, builder and position to BepInEx/config/TortalPortal/snapshots/. Unnamed snapshots are stamped with the time.
  • tortal_snapshots โ€” lists them, newest first.
  • tortal_restore <name> [--recreate] โ€” puts every portal back the way the snapshot has it, matched by position rather than by ID (IDs change every world load). A portal that has vanished since is reported and left; add --recreate to raise it again. A snapshot from a different world is refused.

AutoRepair runs the repair pass on the scan's own timer, and RepairDryRunDefault decides whether that automatic pass writes or only reports โ€” on by default, so switching AutoRepair on changes nothing until you also decide it may write.


โš™๏ธ Configuration

Settings live in wubarrk.TortalPortal.cfg.

Your settings survive updates. The file carries a layout version, and when the mod changes shape it is backed up beside itself and every value is carried over โ€” a whitelist you spent an evening on does not evaporate because a setting moved sections. If something genuinely no longer exists, it is named in the log with its value and the path of the backup rather than vanishing quietly.

Server-Synced (Admin Controlled)

Setting What it does
LockConfiguration Default on. Makes the server's copy of every setting in this table the one that counts: clients are sent it on login and cannot push their own back. Off โ€” which is how every build before 1.4.3 behaved, having no such switch โ€” any player's config file silently becomes everyone's, and one player still carrying MaxPortalsPerPlayer = 10 sets the cap at 10 for the whole server the moment they change a setting in-game. Admins are exempt either way, so an admin can still turn a dial live and have it apply to the table.
FilterMode Vanilla (default), WhitelistBlacklist, or BypassAll.
WhitelistItems Comma-separated, empty by default. Any item here bypasses vanilla portal restrictions (e.g. adding Bronze lets you teleport with Bronze, but Iron remains blocked).
BlacklistItems Comma-separated, empty by default. Any item here is explicitly blocked, even if it normally would be allowed.
MaxPortalsPerPlayer Limit how many portals each player can construct. Unlimited by default โ€” 0 or any negative number means no cap at all. Set a positive number to enforce one.
AdminBypass Default on. Lets admins ignore portal limits, PIN locks and item filters.
AllowTames Default on. Whether tamed creatures follow you through.
TameFollowRadius 2โ€“30 metres, default 10. How far around you following tames are gathered when you travel.
AllowMountedTeleport Default on. Teleporting while riding brings the mount and re-seats you on arrival โ€” vanilla saddles, custom saddle items and modded mounts alike. Off means dismount and walk through.
MenuOpenDistance 0.1โ€“5 metres, default 1.25. How close you must be before the destination window and map open by themselves. The window is something you go and get rather than something that meets you on the path โ€” but 0.8 m meant standing practically inside the gate, which read as the mod being unresponsive. Measured horizontally, so a raised platform adds no phantom distance. The portal's visuals keep their own range regardless.
MenuVerticalDistance 0.25โ€“10 metres, default 2. How far above or below the gate's footing you may stand and still have the window open by itself. MenuOpenDistance is measured flat across the ground, which on its own makes the test an infinite column โ€” somebody walking the floor above a portal, or flying over it, was nought metres from the gate and got the window in their face. 2 m clears stairs, platforms and the slope a gate is planted on, and stops the storey above. MenuCloseMargin applies here too once the window is open.
MenuRequireVerticalLineOfSight Default on. Within MenuVerticalDistance, a solid floor, roof or ceiling between you and the gate below you keeps the window shut. This is what separates standing on the storey above a portal from standing on a rock beside it โ€” both are the same number of metres up. Only ever checked when you are above a gate, and the column looked along is the gate's own, so nothing you build beside a portal can block it.
EnableCustomVFX Default on. Replaces vanilla portal particles with the runic gateway.
EnablePortalCameraShot Default on. Whether placing a portal captures a preview snapshot.
SnapshotRefreshIntervalMinutes Default 5. How often already-photographed portals are re-shot, so a rebuilt or burnt-out destination stops showing the old view. 0 disables refreshes; portals with no picture are still filled in regardless.
RepairSunkenTraders Default on. Watches Haldor, Hildir and the Bog Witch for half a minute after they appear and puts them back on the ground if they are standing under it โ€” including traders already buried on a live world, with no restart or world edit. Vanilla snaps a trader twice, the second being her only correction, and a far portal shot could spend that correction before her zone's terrain had finished arriving. Only ever lifts her up to the terrain, never down onto it, so a trader on a platform or a player-built floor is left where she is.
EnableRemoteSnapshots Default on. The camera walks the world on its own: portals nobody is near are briefly anchored, photographed and unloaded again โ€” including over a dedicated server. Off means only portals loaded around players are photographed, as before 1.2.0.
EnableLivePreviews EXPERIMENTAL โ€” default OFF. Opening a photograph full-size streams a live view of the destination. Known rough edge: several seconds of warm-up on a large or distant destination. Also the most expensive thing the mod does โ€” it builds and holds the far world while you watch. Off means the album shows stills only.
AnchoredSpawning Default ON from 1.3.1 โ€” and read this so you know what it does. Lets wildlife appear at a destination while somebody is watching it live, promptly โ€” no ten-second spawner warm-up. Valheim only makes creatures where a player stands, which is why a far gate can be fully loaded, correctly lit and still look like nowhere anybody lives. The creatures are real โ€” written into the world, simulated by whoever is watching, and still there after the view closes โ€” so browsing a lot of gates can seed a lot of neighbourhoods. This is the one setting here that changes the world rather than a picture of it. Never done by the unattended background photographer. Turn it off to make looking at a gate change nothing.
AnchoredEnvironment Default on. Gives a far-off portal its own sky. Valheim keeps one sky, one sun, one set of weather and one field of grass, all welded to wherever you are standing โ€” without this a camera in the Ashlands shows real Ashlands ground under your weather. On, the anchored camera borrows the destination's own fog, sun, ambient light, weather particles and grass for the fraction of a second it draws, and your own view is handed straight back. Off returns to photographs and feeds wearing your local weather.
CameraResolution Dropdown: Res480p / Res720p / Res900p / Res1080p (default). What the portal camera renders at โ€” stored snapshots and live feed both. Stored pictures travel to every player, so higher resolutions cost real bandwidth; existing photographs keep the size they were taken at. A photograph lives on the portal itself and a portal crosses the wire whole, so there is a hard ceiling on how large one can be: from 1.4.3 a shot that would not fit is quietly re-encoded a little softer, and dropped entirely rather than stored if it still will not โ€” the gate keeps the picture it had and a later pass tries again. At 1080p across a 92-portal world the photographs measured 48โ€“425 KB, so this is a backstop rather than something you should expect to see.
AnchorZoneRing 1โ€“2, default 2. How much world a far shot loads: 1 = 3ร—3 zones (192 m), 2 = 5ร—5 (320 m). A 3ร—3 block puts the horizon barely past the gate, and a destination photograph exists to show you the country you are stepping into. Hard-capped at 2 โ€” a wider ring is a guaranteed hitch on any hardware.
AnchorSettleBudgetSeconds 10โ€“120, default 40. How long a far shot may wait for the destination to settle before the attempt is skipped and retried a later lap. Also where the live preview stops waiting for perfection and goes live with what is standing.
AnchorSettleRadius 30โ€“300 m, default 100. How far around the portal terrain must be finished rebuilding before a scene counts as settled.
PortalIndexRefreshSeconds 5โ€“300, default 10. How often the server rescans the world and republishes the destination list โ€” how quickly a new portal, rename or demolition reaches everyone. Only sent when something actually changed.
ShareIconsFromServer Default on. Offers the server's own map icons to every player, who each download only what they are missing and cache it by content. Icons a client already has โ€” including the eight that ship with the mod โ€” are never sent. Off means every player sees only the icons on their own disk. See ๐Ÿ“ก Share Icons From Your Server.
SelfHealingPortals Default on. Portals shrug off damage: monsters stop targeting them, any hit that lands is refused, and a portal found below full health is healed. Hammer removal is unaffected. Corpse gates are always protected regardless. See ๐Ÿ›ก๏ธ Self-Healing Portals.
EnableCorpseRun Default on. Raises a private one-way portal from your respawn point to your tombstone when you die. See ๐Ÿ’€ The Corpse Run.
CorpseRunGateTtlMinutes 0โ€“1440, default 0. How long a corpse gate stands before closing on its own if the grave has not been emptied. 0 means no limit โ€” it stands until the grave is empty. Replaces CorpseRunTtlMinutes, whose half-hour default shut gates while their owner was still walking back; any value you had set on the old key is carried across to CorpseRunMaxGraveAgeMinutes automatically.
CorpseRunMaxGraveAgeMinutes 0โ€“1440, default 30. Used only for a grave nobody reported โ€” one still standing after a restart, or a death whose report never arrived. How old such a grave may be and still earn a gate. 0 means no limit. Kept separate from the gate's own lifetime so an abandoned grave does not raise a gate at its owner's bed on every login.
CorpseRunClearanceMeters 1โ€“30, default 10. Room every corpse gate would prefer to have, edge to edge, from every tree, rock, building piece, portal and generated location. Tiny props (mushrooms, flowers, berry bushes) only need 2 m. Scanned in descending steps down to CorpseRunMinRoomMeters, taking the closest spot that honours the largest step available โ€” so this is what the gate aims for, not what it demands. If nothing inside the (widened) search radius honours even the floor, the most open dry spot is used and the server log says so, with the distance, the nearest obstacle and the shortfall.
CorpseRunMinRoomMeters 0.5โ€“10, default 2. The hard floor under CorpseRunClearanceMeters. The least edge-to-edge room a gate's frame will ever be given. Raise it to refuse cramped spots outright, at the cost of a longer walk.
CorpseRunSearchRadiusMeters 5โ€“150, default 40. How far out from the tombstone and the bed to look for a spot honouring the clearance. Scanned in rings outward, so the gate lands as close as the clearance allows.
CorpseRunGraveOffsetMeters 1โ€“20, default 2. Minimum distance of the grave-side gate from the tombstone.
CorpseRunBedOffsetMeters 1โ€“20, default 3. Minimum distance of the bed-side gate from the bed (or the temple).
EnableConcealedPortals Default on โ€” and dormant until an admin seeds a world with tortal_scatterconcealed. Concealed gates are real portals kept out of the published portal index, so no client is sent their position or name and they appear in nobody's destination list or map until a player walks up and presses E on one. Switching this off leaves any gates already standing exactly where they are and simply stops them being discovered or handed out โ€” it does not make them visible, and tortal_concealedclear is how you remove them. See ๐Ÿ•ฏ๏ธ Concealed Gates.
ConcealedDiscoveryShared Default off. Off, each player has to find every concealed gate for themselves. On, the first player to touch a gate reveals it for everybody on the server โ€” which suits a group that travels together. Turning it on does not retroactively publish gates individuals had already found on their own; it applies from the next discovery onwards.

Local to Your Game

(Not synced โ€” set these however you like.)

Setting What it does
HealthScanIntervalSeconds Server only. 10โ€“3600, default 120. How often the background health scan walks every portal in the world. Findings go to the server log and to tortal_health.
AutoRepair Server only. Default off. Runs the repair pass on the scan's own timer; whether it writes anything is RepairDryRunDefault's call.
RepairDryRunDefault Server only. Default on. The automatic pass reports instead of writing. The console command is unaffected โ€” tortal_repair is always a dry run and only tortal_repair --apply writes.
RepairMaxActionsPerRun Server only. 1โ€“500, default 20. The most fixes one repair pass will apply; the rest wait for the next.
SnapshotRetain Server only. 1โ€“1000, default 30. How many automatic snapshots (pre-save, pre-repair) to keep before the oldest are deleted. Snapshots you name yourself are never pruned.
SnapshotOnWorldSave Server only. Default on. Takes a snapshot each time the world saves, so there is always a recent one to restore from.
UITextScale 0.6โ€“3.0, default 1.05. Scales all portal UI text and the layout around it. Applies immediately, no restart.
UIFontSizeDelta -6โ€“+24 points added flat to every text size, after the scale. Default +6. Fatty shares this theme and this setting โ€” match the numbers and the two mods' windows read identically.
MenuCloseMargin 0โ€“5 metres, default 1. How much further out than MenuOpenDistance you must retreat before an open window closes itself โ€” the hysteresis that stops it strobing on the boundary.
ShowDestinationPreviews Default on. Off drops the photograph panel and narrows the window. Snapshots are still captured and shared either way.
OpenFavoritesView Default on. When you have favorites, the window opens as the slim favorites strip; the ยป arrow expands it regardless.
FocusSearchOnOpen Default off. Puts the text cursor straight in the search box as the window opens. Off because the window opens while you are still walking, and a focused field swallows WASD as typing.
VFXOrbHeightOffset Default 0. Metres to nudge the rune orb up or down inside the gate. The orb auto-centres on each portal's arch, so this is only for fine-tuning.
VFXWakeDistance 2โ€“50 metres, default 25. How close a player must be before the dormant gateway wakes โ€” far enough that a gate is already alive as it comes into view and builds as you walk in.
VFXIntensity 0.1โ€“3, default 0.64. How much gateway there is: particle density, ring thickness, rune spacing in the swirl.
VFXBrightness 0.1โ€“3, default 0.35. How brightly it burns, with no effect on how much of it there is. The materials are additive, so this climbs fast. Applies live.
VFXSwirlDensity 0.25โ€“3, default 3. How thickly the runes trailing off the gateway are laid along their ribbon โ€” higher packs them tighter along the same path. Independent of VFXIntensity. Applies live.
VFXTintPortalFrame Default off. Tints the portal piece's own glowing panel and gate light to VFXColour, so the gate and the gateway read as one object instead of an orange portal wearing a coloured light show. Only emissive surfaces are touched; timber, stone and metal keep their own materials. Off because vanilla's warm light against cool runes is a look in its own right. Applies live.
VFXColour The gateway's colour โ€” veil, rings, sigil, motes and swirl all draw from it. Colour picker in ConfigurationManager. Default warm gold #FFD24C.
PinColour The Rune map pin's colour. Vanilla icons and custom PNGs bring their own. Default hard green #12FF21.
UIGoldColour The window frames' metal. Shadow and highlight derive from it โ€” silver, bronze or verdigris is one change, applied live. Default antique gold #CC9E42.
ShowPortalPinsOnMap Default on. Marks every listed portal on the large map while the destination window is open. Never saved, removed when the window closes.
PortalPinIcon Default Rune โ€” TortalPortal's own glyph-in-a-ring. Also vanilla's five icons, or Custom to use whichever icon DefaultPinIcon names. This is the fallback for portals that haven't picked an icon of their own, and for icons you can't draw yet. See ๐Ÿ–ผ๏ธ Give Your Portals Their Own Map Icons.
DefaultPinIcon Empty by default. Which icon PortalPinIcon = Custom should draw. In ConfigurationManager this is a dropdown of every PNG in your TortalPortalPins folder โ€” pick one, no typing. You can also type the name of an icon the server sent you, since those have no file here for the list to find. Empty falls back to a TortalPortalPin.png beside the plugin if you have one, then to the Rune pin. Anything unresolvable is named in the log along with every icon you do have.
EnableDebugLogging Default off. Verbose logging for UI, icon and teleport events.

๐Ÿ“ฆ Dependencies

โš ๏ธ Requires: BepInEx



License: MIT โ€” use, modify, and redistribute freely, including commercially; just keep the copyright notice. See LICENSE.md for the full text.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.