diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 9e5f6c59b99..0a574b2fe35 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -166,7 +166,7 @@ icon_state = "ladder11" /obj/structure/stairs - name = "Stairs" + name = "stairs" desc = "Stairs leading to another deck. Not too useful if the gravity goes out." icon = 'icons/obj/stairs.dmi' density = 0 @@ -184,14 +184,27 @@ if(!istype(above)) above.ChangeToOpenturf() -/obj/structure/stairs/Uncross(atom/movable/A) - if(A.dir == dir && A.loc == loc) - // This is hackish but whatever. - var/turf/target = get_step(GetAbove(A), dir) - if (target.Enter(A, A.loc)) - A.forceMove(target) +/obj/structure/stairs/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) + if(get_dir(loc, target) == dir && upperStep(mover.loc)) return FALSE - return TRUE + + if (mover.loc == loc && get_dir(mover, target) != reverse_dir[dir]) + addtimer(CALLBACK(src, .proc/mob_fall, mover), 0) + + return ..() + +/obj/structure/stairs/CollidedWith(atom/movable/A) + // This is hackish but whatever. + var/turf/target = get_step(GetAbove(A), dir) + if(target.Enter(A, src)) + A.forceMove(target) + if(isliving(A)) + var/mob/living/L = A + if(L.pulling) + L.pulling.forceMove(target) + +/obj/structure/stairs/proc/upperStep(var/turf/T) + return (T == loc) /obj/structure/stairs/CanPass(obj/mover, turf/source, height, airflow) if (airflow) @@ -203,27 +216,19 @@ return !density -/obj/structure/stairs/CheckExit(mob/living/mover, turf/target) - if (!istype(mover) || target.z != z) - return ..() - - if (mover.loc == loc && get_dir(mover, target) != reverse_dir[dir]) - addtimer(CALLBACK(src, .proc/mob_fall, mover), 0) - - return ..() - /obj/structure/stairs/proc/mob_fall(mob/living/L) - if (isopenturf(L.loc)) + if (isopenturf(L.loc) || L.loc == loc || !ishuman(L)) return L.Weaken(2) - L.visible_message( - "\The [L] steps off of [src] and faceplants onto [L.loc].", - "You step off [src] and faceplant onto [L.loc].", - "You hear a thump." - ) - var/snd = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') - playsound(L.loc, snd, 75, 1) + if (L.lying) + L.visible_message( + "\The [L] steps off of [src] and faceplants onto [L.loc].", + "You step off [src] and faceplant onto [L.loc].", + "You hear a thump." + ) + var/snd = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') + playsound(L.loc, snd, 75, 1) // type paths to make mapping easier. /obj/structure/stairs/north