There was an error in agent.py causing movement to aggregate over frames rather than being recalculated per frame. Also making sure to avoid divisions if possible.