Merge branch 'master' into upstream-merge-10238

This commit is contained in:
Razgriz
2021-04-30 19:37:25 -07:00
committed by GitHub
130 changed files with 5776 additions and 5484 deletions

View File

@@ -23,8 +23,18 @@
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
if(pref.species)
var/datum/species/S = GLOB.all_species[pref.species]
if(S && pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
if(!istype(S))
return
if(pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
pref.alternate_languages.len = pref.numlanguage() // Truncate to allowed length CHOMPEdit
// Sanitize illegal languages
for(var/language in pref.alternate_languages)
var/datum/language/L = GLOB.all_languages[language]
if((L.flags & RESTRICTED) || (!(language in S.secondary_langs) && !is_lang_whitelisted(pref.client, L)))
pref.alternate_languages -= language
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
pref.language_prefixes = config.language_prefixes.Copy()
for(var/prefix in pref.language_prefixes)

View File

@@ -244,21 +244,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
if(pref.ear_style)
pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style))
var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style]
if(temp_ear_style.apply_restrictions && (!(pref.species in temp_ear_style.species_allowed)))
pref.ear_style = initial(pref.ear_style)
if(pref.tail_style)
pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style))
var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style]
if(temp_tail_style.apply_restrictions && (!(pref.species in temp_tail_style.species_allowed)))
pref.tail_style = initial(pref.tail_style)
if(pref.wing_style)
pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style))
var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style]
if(temp_wing_style.apply_restrictions && (!(pref.species in temp_wing_style.species_allowed)))
pref.wing_style = initial(pref.wing_style)
if(get_ear_styles()[pref.ear_style])
pref.ear_style = initial(pref.ear_style)
if(get_wing_styles()[pref.wing_style])
pref.wing_style = initial(pref.wing_style)
if(get_tail_styles()[pref.tail_style])
pref.tail_style = initial(pref.tail_style)
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
@@ -705,7 +696,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
pref.body_markings.Cut() // Basically same as above.
// Sanitize ear/wing/tail styles
if(get_ear_styles()[pref.ear_style])
pref.ear_style = initial(pref.ear_style)
if(get_wing_styles()[pref.wing_style])
pref.wing_style = initial(pref.wing_style)
if(get_tail_styles()[pref.tail_style])
pref.tail_style = initial(pref.tail_style)
var/min_age = get_min_age()
var/max_age = get_max_age()
pref.age = max(min(pref.age, max_age), min_age)
@@ -1172,11 +1171,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else if(href_list["ear_style"])
// Construct the list of names allowed for this user.
var/list/pretty_ear_styles = list("Normal" = null)
for(var/path in ear_styles_list)
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_ear_styles[instance.name] = path
var/list/pretty_ear_styles = get_ear_styles()
// Present choice to user
var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles
@@ -1214,11 +1209,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else if(href_list["tail_style"])
// Construct the list of names allowed for this user.
var/list/pretty_tail_styles = list("Normal" = null)
for(var/path in tail_styles_list)
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_tail_styles[instance.name] = path
var/list/pretty_tail_styles = get_tail_styles()
// Present choice to user
var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles
@@ -1256,11 +1247,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else if(href_list["wing_style"])
// Construct the list of names allowed for this user.
var/list/pretty_wing_styles = list("Normal" = null)
for(var/path in wing_styles_list)
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_wing_styles[instance.name] = path
var/list/pretty_wing_styles = get_wing_styles()
// Present choice to user
var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles
@@ -1390,3 +1377,26 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
user << browse(dat, "window=species;size=700x400")
/datum/category_item/player_setup_item/general/body/proc/get_tail_styles()
var/list/pretty_tail_styles = list("Normal" = null)
for(var/path in tail_styles_list)
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_tail_styles[instance.name] = path
return pretty_tail_styles
/datum/category_item/player_setup_item/general/body/proc/get_ear_styles()
var/list/pretty_ear_styles = list("Normal" = null)
for(var/path in ear_styles_list)
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_ear_styles[instance.name] = path
return pretty_ear_styles
/datum/category_item/player_setup_item/general/body/proc/get_wing_styles()
var/list/pretty_wing_styles = list("Normal" = null)
for(var/path in wing_styles_list)
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_wing_styles[instance.name] = path
return pretty_wing_styles

View File

@@ -62,12 +62,16 @@ var/list/gear_datums = list()
/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost)
. = list()
var/mob/preference_mob = preference_mob()
var/mob/preference_mob = preference_mob() //VOREStation Add
for(var/gear_name in gear_datums)
var/datum/gear/G = gear_datums[gear_name]
if(G.whitelisted && !is_alien_whitelisted(preference_mob, GLOB.all_species[G.whitelisted]))
continue
if(G.whitelisted && config.loadout_whitelist != LOADOUT_WHITELIST_OFF)
if(config.loadout_whitelist == LOADOUT_WHITELIST_STRICT && G.whitelisted != pref.species)
continue
if(config.loadout_whitelist == LOADOUT_WHITELIST_LAX && !is_alien_whitelisted(preference_mob(), GLOB.all_species[G.whitelisted]))
continue
if(max_cost && G.cost > max_cost)
continue
//VOREStation Edit Start

View File

@@ -571,6 +571,12 @@
ckeywhitelist = list("luminescentring")
character_name = list("Briana Moore")
/datum/gear/fluff/entchtut_medal
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Entchtut's Conduct Medal"
ckeywhitelist = list("littlebigkid2000")
character_name = list("Entchtut Cenein")
// M CKEYS
/datum/gear/fluff/phi_box
path = /obj/item/weapon/storage/box/fluff/phi
@@ -739,6 +745,18 @@
character_name = list("Clara Mali")
cost = 1
/datum/gear/fluff/luna_sci_medal
path = /obj/item/clothing/accessory/medal/nobel_science
display_name = "LUNA's Nobel Science Award"
ckeywhitelist = list("residentcody")
character_name = list("LUNA")
/datum/gear/fluff/luna_conduct_medal
path = /obj/item/clothing/accessory/medal/conduct
display_name = "LUNA's Distinguished Conduct Medal"
ckeywhitelist = list("residentcody")
character_name = list("LUNA")
/datum/gear/fluff/nikki_dorky_outfit
path = /obj/item/weapon/storage/box/fluff
display_name = "Nikki's Witchy Outfit"

View File

@@ -129,6 +129,7 @@
for(var/datum/category_item/player_setup_item/PI in items)
PI.load_character(S)
/datum/category_group/player_setup_category/proc/save_character(var/savefile/S)
// Sanitize all data, then save it
for(var/datum/category_item/player_setup_item/PI in items)

View File

@@ -176,8 +176,8 @@ datum/preferences
if(!IsGuestKey(C.key))
load_path(C.ckey)
if(load_preferences())
if(load_character())
return
load_character()
/datum/preferences/Destroy()
. = ..()

View File

@@ -82,10 +82,8 @@
player_setup.load_character(S)
S.cd = "/character[default_slot]"
player_setup.save_character(S)
sanitize_preferences()
player_setup.load_character(S)
clear_character_previews() // Recalculate them on next show
clear_character_previews() // VOREStation Edit
return 1
/datum/preferences/proc/save_character()

View File

@@ -19,14 +19,14 @@
/obj/item/clothing/head/radiation
sprite_sheets = list(
SPECIES_TESHARI = 'icons/mob/species/teshari/helmet_vr.dmi',
SPECIES_TESHARI = 'icons/mob/species/teshari/head_ch.dmi', //CHOMPstation edit, using our overwrite icons
SPECIES_VOX = 'icons/mob/species/vox/head.dmi',
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/head.dmi'
)
/obj/item/clothing/suit/radiation
sprite_sheets = list(
SPECIES_TESHARI = 'icons/mob/species/teshari/suit_vr.dmi',
SPECIES_TESHARI = 'icons/mob/species/teshari/suit_ch.dmi', //CHOMPstation edit, using our overwrite icons
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi',
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/suit.dmi'
)

View File

@@ -1,98 +1,98 @@
/*****************************Money bag********************************/
/obj/item/weapon/moneybag
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
force = 10.0
throwforce = 2.0
w_class = ITEMSIZE_LARGE
/obj/item/weapon/moneybag/attack_hand(user as mob)
var/amt_gold = 0
var/amt_silver = 0
var/amt_diamond = 0
var/amt_iron = 0
var/amt_phoron = 0
var/amt_uranium = 0
for (var/obj/item/weapon/coin/C in contents)
if (istype(C,/obj/item/weapon/coin/diamond))
amt_diamond++;
if (istype(C,/obj/item/weapon/coin/phoron))
amt_phoron++;
if (istype(C,/obj/item/weapon/coin/iron))
amt_iron++;
if (istype(C,/obj/item/weapon/coin/silver))
amt_silver++;
if (istype(C,/obj/item/weapon/coin/gold))
amt_gold++;
if (istype(C,/obj/item/weapon/coin/uranium))
amt_uranium++;
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
if (amt_gold)
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
if (amt_silver)
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
if (amt_iron)
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
if (amt_diamond)
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
if (amt_phoron)
dat += text("Phoron coins: [amt_phoron] <A href='?src=\ref[src];remove=phoron'>Remove one</A><br>")
if (amt_uranium)
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
user << browse("[dat]", "window=moneybag")
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/coin))
var/obj/item/weapon/coin/C = W
to_chat(user, "<font color='blue'>You add the [C.name] into the bag.</font>")
usr.drop_item()
contents += C
if (istype(W, /obj/item/weapon/moneybag))
var/obj/item/weapon/moneybag/C = W
for (var/obj/O in C.contents)
contents += O;
to_chat(user, "<font color='blue'>You empty the [C.name] into the bag.</font>")
return
/obj/item/weapon/moneybag/Topic(href, href_list)
if(..())
return 1
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["remove"])
var/obj/item/weapon/coin/COIN
switch(href_list["remove"])
if("gold")
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
if("silver")
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
if("iron")
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
if("diamond")
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
if("phoron")
COIN = locate(/obj/item/weapon/coin/phoron,src.contents)
if("uranium")
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
if(!COIN)
return
COIN.loc = src.loc
return
/obj/item/weapon/moneybag/vault
/obj/item/weapon/moneybag/vault/New()
..()
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/gold(src)
/*****************************Money bag********************************/
/obj/item/weapon/moneybag
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
force = 10.0
throwforce = 2.0
w_class = ITEMSIZE_LARGE
/obj/item/weapon/moneybag/attack_hand(user as mob)
var/amt_gold = 0
var/amt_silver = 0
var/amt_diamond = 0
var/amt_iron = 0
var/amt_phoron = 0
var/amt_uranium = 0
for (var/obj/item/weapon/coin/C in contents)
if (istype(C,/obj/item/weapon/coin/diamond))
amt_diamond++;
if (istype(C,/obj/item/weapon/coin/phoron))
amt_phoron++;
if (istype(C,/obj/item/weapon/coin/iron))
amt_iron++;
if (istype(C,/obj/item/weapon/coin/silver))
amt_silver++;
if (istype(C,/obj/item/weapon/coin/gold))
amt_gold++;
if (istype(C,/obj/item/weapon/coin/uranium))
amt_uranium++;
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
if (amt_gold)
dat += text("Gold coins: [amt_gold] <A href='?src=\ref[src];remove=gold'>Remove one</A><br>")
if (amt_silver)
dat += text("Silver coins: [amt_silver] <A href='?src=\ref[src];remove=silver'>Remove one</A><br>")
if (amt_iron)
dat += text("Metal coins: [amt_iron] <A href='?src=\ref[src];remove=iron'>Remove one</A><br>")
if (amt_diamond)
dat += text("Diamond coins: [amt_diamond] <A href='?src=\ref[src];remove=diamond'>Remove one</A><br>")
if (amt_phoron)
dat += text("Phoron coins: [amt_phoron] <A href='?src=\ref[src];remove=phoron'>Remove one</A><br>")
if (amt_uranium)
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
user << browse("[dat]", "window=moneybag")
/obj/item/weapon/moneybag/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/coin))
var/obj/item/weapon/coin/C = W
to_chat(user, "<font color='blue'>You add the [C.name] into the bag.</font>")
usr.drop_item()
contents += C
if (istype(W, /obj/item/weapon/moneybag))
var/obj/item/weapon/moneybag/C = W
for (var/obj/O in C.contents)
contents += O;
to_chat(user, "<font color='blue'>You empty the [C.name] into the bag.</font>")
return
/obj/item/weapon/moneybag/Topic(href, href_list)
if(..())
return 1
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["remove"])
var/obj/item/weapon/coin/COIN
switch(href_list["remove"])
if("gold")
COIN = locate(/obj/item/weapon/coin/gold,src.contents)
if("silver")
COIN = locate(/obj/item/weapon/coin/silver,src.contents)
if("iron")
COIN = locate(/obj/item/weapon/coin/iron,src.contents)
if("diamond")
COIN = locate(/obj/item/weapon/coin/diamond,src.contents)
if("phoron")
COIN = locate(/obj/item/weapon/coin/phoron,src.contents)
if("uranium")
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
if(!COIN)
return
COIN.loc = src.loc
return
/obj/item/weapon/moneybag/vault
/obj/item/weapon/moneybag/vault/New()
..()
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/silver(src)
new /obj/item/weapon/coin/gold(src)
new /obj/item/weapon/coin/gold(src)

View File

@@ -0,0 +1,722 @@
///
/// A vending machine
///
//
// ALL THE VENDING MACHINES ARE IN vending_machines.dm now!
//
/obj/machinery/vending
name = "Vendomat"
desc = "A generic vending machine."
icon = 'icons/obj/vending.dmi'
icon_state = "generic"
anchored = 1
density = 1
clicksound = "button"
// Power
use_power = USE_POWER_IDLE
idle_power_usage = 10
var/vend_power_usage = 150 //actuators and stuff
// Vending-related
var/active = 1 //No sales pitches if off!
var/vend_ready = 1 //Are we ready to vend?? Is it time??
var/vend_delay = 10 //How long does it take to vend?
var/categories = CAT_NORMAL // Bitmask of cats we're currently showing
var/datum/stored_item/vending_product/currently_vending = null // What we're requesting payment for right now
var/vending_sound = "machines/vending/vending_drop.ogg"
/*
Variables used to initialize the product list
These are used for initialization only, and so are optional if
product_records is specified
*/
var/list/products = list() // For each, use the following pattern:
var/list/contraband = list() // list(/type/path = amount,/type/path2 = amount2)
var/list/premium = list() // No specified amount = only one in stock
var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price.
// List of vending_product items available.
var/list/product_records = list()
// Variables used to initialize advertising
var/product_slogans = "" //String of slogans spoken out loud, separated by semicolons
var/product_ads = "" //String of small ad messages in the vending screen
var/list/ads_list = list()
// Stuff relating vocalizations
var/list/slogan_list = list()
var/shut_up = 1 //Stop spouting those godawful pitches!
var/vend_reply //Thank you for shopping!
var/last_reply = 0
var/last_slogan = 0 //When did we last pitch?
var/slogan_delay = 6000 //How long until we can pitch again?
// Things that can go wrong
emagged = 0 //Ignores if somebody doesn't have card access to that machine.
var/seconds_electrified = 0 //Shock customers like an airlock.
var/shoot_inventory = 0 //Fire items at customers! We're broken!
var/scan_id = 1
var/obj/item/weapon/coin/coin
var/datum/wires/vending/wires = null
var/list/log = list()
var/req_log_access = access_cargo //default access for checking logs is cargo
var/has_logs = 0 //defaults to 0, set to anything else for vendor to have logs
var/can_rotate = 1 //Defaults to yes, can be set to 0 for vendors without or with unwanted directionals.
/obj/machinery/vending/Initialize()
. = ..()
wires = new(src)
if(product_slogans)
slogan_list += splittext(product_slogans, ";")
// So not all machines speak at the exact same time.
// The first time this machine says something will be at slogantime + this random value,
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
last_slogan = world.time + rand(0, slogan_delay)
if(product_ads)
ads_list += splittext(product_ads, ";")
build_inventory()
power_change()
GLOBAL_LIST_EMPTY(vending_products)
/**
* Build produdct_records from the products lists
*
* products, contraband, premium, and prices allow specifying
* products that the vending machine is to carry without manually populating
* product_records.
*/
/obj/machinery/vending/proc/build_inventory()
var/list/all_products = list(
list(products, CAT_NORMAL),
list(contraband, CAT_HIDDEN),
list(premium, CAT_COIN))
for(var/current_list in all_products)
var/category = current_list[2]
for(var/entry in current_list[1])
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry)
product.price = (entry in prices) ? prices[entry] : 0
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
product.category = category
product_records.Add(product)
GLOB.vending_products[entry] = 1
/obj/machinery/vending/Destroy()
qdel(wires)
wires = null
qdel(coin)
coin = null
for(var/datum/stored_item/vending_product/R in product_records)
qdel(R)
product_records = null
return ..()
/obj/machinery/vending/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
if(prob(50))
qdel(src)
return
if(3.0)
if(prob(25))
spawn(0)
malfunction()
return
return
else
return
/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user)
if(!emagged)
emagged = 1
to_chat(user, "You short out \the [src]'s product lock.")
return 1
/obj/machinery/vending/attackby(obj/item/weapon/W as obj, mob/user as mob)
var/obj/item/weapon/card/id/I = W.GetID()
if(I || istype(W, /obj/item/weapon/spacecash))
attack_hand(user)
return
else if(W.is_screwdriver())
panel_open = !panel_open
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
playsound(src, W.usesound, 50, 1)
if(panel_open)
wires.Interact(user)
add_overlay("[initial(icon_state)]-panel")
else
cut_overlay("[initial(icon_state)]-panel")
SStgui.update_uis(src) // Speaker switch is on the main UI, not wires UI
return
else if(istype(W, /obj/item/device/multitool) || W.is_wirecutter())
if(panel_open)
attack_hand(user)
return
else if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
user.drop_item()
W.forceMove(src)
coin = W
categories |= CAT_COIN
to_chat(user, "<span class='notice'>You insert \the [W] into \the [src].</span>")
SStgui.update_uis(src)
return
else if(W.is_wrench())
playsound(src, W.usesound, 100, 1)
if(anchored)
user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
else
user.visible_message("[user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
if(do_after(user, 20 * W.toolspeed))
if(!src) return
to_chat(user, "<span class='notice'>You [anchored? "un" : ""]secured \the [src]!</span>")
anchored = !anchored
return
else
for(var/datum/stored_item/vending_product/R in product_records)
if(istype(W, R.item_path) && (W.name == R.item_name))
stock(W, R, user)
return
..()
/**
* Receive payment with cashmoney.
*
* usr is the mob who gets the change.
*/
/obj/machinery/vending/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney, mob/user)
if(currently_vending.price > cashmoney.worth)
// This is not a status display message, since it's something the character
// themselves is meant to see BEFORE putting the money in
to_chat(usr, "[bicon(cashmoney)] <span class='warning'>That is not enough money.</span>")
return 0
if(istype(cashmoney, /obj/item/weapon/spacecash))
visible_message("<span class='info'>\The [usr] inserts some cash into \the [src].</span>")
cashmoney.worth -= currently_vending.price
if(cashmoney.worth <= 0)
usr.drop_from_inventory(cashmoney)
qdel(cashmoney)
else
cashmoney.update_icon()
// Vending machines have no idea who paid with cash
credit_purchase("(cash)")
return 1
/**
* Scan a chargecard and deduct payment from it.
*
* Takes payment for whatever is the currently_vending item. Returns 1 if
* successful, 0 if failed.
*/
/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet)
visible_message("<span class='info'>\The [usr] swipes \the [wallet] through \the [src].</span>")
playsound(src, 'sound/machines/id_swipe.ogg', 50, 1)
if(currently_vending.price > wallet.worth)
to_chat(usr, "<span class='warning'>Insufficient funds on chargecard.</span>")
return 0
else
wallet.worth -= currently_vending.price
credit_purchase("[wallet.owner_name] (chargecard)")
return 1
/**
* Scan a card and attempt to transfer payment from associated account.
*
* Takes payment for whatever is the currently_vending item. Returns 1 if
* successful, 0 if failed
*/
/obj/machinery/vending/proc/pay_with_card(obj/item/weapon/card/id/I, mob/M)
visible_message("<span class='info'>[M] swipes a card through [src].</span>")
playsound(src, 'sound/machines/id_swipe.ogg', 50, 1)
var/datum/money_account/customer_account = get_account(I.associated_account_number)
if(!customer_account)
to_chat(M, "<span class='warning'>Error: Unable to access account. Please contact technical support if problem persists.</span>")
return FALSE
if(customer_account.suspended)
to_chat(M, "<span class='warning'>Unable to access account: account suspended.</span>")
return FALSE
// Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is
// empty at high security levels
if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2)
var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2)
if(!customer_account)
to_chat(M, "<span class='warning'>Unable to access account: incorrect credentials.</span>")
return FALSE
if(currently_vending.price > customer_account.money)
to_chat(M, "<span class='warning'>Insufficient funds in account.</span>")
return FALSE
// Okay to move the money at this point
// debit money from the purchaser's account
customer_account.money -= currently_vending.price
// create entry in the purchaser's account log
var/datum/transaction/T = new()
T.target_name = "[vendor_account.owner_name] (via [name])"
T.purpose = "Purchase of [currently_vending.item_name]"
if(currently_vending.price > 0)
T.amount = "([currently_vending.price])"
else
T.amount = "[currently_vending.price]"
T.source_terminal = name
T.date = current_date_string
T.time = stationtime2text()
customer_account.transaction_log.Add(T)
// Give the vendor the money. We use the account owner name, which means
// that purchases made with stolen/borrowed card will look like the card
// owner made them
credit_purchase(customer_account.owner_name)
return 1
/**
* Add money for current purchase to the vendor account.
*
* Called after the money has already been taken from the customer.
*/
/obj/machinery/vending/proc/credit_purchase(var/target as text)
vendor_account.money += currently_vending.price
var/datum/transaction/T = new()
T.target_name = target
T.purpose = "Purchase of [currently_vending.item_name]"
T.amount = "[currently_vending.price]"
T.source_terminal = name
T.date = current_date_string
T.time = stationtime2text()
vendor_account.transaction_log.Add(T)
/obj/machinery/vending/attack_ghost(mob/user)
return attack_hand(user)
/obj/machinery/vending/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/vending/attack_hand(mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
if(seconds_electrified != 0)
if(shock(user, 100))
return
wires.Interact(user)
tgui_interact(user)
/obj/machinery/vending/ui_assets(mob/user)
return list(
get_asset_datum(/datum/asset/spritesheet/vending),
)
/obj/machinery/vending/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Vending", name)
ui.open()
/obj/machinery/vending/tgui_data(mob/user)
var/list/data = list()
var/list/listed_products = list()
data["chargesMoney"] = length(prices) > 0 ? TRUE : FALSE
for(var/key = 1 to product_records.len)
var/datum/stored_item/vending_product/I = product_records[key]
if(!(I.category & categories))
continue
listed_products.Add(list(list(
"key" = key,
"name" = I.item_name,
"price" = I.price,
"color" = I.display_color,
"isatom" = ispath(I.item_path, /atom),
"path" = replacetext(replacetext("[I.item_path]", "/obj/item/", ""), "/", "-"),
"amount" = I.get_amount()
)))
data["products"] = listed_products
if(coin)
data["coin"] = coin.name
else
data["coin"] = FALSE
if(currently_vending)
data["actively_vending"] = currently_vending.item_name
else
data["actively_vending"] = null
if(panel_open)
data["panel"] = 1
data["speaker"] = shut_up ? 0 : 1
else
data["panel"] = 0
var/mob/living/carbon/human/H
var/obj/item/weapon/card/id/C
data["guestNotice"] = "No valid ID card detected. Wear your ID, or present cash.";
data["userMoney"] = 0
data["user"] = null
if(ishuman(user))
H = user
C = H.GetIdCard()
var/obj/item/weapon/spacecash/S = H.get_active_hand()
if(istype(S))
data["userMoney"] = S.worth
data["guestNotice"] = "Accepting [S.initial_name]. You have: [S.worth]₮."
else if(istype(C))
var/datum/money_account/A = get_account(C.associated_account_number)
if(istype(A))
data["user"] = list()
data["user"]["name"] = A.owner_name
data["userMoney"] = A.money
data["user"]["job"] = (istype(C) && C.rank) ? C.rank : "No Job"
else
data["guestNotice"] = "Unlinked ID detected. Present cash to pay.";
return data
/obj/machinery/vending/tgui_act(action, params)
if(stat & (BROKEN|NOPOWER))
return
if(usr.stat || usr.restrained())
return
if(..())
return TRUE
. = TRUE
switch(action)
if("remove_coin")
if(issilicon(usr))
return FALSE
if(!coin)
to_chat(usr, "There is no coin in this machine.")
return
coin.forceMove(src.loc)
if(!usr.get_active_hand())
usr.put_in_hands(coin)
to_chat(usr, "<span class='notice'>You remove \the [coin] from \the [src].</span>")
coin = null
categories &= ~CAT_COIN
return TRUE
if("vend")
if(!vend_ready)
to_chat(usr, "<span class='warning'>[src] is busy!</span>")
return
if(!allowed(usr) && !emagged && scan_id)
to_chat(usr, "<span class='warning'>Access denied.</span>") //Unless emagged of course
flick("[icon_state]-deny",src)
playsound(src, 'sound/machines/deniedbeep.ogg', 50, 0)
return
if(panel_open)
to_chat(usr, "<span class='warning'>[src] cannot dispense products while its service panel is open!</span>")
return
var/key = text2num(params["vend"])
var/datum/stored_item/vending_product/R = product_records[key]
// This should not happen unless the request from NanoUI was bad
if(!(R.category & categories))
return
if(!can_buy(R, usr))
return
if(R.price <= 0)
vend(R, usr)
add_fingerprint(usr)
return TRUE
if(issilicon(usr)) //If the item is not free, provide feedback if a synth is trying to buy something.
to_chat(usr, "<span class='danger'>Lawed unit recognized. Lawed units cannot complete this transaction. Purchase canceled.</span>")
return
if(!ishuman(usr))
return
vend_ready = FALSE // From this point onwards, vendor is locked to performing this transaction only, until it is resolved.
var/mob/living/carbon/human/H = usr
var/obj/item/weapon/card/id/C = H.GetIdCard()
if(!vendor_account || vendor_account.suspended)
to_chat(usr, "Vendor account offline. Unable to process transaction.")
flick("[icon_state]-deny",src)
vend_ready = TRUE
return
currently_vending = R
var/paid = FALSE
if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cash = usr.get_active_hand()
paid = pay_with_cash(cash, usr)
else if(istype(usr.get_active_hand(), /obj/item/weapon/spacecash/ewallet))
var/obj/item/weapon/spacecash/ewallet/wallet = usr.get_active_hand()
paid = pay_with_ewallet(wallet)
else if(istype(C, /obj/item/weapon/card))
paid = pay_with_card(C, usr)
/*else if(usr.can_advanced_admin_interact())
to_chat(usr, "<span class='notice'>Vending object due to admin interaction.</span>")
paid = TRUE*/
else
to_chat(usr, "<span class='warning'>Payment failure: you have no ID or other method of payment.</span>")
vend_ready = TRUE
flick("[icon_state]-deny",src)
return TRUE // we set this because they shouldn't even be able to get this far, and we want the UI to update.
if(paid)
vend(currently_vending, usr) // vend will handle vend_ready
. = TRUE
else
to_chat(usr, "<span class='warning'>Payment failure: unable to process payment.</span>")
vend_ready = TRUE
if("togglevoice")
if(!panel_open)
return FALSE
shut_up = !shut_up
/obj/machinery/vending/proc/can_buy(datum/stored_item/vending_product/R, mob/user)
if(!allowed(user) && !emagged && scan_id)
to_chat(user, "<span class='warning'>Access denied.</span>") //Unless emagged of course
flick("[icon_state]-deny",src)
playsound(src, 'sound/machines/deniedbeep.ogg', 50, 0)
return FALSE
return TRUE
/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user)
if(!can_buy(R, user))
return
if(!R.amount)
to_chat(user, "<span class='warning'>[src] has ran out of that product.</span>")
vend_ready = TRUE
return
vend_ready = FALSE //One thing at a time!!
SStgui.update_uis(src)
if(R.category & CAT_COIN)
if(!coin)
to_chat(user, "<span class='notice'>You need to insert a coin to get this item.</span>")
return
if(coin.string_attached)
if(prob(50))
to_chat(user, "<span class='notice'>You successfully pull the coin out before \the [src] could swallow it.</span>")
else
to_chat(user, "<span class='notice'>You weren't able to pull the coin out fast enough, the machine ate it, string and all.</span>")
qdel(coin)
coin = null
categories &= ~CAT_COIN
else
qdel(coin)
coin = null
categories &= ~CAT_COIN
if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply)
spawn(0)
speak(vend_reply)
last_reply = world.time
use_power(vend_power_usage) //actuators and stuff
flick("[icon_state]-vend",src)
addtimer(CALLBACK(src, .proc/delayed_vend, R, user), vend_delay)
/obj/machinery/vending/proc/delayed_vend(datum/stored_item/vending_product/R, mob/user)
R.get_product(get_turf(src))
if(has_logs)
do_logging(R, user, 1)
if(prob(1))
sleep(3)
if(R.get_product(get_turf(src)))
visible_message("<span class='notice'>\The [src] clunks as it vends an additional item.</span>")
playsound(src, "sound/[vending_sound]", 100, 1, 1)
GLOB.items_sold_shift_roundstat++
vend_ready = 1
currently_vending = null
SStgui.update_uis(src)
/obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0)
if(user.GetIdCard())
var/obj/item/weapon/card/id/tempid = user.GetIdCard()
var/list/list_item = list()
if(vending)
list_item += "vend"
else
list_item += "stock"
list_item += tempid.registered_name
list_item += stationtime2text()
list_item += R.item_name
log[++log.len] = list_item
/obj/machinery/vending/proc/show_log(mob/user as mob)
if(user.GetIdCard())
var/obj/item/weapon/card/id/tempid = user.GetIdCard()
if(req_log_access in tempid.GetAccess())
var/datum/browser/popup = new(user, "vending_log", "Vending Log", 700, 500)
var/dat = ""
dat += "<center><span style='font-size:24pt'><b>[name] Vending Log</b></span></center>"
dat += "<center><span style='font-size:16pt'>Welcome [user.name]!</span></center><br>"
dat += "<span style='font-size:8pt'>Below are the recent vending logs for your vending machine.</span><br>"
for(var/i in log)
dat += json_encode(i)
dat += ";<br>"
popup.set_content(dat)
popup.open()
else
to_chat(user,"<span class='warning'>You do not have the required access to view the vending logs for this machine.</span>")
/obj/machinery/vending/verb/rotate_clockwise()
set name = "Rotate Vending Machine Clockwise"
set category = "Object"
set src in oview(1)
if (src.can_rotate == 0)
to_chat(usr, "<span class='warning'>\The [src] cannot be rotated.</span>")
return 0
if (src.anchored || usr:stat)
to_chat(usr, "It is bolted down!")
return 0
src.set_dir(turn(src.dir, 270))
return 1
/obj/machinery/vending/verb/check_logs()
set name = "Check Vending Logs"
set category = "Object"
set src in oview(1)
show_log(usr)
/**
* Add item to the machine
*
* Checks if item is vendable in this machine should be performed before
* calling. W is the item being inserted, R is the associated vending_product entry.
*/
/obj/machinery/vending/proc/stock(obj/item/weapon/W, var/datum/stored_item/vending_product/R, var/mob/user)
if(!user.unEquip(W))
return
to_chat(user, "<span class='notice'>You insert \the [W] in the product receptor.</span>")
R.add_product(W)
if(has_logs)
do_logging(R, user)
SStgui.update_uis(src)
/obj/machinery/vending/process()
if(stat & (BROKEN|NOPOWER))
return
if(!active)
return
if(seconds_electrified > 0)
seconds_electrified--
//Pitch to the people! Really sell it!
if(((last_slogan + slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5))
var/slogan = pick(slogan_list)
speak(slogan)
last_slogan = world.time
if(shoot_inventory && prob(2))
throw_item()
return
/obj/machinery/vending/proc/speak(var/message)
if(stat & NOPOWER)
return
if(!message)
return
for(var/mob/O in hearers(src, null))
O.show_message("<span class='game say'><span class='name'>\The [src]</span> beeps, \"[message]\"</span>",2)
return
/obj/machinery/vending/power_change()
..()
if(stat & BROKEN)
icon_state = "[initial(icon_state)]-broken"
else
if(!(stat & NOPOWER))
icon_state = initial(icon_state)
else
spawn(rand(0, 15))
icon_state = "[initial(icon_state)]-off"
//Oh no we're malfunctioning! Dump out some product and break.
/obj/machinery/vending/proc/malfunction()
for(var/datum/stored_item/vending_product/R in product_records)
while(R.get_amount()>0)
R.get_product(loc)
break
stat |= BROKEN
icon_state = "[initial(icon_state)]-broken"
return
//Somebody cut an important wire and now we're following a new definition of "pitch."
/obj/machinery/vending/proc/throw_item()
var/obj/throw_item = null
var/mob/living/target = locate() in view(7,src)
if(!target)
return 0
for(var/datum/stored_item/vending_product/R in product_records)
throw_item = R.get_product(loc)
if(!throw_item)
continue
break
if(!throw_item)
return 0
spawn(0)
throw_item.throw_at(target, 16, 3, src)
visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
return 1
//Actual machines are in vending_machines.dm

View File

@@ -0,0 +1,888 @@
//
//The code for machines are in vending.dm
//Only put machines here.
//
//
/*
* Vending machine types
*/
/*
/obj/machinery/vending/[vendors name here] // --vending machine template :)
name = ""
desc = ""
icon = ''
icon_state = ""
vend_delay = 15
products = list()
contraband = list()
premium = list()
*/
/*
/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink
name = "Tank Vendor"
desc = "A vendor with a wide variety of masks and gas tanks."
icon = 'icons/obj/objects.dmi'
icon_state = "dispenser"
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
productamounts = "10;10;10;5;25"
vend_delay = 0
*/
/obj/machinery/vending/boozeomat
name = "Booze-O-Mat"
desc = "A technological marvel, the ads would have you believe this is able to mix just the mixture you'd like to drink the moment you ask for one."
icon_state = "fridge_dark"
products = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
/obj/item/weapon/reagent_containers/food/drinks/glass2/carafe = 2, //VOREStation Add - Carafes and Pitchers
/obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher = 2, //VOREStation Add - Carafes and Pitchers
/obj/item/weapon/reagent_containers/food/drinks/metaglass = 10,
/obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint = 10,
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider = 15,
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/milk = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 5,
/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15,
/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 15,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 15,
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask = 5,
/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask = 5,
/obj/item/weapon/reagent_containers/food/drinks/ice = 10,
/obj/item/weapon/reagent_containers/food/drinks/tea = 15,
/obj/item/weapon/glass_extra/stick = 30,
/obj/item/weapon/glass_extra/straw = 30)
contraband = list()
vend_delay = 15
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
req_access = list(access_bar)
req_log_access = access_bar
has_logs = 1
vending_sound = "machines/vending/vending_cans.ogg"
/obj/machinery/vending/assist
products = list( /obj/item/device/assembly/prox_sensor = 5,
/obj/item/device/assembly/igniter = 3,
/obj/item/device/assembly/signaler = 4,
/obj/item/weapon/tool/wirecutters = 1,
/obj/item/weapon/cartridge/signal = 4)
contraband = list(/obj/item/device/flashlight = 5,
/obj/item/device/assembly/timer = 2)
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
/obj/machinery/vending/coffee
name = "Hot Drinks machine"
desc = "A Galaksi brand vending machine which dispenses hot drinks."
description_fluff = "The Ward-Takahashi Galaksi Samovar 55 has been reconstituting hot drinks from their powdered forms since... Well, 2555, but the design has hardly changed in a century or so."
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
icon_state = "coffee"
vend_delay = 34
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vend_power_usage = 85000 //85 kJ to heat a 250 mL cup of coffee
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,
/obj/item/weapon/reagent_containers/food/drinks/decaf = 15,
/obj/item/weapon/reagent_containers/food/drinks/tea = 25,
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25,
/obj/item/weapon/reagent_containers/food/drinks/greentea = 15,
/obj/item/weapon/reagent_containers/food/drinks/chaitea = 15)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 10)
prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 2,
/obj/item/weapon/reagent_containers/food/drinks/decaf = 3,
/obj/item/weapon/reagent_containers/food/drinks/tea = 2,
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 2,
/obj/item/weapon/reagent_containers/food/drinks/greentea = 10,
/obj/item/weapon/reagent_containers/food/drinks/chaitea = 5) // VOREStation Edit - Lowers Coffee/Hot Chocolate/Tea Prices from 3 -> 2.
vending_sound = "machines/vending/vending_coffee.ogg"
/obj/machinery/vending/snack
name = "Getmore Chocolate Corp"
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, a Centauri Provisions brand."
description_fluff = "Despite its name, the Getmore Chocolate Corporation does not produce chocolate - or any foods at all. The company exists soley to refit Ward-Takahashi's Galaksi brand vending products to accept Centauri Provisions' massive range of snackfoods, and sell them at a significant markup. Generic vendors are not authorized to vend Centauri products, and their popularity forces the market to Getmore or Get Lost."
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Get More with Getmore!;Best quality snacks from Centauri Provisions.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 12,
/obj/item/weapon/reagent_containers/food/snacks/candy/gummy = 12,
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 12,
/obj/item/weapon/reagent_containers/food/snacks/chips = 12,
/obj/item/weapon/reagent_containers/food/snacks/chips/bbq = 12,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 12,
/obj/item/weapon/reagent_containers/food/snacks/pistachios = 12,
/obj/item/weapon/reagent_containers/food/snacks/semki = 12,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 12,
/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 12,
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 12,
/obj/item/weapon/reagent_containers/food/snacks/tastybread = 12,
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 6,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 6,
/obj/item/weapon/storage/box/gum = 4,
/obj/item/clothing/mask/chewable/candy/lolli = 8,
/obj/item/weapon/storage/box/admints = 4,
/obj/item/weapon/reagent_containers/food/snacks/cb01 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb02 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb03 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb04 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb05 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb06 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb07 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb08 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb09 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb10 = 6,
/obj/item/weapon/reagent_containers/food/snacks/tuna = 2)
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,
/obj/item/weapon/reagent_containers/food/snacks/unajerky = 12)
prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,
/obj/item/weapon/reagent_containers/food/snacks/candy/gummy = 2,
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5,
/obj/item/weapon/reagent_containers/food/snacks/chips = 1,
/obj/item/weapon/reagent_containers/food/snacks/chips/bbq = 1,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 1,
/obj/item/weapon/reagent_containers/food/snacks/pistachios = 1,
/obj/item/weapon/reagent_containers/food/snacks/semki = 1,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 2,
/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 1,
/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 1,
/obj/item/weapon/reagent_containers/food/snacks/tastybread = 2,
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 4,
/obj/item/weapon/storage/box/gum = 15,
/obj/item/clothing/mask/chewable/candy/lolli = 2,
/obj/item/weapon/storage/box/admints = 5,
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 20,
/obj/item/weapon/reagent_containers/food/snacks/cb01 = 5,
/obj/item/weapon/reagent_containers/food/snacks/cb02 = 3,
/obj/item/weapon/reagent_containers/food/snacks/cb03 = 5,
/obj/item/weapon/reagent_containers/food/snacks/cb04 = 4,
/obj/item/weapon/reagent_containers/food/snacks/cb05 = 3,
/obj/item/weapon/reagent_containers/food/snacks/cb06 = 7,
/obj/item/weapon/reagent_containers/food/snacks/cb07 = 4,
/obj/item/weapon/reagent_containers/food/snacks/cb08 = 6,
/obj/item/weapon/reagent_containers/food/snacks/cb09 = 10,
/obj/item/weapon/reagent_containers/food/snacks/cb10 = 8,
/obj/item/weapon/reagent_containers/food/snacks/tuna = 23)
/obj/machinery/vending/cola
name = "Robust Softdrinks"
desc = "A softdrink vendor graciously provided by NanoTrasen's own vending division."
description_fluff = "In a genius sales move, the only vendor authorized to dispense 'outside' beverages (at temperatures lower than 30 degrees celcius) aboard NanoTrasen stations... Is NanoTrasen themselves."
icon_state = "Cola_Machine"
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in the galaxy."
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 10)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko = 5,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 6)
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2,
/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 1)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vending_sound = "machines/vending/vending_cans.ogg"
/obj/machinery/vending/fitness
name = "SweatMAX"
desc = "Fueled by your inner inadequacy!"
description_fluff = "Provided by NanoMed, SweatMAX promises solutions to all of your problems. Premium gains at premium prices. Resale of SweatMAX products is a violation of NanoTrasen guidelines."
icon_state = "fitness"
//VOREStation Edit Start
products = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 16,
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 16,
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 16,
/obj/item/weapon/reagent_containers/food/snacks/fruitbar = 16,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
/obj/item/weapon/reagent_containers/pill/diet = 8,
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal,
/obj/item/weapon/towel/random = 8,
/obj/item/toy/tennis = 4)
prices = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 3,
/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 3,
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 15,
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 1,
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
/obj/item/weapon/reagent_containers/food/snacks/fruitbar = 5,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
/obj/item/weapon/reagent_containers/pill/diet = 25,
///obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5,
/obj/item/weapon/towel/random = 20,
/obj/item/toy/tennis = 15)
//VOREStation Edit End
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake = 2) // VOREStation Add - Slurpable blobs.
/obj/machinery/vending/cart
name = "PTech"
desc = "Cartridges for PDAs."
product_slogans = "Carts to go!"
icon_state = "cart"
req_access = list(access_hop)
products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10,
/obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/science = 10,/obj/item/device/pda/heads = 10,
/obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10)
req_log_access = access_hop
has_logs = 1
/obj/machinery/vending/cigarette
name = "cigarette machine"
desc = "If you want to get cancer, might as well do it in style!"
description_fluff = "As the ease of cancer treatment progressed to the almost routine (if costly) in the 22nd century, the tobacco industry was quick to make sure smoking went back into style. Take your pick, you've got health insurance don't ya, kid?"
product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!"
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!"
vend_delay = 34
icon_state = "cigs"
products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 10,
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 10,
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 10,
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 10,
/obj/item/weapon/storage/fancy/cigarettes/menthols = 10,
/obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/rollingpapers/blunt = 10,
/obj/item/weapon/storage/chewables/tobacco = 5,
/obj/item/weapon/storage/chewables/tobacco/fine = 5,
/obj/item/weapon/storage/box/matches = 10,
/obj/item/weapon/flame/lighter/random = 4,
/obj/item/clothing/mask/smokable/ecig/util = 2,
///obj/item/clothing/mask/smokable/ecig/deluxe = 2,
/obj/item/clothing/mask/smokable/ecig/simple = 2,
/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine = 10,
/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/orange = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/mint = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/grape = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/coffee = 5,
/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico = 2,
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico = 5)
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,
/obj/item/weapon/storage/fancy/cigarettes/carcinomas = 5,
/obj/item/weapon/storage/fancy/cigarettes/professionals = 5)
prices = list(/obj/item/weapon/storage/fancy/cigarettes = 12,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 20,
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 14,
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 17,
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 22,
/obj/item/weapon/storage/fancy/cigarettes/menthols = 18,
/obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/rollingpapers/blunt = 20,
/obj/item/weapon/storage/chewables/tobacco = 10,
/obj/item/weapon/storage/chewables/tobacco/fine = 20,
/obj/item/weapon/storage/box/matches = 1,
/obj/item/weapon/flame/lighter/random = 2,
/obj/item/clothing/mask/smokable/ecig/util = 100,
///obj/item/clothing/mask/smokable/ecig/deluxe = 300,
/obj/item/clothing/mask/smokable/ecig/simple = 150,
/obj/item/weapon/reagent_containers/ecig_cartridge/med_nicotine = 10,
/obj/item/weapon/reagent_containers/ecig_cartridge/high_nicotine = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/orange = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/mint = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/watermelon = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/grape = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/lemonlime = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/coffee = 15,
/obj/item/weapon/reagent_containers/ecig_cartridge/blanknico = 15,
/obj/item/weapon/storage/box/fancy/chewables/tobacco/nico = 15)
/obj/machinery/vending/medical
name = "NanoMed Plus"
desc = "Medical drug dispenser."
description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments."
icon_state = "med"
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
req_access = list(access_medical)
products = list(/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 4,
/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4,
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,
/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,
/obj/item/weapon/reagent_containers/syringe = 12,
/obj/item/device/healthanalyzer = 5,
/obj/item/weapon/reagent_containers/glass/beaker = 4,
/obj/item/weapon/reagent_containers/dropper = 2,
/obj/item/stack/medical/advanced/bruise_pack = 6,
/obj/item/stack/medical/advanced/ointment = 6,
/obj/item/stack/medical/splint = 4,
/obj/item/weapon/storage/pill_bottle/carbon = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,
/obj/item/weapon/reagent_containers/pill/stox = 4,
/obj/item/weapon/reagent_containers/pill/antitox = 6)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
req_log_access = access_cmo
has_logs = 1
/obj/machinery/vending/phoronresearch
name = "Toximate 3000"
desc = "All the fine parts you need in one vending machine!"
products = list(/obj/item/clothing/under/rank/scientist = 6,
/obj/item/clothing/suit/bio_suit = 6,
/obj/item/clothing/head/bio_hood = 6,
/obj/item/device/transfer_valve = 6,
/obj/item/device/assembly/timer = 6,
/obj/item/device/assembly/signaler = 6,
/obj/item/device/assembly/prox_sensor = 6,
/obj/item/device/assembly/igniter = 6)
req_log_access = access_rd
has_logs = 1
/obj/machinery/vending/wallmed1
name = "NanoMed"
desc = "A wall-mounted version of the NanoMed."
description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments."
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
icon_state = "wallmed"
layer = ABOVE_WINDOW_LAYER
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/stack/medical/bruise_pack = 2,
/obj/item/stack/medical/ointment = 2,
/obj/item/weapon/reagent_containers/hypospray/autoinjector = 4,
/obj/item/device/healthanalyzer = 1)
contraband = list(/obj/item/weapon/reagent_containers/syringe/antitoxin = 4,
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,
/obj/item/weapon/reagent_containers/pill/tox = 1)
req_log_access = access_cmo
has_logs = 1
can_rotate = 0
/obj/machinery/vending/wallmed2
name = "NanoMed"
desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment."
description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments."
icon_state = "wallmed"
layer = ABOVE_WINDOW_LAYER
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5,
/obj/item/weapon/reagent_containers/syringe/antitoxin = 3,
/obj/item/stack/medical/bruise_pack = 3,
/obj/item/stack/medical/ointment =3,
/obj/item/device/healthanalyzer = 3)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3)
req_log_access = access_cmo
has_logs = 1
can_rotate = 0
/obj/machinery/vending/security
name = "SecTech"
desc = "A security equipment vendor."
description_fluff = "Security vending is kindly provided by the Lawson Arms company, Hephaestus Industries' law enforcement division."
product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
icon_state = "sec"
req_access = list(access_security)
products = list(/obj/item/weapon/handcuffs = 8,
/obj/item/weapon/grenade/flashbang = 4,
/obj/item/device/flash = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,
/obj/item/weapon/storage/box/evidence = 6)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
/obj/item/weapon/storage/box/donut = 2)
req_log_access = access_armory
has_logs = 1
/obj/machinery/vending/hydronutrients
name = "NutriMax"
desc = "A plant nutrients vendor by the NanoPastures company."
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
icon_state = "nutri_generic"
products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,
/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,
/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,
/obj/item/weapon/plantspray/pests = 20,
/obj/item/weapon/reagent_containers/syringe = 5,
/obj/item/weapon/reagent_containers/glass/beaker = 4,
/obj/item/weapon/storage/bag/plants = 5)
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,
/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
/obj/machinery/vending/hydroseeds
name = "MegaSeed Servitor"
desc = "When you need seeds fast!"
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
icon_state = "seeds_generic"
products = list(/obj/item/seeds/bananaseed = 3,
/obj/item/seeds/berryseed = 3,
/obj/item/seeds/carrotseed = 3,
/obj/item/seeds/chantermycelium = 3,
/obj/item/seeds/chiliseed = 3,
/obj/item/seeds/cornseed = 3,
/obj/item/seeds/eggplantseed = 3,
/obj/item/seeds/potatoseed = 3,
/obj/item/seeds/replicapod = 3,
/obj/item/seeds/soyaseed = 3,
/obj/item/seeds/sunflowerseed = 3,
/obj/item/seeds/tomatoseed = 3,
/obj/item/seeds/towermycelium = 3,
/obj/item/seeds/wheatseed = 3,
/obj/item/seeds/appleseed = 3,
/obj/item/seeds/poppyseed = 3,
/obj/item/seeds/sugarcaneseed = 3,
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/peanutseed = 3,
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/lavenderseed = 3,
/obj/item/seeds/limeseed = 3,
/obj/item/seeds/lemonseed = 3,
/obj/item/seeds/orangeseed = 3,
/obj/item/seeds/grassseed = 3,
/obj/item/seeds/cocoapodseed = 3,
/obj/item/seeds/plumpmycelium = 2,
/obj/item/seeds/cabbageseed = 3,
/obj/item/seeds/grapeseed = 3,
/obj/item/seeds/pumpkinseed = 3,
/obj/item/seeds/cherryseed = 3,
/obj/item/seeds/plastiseed = 3,
/obj/item/seeds/riceseed = 3)
contraband = list(/obj/item/seeds/amanitamycelium = 2,
/obj/item/seeds/glowshroom = 2,
/obj/item/seeds/libertymycelium = 2,
/obj/item/seeds/mtearseed = 2,
/obj/item/seeds/nettleseed = 2,
/obj/item/seeds/reishimycelium = 2,
/obj/item/seeds/reishimycelium = 2,
/obj/item/seeds/shandseed = 2,)
premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1)
/**
* Populate hydroseeds product_records
*
* This needs to be customized to fetch the actual names of the seeds, otherwise
* the machine would simply list "packet of seeds" times 20
*/
/obj/machinery/vending/hydroseeds/build_inventory()
var/list/all_products = list(
list(products, CAT_NORMAL),
list(contraband, CAT_HIDDEN),
list(premium, CAT_COIN))
for(var/current_list in all_products)
var/category = current_list[2]
for(var/entry in current_list[1])
var/obj/item/seeds/S = new entry(src)
var/name = S.name
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
product.price = (entry in prices) ? prices[entry] : 0
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
product.category = category
product_records.Add(product)
GLOB.vending_products[entry] = 1
/obj/machinery/vending/magivend
name = "MagiVend"
desc = "A magic vending machine."
icon_state = "MagiVend"
product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!"
vend_delay = 15
vend_reply = "Have an enchanted evening!"
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2)
/obj/machinery/vending/dinnerware
name = "Dinnerware"
desc = "A WT Galaksi brand kitchen and restaurant equipment vendor."
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
products = list(
/obj/item/weapon/reagent_containers/food/condiment/yeast = 5,
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
/obj/item/weapon/tray = 8,
/obj/item/weapon/material/kitchen/utensil/fork = 6,
/obj/item/weapon/material/knife/plastic = 6,
/obj/item/weapon/material/kitchen/utensil/spoon = 6,
/obj/item/weapon/material/knife = 3,
/obj/item/weapon/material/kitchen/rollingpin = 2,
/obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8,
/obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8,
/obj/item/weapon/glass_extra/stick = 15,
/obj/item/weapon/glass_extra/straw = 15,
/obj/item/clothing/suit/chef/classic = 2,
/obj/item/weapon/storage/bag/food = 2,
/obj/item/weapon/storage/toolbox/lunchbox = 3,
/obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
/obj/item/weapon/storage/toolbox/lunchbox/cat = 3,
/obj/item/weapon/storage/toolbox/lunchbox/nt = 3,
/obj/item/weapon/storage/toolbox/lunchbox/mars = 3,
/obj/item/weapon/storage/toolbox/lunchbox/cti = 3,
/obj/item/weapon/storage/toolbox/lunchbox/nymph = 3,
/obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3,
/obj/item/weapon/reagent_containers/cooking_container/oven = 5,
/obj/item/weapon/reagent_containers/cooking_container/fryer = 4,
/obj/item/trash/bowl = 10) //VOREStation Add
contraband = list(/obj/item/weapon/material/knife/butch = 2)
/obj/machinery/vending/sovietsoda
name = "BODA"
desc = "An old sweet water vending machine,how did this end up here?"
icon_state = "sovietsoda"
product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem."
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/boda = 30, //ADDITION 04/03/2021
/obj/item/weapon/reagent_containers/food/drinks/cans/kompot = 20) //ADDITION 04/03/2021
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/kvass = 20) //ADDITION 04/03/2021
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vending_sound = "machines/vending/vending_cans.ogg"
/obj/machinery/vending/tool
name = "YouTool"
desc = "Tools for tools."
icon_state = "tool"
//req_access = list(access_maint_tunnels) //Maintenance access
products = list(/obj/item/stack/cable_coil/random = 10,
/obj/item/weapon/tool/crowbar = 5,
/obj/item/weapon/weldingtool = 3,
/obj/item/weapon/tool/wirecutters = 5,
/obj/item/weapon/tool/wrench = 5,
/obj/item/device/analyzer = 5,
/obj/item/device/t_scanner = 5,
/obj/item/weapon/tool/screwdriver = 5,
/obj/item/device/flashlight/glowstick = 3,
/obj/item/device/flashlight/glowstick/red = 3,
/obj/item/device/flashlight/glowstick/blue = 3,
/obj/item/device/flashlight/glowstick/orange =3,
/obj/item/device/flashlight/glowstick/yellow = 3)
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,
/obj/item/clothing/gloves/fyellow = 2)
premium = list(/obj/item/clothing/gloves/yellow = 1)
req_log_access = access_ce
has_logs = 1
/obj/machinery/vending/engivend
name = "Engi-Vend"
desc = "Spare tool vending. What? Did you expect some witty description?"
icon_state = "engivend"
req_access = list(access_engine_equip)
products = list(/obj/item/device/geiger = 4,
/obj/item/clothing/glasses/meson = 2,
/obj/item/device/multitool = 4,
/obj/item/weapon/cell/high = 10,
/obj/item/weapon/airlock_electronics = 10,
/obj/item/weapon/module/power_control = 10,
/obj/item/weapon/circuitboard/airalarm = 10,
/obj/item/weapon/circuitboard/firealarm = 10,
/obj/item/weapon/circuitboard/status_display = 2,
/obj/item/weapon/circuitboard/ai_status_display = 2,
/obj/item/weapon/circuitboard/newscaster = 2,
/obj/item/weapon/circuitboard/holopad = 2,
/obj/item/weapon/circuitboard/intercom = 4,
/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4,
/obj/item/weapon/stock_parts/motor = 2,
/obj/item/weapon/stock_parts/spring = 2,
/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/circuitboard/atm,
/obj/item/weapon/circuitboard/guestpass,
/obj/item/weapon/circuitboard/keycard_auth,
/obj/item/weapon/circuitboard/photocopier,
/obj/item/weapon/circuitboard/fax,
/obj/item/weapon/circuitboard/request,
/obj/item/weapon/circuitboard/microwave,
/obj/item/weapon/circuitboard/washing,
/obj/item/weapon/circuitboard/scanner_console,
/obj/item/weapon/circuitboard/sleeper_console,
/obj/item/weapon/circuitboard/body_scanner,
/obj/item/weapon/circuitboard/sleeper,
/obj/item/weapon/circuitboard/dna_analyzer)
contraband = list(/obj/item/weapon/cell/potato = 3)
premium = list(/obj/item/weapon/storage/belt/utility = 3)
product_records = list()
req_log_access = access_ce
has_logs = 1
/obj/machinery/vending/engineering
name = "Robco Tool Maker"
desc = "Everything you need for do-it-yourself station repair."
icon_state = "engi"
req_access = list(access_engine_equip)
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,
/obj/item/clothing/under/rank/engineer = 4,
/obj/item/clothing/shoes/orange = 4,
/obj/item/clothing/head/hardhat = 4,
/obj/item/weapon/storage/belt/utility = 4,
/obj/item/clothing/glasses/meson = 4,
/obj/item/clothing/gloves/yellow = 4,
/obj/item/weapon/tool/screwdriver = 12,
/obj/item/weapon/tool/crowbar = 12,
/obj/item/weapon/tool/wirecutters = 12,
/obj/item/device/multitool = 12,
/obj/item/weapon/tool/wrench = 12,
/obj/item/device/t_scanner = 12,
/obj/item/stack/cable_coil/heavyduty = 8,
/obj/item/weapon/cell = 8,
/obj/item/weapon/weldingtool = 8,
/obj/item/clothing/head/welding = 8,
/obj/item/weapon/light/tube = 10,
/obj/item/clothing/suit/fire = 4,
/obj/item/weapon/stock_parts/scanning_module = 5,
/obj/item/weapon/stock_parts/micro_laser = 5,
/obj/item/weapon/stock_parts/matter_bin = 5,
/obj/item/weapon/stock_parts/manipulator = 5,
/obj/item/weapon/stock_parts/console_screen = 5)
req_log_access = access_ce
has_logs = 1
/obj/machinery/vending/robotics
name = "Robotech Deluxe"
desc = "All the tools you need to create your own robot army."
icon_state = "robotics"
req_access = list(access_robotics)
products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4,
/obj/item/clothing/under/rank/roboticist = 4,
/obj/item/stack/cable_coil = 4,
/obj/item/device/flash = 4,
/obj/item/weapon/cell/high = 12,
/obj/item/device/assembly/prox_sensor = 3,
/obj/item/device/assembly/signaler = 3,
/obj/item/device/healthanalyzer = 3,
/obj/item/weapon/surgical/scalpel = 2,
/obj/item/weapon/surgical/circular_saw = 2,
/obj/item/weapon/tank/anesthetic = 2,
/obj/item/clothing/mask/breath/medical = 5,
/obj/item/weapon/tool/screwdriver = 5,
/obj/item/weapon/tool/crowbar = 5)
req_log_access = access_rd
has_logs = 1
/obj/machinery/vending/giftvendor
name = "AlliCo Baubles and Confectionaries"
desc = "For that special someone!"
description_fluff = "AlliCo Ltd. is a NanoTrasen subsidiary focused on the design and licensing of 'cute' products including toys, gifts, stationary and accessories. Their range of original characters feature in all aspects of popular culture, from snacks to animated series."
icon_state = "giftvendor"
vend_delay = 15
products = list(/obj/item/weapon/storage/fancy/heartbox = 5,
/obj/item/toy/bouquet = 5,
/obj/item/toy/bouquet/fake = 4,
/obj/item/weapon/paper/card/smile = 3,
/obj/item/weapon/paper/card/heart = 3,
/obj/item/weapon/paper/card/cat = 3,
/obj/item/weapon/paper/card/flower = 3,
/obj/item/clothing/accessory/bracelet/friendship = 5,
/obj/item/toy/plushie/therapy/red = 2,
/obj/item/toy/plushie/therapy/purple = 2,
/obj/item/toy/plushie/therapy/blue = 2,
/obj/item/toy/plushie/therapy/yellow = 2,
/obj/item/toy/plushie/therapy/orange = 2,
/obj/item/toy/plushie/therapy/green = 2,
/obj/item/toy/plushie/nymph = 2,
/obj/item/toy/plushie/mouse = 2,
/obj/item/toy/plushie/kitten = 2,
/obj/item/toy/plushie/lizard = 2,
/obj/item/toy/plushie/spider = 2,
/obj/item/toy/plushie/farwa = 2,
/obj/item/toy/plushie/corgi = 1,
/obj/item/toy/plushie/octopus = 1,
/obj/item/toy/plushie/face_hugger = 1,
/obj/item/toy/plushie/carp = 1,
/obj/item/toy/plushie/deer = 1,
/obj/item/toy/plushie/tabby_cat = 1,
/obj/item/device/threadneedle = 3,
//VOREStation Add Start
/obj/item/toy/plushie/lizardplushie/kobold = 1,
/obj/item/toy/plushie/slimeplushie = 1,
/obj/item/toy/plushie/box = 1,
/obj/item/toy/plushie/borgplushie = 1,
/obj/item/toy/plushie/borgplushie/medihound = 1,
/obj/item/toy/plushie/borgplushie/scrubpuppy = 1,
/obj/item/toy/plushie/foxbear = 1,
/obj/item/toy/plushie/nukeplushie = 1,
/obj/item/toy/plushie/otter = 1,
/obj/item/toy/plushie/vox = 1,
/obj/item/toy/mistletoe = 1,
//VOREStation Add End
//YawnWider Add Start
/obj/item/toy/plushie/teshari/_yw = 1,
/obj/item/toy/plushie/teshari/w_yw = 1,
/obj/item/toy/plushie/teshari/b_yw = 1,
/obj/item/toy/plushie/teshari/y_yw = 1)
//YawnWider Add End
premium = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1,
/obj/item/weapon/storage/trinketbox = 2)
prices = list(/obj/item/weapon/storage/fancy/heartbox = 15,
/obj/item/toy/bouquet = 10,
/obj/item/toy/bouquet/fake = 3,
/obj/item/weapon/paper/card/smile = 1,
/obj/item/weapon/paper/card/heart = 1,
/obj/item/weapon/paper/card/cat = 1,
/obj/item/weapon/paper/card/flower = 1,
/obj/item/clothing/accessory/bracelet/friendship = 5,
/obj/item/toy/plushie/therapy/red = 20,
/obj/item/toy/plushie/therapy/purple = 20,
/obj/item/toy/plushie/therapy/blue = 20,
/obj/item/toy/plushie/therapy/yellow = 20,
/obj/item/toy/plushie/therapy/orange = 20,
/obj/item/toy/plushie/therapy/green = 20,
/obj/item/toy/plushie/nymph = 35,
/obj/item/toy/plushie/mouse = 35,
/obj/item/toy/plushie/kitten = 35,
/obj/item/toy/plushie/lizard = 35,
/obj/item/toy/plushie/spider = 35,
/obj/item/toy/plushie/farwa = 35,
/obj/item/toy/plushie/corgi = 50,
/obj/item/toy/plushie/octopus = 50,
/obj/item/toy/plushie/face_hugger = 50,
/obj/item/toy/plushie/carp = 50,
/obj/item/toy/plushie/deer = 50,
/obj/item/toy/plushie/tabby_cat = 50,
/obj/item/device/threadneedle = 2,
//VOREStation Add Start
/obj/item/toy/plushie/lizardplushie/kobold = 50,
/obj/item/toy/plushie/slimeplushie = 50,
/obj/item/toy/plushie/box = 50,
/obj/item/toy/plushie/borgplushie = 50,
/obj/item/toy/plushie/borgplushie/medihound = 50,
/obj/item/toy/plushie/borgplushie/scrubpuppy = 50,
/obj/item/toy/plushie/foxbear = 50,
/obj/item/toy/plushie/nukeplushie = 50,
/obj/item/toy/plushie/otter = 50,
/obj/item/toy/plushie/vox = 50,
/obj/item/toy/mistletoe = 50,
//VOREStation Add End
//YawnWider Add Start
/obj/item/toy/plushie/teshari/_yw = 150,
/obj/item/toy/plushie/teshari/w_yw = 150,
/obj/item/toy/plushie/teshari/b_yw = 150,
/obj/item/toy/plushie/teshari/y_yw = 150)
//YawnWider Add End
/obj/machinery/vending/fishing
name = "Loot Trawler"
desc = "A special vendor for fishing equipment."
product_ads = "Tired of trawling across the ocean floor? Get our loot!;Chum and rods.;Don't get baited into fishing without us!;Baby is your star-sign pisces? We'd make a perfect match.;Do not fear, plenty to catch around here.;Don't get reeled in helplessly, get your own rod today!"
icon_state = "fishvendor"
products = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 6,
/obj/item/weapon/storage/box/wormcan = 4,
/obj/item/weapon/storage/box/wormcan/sickly = 10,
/obj/item/weapon/material/fishing_net = 2,
/obj/item/glass_jar/fish = 4,
/obj/item/stack/cable_coil/random = 6)
prices = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 50,
/obj/item/weapon/storage/box/wormcan = 12,
/obj/item/weapon/storage/box/wormcan/sickly = 6,
/obj/item/weapon/material/fishing_net = 40,
/obj/item/glass_jar/fish = 10,
/obj/item/stack/cable_coil/random = 4)
premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
/obj/machinery/vending/virtual_autodrobe
name = "Virtual AutoDrobe"
desc = "A virtual vending machine for virtual avatar customization."
icon_state = "Theater"
product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
products = list(/obj/item/weapon/storage/box/syndie_kit/chameleon = 20)
/obj/machinery/vending/deathmatch
name = "Annihilation Shop (Green)"
desc = "A virtual vending machine for virtual murder equipment. This one's for green team."
products = list(/obj/item/weapon/melee/energy/sword = 5,
/obj/item/weapon/melee/energy/axe = 5,
/obj/item/weapon/melee/baton/loaded = 5,
/obj/item/weapon/gun/energy/laser = 5,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 5,
/obj/item/ammo_magazine/clip/c12g/pellet = 40,
/obj/item/ammo_magazine/clip/c12g = 50,
/obj/item/weapon/storage/box/flashbangs = 2,
/obj/item/clothing/head/helmet/swat = 5,
/obj/item/clothing/suit/armor/vest = 5,
/obj/item/clothing/head/helmet/thunderdome = 5,
/obj/item/clothing/shoes/brown = 5,
/obj/item/clothing/suit/armor/tdome/green = 5,
/obj/item/clothing/under/color/green = 5,
/obj/item/weapon/reagent_containers/pill/adminordrazine = 10,
/obj/item/weapon/tool/crowbar = 1)
/obj/machinery/vending/deathmatch/red
name = "Annihilation Shop (Red)"
desc = "A virtual vending machine for virtual murder equipment. This one's for red team."
products = list(/obj/item/weapon/melee/energy/sword = 5,
/obj/item/weapon/melee/energy/axe = 5,
/obj/item/weapon/melee/baton/loaded = 5,
/obj/item/weapon/gun/energy/laser = 5,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 5,
/obj/item/ammo_magazine/clip/c12g/pellet = 40,
/obj/item/ammo_magazine/clip/c12g = 50,
/obj/item/weapon/storage/box/flashbangs = 2,
/obj/item/clothing/head/helmet/swat = 5,
/obj/item/clothing/suit/armor/vest = 5,
/obj/item/clothing/head/helmet/thunderdome = 5,
/obj/item/clothing/shoes/brown = 5,
/obj/item/clothing/suit/armor/tdome/red = 5,
/obj/item/clothing/under/color/red = 5,
/obj/item/weapon/reagent_containers/pill/adminordrazine = 10,
/obj/item/weapon/tool/crowbar = 1)

View File

@@ -30,7 +30,7 @@
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
/obj/item/weapon/gun/energy/gun/stunrevolver
/obj/item/weapon/gun/energy/stunrevolver
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."

View File

@@ -341,20 +341,20 @@
. = ..()
reagents.add_reagent("absinthe", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
name = "Emeraldine Melon Liquor"
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor //MODIFIED ON 04/21/2021
name = "Emeraldine Melon Liqueur"
desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
icon_state = "alco-green" //Placeholder.
icon_state = "melon_liqueur"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/Initialize()
. = ..()
reagents.add_reagent("melonliquor", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao //MODIFIED ON 04/21/2021
name = "Miss Blue Curacao"
desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
icon_state = "alco-blue" //Placeholder.
icon_state = "blue_curacao"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/Initialize()
@@ -371,36 +371,6 @@
. = ..()
reagents.add_reagent("grenadine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
name = "\improper Space Cola"
desc = "Cola. in space"
icon_state = "colabottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/Initialize()
. = ..()
reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
name = "\improper Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/Initialize()
. = ..()
reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
name = "\improper Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind_bottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize()
. = ..()
reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
name = "Warlock's Velvet"
desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
@@ -421,7 +391,107 @@
. = ..()
reagents.add_reagent("unathiliquor", 100)
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
name = "Mono-No-Aware Luxury Sake"
desc = "Dry alcohol made from rice, a favorite of businessmen."
icon_state = "sakebottle"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize()
. = ..()
reagents.add_reagent("sake", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
name = "Gilthari Luxury Champagne"
desc = "For those special occassions."
icon_state = "champagne"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize()
. = ..()
reagents.add_reagent("champagne", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps
name = "Dr. Bone's Peppermint Schnapps"
desc = "A flavoured grain liqueur with a fresh, minty taste."
icon_state = "schnapps_pep"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_pep", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps
name = "Dr. Bone's Peach Schnapps"
desc = "A flavoured grain liqueur with a fruity peach taste."
icon_state = "schnapps_pea"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_pea", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps
name = "Dr. Bone's Lemonade Schnapps"
desc = "A flavoured grain liqueur with a sweetish, lemon taste."
icon_state = "schnapps_lem"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_lem", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager
name = "Schusskonig"
desc = "A complex tasting digestif. Thank god the original's trademark lapsed."
icon_state = "jager_bottle"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager/Initialize()
. = ..()
reagents.add_reagent("jager", 100)
//////////////////////////JUICES AND STUFF///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola //MODIFIED ON 04/21/2021
name = "\improper two-liter Space Cola"
desc = "Cola. In space."
icon_state = "colabottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/Initialize()
. = ..()
reagents.add_reagent("cola", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up //MODIFIED ON 04/21/2021
name = "\improper two-liter Space-Up"
desc = "Tastes like a hull breach in your mouth."
icon_state = "space-up_bottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/Initialize()
. = ..()
reagents.add_reagent("space_up", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind //MODIFIED ON 04/21/2021
name = "\improper two-liter Space Mountain Wind"
desc = "Blows right through you like a space wind."
icon_state = "space_mountain_wind_bottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize()
. = ..()
reagents.add_reagent("spacemountainwind", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb //ADDED ON 04/21/2021
name = "\improper two-liter Dr. Gibb"
desc = "A delicious mixture of 42 different flavors."
icon_state = "dr_gibb_bottle"
center_of_mass = list("x"=16, "y"=6)
/obj/item/weapon/reagent_containers/food/drinks/bottle/dr_gibb/Initialize()
. = ..()
reagents.add_reagent("dr_gibb", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
name = "Orange Juice"
@@ -507,7 +577,8 @@
. = ..()
reagents.add_reagent("lemonjuice", 100)
//Small bottles
//////////////////////////SMALL BOTTLES///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/small
volume = 50
smash_duration = 1
@@ -578,63 +649,3 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper/Initialize()
. = ..()
reagents.add_reagent("ale", 50)
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
name = "Mono-No-Aware Luxury Sake"
desc = "Dry alcohol made from rice, a favorite of businessmen."
icon_state = "sakebottle"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize()
. = ..()
reagents.add_reagent("sake", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
name = "Gilthari Luxury Champagne"
desc = "For those special occassions."
icon_state = "champagne"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize()
. = ..()
reagents.add_reagent("champagne", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps
name = "Dr. Bone's Peppermint Schnapps"
desc = "A flavoured grain liqueur with a fresh, minty taste."
icon_state = "schnapps_pep"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_pep", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps
name = "Dr. Bone's Peach Schnapps"
desc = "A flavoured grain liqueur with a fruity peach taste."
icon_state = "schnapps_pea"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/peachschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_pea", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps
name = "Dr. Bone's Lemonade Schnapps"
desc = "A flavoured grain liqueur with a sweetish, lemon taste."
icon_state = "schnapps_lem"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonadeschnapps/Initialize()
. = ..()
reagents.add_reagent("schnapps_lem", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager
name = "Schusskonig"
desc = "A complex tasting digestif. Thank god the original's trademark lapsed."
icon_state = "jager_bottle"
center_of_mass = list("x"=16, "y"=3)
/obj/item/weapon/reagent_containers/food/drinks/bottle/jager/Initialize()
. = ..()
reagents.add_reagent("jager", 100)

View File

@@ -0,0 +1,20 @@
//50-stacks as their own type was too buggy, we're doing it a different way
/obj/fiftyspawner //this doesn't need to do anything but make the stack and die so it's light
name = "50-stack spawner"
desc = "This item spawns stack of 50 of a given material."
icon = 'icons/misc/mark.dmi'
icon_state = "x4"
var/obj/item/stack/type_to_spawn = null
/obj/fiftyspawner/Initialize()
..()
var/turf/T = get_turf(src)
var/obj/structure/closet/C = locate() in T
var/obj/item/stack/M = new type_to_spawn(C || T)
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
M.update_icon() // Some stacks have different sprites depending on how full they are.
return INITIALIZE_HINT_QDEL //Bye!
/obj/fiftyspawner/rods
name = "stack of rods" //this needs to be defined for cargo
type_to_spawn = /obj/item/stack/rods

View File

@@ -0,0 +1,19 @@
/obj/fiftyspawner/titanium
name = "stack of titanium"
type_to_spawn = /obj/item/stack/material/titanium
/obj/fiftyspawner/titanium_glass
name = "stack of ti-glass"
type_to_spawn = /obj/item/stack/material/glass/titanium
/obj/fiftyspawner/plastitanium
name = "stack of plastitanium"
type_to_spawn = /obj/item/stack/material/plastitanium
/obj/fiftyspawner/plastitanium_hull
name = "stack of plastitanium"
type_to_spawn = /obj/item/stack/material/plastitanium/hull
/obj/fiftyspawner/plastitanium_glass
name = "stack of plastitanium glass"
type_to_spawn = /obj/item/stack/material/glass/plastitanium

View File

@@ -1,279 +0,0 @@
/datum/material/proc/get_recipes()
if(!recipes)
generate_recipes()
return recipes
/datum/material/proc/generate_recipes()
recipes = list()
// If is_brittle() returns true, these are only good for a single strike.
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
if(integrity>=50)
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
if(hardness>50)
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] defense wire", /obj/item/weapon/material/barbedwire, 10, time = 1 MINUTE, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
/datum/material/steel/generate_recipes()
..()
recipes += new/datum/stack_recipe_list("office chairs",list( \
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") \
))
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]")
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]")
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Removal
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Replacement
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("modular computer frames", list( \
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
))
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
/datum/material/plasteel/generate_recipes()
..()
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
/datum/material/stone/generate_recipes()
..()
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
/datum/material/stone/marble/generate_recipes()
..()
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
/datum/material/plastic/generate_recipes()
..()
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 500u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 250u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 100u
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]")
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") //CHOMP Addition
/datum/material/wood/generate_recipes()
..()
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") //VOREStation Add
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
/datum/material/wood/log/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
/datum/material/cardboard/generate_recipes()
..()
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("folders",list( \
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"), \
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"), \
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"), \
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"), \
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]"), \
))
/datum/material/snow/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
/datum/material/snowbrick/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
/datum/material/wood/sif/generate_recipes()
..()
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = TRUE)
for(var/datum/stack_recipe/r_recipe in recipes)
if(r_recipe.title == "wood floor tile")
recipes -= r_recipe
continue
if(r_recipe.title == "wooden chair")
recipes -= r_recipe
continue
/datum/material/supermatter/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
/datum/material/cloth/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
/datum/material/resin/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
/datum/material/leather/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
recipes += new/datum/stack_recipe("whip", /obj/item/weapon/material/whip, 5, time = 15 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")

View File

@@ -1,29 +0,0 @@
//In future consider cleaning up often used recipes by adding them to the general recipe list with material criteria
/datum/material/plasteel/generate_recipes()
. = ..()
// recipes += new/datum/stack_recipe("Hammer Head", /obj/item/weapon/hammer_head, 2) //CHOMPEdit - Disabled because I had to disable code/game/objects/items/weapons/material/sledgehammer_construction_ch.dm due to lots of errors
recipes += new/datum/stack_recipe_list("sofas", list( \
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
))
/datum/material/plastic/generate_recipes()
. = ..()
recipes += new/datum/stack_recipe_list("sofas", list( \
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
))
/datum/material/wood/generate_recipes() //Is a little sad we cant have lovely wooden sofa
. = ..()
recipes += new/datum/stack_recipe_list("sofas", list( \
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
))

View File

@@ -1,90 +0,0 @@
/datum/material/steel/generate_recipes()
. = ..()
recipes += new/datum/stack_recipe_list("mounted chairs", list(
new/datum/stack_recipe("mounted chair", /obj/structure/bed/chair/bay/chair, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("red mounted chair", /obj/structure/bed/chair/bay/chair/padded/red, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("brown mounted chair", /obj/structure/bed/chair/bay/chair/padded/brown, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("teal mounted chair", /obj/structure/bed/chair/bay/chair/padded/teal, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("black mounted chair", /obj/structure/bed/chair/bay/chair/padded/black, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("green mounted chair", /obj/structure/bed/chair/bay/chair/padded/green, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("purple mounted chair", /obj/structure/bed/chair/bay/chair/padded/purple, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("blue mounted chair", /obj/structure/bed/chair/bay/chair/padded/blue, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("beige mounted chair", /obj/structure/bed/chair/bay/chair/padded/beige, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("lime mounted chair", /obj/structure/bed/chair/bay/chair/padded/lime, 2, one_per_turf = 1, on_floor = 1, time = 10),
new/datum/stack_recipe("yellow mounted chair", /obj/structure/bed/chair/bay/chair/padded/yellow, 2, one_per_turf = 1, on_floor = 1, time = 10)
))
recipes += new/datum/stack_recipe_list("mounted comfy chairs", list(
new/datum/stack_recipe("mounted comfy chair", /obj/structure/bed/chair/bay/comfy, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("red mounted comfy chair", /obj/structure/bed/chair/bay/comfy/red, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("brown mounted comfy chair", /obj/structure/bed/chair/bay/comfy/brown, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("teal mounted comfy chair", /obj/structure/bed/chair/bay/comfy/teal, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("black mounted comfy chair", /obj/structure/bed/chair/bay/comfy/black, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("green mounted comfy chair", /obj/structure/bed/chair/bay/comfy/green, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("purple mounted comfy chair", /obj/structure/bed/chair/bay/comfy/purple, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("blue mounted comfy chair", /obj/structure/bed/chair/bay/comfy/blue, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("beige mounted comfy chair", /obj/structure/bed/chair/bay/comfy/beige, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("lime mounted comfy chair", /obj/structure/bed/chair/bay/comfy/lime, 3, one_per_turf = 1, on_floor = 1, time = 20),
new/datum/stack_recipe("yellow mounted comfy chair", /obj/structure/bed/chair/bay/comfy/yellow, 3, one_per_turf = 1, on_floor = 1, time = 20)
))
recipes += new/datum/stack_recipe("mounted captain's chair", /obj/structure/bed/chair/bay/comfy/captain, 4, one_per_turf = 1, on_floor = 1, time = 20)
recipes += new/datum/stack_recipe("dropship seat", /obj/structure/bed/chair/bay/shuttle, 4, one_per_turf = 1, on_floor = 1, time = 20)
recipes += new/datum/stack_recipe("small teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/smallnest, 2, one_per_turf = 1, on_floor = 1, time = 10)
recipes += new/datum/stack_recipe("large teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/bignest, 4, one_per_turf = 1, on_floor = 1, time = 20)
recipes += new/datum/stack_recipe("dance pole", /obj/structure/dancepole, 2, one_per_turf = 1, on_floor = 1, time = 20)
recipes += new/datum/stack_recipe("light switch frame", /obj/item/frame/lightswitch, 2)
recipes += new/datum/stack_recipe_list("sofas", list(
new/datum/stack_recipe("red sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("red sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("red sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("red sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brown sofa middle", /obj/structure/bed/chair/sofa/brown, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brown sofa left", /obj/structure/bed/chair/sofa/brown/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brown sofa right", /obj/structure/bed/chair/sofa/brown/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brown sofa corner", /obj/structure/bed/chair/sofa/brown/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("teal sofa middle", /obj/structure/bed/chair/sofa/teal, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("teal sofa left", /obj/structure/bed/chair/sofa/teal/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("teal sofa right", /obj/structure/bed/chair/sofa/teal/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("teal sofa corner", /obj/structure/bed/chair/sofa/teal/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("black sofa middle", /obj/structure/bed/chair/sofa/black, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("black sofa left", /obj/structure/bed/chair/sofa/black/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("black sofa right", /obj/structure/bed/chair/sofa/black/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("black sofa corner", /obj/structure/bed/chair/sofa/black/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("green sofa middle", /obj/structure/bed/chair/sofa/green, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("green sofa left", /obj/structure/bed/chair/sofa/green/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("green sofa right", /obj/structure/bed/chair/sofa/green/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("green sofa corner", /obj/structure/bed/chair/sofa/green/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("purple sofa middle", /obj/structure/bed/chair/sofa/purp, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("purple sofa left", /obj/structure/bed/chair/sofa/purp/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("purple sofa right", /obj/structure/bed/chair/sofa/purp/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("purple sofa corner", /obj/structure/bed/chair/sofa/purp/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blue sofa middle", /obj/structure/bed/chair/sofa/blue, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blue sofa left", /obj/structure/bed/chair/sofa/blue/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blue sofa right", /obj/structure/bed/chair/sofa/blue/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blue sofa corner", /obj/structure/bed/chair/sofa/blue/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("beige sofa middle", /obj/structure/bed/chair/sofa/beige, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("beige sofa left", /obj/structure/bed/chair/sofa/beige/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("beige sofa right", /obj/structure/bed/chair/sofa/beige/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("beige sofa corner", /obj/structure/bed/chair/sofa/beige/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("lime sofa middle", /obj/structure/bed/chair/sofa/lime, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("lime sofa left", /obj/structure/bed/chair/sofa/lime/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("lime sofa right", /obj/structure/bed/chair/sofa/lime/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("lime sofa corner", /obj/structure/bed/chair/sofa/lime/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("yellow sofa middle", /obj/structure/bed/chair/sofa/yellow, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("yellow sofa left", /obj/structure/bed/chair/sofa/yellow/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("yellow sofa right", /obj/structure/bed/chair/sofa/yellow/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("yellow sofa corner", /obj/structure/bed/chair/sofa/yellow/corner, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("orange sofa middle", /obj/structure/bed/chair/sofa/orange, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("orange sofa left", /obj/structure/bed/chair/sofa/orange/left, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("orange sofa right", /obj/structure/bed/chair/sofa/orange/right, 1, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("orange sofa corner", /obj/structure/bed/chair/sofa/orange/corner, 1, one_per_turf = 1, on_floor = 1), \
))
/datum/material/durasteel/generate_recipes()
. = ..()
recipes += new/datum/stack_recipe("durasteel fishing rod", /obj/item/weapon/material/fishing_rod/modern/strong, 2)
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 30)
/datum/material/plastitanium/generate_recipes()
. = ..()
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 20)

View File

@@ -1,565 +0,0 @@
// Stacked resources. They use a material datum for a lot of inherited values.
// If you're adding something here, make sure to add it to fifty_spawner_mats.dm as well
/obj/item/stack/material
force = 5.0
throwforce = 5
w_class = ITEMSIZE_NORMAL
throw_speed = 3
throw_range = 3
center_of_mass = null
max_amount = 50
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
var/default_type = DEFAULT_WALL_MATERIAL
var/datum/material/material
var/perunit = SHEET_MATERIAL_AMOUNT
var/apply_colour //temp pending icon rewrite
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
/obj/item/stack/material/Initialize()
. = ..()
randpixel_xy()
if(!default_type)
default_type = DEFAULT_WALL_MATERIAL
material = get_material_by_name("[default_type]")
if(!material)
return INITIALIZE_HINT_QDEL
recipes = material.get_recipes()
stacktype = material.stack_type
if(islist(material.stack_origin_tech))
origin_tech = material.stack_origin_tech.Copy()
if(apply_colour)
color = material.icon_colour
if(!material.conductive)
flags |= NOCONDUCT
matter = material.get_matter()
update_strings()
/obj/item/stack/material/get_material()
return material
/obj/item/stack/material/proc/update_strings()
// Update from material datum.
singular_name = material.sheet_singular_name
if(amount>1)
name = "[material.use_name] [material.sheet_plural_name]"
desc = "A stack of [material.use_name] [material.sheet_plural_name]."
gender = PLURAL
else
name = "[material.use_name] [material.sheet_singular_name]"
desc = "A [material.sheet_singular_name] of [material.use_name]."
gender = NEUTER
/obj/item/stack/material/use(var/used)
. = ..()
update_strings()
return
/obj/item/stack/material/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
var/obj/item/stack/material/M = S
if(!istype(M) || material.name != M.material.name)
return 0
var/transfer = ..(S,tamount,1)
if(src) update_strings()
if(M) M.update_strings()
return transfer
/obj/item/stack/material/attack_self(var/mob/user)
if(!material.build_windows(user, src))
..()
/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user)
if(istype(W,/obj/item/stack/cable_coil))
material.build_wired_product(user, W, src)
return
else if(istype(W, /obj/item/stack/rods))
material.build_rod_product(user, W, src)
return
return ..()
//VOREStation Add
/obj/item/stack/material/attack(mob/living/M as mob, mob/living/user as mob)
if(M.handle_eat_minerals(src, user))
return
..()
/obj/item/stack/material/attack_generic(var/mob/living/user) //Allow adminbussed mobs to eat ore if they click it while NOT on help intent.
if(user.handle_eat_minerals(src))
return
..()
//VOREStation Add End
/obj/item/stack/material/iron
name = "iron"
icon_state = "sheet-ingot"
default_type = "iron"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/lead
name = "lead"
icon_state = "sheet-ingot"
default_type = "lead"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/sandstone
name = "sandstone brick"
icon_state = "sheet-sandstone"
default_type = "sandstone"
no_variants = FALSE
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
/obj/item/stack/material/marble
name = "marble brick"
icon_state = "sheet-marble"
default_type = "marble"
no_variants = FALSE
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
/obj/item/stack/material/diamond
name = "diamond"
icon_state = "sheet-diamond"
default_type = "diamond"
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/stack/material/uranium
name = "uranium"
icon_state = "sheet-uranium"
default_type = "uranium"
no_variants = FALSE
/obj/item/stack/material/phoron
name = "solid phoron"
icon_state = "sheet-phoron"
default_type = "phoron"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/stack/material/plastic
name = "plastic"
icon_state = "sheet-plastic"
default_type = "plastic"
no_variants = FALSE
/obj/item/stack/material/graphite
name = "graphite"
icon_state = "sheet-puck"
default_type = MAT_GRAPHITE
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/gold
name = "gold"
icon_state = "sheet-ingot"
default_type = "gold"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/silver
name = "silver"
icon_state = "sheet-ingot"
default_type = "silver"
no_variants = FALSE
apply_colour = TRUE
//Valuable resource, cargo can sell it.
/obj/item/stack/material/platinum
name = "platinum"
icon_state = "sheet-adamantine"
default_type = "platinum"
no_variants = FALSE
apply_colour = TRUE
//Extremely valuable to Research.
/obj/item/stack/material/mhydrogen
name = "metallic hydrogen"
icon_state = "sheet-mythril"
default_type = "mhydrogen"
no_variants = FALSE
//Fuel for MRSPACMAN generator.
/obj/item/stack/material/tritium
name = "tritium"
icon_state = "sheet-puck"
default_type = "tritium"
apply_colour = TRUE
no_variants = FALSE
/obj/item/stack/material/osmium
name = "osmium"
icon_state = "sheet-ingot"
default_type = "osmium"
apply_colour = 1
no_variants = FALSE
//R-UST port
// Fusion fuel.
/obj/item/stack/material/deuterium
name = "deuterium"
icon_state = "sheet-puck"
default_type = "deuterium"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/steel
name = DEFAULT_WALL_MATERIAL
icon_state = "sheet-refined"
default_type = DEFAULT_WALL_MATERIAL
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/steel/hull
name = MAT_STEELHULL
default_type = MAT_STEELHULL
/obj/item/stack/material/plasteel
name = "plasteel"
icon_state = "sheet-reinforced"
default_type = "plasteel"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/plasteel/hull
name = MAT_PLASTEELHULL
default_type = MAT_PLASTEELHULL
/obj/item/stack/material/durasteel
name = "durasteel"
icon_state = "sheet-reinforced"
item_state = "sheet-metal"
default_type = "durasteel"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/durasteel/hull
name = MAT_DURASTEELHULL
/obj/item/stack/material/titanium
name = MAT_TITANIUM
icon_state = "sheet-refined"
apply_colour = TRUE
item_state = "sheet-silver"
default_type = MAT_TITANIUM
no_variants = FALSE
/obj/item/stack/material/titanium/hull
name = MAT_TITANIUMHULL
default_type = MAT_TITANIUMHULL
// Particle Smasher and Exotic material.
/obj/item/stack/material/verdantium
name = MAT_VERDANTIUM
icon_state = "sheet-wavy"
item_state = "mhydrogen"
default_type = MAT_VERDANTIUM
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/morphium
name = MAT_MORPHIUM
icon_state = "sheet-wavy"
item_state = "mhydrogen"
default_type = MAT_MORPHIUM
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/morphium/hull
name = MAT_MORPHIUMHULL
default_type = MAT_MORPHIUMHULL
/obj/item/stack/material/valhollide
name = MAT_VALHOLLIDE
icon_state = "sheet-gem"
item_state = "diamond"
default_type = MAT_VALHOLLIDE
no_variants = FALSE
apply_colour = TRUE
// Forged in the equivalent of Hell, one piece at a time.
/obj/item/stack/material/supermatter
name = MAT_SUPERMATTER
icon_state = "sheet-super"
item_state = "diamond"
default_type = MAT_SUPERMATTER
apply_colour = TRUE
/obj/item/stack/material/supermatter/proc/update_mass() // Due to how dangerous they can be, the item will get heavier and larger the more are in the stack.
slowdown = amount / 10
w_class = min(5, round(amount / 10) + 1)
throw_range = round(amount / 7) + 1
/obj/item/stack/material/supermatter/use(var/used)
. = ..()
update_mass()
return
/obj/item/stack/material/supermatter/attack_hand(mob/user)
. = ..()
update_mass()
SSradiation.radiate(src, 5 + amount)
var/mob/living/M = user
if(!istype(M))
return
var/burn_user = TRUE
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
var/obj/item/clothing/gloves/G = H.gloves
if(istype(G) && ((G.flags & THICKMATERIAL && prob(70)) || istype(G, /obj/item/clothing/gloves/gauntlets)))
burn_user = FALSE
if(burn_user)
H.visible_message("<span class='danger'>\The [src] flashes as it scorches [H]'s hands!</span>")
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon="Supermatter Chunk")
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon="Supermatter Chunk")
H.drop_from_inventory(src, get_turf(H))
return
if(istype(user, /mob/living/silicon/robot))
burn_user = FALSE
if(burn_user)
M.apply_damage(amount, BURN, null, used_weapon="Supermatter Chunk")
/obj/item/stack/material/supermatter/ex_act(severity) // An incredibly hard to manufacture material, SM chunks are unstable by their 'stabilized' nature.
if(prob((4 / severity) * 20))
SSradiation.radiate(get_turf(src), amount * 4)
explosion(get_turf(src),round(amount / 12) , round(amount / 6), round(amount / 3), round(amount / 25))
qdel(src)
return
SSradiation.radiate(get_turf(src), amount * 2)
..()
/obj/item/stack/material/wood
name = "wooden plank"
icon_state = "sheet-wood"
default_type = MAT_WOOD
strict_color_stacking = TRUE
apply_colour = 1
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'
no_variants = FALSE
/obj/item/stack/material/wood/sif
name = "alien wooden plank"
color = "#0099cc"
default_type = MAT_SIFWOOD
/obj/item/stack/material/log
name = "log"
icon_state = "sheet-log"
default_type = MAT_LOG
no_variants = FALSE
color = "#824B28"
max_amount = 25
w_class = ITEMSIZE_HUGE
description_info = "Use inhand to craft things, or use a sharp and edged object on this to convert it into two wooden planks."
var/plank_type = /obj/item/stack/material/wood
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'
/obj/item/stack/material/log/sif
name = "alien log"
default_type = MAT_SIFLOG
color = "#0099cc"
plank_type = /obj/item/stack/material/wood/sif
/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
if(!istype(W) || W.force <= 0)
return ..()
if(W.sharp && W.edge)
var/time = (3 SECONDS / max(W.force / 10, 1)) * W.toolspeed
user.setClickCooldown(time)
if(do_after(user, time, src) && use(1))
to_chat(user, "<span class='notice'>You cut up a log into planks.</span>")
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
var/obj/item/stack/material/wood/existing_wood = null
for(var/obj/item/stack/material/wood/M in user.loc)
if(M.material.name == src.material.name)
existing_wood = M
break
var/obj/item/stack/material/wood/new_wood = new plank_type(user.loc)
new_wood.amount = 2
if(existing_wood && new_wood.transfer_to(existing_wood))
to_chat(user, "<span class='notice'>You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.</span>")
else
return ..()
/obj/item/stack/material/cloth
name = "cloth"
icon_state = "sheet-cloth"
default_type = "cloth"
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/stack/material/cloth/diyaab
color = "#c6ccf0"
/obj/item/stack/material/resin
name = "resin"
icon_state = "sheet-resin"
default_type = "resin"
no_variants = TRUE
apply_colour = TRUE
pass_color = TRUE
strict_color_stacking = TRUE
/obj/item/stack/material/cardboard
name = "cardboard"
icon_state = "sheet-card"
default_type = "cardboard"
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/cardboardbox.ogg'
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
/obj/item/stack/material/snow
name = "snow"
desc = "The temptation to build a snowman rises."
icon_state = "sheet-snow"
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
default_type = "snow"
/obj/item/stack/material/snowbrick
name = "snow brick"
desc = "For all of your igloo building needs."
icon_state = "sheet-snowbrick"
default_type = "packed snow"
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/stack/material/leather
name = "leather"
desc = "The by-product of mob grinding."
icon_state = "sheet-leather"
default_type = MAT_LEATHER
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
/obj/item/stack/material/chitin
name = "chitin"
desc = "The by-product of mob grinding."
icon_state = "chitin"
default_type = MAT_CHITIN
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
/obj/item/stack/material/glass
name = "glass"
icon_state = "sheet-transparent"
default_type = "glass"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
apply_colour = TRUE
/obj/item/stack/material/glass/reinforced
name = "reinforced glass"
icon_state = "sheet-rtransparent"
default_type = "rglass"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/glass/phoronglass
name = "borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
singular_name = "borosilicate glass sheet"
icon_state = "sheet-transparent"
default_type = "borosilicate glass"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/glass/phoronrglass
name = "reinforced borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
singular_name = "reinforced borosilicate glass sheet"
icon_state = "sheet-rtransparent"
default_type = "reinforced borosilicate glass"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/bronze
name = "bronze"
icon_state = "sheet-ingot"
singular_name = "bronze ingot"
default_type = "bronze"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/tin
name = "tin"
icon_state = "sheet-ingot"
singular_name = "tin ingot"
default_type = "tin"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/copper
name = "copper"
icon_state = "sheet-ingot"
singular_name = "copper ingot"
default_type = "copper"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/painite
name = "painite"
icon_state = "sheet-gem"
singular_name = "painite gem"
default_type = "painite"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/void_opal
name = "void opal"
icon_state = "sheet-void_opal"
singular_name = "void opal"
default_type = "void opal"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/quartz
name = "quartz"
icon_state = "sheet-gem"
singular_name = "quartz gem"
default_type = "quartz"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/aluminium
name = "aluminium"
icon_state = "sheet-ingot"
singular_name = "aluminium ingot"
default_type = "aluminium"
apply_colour = 1
no_variants = FALSE

View File

@@ -1,66 +0,0 @@
/obj/item/stack/material/titanium
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-titanium"
no_variants = FALSE
/obj/fiftyspawner/titanium
name = "stack of titanium"
type_to_spawn = /obj/item/stack/material/titanium
/obj/item/stack/material/glass/titanium
name = "ti-glass sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-titaniumglass"
item_state = "sheet-silver"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
default_type = MAT_TITANIUMGLASS
/obj/fiftyspawner/titanium_glass
name = "stack of ti-glass"
type_to_spawn = /obj/item/stack/material/glass/titanium
/obj/item/stack/material/plastitanium
name = "plastitanium sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_PLASTITANIUM
/obj/fiftyspawner/plastitanium
name = "stack of plastitanium"
type_to_spawn = /obj/item/stack/material/plastitanium
/obj/item/stack/material/plastitanium/hull
name = "plastitanium hull sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_PLASTITANIUMHULL
/obj/fiftyspawner/plastitanium_hull
name = "stack of plastitanium"
type_to_spawn = /obj/item/stack/material/plastitanium/hull
/obj/item/stack/material/glass/plastitanium
name = "plastitanium glass sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitaniumglass"
item_state = "sheet-silver"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
default_type = MAT_PLASTITANIUMGLASS
/obj/fiftyspawner/plastitanium_glass
name = "stack of plastitanium glass"
type_to_spawn = /obj/item/stack/material/glass/plastitanium
/obj/item/stack/material/gold/hull
name = "gold hull sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_GOLDHULL

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,284 @@
/*
MATERIAL DATUMS
This data is used by various parts of the game for basic physical properties and behaviors
of the metals/materials used for constructing many objects. Each var is commented and should be pretty
self-explanatory but the various object types may have their own documentation. ~Z
PATHS THAT USE DATUMS
turf/simulated/wall
obj/item/weapon/material
obj/structure/barricade
obj/item/stack/material
obj/structure/table
VALID ICONS
WALLS
stone
metal
solid
resin
ONLY WALLS
cult
hull
curvy
jaggy
brick
REINFORCEMENT
reinf_over
reinf_mesh
reinf_cult
reinf_metal
DOORS
stone
metal
resin
wood
*/
// Assoc list containing all material datums indexed by name.
var/list/name_to_material
//Returns the material the object is made of, if applicable.
//Will we ever need to return more than one value here? Or should we just return the "dominant" material.
/obj/proc/get_material()
return null
//mostly for convenience
/obj/proc/get_material_name()
var/datum/material/material = get_material()
if(material)
return material.name
// Builds the datum list above.
/proc/populate_material_list(force_remake=0)
if(name_to_material && !force_remake) return // Already set up!
name_to_material = list()
for(var/type in subtypesof(/datum/material))
var/datum/material/new_mineral = new type
if(!new_mineral.name)
continue
name_to_material[lowertext(new_mineral.name)] = new_mineral
return 1
// Safety proc to make sure the material list exists before trying to grab from it.
/proc/get_material_by_name(name)
if(!name_to_material)
populate_material_list()
return name_to_material[name]
/proc/material_display_name(name)
var/datum/material/material = get_material_by_name(name)
if(material)
return material.display_name
return null
// Material definition and procs follow.
/datum/material
var/name // Unique name for use in indexing the list.
var/display_name // Prettier name for display.
var/use_name
var/flags = 0 // Various status modifiers.
var/sheet_singular_name = "sheet"
var/sheet_plural_name = "sheets"
var/is_fusion_fuel
// Shards/tables/structures
var/shard_type = SHARD_SHRAPNEL // Path of debris object.
var/shard_icon // Related to above.
var/shard_can_repair = 1 // Can shards be turned into sheets with a welder?
var/list/recipes // Holder for all recipes usable with a sheet of this material.
var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding.
// Icons
var/icon_colour // Colour applied to products of this material.
var/icon_base = "metal" // Wall and table base icon tag. See header.
var/door_icon_base = "metal" // Door base icon tag. See header.
var/icon_reinf = "reinf_metal" // Overlay used
var/list/stack_origin_tech = list(TECH_MATERIAL = 1) // Research level for stacks.
var/pass_stack_colors = FALSE // Will stacks made from this material pass their colors onto objects?
// Attributes
var/cut_delay = 0 // Delay in ticks when cutting through this wall.
var/radioactivity // Radiation var. Used in wall and object processing to irradiate surroundings.
var/ignition_point // K, point at which the material catches on fire.
var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this
var/integrity = 150 // General-use HP value for products.
var/protectiveness = 10 // How well this material works as armor. Higher numbers are better, diminishing returns applies.
var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors.
var/reflectivity = 0 // How reflective to light is the material? Currently used for laser reflection and defense.
var/explosion_resistance = 5 // Only used by walls currently.
var/negation = 0 // Objects that respect this will randomly absorb impacts with this var as the percent chance.
var/spatial_instability = 0 // Objects that have trouble staying in the same physical space by sheer laws of nature have this. Percent for respecting items to cause teleportation.
var/conductive = 1 // Objects without this var add NOCONDUCT to flags on spawn.
var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10.
var/list/composite_material // If set, object matter var will be a list containing these values.
var/luminescence
var/radiation_resistance = 0 // Radiation resistance, which is added on top of a material's weight for blocking radiation. Needed to make lead special without superrobust weapons.
var/supply_conversion_value // Supply points per sheet that this material sells for.
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
var/created_fulltile_window
var/rod_product
var/wire_product
var/list/window_options = list()
// Damage values.
var/hardness = 60 // Prob of wall destruction by hulk, used for edge damage in weapons. Also used for bullet protection in armor.
var/weight = 20 // Determines blunt damage/throwforce for weapons.
// Noise when someone is faceplanted onto a table made of this material.
var/tableslam_noise = 'sound/weapons/tablehit1.ogg'
// Noise made when a simple door made of this material opens or closes.
var/dooropen_noise = 'sound/effects/stonedoor_openclose.ogg'
// Path to resulting stacktype. Todo remove need for this.
var/stack_type
// Wallrot crumble message.
var/rotting_touch_message = "crumbles under your touch"
// Placeholders for light tiles and rglass.
/datum/material/proc/build_rod_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
if(!rod_product)
to_chat(user, "<span class='warning'>You cannot make anything out of \the [target_stack]</span>")
return
if(used_stack.get_amount() < 1 || target_stack.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one rod and one sheet of [display_name] to make anything useful.</span>")
return
used_stack.use(1)
target_stack.use(1)
var/obj/item/stack/S = new rod_product(get_turf(user))
S.add_fingerprint(user)
S.add_to_stacks(user)
/datum/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
if(!wire_product)
to_chat(user, "<span class='warning'>You cannot make anything out of \the [target_stack]</span>")
return
if(used_stack.get_amount() < 5 || target_stack.get_amount() < 1)
to_chat(user, "<span class='warning'>You need five wires and one sheet of [display_name] to make anything useful.</span>")
return
used_stack.use(5)
target_stack.use(1)
to_chat(user, "<span class='notice'>You attach wire to the [name].</span>")
var/obj/item/product = new wire_product(get_turf(user))
user.put_in_hands(product)
// Make sure we have a display name and shard icon even if they aren't explicitly set.
/datum/material/New()
..()
if(!display_name)
display_name = name
if(!use_name)
use_name = display_name
if(!shard_icon)
shard_icon = shard_type
// This is a placeholder for proper integration of windows/windoors into the system.
/datum/material/proc/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
return 0
// Weapons handle applying a divisor for this value locally.
/datum/material/proc/get_blunt_damage()
return weight //todo
// Return the matter comprising this material.
/datum/material/proc/get_matter()
var/list/temp_matter = list()
if(islist(composite_material))
for(var/material_string in composite_material)
temp_matter[material_string] = composite_material[material_string]
else if(SHEET_MATERIAL_AMOUNT)
temp_matter[name] = SHEET_MATERIAL_AMOUNT
return temp_matter
// As above.
/datum/material/proc/get_edge_damage()
return hardness //todo
// Snowflakey, only checked for alien doors at the moment.
/datum/material/proc/can_open_material_door(var/mob/living/user)
return 1
// Currently used for weapons and objects made of uranium to irradiate things.
/datum/material/proc/products_need_process()
return (radioactivity>0) //todo
// Used by walls when qdel()ing to avoid neighbor merging.
/datum/material/placeholder
name = "placeholder"
// Places a girder object when a wall is dismantled, also applies reinforced material.
/datum/material/proc/place_dismantled_girder(var/turf/target, var/datum/material/reinf_material, var/datum/material/girder_material)
var/obj/structure/girder/G = new(target)
if(reinf_material)
G.reinf_material = reinf_material
G.reinforce_girder()
if(girder_material)
if(istype(girder_material, /datum/material))
girder_material = girder_material.name
G.set_material(girder_material)
// General wall debris product placement.
// Not particularly necessary aside from snowflakey cult girders.
/datum/material/proc/place_dismantled_product(var/turf/target)
place_sheet(target)
// Debris product. Used ALL THE TIME.
/datum/material/proc/place_sheet(var/turf/target)
if(stack_type)
return new stack_type(target)
// As above.
/datum/material/proc/place_shard(var/turf/target)
if(shard_type)
return new /obj/item/weapon/material/shard(target, src.name)
// Used by walls and weapons to determine if they break or not.
/datum/material/proc/is_brittle()
return !!(flags & MATERIAL_BRITTLE)
/datum/material/proc/combustion_effect(var/turf/T, var/temperature)
return
// Used by walls to do on-touch things, after checking for crumbling and open-ability.
/datum/material/proc/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
return
/datum/material/proc/get_recipes()
if(!recipes)
generate_recipes()
return recipes
/datum/material/proc/generate_recipes()
// If is_brittle() returns true, these are only good for a single strike.
recipes = list(
new /datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] armor plate insert", /obj/item/weapon/material/armor_plating/insert, 2, time = 40, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
)
if(integrity>=50)
recipes += list(
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
)
if(hardness>50)
recipes += list(
new /datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] defense wire", /obj/item/weapon/material/barbedwire, 10, time = 1 MINUTE, one_per_turf = 0, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
)

View File

@@ -0,0 +1,9 @@
/obj/item/stack/material/attack(mob/living/M as mob, mob/living/user as mob)
if(M.handle_eat_minerals(src, user))
return
..()
/obj/item/stack/material/attack_generic(var/mob/living/user) //Allow adminbussed mobs to eat ore if they click it while NOT on help intent.
if(user.handle_eat_minerals(src))
return
..()

View File

@@ -0,0 +1,36 @@
// Adminspawn only, do not let anyone get this.
/datum/material/alienalloy
name = "alienalloy"
display_name = "durable alloy"
stack_type = null
flags = MATERIAL_UNMELTABLE
icon_colour = "#6C7364"
integrity = 1200
melting_point = 6000 // Hull plating.
explosion_resistance = 200 // Hull plating.
hardness = 500
weight = 500
protectiveness = 80 // 80%
/datum/material/alienalloy/elevatorium
name = "elevatorium"
display_name = "elevator panelling"
icon_colour = "#666666"
/datum/material/alienalloy/dungeonium
name = "dungeonium"
display_name = "ultra-durable"
icon_base = "dungeon"
icon_colour = "#FFFFFF"
/datum/material/alienalloy/bedrock
name = "bedrock"
display_name = "impassable rock"
icon_base = "rock"
icon_colour = "#FFFFFF"
/datum/material/alienalloy/alium
name = "alium"
display_name = "alien"
icon_base = "alien"
icon_colour = "#FFFFFF"

View File

@@ -0,0 +1,23 @@
/datum/material/cult
name = "cult"
display_name = "disturbing stone"
icon_base = "cult"
icon_colour = "#402821"
icon_reinf = "reinf_cult"
shard_type = SHARD_STONE_PIECE
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
conductive = 0
/datum/material/cult/place_dismantled_girder(var/turf/target)
new /obj/structure/girder/cult(target, "cult")
/datum/material/cult/place_dismantled_product(var/turf/target)
new /obj/effect/decal/cleanable/blood(target)
/datum/material/cult/reinf
name = "cult2"
display_name = "human remains"
/datum/material/cult/reinf/place_dismantled_product(var/turf/target)
new /obj/effect/decal/remains/human(target)

View File

@@ -0,0 +1,154 @@
/datum/material/phoron
name = "phoron"
stack_type = /obj/item/stack/material/phoron
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
icon_base = "stone"
icon_colour = "#FC2BC5"
shard_type = SHARD_SHARD
hardness = 30
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2)
door_icon_base = "stone"
sheet_singular_name = "crystal"
sheet_plural_name = "crystals"
supply_conversion_value = 5
/*
// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately.
/datum/material/phoron/combustion_effect(var/turf/T, var/temperature, var/effect_multiplier)
if(isnull(ignition_point))
return 0
if(temperature < ignition_point)
return 0
var/totalPhoron = 0
for(var/turf/simulated/floor/target_tile in range(2,T))
var/phoronToDeduce = (temperature/30) * effect_multiplier
totalPhoron += phoronToDeduce
target_tile.assume_gas("phoron", phoronToDeduce, 200+T0C)
spawn (0)
target_tile.hotspot_expose(temperature, 400)
return round(totalPhoron/100)
*/
/datum/material/diamond
name = "diamond"
stack_type = /obj/item/stack/material/diamond
flags = MATERIAL_UNMELTABLE
cut_delay = 60
icon_colour = "#00FFE1"
opacity = 0.4
reflectivity = 0.6
conductive = 0
conductivity = 1
shard_type = SHARD_SHARD
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 100
stack_origin_tech = list(TECH_MATERIAL = 6)
supply_conversion_value = 8
/datum/material/quartz
name = "quartz"
display_name = "quartz"
use_name = "quartz"
icon_colour = "#e6d7df"
stack_type = /obj/item/stack/material/quartz
tableslam_noise = 'sound/effects/Glasshit.ogg'
sheet_singular_name = "crystal"
sheet_plural_name = "crystals"
supply_conversion_value = 4
/datum/material/painite
name = "painite"
display_name = "painite"
use_name = "painite"
icon_colour = "#6b4947"
stack_type = /obj/item/stack/material/painite
flags = MATERIAL_UNMELTABLE
reflectivity = 0.3
tableslam_noise = 'sound/effects/Glasshit.ogg'
sheet_singular_name = "gem"
sheet_plural_name = "gems"
supply_conversion_value = 4
/datum/material/void_opal
name = "void opal"
display_name = "void opal"
use_name = "void opal"
icon_colour = "#0f0f0f"
stack_type = /obj/item/stack/material/void_opal
flags = MATERIAL_UNMELTABLE
cut_delay = 60
reflectivity = 0
conductivity = 1
shard_type = SHARD_SHARD
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 100
stack_origin_tech = list(TECH_ARCANE = 1, TECH_MATERIAL = 6)
sheet_singular_name = "gem"
sheet_plural_name = "gems"
supply_conversion_value = 30 // These are hilariously rare.
// Particle Smasher and other exotic materials.
/datum/material/valhollide
name = MAT_VALHOLLIDE
stack_type = /obj/item/stack/material/valhollide
icon_base = "stone"
door_icon_base = "stone"
icon_reinf = "reinf_mesh"
icon_colour = "##FFF3B2"
protectiveness = 30
integrity = 240
weight = 30
hardness = 45
negation = 2
conductive = 0
conductivity = 5
reflectivity = 0.5
radiation_resistance = 20
spatial_instability = 30
stack_origin_tech = list(TECH_MATERIAL = 7, TECH_PHORON = 5, TECH_BLUESPACE = 5)
sheet_singular_name = "gem"
sheet_plural_name = "gems"
/datum/material/verdantium
name = MAT_VERDANTIUM
stack_type = /obj/item/stack/material/verdantium
icon_base = "metal"
door_icon_base = "metal"
icon_reinf = "reinf_metal"
icon_colour = "#4FE95A"
integrity = 80
protectiveness = 15
weight = 15
hardness = 30
shard_type = SHARD_SHARD
negation = 15
conductivity = 60
reflectivity = 0.3
radiation_resistance = 5
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 5, TECH_BIO = 4)
sheet_singular_name = "sheet"
sheet_plural_name = "sheets"
supply_conversion_value = 8
/datum/material/morphium
name = MAT_MORPHIUM
stack_type = /obj/item/stack/material/morphium
icon_base = "metal"
door_icon_base = "metal"
icon_colour = "#37115A"
icon_reinf = "reinf_metal"
protectiveness = 60
integrity = 300
conductive = 0
conductivity = 1.5
hardness = 90
shard_type = SHARD_SHARD
weight = 30
negation = 25
explosion_resistance = 85
reflectivity = 0.2
radiation_resistance = 10
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_ILLEGAL = 1, TECH_PHORON = 4, TECH_BLUESPACE = 4, TECH_ARCANE = 1)
supply_conversion_value = 13

View File

@@ -0,0 +1,143 @@
/datum/material/glass
name = "glass"
stack_type = /obj/item/stack/material/glass
flags = MATERIAL_BRITTLE
icon_colour = "#00E1FF"
opacity = 0.3
integrity = 100
shard_type = SHARD_SHARD
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 30
weight = 15
protectiveness = 0 // 0%
conductive = 0
conductivity = 1 // Glass shards don't conduct.
door_icon_base = "stone"
destruction_desc = "shatters"
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
created_window = /obj/structure/window/basic
created_fulltile_window = /obj/structure/window/basic/full
rod_product = /obj/item/stack/material/glass/reinforced
/datum/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
if(!user || !used_stack || !created_window || !created_fulltile_window || !window_options.len)
return 0
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>This task is too complex for your clumsy hands.</span>")
return 1
var/turf/T = user.loc
if(!istype(T))
to_chat(user, "<span class='warning'>You must be standing on open flooring to build a window.</span>")
return 1
var/title = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)"
var/choice = input(title, "What would you like to construct?") as null|anything in window_options
if(!choice || !used_stack || !user || used_stack.loc != user || user.stat || user.loc != T)
return 1
// Get data for building windows here.
var/list/possible_directions = cardinal.Copy()
var/window_count = 0
for (var/obj/structure/window/check_window in user.loc)
window_count++
possible_directions -= check_window.dir
for (var/obj/structure/windoor_assembly/check_assembly in user.loc)
window_count++
possible_directions -= check_assembly.dir
for (var/obj/machinery/door/window/check_windoor in user.loc)
window_count++
possible_directions -= check_windoor.dir
// Get the closest available dir to the user's current facing.
var/build_dir = SOUTHWEST //Default to southwest for fulltile windows.
var/failed_to_build
if(window_count >= 4)
failed_to_build = 1
else
if(choice in list("One Direction","Windoor"))
if(possible_directions.len)
for(var/direction in list(user.dir, turn(user.dir,90), turn(user.dir,270), turn(user.dir,180)))
if(direction in possible_directions)
build_dir = direction
break
else
failed_to_build = 1
if(failed_to_build)
to_chat(user, "<span class='warning'>There is no room in this location.</span>")
return 1
var/build_path = /obj/structure/windoor_assembly
var/sheets_needed = window_options[choice]
if(choice == "Windoor")
if(is_reinforced())
build_path = /obj/structure/windoor_assembly/secure
else if(choice == "Full Window")
build_path = created_fulltile_window
else
build_path = created_window
if(used_stack.get_amount() < sheets_needed)
to_chat(user, "<span class='warning'>You need at least [sheets_needed] sheets to build this.</span>")
return 1
// Build the structure and update sheet count etc.
used_stack.use(sheets_needed)
new build_path(T, build_dir, 1)
return 1
/datum/material/glass/proc/is_reinforced()
return (hardness > 35) //todo
/datum/material/glass/reinforced
name = "rglass"
display_name = "reinforced glass"
stack_type = /obj/item/stack/material/glass/reinforced
flags = MATERIAL_BRITTLE
icon_colour = "#00E1FF"
opacity = 0.3
integrity = 100
shard_type = SHARD_SHARD
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 40
weight = 30
stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT)
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
created_window = /obj/structure/window/reinforced
created_fulltile_window = /obj/structure/window/reinforced/full
wire_product = null
rod_product = null
/datum/material/glass/phoron
name = "borosilicate glass"
display_name = "borosilicate glass"
stack_type = /obj/item/stack/material/glass/phoronglass
flags = MATERIAL_BRITTLE
integrity = 100
icon_colour = "#FC2BC5"
stack_origin_tech = list(TECH_MATERIAL = 4)
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/phoronbasic
created_fulltile_window = /obj/structure/window/phoronbasic/full
wire_product = null
rod_product = /obj/item/stack/material/glass/phoronrglass
/datum/material/glass/phoron/reinforced
name = "reinforced borosilicate glass"
display_name = "reinforced borosilicate glass"
stack_type = /obj/item/stack/material/glass/phoronrglass
stack_origin_tech = list(TECH_MATERIAL = 5)
composite_material = list() //todo
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/phoronreinforced
created_fulltile_window = /obj/structure/window/phoronreinforced/full
hardness = 40
weight = 30
stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "borosilicate glass" = SHEET_MATERIAL_AMOUNT)
rod_product = null

View File

@@ -0,0 +1,33 @@
/datum/material/glass/titaniumglass
name = MAT_TITANIUMGLASS
display_name = "titanium glass"
stack_type = /obj/item/stack/material/glass/titanium
integrity = 150
hardness = 50
weight = 50
flags = MATERIAL_BRITTLE
icon_colour = "#A7A3A6"
stack_origin_tech = list(TECH_MATERIAL = 5)
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/titanium
created_fulltile_window = /obj/structure/window/titanium/full
wire_product = null
rod_product = /obj/item/stack/material/glass/titanium
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
/datum/material/glass/plastaniumglass
name = MAT_PLASTITANIUMGLASS
display_name = "plas-titanium glass"
stack_type = /obj/item/stack/material/glass/plastitanium
integrity = 200
hardness = 60
weight = 80
flags = MATERIAL_BRITTLE
icon_colour = "#676366"
stack_origin_tech = list(TECH_MATERIAL = 6)
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/plastitanium
created_fulltile_window = /obj/structure/window/plastitanium/full
wire_product = null
rod_product = /obj/item/stack/material/glass/plastitanium
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)

View File

@@ -0,0 +1,17 @@
/datum/material/steel/holographic
name = "holo" + DEFAULT_WALL_MATERIAL
display_name = DEFAULT_WALL_MATERIAL
stack_type = null
shard_type = SHARD_NONE
/datum/material/plastic/holographic
name = "holoplastic"
display_name = "plastic"
stack_type = null
shard_type = SHARD_NONE
/datum/material/wood/holographic
name = "holowood"
display_name = "wood"
stack_type = null
shard_type = SHARD_NONE

View File

@@ -0,0 +1,53 @@
/datum/material/steel/hull
name = MAT_STEELHULL
stack_type = /obj/item/stack/material/steel/hull
integrity = 250
explosion_resistance = 10
icon_base = "hull"
icon_reinf = "reinf_mesh"
icon_colour = "#666677"
/datum/material/steel/hull/place_sheet(var/turf/target) //Deconstructed into normal steel sheets.
new /obj/item/stack/material/steel(target)
/datum/material/plasteel/hull
name = MAT_PLASTEELHULL
stack_type = /obj/item/stack/material/plasteel/hull
integrity = 600
icon_base = "hull"
icon_reinf = "reinf_mesh"
icon_colour = "#777788"
explosion_resistance = 40
/datum/material/plasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
new /obj/item/stack/material/plasteel(target)
/datum/material/durasteel/hull //The 'Hardball' of starship hulls.
name = MAT_DURASTEELHULL
stack_type = /obj/item/stack/material/durasteel/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
icon_colour = "#45829a"
explosion_resistance = 90
reflectivity = 0.9
/datum/material/durasteel/hull/place_sheet(var/turf/target) //Deconstructed into normal durasteel sheets.
new /obj/item/stack/material/durasteel(target)
/datum/material/titanium/hull
name = MAT_TITANIUMHULL
stack_type = /obj/item/stack/material/titanium/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
/datum/material/titanium/hull/place_sheet(var/turf/target) //Deconstructed into normal titanium sheets.
new /obj/item/stack/material/titanium(target)
/datum/material/morphium/hull
name = MAT_MORPHIUMHULL
stack_type = /obj/item/stack/material/morphium/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
/datum/material/morphium/hull/place_sheet(var/turf/target)
new /obj/item/stack/material/morphium(target)

View File

@@ -0,0 +1,20 @@
/datum/material/plastitanium/hull
name = MAT_PLASTITANIUMHULL
stack_type = /obj/item/stack/material/plastitanium/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
icon_colour = "#585658"
explosion_resistance = 50
/datum/material/plastitanium/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
new /obj/item/stack/material/plastitanium(target)
/datum/material/gold/hull
name = MAT_GOLDHULL
stack_type = /obj/item/stack/material/gold/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
explosion_resistance = 50
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal gold sheets.
new /obj/item/stack/material/gold(target)

View File

@@ -0,0 +1,199 @@
// Very rare alloy that is reflective, should be used sparingly.
/datum/material/durasteel
name = "durasteel"
stack_type = /obj/item/stack/material/durasteel
integrity = 600
melting_point = 7000
icon_base = "metal"
icon_reinf = "reinf_metal"
icon_colour = "#6EA7BE"
explosion_resistance = 75
hardness = 100
weight = 28
protectiveness = 60 // 75%
reflectivity = 0.7 // Not a perfect mirror, but close.
stack_origin_tech = list(TECH_MATERIAL = 8)
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
supply_conversion_value = 9
/datum/material/titanium
name = MAT_TITANIUM
stack_type = /obj/item/stack/material/titanium
conductivity = 2.38
icon_base = "metal"
door_icon_base = "metal"
icon_colour = "#D1E6E3"
icon_reinf = "reinf_metal"
composite_material = null
/datum/material/iron
name = "iron"
stack_type = /obj/item/stack/material/iron
icon_colour = "#5C5454"
weight = 22
conductivity = 10
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
/datum/material/lead
name = MAT_LEAD
stack_type = /obj/item/stack/material/lead
icon_colour = "#273956"
weight = 23 // Lead is a bit more dense than silver IRL, and silver has 22 ingame.
conductivity = 10
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
radiation_resistance = 25 // Lead is Special and so gets to block more radiation than it normally would with just weight, totalling in 48 protection.
supply_conversion_value = 2
/datum/material/gold
name = "gold"
stack_type = /obj/item/stack/material/gold
icon_colour = "#EDD12F"
weight = 24
hardness = 40
conductivity = 41
stack_origin_tech = list(TECH_MATERIAL = 4)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 2
/datum/material/silver
name = "silver"
stack_type = /obj/item/stack/material/silver
icon_colour = "#D1E6E3"
weight = 22
hardness = 50
conductivity = 63
stack_origin_tech = list(TECH_MATERIAL = 3)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 2
/datum/material/platinum
name = "platinum"
stack_type = /obj/item/stack/material/platinum
icon_colour = "#9999FF"
weight = 27
conductivity = 9.43
stack_origin_tech = list(TECH_MATERIAL = 2)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 5
/datum/material/uranium
name = "uranium"
stack_type = /obj/item/stack/material/uranium
radioactivity = 12
icon_base = "stone"
icon_reinf = "reinf_stone"
icon_colour = "#007A00"
weight = 22
stack_origin_tech = list(TECH_MATERIAL = 5)
door_icon_base = "stone"
supply_conversion_value = 2
/datum/material/mhydrogen
name = "mhydrogen"
stack_type = /obj/item/stack/material/mhydrogen
icon_colour = "#E6C5DE"
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5)
conductivity = 100
is_fusion_fuel = 1
supply_conversion_value = 6
/datum/material/deuterium
name = "deuterium"
stack_type = /obj/item/stack/material/deuterium
icon_colour = "#999999"
stack_origin_tech = list(TECH_MATERIAL = 3)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
is_fusion_fuel = 1
conductive = 0
/datum/material/tritium
name = "tritium"
stack_type = /obj/item/stack/material/tritium
icon_colour = "#777777"
stack_origin_tech = list(TECH_MATERIAL = 5)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
is_fusion_fuel = 1
conductive = 0
/datum/material/osmium
name = "osmium"
stack_type = /obj/item/stack/material/osmium
icon_colour = "#9999FF"
stack_origin_tech = list(TECH_MATERIAL = 5)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
conductivity = 100
supply_conversion_value = 6
/datum/material/graphite
name = MAT_GRAPHITE
stack_type = /obj/item/stack/material/graphite
flags = MATERIAL_BRITTLE
icon_base = "solid"
icon_reinf = "reinf_mesh"
icon_colour = "#333333"
hardness = 75
weight = 15
integrity = 175
protectiveness = 15
conductivity = 18
melting_point = T0C+3600
radiation_resistance = 15
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2)
/datum/material/bronze
name = "bronze"
stack_type = /obj/item/stack/material/bronze
icon_colour = "#EDD12F"
icon_base = "solid"
icon_reinf = "reinf_over"
integrity = 120
conductivity = 12
protectiveness = 9 // 33%
/datum/material/tin
name = "tin"
display_name = "tin"
use_name = "tin"
stack_type = /obj/item/stack/material/tin
icon_colour = "#b2afaf"
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 1
hardness = 50
weight = 13
/datum/material/copper
name = "copper"
display_name = "copper"
use_name = "copper"
stack_type = /obj/item/stack/material/copper
conductivity = 52
icon_colour = "#af633e"
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 1
weight = 13
hardness = 50
/datum/material/aluminium
name = "aluminium"
display_name = "aluminium"
use_name = "aluminium"
icon_colour = "#e5e2d0"
stack_type = /obj/item/stack/material/aluminium
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
supply_conversion_value = 2
weight = 10

View File

@@ -0,0 +1,6 @@
/datum/material/durasteel/generate_recipes()
. = ..()
recipes += list(
new /datum/stack_recipe("durasteel fishing rod", /obj/item/weapon/material/fishing_rod/modern/strong, 2),
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 30),
)

View File

@@ -0,0 +1,27 @@
/datum/material/plasteel
name = "plasteel"
stack_type = /obj/item/stack/material/plasteel
integrity = 400
melting_point = 6000
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#777777"
explosion_resistance = 25
hardness = 80
weight = 23
protectiveness = 20 // 50%
conductivity = 13 // For the purposes of balance.
stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
supply_conversion_value = 6
/datum/material/plasteel/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]"),
new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]"),
new /datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
)

View File

@@ -0,0 +1,9 @@
/datum/material/plasteel/generate_recipes()
. = ..()
// recipes += new /datum/stack_recipe("Hammer Head", /obj/item/weapon/hammer_head, 2) //CHOMPEdit - Disabled because I had to disable code/game/objects/items/weapons/material/sledgehammer_construction_ch.dm due to lots of errors
recipes += new /datum/stack_recipe_list("sofas", list( \
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
))

View File

@@ -0,0 +1,22 @@
/datum/material/plastitanium
name = MAT_PLASTITANIUM
stack_type = /obj/item/stack/material/plastitanium
integrity = 600
melting_point = 9000
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#585658"
explosion_resistance = 35
hardness = 90
weight = 40
protectiveness = 30
conductivity = 7
stack_origin_tech = list(TECH_MATERIAL = 5)
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
supply_conversion_value = 8
/datum/material/plastitanium/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 20),
)

View File

@@ -0,0 +1,87 @@
/datum/material/steel
name = DEFAULT_WALL_MATERIAL
stack_type = /obj/item/stack/material/steel
integrity = 150
conductivity = 11 // Assuming this is carbon steel, it would actually be slightly less conductive than iron, but lets ignore that.
protectiveness = 10 // 33%
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#666666"
/datum/material/steel/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe_list("office chairs",list(
new /datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
)),
new /datum/stack_recipe_list("comfy chairs", list(
new /datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
)),
new /datum/stack_recipe_list("airlock assemblies", list(
new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
)),
new /datum/stack_recipe_list("modular computer frames", list(
new /datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
new /datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
new /datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
new /datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
)),
new /datum/stack_recipe_list("filing cabinets", list(
new /datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
)),
new /datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]"),
new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]"),
new /datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
//new /datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), //VOREStation Removal
new /datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), //VOREStation Replacement,
new /datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"),
new /datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]"),
new /datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]"),
new /datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]"),
new /datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]"),
new /datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]"),
new /datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
)

View File

@@ -0,0 +1,82 @@
/datum/material/steel/generate_recipes()
. = ..()
recipes += list(
new /datum/stack_recipe_list("mounted chairs",list(
new /datum/stack_recipe("mounted chair", /obj/structure/bed/chair/bay/chair, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("red mounted chair", /obj/structure/bed/chair/bay/chair/padded/red, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("brown mounted chair", /obj/structure/bed/chair/bay/chair/padded/brown, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("teal mounted chair", /obj/structure/bed/chair/bay/chair/padded/teal, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("black mounted chair", /obj/structure/bed/chair/bay/chair/padded/black, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("green mounted chair", /obj/structure/bed/chair/bay/chair/padded/green, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("purple mounted chair", /obj/structure/bed/chair/bay/chair/padded/purple, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("blue mounted chair", /obj/structure/bed/chair/bay/chair/padded/blue, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("beige mounted chair", /obj/structure/bed/chair/bay/chair/padded/beige, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("lime mounted chair", /obj/structure/bed/chair/bay/chair/padded/lime, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("yellow mounted chair", /obj/structure/bed/chair/bay/chair/padded/yellow, 2, one_per_turf = 1, on_floor = 1, time = 10)
)),
new /datum/stack_recipe_list("mounted comfy chairs",list(
new /datum/stack_recipe("mounted comfy chair", /obj/structure/bed/chair/bay/comfy, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("red mounted comfy chair", /obj/structure/bed/chair/bay/comfy/red, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("brown mounted comfy chair", /obj/structure/bed/chair/bay/comfy/brown, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("teal mounted comfy chair", /obj/structure/bed/chair/bay/comfy/teal, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("black mounted comfy chair", /obj/structure/bed/chair/bay/comfy/black, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("green mounted comfy chair", /obj/structure/bed/chair/bay/comfy/green, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("purple mounted comfy chair", /obj/structure/bed/chair/bay/comfy/purple, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("blue mounted comfy chair", /obj/structure/bed/chair/bay/comfy/blue, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("beige mounted comfy chair", /obj/structure/bed/chair/bay/comfy/beige, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("lime mounted comfy chair", /obj/structure/bed/chair/bay/comfy/lime, 3, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("yellow mounted comfy chair", /obj/structure/bed/chair/bay/comfy/yellow, 3, one_per_turf = 1, on_floor = 1, time = 20)
)),
new /datum/stack_recipe("mounted captain's chair", /obj/structure/bed/chair/bay/comfy/captain, 4, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("dropship seat", /obj/structure/bed/chair/bay/shuttle, 4, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("small teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/smallnest, 2, one_per_turf = 1, on_floor = 1, time = 10),
new /datum/stack_recipe("large teshari nest", /obj/structure/bed/chair/bay/chair/padded/red/bignest, 4, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("dance pole", /obj/structure/dancepole, 2, one_per_turf = 1, on_floor = 1, time = 20),
new /datum/stack_recipe("light switch frame", /obj/item/frame/lightswitch, 2),
new /datum/stack_recipe_list("sofas",list(
new /datum/stack_recipe("red sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("red sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("red sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("red sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("brown sofa middle", /obj/structure/bed/chair/sofa/brown, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("brown sofa left", /obj/structure/bed/chair/sofa/brown/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("brown sofa right", /obj/structure/bed/chair/sofa/brown/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("brown sofa corner", /obj/structure/bed/chair/sofa/brown/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("teal sofa middle", /obj/structure/bed/chair/sofa/teal, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("teal sofa left", /obj/structure/bed/chair/sofa/teal/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("teal sofa right", /obj/structure/bed/chair/sofa/teal/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("teal sofa corner", /obj/structure/bed/chair/sofa/teal/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("black sofa middle", /obj/structure/bed/chair/sofa/black, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("black sofa left", /obj/structure/bed/chair/sofa/black/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("black sofa right", /obj/structure/bed/chair/sofa/black/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("black sofa corner", /obj/structure/bed/chair/sofa/black/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("green sofa middle", /obj/structure/bed/chair/sofa/green, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("green sofa left", /obj/structure/bed/chair/sofa/green/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("green sofa right", /obj/structure/bed/chair/sofa/green/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("green sofa corner", /obj/structure/bed/chair/sofa/green/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("purple sofa middle", /obj/structure/bed/chair/sofa/purp, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("purple sofa left", /obj/structure/bed/chair/sofa/purp/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("purple sofa right", /obj/structure/bed/chair/sofa/purp/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("purple sofa corner", /obj/structure/bed/chair/sofa/purp/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("blue sofa middle", /obj/structure/bed/chair/sofa/blue, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("blue sofa left", /obj/structure/bed/chair/sofa/blue/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("blue sofa right", /obj/structure/bed/chair/sofa/blue/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("blue sofa corner", /obj/structure/bed/chair/sofa/blue/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("beige sofa middle", /obj/structure/bed/chair/sofa/beige, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("beige sofa left", /obj/structure/bed/chair/sofa/beige/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("beige sofa right", /obj/structure/bed/chair/sofa/beige/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("beige sofa corner", /obj/structure/bed/chair/sofa/beige/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("lime sofa middle", /obj/structure/bed/chair/sofa/lime, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("lime sofa left", /obj/structure/bed/chair/sofa/lime/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("lime sofa right", /obj/structure/bed/chair/sofa/lime/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("lime sofa corner", /obj/structure/bed/chair/sofa/lime/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("yellow sofa middle", /obj/structure/bed/chair/sofa/yellow, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("yellow sofa left", /obj/structure/bed/chair/sofa/yellow/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("yellow sofa right", /obj/structure/bed/chair/sofa/yellow/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("yellow sofa corner", /obj/structure/bed/chair/sofa/yellow/corner, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("orange sofa middle", /obj/structure/bed/chair/sofa/orange, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("orange sofa left", /obj/structure/bed/chair/sofa/orange/left, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("orange sofa right", /obj/structure/bed/chair/sofa/orange/right, 1, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("orange sofa corner", /obj/structure/bed/chair/sofa/orange/corner, 1, one_per_turf = 1, on_floor = 1), \
)),
)

View File

@@ -0,0 +1,28 @@
/datum/material/diona
name = "biomass"
icon_colour = null
stack_type = null
integrity = 600
icon_base = "diona"
icon_reinf = "noreinf"
/datum/material/diona/place_dismantled_product()
return
/datum/material/diona/place_dismantled_girder(var/turf/target)
spawn_diona_nymph(target)
/datum/material/chitin
name = MAT_CHITIN
icon_colour = "#8d6653"
stack_type = /obj/item/stack/material/chitin
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
icon_base = "solid"
icon_reinf = "reinf_mesh"
integrity = 60
weight = 10
ignition_point = T0C+400
melting_point = T0C+500
protectiveness = 20
conductive = 0
supply_conversion_value = 4

View File

@@ -0,0 +1,125 @@
/datum/material/cloth
name = "cloth"
stack_origin_tech = list(TECH_MATERIAL = 2)
door_icon_base = "wood"
ignition_point = T0C+232
melting_point = T0C+300
protectiveness = 1 // 4%
flags = MATERIAL_PADDING
conductive = 0
integrity = 40
pass_stack_colors = TRUE
supply_conversion_value = 2
/datum/material/cloth/generate_recipes()
recipes = list(
new /datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
)
/datum/material/cloth/syncloth
name = "syncloth"
stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 2)
ignition_point = T0C+532
melting_point = T0C+600
integrity = 200
protectiveness = 15 // 4%
pass_stack_colors = TRUE
supply_conversion_value = 3
/datum/material/cloth/teal
name = "teal"
display_name ="teal"
use_name = "teal cloth"
icon_colour = "#00EAFA"
/datum/material/cloth/black
name = "black"
display_name = "black"
use_name = "black cloth"
icon_colour = "#505050"
/datum/material/cloth/green
name = "green"
display_name = "green"
use_name = "green cloth"
icon_colour = "#01C608"
/datum/material/cloth/puple
name = "purple"
display_name = "purple"
use_name = "purple cloth"
icon_colour = "#9C56C4"
/datum/material/cloth/blue
name = "blue"
display_name = "blue"
use_name = "blue cloth"
icon_colour = "#6B6FE3"
/datum/material/cloth/beige
name = "beige"
display_name = "beige"
use_name = "beige cloth"
icon_colour = "#E8E7C8"
/datum/material/cloth/lime
name = "lime"
display_name = "lime"
use_name = "lime cloth"
icon_colour = "#62E36C"
/datum/material/cloth/yellow
name = "yellow"
display_name = "yellow"
use_name = "yellow cloth"
icon_colour = "#EEF573"
/datum/material/cloth/orange
name = "orange"
display_name = "orange"
use_name = "orange cloth"
icon_colour = "#E3BF49"
//CHOMPstation Removal Start: Moved to materials_ch and changed to allow for material var
/*
/material/carpet
name = "carpet"
display_name = "comfy"
use_name = "red upholstery"
icon_colour = "#DA020A"
flags = MATERIAL_PADDING
ignition_point = T0C+232
melting_point = T0C+300
sheet_singular_name = "tile"
sheet_plural_name = "tiles"
protectiveness = 1 // 4%
conductive = 0
*/
//CHOMPstation Removal End
/datum/material/cotton
name = "cotton"
display_name ="cotton"
icon_colour = "#FFFFFF"
flags = MATERIAL_PADDING
ignition_point = T0C+232
melting_point = T0C+300
protectiveness = 1 // 4%
conductive = 0

View File

@@ -1,67 +1,67 @@
//Red Color Fix
/datum/material/cloth_red
name = "carpet" //This is the easiest fix but god do i hate it -shark
display_name = "red"
use_name = "red cloth"
icon_colour = "#DA020A"
flags = MATERIAL_PADDING
ignition_point = T0C+232
melting_point = T0C+300
protectiveness = 1 // 4%
conductive = 0
//CARPET materials
/datum/material/carpet
name = MAT_CARPET
display_name = "comfy"
use_name = "upholstery"
icon_colour = "#DB2626"
flags = MATERIAL_PADDING
stack_type = /obj/item/stack/tile/carpet
ignition_point = T0C+232
melting_point = T0C+300
sheet_singular_name = "tile"
sheet_plural_name = "tiles"
protectiveness = 1 // 4%
conductive = 0
/datum/material/carpet/teal
name = MAT_CARPET_TEAL
icon_colour = "#007575"
stack_type = /obj/item/stack/tile/carpet/teal
/datum/material/carpet/bcarpet
name = MAT_CARPET_BLACK
icon_colour = "#1B171E"
stack_type = /obj/item/stack/tile/carpet/bcarpet
/datum/material/carpet/blucarpet
name = MAT_CARPET_BLUE
icon_colour = "#122CDF"
stack_type = /obj/item/stack/tile/carpet/blucarpet
/datum/material/carpet/turcarpet
name = MAT_CARPET_TURQUOISE
icon_colour = "#41A997"
stack_type = /obj/item/stack/tile/carpet/turcarpet
/datum/material/carpet/sblucarpet
name = MAT_CARPET_SILVERBLUE
icon_colour = "#547EC6"
stack_type = /obj/item/stack/tile/carpet/sblucarpet
/datum/material/carpet/gaycarpet
name = MAT_CARPET_PINK
icon_colour = "#E12C87"
stack_type = /obj/item/stack/tile/carpet/gaycarpet
/datum/material/carpet/purcarpet
name = MAT_CARPET_PURPLE
icon_colour = "#B500A6"
stack_type = /obj/item/stack/tile/carpet/purcarpet
/datum/material/carpet/oracarpet
name = MAT_CARPET_ORANGE
icon_colour = "#D1D000"
stack_type = /obj/item/stack/tile/carpet/oracarpet
//Red Color Fix
/datum/material/cloth_red
name = "carpet" //This is the easiest fix but god do i hate it -shark
display_name = "red"
use_name = "red cloth"
icon_colour = "#DA020A"
flags = MATERIAL_PADDING
ignition_point = T0C+232
melting_point = T0C+300
protectiveness = 1 // 4%
conductive = 0
//CARPET materials
/datum/material/carpet
name = MAT_CARPET
display_name = "comfy"
use_name = "upholstery"
icon_colour = "#DB2626"
flags = MATERIAL_PADDING
stack_type = /obj/item/stack/tile/carpet
ignition_point = T0C+232
melting_point = T0C+300
sheet_singular_name = "tile"
sheet_plural_name = "tiles"
protectiveness = 1 // 4%
conductive = 0
/datum/material/carpet/teal
name = MAT_CARPET_TEAL
icon_colour = "#007575"
stack_type = /obj/item/stack/tile/carpet/teal
/datum/material/carpet/bcarpet
name = MAT_CARPET_BLACK
icon_colour = "#1B171E"
stack_type = /obj/item/stack/tile/carpet/bcarpet
/datum/material/carpet/blucarpet
name = MAT_CARPET_BLUE
icon_colour = "#122CDF"
stack_type = /obj/item/stack/tile/carpet/blucarpet
/datum/material/carpet/turcarpet
name = MAT_CARPET_TURQUOISE
icon_colour = "#41A997"
stack_type = /obj/item/stack/tile/carpet/turcarpet
/datum/material/carpet/sblucarpet
name = MAT_CARPET_SILVERBLUE
icon_colour = "#547EC6"
stack_type = /obj/item/stack/tile/carpet/sblucarpet
/datum/material/carpet/gaycarpet
name = MAT_CARPET_PINK
icon_colour = "#E12C87"
stack_type = /obj/item/stack/tile/carpet/gaycarpet
/datum/material/carpet/purcarpet
name = MAT_CARPET_PURPLE
icon_colour = "#B500A6"
stack_type = /obj/item/stack/tile/carpet/purcarpet
/datum/material/carpet/oracarpet
name = MAT_CARPET_ORANGE
icon_colour = "#D1D000"
stack_type = /obj/item/stack/tile/carpet/oracarpet

View File

@@ -0,0 +1,37 @@
/datum/material/leather
name = MAT_LEATHER
display_name = "plainleather"
icon_colour = "#5C4831"
stack_type = /obj/item/stack/material/leather
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
flags = MATERIAL_PADDING
ignition_point = T0C+300
melting_point = T0C+300
protectiveness = 3 // 13%
conductive = 0
integrity = 40
supply_conversion_value = 3
/datum/material/leather/generate_recipes()
recipes = list(
new /datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("whip", /obj/item/weapon/material/whip, 5, time = 15 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
)

View File

@@ -0,0 +1,45 @@
/datum/material/resin
name = "resin"
icon_colour = "#35343a"
icon_base = "resin"
dooropen_noise = 'sound/effects/attackblob.ogg'
door_icon_base = "resin"
icon_reinf = "reinf_mesh"
melting_point = T0C+300
sheet_singular_name = "blob"
sheet_plural_name = "blobs"
conductive = 0
explosion_resistance = 60
radiation_resistance = 10
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_PHORON = 4, TECH_BLUESPACE = 4, TECH_BIO = 7)
stack_type = /obj/item/stack/material/resin
/datum/material/resin/can_open_material_door(var/mob/living/user)
var/mob/living/carbon/M = user
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
return TRUE
return FALSE
/datum/material/resin/wall_touch_special(var/turf/simulated/wall/W, var/mob/living/L)
var/mob/living/carbon/M = L
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
to_chat(M, "<span class='alien'>\The [W] shudders under your touch, starting to become porous.</span>")
playsound(W, 'sound/effects/attackblob.ogg', 50, 1)
if(do_after(L, 5 SECONDS))
spawn(2)
playsound(W, 'sound/effects/attackblob.ogg', 100, 1)
W.dismantle_wall()
return TRUE
return FALSE
/datum/material/resin/generate_recipes()
recipes = list(
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
)

View File

@@ -0,0 +1,84 @@
/datum/material/wood
name = MAT_WOOD
stack_type = /obj/item/stack/material/wood
icon_colour = "#9c5930"
integrity = 50
icon_base = "wood"
explosion_resistance = 2
shard_type = SHARD_SPLINTER
shard_can_repair = 0 // you can't weld splinters back into planks
hardness = 15
weight = 18
protectiveness = 8 // 28%
conductive = 0
conductivity = 1
melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood
ignition_point = T0C+288
stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
dooropen_noise = 'sound/effects/doorcreaky.ogg'
door_icon_base = "wood"
destruction_desc = "splinters"
sheet_singular_name = "plank"
sheet_plural_name = "planks"
/datum/material/wood/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE),
new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), //VOREStation Add
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
)
/datum/material/wood/sif
name = MAT_SIFWOOD
stack_type = /obj/item/stack/material/wood/sif
icon_colour = "#0099cc" // Cyan-ish
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2) // Alien wood would presumably be more interesting to the analyzer.
/datum/material/wood/sif/generate_recipes()
..()
recipes += new /datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20, pass_stack_color = TRUE)
for(var/datum/stack_recipe/r_recipe in recipes)
if(r_recipe.title == "wood floor tile")
recipes -= r_recipe
continue
if(r_recipe.title == "wooden chair")
recipes -= r_recipe
continue
/datum/material/wood/log
name = MAT_LOG
icon_base = "log"
stack_type = /obj/item/stack/material/log
sheet_singular_name = null
sheet_plural_name = "pile"
pass_stack_colors = TRUE
supply_conversion_value = 1
/datum/material/wood/log/generate_recipes()
recipes = list(
new /datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
)
/datum/material/wood/log/sif
name = MAT_SIFLOG
icon_colour = "#0099cc" // Cyan-ish
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
stack_type = /obj/item/stack/material/log/sif

View File

@@ -0,0 +1,9 @@
/datum/material/wood/generate_recipes() //Is a little sad we cant have lovely wooden sofa
. = ..()
recipes += new/datum/stack_recipe_list("sofas", list( \
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
))

View File

@@ -0,0 +1,32 @@
/datum/material/flesh
name = "flesh"
display_name = "chunk of flesh"
icon_colour = "#dd90aa"
sheet_singular_name = "meat"
sheet_plural_name = "meats"
integrity = 1200
melting_point = 6000
explosion_resistance = 200
hardness = 500
weight = 500
/datum/material/fluff //This is to allow for 2 handed weapons that don't want to have a prefix.
name = " "
display_name = ""
icon_colour = "#000000"
sheet_singular_name = "fluff"
sheet_plural_name = "fluffs"
hardness = 60
weight = 20 //Strong as iron.
/datum/material/darkglass
name = "darkglass"
display_name = "darkglass"
icon_base = "darkglass"
icon_colour = "#FFFFFF"
/datum/material/fancyblack
name = "fancyblack"
display_name = "fancyblack"
icon_base = "fancyblack"
icon_colour = "#FFFFFF"

View File

@@ -0,0 +1,88 @@
/datum/material/plastic
name = "plastic"
stack_type = /obj/item/stack/material/plastic
flags = MATERIAL_BRITTLE
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#CCCCCC"
hardness = 10
weight = 12
protectiveness = 5 // 20%
conductive = 0
conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator.
melting_point = T0C+371 //assuming heat resistant plastic
stack_origin_tech = list(TECH_MATERIAL = 3)
/datum/material/plastic/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 500u
new /datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 250u
new /datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]"), // 100u
new /datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]"),
new /datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
)
/datum/material/cardboard
name = "cardboard"
stack_type = /obj/item/stack/material/cardboard
flags = MATERIAL_BRITTLE
integrity = 10
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#AAAAAA"
hardness = 1
weight = 1
protectiveness = 0 // 0%
conductive = 0
ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough
melting_point = T0C+232 //temperature at which cardboard walls would be destroyed
stack_origin_tech = list(TECH_MATERIAL = 1)
door_icon_base = "wood"
destruction_desc = "crumples"
radiation_resistance = 1
pass_stack_colors = TRUE
/datum/material/cardboard/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe_list("folders",list(
new /datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"),
new /datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"),
new /datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"),
new /datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"),
new /datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]")
))
)
/datum/material/toy_foam
name = "foam"
display_name = "foam"
use_name = "foam"
flags = MATERIAL_PADDING
ignition_point = T0C+232
melting_point = T0C+300
icon_colour = "#ff9900"
hardness = 1
weight = 1
protectiveness = 0 // 0%
conductive = 0

View File

@@ -0,0 +1,9 @@
/datum/material/plastic/generate_recipes()
. = ..()
recipes += new/datum/stack_recipe_list("sofas", list( \
new /datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"), \
new /datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))

View File

@@ -0,0 +1,56 @@
/datum/material/snow
name = MAT_SNOW
stack_type = /obj/item/stack/material/snow
flags = MATERIAL_BRITTLE
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#FFFFFF"
integrity = 1
hardness = 1
weight = 1
protectiveness = 0 // 0%
stack_origin_tech = list(TECH_MATERIAL = 1)
melting_point = T0C+1
destruction_desc = "crumples"
sheet_singular_name = "pile"
sheet_plural_name = "pile" //Just a bigger pile
radiation_resistance = 1
/datum/material/snow/generate_recipes()
recipes = list(
new /datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]"),
new /datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]"),
new /datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]"),
new /datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]"),
new /datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
)
/datum/material/snowbrick //only slightly stronger than snow, used to make igloos mostly
name = "packed snow"
flags = MATERIAL_BRITTLE
stack_type = /obj/item/stack/material/snowbrick
icon_base = "stone"
icon_reinf = "reinf_stone"
icon_colour = "#D8FDFF"
integrity = 50
weight = 2
hardness = 2
protectiveness = 0 // 0%
stack_origin_tech = list(TECH_MATERIAL = 1)
melting_point = T0C+1
destruction_desc = "crumbles"
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
radiation_resistance = 1
/datum/material/snowbrick/generate_recipes()
recipes = list(
new /datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]"),
new /datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
)

View File

@@ -0,0 +1,35 @@
/datum/material/stone
name = "sandstone"
stack_type = /obj/item/stack/material/sandstone
icon_base = "stone"
icon_reinf = "reinf_stone"
icon_colour = "#D9C179"
shard_type = SHARD_STONE_PIECE
weight = 22
hardness = 55
protectiveness = 5 // 20%
conductive = 0
conductivity = 5
door_icon_base = "stone"
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
/datum/material/stone/generate_recipes()
..()
recipes += new /datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
/datum/material/stone/marble
name = "marble"
icon_colour = "#AAAAAA"
weight = 26
hardness = 30 //VOREStation Edit - Please.
integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system
stack_type = /obj/item/stack/material/marble
supply_conversion_value = 2
/datum/material/stone/marble/generate_recipes()
..()
recipes += list(
new /datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
)

View File

@@ -0,0 +1,23 @@
//R-UST port
/datum/material/supermatter
name = "supermatter"
icon_colour = "#FFFF00"
stack_type = /obj/item/stack/material/supermatter
shard_type = SHARD_SHARD
radioactivity = 20
stack_type = null
luminescence = 3
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
icon_base = "stone"
shard_type = SHARD_SHARD
hardness = 30
door_icon_base = "stone"
sheet_singular_name = "crystal"
sheet_plural_name = "crystals"
is_fusion_fuel = 1
stack_origin_tech = list(TECH_MATERIAL = 8, TECH_PHORON = 5, TECH_BLUESPACE = 4)
/datum/material/supermatter/generate_recipes()
recipes = list(
new /datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
)

View File

@@ -1,104 +0,0 @@
/datum/material/flesh
name = "flesh"
display_name = "chunk of flesh"
icon_colour = "#dd90aa"
sheet_singular_name = "meat"
sheet_plural_name = "meats"
integrity = 1200
melting_point = 6000
explosion_resistance = 200
hardness = 500
weight = 500
/datum/material/fluff //This is to allow for 2 handed weapons that don't want to have a prefix.
name = " "
display_name = ""
icon_colour = "#000000"
sheet_singular_name = "fluff"
sheet_plural_name = "fluffs"
hardness = 60
weight = 20 //Strong as iron.
/datum/material/darkglass
name = "darkglass"
display_name = "darkglass"
icon_base = "darkglass"
icon_colour = "#FFFFFF"
/datum/material/fancyblack
name = "fancyblack"
display_name = "fancyblack"
icon_base = "fancyblack"
icon_colour = "#FFFFFF"
/datum/material/glass/titaniumglass
name = MAT_TITANIUMGLASS
display_name = "titanium glass"
stack_type = /obj/item/stack/material/glass/titanium
integrity = 150
hardness = 50
weight = 50
flags = MATERIAL_BRITTLE
icon_colour = "#A7A3A6"
stack_origin_tech = list(TECH_MATERIAL = 5)
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/titanium
created_fulltile_window = /obj/structure/window/titanium/full
wire_product = null
rod_product = /obj/item/stack/material/glass/titanium
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
/datum/material/plastitanium
name = MAT_PLASTITANIUM
stack_type = /obj/item/stack/material/plastitanium
integrity = 600
melting_point = 9000
icon_base = "solid"
icon_reinf = "reinf_over"
icon_colour = "#585658"
explosion_resistance = 35
hardness = 90
weight = 40
protectiveness = 30
conductivity = 7
stack_origin_tech = list(TECH_MATERIAL = 5)
composite_material = list(MAT_TITANIUM = SHEET_MATERIAL_AMOUNT, MAT_PLASTEEL = SHEET_MATERIAL_AMOUNT)
supply_conversion_value = 8
/datum/material/plastitanium/hull
name = MAT_PLASTITANIUMHULL
stack_type = /obj/item/stack/material/plastitanium/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
icon_colour = "#585658"
explosion_resistance = 50
/datum/material/plastitanium/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
new /obj/item/stack/material/plastitanium(target)
/datum/material/glass/plastaniumglass
name = MAT_PLASTITANIUMGLASS
display_name = "plas-titanium glass"
stack_type = /obj/item/stack/material/glass/plastitanium
integrity = 200
hardness = 60
weight = 80
flags = MATERIAL_BRITTLE
icon_colour = "#676366"
stack_origin_tech = list(TECH_MATERIAL = 6)
window_options = list("One Direction" = 1, "Full Window" = 4)
created_window = /obj/structure/window/plastitanium
created_fulltile_window = /obj/structure/window/plastitanium/full
wire_product = null
rod_product = /obj/item/stack/material/glass/plastitanium
composite_material = list(MAT_PLASTITANIUM = SHEET_MATERIAL_AMOUNT, "glass" = SHEET_MATERIAL_AMOUNT)
/datum/material/gold/hull
name = MAT_GOLDHULL
stack_type = /obj/item/stack/material/gold/hull
icon_base = "hull"
icon_reinf = "reinf_mesh"
explosion_resistance = 50
/datum/material/gold/hull/place_sheet(var/turf/target) //Deconstructed into normal plasteel sheets.
new /obj/item/stack/material/gold(target)

View File

@@ -0,0 +1,89 @@
// Stacked resources. They use a material datum for a lot of inherited values.
// If you're adding something here, make sure to add it to fifty_spawner_mats.dm as well
/obj/item/stack/material
force = 5.0
throwforce = 5
w_class = ITEMSIZE_NORMAL
throw_speed = 3
throw_range = 3
center_of_mass = null
max_amount = 50
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
)
var/default_type = DEFAULT_WALL_MATERIAL
var/datum/material/material
var/perunit = SHEET_MATERIAL_AMOUNT
var/apply_colour //temp pending icon rewrite
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
/obj/item/stack/material/Initialize()
. = ..()
randpixel_xy()
if(!default_type)
default_type = DEFAULT_WALL_MATERIAL
material = get_material_by_name("[default_type]")
if(!material)
return INITIALIZE_HINT_QDEL
recipes = material.get_recipes()
stacktype = material.stack_type
if(islist(material.stack_origin_tech))
origin_tech = material.stack_origin_tech.Copy()
if(apply_colour)
color = material.icon_colour
if(!material.conductive)
flags |= NOCONDUCT
matter = material.get_matter()
update_strings()
/obj/item/stack/material/get_material()
return material
/obj/item/stack/material/proc/update_strings()
// Update from material datum.
singular_name = material.sheet_singular_name
if(amount>1)
name = "[material.use_name] [material.sheet_plural_name]"
desc = "A stack of [material.use_name] [material.sheet_plural_name]."
gender = PLURAL
else
name = "[material.use_name] [material.sheet_singular_name]"
desc = "A [material.sheet_singular_name] of [material.use_name]."
gender = NEUTER
/obj/item/stack/material/use(var/used)
. = ..()
update_strings()
return
/obj/item/stack/material/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
var/obj/item/stack/material/M = S
if(!istype(M) || material.name != M.material.name)
return 0
var/transfer = ..(S,tamount,1)
if(src) update_strings()
if(M) M.update_strings()
return transfer
/obj/item/stack/material/attack_self(var/mob/user)
if(!material.build_windows(user, src))
..()
/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user)
if(istype(W,/obj/item/stack/cable_coil))
material.build_wired_product(user, W, src)
return
else if(istype(W, /obj/item/stack/rods))
material.build_rod_product(user, W, src)
return
return ..()

View File

@@ -0,0 +1,66 @@
/obj/item/stack/material/phoron
name = "solid phoron"
icon_state = "sheet-phoron"
default_type = "phoron"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/stack/material/diamond
name = "diamond"
icon_state = "sheet-diamond"
default_type = "diamond"
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/stack/material/painite
name = "painite"
icon_state = "sheet-gem"
singular_name = "painite gem"
default_type = "painite"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/void_opal
name = "void opal"
icon_state = "sheet-void_opal"
singular_name = "void opal"
default_type = "void opal"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/quartz
name = "quartz"
icon_state = "sheet-gem"
singular_name = "quartz gem"
default_type = "quartz"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/valhollide
name = MAT_VALHOLLIDE
icon_state = "sheet-gem"
item_state = "diamond"
default_type = MAT_VALHOLLIDE
no_variants = FALSE
apply_colour = TRUE
// Particle Smasher and Exotic material.
/obj/item/stack/material/verdantium
name = MAT_VERDANTIUM
icon_state = "sheet-wavy"
item_state = "mhydrogen"
default_type = MAT_VERDANTIUM
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/morphium
name = MAT_MORPHIUM
icon_state = "sheet-wavy"
item_state = "mhydrogen"
default_type = MAT_MORPHIUM
no_variants = FALSE
apply_colour = TRUE

View File

@@ -0,0 +1,33 @@
/obj/item/stack/material/glass
name = "glass"
icon_state = "sheet-transparent"
default_type = "glass"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
apply_colour = TRUE
/obj/item/stack/material/glass/reinforced
name = "reinforced glass"
icon_state = "sheet-rtransparent"
default_type = "rglass"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/glass/phoronglass
name = "borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures"
singular_name = "borosilicate glass sheet"
icon_state = "sheet-transparent"
default_type = "borosilicate glass"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/glass/phoronrglass
name = "reinforced borosilicate glass"
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
singular_name = "reinforced borosilicate glass sheet"
icon_state = "sheet-rtransparent"
default_type = "reinforced borosilicate glass"
no_variants = FALSE
apply_colour = TRUE

View File

@@ -0,0 +1,17 @@
/obj/item/stack/material/glass/titanium
name = "ti-glass sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-titaniumglass"
item_state = "sheet-silver"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
default_type = MAT_TITANIUMGLASS
/obj/item/stack/material/glass/plastitanium
name = "plastitanium glass sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitaniumglass"
item_state = "sheet-silver"
no_variants = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
default_type = MAT_PLASTITANIUMGLASS

View File

@@ -0,0 +1,18 @@
/obj/item/stack/material/steel/hull
name = MAT_STEELHULL
default_type = MAT_STEELHULL
/obj/item/stack/material/plasteel/hull
name = MAT_PLASTEELHULL
default_type = MAT_PLASTEELHULL
/obj/item/stack/material/durasteel/hull
name = MAT_DURASTEELHULL
/obj/item/stack/material/titanium/hull
name = MAT_TITANIUMHULL
default_type = MAT_TITANIUMHULL
/obj/item/stack/material/morphium/hull
name = MAT_MORPHIUMHULL
default_type = MAT_MORPHIUMHULL

View File

@@ -0,0 +1,15 @@
/obj/item/stack/material/plastitanium/hull
name = "plastitanium hull sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_PLASTITANIUMHULL
/obj/item/stack/material/gold/hull
name = "gold hull sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_GOLDHULL

View File

@@ -0,0 +1,140 @@
/obj/item/stack/material/steel
name = DEFAULT_WALL_MATERIAL
icon_state = "sheet-refined"
default_type = DEFAULT_WALL_MATERIAL
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/plasteel
name = "plasteel"
icon_state = "sheet-reinforced"
default_type = "plasteel"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/durasteel
name = "durasteel"
icon_state = "sheet-reinforced"
item_state = "sheet-metal"
default_type = "durasteel"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/titanium
name = MAT_TITANIUM
icon_state = "sheet-refined"
apply_colour = TRUE
item_state = "sheet-silver"
default_type = MAT_TITANIUM
no_variants = FALSE
/obj/item/stack/material/iron
name = "iron"
icon_state = "sheet-ingot"
default_type = "iron"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/lead
name = "lead"
icon_state = "sheet-ingot"
default_type = "lead"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/gold
name = "gold"
icon_state = "sheet-ingot"
default_type = "gold"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/silver
name = "silver"
icon_state = "sheet-ingot"
default_type = "silver"
no_variants = FALSE
apply_colour = TRUE
//Valuable resource, cargo can sell it.
/obj/item/stack/material/platinum
name = "platinum"
icon_state = "sheet-adamantine"
default_type = "platinum"
no_variants = FALSE
apply_colour = TRUE
/obj/item/stack/material/uranium
name = "uranium"
icon_state = "sheet-uranium"
default_type = "uranium"
no_variants = FALSE
//Extremely valuable to Research.
/obj/item/stack/material/mhydrogen
name = "metallic hydrogen"
icon_state = "sheet-mythril"
default_type = "mhydrogen"
no_variants = FALSE
// Fusion fuel.
/obj/item/stack/material/deuterium
name = "deuterium"
icon_state = "sheet-puck"
default_type = "deuterium"
apply_colour = 1
no_variants = FALSE
//Fuel for MRSPACMAN generator.
/obj/item/stack/material/tritium
name = "tritium"
icon_state = "sheet-puck"
default_type = "tritium"
apply_colour = TRUE
no_variants = FALSE
/obj/item/stack/material/osmium
name = "osmium"
icon_state = "sheet-ingot"
default_type = "osmium"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/graphite
name = "graphite"
icon_state = "sheet-puck"
default_type = MAT_GRAPHITE
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/bronze
name = "bronze"
icon_state = "sheet-ingot"
singular_name = "bronze ingot"
default_type = "bronze"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/tin
name = "tin"
icon_state = "sheet-ingot"
singular_name = "tin ingot"
default_type = "tin"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/copper
name = "copper"
icon_state = "sheet-ingot"
singular_name = "copper ingot"
default_type = "copper"
apply_colour = 1
no_variants = FALSE
/obj/item/stack/material/aluminium
name = "aluminium"
icon_state = "sheet-ingot"
singular_name = "aluminium ingot"
default_type = "aluminium"
apply_colour = 1
no_variants = FALSE

View File

@@ -0,0 +1,12 @@
/obj/item/stack/material/titanium
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-titanium"
no_variants = FALSE
/obj/item/stack/material/plastitanium
name = "plastitanium sheets"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "sheet-plastitanium"
item_state = "sheet-silver"
no_variants = FALSE
default_type = MAT_PLASTITANIUM

View File

@@ -0,0 +1,109 @@
/obj/item/stack/rods
name = "metal rod"
desc = "Some rods. Can be used for building, or something."
singular_name = "metal rod"
icon_state = "rods"
w_class = ITEMSIZE_NORMAL
force = 9.0
throwforce = 15.0
throw_speed = 5
throw_range = 20
drop_sound = 'sound/items/drop/metalweapon.ogg'
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2)
max_amount = 60
attack_verb = list("hit", "bludgeoned", "whacked")
color = "#666666"
/obj/item/stack/rods/cyborg
name = "metal rod synthesizer"
desc = "A device that makes metal rods."
gender = NEUTER
matter = null
uses_charge = 1
charge_costs = list(500)
stacktype = /obj/item/stack/rods
no_variants = TRUE
/obj/item/stack/rods/Initialize()
. = ..()
recipes = rods_recipes
update_icon()
/obj/item/stack/rods/update_icon()
var/amount = get_amount()
if((amount <= 5) && (amount > 0))
icon_state = "rods-[amount]"
else
icon_state = "rods"
var/global/list/datum/stack_recipe/rods_recipes = list( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 0),
new/datum/stack_recipe("catwalk", /obj/structure/catwalk, 2, time = 80, one_per_turf = 1, on_floor = 1))
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(get_amount() < 2)
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
return
if(WT.remove_fuel(0,user))
var/obj/item/stack/material/steel/new_item = new(usr.loc)
new_item.add_to_stacks(usr)
for (var/mob/M in viewers(src))
M.show_message("<span class='notice'>[src] is shaped into metal by [user.name] with the weldingtool.</span>", 3, "<span class='notice'>You hear welding.</span>", 2)
var/obj/item/stack/rods/R = src
src = null
var/replace = (user.get_inactive_hand()==R)
R.use(2)
if (!R && replace)
user.put_in_hands(new_item)
return
if (istype(W, /obj/item/weapon/tape_roll))
var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user))
new_splint.add_fingerprint(user)
user.visible_message("<span class='notice'>\The [user] constructs \a [new_splint] out of a [singular_name].</span>", \
"<span class='notice'>You use make \a [new_splint] out of a [singular_name].</span>")
src.use(1)
return
..()
/*
/obj/item/stack/rods/attack_self(mob/user as mob)
src.add_fingerprint(user)
if(!istype(user.loc,/turf)) return 0
if (locate(/obj/structure/grille, usr.loc))
for(var/obj/structure/grille/G in usr.loc)
if (G.destroyed)
G.health = 10
G.density = 1
G.destroyed = 0
G.icon_state = "grille"
use(1)
else
return 1
else if(!in_use)
if(get_amount() < 2)
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
return
to_chat(usr, "<span class='notice'>Assembling grille...</span>")
in_use = 1
if (!do_after(usr, 10))
in_use = 0
return
var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
to_chat(usr, "<span class='notice'>You assemble a grille</span>")
in_use = 0
F.add_fingerprint(usr)
use(2)
return
*/

View File

@@ -0,0 +1,31 @@
/obj/item/stack/material/chitin
name = "chitin"
desc = "The by-product of mob grinding."
icon_state = "chitin"
default_type = MAT_CHITIN
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/xenochitin
name = "alien chitin"
desc = "A piece of the hide of a terrible creature."
singular_name = "alien chitin piece"
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
stacktype = "hide-chitin"
/obj/item/xenos_claw
name = "alien claw"
desc = "The claw of a terrible creature."
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
/obj/item/weed_extract
name = "weed extract"
desc = "A piece of slimy, purplish weed."
icon = 'icons/mob/alien.dmi'
icon_state = "weed_extract"

View File

@@ -0,0 +1,8 @@
/obj/item/stack/material/resin
name = "resin"
icon_state = "sheet-resin"
default_type = "resin"
no_variants = TRUE
apply_colour = TRUE
pass_color = TRUE
strict_color_stacking = TRUE

View File

@@ -0,0 +1,90 @@
/obj/item/stack/animalhide
name = "hide"
desc = "The hide of some creature."
description_info = "Use something <b><font color='red'>sharp</font></b>, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning."
icon_state = "sheet-hide"
drop_sound = 'sound/items/drop/cloth.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
amount = 1
max_amount = 20
stacktype = "hide"
no_variants = TRUE
// This needs to be very clearly documented for players. Whether it should stay in the main description is up for debate.
/obj/item/stack/animalhide/examine(var/mob/user)
. = ..()
. += description_info
//Step one - dehairing.
/obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(has_edge(W) || is_sharp(W))
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
var/scraped = 0
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
//Try locating an exisitng stack on the tile and add to there if possible
var/obj/item/stack/hairlesshide/H = null
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
if(HS.amount < HS.max_amount)
H = HS
break
// Either we found a valid stack, in which case increment amount,
// Or we need to make a new stack
if(istype(H))
H.amount++
else
H = new /obj/item/stack/hairlesshide(user.loc)
// Increment the amount
src.use(1)
scraped++
if(scraped)
to_chat(user, SPAN_NOTICE("You scrape the hair off [scraped] hide\s."))
else
..()
/obj/item/stack/animalhide/human
name = "skin"
desc = "The by-product of sapient farming."
singular_name = "skin piece"
icon_state = "sheet-hide"
no_variants = FALSE
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
stacktype = "hide-human"
/obj/item/stack/animalhide/corgi
name = "corgi hide"
desc = "The by-product of corgi farming."
singular_name = "corgi hide piece"
icon_state = "sheet-corgi"
stacktype = "hide-corgi"
/obj/item/stack/animalhide/cat
name = "cat hide"
desc = "The by-product of cat farming."
singular_name = "cat hide piece"
icon_state = "sheet-cat"
stacktype = "hide-cat"
/obj/item/stack/animalhide/monkey
name = "monkey hide"
desc = "The by-product of monkey farming."
singular_name = "monkey hide piece"
icon_state = "sheet-monkey"
stacktype = "hide-monkey"
/obj/item/stack/animalhide/lizard
name = "lizard skin"
desc = "Sssssss..."
singular_name = "lizard skin piece"
icon_state = "sheet-lizard"
stacktype = "hide-lizard"
/obj/item/stack/animalhide/xeno
name = "alien hide"
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
stacktype = "hide-xeno"

View File

@@ -0,0 +1,48 @@
//Step two - washing..... it's actually in washing machine code, and ere.
/obj/item/stack/hairlesshide
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
description_info = "Get it <b><font color='blue'>wet</font></b> to continue tanning this into leather.<br>\
You could set it in a river, wash it with a sink, or just splash water on it with a bucket."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
no_variants = FALSE
max_amount = 20
stacktype = "hairlesshide"
/obj/item/stack/hairlesshide/examine(var/mob/user)
. = ..()
. += description_info
/obj/item/stack/hairlesshide/water_act(var/wateramount)
. = ..()
wateramount = min(amount, round(wateramount))
for(var/i in 1 to wateramount)
var/obj/item/stack/wetleather/H = null
for(var/obj/item/stack/wetleather/HS in get_turf(src)) // Doesn't have a user, can't just use their loc
if(HS.amount < HS.max_amount)
H = HS
break
// Either we found a valid stack, in which case increment amount,
// Or we need to make a new stack
if(istype(H))
H.amount++
else
H = new /obj/item/stack/wetleather(get_turf(src))
// Increment the amount
src.use(1)
/obj/item/stack/hairlesshide/proc/rapidcure(var/stacknum = 1)
stacknum = min(stacknum, amount)
while(stacknum)
var/obj/item/stack/wetleather/I = new /obj/item/stack/wetleather(get_turf(src))
if(istype(I))
I.dry()
use(1)
stacknum -= 1

View File

@@ -0,0 +1,51 @@
//Step three - drying
/obj/item/stack/wetleather
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried."
description_info = "To finish tanning the leather, you need to dry it. \
You could place it under a <b><font color='red'>fire</font></b>, \
put it in a <b><font color='blue'>drying rack</font></b>, \
or build a <b><font color='brown'>tanning rack</font></b> from steel or wooden boards."
singular_name = "wet leather piece"
icon_state = "sheet-wetleather"
var/wetness = 30 //Reduced when exposed to high temperautres
var/drying_threshold_temperature = 500 //Kelvin to start drying
no_variants = FALSE
max_amount = 20
stacktype = "wetleather"
var/dry_type = /obj/item/stack/material/leather
/obj/item/stack/wetleather/examine(var/mob/user)
. = ..()
. += description_info
. += "\The [src] is [get_dryness_text()]."
/obj/item/stack/wetleather/proc/get_dryness_text()
if(wetness > 20)
return "wet"
if(wetness > 10)
return "damp"
if(wetness)
return "almost dry"
return "dry"
/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature >= drying_threshold_temperature)
wetness--
if(wetness == 0)
dry()
/obj/item/stack/wetleather/proc/dry()
var/obj/item/stack/material/leather/L = new(src.loc)
L.amount = amount
use(amount)
return L
/obj/item/stack/wetleather/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified)
. = ..()
if(.) // If it transfers any, do a weighted average of the wetness
var/obj/item/stack/wetleather/W = S
var/oldamt = W.amount - .
W.wetness = round(((oldamt * W.wetness) + (. * wetness)) / W.amount)

View File

@@ -0,0 +1,70 @@
/obj/structure/tanning_rack
name = "tanning rack"
desc = "A rack used to stretch leather out and hold it taut during the tanning process."
icon = 'icons/obj/kitchen.dmi'
icon_state = "spike"
var/obj/item/stack/wetleather/drying = null
/obj/structure/tanning_rack/Initialize()
. = ..()
START_PROCESSING(SSobj, src) // SSObj fires ~every 2s , starting from wetness 30 takes ~1m
/obj/structure/tanning_rack/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/structure/tanning_rack/process()
if(drying && drying.wetness)
drying.wetness = max(drying.wetness - 1, 0)
if(!drying.wetness)
visible_message("The [drying] is dry!")
update_icon()
/obj/structure/tanning_rack/examine(var/mob/user)
. = ..()
if(drying)
. += "\The [drying] is [drying.get_dryness_text()]."
/obj/structure/tanning_rack/update_icon()
overlays.Cut()
if(drying)
var/image/I
if(drying.wetness)
I = image(icon, "leather_wet")
else
I = image(icon, "leather_dry")
add_overlay(I)
/obj/structure/tanning_rack/attackby(var/atom/A, var/mob/user)
if(istype(A, /obj/item/stack/wetleather))
if(!drying) // If not drying anything, start drying the thing
if(user.unEquip(A, target = src))
drying = A
else // Drying something, add if possible
var/obj/item/stack/wetleather/W = A
W.transfer_to(drying, W.amount, TRUE)
update_icon()
return TRUE
return ..()
/obj/structure/tanning_rack/attack_hand(var/mob/user)
if(drying)
var/obj/item/stack/S = drying
if(!drying.wetness) // If it's dry, make a stack of dry leather and prepare to put that in their hands
var/obj/item/stack/material/leather/L = new(src)
L.amount = drying.amount
drying.use(drying.amount)
S = L
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(!H.put_in_any_hand_if_possible(S))
S.forceMove(get_turf(src))
else
S.forceMove(get_turf(src))
drying = null
update_icon()
/obj/structure/tanning_rack/attack_robot(var/mob/user)
attack_hand(user) // That has checks to

View File

@@ -0,0 +1,23 @@
/obj/item/stack/material/leather
name = "leather"
desc = "The by-product of mob grinding."
icon_state = "sheet-leather"
default_type = MAT_LEATHER
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
/obj/item/stack/material/cloth
name = "cloth"
icon_state = "sheet-cloth"
default_type = "cloth"
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/stack/material/cloth/diyaab
color = "#c6ccf0"

View File

@@ -0,0 +1,55 @@
/obj/item/stack/material/wood
name = "wooden plank"
icon_state = "sheet-wood"
default_type = MAT_WOOD
strict_color_stacking = TRUE
apply_colour = 1
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'
no_variants = FALSE
/obj/item/stack/material/wood/sif
name = "alien wooden plank"
color = "#0099cc"
default_type = MAT_SIFWOOD
/obj/item/stack/material/log
name = "log"
icon_state = "sheet-log"
default_type = MAT_LOG
no_variants = FALSE
color = "#824B28"
max_amount = 25
w_class = ITEMSIZE_HUGE
description_info = "Use inhand to craft things, or use a sharp and edged object on this to convert it into two wooden planks."
var/plank_type = /obj/item/stack/material/wood
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'
/obj/item/stack/material/log/sif
name = "alien log"
default_type = MAT_SIFLOG
color = "#0099cc"
plank_type = /obj/item/stack/material/wood/sif
/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
if(!istype(W) || W.force <= 0)
return ..()
if(W.sharp && W.edge)
var/time = (3 SECONDS / max(W.force / 10, 1)) * W.toolspeed
user.setClickCooldown(time)
if(do_after(user, time, src) && use(1))
to_chat(user, "<span class='notice'>You cut up a log into planks.</span>")
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
var/obj/item/stack/material/wood/existing_wood = null
for(var/obj/item/stack/material/wood/M in user.loc)
if(M.material.name == src.material.name)
existing_wood = M
break
var/obj/item/stack/material/wood/new_wood = new plank_type(user.loc)
new_wood.amount = 2
if(existing_wood && new_wood.transfer_to(existing_wood))
to_chat(user, "<span class='notice'>You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.</span>")
else
return ..()

View File

@@ -0,0 +1,15 @@
/obj/item/stack/material/plastic
name = "plastic"
icon_state = "sheet-plastic"
default_type = "plastic"
no_variants = FALSE
/obj/item/stack/material/cardboard
name = "cardboard"
icon_state = "sheet-card"
default_type = "cardboard"
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/cardboardbox.ogg'
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'

View File

@@ -0,0 +1,16 @@
// Ok, technically not stones, but the snowbrick's function is similar to sandstone and marble
/obj/item/stack/material/snow
name = "snow"
desc = "The temptation to build a snowman rises."
icon_state = "sheet-snow"
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
default_type = "snow"
/obj/item/stack/material/snowbrick
name = "snow brick"
desc = "For all of your igloo building needs."
icon_state = "sheet-snowbrick"
default_type = "packed snow"
drop_sound = 'sound/items/drop/gloves.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'

View File

@@ -0,0 +1,15 @@
/obj/item/stack/material/sandstone
name = "sandstone brick"
icon_state = "sheet-sandstone"
default_type = "sandstone"
no_variants = FALSE
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'
/obj/item/stack/material/marble
name = "marble brick"
icon_state = "sheet-marble"
default_type = "marble"
no_variants = FALSE
drop_sound = 'sound/items/drop/boots.ogg'
pickup_sound = 'sound/items/pickup/boots.ogg'

View File

@@ -0,0 +1,55 @@
// Forged in the equivalent of Hell, one piece at a time.
/obj/item/stack/material/supermatter
name = MAT_SUPERMATTER
icon_state = "sheet-super"
item_state = "diamond"
default_type = MAT_SUPERMATTER
apply_colour = TRUE
/obj/item/stack/material/supermatter/proc/update_mass() // Due to how dangerous they can be, the item will get heavier and larger the more are in the stack.
slowdown = amount / 10
w_class = min(5, round(amount / 10) + 1)
throw_range = round(amount / 7) + 1
/obj/item/stack/material/supermatter/use(var/used)
. = ..()
update_mass()
return
/obj/item/stack/material/supermatter/attack_hand(mob/user)
. = ..()
update_mass()
SSradiation.radiate(src, 5 + amount)
var/mob/living/M = user
if(!istype(M))
return
var/burn_user = TRUE
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
var/obj/item/clothing/gloves/G = H.gloves
if(istype(G) && ((G.flags & THICKMATERIAL && prob(70)) || istype(G, /obj/item/clothing/gloves/gauntlets)))
burn_user = FALSE
if(burn_user)
H.visible_message("<span class='danger'>\The [src] flashes as it scorches [H]'s hands!</span>")
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon="Supermatter Chunk")
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon="Supermatter Chunk")
H.drop_from_inventory(src, get_turf(H))
return
if(istype(user, /mob/living/silicon/robot))
burn_user = FALSE
if(burn_user)
M.apply_damage(amount, BURN, null, used_weapon="Supermatter Chunk")
/obj/item/stack/material/supermatter/ex_act(severity) // An incredibly hard to manufacture material, SM chunks are unstable by their 'stabilized' nature.
if(prob((4 / severity) * 20))
SSradiation.radiate(get_turf(src), amount * 4)
explosion(get_turf(src),round(amount / 12) , round(amount / 6), round(amount / 3), round(amount / 25))
qdel(src)
return
SSradiation.radiate(get_turf(src), amount * 2)
..()

View File

@@ -1,19 +1,19 @@
/**********************Input and output plates**************************/
/obj/machinery/mineral/input
icon = 'icons/mob/screen1.dmi'
icon_state = "x2"
name = "Input area"
density = 0
anchored = 1.0
New()
icon_state = "blank"
/obj/machinery/mineral/output
icon = 'icons/mob/screen1.dmi'
icon_state = "x"
name = "Output area"
density = 0
anchored = 1.0
New()
/**********************Input and output plates**************************/
/obj/machinery/mineral/input
icon = 'icons/mob/screen1.dmi'
icon_state = "x2"
name = "Input area"
density = 0
anchored = 1.0
New()
icon_state = "blank"
/obj/machinery/mineral/output
icon = 'icons/mob/screen1.dmi'
icon_state = "x"
name = "Output area"
density = 0
anchored = 1.0
New()
icon_state = "blank"

View File

@@ -49,7 +49,7 @@ var/list/mining_overlay_cache = list()
var/datum/artifact_find/artifact_find
var/ignore_mapgen
var/ore_types = list(
var/static/list/ore_types = list(
"hematite" = /obj/item/weapon/ore/iron,
"uranium" = /obj/item/weapon/ore/uranium,
"gold" = /obj/item/weapon/ore/gold,

View File

@@ -18,6 +18,7 @@
EQUIPMENT("Defense Equipment - Plasteel Machete", /obj/item/weapon/material/knife/machete, 50),
EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100),
EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 150),
EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 750),
EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
EQUIPMENT("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100),
EQUIPMENT("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750),
@@ -47,6 +48,7 @@
prize_list["Digging Tools"] = list(
EQUIPMENT("Survey Tools - Shovel", /obj/item/weapon/shovel, 40),
EQUIPMENT("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50),
EQUIPMENT("Survey Tools - Binoculars", /obj/item/device/binoculars,40),
)
prize_list["Miscellaneous"] = list(
EQUIPMENT("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 10),

View File

@@ -11,6 +11,7 @@
wait_if_pulled = 1
min_target_dist = 0
var/vocal = 1
var/cleaning = 0
var/wet_floors = 0
var/spray_blood = 0
@@ -27,7 +28,7 @@
return ..()
/mob/living/bot/cleanbot/handleIdle()
if(!wet_floors && !spray_blood && prob(2))
if(!wet_floors && !spray_blood && vocal && prob(2))
custom_emote(2, "makes an excited booping sound!")
playsound(src, 'sound/machines/synth_yes.ogg', 50, 0)
@@ -164,9 +165,10 @@
data["on"] = on
data["open"] = open
data["locked"] = locked
data["blood"] = blood
data["patrol"] = will_patrol
data["vocal"] = vocal
data["wet_floors"] = wet_floors
data["spray_blood"] = spray_blood
@@ -193,6 +195,9 @@
will_patrol = !will_patrol
patrol_path = null
. = TRUE
if("vocal")
vocal = !vocal
. = TRUE
if("wet_floors")
wet_floors = !wet_floors
to_chat(usr, "<span class='notice'>You twiddle the screw.</span>")

View File

@@ -12,6 +12,7 @@
patrol_speed = 3
target_speed = 6
vocal = 1
cleaning = 0
blood = 0
var/red_switch = 0
@@ -25,7 +26,7 @@
icon_state = "edCLN[on]"
/mob/living/bot/cleanbot/edCLN/handleIdle()
if(prob(10))
if(vocal && prob(10))
custom_emote(2, "makes a less than thrilled beeping sound.")
playsound(src, 'sound/machines/synth_yes.ogg', 50, 0)

View File

@@ -96,9 +96,18 @@
turn_on()
. = TRUE
switch(action)
if("power")
if(!access_scanner.allowed(src))
return FALSE
if(on)
turn_off()
else
turn_on()
. = TRUE
if(locked)
return TRUE
switch(action)
if("water")
waters_trays = !waters_trays

View File

@@ -12,6 +12,7 @@
wait_if_pulled = 1
min_target_dist = 0
var/vocal = 1
var/amount = 10 // 1 for tile, 2 for lattice
var/maxAmount = 60
var/tilemake = 0 // When it reaches 100, bot makes a tile
@@ -41,7 +42,8 @@
data["on"] = on
data["open"] = open
data["locked"] = locked
data["vocal"] = vocal
data["amount"] = amount
data["possible_bmode"] = list("NORTH", "EAST", "SOUTH", "WEST")
@@ -56,7 +58,6 @@
data["eattiles"] = eattiles
data["maketiles"] = maketiles
data["bmode"] = dir2text(targetdirection)
return data
/mob/living/bot/floorbot/attack_hand(var/mob/user)
@@ -74,8 +75,8 @@
/mob/living/bot/floorbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
add_fingerprint(usr)
add_fingerprint(src)
switch(action)
if("start")
@@ -84,11 +85,14 @@
else
turn_on()
. = TRUE
if(locked && !issilicon(usr))
return
switch(action)
if("vocal")
vocal = !vocal
. = TRUE
if("improve")
improvefloors = !improvefloors
. = TRUE
@@ -108,7 +112,7 @@
tilemake = 0
addTiles(1)
if(prob(1))
if(vocal && prob(1))
custom_emote(2, "makes an excited beeping sound!")
playsound(src, 'sound/machines/twobeep.ogg', 50, 0)

View File

@@ -313,7 +313,6 @@
declare_treatment = !declare_treatment
. = TRUE
/mob/living/bot/medbot/emag_act(var/remaining_uses, var/mob/user)
. = ..()
if(!emagged)

View File

@@ -70,17 +70,16 @@
ui.open()
/mob/living/bot/mulebot/tgui_data(mob/user)
var/list/data = list(
"suffix" = suffix,
"power" = on,
"issilicon" = issilicon(user),
"load" = load,
"locked" = locked,
"auto_return" = auto_return,
"crates_only" = crates_only,
"hatch" = open,
"safety" = safety,
)
var/list/data = ..()
data["suffix"] = suffix
data["power"] = on
data["issillicon"] = issilicon(user)
data["load"] = load
data["locked"] = locked
data["auto_return"] = auto_return
data["crates_only"] = crates_only
data["hatch"] = open
data["safety"] = safety
return data
/mob/living/bot/mulebot/tgui_act(action, params)

View File

@@ -109,6 +109,7 @@
data["check_arrest"] = null
data["arrest_type"] = null
data["declare_arrests"] = null
data["bot_patrolling"] = null
data["will_patrol"] = null
if(!locked || issilicon(user))
@@ -117,8 +118,8 @@
data["check_arrest"] = check_arrest
data["arrest_type"] = arrest_type
data["declare_arrests"] = declare_arrests
if(using_map.bot_patrolling)
data["will_patrol"] = will_patrol
data["bot_patrolling"] = using_map.bot_patrolling
data["patrol"] = will_patrol
return data
@@ -128,7 +129,7 @@
/mob/living/bot/secbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return
add_fingerprint(usr)
switch(action)

View File

@@ -165,12 +165,14 @@
return ..()
/mob/living/simple_mob/protean_blob/adjustBruteLoss(var/amount)
amount *= 1.5
if(humanform)
return humanform.adjustBruteLoss(amount)
else
return ..()
/mob/living/simple_mob/protean_blob/adjustFireLoss(var/amount)
amount *= 1.5
if(humanform)
return humanform.adjustFireLoss(amount)
else

View File

@@ -328,8 +328,8 @@ CHOMP Removal end*/
material_name = MAT_STEEL
/datum/modifier/protean/steel/tick()
holder.adjustBruteLoss(-2,include_robo = TRUE) //Looks high, but these ARE modified by species resistances, so this is really 20% of this
holder.adjustFireLoss(-1,include_robo = TRUE) //And this is really double this
holder.adjustBruteLoss(-1,include_robo = TRUE) //Modified by species resistances
holder.adjustFireLoss(-0.5,include_robo = TRUE) //Modified by species resistances
var/mob/living/carbon/human/H = holder
for(var/organ in H.internal_organs)
var/obj/item/organ/O = organ

View File

@@ -86,6 +86,7 @@
icon_state = "[icon_dead]-[vore_fullness]"
else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest && (vore_icons & SA_ICON_REST))
icon_state = "[icon_rest]-[vore_fullness]"
update_transform()
/mob/living/simple_mob/proc/will_eat(var/mob/living/M)
if(client) //You do this yourself, dick!

View File

@@ -257,14 +257,15 @@
desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
icon = 'icons/obj/gun_vr.dmi'
icon_state = "carbinekill"
item_state = "retro"
item_state = "energykill"
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi')
phase_power = 150
modifystate = "carbinekill"
//CHOMP Edit: Changed beam type to new phaser beam type.
firemodes = list(
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/phaser, modifystate="carbinekill", charge_cost = 300),
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/phaser/light, modifystate="carbinestun", charge_cost = 60),
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/phaser/light, modifystate="carbinestun", charge_cost = 80),
)
/obj/item/weapon/gun/energy/locked/frontier/carbine/update_icon()
@@ -322,12 +323,12 @@
scoped_accuracy = 40
one_handed_penalty = 50 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
phase_power = 150 //efficient crank charger
projectile_type = /obj/item/projectile/beam/phaser/heavy //CHOMPEdit
modifystate = "riflekill"
//CHOMP Edit: Changed beam type to new phaser beam type.
firemodes = list(
list(mode_name="sniper", fire_delay=35, projectile_type=/obj/item/projectile/beam/sniper, modifystate="riflekill", charge_cost = 600),
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="riflestun", charge_cost = 200),
list(mode_name="sniper", fire_delay=35, projectile_type=/obj/item/projectile/beam/phaser/heavy, modifystate="riflekill", charge_cost = 600),
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/phaser, modifystate="riflestun", charge_cost = 200),
)
/obj/item/weapon/gun/energy/locked/frontier/rifle/ui_action_click()

View File

@@ -731,7 +731,6 @@
required_reagents = list("frostoil" = 100, "hydrogen" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/mhydrogen
// These are from Xenobio.
/datum/chemical_reaction/solidification/steel
name = "Solid Steel"

View File

@@ -299,4 +299,17 @@
id = "hachi"
result = "hachi"
required_reagents = list("burbon" = 2, "sake" = 1, "lemonjuice" = 1, "mushroom" = 1)
result_amount = 5
result_amount = 5
// Frost oil reactions for material sheets
/datum/chemical_reaction/solidification/aluminium
name = "Solid Aluminium"
id = "solidaluminium"
required_reagents = list("frostoil" = 5, "aluminum" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/aluminium
/datum/chemical_reaction/solidification/copper
name = "Solid Copper"
id = "solidcopper"
required_reagents = list("frostoil" = 5, "copper" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/copper