From 945bf051bd3ee7edfe15b971b44a3e8e2a0ee2fa Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Thu, 1 Oct 2020 11:28:56 +0800 Subject: [PATCH 1/3] get railed --- code/__HELPERS/unsorted.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4addae3ac4..92bd726641 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1254,6 +1254,10 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) var/obj/structure/window/W = O if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR) return FALSE + if(istype(O, /obj/structure/railing)) + var/obj/structure/railing/rail = O + if(rail.ini_dir == dir_to_check || rail.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR) + return FALSE return TRUE /proc/pass() From d9ab31e19991faf7f4f083560967e83a64b577d0 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Thu, 1 Oct 2020 11:30:01 +0800 Subject: [PATCH 2/3] commit 2 --- code/game/objects/items/stacks/rods.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index efcc075110..1277bb3d4e 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -2,6 +2,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ + new/datum/stack_recipe("railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \ )) /obj/item/stack/rods From c7875f279290161037dcfe48ae4c396fbef6a8e9 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Thu, 1 Oct 2020 12:54:49 +0800 Subject: [PATCH 3/3] commit 3 --- code/game/objects/structures/railings.dm | 107 +++++++++++++++++++++++ code/game/objects/structures/stairs.dm | 15 ++++ tgstation.dme | 5 +- 3 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 code/game/objects/structures/railings.dm diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm new file mode 100644 index 0000000000..21cf97ba70 --- /dev/null +++ b/code/game/objects/structures/railings.dm @@ -0,0 +1,107 @@ +/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 + 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 + +/obj/structure/railing/attackby(obj/item/I, mob/living/user, params) + ..() + add_fingerprint(user) + if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HELP) + 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))) + setAnchored(!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 = UNSTOPPABLE | 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)) //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) + air_update_turf(1) + ini_dir = dir + add_fingerprint(user) diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index 1358b2e296..8472926679 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -16,6 +16,18 @@ var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC var/turf/listeningTo +/obj/structure/stairs/north + dir = NORTH + +/obj/structure/stairs/south + dir = SOUTH + +/obj/structure/stairs/east + dir = EAST + +/obj/structure/stairs/west + dir = WEST + /obj/structure/stairs/Initialize(mapload) if(force_open_above) force_open_above() @@ -105,6 +117,9 @@ T.ChangeTurf(/turf/open/transparent/openspace, flags = CHANGETURF_INHERIT_AIR) /obj/structure/stairs/proc/on_multiz_new(turf/source, dir) + //SIGNAL_HANDLER + SHOULD_NOT_SLEEP(TRUE) //the same thing. + if(dir == UP) var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP) if(T && !istype(T)) diff --git a/tgstation.dme b/tgstation.dme index 143f66a656..44394e0673 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -808,8 +808,6 @@ #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\navbeacon.dm" #include "code\game\machinery\PDApainter.dm" -#include "code\game\machinery\poweredfans\fan_assembly.dm" -#include "code\game\machinery\poweredfans\poweredfans.dm" #include "code\game\machinery\quantum_pad.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" @@ -887,6 +885,8 @@ #include "code\game\machinery\porta_turret\portable_turret.dm" #include "code\game\machinery\porta_turret\portable_turret_construct.dm" #include "code\game\machinery\porta_turret\portable_turret_cover.dm" +#include "code\game\machinery\poweredfans\fan_assembly.dm" +#include "code\game\machinery\poweredfans\poweredfans.dm" #include "code\game\machinery\shuttle\custom_shuttle.dm" #include "code\game\machinery\shuttle\shuttle_engine.dm" #include "code\game\machinery\shuttle\shuttle_heater.dm" @@ -1253,6 +1253,7 @@ #include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\petrified_statue.dm" #include "code\game\objects\structures\plasticflaps.dm" +#include "code\game\objects\structures\railings.dm" #include "code\game\objects\structures\reflector.dm" #include "code\game\objects\structures\safe.dm" #include "code\game\objects\structures\showcase.dm"