- v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
- Use this page to report any issues related to the migration.
Utility:Dwarf Therapist/Addons Repository
Recent version of Dwarf Therapists include a very large set of customizable tools for managing your dwarves, namely custom roles, custom professions, custom grid views, filter scripts, and optimization plans, which greatly enhance the user's ability to manage their fort in a well-optimized, pain-free manner. This page serves as a repository for packaged exports of custom definitions for these tools, created by other players and made available for other users here. This page is only meant to serve Splinterz's current fork of Dwarf Therapist; earlier versions of the utility did not yet implement many of the features described here. If you need help understanding what's documented on this page, or would like to learn how to write Dwarf Therapist customizations yourself, refer to the Dwarf Therapist User Guide. All exports should be hosted at the Dwarf Fortress File Depot.
You are encouraged to standardize the upload format to "Dwarf Therapist Export---<Package Name>".
Packages
Export packages are ZIP or other archive files containing a set of differing customizations all meant for a single purpose.
Military Starter Kit
|
Custom Professions
Chesh05's Professions
|
Grid Views
Grid views are the main list view in Dwarf Fortress they are accessible via the tabs at the top of the list view (Labors, Military, Social, etc).
Compact Labors View
|
Masterwork Dwarf Therapist
Highly customized version of Dwarf Therapist for use with Masterwork dwarf fortress. It uses the same binary build as Splinterminds, just uses a new .dtg (default grid view) as well as a .ini file that covers name changes for Masterwork. http://www.bay12forums.com/smf/index.php?topic=132010.0
Filter Scripts
Filter scripts are simple commands that determine what dwarves to show in the main DT window. For example, a "military only" filter script would hide all the non-military dwarves. It is like a "search" for your dwarves.
Pending Changes
Displays only those dwarves with pending changes.
Pending Changes |
---|
d.is_labor_state_dirty(00) ||
d.is_labor_state_dirty(01) ||
d.is_labor_state_dirty(02) ||
d.is_labor_state_dirty(03) ||
d.is_labor_state_dirty(04) ||
d.is_labor_state_dirty(05) ||
d.is_labor_state_dirty(06) ||
d.is_labor_state_dirty(07) ||
d.is_labor_state_dirty(08) ||
d.is_labor_state_dirty(09) ||
d.is_labor_state_dirty(10) ||
d.is_labor_state_dirty(11) ||
d.is_labor_state_dirty(12) ||
d.is_labor_state_dirty(13) ||
d.is_labor_state_dirty(14) ||
d.is_labor_state_dirty(15) ||
d.is_labor_state_dirty(16) ||
d.is_labor_state_dirty(17) ||
d.is_labor_state_dirty(18) ||
d.is_labor_state_dirty(19) ||
d.is_labor_state_dirty(20) ||
d.is_labor_state_dirty(21) ||
d.is_labor_state_dirty(22) ||
d.is_labor_state_dirty(23) ||
d.is_labor_state_dirty(24) ||
d.is_labor_state_dirty(25) ||
d.is_labor_state_dirty(26) ||
d.is_labor_state_dirty(27) ||
d.is_labor_state_dirty(28) ||
d.is_labor_state_dirty(29) ||
d.is_labor_state_dirty(30) ||
d.is_labor_state_dirty(31) ||
d.is_labor_state_dirty(32) ||
d.is_labor_state_dirty(33) ||
d.is_labor_state_dirty(34) ||
d.is_labor_state_dirty(35) ||
d.is_labor_state_dirty(36) ||
d.is_labor_state_dirty(37) ||
d.is_labor_state_dirty(38) ||
d.is_labor_state_dirty(39) ||
d.is_labor_state_dirty(40) ||
d.is_labor_state_dirty(41) ||
d.is_labor_state_dirty(42) ||
d.is_labor_state_dirty(43) ||
d.is_labor_state_dirty(44) ||
d.is_labor_state_dirty(45) ||
d.is_labor_state_dirty(46) ||
d.is_labor_state_dirty(47) ||
d.is_labor_state_dirty(48) ||
d.is_labor_state_dirty(49) ||
d.is_labor_state_dirty(50) ||
d.is_labor_state_dirty(51) ||
d.is_labor_state_dirty(52) ||
d.is_labor_state_dirty(53) ||
d.is_labor_state_dirty(54) ||
d.is_labor_state_dirty(55) ||
d.is_labor_state_dirty(56) ||
d.is_labor_state_dirty(57) ||
d.is_labor_state_dirty(58) ||
d.is_labor_state_dirty(59) ||
d.is_labor_state_dirty(60) ||
d.is_labor_state_dirty(61) ||
d.is_labor_state_dirty(62) ||
d.is_labor_state_dirty(63) ||
d.is_labor_state_dirty(64) ||
d.is_labor_state_dirty(65) ||
d.is_labor_state_dirty(66) ||
d.is_labor_state_dirty(67) ||
d.is_labor_state_dirty(68) ||
d.is_labor_state_dirty(69) ||
d.is_labor_state_dirty(70) ||
d.is_labor_state_dirty(71) ||
d.is_labor_state_dirty(72) ||
d.is_labor_state_dirty(73)
|
Ramblurr's Filter Pack
A small collection of filter scripts useful when using the labor optimizer.
Ramblurr's Filter Pack |
---|
Military
d.squad_id() >= 0
Nobles
d.noble_position()
Non-Mil
d.squad_id() < 0
Non Noble
!d.noble_position()
Non-Mil and Non-Noble
!d.noble_position() && d.squad_id() < 0
Not Missing Limbs
!d.has_health_issue(31,0) && !d.has_health_issue(31,1)
Missing Limbs
d.has_health_issue(31,0) || d.has_health_issue(31,1)
|
Thistleknot's Filter Pack
I pretty much use the 1st three every migrant wave. I use an optimization plan to single out militia dwarfs (ranged and melee) to weaving (weapon, melee) and alchemy (archers, i.e. crossbowdwarfs).
Then I run the second script to see who rates high for noble roles, and pick them
Then I run the 3rd to apply a labor optimization plan.
Thistleknot's Filter Pack |
---|
1. Not Injured/Missing Limb && Not Cursed (Used to find military candidates)
d.current_job_id()!=52
//not missing limbs
(
(
!d.has_health_issue(31,0) &&
!d.has_health_issue(31,1))
//OR
||
!d.has_health_issue(31,-1)
)
)
&&
d.curse_name() == ""
2. Non military && Not Injured && Not Cursed (Used to find noble candidates)
d.squad_id() < 0
&&
d.current_job_id()!=52
&&
d.curse_name() == ""
3. Non Military, Non Noble, Not Injured && Not Cursed (Used to apply optimization plan to workers, I always enable hauling on them as well)
!d.noble_position()
&&
d.squad_id()<0
&&
d.current_job_id()!=52
&&
d.curse_name()==""
Military
d.squad_id() >= 0
Noble & Non_military
d.noble_position()
&&
d.squad_id()<0
|
ResMar's "Working Class Dwarves" / Military Recruitment Availability Filter
This is the large filter from the Dwarf Therapist User Guide by ResMar. It is explained in Chapter IV's "Writing Complex Scripts" section.
Here is an explanation of the characteristics it selects for:
This filter is designed to show dwarves that are available for full-time assignment to useful tasks, such as military recruitment. These so called "working class dwarves" will meet the following requirements:
- They have all hauling labors enabled. This is one of the most apparent indicators of a “working class” dwarf, but it’s nowhere near exclusive.
- They don’t have a nickname. Assuming you follow the advice given in “Assigning Nicknames”, nicked dwarves have already been dedicated to something.
- They have the masonry and/or stone detailing labors enabled, but are never above “adequate” skill in the former (since actually building stone blocks is assigned to dedicated masons), and never above “competent“ in the latter (I consider “skilled” the breaking point for when an engraver is actually worth his salt, and should be taken out of the working-class pool).
- They are not enlisted in the military (at least, not permanently). At least in my fortress, once a crossbowdwarf, always a crossbowdwarf slash hunter.
- They don't have certain “key” labors that are handled by dedicated dwarves enabled (mining, carpentry, woodcutting, stonecrafting, cooking, brewing, any of the metalsmithing tasks, either of the jewelry tasks, and clothesmaking). The precise composition of this list may vary somewhat for you, but most players learn to dedicate certain tasks to certain dwarves to maximize results very quickly.
- If they are skilled in certain useless or niche tasks (animal caretaking, small animal dissection, fish dissection, bee keeping, wax working, soap making) they have those tasks enabled. No one creates extra work for themselves by actually turning these off, at least not until you want this dwarf doing something for you.
Available Working Class Dwarves Filter |
---|
// hauling test
(d.total_assigned_labors(true) - d.total_assigned_labors(false) == 16) &&
// masonry and stone detailing test
(((d.labor_enabled(13) == true && d.labor_rating(13) < 3) ||
d.labor_enabled(13) == false) || ((d.labor_enabled(12) == true &&
d.labor_rating(12) < 4) || d.labor_enabled(12) == false)) &&
// nickname test
(d.nickname() == "") &&
// military duty test
!d.active_military() &&
// key dwarf test
(!d.labor_enabled(47) && !d.labor_enabled(48) && !d.labor_enabled(29) && !d.labor_enabled(11) && !d.labor_enabled(33) && !d.labor_enabled(38) && !d.labor_enabled(45) && !d.labor_enabled(50) && !d.labor_enabled(51) && !d.labor_enabled(49) && !d.labor_enabled(0) && !d.labor_enabled(53) && !d.labor_enabled(46)) &&
// useless labors test
((d.labor_rating(16) > 0 && d.labor_enabled(16)) || d.labor_rating(16) <= 0)
&& // Animal Tr.
((d.labor_rating(43) > 0 && d.labor_enabled(43)) || d.labor_rating(43) <= 0)
&& // Fish Diss.
((d.labor_rating(26) > 0 && d.labor_enabled(26)) || d.labor_rating(26) <= 0)
&& // Animal Diss.
((d.labor_rating(72) > 0 && d.labor_enabled(72)) || d.labor_rating(72) <= 0)
|
Custom Roles
Thistleknot's Melee and Ranged Roles
|
Optimization Plans
Percent Total Jobs and how average role ratings work
[v22+] Because the average role rating of ~.5 is always achieved, and each aspect (categories such as attributes, traits, skills, preferences) are balanced on a .5 mean as well. We can target the top 50% of the role rating range by setting only Percent Total Jobs to 50%.
This has an interesting affect when assigning # of labors per dwarf.
Here is a picture of it in action, with 13 Max jobs per Dwarf, 50 Percent Total Jobs.
Slyrdvs's Optimization Plan
|
Note from SlyrDVS in a pm: I still have to sit down and plan the jobs out again, reoptimize for a new version. As for why I have so many trappers/hunters, they are the firstline defense, they can then later become the army. :P
Thistleknot's Optimization Plan
Thistleknot's Optimization Plans |
---|
Import these as .csv
Naming convention is
Name, % of dwarfs, # of Labors to assign
Vanilla 8 Labor's Per (early fort)
Latest Plan100-8,8,100,0,0,0,0,0,0
Animal Caretaker,16,0.0243,1
Animal Trainer,15,0.265,1
Architect,14,0.9,1
Armorsmith,47,0.7929,1
Metalsmith,48,0.7929,1
Bone Carver,54,0.613,0.75
Brewer,29,0.9108,1
Butcher,24,0.265,1.25
Carpenter,11,0.826,1.25
Cheesemaker,36,0.1379,0.75
Clothier,33,0.1379,1.25
Cook,38,0.5495,1.25
Bowyer,59,0.7067,1
Chief Medical,17,0.826,1
Wound Dresser,21,0.7433,0.75
Dyer,63,0.1081,1.25
Farmer,39,0.9343,2
Fish Cleaner,42,0.3228,1.25
Fisherdwarf,41,0.3851,1.25
Furnace Operator,45,0.0243,1.25
Gem Cutter,50,0.8461,1
Hunter,44,0.6438,1
Leatherworker,27,0.9134,1.25
Lyemaker,62,0.6438,0.75
Mason,13,0.826,2.5
Mechanic,60,0.7433,1.25
Metalcrafter,49,0.7929,1
Milker,37,0.0243,0.75
Miller,34,0.5171,0.75
Miner,0,0.9771,2.5
Herbalist,40,0.5495,2.5
Thresher,35,0.7433,1
Potash Maker,61,0.1676,0.75
Bone Doctor,19,0.7433,0.75
,66,0.0243,0.75
Siege Engineer,57,0.3078,1.25
Siege Operator,58,0.8461,1.25
Soaper,31,0.2131,0.75
,67,0.3078,1.25
Engraver,12,0.6438,1
Stone Crafter,53,0.613,0.75
Surgeon,18,0.7433,0.75
Suturer,20,0.7433,0.75
Tanner,28,0.3078,1
Trapper,25,0.5333,0.75
Weaponsmith,46,0.7929,1
Weaver,32,0.2011,1.25
Wood Burner,64,0.0243,1.5
Woodcutter,10,0.4506,1.5
Wood Crafter,52,0.613,0.75
Vanilla 12 Labor's Per
Latest Plan100-12,12,100,0,0,0,0,0,0
Animal Caretaker,16,0.0243,1
Animal Trainer,15,0.265,1
Architect,14,0.9,1
Armorsmith,47,0.7929,1
Metalsmith,48,0.7929,1
Bone Carver,54,0.613,0.75
Brewer,29,0.9108,1
Butcher,24,0.75,1.25
Carpenter,11,0.826,1.25
Cheesemaker,36,0.1379,0.75
Clothier,33,0.1379,1.25
Cook,38,0.5495,1.25
Bowyer,59,0.7067,1
Chief Medical,17,0.826,1
Wound Dresser,21,0.7433,0.75
Dyer,63,0.1081,1.25
Farmer,39,0.9343,2
Fish Cleaner,42,0.3228,1.25
Fisherdwarf,41,0.3851,1.25
Furnace Operator,45,0.0243,1.25
Gem Cutter,50,0.8461,1
Hunter,44,0.6438,1
Leatherworker,27,0.9134,1.25
Lyemaker,62,0.6438,0.75
Mason,13,0.826,2.5
Mechanic,60,0.7433,1.25
Metalcrafter,49,0.7929,1
Milker,37,0.0243,0.75
Miller,34,0.5171,0.75
Miner,0,0.9771,2.5
Herbalist,40,0.5495,2.5
Thresher,35,0.7433,1
Potash Maker,61,0.1676,0.75
Bone Doctor,19,0.7433,0.75
,66,0.0243,0.75
Siege Engineer,57,0.3078,1.25
Siege Operator,58,0.8461,1.25
Soaper,31,0.2131,0.75
,67,0.3078,1.25
Engraver,12,0.6438,1
Stone Crafter,53,0.613,0.75
Surgeon,18,0.7433,0.75
Suturer,20,0.7433,0.75
Tanner,28,0.3078,1
Trapper,25,0.5333,0.75
Weaponsmith,46,0.7929,1
Weaver,32,0.2011,1.25
Wood Burner,64,0.0243,1.5
Woodcutter,10,0.4506,1.5
Wood Crafter,52,0.613,0.75
Masterwork 8 Labor's Per (early fort)
Latest Plan100-8 MW - 2nd,8,100,0,0,0,1,0,0
Stone Crafter,53,0.95,0.75
Soaper,31,0.75,0.75
Surgeon,18,0.9,0.75
Gem Cutter,50,0.85,1
Architect,14,0.85,1
Leatherworker,27,1,1.25
Tanner,28,0.8,1
,47,1,1
Carpenter,11,1,1.25
Animal Caretaker,16,0.75,1
Miller,34,0.8,0.75
Miner,0,1,2
,61,0.75,0.75
Hunter,44,0.85,1
Metalcrafter,49,0.95,1
Brewer,29,0.85,1
Weaponsmith,46,1,1
,15,0.85,1
Mechanic,60,0.8,1.5
Furnace Operator,45,0.75,1.25
,25,0.8,0.75
Miller,35,0.8,1
Spinner,67,0.8,1.25
Suturer,20,0.9,0.75
Milker,37,0.75,0.75
,66,0.75,0.75
Weaver,32,0.75,1.25
Bowyer,59,1,1
,33,0.75,1.25
Farmer,39,1,2
Cook,57,0.8,1.25
,62,0.8,0.75
Bone Doctor,19,0.9,0.75
Cook,38,0.85,1.25
Cheesemaker,36,0.75,0.75
Fish Cleaner,42,0.8,1.25
Bone Carver,54,0.95,0.75
Metalsmith,48,0.95,1
,10,0.85,1.5
Dodger,63,0.75,1.25
,12,0.95,1
Fisherdwarf,41,0.8,0.65
Macedwarf,13,0.95,1.75
Gem Cutter,40,1,2
Butcher,24,0.8,1.25
Siege Operator,58,0.85,1.25
Weaver,21,0.9,0.75
Chief Medical,17,0.9,1
,64,0.21,1.5
Wood Crafter,52,0.95,0.75
,70,0.75,1
,56,1,1
,68,1,0.75
,26,0.75,0.75
,43,0.8,0.65
Masterwork 12 Labor's Per
Latest Plan100-12 MW - 1st,12,100,0,0,0,1,0,0
,61,0.75,0.75
Animal Caretaker,16,0.75,0.75
Animal Trainer,15,0.85,0.75
Miller,34,0.8,1.15
Architect,14,1,1
Armorsmith,47,1,1
Metalsmith,48,0.95,1
Bone Carver,54,0.95,0.75
Brewer,29,0.85,1
Butcher,24,0.8,1.25
Carpenter,11,1,1.25
Cheesemaker,36,0.75,0.75
Lyemaker,62,0.8,0.75
Cook,38,0.85,1.25
Bowyer,59,1,1
Chief Medical,17,0.9,1
,28,0.8,1
Wound Dresser,21,0.9,0.75
Dyer,63,0.75,1.25
Farmer,39,1,2
Fish Cleaner,42,0.8,1.25
Fisherdwarf,41,0.8,1.25
Furnace Operator,45,0.75,1.25
Gem Cutter,50,0.85,1
Herbalist,40,0.85,2.5
Hunter,44,0.85,1
Leatherworker,27,1,1.25
Mason,13,0.95,2.5
Mechanic,60,0.8,1.25
Metalcrafter,49,0.95,1
Milker,37,0.75,0.75
Miller,35,0.8,1
Miner,0,1,2.5
Furnace Operator,64,0.75,1.5
,31,0.75,0.75
Bone Doctor,19,0.9,0.75
,66,0.75,0.75
,57,0.8,1.25
Siege Operator,58,0.85,1.25
Spinner,67,0.8,1.25
,12,0.95,1
,53,0.95,1.5
Surgeon,18,0.9,0.75
Suturer,20,0.9,0.75
,33,0.75,1.25
,25,0.8,0.75
Weaponsmith,46,1,1
Weaver,32,0.75,1.25
,10,0.85,1.5
Wood Crafter,52,0.95,0.75
,30,1,1
,70,0.75,1
,68,1,0.75
|
Using AutoLabor to manage hauling jobs alongside Labor Optimizer
Since I prefer Dwarf Therapist's %'s on calculating my roles to labor mappings via the Labor Optimizer, I found the dynamic ability that autolabor has missing. So to alleviate this. I still do my own labor optimizations every few migrant waves; however, I get the advantage of autolabor's hauling behaviour (I believe it doesn't enable hauling on dwarfs that have a labor enabled for queued job).
Run this inside a DFHack console.
Note: To avoid manually running each line in the console, save this to a text file in your DF folder (e.g. "dtautolabor.txt") and run "script (filename)" in DFHack.
Copy and paste into DFHack console |
---|
autolabor 1
autolabor MINE disable
autolabor FEED_WATER_CIVILIANS haulers 1
autolabor CUTWOOD disable
autolabor CARPENTER disable
autolabor DETAIL disable
autolabor MASON disable
autolabor ARCHITECT disable
autolabor ANIMALTRAIN disable
autolabor ANIMALCARE disable
autolabor DIAGNOSE disable
autolabor SURGERY disable
autolabor BONE_SETTING disable
autolabor SUTURING disable
autolabor DRESSING_WOUNDS disable
autolabor BUTCHER disable
autolabor TRAPPER disable
autolabor DISSECT_VERMIN disable
autolabor LEATHER disable
autolabor TANNER disable
autolabor BREWER disable
autolabor ALCHEMIST disable
autolabor SOAP_MAKER disable
autolabor WEAVER disable
autolabor CLOTHESMAKER disable
autolabor MILLER disable
autolabor PROCESS_PLANT disable
autolabor MAKE_CHEESE disable
autolabor MILK disable
autolabor COOK disable
autolabor PLANT disable
autolabor HERBALIST disable
autolabor FISH disable
autolabor CLEAN_FISH disable
autolabor DISSECT_FISH disable
autolabor HUNT disable
autolabor SMELT disable
autolabor FORGE_WEAPON disable
autolabor FORGE_ARMOR disable
autolabor FORGE_FURNITURE disable
autolabor METAL_CRAFT disable
autolabor CUT_GEM disable
autolabor ENCRUST_GEM disable
autolabor WOOD_CRAFT disable
autolabor STONE_CRAFT disable
autolabor BONE_CARVE disable
autolabor GLASSMAKER disable
autolabor EXTRACT_STRAND disable
autolabor SIEGECRAFT disable
autolabor SIEGEOPERATE disable
autolabor BOWYER disable
autolabor MECHANIC disable
autolabor POTASH_MAKING disable
autolabor LYE_MAKING disable
autolabor DYER disable
autolabor BURN_WOOD disable
autolabor OPERATE_PUMP disable
autolabor SHEARER disable
autolabor SPINNER disable
autolabor POTTERY disable
autolabor GLAZING disable
autolabor PRESSING disable
autolabor BEEKEEPING disable
autolabor WAX_WORKING disable
|
Mass Nickname Assignment for Sub-set Identification
Workshop Profiles
By mass assigning nicknames inside Dwarf Therapist to "mark" dwarves, they can be easily found in workshop profiles (if using Masterwork Mod, DFHack is included, Alt Shift N sorts alphabetically).
This is useful for workshops in various mods that train skills that you wish were limited to certain dwarfs, such as dwarfs who have a skill that is to be trained. (ex... train your axedwarf for your militia dwarfs (these would be the dwarfs that would be tagged with the nickname), via the warfare library)
Using Labors to Mark dwarf's for Custom Professions/Super Labors, or for Militia purposes
In this video (http://www.youtube.com/watch?v=gNVci8h1MkY), I actually do this method to assign my militia, but it could be extended for "super labors" as well.
What I do is assign a custom role to something I wish to assign that Dwarf Therapist doesn't currently support (such as assign militia dwarfs via the labor optimizer). So I use an optimization plan to assign a specific role (such as melee dwarfs) to a meaningless labor, then when the labors are assigned. I hand assign them inside the Therapist tool to the melee role.
One could use the same method to assign a dwarf to a custom profession that covers multiple labors (i.e. super labor concept).
It goes without saying that one should unassign the meaningless labor.
Ratio's & hauling labors can be used to create throughput "levers" to target jobs
Hauling
A player can use hauling as a suppressor on dwarf's productivity.
Generally, assigning hauling tasks to dwarf's who have a lower # of jobs assigned to them than the other dwarf's:
Achieves the effect of suppressing low % scores to hauling tasks.
# of Job's Per Dwarf
A player can adjust this value before the optimization plan is ran. Need more jobs accomplished overall. Lowering the # when the fortress gets larger allows a player to allow his dwarf's to focus on higher skilled tasks.
# of Jobs per Dwarf
In Dwarf Therapist, when editing an optimization plan, you can set the # of jobs each dwarf can have up to.
% Jobs to Assign
When editing an optimization plan, the % of total jobs is the target # that is set. This % is based on Dwarfs Selected * Jobs per Dwarf, then there is an ~ number representing the results of our rounded ratio:job #'s.
Theory of Constraints
The concept of lever's is borrowed from business concepts that try to maximize factory output. They understand that throughput of the factory is affected by variables that you can control, things like hours worked, overtime, etc.
In our case we can
1: Unassign hauling.
1.a: Threshold to start assigning hauling (editable inside the optimization plan)
2: Assign more labors for a specific labor by increasing it's ratio.
3: Create more workshops that accept said job.
4: Adjust the # of jobs per dwarf.
5: Adjust the % total jobs to assign.
Varying these values can result in higher throughput for a specific job when compared to other jobs.