mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
* Fixes reinforced Walls construction when having one sheet left in the stack * Amends Windoors - Assemblies are now made with two sheets of either normal or reinforced glass sheets, for normal and secure windoors respecting. - Assemblies can now be named with a pen, just like airlocks. - Windoor assemblies now get placed like windows, and windows take windoor assemblies into account when placed. - Decapitalises windoor assembly names. - Shattering windoors will make them drop exactly what they were made of now. - Prying emagged windoors will no longer make them shatter on top of returning to an assembly. - Cleans up a lot of code and gets its own update_icon() proc. * Amends airlocks - Fixes airlocks occasionally not updating their icon correctly. - Fixes airlocks causing sparks on spawn as if they were damaged. - Fixes airlock not being anchored after being turned into an assembly. - Decapitalises airlock names. * Windows that get unanchored by force will now correctly have the rotate verb. * Adds changelog entry
301 lines
11 KiB
Plaintext
301 lines
11 KiB
Plaintext
/obj/structure/door_assembly
|
|
name = "airlock assembly"
|
|
icon = 'icons/obj/doors/door_assembly.dmi'
|
|
icon_state = "door_as_0"
|
|
anchored = 0
|
|
density = 1
|
|
w_class = 5
|
|
var/state = 0
|
|
var/base_icon_state = ""
|
|
var/base_name = "airlock"
|
|
var/obj/item/weapon/airlock_electronics/electronics = null
|
|
var/airlock_type = "" //the type path of the airlock once completed
|
|
var/glass_type = "/glass"
|
|
var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead.
|
|
var/created_name = null
|
|
|
|
New()
|
|
update_state()
|
|
|
|
/obj/structure/door_assembly/door_assembly_com
|
|
base_icon_state = "com"
|
|
base_name = "Command airlock"
|
|
glass_type = "/glass_command"
|
|
airlock_type = "/command"
|
|
|
|
/obj/structure/door_assembly/door_assembly_sec
|
|
base_icon_state = "sec"
|
|
base_name = "Security airlock"
|
|
glass_type = "/glass_security"
|
|
airlock_type = "/security"
|
|
|
|
/obj/structure/door_assembly/door_assembly_eng
|
|
base_icon_state = "eng"
|
|
base_name = "Engineering airlock"
|
|
glass_type = "/glass_engineering"
|
|
airlock_type = "/engineering"
|
|
|
|
/obj/structure/door_assembly/door_assembly_eat
|
|
base_icon_state = "eat"
|
|
base_name = "Engineering atmos airlock"
|
|
glass_type = "/glass_engineeringatmos"
|
|
airlock_type = "/engineering"
|
|
|
|
/obj/structure/door_assembly/door_assembly_min
|
|
base_icon_state = "min"
|
|
base_name = "Mining airlock"
|
|
glass_type = "/glass_mining"
|
|
airlock_type = "/mining"
|
|
|
|
/obj/structure/door_assembly/door_assembly_atmo
|
|
base_icon_state = "atmo"
|
|
base_name = "Atmospherics airlock"
|
|
glass_type = "/glass_atmos"
|
|
airlock_type = "/atmos"
|
|
|
|
/obj/structure/door_assembly/door_assembly_research
|
|
base_icon_state = "res"
|
|
base_name = "Research airlock"
|
|
glass_type = "/glass_research"
|
|
airlock_type = "/research"
|
|
|
|
/obj/structure/door_assembly/door_assembly_science
|
|
base_icon_state = "sci"
|
|
base_name = "Science airlock"
|
|
glass_type = "/glass_science"
|
|
airlock_type = "/science"
|
|
|
|
/obj/structure/door_assembly/door_assembly_med
|
|
base_icon_state = "med"
|
|
base_name = "Medical airlock"
|
|
glass_type = "/glass_medical"
|
|
airlock_type = "/medical"
|
|
|
|
/obj/structure/door_assembly/door_assembly_mai
|
|
base_icon_state = "mai"
|
|
base_name = "Maintenance airlock"
|
|
airlock_type = "/maintenance"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/door_assembly_ext
|
|
base_icon_state = "ext"
|
|
base_name = "External airlock"
|
|
airlock_type = "/external"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/door_assembly_fre
|
|
base_icon_state = "fre"
|
|
base_name = "Freezer airlock"
|
|
airlock_type = "/freezer"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/door_assembly_hatch
|
|
base_icon_state = "hatch"
|
|
base_name = "airtight hatch"
|
|
airlock_type = "/hatch"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/door_assembly_mhatch
|
|
base_icon_state = "mhatch"
|
|
base_name = "maintenance hatch"
|
|
airlock_type = "/maintenance_hatch"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
|
|
base_icon_state = "highsec"
|
|
base_name = "high security airlock"
|
|
airlock_type = "/highsecurity"
|
|
glass = -1
|
|
|
|
/obj/structure/door_assembly/multi_tile
|
|
icon = 'icons/obj/doors/door_assembly2x1.dmi'
|
|
dir = EAST
|
|
var/width = 1
|
|
|
|
/*Temporary until we get sprites.
|
|
glass_type = "/multi_tile/glass"
|
|
airlock_type = "/multi_tile/maint"
|
|
glass = 1*/
|
|
base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1.
|
|
airlock_type = "/multi_tile/glass"
|
|
glass = -1 //To prevent bugs in deconstruction process.
|
|
|
|
New()
|
|
if(dir in list(EAST, WEST))
|
|
bound_width = width * world.icon_size
|
|
bound_height = world.icon_size
|
|
else
|
|
bound_width = world.icon_size
|
|
bound_height = width * world.icon_size
|
|
update_state()
|
|
|
|
Move()
|
|
. = ..()
|
|
if(dir in list(EAST, WEST))
|
|
bound_width = width * world.icon_size
|
|
bound_height = world.icon_size
|
|
else
|
|
bound_width = world.icon_size
|
|
bound_height = width * world.icon_size
|
|
|
|
|
|
|
|
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
|
|
if(istype(W, /obj/item/weapon/pen))
|
|
var/t = sanitizeSafe(input(user, "Enter the name for the door.", src.name, src.created_name), MAX_NAME_LEN)
|
|
if(!t) return
|
|
if(!in_range(src, usr) && src.loc != usr) return
|
|
created_name = t
|
|
return
|
|
|
|
if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) ))
|
|
var/obj/item/weapon/weldingtool/WT = W
|
|
if (WT.remove_fuel(0, user))
|
|
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
|
if(istext(glass))
|
|
user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.")
|
|
if(do_after(user, 40))
|
|
if(!src || !WT.isOn()) return
|
|
user << "<span class='notice'>You welded the [glass] plating off!</span>"
|
|
var/M = text2path("/obj/item/stack/material/[glass]")
|
|
new M(src.loc, 2)
|
|
glass = 0
|
|
else if(glass == 1)
|
|
user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.")
|
|
if(do_after(user, 40))
|
|
if(!src || !WT.isOn()) return
|
|
user << "<span class='notice'>You welded the glass panel out!</span>"
|
|
new /obj/item/stack/material/glass/reinforced(src.loc)
|
|
glass = 0
|
|
else if(!anchored)
|
|
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
|
|
if(do_after(user, 40))
|
|
if(!src || !WT.isOn()) return
|
|
user << "<span class='notice'>You dissasembled the airlock assembly!</span>"
|
|
new /obj/item/stack/material/steel(src.loc, 4)
|
|
qdel (src)
|
|
else
|
|
user << "<span class='notice'>You need more welding fuel.</span>"
|
|
return
|
|
|
|
else if(istype(W, /obj/item/weapon/wrench) && state == 0)
|
|
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
|
if(anchored)
|
|
user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", "You starts unsecuring the airlock assembly from the floor.")
|
|
else
|
|
user.visible_message("[user] begins securing the airlock assembly to the floor.", "You starts securing the airlock assembly to the floor.")
|
|
|
|
if(do_after(user, 40))
|
|
if(!src) return
|
|
user << "<span class='notice'>You [anchored? "un" : ""]secured the airlock assembly!</span>"
|
|
anchored = !anchored
|
|
|
|
else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored)
|
|
var/obj/item/stack/cable_coil/C = W
|
|
if (C.get_amount() < 1)
|
|
user << "<span class='warning'>You need one length of coil to wire the airlock assembly.</span>"
|
|
return
|
|
user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.")
|
|
if(do_after(user, 40) && state == 0 && anchored)
|
|
if (C.use(1))
|
|
src.state = 1
|
|
user << "<span class='notice'>You wire the airlock.</span>"
|
|
|
|
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
|
|
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
|
|
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
|
|
|
if(do_after(user, 40))
|
|
if(!src) return
|
|
user << "<span class='notice'>You cut the airlock wires.!</span>"
|
|
new/obj/item/stack/cable_coil(src.loc, 1)
|
|
src.state = 0
|
|
|
|
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1)
|
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
|
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
|
|
|
|
if(do_after(user, 40))
|
|
if(!src) return
|
|
user.drop_item()
|
|
W.loc = src
|
|
user << "<span class='notice'>You installed the airlock electronics!</span>"
|
|
src.state = 2
|
|
src.electronics = W
|
|
|
|
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
|
//This should never happen, but just in case I guess
|
|
if (!electronics)
|
|
user << "<span class='notice'>There was nothing to remove.</span>"
|
|
src.state = 1
|
|
return
|
|
|
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
|
user.visible_message("\The [user] starts removing the electronics from the airlock assembly.", "You start removing the electronics from the airlock assembly.")
|
|
|
|
if(do_after(user, 40))
|
|
if(!src) return
|
|
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
|
src.state = 1
|
|
electronics.loc = src.loc
|
|
electronics = null
|
|
|
|
else if(istype(W, /obj/item/stack/material) && !glass)
|
|
var/obj/item/stack/S = W
|
|
var/material_name = S.get_material_name()
|
|
if (S)
|
|
if (S.get_amount() >= 1)
|
|
if(material_name == "rglass")
|
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
|
user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
|
|
if(do_after(user, 40) && !glass)
|
|
if (S.use(1))
|
|
user << "<span class='notice'>You installed reinforced glass windows into the airlock assembly.</span>"
|
|
glass = 1
|
|
else if(material_name)
|
|
// Ugly hack, will suffice for now. Need to fix it upstream as well, may rewrite mineral walls. ~Z
|
|
if(!(material_name in list("gold", "silver", "diamond", "uranium", "phoron", "sandstone")))
|
|
user << "You cannot make an airlock out of that material."
|
|
return
|
|
if(S.get_amount() >= 2)
|
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
|
user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
|
|
if(do_after(user, 40) && !glass)
|
|
if (S.use(2))
|
|
user << "<span class='notice'>You installed [material_display_name(material_name)] plating into the airlock assembly.</span>"
|
|
glass = material_name
|
|
|
|
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
|
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
|
user << "<span class='notice'>Now finishing the airlock.</span>"
|
|
|
|
if(do_after(user, 40))
|
|
if(!src) return
|
|
user << "<span class='notice'>You finish the airlock!</span>"
|
|
var/path
|
|
if(istext(glass))
|
|
path = text2path("/obj/machinery/door/airlock/[glass]")
|
|
else if (glass == 1)
|
|
path = text2path("/obj/machinery/door/airlock[glass_type]")
|
|
else
|
|
path = text2path("/obj/machinery/door/airlock[airlock_type]")
|
|
|
|
new path(src.loc, src)
|
|
qdel(src)
|
|
else
|
|
..()
|
|
update_state()
|
|
|
|
/obj/structure/door_assembly/proc/update_state()
|
|
icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]"
|
|
name = ""
|
|
switch (state)
|
|
if(0)
|
|
if (anchored)
|
|
name = "secured "
|
|
if(1)
|
|
name = "wired "
|
|
if(2)
|
|
name = "near finished "
|
|
name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])"
|