diff --git a/code/datums/forced_movement.dm b/code/datums/forced_movement.dm index 3cdf2b1fd8b..2c649be12b8 100644 --- a/code/datums/forced_movement.dm +++ b/code/datums/forced_movement.dm @@ -51,6 +51,9 @@ last_processed = world.time /datum/forced_movement/proc/TryMove(recursive = FALSE) + if(QDELETED(src)) //Our previous step caused deletion of this datum + return + var/atom/movable/vic = victim //sanic var/atom/tar = target diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index f007c50394d..d149079995e 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -231,6 +231,7 @@ C.accident(I) var/olddir = C.dir + C.moving_diagonally = 0 //If this was part of diagonal move slipping will stop it. if(!(lube & SLIDE_ICE)) C.Knockdown(knockdown_amount) C.stop_pulling() @@ -244,6 +245,8 @@ if(lube&SLIDE) new /datum/forced_movement(C, get_ranged_target_turf(C, olddir, 4), 1, FALSE, CALLBACK(C, /mob/living/carbon/.proc/spin, 1, 1)) else if(lube&SLIDE_ICE) + if(C.force_moving) //If we're already slipping extend it + qdel(C.force_moving) new /datum/forced_movement(C, get_ranged_target_turf(C, olddir, 1), 1, FALSE) //spinning would be bad for ice, fucks up the next dir return 1