I've been trying to put my head to the concept of how to abstract the worldgen process without having an actual loss in the actual detail of the legends and adventure modes.
This thread includes some science on the problem areas, and we have identified two major areas of problem to be werecritters and the trading that takes place in the new towns.
Toady appears to be currently working on trying to
fix the problem of the slow worldgen, so this may be a chance to help and make a useful suggestion to improve game performance.
I want to try to get people brainstorming and critiquing ways to perform abstraction without a loss in actual meaningful data, including the ability for unusual events to occur in worldgen or for things like a dwarven dresser to appear in a human town because of a trade that took place 180 years before the adventurer was born.
First off, I want to suggest that werecritter attacks should have a random chance to trigger the deployment of a wave of monster-hunters from the victimized site. This means promoting a nameless nobody to historical figure status if need be to deploy them.
The problem with werecritters is that they multiply exponentially, are capable of rampaging 3 times in a year, and eventually wind up with dozens of lairs around any given town and hundreds of attacks on a town per year.
Setting up a counter-balancing force that only becomes active when the werecritters themselves are numerous is the most natural way of counterbalancing an overwhelming force, until it reaches a nice stable terminal velocity.
Secondly, we need a sanity check on the amount of random totem crap a single individual can own and wear. The problem is especially apparent on werewolves, but even random historical soldiers must look like some sort of voodoo shaman they have so many whatever-man bone totems hanging off their neck, fingers, wrists, etc.
Keeping only the 10 or so most valuable or important totems keeps things sane.
Thirdly, werecritter rampages (and rampages in general) need to be much less detailed. We don't really need 10,000,000 lines in Legends Mode recording the same two lines over and over of a werecritter attacking some random civilian who manages to run away without getting harmed at all. We can make do with much less rampages in general that result in many more actual maimings or kills, since those are the only rampages that matter, and it seems as though something like half of these rampages wind up doing nothing, and most of the rest only kill a chicken.
Fourthly, the same needs to be done for buildings in worldgen.
There is a bug involving "abandoned shops" getting overrun by tables and driving residents out because there is no longer room for them. This is because shops apparently actually have their inventory tracked during all of worldgen, and when tables are built to display goods, they are never removed, even when shops are abandoned or the previous owners die. This winds up filling the shop with tables until it becomes completely unusable, and whole buildings are abandoned as table graveyards.
While having a cleanup would be nice, there's an even simpler solution to this - do not even stock a town's shops until the end of worldgen. There is no reason we need to be keeping track of the number of display tables in legends mode, and they only need to be genned when the world is ready for the player to start exploring.
This brings me to the next point...
Finally, we do not need to track overall totals of every type of material.
Seriously, consider how many different types of creature or individual stones we have. Now consider all the different kinds of leather created from that, and then the different kinds of leather armor and different prepared brain tallies for each creature, and the different numbers of chests made of each type of stone...
Now consider those tallies get traded around in worldgen, and you start to see why trading is such a bloater of your worldgen.
What the game could use instead is a general pool of what resource types are available to a given region, and what sorts of craftsmen are working there to generate a probability pool for each type of item, its quality, and its material.
Instead of trading individual items, what happens is that the trading pools get linked, and a small amount of everything that the trading partners have access to can be transferred between one another. This means that if 10% of goods are available for trade, and the probability pool of one town includes materials or finished goods that are not available in another town that can trade with the first town, the second town may have a limited access to the probability pool of the first town.
This limited access to the probability pool can then be further traded, although with much more limited access unless something like a caravan is set up for the specific request of some good that is rare and useful enough to make such a thing viable.
The game will have to record when craftsmen die or when towns lose access to a certain type of material or lose connection to a trade partner to state that certain types of items (like the probability of getting a masterwork silver craft from a dwarven civ) so that there can be a small probability of finding something like a master craftsman that created the best silver crafts in history who lived 300 years ago, and whose crafts are spread within the region of the trade routes that existed in that particular time.
Because all that is being traded is a probability of a given set of items, it should be faster to handle the fungible nature of what is actually being traded, and the actual content of the warehouses of any given town or the actual furniture of a town don't need to be actually generated until the first time you actually walk into a town. (You just need to have a controlled, saved seed for the RNG to generate the positions of the stuff.)