Has anyone seen a dwarf taking a bath, especially soapy one, or are they all dirty? Last time I saw a dwarf taking a soapy bath was in v0.42.06, quite some time ago (it was a child, apparently extremely bored). Since this used to give some stress relief, I wanted all dwarves to do it in present version, but no luck so far.
Soaps are used solely to clean patients, at least in my fortress. But do dwarves care at all? I mean, the emotion is still included, but apparently they never trigger it. Is it possible to make them bathe?
If you have DFHack, you may use this script to list and count all people who have thoughts about soapy baths, and count all baths and soaps (including used ones). The units which take normal bath are usually critters who love to lick themselves, like cats or red pandas, so their listing is commented out. You may uncomment it (line 13) and see how clean your cats are. Dwarf Therapist also shows units who have taken bath in emotions, though it may be hard to find (most likely absent).
list-bath.lua --list-baths.lua
-- bathing emotions
local my_baths,my_soapy_baths,bathing_units,bathing_citizens,soapybathing_units,soapybathing_citizens,total_units=0,0,0,0,0,0,0
for k,v in ipairs(df.global.world.units.all) do
local bather,soapybather,citizen,soapycitizen=false,false,false,false
total_units=#df.global.world.units.all
if v.status.current_soul then
if #v.status.current_soul.personality.emotions>0 then
for kk,vv in ipairs(v.status.current_soul.personality.emotions) do
if vv.thought==130 then
my_baths=my_baths+1
bather=true
--print(string.format("Bath - %s %s",dfhack.units.getProfessionName(v),string.gsub(v.name.first_name,"^%l",string.upper)))
citizen=dfhack.units.isCitizen(v)
elseif vv.thought==131 then
my_soapy_baths=my_soapy_baths+1
soapybather=true
print(string.format("Soapy bath - %s %s",dfhack.units.getProfessionName(v),string.gsub(v.name.first_name,"^%l",string.upper)))
soapycitizen=dfhack.units.isCitizen(v)
end
end
if bather then bathing_units=bathing_units+1 if citizen then bathing_citizens=bathing_citizens+1 end end
if soapybather then soapybathing_units=soapybathing_units+1 if soapycitizen then soapybathing_citizens=soapybathing_citizens+1 end end
end
end
end
print("--Bathers--")
print(string.format("Normal baths: %s, soapy baths: %s.",my_baths,my_soapy_baths))
print(string.format("Bathing units: %s (citizens: %s), soapy bathing units: %s (citizens: %s), total units %s.",bathing_units,bathing_citizens,soapybathing_units,soapybathing_citizens,total_units))
-- soaps
print("--Soaps----")
local total_soaps,used_soaps=0,0
for k,v in ipairs(df.global.world.items.all) do
if df.item_barst:is_instance(v) then
local my_smat=string.match(dfhack.matinfo.decode(v.mat_type,v.mat_index):getToken(),".*:SOAP$")
if my_smat then
total_soaps=total_soaps+1
if v.dimension<150 then used_soaps=used_soaps+1 end
--print(my_smat)
end
end
end
print(string.format("Soap bars: %s (unwrapped: %s)",total_soaps,used_soaps))