Currently decay is only applied to active (loaded) parts of the map. This leads to the well known problems with trees and bushes not regrowing and abandoned but remote (thus not loaded) player build structures not being culled and keep littering the landscape. Hence this proposal to make the world nicer and longer lived:
1) When saving map sections the ingame timestamp should be also stored. On loading them the engine should not simply skip time for that tile to the now-and-here but internally fast-forward through what would have happened decay wise, taking dwindeling authority for claims (protecting stuff) into account. Containers destroyed by decay would spill their contents normally but with the timers (that get attached to on-ground items to determine when they will despawn) adjusted to the virtual moment in the past when the simulated decay hit stroke, leading to them vanishing correctly as if they had lain around for the time.
2) Hearth fires should also degrade when not used for a while and turn into normal fires that are subject to normal decay. The server should still track the location with the character, enabling to spawn at the original HF location in case it is still accessible by the character (empty tile or with unlit fire & not covered by a claim the character lacks permission to). Destruction of an active HF by a player should still work as-is and default to wilderness spawn.
3) Pavement tiles could (when being unclaimed) slowly accumulate decay till reaching a threshold and then revert back to normal ground. Traversing them could reset the counter so that only inactive areas get affected by this.
4) Trees could go through a lifecycle to make the world more alive, one approach could be to trigger a variation of Conway's Game of Life rules through decay hits to make this happen.
This together would walk abandoned areas through matching states of oblivion, massage trees and bushes to (re)grow (as if a character would have idled next to them to keep the map alive) and cull the forsaken random Hearth Fires and player build stuff all over the world to transform it slowly back to a pristine state, given enough time.
Ideas to make this technically feasible without bogging down the server:
- The code to spill container contents should detect that it is running in fast-forward catchup-to-now mode and simply skip instantiation of items whos timer would expire before now().
- To avoid excessive runtime the code could scale the weight of decay hits for cases of longer inactivity, so less individual decay hits would need to be applied to the area while being subjected to the same cumulative amount of decay.
- Map areas could get a flag to track player based modification (placing objects, taking branches/chopping trees, digging), could be a simple counter that is set to a (reasonable) value and reduced with every decay hit that 'misses' (dosn't change stuff) but reset on decay hitting stuff (soil changes, also gobjs protected by a claim). This would lead to areas that are not changed by decay (like pristing wilderness areas that are not interacted with) being excempted from further decay until a player gives a reason to apply it again.