/obj/structure/railing name = "railing" desc = "Basic railing meant to protect idiots like you from falling." icon = 'icons/obj/fluff.dmi' icon_state = "railing" density = TRUE anchored = TRUE var/climbable = TRUE ///Initial direction of the railing. var/ini_dir /obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch icon_state = "railing_corner" density = FALSE climbable = FALSE /obj/structure/railing/ComponentInitialize() . = ..() AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation)) /obj/structure/railing/Initialize() . = ..() ini_dir = dir if(climbable) AddElement(/datum/element/climbable) /obj/structure/railing/attackby(obj/item/I, mob/living/user, params) ..() add_fingerprint(user) if(I.tool_behaviour == TOOL_WELDER && !user.combat_mode) if(obj_integrity < max_integrity) if(!I.tool_start_check(user, amount=0)) return to_chat(user, "You begin repairing [src]...") if(I.use_tool(src, user, 40, volume=50)) obj_integrity = max_integrity to_chat(user, "You repair [src].") else to_chat(user, "[src] is already in good condition!") return /obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) . = ..() if(!anchored) to_chat(user, "You cut apart the railing.") I.play_tool_sound(src, 100) deconstruct() return TRUE /obj/structure/railing/deconstruct(disassembled) . = ..() if(!loc) //quick check if it's qdeleted already. return if(!(flags_1 & NODECONSTRUCT_1)) var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 3) transfer_fingerprints_to(rod) qdel(src) ///Implements behaviour that makes it possible to unanchor the railing. /obj/structure/railing/wrench_act(mob/living/user, obj/item/I) . = ..() if(flags_1&NODECONSTRUCT_1) return to_chat(user, "You begin to [anchored ? "unfasten the railing from":"fasten the railing to"] the floor...") if(I.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, .proc/check_anchored, anchored))) set_anchored(!anchored) to_chat(user, "You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.") return TRUE /obj/structure/railing/CanPass(atom/movable/mover, turf/target) . = ..() if(get_dir(loc, target) & dir) var/checking = FLYING | FLOATING return . || mover.throwing || mover.movement_type & checking return TRUE /obj/structure/railing/corner/CanPass() ..() return TRUE /obj/structure/railing/CheckExit(atom/movable/mover, turf/target) ..() if(get_dir(loc, target) & dir) var/checking = PHASING | FLYING | FLOATING return !density || mover.throwing || mover.movement_type & checking || mover.move_force >= MOVE_FORCE_EXTREMELY_STRONG return TRUE /obj/structure/railing/corner/CheckExit() return TRUE /obj/structure/railing/proc/can_be_rotated(mob/user,rotation_type) if(anchored) to_chat(user, "[src] cannot be rotated while it is fastened to the floor!") return FALSE var/target_dir = turn(dir, rotation_type == ROTATION_CLOCKWISE ? -90 : 90) if(!valid_window_location(loc, target_dir, is_fulltile = FALSE)) //Expanded to include rails, as well! to_chat(user, "[src] cannot be rotated in that direction!") return FALSE return TRUE /obj/structure/railing/proc/check_anchored(checked_anchored) if(anchored == checked_anchored) return TRUE /obj/structure/railing/proc/after_rotation(mob/user,rotation_type) add_fingerprint(user)