///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" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 6, MATERIAL_HARDNESS = 6, MATERIAL_FLEXIBILITY = 2, MATERIAL_REFLECTIVITY = 3, MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 7, MATERIAL_CHEMICAL = 3, ) sheet_type = /obj/item/stack/sheet/iron ore_type = /obj/item/stack/ore/iron material_reagent = /datum/reagent/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 points_per_boulder_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) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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 mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 4, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 7, MATERIAL_ELECTRICAL = 0, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 8, ) material_reagent = /datum/reagent/silicon 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 mineral_rarity = MATERIAL_RARITY_COMMON points_per_unit = 1 / SHEET_MATERIAL_AMOUNT points_per_boulder_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) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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.material_flags & MATERIAL_AFFECT_STATISTICS)) 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.material_flags & MATERIAL_AFFECT_STATISTICS)) source.RemoveElement(/datum/element/can_shatter, shard_type, round(mat_amount / SHEET_MATERIAL_AMOUNT * multiplier), SFX_SHATTER) /// Has no special properties. Could be good against vampires in the future perhaps. /datum/material/silver name = "silver" desc = "A precious metal known for being hated by oversized bats and dogs." color = "#B5BCBB" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 7, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 3, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 9, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 4, MATERIAL_VAMPIRES_BANE = 5, ) sheet_type = /obj/item/stack/sheet/mineral/silver ore_type = /obj/item/stack/ore/silver material_reagent = /datum/reagent/silver value_per_unit = 50 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 16 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 3.5 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5) return TRUE ///Slight force increase /datum/material/gold name = "gold" desc = "All that glitters is not gold." color = "#E6BB45" mat_properties = list( MATERIAL_DENSITY = 9, MATERIAL_HARDNESS = 3, MATERIAL_FLEXIBILITY = 3, MATERIAL_REFLECTIVITY = 6, MATERIAL_ELECTRICAL = 8, MATERIAL_THERMAL = 8, MATERIAL_CHEMICAL = 2, ) mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID sheet_type = /obj/item/stack/sheet/mineral/gold ore_type = /obj/item/stack/ore/gold material_reagent = /datum/reagent/gold value_per_unit = 125 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_RARE mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 18 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 4 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 4, // Wow these are light MATERIAL_HARDNESS = 9, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 10, MATERIAL_ELECTRICAL = 0, // Did you know they're also an *extremely* potent insulator, only beaten by some synthetic compounds? MATERIAL_THERMAL = 9, MATERIAL_CHEMICAL = 4, ) sheet_type = /obj/item/stack/sheet/mineral/diamond ore_type = /obj/item/stack/ore/diamond material_reagent = /datum/reagent/carbon alpha = 132 starlight_color = COLOR_BLUE_LIGHT value_per_unit = 500 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC mineral_rarity = MATERIAL_RARITY_RARE points_per_unit = 50 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 10 / SHEET_MATERIAL_AMOUNT /datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) return TRUE /// Is slightly radioactive /datum/material/uranium name = "uranium" desc = "Very spicy rocks." color = "#2C992C" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 9, MATERIAL_HARDNESS = 5, MATERIAL_FLEXIBILITY = 1, MATERIAL_REFLECTIVITY = 0, // Its a bar of glowing stone MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 6, MATERIAL_CHEMICAL = 6, MATERIAL_BEAUTY = 0.3, // Overriden cause its ~shiny~ MATERIAL_RADIOACTIVITY = 4, ) sheet_type = /obj/item/stack/sheet/mineral/uranium ore_type = /obj/item/stack/ore/uranium material_reagent = /datum/reagent/uranium value_per_unit = 100 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_RARE mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS points_per_unit = 30 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 3.5 / SHEET_MATERIAL_AMOUNT /// 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" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 6, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 10, MATERIAL_THERMAL = 8, MATERIAL_CHEMICAL = 0, MATERIAL_FLAMMABILITY = 10, // Literally sets itself on fire from any excitement MATERIAL_FIRESTACKER = 1, ) sheet_type = /obj/item/stack/sheet/mineral/plasma ore_type = /obj/item/stack/ore/plasma material_reagent = /datum/reagent/toxin/plasma value_per_unit = 200 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_PRECIOUS points_per_unit = 15 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 2 / SHEET_MATERIAL_AMOUNT /datum/material/plasma/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() source.AddComponent(/datum/component/combustible_flooder, GAS_PLASMA, mat_amount * 0.05 * multiplier) //Empty temp arg, fully dependent on whatever ignited it. if(istype(source, /obj/item/fishing_rod)) ADD_TRAIT(source, TRAIT_ROD_LAVA_USABLE, REF(src)) /datum/material/plasma/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() qdel(source.GetComponent(/datum/component/combustible_flooder)) if(istype(source, /obj/item/fishing_rod)) ADD_TRAIT(source, TRAIT_ROD_LAVA_USABLE, REF(src)) /// Can cause bluespace effects on use. (Teleportation) /datum/material/bluespace name = "bluespace crystal" desc = "Crystals with bluespace properties." color = "#2E50B7" alpha = 200 starlight_color = COLOR_BLUE mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 2, MATERIAL_HARDNESS = 8, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 10, MATERIAL_ELECTRICAL = 10, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 4, MATERIAL_BEAUTY = 0.5, // Absolutely mesmerizing MATERIAL_TELEPORTING = 5, ) sheet_type = /obj/item/stack/sheet/bluespace_crystal ore_type = /obj/item/stack/ore/bluespace_crystal material_reagent = /datum/reagent/bluespace value_per_unit = 300 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_RARE points_per_unit = 50 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 10 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC texture_layer_icon_state = "shine" /datum/material/bluespace/on_main_applied(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing)) /datum/material/bluespace/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge) SIGNAL_HANDLER if(prob(67)) return var/list/elegible_fish_sources = assoc_to_values(GLOB.preset_fish_sources) for(var/datum/fish_source/source as anything in elegible_fish_sources) if(source.fish_source_flags & FISH_SOURCE_FLAG_NO_BLUESPACE_ROD) elegible_fish_sources -= source var/datum/fish_source/new_source = pick(elegible_fish_sources) challenge.register_reward_signals(new_source) /datum/material/bluespace/on_main_removed(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING) ///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" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 4, MATERIAL_HARDNESS = 6, MATERIAL_FLEXIBILITY = 2, MATERIAL_REFLECTIVITY = 4, MATERIAL_ELECTRICAL = 1, // ...Rubbery? MATERIAL_THERMAL = 6, MATERIAL_CHEMICAL = 6, MATERIAL_BEAUTY = 0.5, // Honk ) sheet_type = /obj/item/stack/sheet/mineral/bananium ore_type = /obj/item/stack/ore/bananium material_reagent = /datum/reagent/consumable/banana value_per_unit = 1000 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED points_per_unit = 60 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 15 / SHEET_MATERIAL_AMOUNT /datum/material/bananium/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() 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_main_applied(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing)) /datum/material/bananium/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge) SIGNAL_HANDLER if(prob(40)) RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_funny_fish)) /datum/material/bananium/proc/roll_funny_fish(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards) SIGNAL_HANDLER var/static/list/funny_fish = list( /obj/item/fish/clownfish = 5, /obj/item/fish/clownfish/lube = 3, /obj/item/fish/soul = 2, /obj/item/fish/skin_crab = 2, /obj/item/fish/donkfish = 2, ) rewards += pick_weight(funny_fish) /datum/material/bananium/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() qdel(source.GetComponent(/datum/component/slippery)) qdel(source.GetComponent(/datum/component/squeak)) /datum/material/bananium/on_main_removed(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING) ///Mediocre force increase /datum/material/titanium name = "titanium" desc = "Titanium" color = "#EFEFEF" mat_properties = list( MATERIAL_DENSITY = 5, MATERIAL_HARDNESS = 7, MATERIAL_FLEXIBILITY = 2, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 5, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 6, ) mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID sheet_type = /obj/item/stack/sheet/mineral/titanium ore_type = /obj/item/stack/ore/titanium value_per_unit = 125 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 3 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON 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) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) return TRUE /datum/material/runite name = "runite" desc = "Runite" color = "#526F77" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 9, MATERIAL_HARDNESS = 9, MATERIAL_FLEXIBILITY = 1, MATERIAL_REFLECTIVITY = 0, MATERIAL_ELECTRICAL = 1, MATERIAL_THERMAL = 0, MATERIAL_CHEMICAL = 9, ) sheet_type = /obj/item/stack/sheet/mineral/runite value_per_unit = 600 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED points_per_unit = 100 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT /datum/material/runite/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod. /datum/material/runite/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod. /datum/material/runite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10) return TRUE ///Force decrease /datum/material/plastic name = "plastic" desc = "Plastic" color = "#BFB9AC" mat_flags = MATERIAL_SILO_STORED | MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_POLYMER | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 3, MATERIAL_HARDNESS = 2, MATERIAL_FLEXIBILITY = 5, MATERIAL_REFLECTIVITY = 3, MATERIAL_ELECTRICAL = 1, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 4, MATERIAL_FLAMMABILITY = 4, ) sheet_type = /obj/item/stack/sheet/plastic ore_type = /obj/item/stack/ore/slag // No plastic or coal ore, so we use slag. material_reagent = /datum/reagent/plastic_polymers value_per_unit = 25 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Nobody's found oil on lavaland yet. points_per_unit = 4 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 4 / SHEET_MATERIAL_AMOUNT /// Force decrease and mushy sound effect. (Not yet implemented) /datum/material/biomass name = "biomass" desc = "Organic matter." color = "#735b4d" value_per_unit = 50 / SHEET_MATERIAL_AMOUNT /datum/material/wood name = "wood" desc = "Flexible, durable, but flammable. Hard to come across in space." color = "#855932" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_ORGANIC | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 2, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 4, MATERIAL_REFLECTIVITY = 1, MATERIAL_ELECTRICAL = 8, MATERIAL_THERMAL = 3, MATERIAL_CHEMICAL = 1, MATERIAL_FLAMMABILITY = 6, MATERIAL_BEAUTY = 0.1, // Pretty patterns ) sheet_type = /obj/item/stack/sheet/mineral/wood material_reagent = /datum/reagent/cellulose value_per_unit = 20 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "woodgrain" /datum/material/wood/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(5, BRUTE, BODY_ZONE_HEAD) return TRUE /// Stronk force increase /datum/material/adamantine name = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#2B7A74" mat_properties = list( MATERIAL_DENSITY = 7, MATERIAL_HARDNESS = 9, MATERIAL_FLEXIBILITY = 3, MATERIAL_REFLECTIVITY = 6, MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 1, MATERIAL_CHEMICAL = 9, ) mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID sheet_type = /obj/item/stack/sheet/mineral/adamantine value_per_unit = 500 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Doesn't naturally spawn on lavaland. points_per_unit = 100 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT // If it ever needs it, we'll give it /datum/material/adamantine/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) // light-absorbing, environment-cancelling fishing rod. /datum/material/adamantine/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) // light-absorbing, environment-cancelling fishing rod. /datum/material/adamantine/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 4, MATERIAL_HARDNESS = 10, MATERIAL_FLEXIBILITY = 4, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 9, MATERIAL_BEAUTY = 0.5, MATERIAL_INTEGRITY = 2, // This is magic, I ain't gotta explain shit ) sheet_type = /obj/item/stack/sheet/mineral/mythril value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT mineral_rarity = MATERIAL_RARITY_UNDISCOVERED // Doesn't naturally spawn on lavaland. points_per_unit = 100 / SHEET_MATERIAL_AMOUNT points_per_boulder_unit = 20 / SHEET_MATERIAL_AMOUNT /datum/material/mythril/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() 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, from_slot) . = ..() 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) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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 mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL mat_properties = list( MATERIAL_DENSITY = 4, MATERIAL_HARDNESS = 2, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 9, MATERIAL_THERMAL = 8, MATERIAL_CHEMICAL = 4, MATERIAL_FLAMMABILITY = 10, MATERIAL_FIRESTACKER = 1, ) sheet_type = /obj/item/stack/sheet/hot_ice material_reagent = /datum/reagent/toxin/hot_ice value_per_unit = 400 / SHEET_MATERIAL_AMOUNT /datum/material/hot_ice/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() source.AddComponent(/datum/component/combustible_flooder, GAS_PLASMA, mat_amount * 1.5 * multiplier, (mat_amount * 0.2 + 300) * multiplier) /datum/material/hot_ice/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() qdel(source.GetComponent(/datum/component/combustible_flooder)) // 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" starlight_color = COLOR_MODERATE_BLUE mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 3, MATERIAL_HARDNESS = 10, MATERIAL_FLEXIBILITY = 1, MATERIAL_REFLECTIVITY = 8, MATERIAL_ELECTRICAL = 2, MATERIAL_THERMAL = 2, MATERIAL_CHEMICAL = 8, ) sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen material_reagent = /datum/reagent/hydrogen value_per_unit = 700 / SHEET_MATERIAL_AMOUNT /datum/material/metalhydrogen/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_AMORPHOUS mat_properties = list( MATERIAL_DENSITY = 3, MATERIAL_HARDNESS = 0, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 7, MATERIAL_ELECTRICAL = 1, MATERIAL_THERMAL = 8, MATERIAL_CHEMICAL = 4, ) ore_type = /obj/item/stack/ore/glass material_reagent = /datum/reagent/silicon value_per_unit = 2 / SHEET_MATERIAL_AMOUNT turf_sound_override = FOOTSTEP_SAND texture_layer_icon_state = "sand" mat_rust_resistance = RUST_RESISTANCE_BASIC /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" mat_flags = MATERIAL_BASIC_RECIPES mat_properties = list( MATERIAL_DENSITY = 4, MATERIAL_HARDNESS = 3, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 2, MATERIAL_ELECTRICAL = 2, MATERIAL_THERMAL = 6, MATERIAL_CHEMICAL = 6, ) sheet_type = /obj/item/stack/sheet/mineral/sandstone material_reagent = /datum/reagent/silicon value_per_unit = 5 / SHEET_MATERIAL_AMOUNT turf_sound_override = FOOTSTEP_WOOD texture_layer_icon_state = "brick" mat_rust_resistance = RUST_RESISTANCE_BASIC /datum/material/snow name = "snow" desc = "There's no business like snow business." color = COLOR_WHITE mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_AMORPHOUS mat_properties = list( MATERIAL_DENSITY = 2, MATERIAL_HARDNESS = 1, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 6, MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 6, MATERIAL_CHEMICAL = 1, ) sheet_type = /obj/item/stack/sheet/mineral/snow material_reagent = /datum/reagent/consumable/ice turf_sound_override = FOOTSTEP_SAND texture_layer_icon_state = "sand" mat_rust_resistance = RUST_RESISTANCE_ORGANIC /datum/material/runedmetal name = "runed metal" desc = "Mir'ntrath barhah Nar'sie." color = "#504742" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 7, MATERIAL_HARDNESS = 7, MATERIAL_FLEXIBILITY = 3, MATERIAL_REFLECTIVITY = 2, MATERIAL_ELECTRICAL = 5, MATERIAL_THERMAL = 1, MATERIAL_CHEMICAL = 8, ) material_reagent = list(/datum/reagent/iron = 1, /datum/reagent/fuel/unholywater = 2) sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 1500 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "runed" /datum/material/runedmetal/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) 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" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_METAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 8, // Bronze is *very* dense, almost as dense as lead MATERIAL_HARDNESS = 5, MATERIAL_FLEXIBILITY = 3, MATERIAL_REFLECTIVITY = 7, MATERIAL_ELECTRICAL = 8, MATERIAL_THERMAL = 8, MATERIAL_CHEMICAL = 5, ) sheet_type = /obj/item/stack/sheet/bronze material_reagent = list(/datum/reagent/iron = 0.75, /datum/reagent/copper = 0.25) value_per_unit = 50 / SHEET_MATERIAL_AMOUNT /datum/material/paper name = "paper" desc = "Ten thousand folds of pure starchy power." color = "#E5DCD5" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_ORGANIC mat_properties = list( MATERIAL_DENSITY = 0, MATERIAL_HARDNESS = 0, MATERIAL_FLEXIBILITY = 8, MATERIAL_REFLECTIVITY = 1, MATERIAL_ELECTRICAL = 4, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 0, MATERIAL_FLAMMABILITY = 8, MATERIAL_BEAUTY = 0.3, // Origami is beautiful ) material_reagent = /datum/reagent/cellulose sheet_type = /obj/item/stack/sheet/paperframes value_per_unit = 5 / SHEET_MATERIAL_AMOUNT 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)) return var/obj/paper = source paper.obj_flags |= UNIQUE_RENAME if(istype(paper, /obj/item/fishing_rod)) RegisterSignal(paper, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing)) /datum/material/paper/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge) SIGNAL_HANDLER if(prob(40)) //consider the default reward and it's 15% RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_stickman)) /datum/material/paper/proc/roll_stickman(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards) SIGNAL_HANDLER rewards += pick(/mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/basic/stickman/ranged) /datum/material/paper/on_main_removed(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod) && (source.material_flags & MATERIAL_AFFECT_STATISTICS)) UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING) /datum/material/cardboard name = "cardboard" desc = "They say cardboard is used by hobos to make incredible things." color = "#5F625C" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_ORGANIC mat_properties = list( MATERIAL_DENSITY = 1, MATERIAL_HARDNESS = 0, MATERIAL_FLEXIBILITY = 6, MATERIAL_REFLECTIVITY = 1, MATERIAL_ELECTRICAL = 4, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 2, MATERIAL_FLAMMABILITY = 6, ) sheet_type = /obj/item/stack/sheet/cardboard material_reagent = /datum/reagent/cellulose value_per_unit = 6 / SHEET_MATERIAL_AMOUNT /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.obj_flags |= UNIQUE_RENAME /datum/material/bone name = "bone" desc = "Man, building with this will make you the coolest caveman on the block." color = "#e3dac9" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_ORGANIC | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 3, MATERIAL_HARDNESS = 5, MATERIAL_FLEXIBILITY = 2, MATERIAL_REFLECTIVITY = 4, MATERIAL_ELECTRICAL = 3, MATERIAL_THERMAL = 4, MATERIAL_CHEMICAL = 2, ) sheet_type = /obj/item/stack/sheet/bone material_reagent = /datum/reagent/bone_dust value_per_unit = 100 / SHEET_MATERIAL_AMOUNT /datum/material/bone/on_main_applied(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing)) else if(istype(source, /obj/item/fish)) ADD_TRAIT(source, TRAIT_FISH_MADE_OF_BONE, REF(src)) /datum/material/bone/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge) SIGNAL_HANDLER if(prob(40)) RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_bones)) /datum/material/bone/proc/roll_bones(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards) SIGNAL_HANDLER var/static/list/bones = list( /obj/item/fish/boned = 65, /obj/item/fish/mastodon = 8, /mob/living/basic/skeleton = 6, /mob/living/basic/skeleton/ice = 6, /mob/living/basic/skeleton/templar = 6, /obj/item/instrument/trumpet/spectral/one_doot = 3, /obj/item/instrument/saxophone/spectral/one_doot = 3, /obj/item/instrument/trombone/spectral/one_doot = 3, ) rewards += pick_weight(bones) /datum/material/bone/on_main_removed(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING) else if(istype(source, /obj/item/fish)) REMOVE_TRAIT(source, TRAIT_FISH_MADE_OF_BONE, REF(src)) /datum/material/bamboo name = "bamboo" desc = "If it's good enough for pandas, it's good enough for you." color = "#87a852" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_ORGANIC | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 3, // Denser and bendier than wood, but pretty much the same otherwise MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 5, MATERIAL_REFLECTIVITY = 1, MATERIAL_ELECTRICAL = 6, MATERIAL_THERMAL = 3, MATERIAL_CHEMICAL = 1, MATERIAL_FLAMMABILITY = 6, MATERIAL_BEAUTY = 0.2, // Prettier patterns ) sheet_type = /obj/item/stack/sheet/mineral/bamboo material_reagent = /datum/reagent/cellulose value_per_unit = 5 / SHEET_MATERIAL_AMOUNT turf_sound_override = FOOTSTEP_WOOD texture_layer_icon_state = "bamboo" /datum/material/zaukerite name = "zaukerite" desc = "A light absorbing crystal" color = COLOR_ALMOST_BLACK mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 1, MATERIAL_HARDNESS = 9, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 0, MATERIAL_ELECTRICAL = 1, MATERIAL_THERMAL = 9, MATERIAL_CHEMICAL = 0, ) sheet_type = /obj/item/stack/sheet/mineral/zaukerite material_reagent = /datum/reagent/toxin/plasma value_per_unit = 900 / SHEET_MATERIAL_AMOUNT /datum/material/zaukerite/on_applied(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) ADD_TRAIT(source, TRAIT_ROD_IGNORE_ENVIRONMENT, REF(src)) //light-absorbing, environment-cancelling fishing rod. /datum/material/zaukerite/on_removed(atom/source, mat_amount, multiplier, from_slot) . = ..() if(istype(source, /obj/item/fishing_rod)) REMOVE_TRAIT(source, TRAIT_ROD_IGNORE_ENVIRONMENT, REF(src)) //light-absorbing, environment-cancelling fishing rod. /datum/material/zaukerite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) . = ..() if(!HAS_TRAIT(victim, TRAIT_ROCK_EATER)) victim.apply_damage(30, BURN, BODY_ZONE_HEAD, wound_bonus = 5) return TRUE /// Evil and very unstable version of bluespace crystals /datum/material/telecrystal name = "telecrystal" desc = "An ominous-looking gemstone capable of transporting objects vast distances through bluespace." color = "#BD1B28" alpha = 200 starlight_color = COLOR_SYNDIE_RED mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_CRYSTAL | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 1, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 10, MATERIAL_ELECTRICAL = 10, MATERIAL_THERMAL = 2, MATERIAL_CHEMICAL = 8, MATERIAL_BEAUTY = -0.5, // very evil bad no good MATERIAL_TELEPORTING = 8, MATERIAL_PENETRATING = TRUE, ) sheet_type = /obj/item/stack/sheet/telepolycrystal material_reagent = list(/datum/reagent/bluespace = 1, /datum/reagent/medicine/stimulants = 1) // We don't have liquid telecrystals and I don't wanna risk it value_per_unit = 1200 / SHEET_MATERIAL_AMOUNT texture_layer_icon_state = "shine" /datum/material/telecrystal/on_main_applied(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing)) /datum/material/telecrystal/on_main_removed(atom/source, mat_amount, multiplier) . = ..() if(istype(source, /obj/item/fishing_rod)) UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING) /datum/material/telecrystal/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge) SIGNAL_HANDLER // Oops, all chainsawfish! challenge.register_reward_signals(GLOB.preset_fish_sources[/datum/fish_source/portal/syndicate]) /datum/material/rock name = "rock" desc = "Marble maybe?" color = "#919191" mat_flags = MATERIAL_BASIC_RECIPES | MATERIAL_CLASS_RIGID mat_properties = list( MATERIAL_DENSITY = 2, MATERIAL_HARDNESS = 4, MATERIAL_FLEXIBILITY = 0, MATERIAL_REFLECTIVITY = 0, MATERIAL_ELECTRICAL = 0, MATERIAL_THERMAL = 1, MATERIAL_CHEMICAL = 0, MATERIAL_BEAUTY = 0.8, ) texture_layer_icon_state = "sand"