Most materials can be used to build most things (#66181)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
@@ -86,3 +86,6 @@
|
||||
|
||||
/// generally called before temporary non-parallel animate()s on the atom (animation_duration)
|
||||
#define COMSIG_ATOM_TEMPORARY_ANIMATION_START "atom_temp_animate_start"
|
||||
|
||||
/// from internal loop in /atom/proc/propagate_radiation_pulse: (atom/pulse_source)
|
||||
#define COMSIG_ATOM_PROPAGATE_RAD_PULSE "atom_propagate_radiation_pulse"
|
||||
|
||||
@@ -62,5 +62,11 @@
|
||||
else
|
||||
return PERCEIVED_RADIATION_DANGER_LOW
|
||||
|
||||
/// A common proc used to send COMSIG_ATOM_PROPAGATE_RAD_PULSE to adjacent atoms
|
||||
/// Only used for uranium (false/tram)walls to spread their radiation pulses
|
||||
/atom/proc/propagate_radiation_pulse()
|
||||
for(var/atom/atom in orange(1,src))
|
||||
SEND_SIGNAL(atom, COMSIG_ATOM_PROPAGATE_RAD_PULSE, src)
|
||||
|
||||
#undef MEDIUM_RADIATION_THRESHOLD_RANGE
|
||||
#undef EXTREME_RADIATION_CHANCE
|
||||
|
||||
@@ -26,6 +26,7 @@ SUBSYSTEM_DEF(materials)
|
||||
new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE),
|
||||
new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE),
|
||||
)
|
||||
///List of stackcrafting recipes for materials using rigid recipes
|
||||
var/list/rigid_stack_recipes = list(
|
||||
|
||||
@@ -512,3 +512,8 @@
|
||||
name = "Worn Skull Bandana Up"
|
||||
icon_file = 'icons/mob/clothing/mask.dmi'
|
||||
json_config = 'code/datums/greyscale/json_configs/bandskull_worn_up.json'
|
||||
|
||||
/datum/greyscale_config/material_airlock
|
||||
name = "Material Airlock"
|
||||
icon_file = 'icons/obj/doors/airlocks/material/material.dmi'
|
||||
json_config = 'code/datums/greyscale/json_configs/material_airlock.json'
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"closed": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "base_closed",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
},
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "frame_closed",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
],
|
||||
"open": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "base_open",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
},
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "frame_open",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
],
|
||||
"opening": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "base_opening",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
},
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "frame_opening",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
],
|
||||
"closing": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "base_closing",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
},
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "frame_closing",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
],
|
||||
"construction": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "base_construction",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
},
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "frame_construction",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
],
|
||||
"fill_closed": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_closed",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
],
|
||||
"fill_open": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_open",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
],
|
||||
"fill_opening": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_opening",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
],
|
||||
"fill_closing": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_closing",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
],
|
||||
"fill_construction": [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_construction",
|
||||
"blend_mode": "overlay",
|
||||
"color_ids": [ 1 ]
|
||||
}
|
||||
],
|
||||
"" : [
|
||||
{
|
||||
"type": "icon_state",
|
||||
"icon_state": "fill_open",
|
||||
"blend_mode": "overlay"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -92,6 +92,8 @@ Simple datum which is instanced once per type and is used for every object of sa
|
||||
else if(istype(source, /turf)) //turfs
|
||||
on_applied_turf(source, amount, material_flags)
|
||||
|
||||
source.update_appearance()
|
||||
|
||||
source.mat_update_desc(src)
|
||||
|
||||
///This proc is called when a material updates an object's description
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
name = "plasmaglass"
|
||||
desc = "Plasma-infused silicate. It is much more durable and heat resistant than either of its component materials."
|
||||
color = "#ff80f4"
|
||||
greyscale_colors = "#ff80f4"
|
||||
greyscale_colors = "#ff80f496"
|
||||
alpha = 150
|
||||
init_flags = MATERIAL_INIT_MAPLOAD
|
||||
integrity_modifier = 0.5
|
||||
@@ -101,7 +101,7 @@
|
||||
name = "titanium glass"
|
||||
desc = "A specialized silicate-titanium alloy that is commonly used in shuttle windows."
|
||||
color = "#cfbee0"
|
||||
greyscale_colors = "#cfbee0"
|
||||
greyscale_colors = "#cfbee096"
|
||||
alpha = 150
|
||||
init_flags = MATERIAL_INIT_MAPLOAD
|
||||
armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 0.8, ENERGY = 0.8, BOMB = 0.5, BIO = 1.2, FIRE = 0.8, ACID = 2)
|
||||
@@ -119,7 +119,7 @@
|
||||
name = "plastitanium glass"
|
||||
desc = "A specialized silicate-plastitanium alloy."
|
||||
color = "#5d3369"
|
||||
greyscale_colors = "#5d3369"
|
||||
greyscale_colors = "#5d336996"
|
||||
alpha = 150
|
||||
init_flags = MATERIAL_INIT_MAPLOAD
|
||||
integrity_modifier = 1.1
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
name = "glass"
|
||||
desc = "Glass forged by melting sand."
|
||||
color = "#88cdf1"
|
||||
greyscale_colors = "#88cdf1"
|
||||
greyscale_colors = "#88cdf196"
|
||||
alpha = 150
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
integrity_modifier = 0.1
|
||||
@@ -73,7 +73,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
name = "diamond"
|
||||
desc = "Highly pressurized carbon"
|
||||
color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
greyscale_colors = "#71c8f7"
|
||||
greyscale_colors = "#71c8f784"
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/diamond
|
||||
alpha = 132
|
||||
@@ -157,7 +157,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
name = "bluespace crystal"
|
||||
desc = "Crystals with bluespace properties"
|
||||
color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
greyscale_colors = "#4e7dff"
|
||||
greyscale_colors = "#4e7dffC8"
|
||||
alpha = 200
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE)
|
||||
beauty_modifier = 0.5
|
||||
@@ -337,9 +337,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
name = "hot ice"
|
||||
desc = "A weird kind of ice, feels warm to the touch"
|
||||
color = "#88cdf1"
|
||||
greyscale_colors = "#88cdf1"
|
||||
greyscale_colors = "#88cdf196"
|
||||
alpha = 150
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/hot_ice
|
||||
value_per_unit = 0.2
|
||||
beauty_modifier = 0.2
|
||||
@@ -361,9 +361,9 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
name = "Metal Hydrogen"
|
||||
desc = "Solid metallic hydrogen. Some say it should be impossible"
|
||||
color = "#f2d5d7"
|
||||
greyscale_colors = "#f2d5d7"
|
||||
greyscale_colors = "#f2d5d796"
|
||||
alpha = 150
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen
|
||||
value_per_unit = 0.35
|
||||
beauty_modifier = 0.35
|
||||
@@ -400,7 +400,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "Bialtaakid 'ant taerif ma hdha."
|
||||
color = "#B77D31"
|
||||
greyscale_colors = "#B77D31"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/sandstone
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 1.25, ENERGY = 0.5, BOMB = 0.5, BIO = 0.25, FIRE = 1.5, ACID = 1.5)
|
||||
@@ -430,7 +430,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "Mir'ntrath barhah Nar'sie."
|
||||
color = "#3C3434"
|
||||
greyscale_colors = "#3C3434"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/runed_metal
|
||||
value_per_unit = 0.75
|
||||
armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 1, ENERGY = 1, BOMB = 1.2, BIO = 1.2, FIRE = 1.5, ACID = 1.5)
|
||||
@@ -447,7 +447,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "Clock Cult? Never heard of it."
|
||||
color = "#92661A"
|
||||
greyscale_colors = "#92661A"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/bronze
|
||||
value_per_unit = 0.025
|
||||
armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5)
|
||||
@@ -458,7 +458,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "Ten thousand folds of pure starchy power."
|
||||
color = "#E5DCD5"
|
||||
greyscale_colors = "#E5DCD5"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/paperframes
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, FIRE = 0, ACID = 1.5)
|
||||
@@ -484,7 +484,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "They say cardboard is used by hobos to make incredible things."
|
||||
color = "#5F625C"
|
||||
greyscale_colors = "#5F625C"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/cardboard
|
||||
value_per_unit = 0.003
|
||||
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0, ACID = 1.5)
|
||||
@@ -508,7 +508,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "Man, building with this will make you the coolest caveman on the block."
|
||||
color = "#e3dac9"
|
||||
greyscale_colors = "#e3dac9"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/bone
|
||||
value_per_unit = 0.05
|
||||
armor_modifiers = list(MELEE = 1.2, BULLET = 0.75, LASER = 0.75, ENERGY = 1.2, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5)
|
||||
@@ -519,7 +519,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "If it's good enough for pandas, it's good enough for you."
|
||||
color = "#87a852"
|
||||
greyscale_colors = "#87a852"
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/bamboo
|
||||
value_per_unit = 0.0025
|
||||
armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 0.5, ENERGY = 0.5, BOMB = 0.5, BIO = 0.51, FIRE = 0.5, ACID = 1.5)
|
||||
@@ -532,7 +532,7 @@ Unless you know what you're doing, only use the first three numbers. They're in
|
||||
desc = "A light absorbing crystal"
|
||||
color = COLOR_ALMOST_BLACK
|
||||
greyscale_colors = COLOR_ALMOST_BLACK
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/mineral/zaukerite
|
||||
value_per_unit = 0.45
|
||||
armor_modifiers = list(MELEE = 0.9, BULLET = 0.9, LASER = 1.75, ENERGY = 1.75, BOMB = 0.5, BIO = 1, FIRE = 0.1, ACID = 1)
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
name = "hauntium"
|
||||
desc = "very scary!"
|
||||
color = list(460/255, 464/255, 460/255, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
greyscale_colors = "#FFFFFF"
|
||||
greyscale_colors = "#FFFFFF64"
|
||||
alpha = 100
|
||||
categories = list(MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE)
|
||||
sheet_type = /obj/item/stack/sheet/hauntium
|
||||
value_per_unit = 0.05
|
||||
beauty_modifier = 0.25
|
||||
|
||||
@@ -1360,6 +1360,15 @@
|
||||
if(atom_integrity < (0.75 * max_integrity))
|
||||
update_appearance()
|
||||
|
||||
/obj/machinery/door/airlock/proc/prepare_deconstruction_assembly(obj/structure/door_assembly/assembly)
|
||||
assembly.heat_proof_finished = heat_proof //tracks whether there's rglass in
|
||||
assembly.set_anchored(TRUE)
|
||||
assembly.glass = glass
|
||||
assembly.state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
|
||||
assembly.created_name = name
|
||||
assembly.previous_assembly = previous_airlock
|
||||
assembly.update_name()
|
||||
assembly.update_appearance()
|
||||
|
||||
/obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
@@ -1369,14 +1378,7 @@
|
||||
else
|
||||
A = new /obj/structure/door_assembly(loc)
|
||||
//If you come across a null assemblytype, it will produce the default assembly instead of disintegrating.
|
||||
A.heat_proof_finished = heat_proof //tracks whether there's rglass in
|
||||
A.set_anchored(TRUE)
|
||||
A.glass = glass
|
||||
A.state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
|
||||
A.created_name = name
|
||||
A.previous_assembly = previous_airlock
|
||||
A.update_name()
|
||||
A.update_appearance()
|
||||
prepare_deconstruction_assembly(A)
|
||||
|
||||
if(!disassembled)
|
||||
A?.update_integrity(A.max_integrity * 0.5)
|
||||
|
||||
@@ -593,6 +593,34 @@
|
||||
damage_deflection = 5
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0)
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
/*
|
||||
Material Airlocks
|
||||
*/
|
||||
/obj/machinery/door/airlock/material
|
||||
name = "airlock"
|
||||
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_AFFECT_STATISTICS
|
||||
greyscale_config = /datum/greyscale_config/material_airlock
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_material
|
||||
|
||||
/obj/machinery/door/airlock/material/close(forced, force_crush)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
for(var/datum/material/mat in custom_materials)
|
||||
if(mat.alpha < 255)
|
||||
set_opacity(FALSE)
|
||||
break
|
||||
|
||||
/obj/machinery/door/airlock/material/prepare_deconstruction_assembly(obj/structure/door_assembly/assembly)
|
||||
assembly.set_custom_materials(custom_materials)
|
||||
..()
|
||||
|
||||
/obj/machinery/door/airlock/material/glass
|
||||
opacity = FALSE
|
||||
glass = TRUE
|
||||
|
||||
//////////////////////////////////
|
||||
/*
|
||||
Misc Airlocks
|
||||
|
||||
@@ -281,7 +281,6 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
|
||||
merge_type = /obj/item/stack/sheet/mineral/titanium
|
||||
material_type = /datum/material/titanium
|
||||
walltype = /turf/closed/wall/mineral/titanium
|
||||
tram_wall_type = /obj/structure/tramwall/titanium
|
||||
|
||||
GLOBAL_LIST_INIT(titanium_recipes, list ( \
|
||||
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \
|
||||
@@ -315,7 +314,6 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
|
||||
merge_type = /obj/item/stack/sheet/mineral/plastitanium
|
||||
material_flags = NONE
|
||||
walltype = /turf/closed/wall/mineral/plastitanium
|
||||
tram_wall_type = /obj/structure/tramwall/plastitanium
|
||||
|
||||
GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
|
||||
new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \
|
||||
@@ -483,6 +481,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF | INDESTRUCTIBLE
|
||||
point_value = 100
|
||||
mats_per_unit = list(/datum/material/metalhydrogen = MINERAL_MATERIAL_AMOUNT)
|
||||
material_type = /datum/material/metalhydrogen
|
||||
merge_type = /obj/item/stack/sheet/mineral/metal_hydrogen
|
||||
|
||||
/obj/item/stack/sheet/mineral/metal_hydrogen/get_main_recipes()
|
||||
|
||||
@@ -143,7 +143,6 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
|
||||
matter_amount = 4
|
||||
cost = 500
|
||||
source = /datum/robot_energy_storage/iron
|
||||
tram_wall_type = /obj/structure/tramwall
|
||||
|
||||
/obj/item/stack/sheet/iron/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
|
||||
///What type of wall does this sheet spawn
|
||||
var/walltype
|
||||
var/tram_wall_type
|
||||
|
||||
/obj/item/stack/sheet/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
|
||||
. = ..()
|
||||
|
||||
@@ -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,39 +246,43 @@
|
||||
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)
|
||||
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)
|
||||
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
|
||||
|
||||
@@ -179,34 +179,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
|
||||
*/
|
||||
@@ -357,3 +365,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
|
||||
@@ -199,9 +199,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
|
||||
@@ -210,15 +207,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
|
||||
@@ -227,8 +231,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
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
canSmoothWith = null
|
||||
rcd_memory = null
|
||||
material_flags = MATERIAL_EFFECTS
|
||||
var/last_event = 0
|
||||
var/active = null
|
||||
|
||||
/turf/closed/wall/mineral/gold
|
||||
name = "gold wall"
|
||||
@@ -88,35 +86,45 @@
|
||||
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
|
||||
|
||||
/turf/closed/wall/mineral/uranium/Initialize(mapload)
|
||||
. = ..()
|
||||
RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, .proc/radiate)
|
||||
|
||||
/turf/closed/wall/mineral/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
active = 1
|
||||
radiation_pulse(
|
||||
src,
|
||||
max_range = 3,
|
||||
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
|
||||
|
||||
/turf/closed/wall/mineral/uranium/attack_hand(mob/user, list/modifiers)
|
||||
radiate()
|
||||
. = ..()
|
||||
return ..()
|
||||
|
||||
/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params)
|
||||
radiate()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/turf/closed/wall/mineral/uranium/Bumped(atom/movable/AM)
|
||||
radiate()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/turf/closed/wall/mineral/uranium/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 41)
|
||||
return ..()
|
||||
@@ -151,10 +159,10 @@
|
||||
|
||||
/turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user)
|
||||
if(W.get_sharpness() && W.force)
|
||||
var/duration = (48/W.force) * 2 //In seconds, for now.
|
||||
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*10, target=src)) //Into deciseconds.
|
||||
if(do_after(user, duration * (1 SECONDS), target=src)) //Into deciseconds.
|
||||
dismantle_wall(FALSE,FALSE)
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 960 B After Width: | Height: | Size: 1.2 KiB |