better movement logic