mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
## About The Pull Request The holy whip no longer arbitrarily does 2x damage to vampires The holy whip is now made out of silver, and thus applies bonus burn damage when hitting vampires The damage amount has gone down slightly (36 brute -> 18 brute + 12 burn) but it's slightly offset by the fact that the silver burn damage is calculated against different armor Silver itself now does more damage on average (from 5 flat to 4-16 based on material volume) and is no longer completely blocked by any form of clothing, instead blocked by wound armor ## Why It's Good For The Game Tying these hardcoded debuffs to more broad game systems is more sandboxy, which I think is more fun. It establishes consistent rules that players can follow without needing niche code knowledge or extra examine tooltips Yeah it's a bit weaker in practice... but the balance doesn't really matter anyways since it's a niche Halloween interaction ## Changelog 🆑 Melbert balance: "Holy whip" null rod no longer arbitrarily does 2x brute damage to vampires balance: "Holy whip" null rod is now made of silver, which does bonus burn damage to vampires (~1.67x damage now) balance: Silver material weapons deal more burn damage to vampires on average now (from 5 flat to 4-16, depending on volume of silver in the weapon) balance: Silver material weapons are no longer completely blocked by any form of clothing, instead now reduced / blocked by wound armor /🆑
959 lines
34 KiB
Plaintext
959 lines
34 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"
|
|
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 = 8,
|
|
)
|
|
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"
|