mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 14:08:31 +01:00
[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:
co-authored by
Y0SH1M4S73R
GoldenAlpharex
parent
2a266ef15b
commit
f4c2b35c06
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user