How do you efficiently manage chains of tasks in Dwarf Fortress?
I'm a beginner at Dwarf Fortress. I was just about keeping on top of things, until my first wave of migrants arrived. Now I have 15 dwarves to keep track of, and my previous strategy of micromanaging each dwarf is not scaling up. In particular, I'm having problems with "chains" of tasks, where something in the chain goes wrong, and the dependent job gets cancelled or suspended.
For example, I would like to be continually brewing ale, but occasionally I run out of barrels, either because the carpenter wandered off, was doing something else, or ran out of wood. When this happens, my dwarf gives up on brewing and moves on to other things. A similar thing happens regularly with potash production and food preparation.
How can I efficiently manage these chains of dependencies? Are there any strategies, or built-in mechanisms I've not learnt about that I can apply to relieve some of the micromanaging burden?
I would suggest using a manager noble and the management screen (j, m) where you can queue up tasks. I find it useful to do thinks like:
- Queue 15 barrel
- Queue 15 brew drinks
And jobs that are managed are automatically re-assigned if they fail for any reason including lack of resources. So in this case the brew drinks would be re-assigned until the barrels are available to complete them.
Note that these tasks will process in parallel.
The new (in 0.43.4) expanded job management system gives you several options to do this, via setting conditions on managed jobs.
Among other things, you can set a job to check before queueing if:
- Another job has first been completed;
- Item count of given items does is higher (or lower) than X number (shortcuts exist for both reagents and product, so if for instance you want to make marble blocks 10 times if and only if there are at least 40 units of marble stone available and less than 60 marble blocks unused, that's possible); You can also specify to make more pots or bins if there are less than X empty bins available via the 'type' conditional modifier.
Furthermore, you can set a job to repeat and recheck conditions once a day, once a week, once a month or once a year.