ID:2672753
 
Not a bug
BYOND Version:514.1553
Operating System:Windows 10 Pro 64-bit
Web Browser:Chrome 90.0.4430.72
Applies to:Dream Seeker
Status: Not a bug

This is not a bug. It may be an incorrect use of syntax or a limitation in the software. For further discussion on the matter, please consult the BYOND forums.
Descriptive Problem Summary:
When you move at the same time as another atom, both diagonally, you see the other atom stuttering.

(I am using Any Macro, step World Loop, tile movement, glide size and animate_movement=SLIDE_STEPS)

This only happens if u don't have LONG_GLIDE in the appearance_flags

movement_mode doesn't matter
local or hosted world doesn't matter

Sent the test-case link on the dms.

Numbered Steps to Reproduce Problem:
Don't have LONG_GLIDE in the appearance_flags
Move together with another atom diagonally and see the stuttering of said atom.

Expected Results:
Atom to not stutter.

Actual Results:
Atom stutters.

Does the problem occur:
Every time? Or how often? Yes
In other games? Yes
In other user accounts? Yes
On other computers? Yes

When does the problem NOT occur? Never

Workarounds:
Have LONG_GLIDE in the appearance_flags
I can't identify any bugs in your demo. The reason you're seeing stuttering on the diagonals is because the NPCs are moving at a fixed rate and the movement loop doesn't take their glide time into account. Thus they're always getting ahead of their glide, which has to increase speed to catch up, but once they're within a tile of where they should be they can glide normally; hence the stutter. (Yes I could probably think of ways to improve this with a built-in speed curve, but I don't think it'd be great to make the glide code even more complicated right now.)

The reason LONG_GLIDE fixes your problem is that your math doesn't take diagonals into account, so it won't function without it. If you're going to turn LONG_GLIDE off you need to adjust the next move time according to the glide speed you've set and the actual time it will take to get there.

    Move(newloc,newdir)
var/delay=move_delay
if(ismob(src))
if(running)delay-=1

// calculate actual move time
var/d = delay
if(newdir & (newdir-1)) d *= sqrt(2)
if(next_move - world.time >= world.tick_lag/10)return 0
glide_size = (delay ? 32/delay*world.tick_lag : 32)
if(ismob(src)&&src:client)src:client.glide_size = glide_size
. = ..()
if(.)
next_move = world.time+round(d,world.tick_lag)

This eliminates most of the stutter, but some small amount of jank is still there.

BTW, I also noticed abuse of usr in Login(). You should probably be on the lookout for that in your project.
Lummox JR resolved issue (Not a bug)
In response to Lummox JR
This isn't a problem just with the fixed rate on the movement because it also happens with players... Try hosting the world and someone else connecting, then both of you move on the diagonal. The same stutter happens.

Also the usr on login is just for this project, not on my main.
Yes, everything is stuttering, not just the NPCs, because of the movement calculations being wrong. You're timing your movement and setting the glide such that you're inevitably going to end up in situations where the glide is too high.
I have decided to adjust the glide "overdrive" a bit in situations where a glider is more than a tile behind. Previously it was always doubling the glide speed and that felt really wrong. Now it will avoid ceil() and instead try to do a proportional increase with a little extra juice.