Valheim
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
last month
Downloads
675
Size
193KB
ADDatHost Valheim hosting
30% off

Idavoll

Dungeon respawn for Valheim.

Crypts, burial chambers, caves, Fuling villages and dvergr towers rebuild on a timer. Chests refill, monsters come back, ore is whole, doors are shut, smashed props are standing again. The layout does not change, so a crypt you have learned is still the crypt you learned.

Named for Idavoll, the field where the surviving gods gather after Ragnarok and build the world again from nothing.

This is new, and it destroys things on purpose.

Idavoll deletes every object a dungeon placed and lets the game build it again. That is the only way to get a mined-out ore vein or a broken door back, and it means the protection list - the code that decides what is not deleted - is the whole mod. It has been written carefully and it refuses loudly when it is unsure, but it has not yet been run for months on a busy server.

Take a world backup before the first reset, and use idavoll_dryrun before you trust it. A dry run changes nothing and prints exactly what would be destroyed and what would be kept, with a reason for every survivor.

What It Does

Vanilla Valheim never resets a dungeon. DungeonGenerator.Generate runs exactly once per dungeon, during first world generation, and after that a crypt stays looted forever. On a server that runs for months, the map fills up with buildings that are just empty rooms.

Idavoll gives every location a timer. When one comes due and nobody is near it, everything the location placed is destroyed and the game's own generation path is re-entered - so the rebuild is Valheim building the dungeon, not Idavoll imitating it.

What It Will Not Destroy

Everything below survives a reset, and each rule is worked out from live game data rather than a list of names, so modded equivalents are covered too:

  • Anything a player built. Walls, chests, workbenches, signs, portals, beds.
  • Portals, separately and by prefab, because losing one strands whoever is on the far side.
  • Terrain modifications. Every hole you dug and every path you levelled.
  • Beds, tombstones and player characters.
  • Tamed creatures, including ones partway through being tamed.
  • Ships and carts.
  • Dropped items, by default - so gear on the floor where somebody died is safe.
  • Vegetation. Trees, rocks and bushes are never touched.
  • The zone's own spawner, so a reset zone does not go quiet forever.
  • Unique locations such as boss altars, which are skipped entirely.
  • Anything you name in protectedPrefabs.

One gap worth knowing: objects created with the spawn console command carry no creator, so they look exactly like dungeon furniture. If you have admin-spawned something precious inside a dungeon, name its prefab in protectedPrefabs.

There is also a ceiling. If a reset would destroy more than maxObjectsPerReset objects it refuses and tells you, rather than proceeding. That number exists so a bug in the protection list shows up as a refusal instead of a loss.

Resetting Is Opt In

Out of the box Idavoll resets burial chambers, sunken crypts, mountain caves, troll caves and Fuling villages, and nothing else.

That narrowness is deliberate. Valheim's location registry holds every location in the world - on a full map that is around fourteen thousand of them, and the overwhelming majority are scenery: standing stones, dolmens, ruins, wood houses, flint deposits, shrines, spawn points. A mod that reset anything it had not been told about would slowly rebuild the entire map.

So the catch-all rule * ships disabled. A location with no matching rule never resets, and deleting a rule always makes things safer rather than riskier.

To see what is actually in your world and write rules for it:

idavoll_locations

That lists every kind of location with a count, whether it has an interior, and which rule (if any) covers it. It is the only way to get the prefab names - they live in the game's asset bundles, not anywhere you can read offline. Mistlands and Ashlands content has no rules yet; add the keys you want from that list.

Installing

Install it on the server. The whole engine is server-side: it owns the timers, it owns the world, and a client-side install does nothing on its own.

Install it on admin clients too, for the settings UI. Idavoll adds a Dungeons tab to Highseat's panel, which lists every dungeon with its countdown and gives you a dry run and a reset button per row.

Highseat comes down with Idavoll as a dependency. It is a client-side admin console, so on a dedicated server it simply sits there doing nothing, and Idavoll runs fine without it: every setting and every command is reachable from the console either way.

Settings

Server settings live in BepInEx/config/gbv.valheim.idavoll.json and are pushed to admin clients automatically. Edit them in the Dungeons tab or in the file, whichever suits.

Setting What it does
enabled Master switch for automatic resets.
timeSource WorldTime or WallClock. See below.
defaultIntervalHours Hours between resets for anything no rule names.
playerClearanceMeters How far away everybody has to be before a dungeon may reset.
maxObjectsPerReset The refusal ceiling.
maxResetsPerHour Throttle, so a long absence does not rewrite a region at once.
protectDroppedItems Keep loose items on the floor. On by default.
skipUniqueLocations Never reset boss altars and similar. Leave this on.
protectedPrefabs Extra prefab names never to destroy.
rules Per-location intervals.

Rule keys are a prefab name (Crypt4), a prefix (Crypt*) or * for everything. An exact match beats the longest matching prefix, which beats *. Setting a rule's enabled to false means that location never resets, and so does having no rule at all - see above.

Which clock

WorldTime is the default, and it is Valheim's own world clock - it only advances while somebody is online. A server nobody touches for a week does not age its dungeons by a week. That is usually what people mean by a respawn timer, but it does surprise people, so it is worth saying plainly.

WallClock is real elapsed time, for a server that is genuinely always busy.

Commands

All of them work from an admin client as well as from the server console.

Command What it does
idavoll_status [filter] Every dungeon that can reset, when it last did and when it is due.
idavoll_locations [filter] Every kind of location in your world, with counts and which rule covers it.
idavoll_dryrun <x> <z> Show what a reset would destroy and keep. Changes nothing.
idavoll_reset <x> <z> [force] Reset one dungeon now.
idavoll_pending What the scheduler is waiting for, and what is in flight.
idavoll_forget <x> <z>|all Clear stored reset times, so they count from now.
idavoll_reload [defaults] Re-read the rule table and push it to clients.
idavoll_abort Abandon the reset in flight.

here works in place of coordinates: idavoll_dryrun here.

One Behaviour That Looks Like A Bug

On a dedicated server a reset happens in two halves, and they can be days apart.

The destroy runs immediately. The rebuild runs when a player is next within simulation distance of that zone, because that is when the server generates the zone at all. Between the two, idavoll_pending shows the dungeon as waiting and the dungeon is empty.

This is deliberate, and it is better than the alternative: the work costs nothing until somebody is actually going there. But if you reset a dungeon, fly away, and find an empty shell when you come back a minute later, wait for the zone to load rather than resetting it again.

After Restoring A Backup

Reset times live beside the config, not in the world save, so restoring a world backup rolls the world back and leaves the schedule where it was. idavoll_forget all makes everything count from now, which is what you want.

Credits

Built for Guys Being Vikings. Shared publicly in case it suits your server too.

Everything here was written from Valheim's own decompiled code. No other mod's source was read or adapted.

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