diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 130b6a1359e..bd2e3ded801 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -286,3 +286,7 @@ /obj/proc/clean() clean_blood() color = initial(color) + +/// This fires when the object /crosses() a stair object +/obj/proc/stair_act() + return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index eb3d09e5612..ff7776c5653 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -765,6 +765,19 @@ QDEL_NULL(linked_teleporter) return ..() +/obj/structure/closet/stair_act() + if(opened || !can_open()) + return + + visible_message(SPAN_WARNING("\The [src] flies open as it bounces on the stairs!")) + for(var/thing in src) + var/atom/movable/AM = thing + AM.forceMove(get_turf(src)) + AM.throw_at_random(TRUE, 1, 2) + open() + + return ..() + /* ========================== Contents Scanner diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index aab1c948ba8..95f70b48dcd 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -308,6 +308,21 @@ else occupant.visible_message(SPAN_DANGER("[occupant] crashed into \the [A]!")) +/obj/structure/bed/stair_act() + if(!buckled) + return + + var/atom/movable/unbuckled_atom = unbuckle() + if(!unbuckled_atom) + return + + unbuckled_atom.visible_message("\The [unbuckled_atom] goes flying out of \the [src] as it bounces on the stairs!", SPAN_WARNING("You go flying out of \the [src] as it bounces on the stairs!")) + unbuckled_atom.throw_at_random(FALSE, 1, 2) + + if(ismob(unbuckled_atom)) + var/mob/unbuckled_mob = unbuckled_atom + unbuckled_mob.Paralyse(5) + /obj/structure/bed/psych name = "psychiatrist's couch" desc = "For prime comfort during psychiatric evaluations." @@ -565,6 +580,9 @@ .=..() set_light(2,1,LIGHT_COLOR_CYAN) +/obj/structure/bed/roller/hover/stair_act() + return + /obj/item/roller name = "roller bed" desc = "A collapsed roller bed that can be carried around." diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 5f9a5ad6a24..62c9f0e999a 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -275,6 +275,11 @@ playsound(src, 'sound/effects/stairs_step.ogg', 50) playsound(target, 'sound/effects/stairs_step.ogg', 50) +/obj/structure/stairs/Crossed(obj/O) + if(istype(O)) + O.stair_act() + return ..() + /obj/structure/stairs/proc/upperStep(var/turf/T) return (T == loc) @@ -372,6 +377,11 @@ icon = 'icons/obj/structure/stairs.dmi' icon_state = "np_stair" +/obj/structure/platform_stairs/Crossed(obj/O) + if(istype(O)) + O.stair_act() + return ..() + /obj/structure/platform_stairs/south_north_solo icon_state = "p_stair_sn_solo_cap" diff --git a/html/changelogs/geeves-stair_act.yml b/html/changelogs/geeves-stair_act.yml new file mode 100644 index 00000000000..12376942e13 --- /dev/null +++ b/html/changelogs/geeves-stair_act.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Crates, closets, rollerbeds and wheelchairs now cannot safely traverse stairs." \ No newline at end of file