1.)Complete overhaul of job/task system
This includes integrating job priorities, job distance, allowing jobs to be taken by multiple dwarves, multi-hauling, multitasking, allowing sufficiently important jobs to override sleep/eating/drinking, and how long the job has gone undone. No more miners picking the furthest possible designated square to dig, or peasants hauling an item, picking another at random on the far side of the fort, then another one at random, again at the opposite side of the fort. Also, replace danger suspensions with delays. Delays are good because they wear off without player intervention. Also, newly added jobs (like Pull Lever) would attempt to be added into the job queues of every dwarf, according to the job priority index. This would also make most of the burrows arc unnecessary.
Dwarves would pick jobs by a simple equation, such as Priority_Index = dwarf_priority_for_this_job_type * base_priority_of_this_job * global_priority_level_for_this_job_type * ( time_importance * ( base_time_level + time_undone ) ) / ( ( distance + job_duration ) * number_of_dwarves_attempting_this_job )
This would be expanded to a queue by having the index calculated according to the dwarves future location after the completion of the previous job. A job is inserted into the queue as soon as it has higher priority than the next job in the list does. At this point, the rest of the queue is discarded and the dwarf seeks jobs to fill it as above. The job duration also includes the traveling time spent hauling job items. If a new job attempts to get added to the queue that has priority potentially exceeding the active job, the active job's priority needs to be recalculated according to new distance and job_duration values determined by the jobs current completion level. Also, if a job is completed by another dwarf, it needs to be dropped from the queue. Sleeping, eating, ect. can now be counted as ordinary jobs, though with high base priority. Things like hauling stone could have a low base_priority. In general, the base_priority represents a typical importance level for the job under normal circumstances, with global_priority_level_for_this_job_type and dwarf_priority_for_this_job_type set by the player.
Obviously, it's not practical to calculate the exact distance for jobs, so approximations need to be used.
Delays work simply by removing the given job until they delay counter reaches 0. The counter could be set to different values depending on the severity of the delay cause. Jobs would be considered for delay the moment they become a dwarf's active job, with the location of the starting point of the job proper, and of each item needed for the job considered to be the dwarf's position as far as danger checks are concerned. Thus dwarves wouldn't need to run outside before realizing that the item they want to haul is surrounded by goblins, or to realize that it's forbidden for them to go outside in the first place.
2.) Dwarven self preservation
No more dwarves running in random directions if they see a threat! Especially not random directions that happen to be straight toward the threat... Instead, they need to set a path toward the nearest refuge.
3.) Resizable viewport.