Descend into the Mists of Avalor: a procedural black-stone crypt-labyrinth in a forsaken sky-realm. Dodge true-damage traps & restless dead. Tear keys from mutant bosses to crack vaults, & take the Avalorian Greatsword off the Warden. Bring a torch.
Anti-Farm, a new setting, on by default. The labyrinth's creatures now carry nothing but a Crypt Key — no trophies, no hides, no scraps. This is a deliberate answer to a way of playing the maze that had stopped being a raid and become a delivery service: walk in with an empty inventory, kill whatever is in reach, open the chests you pass, then die on purpose and collect the grave the mod sends home for you. Nothing about that was cheating — the grave rescue is deliberate, and it stays, because a grave lost in the sky realm cannot be got back — but it meant the labyrinth paid out in full for a run nobody survived. The hoard is still where it always was, in the vaults; a vault still needs a key; and a key now needs a fight. Turn AntiFarm off under Loot for the old behaviour.
The Warden is the one exception and keeps its own hoard. The Avalorian Greatsword, the Recall Rune, the gems and the coins are the prize for the fight at the end of the labyrinth, not something to grind, and they drop exactly as they always have.
Crypt Keys are now three settings instead of two numbers baked into the mod. An ordinary Avalorian still carries a 5% chance and a starred sub-boss 24%, unchanged — but the Avalorian Revenant and the Warden now drop one guaranteed. The two things in the maze worth being afraid of are the dependable way to open a vault. Still one key at most per kill, and still never multiplied by stars. A key off the Warden is for the next labyrinth: the exit is behind it, not a vault.
The chests are adjustable. A new Loot section carries LootQuantityScale (how big every stack is), LootEntryBonus (how many different things a chest holds — a door-side chest rolls 3 and a deep vault rolls 9, and this shifts the whole curve), and LootCoinScale, which is separate because coins are currency rather than crafting stock and are rolled in their own much larger stacks. LootPoolCommon, LootPoolMid and LootPoolDeep will replace the three material bands outright with a comma-separated list of prefab names, for a server running a modpack this mod has never heard of. All of it is admin-only and server-synced, like every other rule of the labyrinth — two players in the same corridor must be in the same labyrinth.
The Warden is on a much shorter leash: 8m from its post, down from 24m. It guards the way out; it was never meant to follow you back up the maze, and it was doing exactly that. The engine has a leash of its own and the Warden has always been given one, but reading what it actually does explains why nobody ever saw it work: the game only consults the distance once the creature has also lost sight and sound of you for a full second, and a 6m-wide dead-straight corridor hands a player walking backwards a sight line the length of the labyrinth. The distance is now enforced directly. Past it the Warden gives up, turns round and runs back to the gate, and it will not take an interest in you again until it is home. WardenLeash under Combat if 8m is too short or too long for your taste — be aware that a short leash is also a short bow range, and a patient archer standing just outside it can work on the boss unanswered.
Upgrading: nothing to regenerate and no world state to migrate. Creatures already standing in a labyrinth pick all of this up the moment they are next loaded.
[1.0.3]
Rebuilt against Valheim 1.0.16 and re-verified: a clean static reference check against both the client and dedicated server assemblies, and a headless 1.0.16 dedicated-server boot with every patch applying and no [Avalor][FAIL] lines.
Fixed: Valheim 1.0.16 changed how the game settles two terrain compilers in one zone (it now keeps the one with more terrain operations). When a zone's own compiler arrives after a portal clearing was written, Mists of Avalor now removes its own compiler first, so the zone's saved terrain edits always survive, and re-writes the clearing over them — the behaviour it had before 1.0.16.
[1.0.2]
Fixed: stepping through the gate could leave you on a black screen that never ends, with nothing in your log but a "Local player destroyed" line. Valheim 1.0 changed how the game files objects that lie outside the normal world, and the labyrinth floats 30km out, well past the edge: everything out there now shares one "sector". So arriving at the entrance made the game wait for every object in the whole labyrinth - and anything else any mod keeps outside the world - to exist on your machine before it would show you anything, and it streamed the entire maze in at once instead of the part around you. A dedicated server was caught by the same change: its own reference point sits outside the world too, so it had been quietly keeping the whole labyrinth, and a copy of every player inside it, loaded on the server. The sky region is filed by zone again, the way it was before 1.0, which is the behaviour the labyrinth was built for. The server needs this version as much as the client does.
If an arrival still stalls, the log now says what it is waiting for: [Avalor][FAIL] labyrinth entrance: still on the loading screen after 12s ... waiting on: <prefab> xN, repeated every ten seconds. After 45 seconds a trip into the labyrinth is finished onto a temporary platform at the entrance rather than left black forever; the stone streams in around you from there.
A "Local player destroyed" line is now preceded by an [Avalor][FAIL] line whenever it is not a death or a logout, saying whether the destroy came over the network (a DestroyZDO packet naming your own character) or from the game itself culling the player - the two things that leave a black screen with no way out. Please send that line with any report.
The gate now says so if the trip could not start at all - a teleport already under way, or the two-second cooldown after spawning - instead of doing nothing silently.
Fixed: a maze reset could destroy a grave still standing in the labyrinth, with everything in it. The wipe runs two passes, and the second - the one over loaded objects - spared players but not their tombstones. Both passes now spare any grave by what it is rather than by its name, the labyrinth's own pre-build wipe uses the same rule, and a grave that was standing in the labyrinth when it was wiped is sent to the graveyard straight away instead of being left to fall.
Walked once in play on a 1.0.12 player-host before the fold: labyrinth generated, entry arrived in under twelve seconds, the Warden fought, the exit walked, the return home arrived, no failure lines. Not yet walked on a dedicated server, which is where the server-side half of the first fix matters; the diagnostics above exist so that the next report carries the evidence, whichever way it goes.
Crypt Keys drop a little more freely. Every Avalorian creature now carries a 5% chance of one, and the starred sub-bosses' chance rises from 18% to 24%. Still one key at most per kill, and never multiplied by stars.
Fixed: the deeper vaults were refusing part of their own hoard. Avalor's chests were built on the ten-slot wooden chest, and a deep vault's roll is eight entries of several stacks each - so everything past the tenth stack was turned away, and each refusal put a red Trying to add item to occupied slot -1, -1 line in the log. Every Avalor chest now opens onto a 32-slot grid, which holds the largest roll, and the loot code checks for room before it asks.
The log is quieter in the labyrinth: the game's own once-a-second GetBiome error Ocean -> AshLands warning, which fires because the sky lies off the edge of its biome map, is no longer printed there. It was 268 lines in a four-minute visit and it meant nothing.
[1.0.1]
Fixed: a site that had just been repaired after a late terrain change could stop watching for its own out-of-reach corner. If the repair gave up while yet another change was arriving, the flag that asks for a repair was left raised and the residency watcher on that site treated it as "someone else is on it" for the rest of the session. The repair now lowers the flag when it gives up, so the watcher takes the site over on its next poll.
The log is more honest about a late terrain change during the first build: it is reported as an ordinary notice rather than as a partly-written clearing, and the clearing's own failure line no longer says "NOT verified" about a write that did verify before the change arrived.
The 1.0.0 notes above are corrected in four places: the straight-edged face showed on about one site in seventeen, not one in six (one in six is how often any corner was out of reach); an older build recorded such a site as finished rather than waiting for it to stream back in; a path built by 0.2.3 or earlier keeps its old grade because the road's record lives on the gate's marker, not because the world holds no record at all; and the one [Avalor][FAIL] terrain line that is not a defect - vertices needing more than 8m of cut or fill on very steep ground - is named.
[1.0.0]
Fixed: the two things wrong with the ground at the gate site - the drop-off where the processional path enters the clearing, and the pale, straight-edged face at the clearing's rim that you could see straight through - are gone, and no amount of tuning the old approach was ever going to remove them. The clearing used to be shaped with the game's own two terrain tools, and one of them has a ceiling: the game's smooth tool cannot move any point of ground more than a metre from its natural height, however many times it is applied, so a pad levelled to the gate's height beside a ring that could only be smoothed always ended in a wall - the drop, minus one metre - standing exactly at the pad's edge. Avalor now writes the finished ground straight into each zone's stored terrain, the same place the game keeps a hoe's work: a flat pad out to 28m, a ring that grades back to natural ground by 52m with no crease at either end, and the path descending or climbing to meet the pad at exactly its own height, so the walk arrives on the pad instead of stepping up onto it. The write is exact and repeatable - running it again produces the same ground - and the site keeps a record of every zone it wrote so it can check its own work.
The site finishes itself. It is built from where you stand at the Sacrificial Stones, 68-96m from the gate, and on about one site in six a corner of its footprint lies outside what the game keeps loaded from there - on about one in seventeen that corner reaches into the clearing itself, and it used to be left natural along a dead-straight zone edge while the site recorded itself as finished anyway, so nothing ever went back for it. Now the site keeps watching and writes those zones the moment you walk toward the gate - the log says the clearing is waiting for N zone(s) of its footprint to come within reach ... walking toward the gate is normally enough, and a few seconds later that it is finished ... The pass is claimed. And if the game later swaps in a zone's own terrain data underneath a finished site, which it can do when that data arrives late, the site notices, re-writes itself and says so.
Trees, rocks and props standing between the cleared 24m around the gate and the 52m rim are set back down onto the new ground instead of being left floating on air or buried to the canopy; on a re-shape the road's paving and torches are re-seated the same way.
Fixed: the processional path showed as a dirt track. The paving tile has no model of its own - what you see as paving is paint - and the mod's own cleared-dirt paint was being stored over it. The crown of the road is now painted paved, with cleared-dirt verges either side, all the way through the pad to the gate.
Fixed: the six ruined walls around the clearing had never once appeared on Valheim 1.0 - the piece they asked for does not exist there. They now spawn as Avalor's own weathered copy of the stone wall, and cannot be picked up with a hammer.
The avenue's torches now start about a third of the way along the road, so two to four pairs stand on the graded approach rather than all of them on the flat pad. The crypt torches - on the avenue and in the labyrinth - can no longer be removed with a hammer.
Fixed: the sweeps that clear the avenue and the clearing could delete things that were not theirs. Both now refuse anything a player built, any dropped item stack, the wild beehive of an abandoned house, and anything inside the Sacrificial Stones' own ring - which the avenue sweep could previously reach a flanking stone inside.
avalor_spawn_portal refuses a site closer than 55m to the Sacrificial Stones - the pad, the temple's protected ground and the fade between them add up to that - rather than build a pad it cannot keep flat. avalor_remove_all now hands back the whole width of ground a site touched, the road's own start included.
The line to look for in the log is now [Avalor] terrain: 8 terrain-op prefab(s) registered in ObjectDB. Three of the eight are the paint - the pad's dirt, the verges, the paved crown. The other five belong to the old op grid and the old path leveller, kept so a processional path already cut by an earlier version still resolves its edits, and so a game update that ever makes the terrain data unreadable has something to fall back to; that fallback announces itself with [Avalor][FAIL]. Any line tagged [Avalor][FAIL] terrain is something to report - except the one about vertices needing more than 8m of cut or fill, which is the game's own limit on very steep ground and is telling the truth.
Existing worlds: every site built by an earlier version re-shapes itself once, on its next visit. The pad and the ring are rewritten as the new surface, and the old ring's leftover smoothing out to 63m is erased rather than added to. A path built by 0.2.3 or earlier keeps its old grade, because the record of where the road runs lives on the gate's own marker, which a site built by those versions does not carry; avalor_remove_all and a fresh siting give it the new one.
Verified in play on a fresh Valheim 1.0.12 world before the version bump: a flat pad, the road meeting it level, and no wall at the rim.
The package is now Mists_of_Avalor - the BETA is over. Remove the old Mists_of_Avalor_BETA package when you install this one, so the game does not find two copies of the same plugin.
[0.2.3]
Fixed: on Valheim 1.0 the gate's clearing was never levelled and the processional path was never graded - the gate sat on a raw hillside and every torch on the avenue on bumpy ground - with nothing in the server log to show for it. Valheim 1.0 changed how a terrain edit crosses the network: instead of sending the edit's settings, the game now sends only the name of a registered terrain-op prefab, and whichever machine owns that patch of ground looks the name up and applies the prefab's settings - or, if the name is not registered, quietly cancels the edit with Failed to deserialize TerrainOp settings ... cancelling TerrainOp in its own log. Avalor's edits were built on the fly at runtime under a name nothing had registered, so every one of them - 101 for a clearing, one per leveller along the path - was cancelled on arrival. The 0.2.2 compatibility audit could not have caught it: no method the mod hooks or calls changed shape, only what vanilla puts on the wire inside a method the mod never touches. Avalor now registers its five terrain-op shapes (the clearing's pad, its feather ring, each with and without paint, and the path leveller's grade) in the game's object database on every machine, server included, and emits clones of those registered prefabs. The first thing to check in either log is [Avalor] terrain: 5 terrain-op prefab(s) registered in ObjectDB.
Every existing site repairs itself. A clearing built on 1.0 had already spent its one shaping pass on edits that were thrown away, so the pass version is raised for both the clearing and the path levellers: each site re-shapes once, the next time it is visited, with edits that now land. Sites shaped correctly before 1.0 re-run harmlessly (levelling already-flat ground writes nothing; smoothing converges).
Verified on the 1.0.12 dedicated server: Mists of Avalor 0.2.3 boots with twelve patches applied and the five prefabs registered at both the start scene and the world scene. The in-game half - a flat pad after siting on a 1.0.12 client, and zero cancelling TerrainOp lines in the client's log - is the test for this release.
[0.2.2]
Valheim 1.0.7 compatibility. Rebuilt for Valheim 1.0.7 (client build 25185596 / dedicated server build 25185644, network version 39) against BepInExPack 5.4.2350 and Jotunn 2.30.0 - the first Jotunn release for Valheim 1.0, and now the minimum required version. Nothing about the labyrinth, the gate, the loot or the Warden changes; every edit below is the mod re-learning the names of things the game renamed.
Fixed: the no-build guard around the gate clearing and the labyrinth did not attach on 1.0. Valheim 1.0 gave Player.PlacePiece a fifth parameter (cheated), and Avalor's hook named the old four exactly, so on 1.0.7 it found nothing to hook and logged AVALOR PATCH FAILED - FEATURE LOST: "No-build protection" while everything else loaded - meaning players could build in the maze and on the clearing. The hook now binds by name, which is how every other Avalor patch already did it, so it survives the next parameter the game adds too.
Fixed: the gate itself could not exist on 1.0. Valheim 1.0 added a member to the game's Hoverable interface (GetHoverOffset, an extra interact reach the cursor allows for an object), and the portal trigger implements that interface for its "Step through" prompt. A class missing an interface member cannot be loaded by the runtime at all, so on 1.0.7 the previous build failed with TypeLoadException: VTable setup of type AvalorPortalTrigger failed and HarmonyX's assembly type scan logged a ReflectionTypeLoadException alongside it. The trigger now provides the member (0 - exactly the pre-1.0 reach).
Fixed: avalor_remove_all's "hand the ground back" step would have died on 1.0. Heightmap.Poke(bool) became Poke(int delayed = 0, bool paintOnly = false); the restore now calls the immediate form, which is what it always meant.
The terrain diagnostics now read zone ids in the game's new sector type (Vector2s), and the boot line [Avalor][net] ... activeArea=N is now simDistance=N: Valheim 1.0 replaced the fixed ZoneSystem.m_activeArea with a player-configurable simulation distance (ZNet.GetSyncedSimulationDistance()), whose near ring defaults to 2 where the old field was 1. Avalor only ever reported this value - nothing in the mod sizes anything from it - so the only behaviour change is the label. Two other 1.0 changes (Character.Message gaining an optional log flag; the game's own Version class becoming public and shadowing System.Version in the plugin-lookup helper) needed a recompile and one fully-qualified type name respectively, and change nothing at runtime.
Verified on a 1.0.7 dedicated server: Mists of Avalor 0.2.2 loads with all ten patches applied (Patch applied OK x10, including the no-build guard), 13 console commands, 60 prefabs, 3 items, 1 recipe and 1 status effect registered through Jotunn 2.30.0, and [Avalor][net] topology=DedicatedServer ... simDistance=2. Not yet walked in-game on 1.0.7: stepping through the gate, the Ashlands-card suppression and the vegetation skip need a client session to confirm - the hooks bind; the behaviours are the ones section F of MIGRATE-1.0.md lists.
[0.2.1]
Changed: the Avalorian Greatsword is now taken off the Warden. The blackmetal chest that used to stand beside the escape gate holding it is gone. The chest made the boss a doorman rather than a gate - it was a container you walked up to and opened, and a player who simply ran past the fight got the prize anyway. The sword is a guaranteed drop from the Warden's own corpse, still exactly one per labyrinth and still no roll: beat the thing guarding the way out, or leave without it. (Chests already standing in a labyrinth built before this update are untouched and still open normally.)
The Warden now holds the gate area properly instead of either trailing you home or standing on one tile like a prop. It paces a short patrol around its post, fights the moment you arrive, and if you pull it more than about four cells away it breaks off and walks back to the gate. Backing off to heal and re-engaging is still free.
Fixed: the labyrinth was one-shotting players. A Warden - and far more often an Avalorian Revenant - was killing a player who was blocking, with over 300 health, in a single blow. Nothing in the mod had ever multiplied enemy damage; the number came from three vanilla things stacking with nothing to stop them. A star is a doubling of damage in Valheim, not just extra health, and both of those enemies carry two. The Hardcore roster reaches into the Ashlands for its bodies. And a six-metre corridor takes away the one answer the game gives you to a big hit, which is distance.
So there is now a ceiling, in two parts, and both are admin settings a server can turn off. EnemyDamageScale (default 0.6) reduces what the labyrinth's creatures hit you for before your armour and your shield are applied, so blocking still earns its full value on top rather than being made irrelevant. MaxHitFraction (default 0.5) is a hard limit on how much of your maximum health any single blow can take after everything has been applied: at full health you always survive the first hit, whatever swung it. Set both to 1.0 for the old numbers.
The spike and poison plates are deliberately untouched - they already take a share of your current health and are written to leave you standing - and so are falling, drowning, and everything outside the sky realm.
The Avalorian Revenant no longer drags an Ashlands champion into a Normal labyrinth. The wandering spawns have always kept the Charred behind Hardcore; the rare elite's own roster quietly did not, so a Normal maze could roll a Charred warrior, force it to two stars, and put it in a corridor with you. That was the single hardest thing in the mod and it was appearing on the middle difficulty. It is Hardcore-only now, in line with everything else Charred.
[0.2.0]
New: the labyrinth keeps a record, and BarrkBOT can read it. The server now writes a small stats file that the Discord bot picks up on its own - how many have died in the labyrinth standing right now and what killed them, how many creatures are still in it, how many people are inside, whether the Warden is still guarding the way out, and how many have walked out alive. Lifetime totals are kept too, per player and for the server as a whole, and they survive restarts and maze resets. It is on by default; there is nothing to configure and nothing to opt into.
Deaths in the labyrinth are recorded with what killed you, so "what is actually killing everyone in there" has an answer. A fall off the edge, drowning or a trap has no creature to blame and is recorded honestly as the labyrinth itself rather than being dropped or pinned on the nearest mob.
Only the labyrinth is counted. Dying in the overworld is not the labyrinth's business and does not appear in the file at all.
Fixed: Avalor was moving graves that had nothing to do with Avalor. The safety net that rescues a grave lost in the labyrinth was reading every tombstone in the entire world, and one of its tests is "is this grave underneath the ground?" - which is true of any perfectly ordinary death in a cellar, a pit, a mine, or under a raised floor. So a player who died in their own basement, on a world where nobody had ever been near the labyrinth, would find their grave gone: picked up and set down at the Avalor graveyard, and set down again a minute later if they carried it home. Both the automatic sweep and avalor_recover_graves now look only at the sky realm and at the graveyard clearing itself. A grave out in the world is where its owner left it, and Avalor no longer has an opinion about it.
avalor_gather_graves no longer empties the whole world onto the graveyard. It was documented as moving every player grave in the world, and it did - so an admin tidying up after a maze reset also dragged in every grave every player had ever left anywhere, including deaths from before the mod was installed, with nothing to undo it. It now gathers the labyrinth's dead and leaves the rest of the world alone. Everything else about it is unchanged: it still ignores whether a grave is reachable, still skips graves already at the graveyard, and is still deliberately separate from avalor_recover_graves.
Graves stranded on the graveyard clearing itself are still rescued. That ground is cut flat by the mod and is where relocated graves are set down, so a grave that goes wrong there went wrong on Avalor's own plot - it stays in scope, and it is now the only place the buried-grave check is ever applied.
Both grave commands now report how many graves they deliberately left alone, so the log answers "did it go through my world again?" without anyone having to take it on trust.
[0.1.12]
New: admins can put the gate where they want it. avalor_spawn_portal now places a complete Gate of Two Stones wherever you are aiming - the clearing is levelled, the graveyard is laid out in front of it, and if it is within walking distance of the Sacrificial Stones the processional path is paved back to them, exactly as a fresh world builds it for itself. Add bare for the gate on its own, nopath to skip the avenue, or replace to remove the gate you already have.
A gate placed this way is the gate. Everything that looks for one - grave relocation, the return trip, the check that stops a second gate being built at the next world load - now recognises the one an admin chose, wherever it stands, instead of always anchoring on whichever portal happens to be nearest the Sacrificial Stones.
Fixed: avalor_spawn_portal used to drop a seven-metre monument on raw ground at the player's own height - half-buried on any slope, with no clearing, no graveyard and no path - and on a dedicated server console it silently did nothing at all, with no message either way.
Fixed: avalor_remove_all said it had removed everything and left the landscape behind. The gate site is deliberately cut into the ground - a flat pad, a wide graded rim, a levelled avenue - and removing the objects standing on it left that shape as a bald terrace around spawn, with nothing left to explain it and no way for any later command to find it again. The ground is now handed back to the world generator: the clearing, the rim and the path return to the hillside they were cut from.
Fixed: avalor_remove_all was deleting things Avalor never placed. Natural rocks, pine trees and mushrooms within a hundred metres of the Sacrificial Stones were on its list - including the temple's own flanking boulders, which avalor_fix_stones then existed to put back - and so were plain stone walls and floors, which is most of a stone house. Anything a player built is now protected outright, and the natural scenery is left alone.
Fixed: avalor_remove_all could not reach the far half of its own site. It swept a fixed hundred-metre circle around the Sacrificial Stones while the gate is sited up to ninety-six metres out with a graveyard and a ring of dead trees beyond that, so the outermost decor was left standing. The sweep is now measured from the site that is actually there, and reads the world itself rather than only the parts of it currently drawn on screen.
Fixed: on a dedicated server, avalor_remove_all typed by an admin was not actually removing the labyrinth. Like the reset command before 0.1.11, it ran on the admin's own game rather than on the server, so it deleted only the fraction of the maze that admin's game happened to have loaded, decided "is anyone still inside?" from that same partial view - the answer that drops everyone in the maze five hundred metres if it is wrong - and reported that everything had been removed. The labyrinth half now runs on the server. The overworld half deliberately still runs where you are standing, because clearing the site and reshaping the ground can only be done by a machine that has that ground loaded.
Trees and rocks the site cleared away cannot be regrown, and the command now says so rather than implying a complete restoration.
[0.1.11]
Fixed: the Warden stopped appearing. After the labyrinth was reset, a fresh maze came back complete - exit, prize chest, the lot - with nothing guarding the way out, and it stayed that way for the rest of the server's uptime. Resetting the maze was quietly happening on the admin's own game instead of on the server, even though the command is marked server-only; that setting controls who is allowed to run a command, not where it runs. The server therefore never learned its labyrinth had been replaced, still believed the previous maze's Warden had already been beaten, and skipped the check that would have corrected it. Resets now run on the server.
The Warden also no longer depends on being told. It now recognises the labyrinth it is guarding by the exit portal itself, and treats a different exit as a different maze - so any reset brings the boss back, including one performed by something that never informs it.
Fixed: the same misrouted reset meant the decision "is anyone still inside the labyrinth?" was being made from one player's partial view of the world rather than the server's complete one. Getting that wrong drops everyone in the maze five hundred metres. It is now decided where the answer is actually known.
Fixed: a reset run on a machine with no labyrinth did nothing whatsoever and said nothing about it, so the command looked like it had worked. Every outcome is now reported.
New: avalor_gather_graves. Moves every player grave in the world to the overworld graveyard, whether it is lost or not - for tidying up a server, or for peace of mind after a reset. This is deliberately separate from avalor_recover_graves, which stays conservative and only rescues graves that have actually fallen somewhere unreachable, because a grave where you died is where you will go looking for it.
The search for the labyrinth's exit no longer trusts a remembered position for half a minute after that exit has been destroyed, and no longer re-reads the entire world - over two million objects on a busy server - on every single tick while a maze is being rebuilt.
[0.1.10]
Fixed: a grave moved to the overworld graveyard arrived at the right spot but hung in the air above it. The ground under the gate is deliberately cut flat - the whole clearing is levelled, which usually means shaving a few metres off a hillside - but the measurement used to set a grave down was the original shape of the land, taken from the world's terrain generator rather than from the ground that is actually there. So the grave was placed on a hill that had been dug away, and stood in the empty air where it used to be. Graves are now set down on the levelled clearing itself.
The same wrong measurement was also holding them up there. The automatic sweep that rescues buried graves compared each one against that same phantom hillside, decided a grave standing correctly on the clearing was several metres underground, and lifted it back into the air - once a minute, indefinitely, undoing gravity's own attempt to fix it. It now measures against the real ground.
A grave already hanging over the graveyard sets itself down the next time a player is there to see it, and stays down. No new world, and no command, is needed.
[0.1.9]
Internal item rebalance.
[0.1.8]
Fixed: a grave from a maze death could fall out of the world and take everything with it. A tombstone in Valheim is a physics object, so when the labyrinth's floor streamed out from under it, it simply fell. The safeguard that is supposed to drag a stray grave back into place only measures how far it has drifted sideways, so a grave dropping straight down never looks like it has moved at all, and the second safeguard that lifts a buried grave back above ground relies on a measurement that a dedicated server cannot take. Nothing stopped it. The grave and every item in it are still in the world - they were never deleted - and Avalor now finds them and puts them back.
Fixed: moving a maze grave to the overworld graveyard could lose track of it. The move was made by the server, which then owned a falling object in a place it had no solid ground for, and the grave's own position kept being rewritten as it fell. The relocation now seats the grave on real ground using a measurement that works on any machine, moves the grave itself rather than only its recorded position, and brings it to a complete stop.
Fixed: avalor_tp_grave could teleport you to where your grave used to be. It preferred whatever your own game already knew about, and your game keeps a copy of everything it has ever been told - including a grave's old position from before the server moved it. It now asks the server first whenever you are on one, and only falls back to local knowledge if the server does not answer.
New: avalor_recover_graves. Finds every player grave that has fallen out of the world or ended up buried, and re-seats it safely at the overworld graveyard. It also runs automatically when a world loads, so a grave lost this way comes back on its own without anyone having to know the command exists.
Fixed: the processional road came out as a janky, stepped dirt track on a server. The approach is a gradual slope, so every few metres along it a patch of ground was being flattened to a slightly different height than the patch beside it - and because those patches overlap, each one simply overwrote part of its neighbour. Which one won came down to the order they happened to arrive in, which on a server is not the order they were made in, so the road ended up as a run of mismatched steps. The slope is now graded by blending the ground toward each height instead of stamping it flat, which reaches the same shape without the patches fighting. The portal clearing was never affected, because every patch there flattens to one single height and they all agree.
Every existing processional road re-grades itself once, the next time you walk to it. No new world needed.
Fixed: avalor_generate_all rebuilt the overworld gate but not the labyrinth, so after avalor_remove_all the sky realm was left completely empty - and anything that put you there without walking through a portal (flying, a teleport, an old spawn point) dropped you five hundred metres onto nothing. That is exactly how one playtester died, with their tombstone falling after them. The command now rebuilds both, and says so; it costs nothing when a labyrinth is already there.
Fixed: a vanilla runestone (or another piece of world-gen scenery that Avalor is not allowed to remove) could end up standing squarely in the middle of the processional road. Avalor deliberately never deletes runestones, boss stones or the Sacrificial Stones - that guard exists because the road once came close to destroying a Sacrificial Stone - but nothing in the site search had any opinion about what was standing between the temple and the gate, only about whether the gate's own spot was dry and level. The search now also looks along the avenue and prefers a direction that is actually walkable, so the road is aimed around anything it must not touch rather than through it.
Fixed: a grave relocated to the graveyard sat about a metre too high, hovering above its plot. The height it was lifted by had been hand-tuned to compensate for the broken ground measurement described above; with that measurement fixed, the old adjustment was being applied on top of a correct answer. Avalor now measures the headstone itself and sets it down on the ground.
[0.1.7]
Fixed: if you had fallen off the labyrinth, the mod stopped counting you as being in it - at the exact moment you most needed rescuing. The check for "is anyone inside" measured a straight-line distance from the centre of the maze, and the maze floats 500m up with nothing beneath it, so a player dropping through the empty air below quickly measured as too far away to matter. A reset run in that state decided the labyrinth was empty and skipped the evacuation that would have teleported them home. The maze's airspace is now treated as a column: anywhere above or below it counts, at any height.
avalor_remove_all now evacuates before it deletes. It was the only destructive command in the mod that never checked whether anyone was standing on what it was about to remove - it deleted the floor of the labyrinth without warning, while avalor_reset had been broadcasting an evacuation since 0.1.0. If players are inside and there is no way to reach them, the command is now abandoned instead of carried out.
[0.1.6]
Fixed: the portal clearing and its processional path went back to their natural, bumpy shape as soon as you walked away, leaving the gateway, the runes, the road and the torches hanging in the air when you returned. The ground was being shaped by a kind of terrain edit that only exists while the object making it is loaded - so the moment the area streamed out, the edit went with it, while everything standing on it stayed at the height it was built. Avalor now shapes the ground the same way a hoe does, which writes the change into the world itself. It survives leaving, relogging and a server restart.
Every clearing and path shaped by 0.1.5 repairs itself. The terrain pass is versioned; this release raises it, so each site re-shapes once - permanently this time - the next time you walk to it. No new world needed.
Fixed: a grave from a maze death was not being moved to the overworld graveyard on a dedicated server. Your character's grave is created and owned by your own game, and the request to move it reached the server before the grave itself did, so the server found nothing to move and dropped the request without a word. It now waits for the grave to arrive, and says so in the log if it truly never does. Graves were never at risk of being lost - avalor_tp_grave always finds them - but they were staying in the labyrinth instead of coming home.
The maze reset now always records whether it found players inside, which machine decided that, and what it did about it. A reset that skips the evacuation warning drops everyone in the labyrinth into the void, and until now the "nobody is inside" path said nothing at all - so a missed evacuation and an unnecessary one looked exactly the same afterwards. A reset that finds players inside but has no way to warn them is now abandoned rather than carried out.
[0.1.5]
Fixed: on a DEDICATED SERVER the portal clearing was never levelled, leaving the gateway and its runes half-buried in a hillside with the road running across it at the wrong height. The site is deliberately seated a few metres below the natural ground so the flattening pass can then cut the hill down to meet it - two halves of one move. The flattening half refused to run unless it was the server, but the site is built by the first player to reach the spawn stones (choosing a spot needs ground probing a headless server cannot do), so on a dedicated world neither machine ever ran it. Only the sink happened. Terrain shaping now runs on whichever machine builds the site, which is how a hoe has always worked.
Existing dedicated-server portal sites repair themselves. The terrain pass is versioned, and raising that version makes every clearing and every stretch of processional path re-shape itself once the next time you walk to it. No new world is needed.
The site now waits for the ground to actually exist before shaping it, instead of pausing for a fixed number of seconds. Terrain edits are stored per 64-metre zone, so an edit aimed at a zone that has not loaded yet is silently thrown away. That could never happen on a player-hosted world, where the whole area is already in memory - but a player arriving at a fresh server site is often faster than the world around them, and the old fixed pause was tuned for the wrong situation. The road, torches and decor likewise wait for the shaping to finish rather than assuming it has.
Fixed: boulders and trees standing in the processional avenue were not being cleared on a dedicated server. The clearing sweep asked to delete them, but deleting something owned by another machine is silently ignored, and on a dedicated server the world's rocks belong to the server while the clearing runs on a player. It now takes ownership first, the same way the rest of the mod already did.
[0.1.4]
Fixed: the portal avenue and the gateway were blindingly bright - brightly lit areas washed out to pure white. Three things were stacking. The processional torches on the approach ignored the LightingLevel setting entirely and always burned at full, so on a gloomy setting the labyrinth sat dark while the road to the gate blazed; the gateway's own glow was the strongest light in the mod and reached far enough to land on those torches as well; and the runes drew with a triple-strength glow on top of both. Light adds up, so the three together pushed every colour channel past what the screen can show, and past that point green stops being green and just goes white. The avenue now dims with the setting like everything else - still clearly the lit road to the gate, never brighter than the labyrinth at its brightest - and the gateway glow and the runes are turned down to match. Nothing else about the lighting changed.
The server install steps are now written down. The README has a Dedicated Server section covering what the server owns, why only the server's config file matters, the log line that proves the server-side pass is running, how version matching behaves, and why the overworld gate appears when the first player reaches spawn rather than at server start.
Corrected: the README still listed DebugLogging as off by default. It has been on by default since 0.1.3.
[0.1.3]
Fixed: Avalor reported "Shadows of Midgard is not installed" while Shadows of Midgard 1.x was installed and running. Plugin IDs were being compared case-sensitively, and Shadows of Midgard re-cased its own ID between 1.0.0 and 2.0.0 - so every 1.x player was told the two mods were not talking to each other when the truth was the opposite, and the loud warning that should have fired instead never did. All of Avalor's mod detection now ignores case.
Shadows of Midgard 2.0 betas are now recognised as new enough. They report a 1.9.x version number, so any check based on the version alone calls them out of date; Avalor asks whether the exemption hook is actually present instead, which is the thing that matters. The log now names the build it found, and says "2.0 beta" when that is what it is.
Debug logging is now ON by default for the open beta. Most of what it records happens once while the mod loads, so switching it on after something goes wrong is already too late to capture the cause - this way a bug report carries the evidence with it. It only writes to your own log file, it is not server-synced, and it can be turned off in the config at any time.
The portal clearing is shaped once instead of on every visit. The terrain flattener and the path levellers were re-running their full pass each time the site streamed back into view - about 115 terrain edits per approach, for a hitch and no change to the ground, since the ground was already flat. Nothing was ever damaged by it; it is simply gone now.
[0.1.2]
Fixed: the Avalorian Warden could spawn walled in. It was placed at a flat 3m offset from the exit portal, which is exactly the boundary between two cells - so whenever that side of the exit was solid the boss materialised inside the stone and got shoved out wherever physics felt like, frequently behind its own portal with no way to reach anyone. It now reads the maze layout and takes its post in the corridor you actually walk down to reach the exit, clear of every wall and clear of the prize chest.
Shadows of Midgard compatibility is now just the flag. Avalor stamps every mob it owns as Avalorian and Shadows of Midgard skips them - that is the whole integration, the same way Dvergr Allies declares its allies. The 0.0.9 workaround that drove SoM's awareness data by reflection five times a second, and the five Harmony patches that fought it for control of alertness and sensing, are deleted.
As a result, maze mobs no longer sense you through solid stone. That was never intended behaviour - it was a side effect of forcing the sensing check true, which skipped the line-of-sight test entirely. Crouching and putting a wall between you and a hunter now works in the labyrinth the way it works everywhere else. The mobs still hunt: they are re-alerted continuously, because vanilla alertness decays and 6m corridors break line of sight constantly.
Sub-bosses stalk again. The "walk while hunting by scent, run once alerted" behaviour had been inert since 0.0.9 because the deleted patches forced every mob to read as alerted.
Avalor now says in the log whether Shadows of Midgard is installed and whether it is new enough to honour the flag, instead of being silent about it. An out-of-date Shadows of Midgard is called out by name, loudly - on that combination its own rules apply to Avalorian mobs and they will not swing first.
[0.1.1]
Fixed: avalor_tp_end dropped you one cell BEYOND the exit and off the edge of the labyrinth into the void. The exit sits on the deepest cell, which is often on the outer rim; the teleport now reads the maze layout and lands you in a corridor cell that actually exists - normally the one the prize chest is in - facing the way out. It also holds the escape gate shut while you arrive, so landing at the exit no longer walks you straight back out of it before you can open the chest.
Fixed: the exit portal was built half-initialised. Stripping its colliders left a vanilla EffectArea behind, which threw a NullReferenceException from inside Instantiate every time the way out was created or streamed back in.
The labyrinth's fog now survives de-misting mods. It is re-asserted at render time, after every other mod's LateUpdate, and says so in the log if it catches one - so "Mists of Avalor" keeps its mist even alongside a mod whose entire purpose is removing it.
Poison plates can no longer kill you outright. Poison is queued as a pool and ticks out over ~20 seconds with no can't-kill guard, so the percentage-of-current-health bite that leaves you standing on a spike plate was quietly lethal on a poison one. It now leaves a sliver, the way the spikes always did.
Hardcore live-mob cap lowered from 14 per player to 10. Hardcore's punishment stays in the mobs - more health, more speed, two stars, Ashlands Charred in the roster - rather than in the size of the queue.
Fixed: chest loot emptied itself. Materials were added without a drop-prefab reference, so the container saved a list of blanks and loaded nothing - every hoard survived only until that chest streamed out and back in. Affected everything in every chest including the Avalorian Greatsword; the Crypt Key and Recall Rune were never affected.
The "you have discovered the Ashlands" card no longer fires when you portal into the labyrinth. The maze floats 500m above Ashlands terrain, which is nobody's business but the heightmap's - and the real biome now stays undiscovered until you actually go there.
The exit compass now defaults to the lower-left corner where playtesting left it, instead of through the middle of the view, and can no longer be drawn off the edge of a smaller screen.
[0.1.0]
Full dedicated-server support: the mob director, Warden, resets and maze generation now run correctly on headless servers (everything server-side operates on replicated ZDO data instead of local instances and physics).
Multiplayer hardening: sub-boss/Revenant/Warden stats, immunities, names and drop tables now replicate to every player, so kills pay out no matter who lands them; the maze health buff no longer compounds or heals mobs when players stream in; trap damage no longer multiplies with nearby players.
Guests stepping through a portal before the host no longer forge a duplicate maze - generation is requested from the server.
Maze resets with players inside now evacuate everyone home first instead of dropping them into the void.
Graves from maze deaths are relocated to the overworld graveyard reliably on every network topology.
The exit compass, avalor_tp_end and avalor_tp_grave now ask the server when the target is beyond your local view (fixes the compass going dark deep in 40x40+ labyrinths).
The overworld portal now sites itself on fresh dedicated worlds via the first client to visit spawn.
Fixed: sub-bosses spawned at ~40% health; Revenants lost their elite health entirely; crypt keys dropped at 2-4x the intended rate; the Warden could be lured away from its post.
[0.0.9]
Initial Public Beta release.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.