mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
325 lines
12 KiB
Plaintext
325 lines
12 KiB
Plaintext
#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
|
|
|
|
/var/const/OPEN = 1
|
|
/var/const/CLOSED = 2
|
|
|
|
/obj/machinery/door/firedoor
|
|
name = "firelock"
|
|
desc = "Apply crowbar."
|
|
icon = 'icons/obj/doors/Doorfireglass.dmi'
|
|
icon_state = "door_open"
|
|
opacity = 0
|
|
density = 0
|
|
heat_proof = 1
|
|
glass = 1
|
|
var/blocked = 0
|
|
var/nextstate = null
|
|
sub_door = 1
|
|
closingLayer = 3.11
|
|
|
|
/obj/machinery/door/firedoor/Bumped(atom/AM)
|
|
if(p_open || operating)
|
|
return
|
|
if(!density)
|
|
return ..()
|
|
return 0
|
|
|
|
|
|
/obj/machinery/door/firedoor/power_change()
|
|
if(powered(power_channel))
|
|
stat &= ~NOPOWER
|
|
latetoggle()
|
|
else
|
|
stat |= NOPOWER
|
|
return
|
|
|
|
|
|
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C, mob/user, params)
|
|
add_fingerprint(user)
|
|
if(operating)
|
|
return//Already doing something.
|
|
|
|
if(istype(C, /obj/item/weapon/weldingtool))
|
|
var/obj/item/weapon/weldingtool/W = C
|
|
if(W.remove_fuel(0, user))
|
|
blocked = !blocked
|
|
user << text("<span class='danger'>You [blocked?"welded":"unwelded"] \the [src]</span>")
|
|
update_icon()
|
|
return
|
|
|
|
if(istype(C, /obj/item/weapon/wrench) && panel_open)
|
|
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] starts undoing [src]'s bolts...</span>", \
|
|
"<span class='notice'>You start unfastening [src]'s floor bolts...</span>")
|
|
if(!do_after(user, 50/C.toolspeed, target = src))
|
|
return
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] unfastens [src]'s bolts.</span>", \
|
|
"<span class='notice'>You undo [src]'s floor bolts.</span>")
|
|
var/obj/structure/firelock_frame/F = new(get_turf(src))
|
|
if(istype(src, /obj/machinery/door/firedoor/heavy))
|
|
F.reinforced = 1
|
|
F.constructionStep = CONSTRUCTION_PANEL_OPEN
|
|
F.update_icon()
|
|
qdel(src)
|
|
return
|
|
|
|
if(istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1))
|
|
if(blocked || operating)
|
|
return
|
|
if(density)
|
|
open()
|
|
return
|
|
else //close it up again //fucking 10/10 commenting here einstein
|
|
close()
|
|
return
|
|
|
|
if(istype(C, /obj/item/weapon/screwdriver))
|
|
default_deconstruction_screwdriver(user, icon_state, icon_state, C)
|
|
return
|
|
|
|
return
|
|
|
|
/obj/machinery/door/firedoor/attack_ai(mob/user)
|
|
add_fingerprint(user)
|
|
if(blocked || operating || stat & NOPOWER)
|
|
return
|
|
if(density)
|
|
open()
|
|
else
|
|
close()
|
|
return
|
|
|
|
/obj/machinery/door/firedoor/do_animate(animation)
|
|
switch(animation)
|
|
if("opening")
|
|
flick("door_opening", src)
|
|
if("closing")
|
|
flick("door_closing", src)
|
|
return
|
|
|
|
|
|
/obj/machinery/door/firedoor/update_icon()
|
|
overlays.Cut()
|
|
if(density)
|
|
icon_state = "door_closed"
|
|
if(blocked)
|
|
overlays += "welded"
|
|
else
|
|
icon_state = "door_open"
|
|
if(blocked)
|
|
overlays += "welded_open"
|
|
return
|
|
|
|
/obj/machinery/door/firedoor/open()
|
|
..()
|
|
latetoggle()
|
|
return
|
|
|
|
/obj/machinery/door/firedoor/close()
|
|
..()
|
|
if(locate(/mob/living) in get_turf(src))
|
|
open()
|
|
return
|
|
latetoggle()
|
|
return
|
|
|
|
/obj/machinery/door/firedoor/proc/latetoggle()
|
|
if(operating || stat & NOPOWER || !nextstate)
|
|
return
|
|
switch(nextstate)
|
|
if(OPEN)
|
|
nextstate = null
|
|
open()
|
|
if(CLOSED)
|
|
nextstate = null
|
|
close()
|
|
return
|
|
|
|
|
|
/obj/machinery/door/firedoor/border_only
|
|
icon = 'icons/obj/doors/edge_Doorfire.dmi'
|
|
flags = ON_BORDER
|
|
|
|
/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target, height=0)
|
|
if(istype(mover) && mover.checkpass(PASSGLASS))
|
|
return 1
|
|
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
|
|
return !density
|
|
else
|
|
return 1
|
|
|
|
/obj/machinery/door/firedoor/border_only/CheckExit(atom/movable/mover as mob|obj, turf/target)
|
|
if(istype(mover) && mover.checkpass(PASSGLASS))
|
|
return 1
|
|
if(get_dir(loc, target) == dir)
|
|
return !density
|
|
else
|
|
return 1
|
|
|
|
/obj/machinery/door/firedoor/border_only/CanAtmosPass(turf/T)
|
|
if(get_dir(loc, T) == dir)
|
|
return !density
|
|
else
|
|
return 1
|
|
|
|
|
|
/obj/machinery/door/firedoor/heavy
|
|
name = "heavy firelock"
|
|
icon = 'icons/obj/doors/Doorfire.dmi'
|
|
glass = 0
|
|
|
|
/obj/item/weapon/electronics/firelock
|
|
name = "firelock circuitry"
|
|
desc = "A circuit board used in construction of firelocks."
|
|
icon_state = "mainboard"
|
|
|
|
/obj/structure/firelock_frame
|
|
name = "firelock frame"
|
|
desc = "A partially completed firelock."
|
|
icon = 'icons/obj/doors/Doorfire.dmi'
|
|
icon_state = "frame1"
|
|
anchored = 0
|
|
density = 1
|
|
var/constructionStep = CONSTRUCTION_NOCIRCUIT
|
|
var/reinforced = 0
|
|
|
|
/obj/structure/firelock_frame/examine(mob/user)
|
|
..()
|
|
switch(constructionStep)
|
|
if(CONSTRUCTION_PANEL_OPEN)
|
|
user << "There is a small metal plate covering the wires."
|
|
if(CONSTRUCTION_WIRES_EXPOSED)
|
|
user << "Wires are trailing from the maintenance panel."
|
|
if(CONSTRUCTION_GUTTED)
|
|
user << "The circuit board is visible."
|
|
if(CONSTRUCTION_NOCIRCUIT)
|
|
user << "There are no electronics in the frame."
|
|
|
|
/obj/structure/firelock_frame/update_icon()
|
|
..()
|
|
icon_state = "frame[constructionStep]"
|
|
|
|
/obj/structure/firelock_frame/attackby(obj/item/weapon/C, mob/user)
|
|
switch(constructionStep)
|
|
if(CONSTRUCTION_PANEL_OPEN)
|
|
if(istype(C, /obj/item/weapon/crowbar))
|
|
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] starts prying something out from [src]...</span>", \
|
|
"<span class='notice'>You begin prying out the wire cover...</span>")
|
|
if(!do_after(user, 50/C.toolspeed, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_PANEL_OPEN) return
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] pries out a metal plate from [src], exposing the wires.</span>", \
|
|
"<span class='notice'>You remove the cover plate from [src], exposing the wires.</span>")
|
|
constructionStep = CONSTRUCTION_WIRES_EXPOSED
|
|
update_icon()
|
|
return
|
|
if(istype(C, /obj/item/weapon/wrench))
|
|
playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] starts bolting down [src]...</span>", \
|
|
"<span class='notice'>You begin bolting [src]...</span>")
|
|
if(!do_after(user, 30/C.toolspeed, target = src)) return
|
|
user.visible_message("<span class='notice'>[user] finishes the firelock.</span>", \
|
|
"<span class='notice'>You finish the firelock.</span>")
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
if(reinforced)
|
|
new /obj/machinery/door/firedoor/heavy(get_turf(src))
|
|
else
|
|
new /obj/machinery/door/firedoor(get_turf(src))
|
|
qdel(src)
|
|
return
|
|
if(CONSTRUCTION_WIRES_EXPOSED)
|
|
if(istype(C, /obj/item/weapon/wirecutters))
|
|
playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] starts cutting the wires from [src]...</span>", \
|
|
"<span class='notice'>You begin removing [src]'s wires...</span>")
|
|
if(!do_after(user, 60/C.toolspeed, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return
|
|
user.visible_message("<span class='notice'>[user] removes the wires from [src].</span>", \
|
|
"<span class='notice'>You remove the wiring from [src], exposing the circuit board.</span>")
|
|
var/obj/item/stack/cable_coil/B = new(get_turf(src))
|
|
B.amount = 5
|
|
constructionStep = CONSTRUCTION_GUTTED
|
|
update_icon()
|
|
return
|
|
if(istype(C, /obj/item/weapon/weldingtool))
|
|
var/obj/item/weapon/weldingtool/W = C
|
|
if(W.remove_fuel(1, user))
|
|
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] starts welding a metal plate into [src]...</span>", \
|
|
"<span class='notice'>You begin welding the cover plate back onto [src]...</span>")
|
|
if(!do_after(user, 80/C.toolspeed, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return
|
|
playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] welds the metal plate into [src].</span>", \
|
|
"<span class='notice'>You weld [src]'s cover plate into place, hiding the wires.</span>")
|
|
constructionStep = CONSTRUCTION_PANEL_OPEN
|
|
update_icon()
|
|
return
|
|
if(CONSTRUCTION_GUTTED)
|
|
if(istype(C, /obj/item/weapon/crowbar))
|
|
user.visible_message("<span class='notice'>[user] begins removing the circuit board from [src]...</span>", \
|
|
"<span class='notice'>You begin prying out the circuit board from [src]...</span>")
|
|
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
|
if(!do_after(user, 50/C.toolspeed, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_GUTTED) return
|
|
user.visible_message("<span class='notice'>[user] removes [src]'s circuit board.</span>", \
|
|
"<span class='notice'>You remove the circuit board from [src].</span>")
|
|
new /obj/item/weapon/electronics/firelock(get_turf(src))
|
|
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
|
constructionStep = CONSTRUCTION_NOCIRCUIT
|
|
update_icon()
|
|
return
|
|
if(istype(C, /obj/item/stack/cable_coil))
|
|
var/obj/item/stack/cable_coil/B = C
|
|
if(B.amount < 5)
|
|
user << "<span class='warning'>You need more wires to add wiring to [src].</span>"
|
|
return
|
|
user.visible_message("<span class='notice'>[user] begins wiring [src]...</span>", \
|
|
"<span class='notice'>You begin adding wires to [src]...</span>")
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
if(!do_after(user, 60, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_GUTTED) return
|
|
user.visible_message("<span class='notice'>[user] adds wires to [src].</span>", \
|
|
"<span class='notice'>You wire [src].</span>")
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
B.use(5)
|
|
constructionStep = CONSTRUCTION_WIRES_EXPOSED
|
|
update_icon()
|
|
return
|
|
if(CONSTRUCTION_NOCIRCUIT)
|
|
if(istype(C, /obj/item/weapon/weldingtool))
|
|
var/obj/item/weapon/weldingtool/W = C
|
|
if(W.remove_fuel(1,user))
|
|
playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1)
|
|
user.visible_message("<span class='notice'>[user] begins cutting apart [src]'s frame...</span>", \
|
|
"<span class='notice'>You begin slicing [src] apart...</span>")
|
|
if(!do_after(user, 80/C.toolspeed, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_NOCIRCUIT) return
|
|
user.visible_message("<span class='notice'>[user] cuts apart [src]!</span>", \
|
|
"<span class='notice'>You cut [src] into metal.</span>")
|
|
playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1)
|
|
var/obj/item/stack/sheet/metal/M = new(get_turf(src))
|
|
M.amount = 3
|
|
qdel(src)
|
|
return
|
|
if(istype(C, /obj/item/weapon/electronics/firelock))
|
|
user.visible_message("<span class='notice'>[user] starts adding [C] to [src]...</span>", \
|
|
"<span class='notice'>You begin adding a circuit board to [src]...</span>")
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
if(!do_after(user, 40, target = src)) return
|
|
if(constructionStep != CONSTRUCTION_NOCIRCUIT) return
|
|
user.drop_item()
|
|
qdel(C)
|
|
user.visible_message("<span class='notice'>[user] adds a circuit to [src].</span>", \
|
|
"<span class='notice'>You insert and secure [C].</span>")
|
|
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
|
constructionStep = CONSTRUCTION_GUTTED
|
|
update_icon()
|
|
return
|