diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 472b098738e..36ae14fbfb1 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -1077,6 +1077,28 @@ ) category = CAT_MISC +/datum/crafting_recipe/shutters + name = "Shutters" + reqs = list(/obj/item/stack/sheet/plasteel = 10, + /obj/item/stack/cable_coil = 10, + /obj/item/electronics/airlock = 1 + ) + result = /obj/machinery/door/poddoor/shutters/preopen + tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER) + time = 15 SECONDS + category = CAT_MISC + +/datum/crafting_recipe/blast_doors + name = "Blast Door" + reqs = list(/obj/item/stack/sheet/plasteel = 15, + /obj/item/stack/cable_coil = 15, + /obj/item/electronics/airlock = 1 + ) + result = /obj/machinery/door/poddoor/preopen + tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WIRECUTTER, TOOL_WELDER) + time = 30 SECONDS + category = CAT_MISC + /datum/crafting_recipe/aquarium name = "Aquarium" result = /obj/structure/aquarium diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index bf28d7d0f54..222516cb74e 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -15,6 +15,53 @@ resistance_flags = FIRE_PROOF damage_deflection = 70 poddoor = TRUE + var/ertblast = FALSE //If this is true the blast door cannot be deconstructed + var/deconstruction = INTACT //For the deconstruction steps + +/obj/machinery/door/poddoor/attackby(obj/item/W, mob/user, params) + . = ..() + if(ertblast && W.tool_behaviour == TOOL_SCREWDRIVER) // This makes it so ERT members cannot cheese by opening their blast doors. + to_chat(user, "This shutter has a different kind of screw, you cannot unscrew the panel open.") + return + + if(W.tool_behaviour == TOOL_SCREWDRIVER) + if(density) + to_chat(user, "You need to open [src] before opening its maintenance panel.") + return + else if(default_deconstruction_screwdriver(user, icon_state, icon_state, W)) + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].") + return TRUE + + if(panel_open) + if(W.tool_behaviour == TOOL_MULTITOOL) + var/change_id = input("Set the shutters/blast door/blast door controllers ID. It must be a number between 1 and 100.", "ID", id) as num|null + if(change_id) + id = clamp(round(change_id, 1), 1, 100) + to_chat(user, "You change the ID to [id].") + + if(W.tool_behaviour == TOOL_CROWBAR && deconstruction == INTACT) + to_chat(user, "You start to remove the airlock electronics.") + if(do_after(user, 10 SECONDS, target = src)) + new /obj/item/electronics/airlock(loc) + id = null + deconstruction = FALSE + + if(W.tool_behaviour == TOOL_WIRECUTTER && deconstruction == FALSE) + to_chat(user, "You start to remove the internal cables.") + if(do_after(user, 10 SECONDS, target = src)) + deconstruction = TRUE + + if(W.tool_behaviour == TOOL_WELDER && deconstruction == TRUE) + to_chat(user, "You start tearing apart the [src].") + playsound(src.loc, 'sound/items/welder.ogg', 50, 1) + if(do_after(user, 15 SECONDS, target = src)) + new /obj/item/stack/sheet/plasteel(loc, 5) + qdel(src) + +/obj/machinery/door/poddoor/examine(mob/user) + . = ..() + if(panel_open) + . += "The maintenance panel is [panel_open ? "opened" : "closed"]." /obj/machinery/door/poddoor/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) id = "[port.id]_[id]" @@ -27,10 +74,12 @@ /obj/machinery/door/poddoor/ert name = "hardened blast door" desc = "A heavy duty blast door that only opens for dire emergencies." + ertblast = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //special poddoors that open when emergency shuttle docks at centcom /obj/machinery/door/poddoor/shuttledock + ertblast = TRUE var/checkdir = 4 //door won't open if turf in this dir is `turftype` var/turftype = /turf/open/space diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 72d38710e1b..efbd42a7a12 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -16,6 +16,7 @@ /obj/machinery/door/poddoor/shutters/indestructible name = "hardened shutters" + ertblast = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/machinery/door/poddoor/shutters/radiation diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 35cc75c4f21..c13613935e6 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -13,6 +13,12 @@ if(id) . += "Its channel ID is '[id]'." +/obj/item/assembly/control/multitool_act(mob/living/user) + var/change_id = input("Set the shutters/blast door/blast door controllers ID. It must be a number between 1 and 100.", "ID", id) as num|null + if(change_id) + id = clamp(round(change_id, 1), 1, 100) + to_chat(user, "You change the ID to [id].") + /obj/item/assembly/control/activate() var/openclose if(cooldown) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index ac83358fdda..60c22cc0a6a 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -1203,3 +1203,11 @@ materials = list(/datum/material/iron = 75) build_path = /obj/item/chisel category = list("initial","Tools") + +/datum/design/control + name = "Blast Door Controller" + id = "blast" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 100, /datum/material/glass = 50) + build_path = /obj/item/assembly/control + category = list("initial","Misc")