Files
2016-03-06 20:52:14 +01:00

1048 lines
34 KiB
Plaintext

/datum/trigger_delegate
var/datum/owner = null
var/procname = null
New(var/datum/D, var/name)
owner = D
procname = name
/datum/material
var/atom/owner = null
var/mat_id = "ohshitium" //used to retrieve instances of these base materials from the cache.
var/name = "Youshouldneverseemeium"
var/desc = "This is a custom material."
var/list/parent_materials = list() //Holds the parent materials.
var/list/properties = list()
var/generation = 0 //Compound generation
var/canMix = 1 //Can this be mixed with other materials?
var/material_flags = 0 //Various flags. See defines in _setup.dm.
var/list/prefixes = list() //goes before the name
var/list/suffixes = list() //and after it.
var/texture = null //if not null, texture will be set when mat is applied.
var/texture_blend = ICON_MULTIPLY //How to blend the texture.
//properties
var/color = "#FFFFFF" //The color of the material
var/alpha = 255 //The "transparency" of the material. Kept as alpha for logical reasons. Displayed as percentage ingame.
var/quality = 0 //Overall quality affects max caps of properties. -100 to 100, higher is better. Inherent quality overrides asteroid quality if higher and non-zero. This means that if you define a non-zero positive quality for a material you will never mine it at a quality below the one defined here.
//Other
proc/getAdjustedMax(var/property)
if(properties.Find(property))
var/datum/material_property/P = properties[property]
return max(P.value_max + round(P.value_max * (quality / 100)), P.value_min)
return
proc/getProperty(var/property, var/type = VALUE_CURRENT)
if(properties.Find(property))
var/datum/material_property/P = properties[property]
switch(type)
if(VALUE_CURRENT)
P.value = min(getAdjustedMax(property), P.value) //This makes sure that no values are over their maximum bounds. This can happen when quality changes after the material was created since no further maximum bound checking happens after creation (unless setProperty is used). It's not pretty but it will do.
return P.value
if(VALUE_MIN)
return P.value_min
if(VALUE_MAX)
return getAdjustedMax(property)
else return 0
proc/adjustProperty(var/property, var/value)
if(properties.Find(property))
var/datum/material_property/P = properties[property]
if(value) P.value = min(max(P.value + value, P.value_min), getAdjustedMax(property))
else
setProperty(property, value)
return
proc/setProperty(var/property, var/value, var/value_min, var/value_max) //Man overloading would be sweet.
if(istype(property, /datum/material_property))
var/datum/material_property/mt = property
properties[mt.name] = property
mt.value = min( max(mt.value, mt.value_min), getAdjustedMax(mt.name) )
else if(istext(property))
if(properties.Find(property))
var/datum/material_property/P = properties[property]
if(value_min) P.value_min = value_min
if(value_max) P.value_max = value_max
if(value) P.value = min(max(value, P.value_min), getAdjustedMax(property))
else
properties.Add(property)
var/datum/material_property/P = new/datum/material_property()
P.name = property
if(value_min) P.value_min = value_min
else P.value_min = 1
if(value_max) P.value_max = value_max
else P.value_max = 100
if(value) P.value = min(max(value, P.value_min), getAdjustedMax(property))
else P.value = 1
properties[property] = P
return
proc/hasProperty(var/property)
return properties.Find(property)
//properties
proc/addDelegate(var/list/L, var/datum/materialProc/D)
//POOLING: CREATE COPY OF MATERIAL BEFORE MODIFICATION HERE
for(var/datum/materialProc/P in L)
if(P.type == D.type) return 0
L.Add(D)
L[D] = 0
//if(L == triggersOnAdd) D.execute(owner) //Run onadd procs when they are
return
proc/fail()
del(owner)
return
var/list/triggersFail = list() //Called when the material fails due to instability.
var/list/triggersTemp = list() //Called when exposed to temperatures.
var/list/triggersChem = list() //Called when exposed to chemicals
var/list/triggersPickup = list()//Called when owning object is picked up
var/list/triggersDrop = list() //Called when owning object is dropped
var/list/triggersExp = list() //Called when exposed to explosions
var/list/triggersOnAdd = list() //Called when the material is added to an object
var/list/triggersOnLife = list()//Called when the life proc of a mob that has the owning item equipped runs
var/list/triggersOnAttack = list()//Called when the owning object is used to attack something or someone.
var/list/triggersOnAttacked = list()//Called when a mob wearing the owning object is attacked.
var/list/triggersOnEntered = list()//Called when *something* enters a turf with the material assigned.
proc/triggerOnFail(var/atom/owner)
for(var/datum/materialProc/X in triggersFail)
call(X, "execute")(owner)
fail()
return
proc/triggerOnEntered(var/atom/owner, var/atom/entering)
for(var/datum/materialProc/X in triggersOnEntered)
call(X, "execute")(owner, entering)
return
proc/triggerOnAttacked(var/obj/item/owner, var/mob/attacker, var/mob/attacked, var/atom/weapon)
for(var/datum/materialProc/X in triggersOnAttacked)
call(X, "execute")(owner, attacker, attacked, weapon)
return
proc/triggerOnAttack(var/obj/item/owner, var/mob/attacker, var/mob/attacked)
for(var/datum/materialProc/X in triggersOnAttack)
call(X, "execute")(owner, attacker, attacked)
return
proc/triggerOnLife(var/mob/M, var/obj/item/I)
for(var/datum/materialProc/X in triggersOnLife)
call(X, "execute")(M, I)
return
proc/triggerOnAdd(var/location)
for(var/datum/materialProc/X in triggersOnAdd)
call(X, "execute")(location)
return
proc/triggerChem(var/location, var/chem, var/amount)
for(var/datum/materialProc/X in triggersChem)
call(X, "execute")(location, chem, amount)
return
proc/triggerPickup(var/mob/M)
for(var/datum/materialProc/X in triggersPickup)
call(X, "execute")(M)
return
proc/triggerDrop(var/mob/M)
for(var/datum/materialProc/X in triggersDrop)
call(X, "execute")(M)
return
proc/triggerTemp(var/location, var/temp)
for(var/datum/materialProc/X in triggersTemp)
call(X, "execute")(location, temp)
return
proc/triggerExp(var/location, var/sev)
for(var/datum/materialProc/X in triggersExp)
call(X, "execute")(location, sev)
return
// Metals
/datum/material/metal
material_flags = MATERIAL_METAL
color = "#8C8C8C"
/datum/material/metal/electrum
mat_id = "electrum"
name = "electrum"
desc = "Solid energy."
color = "#44ACAC"
material_flags = MATERIAL_METAL
quality = 5
New()
setProperty(new/datum/material_property/electrical{ value = 80 }())
setProperty(new/datum/material_property/hardness{ value = 10 }())
setProperty(new/datum/material_property/toughness{ value = 5 }())
setProperty(new/datum/material_property/energy{ value = 45 }())
return ..()
/datum/material/metal/steel
mat_id = "steel"
name = "steel"
desc = "Terrestrial steel from Earth."
color = "#8C8C8C"
material_flags = MATERIAL_METAL
/datum/material/metal/mauxite
mat_id = "mauxite"
name = "mauxite"
desc = "Mauxite is a sturdy common metal."
color = "#574846"
New()
setProperty(new/datum/material_property/hardness{ value = 15 }())
setProperty(new/datum/material_property/shear{ value = 33 }())
setProperty(new/datum/material_property/compressive{ value = 33 }())
setProperty(new/datum/material_property/tensile{ value = 33 }())
return ..()
/datum/material/metal/pharosium
mat_id = "pharosium"
name = "pharosium"
desc = "Pharosium is a conductive metal."
color = "#E39362"
New()
setProperty(new/datum/material_property/electrical{ value = 75 }())
setProperty(new/datum/material_property/dielectric{ value = 65 }())
setProperty(new/datum/material_property/permittivity{ value = 25 }())
return ..()
/datum/material/metal/cobryl
mat_id = "cobryl"
name = "cobryl"
desc = "Cobryl is a somewhat valuable metal."
color = "#84D5F0"
New()
setProperty(new/datum/material_property/value{ value = 4000 }())
setProperty(new/datum/material_property/shear{ value = 1 }())
setProperty(new/datum/material_property/compressive{ value = 1 }())
return ..()
/datum/material/metal/bohrum
mat_id = "bohrum"
name = "bohrum"
desc = "Bohrum is a heavy and highly durable metal."
color = "#3D692D"
New()
setProperty(new/datum/material_property/melting{ value = T0C + 4000 }())
setProperty(new/datum/material_property/hardness{ value = 45 }())
setProperty(new/datum/material_property/toughness{ value = 50 }())
return ..()
/datum/material/metal/cerenkite
mat_id = "cerenkite"
name = "cerenkite"
desc = "Cerenkite is a highly radioactive metal."
color = "#CDBDFF"
material_flags = MATERIAL_ENERGY | MATERIAL_METAL
New()
setProperty(new/datum/material_property/melting{ value = T0C + 500 }())
setProperty(new/datum/material_property/hardness{ value = 5 }())
setProperty(new/datum/material_property/toughness{ value = 5 }())
setProperty(new/datum/material_property/energy{ value = 50 }())
setProperty(new/datum/material_property/radioactivity{ value = 50 }())
addDelegate(triggersPickup, new /datum/materialProc/cerenkite_pickup())
addDelegate(triggersOnLife, new /datum/materialProc/cerenkite_life())
addDelegate(triggersOnAdd, new /datum/materialProc/cerenkite_add())
addDelegate(triggersOnEntered, new /datum/materialProc/generic_radiation_onenter())
return ..()
/datum/material/metal/syreline
mat_id = "syreline"
name = "syreline"
desc = "Syreline is an extremely valuable and coveted metal."
color = "#FAF5D4"
quality = 30
New()
setProperty(new/datum/material_property/value{ value = 10000 }())
setProperty(new/datum/material_property/hardness{ value = 1 }())
addDelegate(triggersOnAdd, new /datum/materialProc/gold_add())
return ..()
/datum/material/metal/gold
mat_id = "gold"
name = "gold"
desc = "A somewhat valuable and conductive metal."
color = "#F5BE18"
quality = 30
New()
setProperty(new/datum/material_property/value{ value = 3000 }())
setProperty(new/datum/material_property/hardness{ value = 10 }())
setProperty(new/datum/material_property/toughness{ value = 1 }())
setProperty(new/datum/material_property/electrical{ value = 75 }())
addDelegate(triggersOnAdd, new /datum/materialProc/gold_add())
return ..()
/datum/material/metal/silver
mat_id = "silver"
name = "silver"
desc = "A slightly valuable and conductive metal."
color = "#C1D1D2"
quality = 5
New()
setProperty(new/datum/material_property/value{ value = 100 }())
setProperty(new/datum/material_property/hardness{ value = 15 }())
setProperty(new/datum/material_property/toughness{ value = 5 }())
setProperty(new/datum/material_property/electrical{ value = 75 }())
return ..()
// Special Metals
/datum/material/metal/slag
mat_id = "slag"
name = "slag"
desc = "A by-product left over after material has been processed."
color = "#26170F"
quality = -50
New()
setProperty(new/datum/material_property/instability{ value = 75 }())
setProperty(new/datum/material_property/hardness{ value = 1 }())
setProperty(new/datum/material_property/toughness{ value = 1 }())
setProperty(new/datum/material_property/shear{ value = 1 }())
setProperty(new/datum/material_property/compressive{ value = 1 }())
setProperty(new/datum/material_property/tensile{ value = 1 }())
return ..()
/datum/material/metal/spacelag
mat_id = "spacelag"
name = "spacelag"
desc = "*BUFFERING*"
color = "#0F0A08"
New()
setProperty(new/datum/material_property/instability{ value = 33 }())
setProperty(new/datum/material_property/toughness{ value = 50 }())
setProperty(new/datum/material_property/tensile{ value = 90 }())
return ..()
/datum/material/metal/iridiumalloy
mat_id = "iridiumalloy"
name = "iridium-alloy"
canMix = 1 //Can not be easily modified.
desc = "Some sort of advanced iridium alloy."
color = "#756596"
material_flags = MATERIAL_METAL | MATERIAL_CRYSTAL
quality = 60
New()
setProperty(new/datum/material_property/toughness{ value = 90 }())
setProperty(new/datum/material_property/melting{ value = T0C + 10000 }())
return ..()
//GIVE THIS STATS AND SPECIAL EFFECTS.
/datum/material/metal/soulsteel
mat_id = "soulsteel"
name = "soulsteel"
desc = "A metal imbued with souls. Creepy."
color = "#73DFF0"
material_flags = MATERIAL_METAL | MATERIAL_ENERGY
New()
setProperty(new/datum/material_property/electrical{ value = 25 }())
setProperty(new/datum/material_property/dielectric{ value = 65 }())
setProperty(new/datum/material_property/energy{ value = 60 }())
return ..()
// Crystals
/datum/material/crystal
material_flags = MATERIAL_CRYSTAL
color = "#A3DCFF"
/datum/material/crystal/glass
mat_id = "glass"
name = "glass"
desc = "Terrestrial glass. Inferior to Molitz."
color = "#A3DCFF"
alpha = 180
/datum/material/crystal/molitz
mat_id = "molitz"
name = "molitz"
desc = "Molitz is a common crystalline substance."
color = "#FFFFFF"
alpha = 180
New()
setProperty(new/datum/material_property/hardness{ value = 40 }())
setProperty(new/datum/material_property/toughness{ value = 40 }())
return ..()
/datum/material/crystal/claretine
mat_id = "claretine"
name = "claretine"
desc = "Claretine is a highly conductive salt."
color = "#C2280A"
New()
setProperty(new/datum/material_property/electrical{ value = 85 }())
setProperty(new/datum/material_property/permittivity{ value = 20 }())
setProperty(new/datum/material_property/dielectric{ value = 5 }())
return ..()
/datum/material/crystal/erebite
mat_id = "erebite"
name = "erebite"
desc = "Erebite is an extremely volatile high-energy mineral."
color = "#FF3700"
material_flags = MATERIAL_CRYSTAL | MATERIAL_ENERGY
New()
setProperty(new/datum/material_property/electrical{ value = 95 }())
setProperty(new/datum/material_property/dielectric{ value = 95 }())
setProperty(new/datum/material_property/energy{ value = 95 }())
setProperty(new/datum/material_property/instability{ value = 50 }())
addDelegate(triggersFail, new /datum/materialProc/fail_explosive(100))
addDelegate(triggersOnAdd, new /datum/materialProc/erebite_flash())
addDelegate(triggersTemp, new /datum/materialProc/erebite_temp())
addDelegate(triggersExp, new /datum/materialProc/erebite_exp())
addDelegate(triggersOnAttack, new /datum/materialProc/generic_explode_attack(33))
addDelegate(triggersOnAttacked, new /datum/materialProc/generic_explode_attack(33))
return ..()
/datum/material/crystal/plasmastone
mat_id = "plasmastone"
name = "plasmastone"
desc = "Plasma in its solid state."
color = "#A114FF"
material_flags = MATERIAL_CRYSTAL | MATERIAL_ENERGY
New()
setProperty(new/datum/material_property/flammability{ value = 75 }())
setProperty(new/datum/material_property/energy{ value = 35 }())
setProperty(new/datum/material_property/hardness{ value = 15 }())
addDelegate(triggersTemp, new /datum/materialProc/plasmastone())
addDelegate(triggersExp, new /datum/materialProc/plasmastone())
return ..()
/datum/material/crystal/plasmaglass
mat_id = "plasmaglass"
name = "plasma glass"
desc = "Crystallized plasma that has been rendered inert. Very hard and prone to making extremely sharp edges."
color = "#A114FF"
alpha = 150
New()
setProperty(new/datum/material_property/hardness{ value = 65 }())
setProperty(new/datum/material_property/toughness{ value = 20 }())
setProperty(new/datum/material_property/compressive{ value = 5 }())
setProperty(new/datum/material_property/shear{ value = 5 }())
setProperty(new/datum/material_property/tensile{ value = 5 }())
return ..()
/datum/material/crystal/gemstone
mat_id = "quartz"
name = "quartz"
desc = "Quartz is somewhat valuable but not paticularly useful."
color = "#BBBBBB"
quality = 50
alpha = 100
var/gem_tier = 3
New()
switch(gem_tier)
if(1)
setProperty(new/datum/material_property/hardness{ value = 95 }())
setProperty(new/datum/material_property/value{ value = 5000 }())
addDelegate(triggersOnAdd, new /datum/materialProc/gold_add())
if(2)
setProperty(new/datum/material_property/hardness{ value = 60 }())
setProperty(new/datum/material_property/value{ value = 2500 }())
if(3)
setProperty(new/datum/material_property/hardness{ value = 30 }())
setProperty(new/datum/material_property/value{ value = 1000 }())
return ..()
diamond
mat_id = "diamond"
name = "diamond"
color = "#FFFFFF"
quality = 100
gem_tier = 1
onyx
mat_id = "onyx"
name = "onyx"
color = "#000000"
ruby
mat_id = "ruby"
name = "ruby"
color = "#D00000"
quality = 100
gem_tier = 1
rose_quartz
mat_id = "rosequartz"
name = "rose quartz"
color = "#FFC9E8"
jasper
mat_id = "jasper"
name = "jasper"
color = "#FF7A21"
quality = 75
gem_tier = 2
garnet
mat_id = "garnet"
name = "garnet"
color = "#DB8412"
quality = 75
gem_tier = 2
topaz
mat_id = "topaz"
name = "topaz"
color = "#EBB028"
quality = 100
gem_tier = 1
citrine
mat_id = "citrine"
name = "citrine"
color = "#F5F11B"
peridot
mat_id = "peridot"
name = "peridot"
color = "#9CC748"
quality = 75
gem_tier = 2
emerald
mat_id = "emerald"
name = "emerald"
color = "#3AB818"
quality = 100
gem_tier = 1
jade
mat_id = "jade"
name = "jade"
color = "#3C8F4D"
malachite
mat_id = "malachite"
name = "malachite"
color = "#1DF091"
quality = 75
gem_tier = 2
aquamarine
mat_id = "aquamarine"
name = "aquamarine"
color = "#68F7D8"
sapphire
mat_id = "sapphire"
name = "sapphire"
color = "#2789F2"
quality = 100
gem_tier = 1
lapis
mat_id = "lapislazuli"
name = "lapis lazuli"
color = "#1719BD"
quality = 75
gem_tier = 2
iolite
mat_id = "iolite"
name = "iolite"
color = "#D5A8FF"
amethyst
mat_id = "amethyst"
name = "amethyst"
color = "#BD0FDB"
quality = 100
gem_tier = 1
alexandrite
mat_id = "alexandrite"
name = "alexandrite"
color = "#EB2FA9"
quality = 75
gem_tier = 2
/datum/material/crystal/uqill //Ancients
mat_id = "uqill"
name = "uqill"
desc = "Uqill is a rare and very dense stone."
color = "#0F0A08"
alpha = 255
transparent // For bulletproof windows.
mat_id = "uqillglass"
name = "transparent uqill"
desc = "Uqill-derived material developed for usage as transparent armor."
color = "#615757"
alpha = 110
New()
setProperty(new/datum/material_property/corrosion { value = 30 }())
setProperty(new/datum/material_property/hardness{ value = 15 }())
setProperty(new/datum/material_property/toughness{ value = 80 }())
setProperty(new/datum/material_property/compressive{ value = 50 }())
setProperty(new/datum/material_property/shear{ value = 5 }())
setProperty(new/datum/material_property/tensile{ value = 5 }())
return ..()
/datum/material/crystal/telecrystal
mat_id = "telecrystal"
name = "telecrystal"
desc = "Telecrystal is a gemstone with space-warping properties."
color = "#4C14F5"
material_flags = MATERIAL_CRYSTAL | MATERIAL_ENERGY
alpha = 100
New()
setProperty(new/datum/material_property/scattering { value = 15 }())
setProperty(new/datum/material_property/reflectivity { value = 1 }())
setProperty(new/datum/material_property/energy { value = 40 }())
addDelegate(triggersOnLife, new /datum/materialProc/telecrystal_life())
addDelegate(triggersOnEntered, new /datum/materialProc/telecrystal_entered())
return ..()
/datum/material/crystal/miracle
mat_id = "miracle"
name = "miraclium"
desc = "Miraclium is a bizarre substance that can have a wide variety of effects."
color = "#FFFFFF"
New()
addDelegate(triggersOnAdd, new /datum/materialProc/miracle_add())
quality = rand(-50, 100)
alpha = rand(20, 255)
return..()
/datum/material/crystal/starstone
mat_id = "starstone"
name = "starstone"
desc = "An extremely rare jewel."
color = "#B5E0FF"
alpha = 80
quality = 45
New()
setProperty(new/datum/material_property/corrosion { value = 50 }())
setProperty(new/datum/material_property/scattering { value = 8 }())
setProperty(new/datum/material_property/reflectivity { value = 8 }())
setProperty(new/datum/material_property/instability { value = 1 }())
addDelegate(triggersOnAdd, new /datum/materialProc/gold_add())
return ..()
/datum/material/crystal/ice
mat_id = "ice"
name = "ice"
desc = "The frozen state of water."
color = "#E8F2FF"
alpha = 100
New()
setProperty(new/datum/material_property/scattering { value = 20 }())
setProperty(new/datum/material_property/reflectivity { value = 20 }())
setProperty(new/datum/material_property/compressive { value = 1 }())
setProperty(new/datum/material_property/instability { value = 20 }())
addDelegate(triggersOnLife, new /datum/materialProc/ice_life())
addDelegate(triggersOnAttack, new /datum/materialProc/slippery_attack())
addDelegate(triggersOnEntered, new /datum/materialProc/slippery_entered())
return ..()
/datum/material/crystal/wizard
quality = 50
alpha = 100
New()
setProperty(new/datum/material_property/hardness { value = 75 }())
setProperty(new/datum/material_property/toughness { value = 55 }())
setProperty(new/datum/material_property/energy { value = 20 }())
setProperty(new/datum/material_property/value { value = 15000 }())
setProperty(new/datum/material_property/luminosity { value = 3 }())
return ..()
quartz // basically wizard glass
mat_id = "wiz_quartz"
name = "enchanted quartz"
color = "#A3DCFF"
topaz
mat_id = "wiz_topaz"
name = "enchanted topaz"
color = "#FFC87C"
ruby
mat_id = "wiz_ruby"
name = "enchanted ruby"
color = "#991933"
amethyst
mat_id = "wiz_amethyst"
name = "enchanted amethyst"
color = "#9966FF"
emerald
mat_id = "wiz_emerald"
name = "enchanted emerald"
color = "#4CCC66"
sapphire
mat_id = "wiz_sapphire"
name = "enchanted sapphire"
color = "#1966B3"
// Organics
/datum/material/organic
color = "#555555"
material_flags = MATERIAL_ORGANIC
alpha = 255
quality = 0
/datum/material/organic/blob
mat_id = "blob"
name = "blob"
desc = "The material of the feared giant space amobea."
color = "#44cc44"
material_flags = MATERIAL_ORGANIC | MATERIAL_CRYSTAL | MATERIAL_CLOTH
alpha = 180
quality = 2
New()
setProperty(new/datum/material_property/toughness { value = 33 }())
setProperty(new/datum/material_property/electrical { value = 15 }())
setProperty(new/datum/material_property/thermal { value = 90 }())
setProperty(new/datum/material_property/corrosion { value = 40 }())
setProperty(new/datum/material_property/permeability { value = 85 }())
setProperty(new/datum/material_property/flammability { value = 85 }())
setProperty(new/datum/material_property/melting { value = T0C+200 }())
return ..()
/datum/material/organic/flesh
mat_id = "flesh"
name = "flesh"
desc = "Meat from a carbon-based lifeform."
color = "#574846"
material_flags = MATERIAL_ORGANIC | MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/toughness { value = 25 }())
return ..()
butt
mat_id = "butt"
name = "butt"
desc = "...it's butt flesh. Why is this here. Why do you somehow know it's butt flesh. Fuck."
/datum/material/organic/char
mat_id = "char"
name = "char"
desc = "Char is a fossil energy source similar to coal."
color = "#555555"
New()
setProperty(new/datum/material_property/energy { value = 35 }())
setProperty(new/datum/material_property/hardness { value = 1 }())
setProperty(new/datum/material_property/tensile { value = 15 }())
setProperty(new/datum/material_property/compressive { value = 15 }())
setProperty(new/datum/material_property/shear { value = 15 }())
return ..()
/datum/material/organic/koshmarite
mat_id = "koshmarite"
name = "koshmarite"
desc = "An unusual dense pulsating stone. You feel uneasy just looking at it."
color = "#600066"
material_flags = MATERIAL_ORGANIC | MATERIAL_CRYSTAL
New()
setProperty(new/datum/material_property/reflectivity { value = 90 }())
setProperty(new/datum/material_property/scattering { value = 50 }())
setProperty(new/datum/material_property/hardness { value = 50 }())
setProperty(new/datum/material_property/toughness { value = 50 }())
return ..()
/datum/material/organic/viscerite
mat_id = "viscerite"
name = "viscerite"
desc = "A disgusting flesh-like material. Ugh. What the hell is this?"
color = "#D04FFF"
material_flags = MATERIAL_ORGANIC | MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/corrosion { value = 60 }())
setProperty(new/datum/material_property/permeability { value = 60 }())
setProperty(new/datum/material_property/hardness { value = 5 }())
setProperty(new/datum/material_property/toughness { value = 15 }())
return ..()
/datum/material/organic/bone
mat_id = "bone"
name = "bone"
desc = "Bone is pretty spooky stuff."
color = "#DDDDDD"
material_flags = MATERIAL_ORGANIC // i guess, whatever
New()
setProperty(new/datum/material_property/tensile { value = 40 }())
setProperty(new/datum/material_property/compressive { value = 40 }())
setProperty(new/datum/material_property/shear { value = 40 }())
setProperty(new/datum/material_property/hardness { value = 15 }())
setProperty(new/datum/material_property/toughness { value = 25 }())
return ..()
/datum/material/organic/chitin
mat_id = "chitin"
name = "chitin"
desc = "Chitin is an organic material found in the exoskeletons of insects."
color = "#118800"
material_flags = MATERIAL_ORGANIC // i guess, whatever
New()
setProperty(new/datum/material_property/tensile { value = 45 }())
setProperty(new/datum/material_property/compressive { value = 45 }())
setProperty(new/datum/material_property/shear { value = 20 }())
setProperty(new/datum/material_property/hardness { value = 25 }())
setProperty(new/datum/material_property/toughness { value = 15 }())
return ..()
/datum/material/organic/beeswax
mat_id = "beeswax"
name = "beeswax"
desc = "An organic material consisting of pollen and space-bee secretions. Mind your own."
color = "#C8BB62"
material_flags = MATERIAL_ORGANIC
New()
setProperty(new/datum/material_property/flammability { value = 75 }())
setProperty(new/datum/material_property/compressive { value = 5 }())
setProperty(new/datum/material_property/melting { value = T0C + 50 }())
setProperty(new/datum/material_property/hardness { value = 5 }())
setProperty(new/datum/material_property/toughness { value = 65 }())
return ..()
// Fabrics
/datum/material/fabric
material_flags = MATERIAL_CLOTH
quality = 5
/datum/material/fabric/cloth
mat_id = "cloth"
name = "cloth"
desc = "Generic cloth. Not very special."
material_flags = MATERIAL_CLOTH
/datum/material/fabric/latex
mat_id = "latex"
name = "latex"
desc = "A type of synthetic rubber. Conducts electricity poorly."
color = "#DDDDDD" //"#FF0000" idgaf ok I want red cables back. no haine, this stuff isnt red.
material_flags = MATERIAL_RUBBER
New()
setProperty(new/datum/material_property/hardness { value = 1 }())
setProperty(new/datum/material_property/toughness { value = 25 }())
setProperty(new/datum/material_property/electrical { value = 20 }())
return ..()
/datum/material/fabric/synthrubber
mat_id = "synthrubber"
name = "synthrubber"
desc = "A type of synthetic rubber. Conducts electricity poorly."
color = "#FF0000" //But this is red okay.
material_flags = MATERIAL_RUBBER
/datum/material/fabric/cloth/leather
mat_id = "leather"
name = "leather"
desc = "Leather is a flexible material derived from processed animal skins."
color = "#8A3B11"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 25 }())
setProperty(new/datum/material_property/toughness { value = 25 }())
setProperty(new/datum/material_property/tensile { value = 30 }())
return ..()
/datum/material/fabric/cloth/synthleather
mat_id = "synthleather"
name = "synthleather"
desc = "Synthleather is an artificial leather."
color = "#BB3B11"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 25 }())
setProperty(new/datum/material_property/toughness { value = 25 }())
setProperty(new/datum/material_property/tensile { value = 25 }())
return ..()
/datum/material/fabric/cloth/wendigohide
mat_id = "wendigohide"
name = "wendigo hide"
desc = "The hide of a fearsome wendigo!"
color = "#CCCCCC"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 25 }())
setProperty(new/datum/material_property/toughness { value = 35 }())
setProperty(new/datum/material_property/tensile { value = 35 }())
setProperty(new/datum/material_property/compressive { value = 35 }())
setProperty(new/datum/material_property/shear { value = 35 }())
setProperty(new/datum/material_property/thermal { value = 20 }())
return ..()
/datum/material/fabric/cloth/wendigohide/king
mat_id = "kingwendigohide"
name = "king wendigo hide"
desc = "The hide of a terrifying wendigo king!!!"
color = "#EFEEEE"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 65 }())
setProperty(new/datum/material_property/toughness { value = 65 }())
setProperty(new/datum/material_property/tensile { value = 65 }())
setProperty(new/datum/material_property/compressive { value = 65 }())
setProperty(new/datum/material_property/shear { value = 65 }())
setProperty(new/datum/material_property/thermal { value = 10 }())
setProperty(new/datum/material_property/flammability { value = 1 }())
setProperty(new/datum/material_property/melting { value = T0C + 4000 }())
return ..()
/datum/material/fabric/cloth/cotton
mat_id = "cotton"
name = "cotton"
desc = "Cotton is a soft and fluffy material obtained from certain plants."
color = "#FFFFFF"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 1 }())
setProperty(new/datum/material_property/toughness { value = 20 }())
setProperty(new/datum/material_property/shear { value = 15 }())
setProperty(new/datum/material_property/thermal { value = 20 }())
setProperty(new/datum/material_property/flammability { value = 85 }())
setProperty(new/datum/material_property/melting { value = T0C + 300 }())
return ..()
/datum/material/fabric/cloth/fibrilith
mat_id = "fibrilith"
name = "fibrilith"
desc = "Fibrilith is an odd fibrous crystal known for its high tensile strength. Seems a bit similar to asbestos."
color = "#E0FFF6"
material_flags = MATERIAL_CLOTH | MATERIAL_CRYSTAL
New()
setProperty(new/datum/material_property/hardness { value = 50 }())
setProperty(new/datum/material_property/toughness { value = 45 }())
setProperty(new/datum/material_property/tensile { value = 70 }())
setProperty(new/datum/material_property/thermal { value = 20 }())
setProperty(new/datum/material_property/flammability { value = 5 }())
return ..()
New()
addDelegate(triggersOnLife, new /datum/materialProc/generic_itchy_onlife())
return ..()
/datum/material/fabric/cloth/spidersilk
mat_id = "spidersilk"
name = "spider silk"
desc = "Spider silk is a protein fiber spun by space spiders."
color = "#CCCCCC"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 33 }())
setProperty(new/datum/material_property/tensile { value = 15 }())
setProperty(new/datum/material_property/compressive { value = 15 }())
setProperty(new/datum/material_property/shear { value = 70 }())
setProperty(new/datum/material_property/thermal { value = 35 }())
return ..()
/datum/material/fabric/cloth/carbonfibre
mat_id = "carbonfibre"
name = "carbon nanofiber"
desc = "Carbon Nanofibers are highly graphitic carbon nanomaterials with excellent mechanical properties, electrical conductivity and thermal conductivity."
color = "#333333"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 40 }())
setProperty(new/datum/material_property/toughness { value = 40 }())
setProperty(new/datum/material_property/tensile { value = 40 }())
setProperty(new/datum/material_property/compressive { value = 40 }())
setProperty(new/datum/material_property/shear { value = 40 }())
setProperty(new/datum/material_property/electrical { value = 20 }())
setProperty(new/datum/material_property/thermal { value = 75 }())
return ..()
/datum/material/fabric/cloth/ectofibre
mat_id = "ectofibre"
name = "ectofibre"
desc = "Ectoplasmic fibres. Sort of transparent. Seems to be rather strong yet flexible."
color = "#ffffff"
material_flags = MATERIAL_CLOTH | MATERIAL_ENERGY | MATERIAL_CRYSTAL
alpha = 128
New()
setProperty(new/datum/material_property/hardness { value = 15 }())
setProperty(new/datum/material_property/toughness { value = 65 }())
setProperty(new/datum/material_property/shear { value = 20 }())
setProperty(new/datum/material_property/electrical { value = 20 }())
setProperty(new/datum/material_property/corrosion { value = 35 }())
addDelegate(triggersOnLife, new /datum/materialProc/generic_itchy_onlife())
return ..()
/datum/material/fabric/cloth/dyneema
mat_id = "dyneema"
name = "dyneema"
desc = "A blend of carbon nanofibres and space spider silk. Highly versatile."
color = "#333333"
material_flags = MATERIAL_CLOTH
New()
setProperty(new/datum/material_property/hardness { value = 15 }())
setProperty(new/datum/material_property/compressive { value = 75 }())
setProperty(new/datum/material_property/corrosion { value = 25 }())
return ..()
// TODO: THESE
/*
/datum/material/wax
/datum/material/plastic
/datum/material/cardboard
*/