Tune units to perform underrepresented job roles in your fortress.
dwarf-op examines the distribution of skills and attributes across the
dwarves in your fortress and can rewrite the characteristics of a dwarf (or
group of dwarves) so that they are fit to excel at the jobs that your current
dwarves don’t adequately cover.
It uses a library of profiles to define job classes, and generates dwarves with random variation so each dwarf is unique.
dwarf-op can also be used in a mode more similar to assign-profile, where
you can specify precisely what archetype you want a for given dwarf, and
dwarf-op can generate a random dwarf that matches that archetype.
dwarf-op --list <table>
dwarf-op [--select <criteria>] <commands>
dwarf-op --select unoptimized --clear --optimize
Transform newly arrived dwarves into the workers that your fort needs most.
dwarf-op --select all --clear --optimize
Rebalance the distribution of skills and attributes across your units.
dwarf-op --select names,Einstein --applytypes genius3,intuitive3,creative2,spaceaware3
Make dwarves with Einstein in their name into geniuses capable of surpassing the real Einstein.
dwarf-op --select waves,2,3,5,7,11,13 --applyjobs MINER
Make all migrants in waves 2, 3, 5, 7, 11, and 13 very good miners.
dwarf-op --select jobs,Stoneworker --applytypes fast3,strong5
Boost the speed and strength of your masons so they can carry boulders to their workshop faster.
Note that dwarves whose name or profession starts with
considered “protected”, and will not be matched by the selection criteria
options below unless specifically noted.
You can prepend the letter
p to any option to include protected dwarves in
your selection. For example, to truly select all dwarves, specify
Selects only the in-game highlighted dwarf (from any screen), regardless of protection status. This is the default if no
--selectoption is specified.
Selects all dwarves.
Selects dwarves with user-given names.
Selects dwarves without user-given names.
Selects dwarves with custom professions. Does not include optimized dwarves.
Selects dwarves that have been previously optimized by
Selects any dwarves that have not been previously optimized by
Selects protected dwarves.
Selects unprotected dwarves.
Selects any dwarves who have the
DRUNKprofession, including those who have been zeroed by the
Selects any dwarf with <name> anywhere in their name or nickname. This option ignores protection status.
Selects any dwarves with the specified custom professions.
Selects dwarves from the specified migration waves. Waves are enumerated starting at 0 and increasing by 1 with each wave. The waves go by season and year and thus should match what you see in list-waves or Dwarf Therapist. It is recommended that you
--showthe selected dwarves before modifying them.
Forget which dwarves have been optimized. However, if you reload an existing save, the optimization list will be reloaded.
Forget which dwarves have been optimized and remove the saved optimization data.
--list <table name>
Show the raw data tables that
dwarf-opuses to make decisions. See the Data tables section below for which tables are available.
Select a specific subset of dwarves that the specified Command options should act on.
Lists the selected dwarves. Useful for previewing selected dwarves before modifying them or looking up the migration wave number for a group.
Checks for skills with a rating of
<value>and removes them from the dwarf’s skill list.
Zeroes the skills and attributes of selected dwarves. No attributes, no labors. Assigns
Clears attributes of selected dwarves, then rerolls that dwarf based on their jobs. Run
dwarf-op --list attrib_levelsto see how stats are distributed. If
inclusiveis specified, then attributes are not cleared, but rather will only be changed if the current reroll is better. This command ignores dwarves with jobs that are not listed in the
Performs a job search for unoptimized dwarves. Run
dwarf-op --list job_distributionto see how jobs are distributed.
Applies the listed jobs to the selected dwarves. Run
dwarf-op --list jobsto see available jobs.
Applies the listed professions to the selected dwarves. Run
dwarf-op --list professionsto see available professions.
Applies the listed types to the selected dwarves. Run
dwarf-op --list dwf_typesto see available types.
Renames the selected dwarves’ custom professions to the specified name.
The data tables that
dwarf-op uses are described below. They can be
dwarf-op --list <table name>.
Defines thresholds for each column of distributions. The columns should add up to the values in the thresholds row for that column. Every other row references an entry in the
Defines stat distributions for both physical and mental attributes. Each level has a probability (p-value, or p) which indicates how likely a level will be used for a particular stat, e.g. strength or spacial awareness. The levels range from incompetent to unbelievable (god-like) and are mostly in line with what the game uses already.
dwarf-opadds one additional level to push the unbelievable even higher, though.
In addition to a bell shaped p-value curve for the levels, there is additionally a standard deviation used to generate the value once a level has been selected, this makes the bell curve not so bell shaped in the end. Labors do not follow the same stat system and are more uniformly random, which are compensated for in the description of jobs/professions.
dwarf-op’s nameable jobs. Each job is comprised of required professions, optional professions, probabilities for each optional profession, a ‘max’ number of optional professions, and a list of types (from the
typestable below) to apply to dwarves in the defined job.
These are a subset of the professions DF has. All professions listed should match a profession dwarf fortress has built in, however not all the built-ins are defined here.
Each profession is defined with a set of job skills which match the skills built into Dwarf Fortress. Each skill is given a value which represents the bonus a dwarf will get for this skill. The skills are added in a random order, with the first few receiving the highest values (excluding the bonus just mentioned). Thus the bonuses are to ensure a minimum threshold is passed for certain skills deemed critical to a profession.
These are a sort of archetype system for applying to dwarves. It primarily includes physical and mental attributes, but can include skills as well. If it has skills listed, each skill will have a minimum and maximum value. The chosen values will be evenly distributed between these two numbers (inclusive).
Job specifications from the
jobstable add these types to a dwarf to modify their stats. For the sake of randomness and individuality, each type has a probability for being additionally applied to a dwarf just by pure luck. This will bump some status up even higher than the base job calls for.
To see a full list of built-in professions, skills, and attributes, you can run these commands:
devel/query --table df.profession
devel/query --table df.job_skill
devel/query --table df.physical_attribute_type
devel/query --table df.mental_attribute_type