In my simplified layer both A & B start their sequence at 0. I knew tcp randomized the start, but I didn't realize both A and B (not just B) need to send their start.
Yeah, that answers my question. I knew I was missing something obvious.
60fps in milliseconds stored as 'long' truncates to 16 from 16.666 which is highly inaccurate
Also, long(16/16.666) = 0
Anything above 60fps wouldn't be able to move (bug), anything between 58.82fps and 29.41fps would be multiplied against '1', which means the fast machine running at 58.82fps would move almost twice as fast as the machine running at 29.41fps (bug)
That time scaling code is completely broken.
Also, fix your timestep, and represent your time delta as a 32-bit long in microseconds, not milliseconds, and once you're multiplying/dividing, keep it as a float, not as integer.