[MIRROR] Most materials can be used to build most things [MDB IGNORE] (#13202)

* Most materials can be used to build most things

* Fixes the merge conflict

* Makes it so our vis_overlay1 is initialized first. It's awful but it works

* Properly fixes the CI issues with the plasma airlocks

Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
This commit is contained in:
SkyratBot
2022-05-03 19:11:07 +01:00
committed by GitHub
co-authored by Y0SH1M4S73R GoldenAlpharex
parent 2a266ef15b
commit f4c2b35c06
24 changed files with 641 additions and 126 deletions
+41 -36
View File
@@ -17,6 +17,7 @@
var/heat_proof_finished = 0 //whether to heat-proof the finished airlock
var/previous_assembly = /obj/structure/door_assembly
var/noglass = FALSE //airlocks with no glass version, also cannot be modified with sheets
var/nomineral = FALSE //airlock with glass version, but cannot be modified with sheets
var/material_type = /obj/item/stack/sheet/iron
var/material_amt = 4
@@ -40,11 +41,11 @@
. += span_notice("The maintenance panel is <b>wired</b>, but the circuit slot is <i>empty</i>.")
if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
. += span_notice("The circuit is <b>connected loosely</b> to its slot, but the maintenance panel is <i>unscrewed and open</i>.")
if(!mineral && !glass && !noglass)
if(!mineral && !nomineral && !glass && !noglass)
. += span_notice("There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for glass windows and mineral covers.")
else if(!mineral && glass && !noglass)
else if(!mineral && !nomineral && glass && !noglass)
. += span_notice("There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for mineral covers.")
else if(mineral && !glass && !noglass)
else if(!glass && !noglass)
. += span_notice("There is a small <i>paper</i> placard on the assembly[doorname]. There are <i>empty</i> slots for glass windows.")
else
. += span_notice("There is a small <i>paper</i> placard on the assembly[doorname].")
@@ -202,7 +203,7 @@
name = "near finished window airlock assembly"
G.use(1)
glass = TRUE
if(!mineral)
if(!nomineral && !mineral)
if(istype(G, /obj/item/stack/sheet/mineral) && G.sheettype)
var/M = G.sheettype
var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
@@ -245,43 +246,47 @@
if(W.use_tool(src, user, 40, volume=100))
if(loc && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER)
to_chat(user, span_notice("You finish the airlock."))
var/obj/machinery/door/airlock/door
if(glass)
door = new glass_type( loc )
else
door = new airlock_type( loc )
door.setDir(dir)
//SKYRAT EDIT ADDITION BEGIN - LARGE_DOORS
if(door.multi_tile)
door.SetBounds()
//SKYRAT EDIT END
door.unres_sides = electronics.unres_sides
//door.req_access = req_access
door.electronics = electronics
door.heat_proof = heat_proof_finished
door.security_level = 0
if(electronics.one_access)
door.req_one_access = electronics.accesses
else
door.req_access = electronics.accesses
if(created_name)
door.name = created_name
else if(electronics.passed_name)
door.name = sanitize(electronics.passed_name)
else
door.name = base_name
if(electronics.passed_cycle_id)
door.closeOtherId = electronics.passed_cycle_id
door.update_other_id()
door.previous_airlock = previous_assembly
electronics.forceMove(door)
door.update_appearance()
qdel(src)
finish_door()
else
return ..()
update_name()
update_appearance()
/obj/structure/door_assembly/proc/finish_door()
var/obj/machinery/door/airlock/door
if(glass)
door = new glass_type( loc )
else
door = new airlock_type( loc )
door.setDir(dir)
//SKYRAT EDIT ADDITION BEGIN - LARGE_DOORS
if(door.multi_tile)
door.SetBounds()
//SKYRAT EDIT END
door.unres_sides = electronics.unres_sides
//door.req_access = req_access
door.electronics = electronics
door.heat_proof = heat_proof_finished
door.security_level = 0
if(electronics.one_access)
door.req_one_access = electronics.accesses
else
door.req_access = electronics.accesses
if(created_name)
door.name = created_name
else if(electronics.passed_name)
door.name = sanitize(electronics.passed_name)
else
door.name = base_name
if(electronics.passed_cycle_id)
door.closeOtherId = electronics.passed_cycle_id
door.update_other_id()
door.previous_airlock = previous_assembly
electronics.forceMove(door)
door.update_appearance()
qdel(src)
return door
/obj/structure/door_assembly/update_overlays()
. = ..()
if(!glass)
@@ -258,3 +258,35 @@
/obj/structure/door_assembly/door_assembly_bronze/seethru
airlock_type = /obj/machinery/door/airlock/bronze/seethru
/obj/structure/door_assembly/door_assembly_material
name = "airlock assembly"
airlock_type = /obj/machinery/door/airlock/material
glass_type = /obj/machinery/door/airlock/material/glass
greyscale_config = /datum/greyscale_config/material_airlock
nomineral = TRUE
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS
/obj/structure/door_assembly/door_assembly_material/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
var/turf/T = get_turf(src)
for(var/material in custom_materials)
var/datum/material/material_datum = material
var/material_count = FLOOR(custom_materials[material_datum] / MINERAL_MATERIAL_AMOUNT, 1)
if(!disassembled)
material_count = rand(FLOOR(material_count/2, 1), material_count)
new material_datum.sheet_type(T, material_count)
if(glass)
if(disassembled)
if(heat_proof_finished)
new /obj/item/stack/sheet/rglass(T)
else
new /obj/item/stack/sheet/glass(T)
else
new /obj/item/shard(T)
qdel(src)
/obj/structure/door_assembly/door_assembly_material/finish_door()
var/obj/machinery/door/airlock/door = ..()
door.set_custom_materials(custom_materials)
return door
+88 -17
View File
@@ -181,34 +181,42 @@
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS)
/// Mutex to prevent infinite recursion when propagating radiation pulses
var/active = null
/// The last time a radiation pulse was performed
var/last_event = 0
/obj/structure/falsewall/uranium/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, .proc/radiate)
/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, params)
radiate()
return ..()
/obj/structure/falsewall/uranium/attack_hand(mob/user, list/modifiers)
radiate()
. = ..()
return ..()
/obj/structure/falsewall/uranium/proc/radiate()
if(!active)
if(world.time > last_event+15)
active = 1
radiation_pulse(
src,
max_range = 2,
threshold = RAD_LIGHT_INSULATION,
chance = URANIUM_IRRADIATION_CHANCE,
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
)
for(var/turf/closed/wall/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
active = null
return
return
SIGNAL_HANDLER
if(active)
return
if(world.time <= last_event + 1.5 SECONDS)
return
active = TRUE
radiation_pulse(
src,
max_range = 3,
threshold = RAD_LIGHT_INSULATION,
chance = URANIUM_IRRADIATION_CHANCE,
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
)
propagate_radiation_pulse()
last_event = world.time
active = FALSE
/*
* Other misc falsewall types
*/
@@ -359,3 +367,66 @@
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
/obj/structure/falsewall/material
name = "wall"
desc = "A huge chunk of material used to separate rooms."
icon = 'icons/turf/walls/materialwall.dmi'
icon_state = "materialwall-0"
base_icon_state = "materialwall"
walltype = /turf/closed/wall/material
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_MATERIAL_WALLS)
canSmoothWith = list(SMOOTH_GROUP_MATERIAL_WALLS)
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
/obj/structure/falsewall/material/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
new girder_type(loc)
for(var/material in custom_materials)
var/datum/material/material_datum = material
new material_datum.sheet_type(loc, FLOOR(custom_materials[material_datum] / MINERAL_MATERIAL_AMOUNT, 1))
qdel(src)
/obj/structure/falsewall/material/mat_update_desc(mat)
desc = "A huge chunk of [mat] used to separate rooms."
/obj/structure/falsewall/material/toggle_open()
if(!QDELETED(src))
set_density(!density)
var/mat_opacity = TRUE
for(var/datum/material/mat in custom_materials)
if(mat.alpha < 255)
mat_opacity = FALSE
break
set_opacity(density && mat_opacity)
opening = FALSE
update_appearance()
air_update_turf(TRUE, !density)
/obj/structure/falsewall/material/ChangeToWall(delete = 1)
var/turf/current_turf = get_turf(src)
var/turf/closed/wall/material/new_wall = current_turf.PlaceOnTop(/turf/closed/wall/material)
new_wall.set_custom_materials(custom_materials)
if(delete)
qdel(src)
return current_turf
/obj/structure/falsewall/material/update_icon(updates)
. = ..()
for(var/datum/material/mat in custom_materials)
if(mat.alpha < 255)
update_transparency_underlays()
return
/obj/structure/falsewall/material/proc/update_transparency_underlays()
underlays.Cut()
var/girder_icon_state = "displaced"
if(opening)
girder_icon_state += "_[density ? "opening" : "closing"]"
else if(!density)
girder_icon_state += "_open"
var/mutable_appearance/girder_underlay = mutable_appearance('icons/obj/structures.dmi', girder_icon_state, layer = LOW_OBJ_LAYER-0.01)
girder_underlay.appearance_flags = RESET_ALPHA | RESET_COLOR
underlays += girder_underlay
+23 -10
View File
@@ -129,7 +129,7 @@
if(sheets.get_amount() < amount)
return
sheets.use(2)
var/obj/structure/tramwall/tram_wall = new sheets.tram_wall_type(loc)
var/obj/structure/tramwall/tram_wall = new(loc)
transfer_fingerprints_to(tram_wall)
qdel(src)
return
@@ -198,9 +198,6 @@
var/M = sheets.sheettype
var/amount = construction_cost["exotic_material"]
if(state == GIRDER_TRAM)
if(!sheets.tram_wall_type)
balloon_alert(user, "need titanium, plastitanium, or iron!")
return
if(sheets.get_amount() < amount)
balloon_alert(user, "need [amount] sheets!")
return
@@ -209,15 +206,22 @@
if(sheets.get_amount() < amount)
return
sheets.use(amount)
var/obj/structure/tramwall/tram_wall = new sheets.tram_wall_type(loc)
var/obj/structure/tramwall/tram_wall
var/tram_wall_type = text2path("/obj/structure/tramwall/[M]")
if(tram_wall_type)
tram_wall = new tram_wall_type(loc)
else
var/obj/structure/tramwall/material/mat_tram_wall = new(loc)
var/list/material_list = list()
material_list[GET_MATERIAL_REF(sheets.material_type)] = MINERAL_MATERIAL_AMOUNT * 2
if(material_list)
mat_tram_wall.set_custom_materials(material_list)
tram_wall = mat_tram_wall
transfer_fingerprints_to(tram_wall)
qdel(src)
return
if(state == GIRDER_DISPLACED)
var/falsewall_type = text2path("/obj/structure/falsewall/[M]")
if(!falsewall_type)
balloon_alert(user, "need comptatiable sheets!")
return
if(sheets.get_amount() < amount)
balloon_alert(user, "need [amount] sheets!")
return
@@ -226,8 +230,17 @@
if(sheets.get_amount() < amount)
return
sheets.use(amount)
var/obj/structure/falsewall/FW = new falsewall_type (loc)
transfer_fingerprints_to(FW)
var/obj/structure/falsewall/falsewall
if(falsewall_type)
falsewall = new falsewall_type (loc)
else
var/obj/structure/falsewall/material/mat_falsewall = new(loc)
var/list/material_list = list()
material_list[GET_MATERIAL_REF(sheets.material_type)] = MINERAL_MATERIAL_AMOUNT * 2
if(material_list)
mat_falsewall.set_custom_materials(material_list)
falsewall = mat_falsewall
transfer_fingerprints_to(falsewall)
qdel(src)
return
else
+230 -2
View File
@@ -23,7 +23,7 @@
var/mineral_amount = 2
var/tram_wall_type = /obj/structure/tramwall
var/girder_type = /obj/structure/girder/tram
var/slicing_duration = 100
/obj/structure/tramwall/Initialize(mapload)
. = ..()
@@ -38,7 +38,7 @@
return FALSE
to_chat(user, span_notice("You begin slicing through the outer plating..."))
if(welder.use_tool(src, user, 10 SECONDS, volume=100))
if(welder.use_tool(src, user, slicing_duration, volume=100))
to_chat(user, span_notice("You remove the outer plating."))
dismantle(user, TRUE)
else
@@ -96,3 +96,231 @@
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS)
/obj/structure/tramwall/gold
name = "gold wall"
desc = "A wall with gold plating. Swag!"
icon = 'icons/turf/walls/gold_wall.dmi'
icon_state = "gold_wall-0"
base_icon_state = "gold_wall"
mineral = /obj/item/stack/sheet/mineral/gold
tram_wall_type = /obj/structure/tramwall/gold
explosion_block = 0 //gold is a soft metal you dingus.
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_GOLD_WALLS)
canSmoothWith = list(SMOOTH_GROUP_GOLD_WALLS)
custom_materials = list(/datum/material/gold = 4000)
/obj/structure/tramwall/silver
name = "silver wall"
desc = "A wall with silver plating. Shiny!"
icon = 'icons/turf/walls/silver_wall.dmi'
icon_state = "silver_wall-0"
base_icon_state = "silver_wall"
mineral = /obj/item/stack/sheet/mineral/silver
tram_wall_type = /obj/structure/tramwall/silver
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SILVER_WALLS)
canSmoothWith = list(SMOOTH_GROUP_SILVER_WALLS)
custom_materials = list(/datum/material/silver = 4000)
/obj/structure/tramwall/diamond
name = "diamond wall"
desc = "A wall with diamond plating. You monster."
icon = 'icons/turf/walls/diamond_wall.dmi'
icon_state = "diamond_wall-0"
base_icon_state = "diamond_wall"
mineral = /obj/item/stack/sheet/mineral/diamond
tram_wall_type = /obj/structure/tramwall/diamond
slicing_duration = 200 //diamond wall takes twice as much time to slice
max_integrity = 800
explosion_block = 3
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_DIAMOND_WALLS)
canSmoothWith = list(SMOOTH_GROUP_DIAMOND_WALLS)
custom_materials = list(/datum/material/diamond = 4000)
/obj/structure/tramwall/bananium
name = "bananium wall"
desc = "A wall with bananium plating. Honk!"
icon = 'icons/turf/walls/bananium_wall.dmi'
icon_state = "bananium_wall-0"
base_icon_state = "bananium_wall"
mineral = /obj/item/stack/sheet/mineral/bananium
tram_wall_type = /obj/structure/tramwall/bananium
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
custom_materials = list(/datum/material/bananium = 4000)
/obj/structure/tramwall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
icon = 'icons/turf/walls/sandstone_wall.dmi'
icon_state = "sandstone_wall-0"
base_icon_state = "sandstone_wall"
mineral = /obj/item/stack/sheet/mineral/sandstone
tram_wall_type = /obj/structure/tramwall/sandstone
explosion_block = 0
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SANDSTONE_WALLS)
canSmoothWith = list(SMOOTH_GROUP_SANDSTONE_WALLS)
custom_materials = list(/datum/material/sandstone = 4000)
/obj/structure/tramwall/uranium
article = "a"
name = "uranium wall"
desc = "A wall with uranium plating. This is probably a bad idea."
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium_wall-0"
base_icon_state = "uranium_wall"
mineral = /obj/item/stack/sheet/mineral/uranium
tram_wall_type = /obj/structure/tramwall/uranium
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS)
custom_materials = list(/datum/material/uranium = 4000)
/// Mutex to prevent infinite recursion when propagating radiation pulses
var/active = null
/// The last time a radiation pulse was performed
var/last_event = 0
/obj/structure/tramwall/uranium/attackby(obj/item/W, mob/user, params)
radiate()
return ..()
/obj/structure/tramwall/uranium/attack_hand(mob/user, list/modifiers)
radiate()
return ..()
/obj/structure/tramwall/uranium/proc/radiate()
SIGNAL_HANDLER
if(active)
return
if(world.time <= last_event + 1.5 SECONDS)
return
active = TRUE
radiation_pulse(
src,
max_range = 3,
threshold = RAD_LIGHT_INSULATION,
chance = URANIUM_IRRADIATION_CHANCE,
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
)
propagate_radiation_pulse()
last_event = world.time
active = FALSE
/obj/structure/tramwall/plasma
name = "plasma wall"
desc = "A wall with plasma plating. This is definitely a bad idea."
icon = 'icons/turf/walls/plasma_wall.dmi'
icon_state = "plasma_wall-0"
base_icon_state = "plasma_wall"
mineral = /obj/item/stack/sheet/mineral/plasma
tram_wall_type = /obj/structure/tramwall/plasma
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASMA_WALLS)
canSmoothWith = list(SMOOTH_GROUP_PLASMA_WALLS)
custom_materials = list(/datum/material/plasma = 4000)
/obj/structure/tramwall/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
icon_state = "wood_wall-0"
base_icon_state = "wood_wall"
mineral = /obj/item/stack/sheet/mineral/wood
tram_wall_type = /obj/structure/tramwall/wood
explosion_block = 0
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WOOD_WALLS)
canSmoothWith = list(SMOOTH_GROUP_WOOD_WALLS)
custom_materials = list(/datum/material/wood = 4000)
/obj/structure/tramwall/wood/attackby(obj/item/W, mob/user)
if(W.get_sharpness() && W.force)
var/duration = ((4.8 SECONDS) / W.force) * 2 //In seconds, for now.
if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe))
duration /= 4 //Much better with hatchets and axes.
if(do_after(user, duration * (1 SECONDS), target=src)) //Into deciseconds.
dismantle(user, disassembled = FALSE, tool = W)
return
return ..()
/obj/structure/tramwall/bamboo
name = "bamboo wall"
desc = "A wall with a bamboo finish."
icon = 'icons/turf/walls/bamboo_wall.dmi'
icon_state = "bamboo"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BAMBOO_WALLS)
canSmoothWith = list(SMOOTH_GROUP_BAMBOO_WALLS)
mineral = /obj/item/stack/sheet/mineral/bamboo
tram_wall_type = /obj/structure/tramwall/bamboo
/obj/structure/tramwall/iron
name = "rough iron wall"
desc = "A wall with rough iron plating."
icon = 'icons/turf/walls/iron_wall.dmi'
icon_state = "iron_wall-0"
base_icon_state = "iron_wall"
mineral = /obj/item/stack/rods
mineral_amount = 5
tram_wall_type = /obj/structure/tramwall/iron
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_IRON_WALLS)
canSmoothWith = list(SMOOTH_GROUP_IRON_WALLS)
custom_materials = list(/datum/material/iron = 5000)
/obj/structure/tramwall/abductor
name = "alien wall"
desc = "A wall with alien alloy plating."
icon = 'icons/turf/walls/abductor_wall.dmi'
icon_state = "abductor_wall-0"
base_icon_state = "abductor_wall"
mineral = /obj/item/stack/sheet/mineral/abductor
tram_wall_type = /obj/structure/tramwall/abductor
slicing_duration = 200 //alien wall takes twice as much time to slice
explosion_block = 3
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS)
canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS)
custom_materials = list(/datum/material/alloy/alien = 4000)
/obj/structure/tramwall/material
name = "wall"
desc = "A huge chunk of material used to separate rooms."
icon = 'icons/turf/walls/materialwall.dmi'
icon_state = "materialwall-0"
base_icon_state = "materialwall"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_MATERIAL_WALLS)
canSmoothWith = list(SMOOTH_GROUP_MATERIAL_WALLS)
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
/obj/structure/tramwall/material/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
new girder_type(loc)
for(var/material in custom_materials)
var/datum/material/material_datum = material
new material_datum.sheet_type(loc, FLOOR(custom_materials[material_datum] / MINERAL_MATERIAL_AMOUNT, 1))
qdel(src)
/obj/structure/tramwall/material/mat_update_desc(mat)
desc = "A huge chunk of [mat] used to separate rooms."
/obj/structure/tramwall/material/update_icon(updates)
. = ..()
for(var/datum/material/material in custom_materials)
if(material.alpha < 255)
update_transparency_underlays()
return
/obj/structure/tramwall/material/proc/update_transparency_underlays()
underlays.Cut()
var/mutable_appearance/girder_underlay = mutable_appearance('icons/obj/structures.dmi', "girder", layer = LOW_OBJ_LAYER-0.01)
girder_underlay.appearance_flags = RESET_ALPHA | RESET_COLOR
underlays += girder_underlay