--[[ ==README== Character Jitter Jitters \fs and \frz to make characters appear a bit random. Only works on lines with at most one override block at the beginning. ]] script_name="Character jitter" script_description="Adds jitter to make text look random." script_version="1.0" include("karaskel.lua") function char_jitter(sub,sel) conf={ {class="label",label="\\fs jitter:",x=0,y=0,width=1,height=1}, {class="intedit",name="fsj",value=0,min=0,x=1,y=0,width=1,height=1}, {class="label",label="\\frz jitter:",x=0,y=1,width=1,height=1}, {class="intedit",name="frzj",value=0,min=0,x=1,y=1,width=1,height=1} } pressed,results=aegisub.dialog.display(conf,{"Go","Cancel"}) if pressed=="Cancel" then aegisub.cancel() end fsj=results["fsj"] frzj=results["frzj"] local meta,styles=karaskel.collect_head(sub,false) for _,li in ipairs(sel) do line=sub[li] karaskel.preproc_line(sub,meta,styles,line) fsize=line.text:match("^{[^}]*\\fs([%d%.]+)") or line.styleref.fontsize frot=line.text:match("^{[^}]*\\frz([%d%.%-]+)") or line.styleref.angle tag,text=line.text:match("^({[^}]*})(.*)") if tag==nil then tag="" text=line.text end text=text:gsub("(.)(.*)", function(a,b) return a..b:gsub("(.)", function(ch) return string.format("{\\fs%d\\frz%d}", fsize+math.random(-1*fsj,fsj), frot+math.random(-1*frzj,frzj))..ch end) end) line.text=tag..text sub[li]=line end return sel end aegisub.register_macro(script_name,script_description,char_jitter)