Valheim
Install with App

Details

Latest version
0.9.4
Last Updated
First Uploaded
Downloads
1.1K
Likes
0
Size
136KB
Dependants
ADDatHost Valheim hosting
30% off

Changelog

[0.9.4] - 2026-10-31

Added

  • [SilverVeins] OverDeepestHole (default -1, off), UnderGround (0.5) and FollowSlope (0): every piece of a silver vein within a pickaxe's reach, without bringing any vein up into sight. The game puts a vein 4 m under the ground in the Mountains, upright on slopes of up to 30 degrees: on a copy of the live world 23 of 117 veins had pieces less than 0.5 m over the deepest pit, and 18 stuck out of the ground somewhere. A vein is raised by what it needs, measured as copper is, but no further than leaves every vertex of it UnderGround under the lowest ground the locations around can leave; one that needs nothing stays as the game made it, one the game left out of the ground is not raised, and with FollowSlope one that still has pieces out of reach is tilted along its slope (not on ground flatter than 2 degrees) when that leaves fewer of them out of reach and none of it nearer the ground than UnderGround (one the game left nearer: no nearer than upright). At 0.5 / 0.5 / 30: 23 veins moved (7 raised 0.2-0.8 m; 16 that could not rise far enough upright tilted 19-30 degrees instead, one of them raised as well), none short, every vertex of each at least 0.64 m under the game's own ground (the five the game had left sticking out among them), nothing left after mining through the game's physics, before and after the save was loaded back (nothing to do then); the veins with a vertex out of the ground went from 18 to 13, those 13 untouched, as the game made them. 40 Mountain zones generated during the test got the same as they were generated, about 2 ms a zone; the rest took 0.16 s of work over 37 frames, the worst 6 ms. Back at -1 every vein stands as the game made it (one broken open since stays where it is).

Changed

  • The copper code now serves both kinds (CopperReach and CopperDeposits are OreReach and OreDeposits); copper comes out as with 0.9.3: on the copy of the live world 481 of 482 deposits the same. The other, in a zone generated during the test, stood beside a crypt the game had turned otherwise in that run, and so on other ground: 8 cm higher and 0.9 degrees less tilted, still at 0.5 m. The game turns a location as it generates the zone, by its own random generator, not seeded by the zone, so each run can turn it another way (a second run of 0.9.4 turned the crypt a third way, and put that deposit 5 cm and 0.7 degrees otherwise again); of the 208 locations of the zones generated during the test, 56 to 75 were turned otherwise between any two of the three runs, of the 2292 the world already had none.
  • The OverDeepestHole descriptions gave the wait near a player as 200 m; they now say what it is, as it always was: the zones a client loads its objects from, one zone wider.

Fixed

  • Switching OverDeepestHole off (-1) put the deposits back without a word in the log, since 0.9.1, unless one stood by a player's building or could not be measured: a batch was reported only when it measured or kept one, and the batch that puts them back measures none. It now reports what it put back too (... over the deepest hole (off, ...): 0 measured, 0 raised, ... lowered back ..., ... stood as the game turned them).

[0.9.3] - 2026-10-31

Added

  • [CopperDeposits] FollowSlope (default 0, off; needs OverDeepestHole on): a copper deposit tilted to lie along its slope, at most this many degrees. The game stands copper upright on slopes of up to 45 degrees, so the uphill side sank into the ground and the downhill side stood tall, its underside bare. Each deposit is turned until its up is the ground's (a plane fitted to the ground under it), keeping the game's own few degrees of tilt on top, and then raised by what it needs for every piece to reach the deepest pit, as before; on ground flatter than 2 degrees, and broken open, it stays as the game turned it. At 30 on a copy of the live world: 474 of 481 deposits tilted 2.5-30 degrees, a median 14; on slopes of 20-32 degrees the tallest pieces stand a median 5.7 m over the ground on the uphill third and 7.4 m on the downhill third, instead of 4.4 and 8.7. None short of the deepest pit, before or after the save was loaded back, nothing left after mining through the game's physics, 30 zones generated then tilted as generated; 1.3 s of work over 243 frames, the worst 12 ms. Back at 0 every deposit stands as the game turned it, within 0.07 m of its old height; at 0 nothing else changes from 0.9.2.

[0.9.2] - 2026-10-31

Changed

  • Location objects: a location's layout is read over frames. A pass used to read each layout in one frame, so the first pass after a start, which reads them all, stalled the server for as long as the biggest took: on a copy of the live world with every location listed ([LocationObjects] Locations = *), CharredRuins1 with its 6 places took 158 ms in one frame. Now each place is rolled, read and put back within one frame -- the game may place the same location meanwhile and must find its prefab as always -- and the rest, its parts and its slots, is done a few milliseconds a frame: CharredRuins1 68-116 ms of work over 10-13 frames, the worst 9-17 ms, and the first pass 1.2 s of work instead of 1.6 s, the worst frame 26-27 ms instead of 159 (later passes as before, 9-22 ms). A location's random parts are prepared once instead of for each place, a third of the work. What is read is the same: the 129,738 slots of the 6,620 places on that copy came out byte for byte as 0.9.1 read them, after the first pass and later. A layout of 30 ms of work or with a frame of 10 ms is logged with its worst frame and what it was doing then.

[0.9.1] - 2026-10-30

Added

  • [CopperDeposits] OverDeepestHole (default -1, off): every piece of a copper deposit within a pickaxe's reach. A pit goes 8 m down at most (the game keeps the ground within 8 m of the height it generated), and a piece wholly under that floor can never be hit: raised 4 m, 521 pieces in 262 of the 427 deposits on the live world still were, most on slopes. Each deposit is now raised by what it needs itself, for every piece to reach this far over the deepest pit, measured from its own pieces and the ground under them as the game generates it and the locations around level it, in every turn they can stand in and with every part they may spawn (past a few hundred pairings of turns, at the highest ground each can leave), and in the deposit's turn now and as the world's save brings it back; deposits in zones generated later are raised as the zone is generated. At 0.5 on a copy of the live world: 393 deposits raised a median 1.4 m further (at most 8 m) and 36 high enough already. Checked against the floor the game builds itself, with 52 more in zones generated then, none was short, before or after the save was loaded back, and mining them through the game's physics left no piece; the one exception stays by a player's building, 15 of its pieces under the floor. It took 0.9 s of work over 167 frames after the first pass (the worst frame 7.7 ms), and 3 ms for a zone generated now. A deposit a player's game may have loaded waits for a later pass, one within 20 m of a player's building stays, and -1 puts back down what it raised.

[0.9.0] - 2026-10-30

Changed

  • [Locations] Together: a location now regrows as one. Location objects used to wait on a clock and a rule of their own, so in a crypt the iron piles could come back while the chests and creatures did not, or the other way round. They are now part of their location: as soon as one thing in it has waited its AfterHours, everything used up or missing in it comes back at once, every restockable chest is restocked, and the doors a player can close by hand close (not those with a key, and not those that stay open once opened). Whatever holds a location back holds all of it, and the log says what, once a run (Held:).
  • A chest with something of a player's in it is restocked too. It counted as someone's storage and never came back, so a stone or a torch left in it kept it empty for good (8 of 1422 chests on the live world, in the end). What a player left stays in its slot and the loot takes the free slots, never joining their stack. A stack of the loot that a player put more of the same on stays the world's in the game; one holding more than the loot can roll at the world's resource rate counts as theirs. A chest left with only a player's things counts as used even if nobody has been near it since. [TreasureChests] KeepPlayersItems = false replaces those things with the rest.
  • A dungeon has two sides. A player's portal, ladder or workbench by the entrance on the surface used to hold the whole dungeon for ever. It now keeps back only what is on the surface there, and the interior comes back whole. A build or a tombstone inside still holds everything.
  • Which location an object belongs to: inside a dungeon, the location of its own zone, as a dungeon's rooms lie within the zone of the generator that built them. It used to be the nearest generator, which on a world with 4283 such objects was another dungeon's for 21 of them. On the surface, the camp or village whose room it stands by (within 8 m, and nearer than any location's centre), else the location whose ground it stands on.
  • The decisions of a pass run over frames, as the scan does: 9-23 ms the worst frame on a world of 864,000 objects, where the same decisions took 430-500 ms in one frame. A pass with the longer lists below costs about what the old one did.

Added

  • [CopperDeposits] RaiseMeters (default 0, the game's height): a copper deposit stands this much higher, in zones still to be generated and where it stands, unless it was broken open or a player has built within 20 m. The game sinks it so far that a median of 46 of its 130 pieces reach over the ground, the worst 18; raised 4 m, 88 and 62. The world is saved as soon as the deposits move, and a dry run leaves new ones at the height of those that stand.
  • [LocationObjects] Locations and LocationsExclude: location names instead of prefabs, * matching any run of characters. Every breakable part of them comes back with the rest of the location, also in the rooms of their dungeon or village: building pieces, treasure chests, props, torches, roots, rocks and nests. A chest that was broken comes back with the rest, filled; it no longer keeps away what stood beside it. One in [TreasureChests] ExcludePrefabs stays away, as the game would fill it. Measured on a world of 864,000 objects with Hildir_crypt,Hildir_cave,Hildir_plainsfortress,Crypt*,SunkenCrypt*,TrollCave*,MountainCave*: 570-780 ms of work a pass, 1.1-1.3 s the first after a start, which also reads the layouts.
  • The doors of a dungeon come back with it: a crypt's wooden doors, a sunken crypt's iron gates, a cave's hanging cloths and walls of ice. Its generator draws them as it goes and no layout says where one stood, so the plugin notes a door when it goes (door lines in the state file, saved at once), as part of the dungeon whose room lies nearest. One broken before this version is not known; it comes back only when [Zones] generates its zone again.
  • [LocationObjects] Prefabs can bring back what lies on the ground: jewels and coins (Pickable_ForestCryptRandom, Pickable_SunkenCryptRandom, Pickable_MountainCaveRandom, Pickable_DolmenTreasure, Pickable_Item), bones and meat (Pickable_ForestCryptRemains01 to 04, Pickable_MeatPile). A put-back one rolls what it is at once: the game rolls only on a machine that owns the object, and a player could otherwise find one with nothing in it.

Fixed

  • A location object counts as there only on its very spot, unless it moves by itself (a rock that falls, a blob of tar afloat on its pit). A gem taken from a heap did not come back while another of its kind lay within 1.5 m, as 218 of 469 in a sunken crypt do; the same went for mud piles, ice and crystals.
  • A put-back object keeps the size it was generated with: roots and ice in caves are scaled up to 3 times, and came back at the prefab's size.
  • A put-back building piece starts under snow where snow can lie, as the pieces the game generates do. It came back bare.
  • What the game sets on the ground (SnapToGround) was put back at the height of its layout, up to 4 m off the ground. It is now set on the ground the next time its zone is loaded, also after a restart.
  • A put-back building piece that came down by itself counted as fallen only for lack of support. Rain, snow, ash, lava and a wrong biome count too: such a piece does not come back to fall again.
  • Objects that remove themselves after a time (Destructible with a time to live) are no longer taken for location objects.

[0.8.11] - 2026-10-24

Added

  • [SurtlingCores] Prefabs, [TreasureChests] ExcludePrefabs, [DungeonMonsters] ExcludePrefabs and [Zones] ProtectedLocations are read again before every pass, like the rest of the config: a list edited while the server runs counts from the next pass, and the log says so. Enabled, the switches of the parts and [LocationObjects] Prefabs still take a restart.

Fixed

  • [LocationObjects]: a location or room whose layout could not be read (an exception while replaying it) ended the pass, and the next pass met it again, so nothing regrew until a restart. Such a layout is now skipped with a warning and its objects are left alone; the pass goes on. Found by an audit of the code; it has not happened on a live server.
  • [LocationObjects] ClearRemains: the remains of a listed object were recognised only as <name>_frac. What the game says the object turns into when it breaks (Destructible's spawn-when-destroyed, when that is a world object and not an item or an effect) counts too.

[0.8.10] - 2026-10-24

Fixed

  • [Zones]: each object the game makes again takes the place of the old one of its prefab standing there (within half a metre, 2 m up or down); it took the first one found within that reach, not the nearest. In a stack of the same piece, a stone tower's walls one above another or a guard tower's poles, the first one found could be the one above or below, and the old piece it was taken for was left standing beside its new copy, kept as "maybe a neighbour's". The pairs are now made nearest first. It happened where the old objects were not in the order the game makes them, as where [LocationObjects] has put pieces back (they go to the end of their zone's list): on a copy of the live world with the Fuling pieces of 0.8.9 put back, generating again the 10 zones they were in left 40 old pieces beside their copies with 0.8.9 -- 39 stone walls in four stone towers and a pole of a Fuling guard tower -- and none with 0.8.10; the two worlds differ in those 40 objects and nothing else. A piece listed in [LocationObjects] was removed as an extra at its next pass; anything else stayed.

[0.8.9] - 2026-10-24

Added

  • [LocationObjects]: a piece put back that falls for lack of support (anything of the list the game treats as breakable, WearNTear) is not put back again until one the game made stands in its place once more -- in practice when [Zones] generates its zone again; from then on it is put back as before. Without this it came back every AfterHours and fell at the next visit, its wood dropped each time. Seen through a second game patch, WearNTear.Destroy, applied only when [LocationObjects] is on at the start, and only where the server runs the piece (Dedicated Simulation). The state file keeps these as fell lines.
  • README, "Buildings of a camp or village": the walls, poles, roofs and stairs of Fuling villages, camps and stone towers as location objects, with the 16 prefabs of Valheim 1.0.20 to list. Tested on a copy of the live world with them added and the clocks run down: of 272 missing pieces 185 were put back, 83 waited near players' builds and 3 for a totem pole that had held them; the 177 of them in zones the game then generated again stood where it puts its own, all within a millimetre, none beside one standing. With a simulated player near a village, one of them (a hut's banner) fell, was not put back again, and stood again when [Zones] generated the village.

Fixed

  • [LocationObjects]: a piece of the list counted as standing when any object of its kind stood within 1.5 m of its place at any height, so of a stack of walls the one standing counted for those above and below it, and they were never put back. A piece now counts only on its own place: within 10 cm, at the same height (one the game settles on the ground after placing it, SnapToGround, at any height). Other objects keep the 1.5 m. On a copy of the live world with the Fuling pieces listed, 0.8.8 found 100 of them missing, 0.8.9 finds 272.
  • [LocationObjects]: the places of a location's objects were worked out from its rotation as the world save keeps it, up to half a degree short of the 22.5-degree step the game placed it at (ZDO.Save writes angles doubled and truncated: 225 degrees, read back from the rotation a hair under, is saved as 224.5) -- 0.1 m off at 11 m from the location's centre, 0.35 m at 40 m. The rotation is now taken to its step, as the zone reset already did. 113 of the 1773 locations of the live world were short, all of them placed at 225 degrees. In a test without this fix the 10 cm test above took 38 pieces standing in their places for missing: 8, walls of four stone tower ruins (StoneTowerRuins03), were put back 0.1 m beside them, the others waited only because players' builds were near. The objects of those 113 locations get new places, so the clocks of the ones missing there start again. A rotation more than a degree off a step (a location another mod placed) is taken as saved.
  • After a game update that changed a patched method (ZoneSystem.SpawnLocation, WearNTear.Destroy), the plugin would have warned that the part was switched on after the start, and a failed first patch skipped the second. Each patch is now tried on its own; an error says which, and the warning that the part stays off says why.
  • [LocationObjects]: of more objects on one spot than the layout has, the one the game made stays and one put back goes.

[0.8.8] - 2026-10-18

Fixed

  • Terrain regrowth stepped a zone again at once after the players had left it, however short a time ago the last step was: the time of the last step was dropped from the state in every pass that found the zone not idle (a player within PresenceRadiusZones), so the first pass after they left found no last step and stepped again, instead of waiting StepHours (24). A zone a player kept coming back to (a base) was eroded once for each time they went away for the idle hours, not once a day, and no step was written down for it. Found on the live world: the unprotected part of a player's moat (a base on the start island) had lost two steps in twenty hours -- every height change outside the workbenches' circles divided by 1.7 twice, those under 0.34 m gone -- and the state file held no step for those zones. Tested on a copy of the live world with the clocks run down (AfterHours 0.01, StepHours 0.5), one fake player visiting a zone between two passes: the old build stepped three zones (the visited one and two within PresenceRadiusZones) a second time within six minutes, the fixed one none of the 103 zones twice.

Added

  • [Terrain] WorkbenchRadius (48): ground within this many metres of a player's workbench is left as it is, whatever the workbench's own radius (10 m for piece_workbench) -- the distance that keeps a zone from being generated again ([Safety] PlayerBuildRadius). A base is built around its workbench and a moat, a levelled yard or a ramp dug around it mostly lies outside 10 m. Read at every pass, 0 gives the old behaviour. On the live world 4254 of 17300 modified vertices were open (not under any base object, 24.6 %), and the radius protects 41 % of those; the 386 open ones of the base above were all within 48 m of a workbench. Tested on a copy of that world: of its six zones none was stepped any more (before, 51 of 1484 height changes of the biggest went in one step) and the number of zones of the world with everything protected rose from 25 to 49.

[0.8.7] - 2026-10-18

Changed

  • [TreasureChests] restocks every container of the world that comes with a loot table of its own, not only the ones named TreasureChest_*: a shipwreck's chest (shipwreck_karve_chest, shipwreck_vikingship_chest), the granaries and timber halls of the Deep North (loot_deepNorth_Granary, loot_deepNorth_TimberHall) and the ancient chests of Morkhalla (Morkhalla_ChestAncient): 32 kinds instead of 27. Player-built chests have no loot table and stay out; ExcludePrefabs keeps any prefab out. (A Piece component is no sign of a built chest: the treasure chests have one too, which a first version of this change took for one and the test caught: 2 kinds instead of 32.) Tested on a copy of the live world: three emptied wreck chests, two meadow chests and two sunken crypt chests were each filled again from their own loot table.

Added

  • README, "For players who come later": what the game puts once and neither vanilla nor the zone reset brings back where new players need it -- the Dyrnwyn fragments of the three PlaceofMystery places of the Ashlands (placed once, so the zone reset never touches them), molten cores, black cores (Pickable_BlackCoreStand) and frost cores (Pickable_FrostCoreHanger), tar, and the idols of Hildir's Sealed Tower (goblin_trashpile) -- and the entries that bring them back ([LocationObjects] Prefabs, [SurtlingCores] Prefabs; no code, only config). Tested on a copy of the live world with those entries: 121 destroyed objects of those kinds (tar of a pit, molten core stands and Dyrnwyn fragments of PlaceofMystery, sulfur rocks, the trash piles of the Sealed Tower) were put back where they stood, no slot twice (tar floats, so it settles a little off its place; none of it was put back again), and the startup accepted the black core stand and the frost core hanger as pickables that stay in place when taken.

[0.8.6] - 2026-10-17

Added

  • An entry of [SurtlingCores] Prefabs may carry its own hours after a colon instead of the section's AfterHours: goblin_totempole:24 is the totem on a Fuling totem pole (villages, stone towers). Yagluth is summoned with three, and vanilla never puts one back on its pole; taken, it is back with the village's creatures and chests rather than sooner. The startup line lists each pickable with its hours. Tested on a copy of the live world, both ways round: three totems taken from poles in two Fuling villages and a stone tower came back while two surtling cores taken with them waited for their own :24, and with goblin_totempole:24 the cores came back while the totems waited.
  • README: "Boss items" -- what bosses are summoned with, where it comes from and which entries keep it from running out on a long-lived world: goblin_totempole:24, and in [LocationObjects] Prefabs Charred_altar_bellfragment (the altars of a Charred fortress, the only source of Fader's bell fragments), blackmarble_altar_crystal (the crystal altars of infested mines, the fragments of the Seeker Queen's key), Morkhalla_coal_pile_memorial and Morkhalla_firepit (memorial coal). Tested on the same copy: the bell altars broken in two Charred fortresses and six crystal altars in two infested mines were put back at their own places (0.00 m off), and so were all ten fire pits and coal piles broken in a Morkhalla room, three of them beside a bench or a training dummy (see Fixed).
  • A location object that is not put back because what held it is gone is logged once, with what held it.

Fixed

  • [LocationObjects]: an object of the list that is also in [SurtlingCores] Prefabs (hanging_hairstrands on the live server) never counted as standing: the scan sorted it as a pickable only. Every place of it looked empty, and one more was put on it each time AfterHours was up -- on the live world of 17 October 2026 there were 513 hanging_hairstrands on 149 spots, up to six on one. (Pickable_MountainCaveCrystal is in both lists there too, but it is not a non-respawning hide-when-picked pickable, so [SurtlingCores] ignores it: one stood on each of its 255 spots.) What stands is now noted apart from what kind of thing it is, and more objects on one spot (within 5 cm) than the location's layout has there are put right: the extra ones go, one not picked stays, where putting back could happen too (not near a player's build, in a zone the server has not loaded). Tested on the live copy with the live settings: the first pass removed the 364 extra ones on 115 spots, one stayed on each of the 149 spots, and none was put back again in the four passes after; no other prefab's count changed except by what was put back.
  • [LocationObjects]: two objects of the list could each count as what held the other up, so two fire pits side by side, both broken, waited for each other forever. Objects of the list hold nothing now.
  • [LocationObjects]: what holds an object up was picked from the location's layout among everything breakable (WearNTear) but looked for in the world only among buildable pieces (Piece), so an object beside something breakable that is not a buildable piece -- a Morkhalla bench or training dummy beside a fire pit, a green ground torch beside a scrap pile in a sunken crypt -- waited for it forever, though it stood. One test does both now (LocationObjects.Holds). On the live copy 12 scrap piles of one crypt waited for such torches; 11 came back, and the twelfth still waits: no torch stands where its stood.

[0.8.5] - 2026-10-13

Added

  • [Zones] RefreshNow (off): a one-off, for when the owner wants everything that nothing protects back at once. In the first pass after a start every visited zone nobody has been near for the last 30 minutes is generated again -- without IdleHours, GraceMinutes and the PerPass limit -- and the ground of every modified zone is brought back at once, paint too, whatever KeepPaved and KeepCultivated say. What a workbench or a ward protects, protected locations and the 4 m around players' pieces stay as they are. The setting switches itself off in the config when the pass is done, so the usual clocks apply again; it needs [Zones] Enabled and no DryRun.

[0.8.4] - 2026-10-12

Changed

  • Thunderstore package only: the plugin is licensed under the MIT licence (LICENSE, in the repository and in the package); the README says so. The plugin is the 0.8.0 DLL, unchanged.

[0.8.3] - 2026-10-12

Changed

  • Thunderstore package only (Sarkastic_gg/Resource_Regrowth): the README has badges and links (Discord, Patreon) and the package is listed in the "Deep North Update" section. The plugin is the 0.8.0 DLL, unchanged.

[0.8.2] - 2026-10-12

Changed

  • Thunderstore package only: the README and the description say that the plugin is recommended with Sarkastic_gg/Dedicated_Simulation. The plugin is the 0.8.0 DLL, unchanged.

[0.8.1] - 2026-10-12

Changed

  • Thunderstore package only (Sarkastic_gg/Resource_Regrowth): a new pixel art icon. The plugin is the 0.8.0 DLL, unchanged; a package's icon can only change with a new version number.

[0.8.0] - 2026-10-11

Added

  • [LocationObjects] ClearRemains (on): when a wanted object is put back, its fractured remains (<name>_frac, what the game leaves when a pile or rock is hit) within 1.5 m go with it. With Prefabs = Beehive,mudpile2 the iron scrap piles of sunken crypts come back where they stood, with the crypt's chests and creatures; without the cleanup the pile would stand twice (whole and as pieces to mine).

Changed

  • A player's building or tombstone holds back (PlayerBuildRadius) only what is on the same level: a base on the surface no longer holds back chests, creatures, cores and objects inside the dungeon below it (interiors lie 5000 m up), nor a tombstone inside a dungeon what comes back on the surface above it. Zones with a workbench are still never generated again.

[0.7.2] - 2026-10-10

Fixed

  • [Zones]: a big rock, ore deposit or tree the game makes again no longer comes back over a player's piece standing where it was mined out or felled. Besides the 4 m around every piece (2 m for small things), an object whose colliders' bounds reach within 2 m of a piece now counts as beside it: the game's new copy goes and the old state stays. Measured in the game with rays: of 329 rocks around one mountain spot, 38 cover the ground farther than 4 m from where they stand, a mountain rock up to 23 m. Tested on a copy of a live world with players' things far from any workbench (a chest with items, a sign, a cart, a tombstone, a carried sword on the ground, a tamed wolf, a tagged portal, a chest put 4.9 m from a mined-out mountain rock's centre, inside its collider's bounds): after the reset every one stood where it was with its data unchanged, the zone's ground record kept its bytes, and the rock 0.7.1 brought back there stayed away.

[0.7.1] - 2026-10-10

Changed

  • [Zones]: only a workbench (in the zone or within PlayerBuildRadius) keeps a zone as it is. Cultivated ground, paved ground and the trees players planted no longer do: away from a workbench they go with the reset like the rest of the ground. A zone with players' pieces in it (crops among them) still keeps its ground record.

[0.7.0] - 2026-10-10

Changed

  • A treasure chest holding anything that has been in a player's bag is someone's storage and is never restocked (it used to be emptied and filled afresh like any chest a player had been near).

Added

  • [Zones] (off by default, DryRun on by default): a zone players have been in is generated again by the game itself once nobody has been near it for IdleHours (72): trees, rocks and ore deposits, bushes, pickables, the location with its buildings, chests, spawners and dungeon, and the ground -- as if no player had ever been there. Vanilla never brings back a felled tree, a mined deposit or a house pulled down. In one frame the zone is marked not generated, its location not placed, and ZoneSystem.SpawnZone runs again in ghost mode; every object the game makes then replaces the old one of its prefab standing in its place (within half a metre), in the zone or over its edge, and what is left over of what only the zone itself makes (vegetation, stumps, logs, fractured rocks, wild creatures, birds, fish, items lying about, the ground's record) goes. A location gets back the rotation it had: the game draws it from an unseeded random number, so it is read from the location's proxy (rounded to the game's 22.5-degree step, as the save truncates Euler angles to half a degree) and given back by a prefix on ZoneSystem.SpawnLocation -- the plugin's first game patch, applied only with Zones switched on. Players' things are never deleted and stay where they are (pieces incl. portals, ships, carts and crops; tombstones; items a player has carried; tamed creatures; the world's chests, barrels and stands holding something of theirs -- the old one stays, the new copy goes); beside their pieces and tombstones nothing changes (4 m, 2 m for small things), and a zone with their pieces keeps its ground record. Never generated again: zones with a workbench in them or within PlayerBuildRadius (a base), cultivated ground or paved ground outside the location, zones where players planted saplings, protected locations (ProtectedLocations, plus every location the game places only once, and what of them reaches into a neighbour), zones loaded on the server or next to one that is, and the first GraceMinutes (30) after a start. A generation that fails or throws is undone: nothing old is deleted before the game has made the zone again. At its first run every zone generated so far counts as visited, and nothing is generated again before IdleHours from then; presence is now kept for the longer idle time (also with Zones off) and only moves forward (presencesince in the state); at most PerPass zones per pass, one per frame, a zone that cannot be done now waiting an hour.

Tested on a copy of the live world (9 October) with every zone due at once: 1156 of 1190 zones were generated again, 0 exceptions, about 8 ms of work per zone; 34 were kept (19 at a workbench, 8 fields, 6 protected locations, 1 with players' saplings); all 663 objects of players' stayed exactly where they were (prefab and position to the centimetre); all 263 locations came back with the same rotation and position and all 27 dungeons with the same rooms (the first tries lost five crypts and a troll cave's interior to guessed ownership and reused ZDO objects, and changed three dungeons' rooms through the half-degree truncation -- all fixed before release); zones without a location matched a fresh world of the same seed in 41 of 45 changed cases; objects players had removed came back (rocks, trees, obsidian and copper deposits, beehives, bone piles). A dungeon generation made to throw was undone: the zone and its neighbours stayed as they were and resets stopped. With the defaults, the first run counted all 1190 zones as visited and generated none (72 h to go). A review by three independent readers found that the world's chests holding players' things, trees grown from players' saplings, a failed generation (no undo), a trader reaching into a neighbouring zone, items the world placed but nobody loaded yet (read as carried), presence forgotten while Zones were off, wasted per-pass slots and switching Zones on without the patch were not handled; all fixed above.

[0.6.0] - 2026-10-09

Changed

  • A location regrows as a whole ([Locations] Together, on by default). Players found that a burial chamber gave its surtling cores back after 10 hours while its chests and draugr stayed gone (24 hours, each on its own clock). Every object now belongs to its location -- inside a dungeon to the dungeon its generator built and the location above it, so interior and entrance are one; a troll or bear cave by its interior radius; on the surface the location it stands in -- and as soon as one object's clock has run its category's AfterHours, everything used up in the location comes back at once and every chest in it is restocked. The safety conditions apply to the whole location: nobody near any of it for IdleHours, none of it near a player's build, none of it loaded.
  • Treasure chests are restocked whether they were emptied, partly looted or not touched: whatever is left in them is replaced by fresh loot from their own table. A chest left with a few feathers never came back before. What a player took cannot be told from a chest, so a chest's clock starts when a player is first near it after it was last restocked (or when it is seen empty). Player-built chests are never touched, as before.
  • Dry runs also list the locations still waiting, with what is used up in them and when they are due.

Tested on a copy of the live world (9 October, 19:21) with the live state: the 37 locations with something used up grouped correctly -- burial chambers with their cores, chests and skeletons inside, troll caves, ruins, farms, houses -- and with every wait set to zero 24 locations came back whole: 14 cores, 45 spawners and 33 chests, 14 of them empty and 19 with leftovers, all with fresh loot; the 3 empty chests within 48 m of a player's build stayed empty.

[0.5.1] - 2026-10-07

Changed

  • Renamed to Sarkastic.gg Resource Regrowth: the community moved from sarkastic.eu to sarkastic.gg. The DLL is now SarkasticGG_Resource_Regrowth.dll; delete SarkasticEU_Resource_Regrowth.dll from BepInEx/plugins when upgrading. The plugin GUID, the config file sarkasticeu.resource_regrowth.cfg and the state file are unchanged, and nothing else is.

[0.5.0] - 2026-09-28

Added

  • [LocationObjects] (off by default): destroyed objects that a location or a village generated are put back where they stood -- Prefabs = Beehive, the wild beehives of abandoned houses, bear caves, ruined towers and meadow villages. Unlike the other categories this creates objects. The place is exact: every generated location leaves a proxy with its position, rotation and seed, and every village or camp generator keeps its buildings' positions and rotations; objects that spawn by chance are decided by replaying the game's roll from that seed. Checked on a copy of the live world: 169 hive places, 47 of them with a hive by the replay, all 29 standing hives on those places (0.00 m apart in height too) and none elsewhere. Of the 18 missing, 14 would be put back, 3 lie near player builds and 1 has lost the house that held it -- such a hive is not put back, so nothing hangs in the air (pulling down another house for the test kept that one out too). The put-back hives survived a restart and the server instantiated them where the originals hang, 4.08 m above the floor under the roof. Same rules as the rest: AfterHours (48) since first seen missing, IdleHours, PlayerBuildRadius, and the zone must not be loaded.
  • The first scan after a start reads the layouts of the world's locations and village buildings through the game's own asynchronous loader: about 0.3 s of work over 45 s, no frame over 100 ms (loading them directly cost 9.9 s and frames up to 440 ms). Later scans only read new ones.

[0.4.0] - 2026-09-13

Added

  • [Terrain]: dug, raised, levelled and paved ground slowly returns to the land's own shape once the area has been left alone (IdleHours, then AfterHours after the zone's ground was first seen modified, then a step every StepHours). Each step divides the remaining height change by Divider and drops it below MinDelta; paint goes back to nothing once the height under it is back, paved and cultivated ground excepted. Ground around player base objects (the game's own PlayerBase areas: workbench, forge, beds, fires ...) and wards is left alone by the object's own radius, so a base that creatures broke protects nothing any more. The data is written in the game's format (TerrainComp.Save); verified on a local 1.0.12 server: all 38 modified zones of a copied live world round-trip byte-identically, and a step reduced e.g. 242 to 230 modified vertices with 587 to 230 painted ones, 60 vertices near a base left untouched.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.