diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 60b96b68e99..6f7cbd1a041 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -472,8 +472,8 @@ stop_pulling() else var/pull_dir = get_dir(src, pulling) - //puller and pullee more than one tile away or in diagonal position - if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir))) + //puller and pullee more than one tile away or in diagonal position and whatever the pullee is pulling isn't already moving from a pull as it'll most likely result in an infinite loop a la ouroborus. + if(!pulling.pulling?.moving_from_pull && (get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir)))) pulling.moving_from_pull = src pulling.Move(T, get_dir(pulling, T), glide_size) //the pullee tries to reach our previous position pulling.moving_from_pull = null