These statements:
duration = rand_range(1,5)*globals.person.stats.smaf,
rewardpool = {bestialessenceing = (10 + (globals.player.stats.smaf*10))},
must be evaluated at runtime: I don't think you can put them in a dictionary like that.
I guess they have to be surrounded by quotation marks ("...") and passed as arguments to globals.evaluate(). See for instance the job parameter "unlockreqs" in jobs&specs.gd,, which is evaluated in joblist.gd:
if globals.evaluate(i.unlockreqs) == true: