Code:
long process_work_speed_on_work_value(struct Thing *thing, long base_val)
{
struct Dungeon *dungeon;
struct CreatureControl *cctrl;
long val;
cctrl = creature_control_get_from_thing(thing);
val = base_val;
if (creature_affected_by_spell(thing, SplK_Speed))
val = 2 * val;
if (cctrl->slap_turns)
val = 4 * val / 3;
if (!is_neutral_thing(thing))
{
dungeon = get_dungeon(thing->owner);
if (dungeon->tortured_creatures[thing->model] > 0)
val = 4 * val / 3;
if (dungeon->must_obey_turn != 0)
val = 6 * val / 5;
}
return val;
}
So max values is:
base * (2) * (4/3) * (4/3) * (6/5)
Note - this may be a bit different in original DK, I can't remember if I modified the values.