Files
Bubberstation/code/datums/materials/basemats.dm
Ghom 2531d69ff4 refactoring how materials effects are added to atoms (#86901)
## About The Pull Request
I'm "cooking" the materials system a bit, specifically the code
responsible for applying and removing effects. My goal is to move most
of the code to the objects-side, split it in smaller procs that can be
more easily overriden or called for object-specific modifiers and
effects, while also revamping things all around to better support items
made from multiple materials (the cleric mace will most likely be one in
this PR, with the handle and tip made of different materials).

PR NO LONGER WIP, TESTED AND ALL, CLERIC MACES CAN NOW BE MADE OF TWO
MATERIALS.

## Why It's Good For The Game
One of the nastiest flaws with the materials system is that it's just
unfeasable to have items made of multiple mats (with effects enabled)
right now, as they easily tend to override each other, where some of the
modifiers and effects should only be applied the main material.

Beside, the system's starting to show signs of its time, from the
several type checks used to apply different effects, the one letter
variables to the the material flags that are still being passed down as
arguments when you can access them from the atom/source arg anyway. It
would be disonhest of me if I went ahead and coded material fishing rods
or whatever fish fuckery with materials without ensuring it won't
further the technical debt the feature currently has.

## Changelog
🆑
refactor: Refactored materials code. report any issue.
add: Cleric maces (The autolathe-printable weapon design from outer
space) can now be made of two different materials.
balance: Buffed cleric maces a little.
fix: toolboxes' stats are now affected by materials again.
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2024-11-11 00:43:40 -08:00

740 lines
28 KiB
Plaintext

///Has no special properties.
/datum/material/iron
name = "iron"
desc = "Common iron ore often found in sedimentary and igneous layers of the crust."
color = "#B6BEC2"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/iron
ore_type = /obj/item/stack/ore/iron
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
mat_rust_resistance = RUST_RESISTANCE_BASIC
mineral_rarity = MATERIAL_RARITY_COMMON
points_per_unit = 1 / SHEET_MATERIAL_AMOUNT
minimum_value_override = 0
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_COMMON
/datum/material/iron/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
return TRUE
///Breaks extremely easily but is transparent.
/datum/material/glass
name = "glass"
desc = "Glass forged by melting sand."
color = "#6292AF"
alpha = 150
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
integrity_modifier = 0.1
sheet_type = /obj/item/stack/sheet/glass
ore_type = /obj/item/stack/ore/glass/basalt
shard_type = /obj/item/shard
debris_type = /obj/effect/decal/cleanable/glass
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
minimum_value_override = 0
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_COMMON
beauty_modifier = 0.05
armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, ENERGY = 1, BIO = 0.2, FIRE = 1, ACID = 0.2)
mineral_rarity = MATERIAL_RARITY_COMMON
points_per_unit = 1 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
/datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch
return TRUE
/datum/material/glass/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(isobj(source) && !isstack(source))
source.AddElement(/datum/element/can_shatter, shard_type, round(mat_amount / SHEET_MATERIAL_AMOUNT * multiplier), SFX_SHATTER)
/datum/material/glass/on_main_removed(atom/source, mat_amount, multiplier)
. = ..()
if(isobj(source) && !isstack(source))
source.RemoveElement(/datum/element/can_shatter, shard_type, round(mat_amount / SHEET_MATERIAL_AMOUNT * multiplier), SFX_SHATTER)
/*
Color matrices are like regular colors but unlike with normal colors, you can go over 255 on a channel.
Unless you know what you're doing, only use the first three numbers. They're in RGB order.
*/
///Has no special properties. Could be good against vampires in the future perhaps.
/datum/material/silver
name = "silver"
desc = "Silver"
color = "#B5BCBB"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/silver
ore_type = /obj/item/stack/ore/silver
value_per_unit = 50 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON
beauty_modifier = 0.075
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
points_per_unit = 16 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
/datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
return TRUE
///Slight force increase
/datum/material/gold
name = "gold"
desc = "Gold"
color = "#E6BB45"
strength_modifier = 1.2
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/gold
ore_type = /obj/item/stack/ore/gold
value_per_unit = 125 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_RARE
beauty_modifier = 0.15
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 0.7, ACID = 1.1)
mineral_rarity = MATERIAL_RARITY_PRECIOUS
points_per_unit = 18 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
/datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
return TRUE
///Has no special properties
/datum/material/diamond
name = "diamond"
desc = "Highly pressurized carbon"
color = "#C9D8F2"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/diamond
ore_type = /obj/item/stack/ore/diamond
alpha = 132
starlight_color = COLOR_BLUE_LIGHT
value_per_unit = 500 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC
beauty_modifier = 0.3
armor_modifiers = list(MELEE = 1.3, BULLET = 1.3, LASER = 0.6, ENERGY = 1, BOMB = 1.2, BIO = 1, FIRE = 1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_RARE
points_per_unit = 50 / SHEET_MATERIAL_AMOUNT
/datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
return TRUE
///Is slightly radioactive
/datum/material/uranium
name = "uranium"
desc = "Uranium"
color = "#2C992C"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/uranium
ore_type = /obj/item/stack/ore/uranium
value_per_unit = 100 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_RARE
beauty_modifier = 0.3 //It shines so beautiful
armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, FIRE = 1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
points_per_unit = 30 / SHEET_MATERIAL_AMOUNT
/datum/material/uranium/on_applied(atom/source, mat_amount, multiplier)
. = ..()
// Uranium structures should irradiate, but not items, because item irradiation is a lot more annoying.
// For example, consider picking up uranium as a miner.
if (isitem(source))
return
source.AddElement(/datum/element/radioactive, chance = URANIUM_IRRADIATION_CHANCE * multiplier)
/datum/material/uranium/on_removed(atom/source, mat_amount, multiplier)
. = ..()
if (isitem(source))
return
source.RemoveElement(/datum/element/radioactive, chance = URANIUM_IRRADIATION_CHANCE * multiplier)
/datum/material/uranium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/uranium, rand(4, 6))
source_item?.reagents?.add_reagent(/datum/reagent/uranium, source_item.reagents.total_volume*(2/5))
return TRUE
///Adds firestacks on hit (Still needs support to turn into gas on destruction)
/datum/material/plasma
name = "plasma"
desc = "Isn't plasma a state of matter? Oh whatever."
color = "#BA3692"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/plasma
ore_type = /obj/item/stack/ore/plasma
value_per_unit = 200 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.15
armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, ENERGY = 1.2, BIO = 1.2, ACID = 0.5)
mineral_rarity = MATERIAL_RARITY_PRECIOUS
points_per_unit = 15 / SHEET_MATERIAL_AMOUNT
/datum/material/plasma/on_applied(atom/source, mat_amount, multiplier)
. = ..()
if(ismovable(source))
source.AddElement(/datum/element/firestacker, 1 * multiplier)
source.AddComponent(/datum/component/combustible_flooder, "plasma", mat_amount * 0.05 * multiplier) //Empty temp arg, fully dependent on whatever ignited it.
/datum/material/plasma/on_removed(atom/source, mat_amount, multiplier)
. = ..()
source.RemoveElement(/datum/element/firestacker, mat_amount = 1 * multiplier)
qdel(source.GetComponent(/datum/component/combustible_flooder))
qdel(source.GetComponent(/datum/component/explodable))
/datum/material/plasma/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(6, 8))
source_item?.reagents?.add_reagent(/datum/reagent/toxin/plasma, source_item.reagents.total_volume*(2/5))
return TRUE
///Can cause bluespace effects on use. (Teleportation) (Not yet implemented)
/datum/material/bluespace
name = "bluespace crystal"
desc = "Crystals with bluespace properties"
color = "#2E50B7"
alpha = 200
starlight_color = COLOR_BLUE
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
beauty_modifier = 0.5
sheet_type = /obj/item/stack/sheet/bluespace_crystal
ore_type = /obj/item/stack/ore/bluespace_crystal
value_per_unit = 300 / SHEET_MATERIAL_AMOUNT
mineral_rarity = MATERIAL_RARITY_RARE
points_per_unit = 50 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC
texture_layer_icon_state = "shine"
/datum/material/bluespace/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/bluespace, rand(5, 8))
source_item?.reagents?.add_reagent(/datum/reagent/bluespace, source_item.reagents.total_volume*(2/5))
return TRUE
///Honks and slips
/datum/material/bananium
name = "bananium"
desc = "Material with hilarious properties"
color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow //It's literally perfect I can't change it
greyscale_color = "#FFF269"
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/bananium
ore_type = /obj/item/stack/ore/bananium
value_per_unit = 1000 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.5
armor_modifiers = list(BOMB = 100, FIRE = 10) //Clowns cant be blown away.
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED
points_per_unit = 60 / SHEET_MATERIAL_AMOUNT
/datum/material/bananium/on_applied(atom/source, mat_amount, multiplier)
. = ..()
source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50 * multiplier, falloff_exponent = 20)
source.AddComponent(/datum/component/slippery, min(mat_amount / 10 * multiplier, 80 * multiplier))
/datum/material/bananium/on_removed(atom/source, mat_amount, multiplier)
. = ..()
qdel(source.GetComponent(/datum/component/slippery))
qdel(source.GetComponent(/datum/component/squeak))
/datum/material/bananium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/consumable/banana, rand(8, 12))
source_item?.reagents?.add_reagent(/datum/reagent/consumable/banana, source_item.reagents.total_volume*(2/5))
return TRUE
///Mediocre force increase
/datum/material/titanium
name = "titanium"
desc = "Titanium"
color = "#EFEFEF"
strength_modifier = 1.3
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/titanium
ore_type = /obj/item/stack/ore/titanium
value_per_unit = 125 / SHEET_MATERIAL_AMOUNT
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON
beauty_modifier = 0.05
armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 0.7, ACID = 1)
mat_rust_resistance = RUST_RESISTANCE_TITANIUM
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
texture_layer_icon_state = "shine"
/datum/material/titanium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
return TRUE
/datum/material/runite
name = "runite"
desc = "Runite"
color = "#526F77"
strength_modifier = 1.3
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/runite
value_per_unit = 600 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.5
armor_modifiers = list(MELEE = 1.35, BULLET = 2, LASER = 0.5, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 1.4, ACID = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
/datum/material/runite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10)
return TRUE
///Force decrease
/datum/material/plastic
name = "plastic"
desc = "Plastic"
color = "#BFB9AC"
strength_modifier = 0.85
sheet_type = /obj/item/stack/sheet/plastic
ore_type = /obj/item/stack/ore/slag //No plastic or coal ore, so we use slag.
categories = list(
MAT_CATEGORY_SILO = TRUE,
MAT_CATEGORY_RIGID=TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
value_per_unit = 25 / SHEET_MATERIAL_AMOUNT
beauty_modifier = -0.01
armor_modifiers = list(MELEE = 1.5, BULLET = 1.1, LASER = 0.3, ENERGY = 0.5, BOMB = 1, BIO = 1, FIRE = 1.1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Nobody's found oil on lavaland yet.
points_per_unit = 4 / SHEET_MATERIAL_AMOUNT
/datum/material/plastic/on_accidental_mat_consumption(mob/living/carbon/eater, obj/item/food)
eater.reagents.add_reagent(/datum/reagent/plastic_polymers, rand(6, 8))
food?.reagents?.add_reagent(/datum/reagent/plastic_polymers, food.reagents.total_volume*(2/5))
return TRUE
///Force decrease and mushy sound effect. (Not yet implemented)
/datum/material/biomass
name = "biomass"
desc = "Organic matter."
color = "#735b4d"
strength_modifier = 0.8
value_per_unit = 50 / SHEET_MATERIAL_AMOUNT
/datum/material/wood
name = "wood"
desc = "Flexible, durable, but flamable. Hard to come across in space."
color = "#855932"
strength_modifier = 0.5
sheet_type = /obj/item/stack/sheet/mineral/wood
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
value_per_unit = 20 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.1
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, ACID = 0.3)
texture_layer_icon_state = "woodgrain"
/datum/material/wood/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(source.material_flags & MATERIAL_AFFECT_STATISTICS && isobj(source))
var/obj/wooden = source
wooden.resistance_flags |= FLAMMABLE
/datum/material/wood/on_main_removed(atom/source, mat_amount, multiplier)
. = ..()
if(source.material_flags & MATERIAL_AFFECT_STATISTICS && isobj(source))
var/obj/wooden = source
wooden.resistance_flags &= ~FLAMMABLE
/datum/material/wood/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(5, BRUTE, BODY_ZONE_HEAD)
victim.reagents.add_reagent(/datum/reagent/cellulose, rand(8, 12))
source_item?.reagents?.add_reagent(/datum/reagent/cellulose, source_item.reagents.total_volume*(2/5))
return TRUE
///Stronk force increase
/datum/material/adamantine
name = "adamantine"
desc = "A powerful material made out of magic, I mean science!"
color = "#2B7A74"
strength_modifier = 1.5
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/adamantine
value_per_unit = 500 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.4
armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.3, ENERGY = 1.3, BOMB = 1, BIO = 1, FIRE = 2.5, ACID = 1)
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland.
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
/datum/material/adamantine/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10)
return TRUE
///RPG Magic.
/datum/material/mythril
name = "mythril"
desc = "How this even exists is byond me"
color = "#f2d5d7"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/mythril
value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT
strength_modifier = 1.2
armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.5, ENERGY = 1.5, BOMB = 1.5, BIO = 1.5, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.5
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland.
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
/datum/material/mythril/on_applied(atom/source, mat_amount, multiplier)
. = ..()
if(isitem(source))
source.AddComponent(/datum/component/fantasy)
ADD_TRAIT(source, TRAIT_INNATELY_FANTASTICAL_ITEM, REF(src)) // DO THIS LAST OR WE WILL NEVER GET OUR BONUSES!!!
/datum/material/mythril/on_removed(atom/source, mat_amount, multiplier)
. = ..()
if(isitem(source))
REMOVE_TRAIT(source, TRAIT_INNATELY_FANTASTICAL_ITEM, REF(src)) // DO THIS FIRST OR WE WILL NEVER GET OUR BONUSES DELETED!!!
qdel(source.GetComponent(/datum/component/fantasy))
/datum/material/mythril/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10)
return TRUE
//formed when freon react with o2, emits a lot of plasma when heated
/datum/material/hot_ice
name = "hot ice"
desc = "A weird kind of ice, feels warm to the touch"
color = "#88cdf1"
alpha = 150
starlight_color = COLOR_BLUE_LIGHT
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/hot_ice
value_per_unit = 400 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.2
/datum/material/hot_ice/on_applied(atom/source, mat_amount, multiplier)
. = ..()
source.AddComponent(/datum/component/combustible_flooder, "plasma", mat_amount * 1.5 * multiplier, (mat_amount * 0.2 + 300) * multiplier)
/datum/material/hot_ice/on_removed(atom/source, mat_amount, multiplier)
qdel(source.GetComponent(/datum/component/combustible_flooder))
return ..()
/datum/material/hot_ice/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(5, 6))
source_item?.reagents?.add_reagent(/datum/reagent/toxin/plasma, source_item.reagents.total_volume*(3/5))
return TRUE
// It's basically adamantine, but it isn't!
/datum/material/metalhydrogen
name = "Metal Hydrogen"
desc = "Solid metallic hydrogen. Some say it should be impossible"
color = "#62708A"
alpha = 150
starlight_color = COLOR_MODERATE_BLUE
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen
value_per_unit = 700 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.35
strength_modifier = 1.2
armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 0.7, BIO = 1, FIRE = 1.3, ACID = 1)
/datum/material/metalhydrogen/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
return TRUE
//I don't like sand. It's coarse, and rough, and irritating, and it gets everywhere.
/datum/material/sand
name = "sand"
desc = "You know, it's amazing just how structurally sound sand can be."
color = "#EDC9AF"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/sandblock
value_per_unit = 2 / SHEET_MATERIAL_AMOUNT
strength_modifier = 0.5
integrity_modifier = 0.1
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 1.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.25
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
/datum/material/sand/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.adjust_disgust(17)
return TRUE
//And now for our lavaland dwelling friends, sand, but in stone form! Truly revolutionary.
/datum/material/sandstone
name = "sandstone"
desc = "Bialtaakid 'ant taerif ma hdha."
color = "#ECD5A8"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/sandstone
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
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)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "brick"
/datum/material/snow
name = "snow"
desc = "There's no business like snow business."
color = COLOR_WHITE
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/snow
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0.25, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
/datum/material/snow/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/water, rand(5, 10))
return TRUE
/datum/material/runedmetal
name = "runed metal"
desc = "Mir'ntrath barhah Nar'sie."
color = "#504742"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/runed_metal
value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT
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)
beauty_modifier = -0.15
texture_layer_icon_state = "runed"
/datum/material/runedmetal/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/fuel/unholywater, rand(8, 12))
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
return TRUE
/datum/material/bronze
name = "bronze"
desc = "Clock Cult? Never heard of it."
color = "#876223"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/bronze
value_per_unit = 50 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.2
/datum/material/paper
name = "paper"
desc = "Ten thousand folds of pure starchy power."
color = "#E5DCD5"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/paperframes
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "paper"
/datum/material/paper/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
var/obj/paper = source
paper.resistance_flags |= FLAMMABLE
paper.obj_flags |= UNIQUE_RENAME
/datum/material/paper/on_main_removed(atom/source, mat_amount, multiplier)
if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
var/obj/paper = source
paper.resistance_flags &= ~FLAMMABLE
return ..()
/datum/material/cardboard
name = "cardboard"
desc = "They say cardboard is used by hobos to make incredible things."
color = "#5F625C"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/cardboard
value_per_unit = 6 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, ACID = 1.5)
beauty_modifier = -0.1
/datum/material/cardboard/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
var/obj/cardboard = source
cardboard.resistance_flags |= FLAMMABLE
cardboard.obj_flags |= UNIQUE_RENAME
/datum/material/cardboard/on_main_removed(atom/source, mat_amount, multiplier)
if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
var/obj/cardboard = source
cardboard.resistance_flags &= ~FLAMMABLE
return ..()
/datum/material/bone
name = "bone"
desc = "Man, building with this will make you the coolest caveman on the block."
color = "#e3dac9"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/bone
value_per_unit = 100 / SHEET_MATERIAL_AMOUNT
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)
beauty_modifier = -0.2
/datum/material/bamboo
name = "bamboo"
desc = "If it's good enough for pandas, it's good enough for you."
color = "#87a852"
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/bamboo
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
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)
beauty_modifier = 0.2
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "bamboo"
/datum/material/zaukerite
name = "zaukerite"
desc = "A light absorbing crystal"
color = COLOR_ALMOST_BLACK
categories = list(
MAT_CATEGORY_RIGID = TRUE,
MAT_CATEGORY_BASE_RECIPES = TRUE,
MAT_CATEGORY_ITEM_MATERIAL = TRUE,
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/zaukerite
value_per_unit = 900 / SHEET_MATERIAL_AMOUNT
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)
beauty_modifier = 0.001
/datum/material/zaukerite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(30, BURN, BODY_ZONE_HEAD, wound_bonus = 5)
source_item?.reagents?.add_reagent(/datum/reagent/toxin/plasma, source_item.reagents.total_volume*5)
return TRUE