From b93a75baa074a2f208d2adb9f72a9c8dea949c74 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 17 Aug 2020 14:50:19 +0200 Subject: [PATCH] [MIRROR] firedoor pr (#368) * firedoor pr (#52689) * firedoor pr Co-authored-by: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> --- code/game/machinery/doors/firedoor.dm | 163 ++++++++------------------ icons/obj/doors/doorfire.dmi | Bin 7717 -> 7657 bytes 2 files changed, 47 insertions(+), 116 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 669dbd029bd..ce8d2828d89 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -1,8 +1,6 @@ -#define CONSTRUCTION_COMPLETE 0 //No construction done - functioning as normal #define CONSTRUCTION_PANEL_OPEN 1 //Maintenance panel is open, still functioning -#define CONSTRUCTION_WIRES_EXPOSED 2 //Cover plate is removed, wires are available -#define CONSTRUCTION_GUTTED 3 //Wires are removed, circuit ready to remove -#define CONSTRUCTION_NOCIRCUIT 4 //Circuit board removed, can safely weld apart +#define CONSTRUCTION_NO_CIRCUIT 2 //Circuit board removed, can safely weld apart +#define DEFAULT_STEP_TIME 20 /// default time for each step /obj/machinery/door/firedoor name = "firelock" @@ -21,7 +19,7 @@ layer = BELOW_OPEN_DOOR_LAYER closingLayer = CLOSED_FIREDOOR_LAYER assemblytype = /obj/structure/firelock_frame - armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) + armor = list("melee" = 10, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN var/nextstate = null var/boltslocked = TRUE @@ -95,7 +93,6 @@ add_fingerprint(user) if(operating) return - if(welded) if(C.tool_behaviour == TOOL_WRENCH) if(boltslocked) @@ -104,7 +101,7 @@ C.play_tool_sound(src) user.visible_message("[user] starts undoing [src]'s bolts...", \ "You start unfastening [src]'s floor bolts...") - if(!C.use_tool(src, user, 50)) + if(!C.use_tool(src, user, DEFAULT_STEP_TIME)) return playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) user.visible_message("[user] unfastens [src]'s bolts.", \ @@ -117,7 +114,6 @@ C.play_tool_sound(src) boltslocked = !boltslocked return - return ..() /obj/machinery/door/firedoor/try_to_activate_door(mob/user) @@ -127,7 +123,7 @@ if(!W.tool_start_check(user, amount=0)) return user.visible_message("[user] starts [welded ? "unwelding" : "welding"] [src].", "You start welding [src].") - if(W.use_tool(src, user, 40, volume=50)) + if(W.use_tool(src, user, DEFAULT_STEP_TIME, volume=50)) welded = !welded to_chat(user, "[user] [welded?"welds":"unwelds"] [src].", "You [welded ? "weld" : "unweld"] [src].") update_icon() @@ -193,13 +189,17 @@ /obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) - var/obj/structure/firelock_frame/F = new assemblytype(get_turf(src)) - if(disassembled) - F.constructionStep = CONSTRUCTION_PANEL_OPEN + var/turf/T = get_turf(src) + if(disassembled || prob(40)) + var/obj/structure/firelock_frame/F = new assemblytype(T) + if(disassembled) + F.constructionStep = CONSTRUCTION_PANEL_OPEN + else + F.constructionStep = CONSTRUCTION_NO_CIRCUIT + F.obj_integrity = F.max_integrity * 0.5 + F.update_icon() else - F.constructionStep = CONSTRUCTION_WIRES_EXPOSED - F.obj_integrity = F.max_integrity * 0.5 - F.update_icon() + new /obj/item/electronics/firelock (T) qdel(src) @@ -268,22 +268,18 @@ icon_state = "frame1" anchored = FALSE density = TRUE - var/constructionStep = CONSTRUCTION_NOCIRCUIT + var/constructionStep = CONSTRUCTION_NO_CIRCUIT var/reinforced = 0 /obj/structure/firelock_frame/examine(mob/user) . = ..() switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) - . += "It is unbolted from the floor. A small loosely connected metal plate is covering the wires." + . += "It is unbolted from the floor. The circuit could be removed with a crowbar." if(!reinforced) . += "It could be reinforced with plasteel." - if(CONSTRUCTION_WIRES_EXPOSED) - . += "The maintenance plate has been pried away, and wires are trailing." - if(CONSTRUCTION_GUTTED) - . += "The maintenance panel is missing wires and the circuit board is loosely connected." - if(CONSTRUCTION_NOCIRCUIT) - . += "There are no firelock electronics in the frame. The frame could be cut apart." + if(CONSTRUCTION_NO_CIRCUIT) + . += "There are no firelock electronics in the frame. The frame could be welded apart ." /obj/structure/firelock_frame/update_icon_state() icon_state = "frame[constructionStep]" @@ -293,16 +289,17 @@ if(CONSTRUCTION_PANEL_OPEN) if(C.tool_behaviour == TOOL_CROWBAR) C.play_tool_sound(src) - user.visible_message("[user] starts prying something out from [src]...", \ - "You begin prying out the wire cover...") - if(!C.use_tool(src, user, 50)) + user.visible_message("[user] begins removing the circuit board from [src]...", \ + "You begin prying out the circuit board from [src]...") + if(!C.use_tool(src, user, DEFAULT_STEP_TIME)) return if(constructionStep != CONSTRUCTION_PANEL_OPEN) return playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ - "You remove the cover plate from [src], exposing the wires.") - constructionStep = CONSTRUCTION_WIRES_EXPOSED + user.visible_message("[user] removes [src]'s circuit board.", \ + "You remove the circuit board from [src].") + new /obj/item/electronics/firelock(drop_location()) + constructionStep = CONSTRUCTION_NO_CIRCUIT update_icon() return if(C.tool_behaviour == TOOL_WRENCH) @@ -312,7 +309,7 @@ C.play_tool_sound(src) user.visible_message("[user] starts bolting down [src]...", \ "You begin bolting [src]...") - if(!C.use_tool(src, user, 30)) + if(!C.use_tool(src, user, DEFAULT_STEP_TIME)) return if(locate(/obj/machinery/door/firedoor) in get_turf(src)) return @@ -336,7 +333,7 @@ user.visible_message("[user] begins reinforcing [src]...", \ "You begin reinforcing [src]...") playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - if(do_after(user, 60, target = src)) + if(do_after(user, DEFAULT_STEP_TIME, target = src)) if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || P.get_amount() < 2 || !P) return user.visible_message("[user] reinforces [src].", \ @@ -345,77 +342,29 @@ P.use(2) reinforced = 1 return - - if(CONSTRUCTION_WIRES_EXPOSED) - if(C.tool_behaviour == TOOL_WIRECUTTER) - C.play_tool_sound(src) - user.visible_message("[user] starts cutting the wires from [src]...", \ - "You begin removing [src]'s wires...") - if(!C.use_tool(src, user, 60)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return - user.visible_message("[user] removes the wires from [src].", \ - "You remove the wiring from [src], exposing the circuit board.") - new/obj/item/stack/cable_coil(get_turf(src), 5) - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return - if(C.tool_behaviour == TOOL_CROWBAR) - C.play_tool_sound(src) - user.visible_message("[user] starts prying a metal plate into [src]...", \ - "You begin prying the cover plate back onto [src]...") - if(!C.use_tool(src, user, 80)) - return - if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) - return + if(CONSTRUCTION_NO_CIRCUIT) + if(istype(C, /obj/item/electronics/firelock)) + user.visible_message("[user] starts adding [C] to [src]...", \ + "You begin adding a circuit board to [src]...") + playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) + if(!do_after(user, DEFAULT_STEP_TIME, target = src)) + return + if(constructionStep != CONSTRUCTION_NO_CIRCUIT) + return + qdel(C) + user.visible_message("[user] adds a circuit to [src].", \ + "You insert and secure [C].") playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - user.visible_message("[user] pries the metal plate into [src].", \ - "You pry [src]'s cover plate into place, hiding the wires.") constructionStep = CONSTRUCTION_PANEL_OPEN - update_icon() return - if(CONSTRUCTION_GUTTED) - if(C.tool_behaviour == TOOL_CROWBAR) - user.visible_message("[user] begins removing the circuit board from [src]...", \ - "You begin prying out the circuit board from [src]...") - if(!C.use_tool(src, user, 50, volume=50)) - return - if(constructionStep != CONSTRUCTION_GUTTED) - return - user.visible_message("[user] removes [src]'s circuit board.", \ - "You remove the circuit board from [src].") - new /obj/item/electronics/firelock(drop_location()) - constructionStep = CONSTRUCTION_NOCIRCUIT - update_icon() - return - if(istype(C, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/B = C - if(B.get_amount() < 5) - to_chat(user, "You need more wires to add wiring to [src].") - return - user.visible_message("[user] begins wiring [src]...", \ - "You begin adding wires to [src]...") - playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - if(do_after(user, 60, target = src)) - if(constructionStep != CONSTRUCTION_GUTTED || B.get_amount() < 5 || !B) - return - user.visible_message("[user] adds wires to [src].", \ - "You wire [src].") - playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - B.use(5) - constructionStep = CONSTRUCTION_WIRES_EXPOSED - update_icon() - return - if(CONSTRUCTION_NOCIRCUIT) if(C.tool_behaviour == TOOL_WELDER) if(!C.tool_start_check(user, amount=1)) return user.visible_message("[user] begins cutting apart [src]'s frame...", \ "You begin slicing [src] apart...") - if(C.use_tool(src, user, 40, volume=50, amount=1)) - if(constructionStep != CONSTRUCTION_NOCIRCUIT) + if(C.use_tool(src, user, DEFAULT_STEP_TIME, volume=50, amount=1)) + if(constructionStep != CONSTRUCTION_NO_CIRCUIT) return user.visible_message("[user] cuts apart [src]!", \ "You cut [src] into metal.") @@ -425,28 +374,13 @@ new /obj/item/stack/sheet/plasteel(T, 2) qdel(src) return - if(istype(C, /obj/item/electronics/firelock)) - user.visible_message("[user] starts adding [C] to [src]...", \ - "You begin adding a circuit board to [src]...") - playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - if(!do_after(user, 40, target = src)) - return - if(constructionStep != CONSTRUCTION_NOCIRCUIT) - return - qdel(C) - user.visible_message("[user] adds a circuit to [src].", \ - "You insert and secure [C].") - playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, TRUE) - constructionStep = CONSTRUCTION_GUTTED - update_icon() - return if(istype(C, /obj/item/electroadaptive_pseudocircuit)) var/obj/item/electroadaptive_pseudocircuit/P = C - if(!P.adapt_circuit(user, 30)) + if(!P.adapt_circuit(user, DEFAULT_STEP_TIME * 0.5)) return user.visible_message("[user] fabricates a circuit and places it into [src].", \ "You adapt a firelock circuit and slot it into the assembly.") - constructionStep = CONSTRUCTION_GUTTED + constructionStep = CONSTRUCTION_PANEL_OPEN update_icon() return return ..() @@ -454,7 +388,7 @@ /obj/structure/firelock_frame/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 16) - else if((constructionStep == CONSTRUCTION_NOCIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)) + else if((constructionStep == CONSTRUCTION_NO_CIRCUIT) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)) return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1) return FALSE @@ -463,7 +397,7 @@ if(RCD_UPGRADE_SIMPLE_CIRCUITS) user.visible_message("[user] fabricates a circuit and places it into [src].", \ "You adapt a firelock circuit and slot it into the assembly.") - constructionStep = CONSTRUCTION_GUTTED + constructionStep = CONSTRUCTION_PANEL_OPEN update_icon() return TRUE if(RCD_DECONSTRUCT) @@ -476,8 +410,5 @@ name = "heavy firelock frame" reinforced = TRUE -#undef CONSTRUCTION_COMPLETE #undef CONSTRUCTION_PANEL_OPEN -#undef CONSTRUCTION_WIRES_EXPOSED -#undef CONSTRUCTION_GUTTED -#undef CONSTRUCTION_NOCIRCUIT +#undef CONSTRUCTION_NO_CIRCUIT diff --git a/icons/obj/doors/doorfire.dmi b/icons/obj/doors/doorfire.dmi index 3b9f05cfa32116b59b224b7e8f243728647e922c..472415ec798e37ad4400e83407d0cd478cd9a139 100644 GIT binary patch literal 7657 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 literal 7717 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