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

Details

Date Uploaded
3 weeks ago
Downloads
582
Size
196KB
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.
  • Boss altars, the starting temple and Haldor's camps, held off by name.
  • 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, and nothing else:

Biome Locations
Black Forest burial chambers, troll caves
Swamp sunken crypts
Mountains mountain caves
Plains Fuling villages
Mistlands dvergr towns, infested mines, dvergr guard towers
Ashlands morgen holes, the charred fortress, fortress ruins, charred ruins, charred tower ruins

Plus blacks7ar's OreMines mines if you have that mod, and nothing at all in the Deep North, which has no dungeons in Valheim 1.0.15.

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.

Held off by name

Some things stay off even if you enable the catch-all: every boss altar, the Queen's and the Fader's dungeons, Hildir's quest content, the starting temple and Haldor's camps.

That list exists because skipUniqueLocations does not cover any of them. "Unique" means only one may exist in the world, and a real map has five Bonemass altars, four Elder, five Queen entrances and ten Haldor camps. So they get named rules instead.

If you do enable the catch-all, run idavoll_locations first and read it. Other mods add locations too, and spawn rooms and teleport hubs are the kind of thing you do not want rebuilt underneath somebody.

Finding what to write rules for

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. Modded locations show up there too, so it is also how you add rules for content Idavoll has never heard of.

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 Interval used by a rule that does not set its own. It is not a fallback for locations no rule names: those never reset.
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 Skip locations the game flags unique. Leave it on, but note it does not cover boss altars: see above.
radiusMarginFactor Widens the destroy sphere around a surface location. See below.
radiusMarginMeters Added to the sphere after the factor. See below.
protectedPrefabs Extra prefab names never to destroy.
rules Per-location intervals.

Each entry in rules looks like this:

"Crypt*":  { "enabled": true,  "intervalHours": 48 },
"Hildir_*": { "enabled": false, "intervalHours": 0 }

Keys are a prefab name (Crypt4), a prefix (Crypt*) or * for everything. An exact match beats the longest matching prefix, which beats *. An intervalHours of 0 falls back to defaultIntervalHours. Setting enabled to false means that location never resets, and so does having no rule at all - see above.

The radius margins

A location tells the game how much room to leave around it, not how far its own buildings reach. An outlying hut on the edge of a Fuling village sits well past that radius, so Idavoll widens the sphere before deciding what belongs to the location:

radius * radiusMarginFactor + radiusMarginMeters

Defaults are 1.25 and 8. Too small is the dangerous direction: anything the destroy pass misses survives, and then the rebuild puts a second copy on top of it, permanently. Too large just means more of the surrounding landscape is considered, and the protection list still keeps vegetation, terrain and anything player-built.

If a surface location ever comes back looking doubled, this is the first thing to check, and idavoll_dryrun shows you the partition it produced.

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.