-- Adds emotions to creatures. --@ module = true --[[=begin add-thought =========== Adds a thought or emotion to the selected unit. Can be used by other scripts, or the gui invoked by running ``add-thought gui`` with a unit selected. =end]] local utils=require('utils') function addEmotionToUnit(unit,thought,emotion,severity,strength,subthought) local emotions=unit.status.current_soul.personality.emotions if not (type(emotion)=='number') then emotion=df.emotion_type[emotion] end if not (type(thought)=='number') then thought=df.unit_thought_type[thought] end emotions:insert('#',{new=df.unit_personality.T_emotions, type=emotion, unk2=1, strength=strength, thought=thought, subthought=subthought, severity=severity, flags=0, unk7=0, year=df.global.cur_year, year_tick=df.global.cur_year_tick }) local divider=df.emotion_type.attrs[emotion].divider if divider~=0 then unit.status.current_soul.personality.stress_level=unit.status.current_soul.personality.stress_level+math.ceil(severity/df.emotion_type.attrs[emotion].divider) end end validArgs = validArgs or utils.invert({ 'unit', 'thought', 'emotion', 'severity', 'strength', 'subthought', 'gui' }) function tablify(iterableObject) t={} for k,v in ipairs(iterableObject) do t[k] = v~=nil and v or 'nil' end return t end if moduleMode then return end local args = utils.processArgs({...}, validArgs) local unit = args.unit and df.unit.find(args.unit) or dfhack.gui.getSelectedUnit(true) if not unit then qerror('A unit must be specified or selected.') end if args.gui then local script=require('gui.script') script.start(function() local tok,thought=script.showListPrompt('emotions','Which thought?',COLOR_WHITE,tablify(df.unit_thought_type),10,true) if tok then local eok,emotion=script.showListPrompt('emotions','Which emotion?',COLOR_WHITE,tablify(df.emotion_type),10,true) if eok then local sok,severity=script.showInputPrompt('emotions','At what severity?',COLOR_WHITE,'0') if sok then local stok,strength=script.showInputPrompt('emotions','At what strength?',COLOR_WHITE,'0') if stok then addEmotionToUnit(unit,thought,emotion,severity,strength,0) end end end end end) else local thought = args.thought or 180 local emotion = args.emotion or -1 local severity = args.severity or 0 local subthought = args.subthought or 0 local strength = args.strength or 0 addEmotionToUnit(unit,thought,emotion,severity,strength,subthought) end