(I will increase step_size to 4 this is just for a test) Please do not reply by telling me to use the default glide movement :)
proc/Glide(mob/ref,Dir,lag)
set waitfor=0
for(var/i=1; i<=16; i++)
if(Dir==NORTH) ref.pixel_y+=1
if(Dir==SOUTH) ref.pixel_y-=1
if(Dir==EAST) ref.pixel_x+=1
if(Dir==WEST) ref.pixel_x-=1
if(Dir==NORTHEAST) {ref.pixel_y+=1;ref.pixel_x+=1}
if(Dir==NORTHWEST) {ref.pixel_y+=1;ref.pixel_x-=1}
if(Dir==SOUTHEAST) {ref.pixel_y-=1;ref.pixel_x+=1}
if(Dir==SOUTHWEST) {ref.pixel_y-=1;ref.pixel_x-=1}
sleep(lag/16)
step(ref,Dir,16)
ref.pixel_y=0
ref.pixel_x=0