mirror of
https://github.com/KabKebab/GS13.git
synced 2026-08-24 13:36:15 +01:00
Ports reagents id removal and typepath usage.
This commit is contained in:
@@ -1,83 +1,83 @@
|
||||
/***************************************************************
|
||||
** Design Datums **
|
||||
** All the data for building stuff. **
|
||||
***************************************************************/
|
||||
/*
|
||||
For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent,
|
||||
you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum),
|
||||
they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents.
|
||||
The currently supporting non-reagent materials. All material amounts are set as the define MINERAL_MATERIAL_AMOUNT, which defaults to 2000
|
||||
- MAT_METAL (/obj/item/stack/metal).
|
||||
- MAT_GLASS (/obj/item/stack/glass).
|
||||
- MAT_PLASMA (/obj/item/stack/plasma).
|
||||
- MAT_SILVER (/obj/item/stack/silver).
|
||||
- MAT_GOLD (/obj/item/stack/gold).
|
||||
- MAT_URANIUM (/obj/item/stack/uranium).
|
||||
- MAT_DIAMOND (/obj/item/stack/diamond).
|
||||
- MAT_BANANIUM (/obj/item/stack/bananium).
|
||||
(Insert new ones here)
|
||||
|
||||
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
|
||||
|
||||
Design Guidelines
|
||||
- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed.
|
||||
- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for
|
||||
other types of metals and chemistry for reagents).
|
||||
- Add the AUTOLATHE tag to
|
||||
*/
|
||||
|
||||
//DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING! //why are you yelling?
|
||||
|
||||
/datum/design //Datum for object designs, used in construction
|
||||
var/name = "Name" //Name of the created object.
|
||||
var/desc = "Desc" //Description of the created object.
|
||||
var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols
|
||||
var/build_type = null //Flag as to what kind machine the design is built in. See defines.
|
||||
var/list/materials = list() //List of materials. Format: "id" = amount.
|
||||
var/construction_time //Amount of time required for building the object
|
||||
var/build_path = null //The file path of the object that gets created
|
||||
var/list/make_reagents = list() //Reagents produced. Format: "id" = amount. Currently only supported by the biogenerator.
|
||||
var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything
|
||||
var/list/reagents_list = list() //List of reagents. Format: "id" = amount.
|
||||
var/maxstack = 1
|
||||
var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe
|
||||
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
|
||||
var/departmental_flags = ALL //bitflags for deplathes.
|
||||
var/list/datum/techweb_node/unlocked_by = list()
|
||||
var/research_icon //Replaces the item icon in the research console
|
||||
var/research_icon_state
|
||||
var/icon_cache
|
||||
|
||||
/datum/design/Destroy()
|
||||
CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.")
|
||||
return ..()
|
||||
|
||||
/datum/design/proc/icon_html(client/user)
|
||||
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
sheet.send(user)
|
||||
return sheet.icon_tag(id)
|
||||
|
||||
////////////////////////////////////////
|
||||
//Disks for transporting design datums//
|
||||
////////////////////////////////////////
|
||||
|
||||
/obj/item/disk/design_disk
|
||||
name = "Component Design Disk"
|
||||
desc = "A disk for storing device design data for construction in lathes."
|
||||
icon_state = "datadisk1"
|
||||
materials = list(MAT_METAL=300, MAT_GLASS=100)
|
||||
var/list/blueprints = list()
|
||||
var/max_blueprints = 1
|
||||
|
||||
/obj/item/disk/design_disk/Initialize()
|
||||
. = ..()
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
for(var/i in 1 to max_blueprints)
|
||||
blueprints += null
|
||||
|
||||
/obj/item/disk/design_disk/adv
|
||||
name = "Advanced Component Design Disk"
|
||||
desc = "A disk for storing device design data for construction in lathes. This one has extra storage space."
|
||||
materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER = 50)
|
||||
max_blueprints = 5
|
||||
/***************************************************************
|
||||
** Design Datums **
|
||||
** All the data for building stuff. **
|
||||
***************************************************************/
|
||||
/*
|
||||
For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent,
|
||||
you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum),
|
||||
they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents.
|
||||
The currently supporting non-reagent materials. All material amounts are set as the define MINERAL_MATERIAL_AMOUNT, which defaults to 2000
|
||||
- MAT_METAL (/obj/item/stack/metal).
|
||||
- MAT_GLASS (/obj/item/stack/glass).
|
||||
- MAT_PLASMA (/obj/item/stack/plasma).
|
||||
- MAT_SILVER (/obj/item/stack/silver).
|
||||
- MAT_GOLD (/obj/item/stack/gold).
|
||||
- MAT_URANIUM (/obj/item/stack/uranium).
|
||||
- MAT_DIAMOND (/obj/item/stack/diamond).
|
||||
- MAT_BANANIUM (/obj/item/stack/bananium).
|
||||
(Insert new ones here)
|
||||
|
||||
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
|
||||
|
||||
Design Guidelines
|
||||
- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed.
|
||||
- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for
|
||||
other types of metals and chemistry for reagents).
|
||||
- Add the AUTOLATHE tag to
|
||||
*/
|
||||
|
||||
//DESIGNS ARE GLOBAL. DO NOT CREATE OR DESTROY THEM AT RUNTIME OUTSIDE OF INIT, JUST REFERENCE THEM TO WHATEVER YOU'RE DOING! //why are you yelling?
|
||||
|
||||
/datum/design //Datum for object designs, used in construction
|
||||
var/name = "Name" //Name of the created object.
|
||||
var/desc = "Desc" //Description of the created object.
|
||||
var/id = DESIGN_ID_IGNORE //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols
|
||||
var/build_type = null //Flag as to what kind machine the design is built in. See defines.
|
||||
var/list/materials = list() //List of materials. Format: "id" = amount.
|
||||
var/construction_time //Amount of time required for building the object
|
||||
var/build_path = null //The file path of the object that gets created
|
||||
var/list/make_reagents = list() //Reagents produced. Format: type = amount. Currently only supported by the biogenerator.
|
||||
var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything
|
||||
var/list/reagents_list = list() //List of reagents. Format: type = amount.
|
||||
var/maxstack = 1
|
||||
var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe
|
||||
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
|
||||
var/departmental_flags = ALL //bitflags for deplathes.
|
||||
var/list/datum/techweb_node/unlocked_by = list()
|
||||
var/research_icon //Replaces the item icon in the research console
|
||||
var/research_icon_state
|
||||
var/icon_cache
|
||||
|
||||
/datum/design/Destroy()
|
||||
CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.")
|
||||
return ..()
|
||||
|
||||
/datum/design/proc/icon_html(client/user)
|
||||
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
sheet.send(user)
|
||||
return sheet.icon_tag(id)
|
||||
|
||||
////////////////////////////////////////
|
||||
//Disks for transporting design datums//
|
||||
////////////////////////////////////////
|
||||
|
||||
/obj/item/disk/design_disk
|
||||
name = "Component Design Disk"
|
||||
desc = "A disk for storing device design data for construction in lathes."
|
||||
icon_state = "datadisk1"
|
||||
materials = list(MAT_METAL=300, MAT_GLASS=100)
|
||||
var/list/blueprints = list()
|
||||
var/max_blueprints = 1
|
||||
|
||||
/obj/item/disk/design_disk/Initialize()
|
||||
. = ..()
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
for(var/i in 1 to max_blueprints)
|
||||
blueprints += null
|
||||
|
||||
/obj/item/disk/design_disk/adv
|
||||
name = "Advanced Component Design Disk"
|
||||
desc = "A disk for storing device design data for construction in lathes. This one has extra storage space."
|
||||
materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER = 50)
|
||||
max_blueprints = 5
|
||||
|
||||
@@ -151,97 +151,97 @@
|
||||
name = "Export Design (Wine)"
|
||||
desc = "Allows for the blowing, and bottling of Wine bottles."
|
||||
id = "wine_export"
|
||||
reagents_list = list("wine" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/wine = 100)
|
||||
build_path = /obj/item/export/bottle/wine
|
||||
|
||||
/datum/design/bottle/export/rum
|
||||
name = "Export Design (Rum)"
|
||||
desc = "Allows for the blowing, and bottling of Rum bottles."
|
||||
id = "rum_export"
|
||||
reagents_list = list("rum" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/rum = 100)
|
||||
build_path = /obj/item/export/bottle/rum
|
||||
|
||||
/datum/design/bottle/export/gin
|
||||
name = "Export Design (Gin)"
|
||||
desc = "Allows for the blowing, and bottling of Gin bottles."
|
||||
id = "gin_export"
|
||||
reagents_list = list("gin" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/gin = 100)
|
||||
build_path = /obj/item/export/bottle/gin
|
||||
|
||||
/datum/design/bottle/export/whiskey
|
||||
name = "Export Design (Whiskey)"
|
||||
desc = "Allows for the blowing, and bottling of Whiskey bottles."
|
||||
id = "whiskey_export"
|
||||
reagents_list = list("whiskey" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/whiskey = 100)
|
||||
build_path = /obj/item/export/bottle/whiskey
|
||||
|
||||
/datum/design/bottle/export/vodka
|
||||
name = "Export Design (Vodka)"
|
||||
desc = "Allows for the blowing, and bottling of 99% Vodka bottles."
|
||||
id = "vodka_export"
|
||||
reagents_list = list("vodka" = 99, "water" = 1)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/vodka = 99, /datum/reagent/water = 1)
|
||||
build_path = /obj/item/export/bottle/vodka
|
||||
|
||||
/datum/design/bottle/export/tequila
|
||||
name = "Export Design (Tequila)"
|
||||
desc = "Allows for the blowing, and bottling of Tequila bottles."
|
||||
id = "tequila_export"
|
||||
reagents_list = list("tequila" = 80, "lemon_juice" = 20)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/tequila = 80, /datum/reagent/consumable/lemonjuice = 20)
|
||||
build_path = /obj/item/export/bottle/tequila
|
||||
|
||||
/datum/design/bottle/export/patron
|
||||
name = "Export Design (Patron)"
|
||||
desc = "Allows for the blowing, and bottling of Patron bottles."
|
||||
id = "patron_export"
|
||||
reagents_list = list("patron" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/patron = 100)
|
||||
build_path = /obj/item/export/bottle/patron
|
||||
|
||||
/datum/design/bottle/export/kahlua
|
||||
name = "Export Design (Kahlua)"
|
||||
desc = "Allows for the blowing, and bottling of Kahlua bottles."
|
||||
id = "kahlua_export"
|
||||
reagents_list = list("kahlua" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/kahlua = 100)
|
||||
build_path = /obj/item/export/bottle/kahlua
|
||||
|
||||
/datum/design/bottle/export/sake
|
||||
name = "Export Design (Sake)"
|
||||
desc = "Allows for the blowing, and bottling of Sake bottles."
|
||||
id = "sake_export"
|
||||
reagents_list = list("sake" = 80, "rice" = 10, "sugar" = 10)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/sake = 80, /datum/reagent/consumable/rice = 10, /datum/reagent/consumable/sugar = 10)
|
||||
build_path = /obj/item/export/bottle/sake
|
||||
|
||||
/datum/design/bottle/export/vermouth
|
||||
name = "Export Design (Vermouth)"
|
||||
desc = "Allows for the blowing, and bottling of Vermouth bottles."
|
||||
id = "vermouth_export"
|
||||
reagents_list = list("vermouth" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/vermouth = 100)
|
||||
build_path = /obj/item/export/bottle/vermouth
|
||||
|
||||
/datum/design/bottle/export/goldschlager
|
||||
name = "Export Design (Goldschlager)"
|
||||
desc = "Allows for the blowing, and bottling of Goldschlager bottles."
|
||||
id = "goldschlager_export"
|
||||
reagents_list = list("goldschlager" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/goldschlager = 100)
|
||||
build_path = /obj/item/export/bottle/goldschlager
|
||||
|
||||
/datum/design/bottle/export/hcider
|
||||
name = "Export Design (Cider)"
|
||||
desc = "Allows for the blowing, and bottling of Cider bottles."
|
||||
id = "hcider_export"
|
||||
reagents_list = list("hcider" = 30, "water" = 20)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/hcider = 30, /datum/reagent/water = 20)
|
||||
build_path = /obj/item/export/bottle/hcider
|
||||
|
||||
/datum/design/bottle/export/cognac
|
||||
name = "Export Design (Cognac)"
|
||||
desc = "Allows for the blowing, and bottling of Cognac bottles."
|
||||
id = "cognac_export"
|
||||
reagents_list = list("cognac" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/cognac = 100)
|
||||
build_path = /obj/item/export/bottle/cognac
|
||||
|
||||
/datum/design/bottle/export/absinthe
|
||||
name = "Export Design (Absinthe)"
|
||||
desc = "Allows for the blowing, and bottling of Absinthe bottles."
|
||||
reagents_list = list("absinthe" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/absinthe = 100)
|
||||
id = "absinthe_export"
|
||||
build_path = /obj/item/export/bottle/absinthe
|
||||
|
||||
@@ -249,49 +249,49 @@
|
||||
name = "Export Design (Grappa)"
|
||||
desc = "Allows for the blowing, and bottling of Grappa bottles."
|
||||
id = "grappa_export"
|
||||
reagents_list = list("grappa" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/grappa = 100)
|
||||
build_path = /obj/item/export/bottle/grappa
|
||||
|
||||
/datum/design/bottle/export/fernet
|
||||
name = "Export Design (Fernet)"
|
||||
desc = "Allows for the blowing, and bottling of Fernet bottles."
|
||||
id = "fernet_export"
|
||||
reagents_list = list("fernet" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/fernet = 100)
|
||||
build_path = /obj/item/export/bottle/fernet
|
||||
|
||||
/datum/design/bottle/export/applejack
|
||||
name = "Export Design (Applejack)"
|
||||
desc = "Allows for the blowing, and bottling of Applejack bottles."
|
||||
id = "applejack_export"
|
||||
reagents_list = list("applejack" = 50, "gin" = 10)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/applejack = 50, /datum/reagent/consumable/ethanol/gin = 10)
|
||||
build_path = /obj/item/export/bottle/applejack
|
||||
|
||||
/datum/design/bottle/export/champagne
|
||||
name = "Export Design (Champagne)"
|
||||
desc = "Allows for the blowing, and bottling of Champagne bottles."
|
||||
id = "champagne_export"
|
||||
reagents_list = list("champagne" = 90, "co2" = 10)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/champagne = 90, /datum/reagent/carbondioxide = 10)
|
||||
build_path = /obj/item/export/bottle/champagne
|
||||
|
||||
/datum/design/bottle/export/blazaam
|
||||
name = "Export Design (Blazaam)"
|
||||
desc = "Allows for the blowing, and bottling of Blazaam bottles."
|
||||
id = "blazaam_export"
|
||||
reagents_list = list("blazaam" = 80, "holywater" = 20)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/blazaam = 80, /datum/reagent/water/holywater = 20)
|
||||
build_path = /obj/item/export/bottle/blazaam
|
||||
|
||||
/datum/design/bottle/export/trappist
|
||||
name = "Export Design (Trappist)"
|
||||
desc = "Allows for the blowing, and bottling of Trappist bottles."
|
||||
id = "trappist_export"
|
||||
reagents_list = list("trappist" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/trappist = 100)
|
||||
build_path = /obj/item/export/bottle/trappist
|
||||
|
||||
/datum/design/bottle/export/grenadine
|
||||
name = "Export Design (Grenadine)"
|
||||
desc = "Allows for the blowing, and bottling of Grenadine bottles."
|
||||
id = "grenadine_export"
|
||||
reagents_list = list("grenadine" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/grenadine = 100)
|
||||
build_path = /obj/item/export/bottle/grenadine
|
||||
|
||||
/datum/design/bottle/export/minikeg
|
||||
@@ -299,7 +299,7 @@
|
||||
desc = "Allows for the fabication, and bottling of Minikeg of craft beer."
|
||||
id = "minikeg"
|
||||
category = list("Beers")
|
||||
reagents_list = list("light_beer" = 100)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/beer/light = 100)
|
||||
build_path = /obj/item/export/bottle/minikeg
|
||||
|
||||
/datum/design/bottle/export/blooddrop
|
||||
@@ -307,7 +307,7 @@
|
||||
desc = "Allows for the blowing, and bottling of Blooddrop bottles."
|
||||
id = "blooddrop"
|
||||
category = list("Wines")
|
||||
reagents_list = list("champagne" = 30, "co2" = 30, "wine" = 10, "grapejuice" = 30)
|
||||
reagents_list = list(/datum/reagent/consumable/ethanol/champagne = 30, /datum/reagent/carbondioxide = 30, /datum/reagent/consumable/ethanol/wine = 10, /datum/reagent/consumable/grapejuice = 30)
|
||||
build_path = /obj/item/export/bottle/blooddrop
|
||||
|
||||
/datum/design/bottle/export/slim_gold
|
||||
@@ -315,7 +315,7 @@
|
||||
desc = "Allows for the blowing, and bottling of Slim Gold bottles."
|
||||
id = "slim_gold"
|
||||
category = list("Beers")
|
||||
reagents_list = list("gold" = 10, "co2" = 10, "rum" = 30, "beer" = 40)
|
||||
reagents_list = list(/datum/reagent/gold = 10, /datum/reagent/carbondioxide = 10, /datum/reagent/consumable/ethanol/rum = 30, /datum/reagent/consumable/ethanol/beer = 40)
|
||||
build_path = /obj/item/export/bottle/slim_gold
|
||||
|
||||
/datum/design/bottle/export/white_bloodmoon
|
||||
@@ -323,13 +323,13 @@
|
||||
desc = "Allows for the blowing, and bottling of White Bloodmoon bottles."
|
||||
id = "white_bloodmoon"
|
||||
category = list("Wines")
|
||||
reagents_list = list("synthflesh" = 50, "blood" = 50, "liquidgibs" = 10)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 50, /datum/reagent/blood = 50, /datum/reagent/liquidgibs = 10)
|
||||
build_path = /obj/item/export/bottle/white_bloodmoon
|
||||
|
||||
/datum/design/bottle/export/greenroad
|
||||
name = "Export Design (Greenroad)"
|
||||
desc = "Allows for the blowing, and bottling of Greenroad bottles."
|
||||
id = "greenroad"
|
||||
reagents_list = list("vitfro" = 50, "rum" = 50, "ash" = 10)
|
||||
reagents_list = list(/datum/reagent/consumable/vitfro = 50, /datum/reagent/consumable/ethanol/rum = 50, /datum/reagent/ash = 10)
|
||||
category = list("Beers")
|
||||
build_path = /obj/item/export/bottle/greenroad
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
id = "milk"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 20)
|
||||
make_reagents = list("milk" = 10)
|
||||
make_reagents = list(/datum/reagent/consumable/milk = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/cream
|
||||
@@ -15,7 +15,7 @@
|
||||
id = "cream"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 30)
|
||||
make_reagents = list("cream" = 10)
|
||||
make_reagents = list(/datum/reagent/consumable/cream = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/milk_carton
|
||||
@@ -39,7 +39,7 @@
|
||||
id = "black_pepper"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 25)
|
||||
make_reagents = list("blackpepper" = 10)
|
||||
make_reagents = list(/datum/reagent/consumable/blackpepper = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/pepper_mill
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name = "Left Arm"
|
||||
id = "leftarm"
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 25)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/l_arm
|
||||
category = list("initial","human","lizard","fly","moth","plasmaman")
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
name = "Right Arm"
|
||||
id = "rightarm"
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 25)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/r_arm
|
||||
category = list("initial","human","lizard","fly","moth","plasmaman")
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
name = "Left Leg"
|
||||
id = "leftleg"
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 25)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/l_leg
|
||||
category = list("initial","human","lizard","fly","moth","plasmaman")
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
name = "Right Leg"
|
||||
id = "rightleg"
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 25)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/r_leg
|
||||
category = list("initial","human","lizard","fly","moth","plasmaman")
|
||||
|
||||
@@ -38,6 +38,6 @@
|
||||
name = "Arm Blade"
|
||||
id = "armblade"
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list("synthflesh" = 75)
|
||||
reagents_list = list(/datum/reagent/medicine/synthflesh = 75)
|
||||
build_path = /obj/item/melee/synthetic_arm_blade
|
||||
category = list("other","emagged")
|
||||
@@ -231,7 +231,7 @@
|
||||
id = "decloner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000)
|
||||
reagents_list = list("mutagen" = 40)
|
||||
reagents_list = list(/datum/reagent/toxin/mutagen = 40)
|
||||
build_path = /obj/item/gun/energy/decloner
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
@@ -262,7 +262,7 @@
|
||||
id = "flora_gun"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_GLASS = 500)
|
||||
reagents_list = list("radium" = 20)
|
||||
reagents_list = list(/datum/reagent/radium = 20)
|
||||
build_path = /obj/item/gun/energy/floragun
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,364 +1,364 @@
|
||||
/obj/machinery/rnd/production
|
||||
name = "technology fabricator"
|
||||
desc = "Makes researched and prototype items with materials and energy."
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/consoleless_interface = FALSE //Whether it can be used without a console.
|
||||
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
|
||||
var/list/categories = list()
|
||||
var/datum/component/remote_materials/materials
|
||||
var/allowed_department_flags = ALL
|
||||
var/production_animation //What's flick()'d on print.
|
||||
var/allowed_buildtypes = NONE
|
||||
var/list/datum/design/cached_designs
|
||||
var/list/datum/design/matching_designs
|
||||
var/department_tag = "Unidentified" //used for material distribution among other things.
|
||||
var/datum/techweb/stored_research
|
||||
var/datum/techweb/host_research
|
||||
|
||||
var/screen = RESEARCH_FABRICATOR_SCREEN_MAIN
|
||||
var/selected_category
|
||||
|
||||
/obj/machinery/rnd/production/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(0, OPENCONTAINER)
|
||||
matching_designs = list()
|
||||
cached_designs = list()
|
||||
stored_research = new
|
||||
host_research = SSresearch.science_tech
|
||||
update_research()
|
||||
materials = AddComponent(/datum/component/remote_materials, "lathe", mapload)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/rnd/production/proc/update_research()
|
||||
host_research.copy_research_to(stored_research, TRUE)
|
||||
update_designs()
|
||||
|
||||
/obj/machinery/rnd/production/proc/update_designs()
|
||||
cached_designs.Cut()
|
||||
for(var/i in stored_research.researched_designs)
|
||||
var/datum/design/d = stored_research.researched_designs[i]
|
||||
if((isnull(allowed_department_flags) || (d.departmental_flags & allowed_department_flags)) && (d.build_type & allowed_buildtypes))
|
||||
cached_designs |= d
|
||||
|
||||
/obj/machinery/rnd/production/RefreshParts()
|
||||
calculate_efficiency()
|
||||
|
||||
/obj/machinery/rnd/production/ui_interact(mob/user)
|
||||
if(!consoleless_interface)
|
||||
return ..()
|
||||
user.set_machine(src)
|
||||
var/datum/browser/popup = new(user, "rndconsole", name, 460, 550)
|
||||
popup.set_content(generate_ui())
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/rnd/production/Destroy()
|
||||
QDEL_NULL(stored_research)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/rnd/production/proc/calculate_efficiency()
|
||||
efficiency_coeff = 1
|
||||
if(reagents) //If reagents/materials aren't initialized, don't bother, we'll be doing this again after reagents init anyways.
|
||||
reagents.maximum_volume = 0
|
||||
for(var/obj/item/reagent_containers/glass/G in component_parts)
|
||||
reagents.maximum_volume += G.volume
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
if(materials)
|
||||
var/total_storage = 0
|
||||
for(var/obj/item/stock_parts/matter_bin/M in component_parts)
|
||||
total_storage += M.rating * 75000
|
||||
materials.set_local_size(total_storage)
|
||||
var/total_rating = 0
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
total_rating += M.rating
|
||||
total_rating = max(1, total_rating)
|
||||
efficiency_coeff = total_rating
|
||||
|
||||
//we eject the materials upon deconstruction.
|
||||
/obj/machinery/rnd/production/on_deconstruction()
|
||||
for(var/obj/item/reagent_containers/glass/G in component_parts)
|
||||
reagents.trans_to(G, G.reagents.maximum_volume)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/rnd/production/proc/do_print(path, amount, list/matlist, notify_admins, mob/user)
|
||||
if(notify_admins)
|
||||
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has built [amount] of [path] at a [src]([type]).")
|
||||
for(var/i in 1 to amount)
|
||||
var/obj/item/I = new path(get_turf(src))
|
||||
if(efficient_with(I.type))
|
||||
I.materials = matlist.Copy()
|
||||
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
|
||||
|
||||
/obj/machinery/rnd/production/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
|
||||
if (!materials.mat_container) // no connected silo
|
||||
return 0
|
||||
var/list/all_materials = being_built.reagents_list + being_built.materials
|
||||
|
||||
var/A = materials.mat_container.amount(M)
|
||||
if(!A)
|
||||
A = reagents.get_reagent_amount(M)
|
||||
|
||||
// these types don't have their .materials set in do_print, so don't allow
|
||||
// them to be constructed efficiently
|
||||
var/ef = efficient_with(being_built.build_path) ? efficiency_coeff : 1
|
||||
return round(A / max(1, all_materials[M] / ef))
|
||||
|
||||
/obj/machinery/rnd/production/proc/efficient_with(path)
|
||||
return !ispath(path, /obj/item/stack/sheet) && !ispath(path, /obj/item/stack/ore/bluespace_crystal)
|
||||
|
||||
/obj/machinery/rnd/production/proc/user_try_print_id(id, amount)
|
||||
if((!istype(linked_console) && requires_console) || !id)
|
||||
return FALSE
|
||||
if(istext(amount))
|
||||
amount = text2num(amount)
|
||||
if(isnull(amount))
|
||||
amount = 1
|
||||
var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id)
|
||||
if(!istype(D))
|
||||
return FALSE
|
||||
if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
say("Warning: Printing failed: This fabricator does not have the necessary keys to decrypt design schematics. Please update the research data with the on-screen button and contact Nanotrasen Support!")
|
||||
return FALSE
|
||||
if(D.build_type && !(D.build_type & allowed_buildtypes))
|
||||
say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!")
|
||||
return FALSE
|
||||
if(!materials.mat_container)
|
||||
say("No connection to material storage, please contact the quartermaster.")
|
||||
return FALSE
|
||||
if(materials.on_hold())
|
||||
say("Mineral access is on hold, please contact the quartermaster.")
|
||||
return FALSE
|
||||
var/power = 1000
|
||||
amount = CLAMP(amount, 1, 50)
|
||||
for(var/M in D.materials)
|
||||
power += round(D.materials[M] * amount / 35)
|
||||
power = min(3000, power)
|
||||
use_power(power)
|
||||
var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1
|
||||
var/list/efficient_mats = list()
|
||||
for(var/MAT in D.materials)
|
||||
efficient_mats[MAT] = D.materials[MAT]/coeff
|
||||
if(!materials.mat_container.has_materials(efficient_mats, amount))
|
||||
say("Not enough materials to complete prototype[amount > 1? "s" : ""].")
|
||||
return FALSE
|
||||
for(var/R in D.reagents_list)
|
||||
if(!reagents.has_reagent(R, D.reagents_list[R]*amount/coeff))
|
||||
say("Not enough reagents to complete prototype[amount > 1? "s" : ""].")
|
||||
return FALSE
|
||||
materials.mat_container.use_amount(efficient_mats, amount)
|
||||
materials.silo_log(src, "built", -amount, "[D.name]", efficient_mats)
|
||||
for(var/R in D.reagents_list)
|
||||
reagents.remove_reagent(R, D.reagents_list[R]*amount/coeff)
|
||||
busy = TRUE
|
||||
if(production_animation)
|
||||
flick(production_animation, src)
|
||||
var/timecoeff = D.lathe_time_factor / efficiency_coeff
|
||||
addtimer(CALLBACK(src, .proc/reset_busy), (30 * timecoeff * amount) ** 0.5)
|
||||
addtimer(CALLBACK(src, .proc/do_print, D.build_path, amount, efficient_mats, D.dangerous_construction, usr), (32 * timecoeff * amount) ** 0.8)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/rnd/production/proc/search(string)
|
||||
matching_designs.Cut()
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
if(!(D.build_type & allowed_buildtypes) || !(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
continue
|
||||
if(findtext(D.name,string))
|
||||
matching_designs.Add(D)
|
||||
|
||||
/obj/machinery/rnd/production/proc/generate_ui()
|
||||
var/list/ui = list()
|
||||
ui += ui_header()
|
||||
switch(screen)
|
||||
if(RESEARCH_FABRICATOR_SCREEN_MATERIALS)
|
||||
ui += ui_screen_materials()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_CHEMICALS)
|
||||
ui += ui_screen_chemicals()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_SEARCH)
|
||||
ui += ui_screen_search()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW)
|
||||
ui += ui_screen_category_view()
|
||||
else
|
||||
ui += ui_screen_main()
|
||||
for(var/i in 1 to length(ui))
|
||||
if(!findtextEx(ui[i], RDSCREEN_NOBREAK))
|
||||
ui[i] += "<br>"
|
||||
ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "")
|
||||
return ui.Join("")
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_header()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><b>[host_research.organization] [department_tag] Department Lathe</b>"
|
||||
l += "Security protocols: [(obj_flags & EMAGGED)? "<font color='red'>Disabled</font>" : "<font color='green'>Enabled</font>"]"
|
||||
if (materials.mat_container)
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_MATERIALS]'><B>Material Amount:</B> [materials.format_amount()]</A>"
|
||||
else
|
||||
l += "<font color='red'>No material storage connected, please contact the quartermaster.</font>"
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_CHEMICALS]'><B>Chemical volume:</B> [reagents.total_volume] / [reagents.maximum_volume]</A>"
|
||||
l += "<a href='?src=[REF(src)];sync_research=1'>Synchronize Research</a>"
|
||||
l += "<a href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_MAIN]'>Main Screen</a></div>[RDSCREEN_NOBREAK]"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_materials()
|
||||
if (!materials.mat_container)
|
||||
screen = RESEARCH_FABRICATOR_SCREEN_MAIN
|
||||
return ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><h3>Material Storage:</h3>"
|
||||
for(var/mat_id in materials.mat_container.materials)
|
||||
var/datum/material/M = materials.mat_container.materials[mat_id]
|
||||
l += "* [M.amount] of [M.name]: "
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=1'>Eject</A> [RDSCREEN_NOBREAK]"
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=5'>5x</A> [RDSCREEN_NOBREAK]"
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=50'>All</A>[RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
l += "</div>[RDSCREEN_NOBREAK]"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_chemicals()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><A href='?src=[REF(src)];disposeall=1'>Disposal All Chemicals in Storage</A>"
|
||||
l += "<h3>Chemical Storage:</h3>"
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
l += "[R.name]: [R.volume]"
|
||||
l += "<A href='?src=[REF(src)];dispose=[R.id]'>Purge</A>"
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_search()
|
||||
var/list/l = list()
|
||||
var/coeff = efficiency_coeff
|
||||
l += "<h2>Search Results:</h2>"
|
||||
l += "<form name='search' action='?src=[REF(src)]'>\
|
||||
<input type='hidden' name='src' value='[REF(src)]'>\
|
||||
<input type='hidden' name='search' value='to_search'>\
|
||||
<input type='text' name='to_search'>\
|
||||
<input type='submit' value='Search'>\
|
||||
</form><HR>"
|
||||
for(var/datum/design/D in matching_designs)
|
||||
l += design_menu_entry(D, coeff)
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/design_menu_entry(datum/design/D, coeff)
|
||||
if(!istype(D))
|
||||
return
|
||||
if(!coeff)
|
||||
coeff = efficiency_coeff
|
||||
if(!efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
var/list/l = list()
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
var/t
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
for(var/M in all_materials)
|
||||
t = check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c >= 1)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 5)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 10)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][RDSCREEN_NOBREAK]"
|
||||
else
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/Topic(raw, ls)
|
||||
if(..())
|
||||
return
|
||||
add_fingerprint(usr)
|
||||
usr.set_machine(src)
|
||||
if(ls["switch_screen"])
|
||||
screen = text2num(ls["switch_screen"])
|
||||
if(ls["build"]) //Causes the Protolathe to build something.
|
||||
if(busy)
|
||||
say("Warning: Fabricators busy!")
|
||||
else
|
||||
user_try_print_id(ls["build"], ls["amount"])
|
||||
if(ls["search"]) //Search for designs with name matching pattern
|
||||
search(ls["to_search"])
|
||||
screen = RESEARCH_FABRICATOR_SCREEN_SEARCH
|
||||
if(ls["sync_research"])
|
||||
update_research()
|
||||
say("Synchronizing research with host technology database.")
|
||||
if(ls["category"])
|
||||
selected_category = ls["category"]
|
||||
if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it)
|
||||
reagents.del_reagent(ls["dispose"])
|
||||
if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents.
|
||||
reagents.clear_reagents()
|
||||
if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material
|
||||
eject_sheets(ls["ejectsheet"], ls["eject_amt"])
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/rnd/production/proc/eject_sheets(eject_sheet, eject_amt)
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
if (!mat_container)
|
||||
say("No access to material storage, please contact the quartermaster.")
|
||||
return 0
|
||||
if (materials.on_hold())
|
||||
say("Mineral access is on hold, please contact the quartermaster.")
|
||||
return 0
|
||||
var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location())
|
||||
var/list/matlist = list()
|
||||
matlist[eject_sheet] = MINERAL_MATERIAL_AMOUNT
|
||||
materials.silo_log(src, "ejected", -count, "sheets", matlist)
|
||||
return count
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<form name='search' action='?src=[REF(src)]'>\
|
||||
<input type='hidden' name='src' value='[REF(src)]'>\
|
||||
<input type='hidden' name='search' value='to_search'>\
|
||||
<input type='hidden' name='type' value='proto'>\
|
||||
<input type='text' name='to_search'>\
|
||||
<input type='submit' value='Search'>\
|
||||
</form><HR>"
|
||||
|
||||
l += list_categories(categories, RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW)
|
||||
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_category_view()
|
||||
if(!selected_category)
|
||||
return ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3>"
|
||||
var/coeff = efficiency_coeff
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
if(!(selected_category in D.category)|| !(D.build_type & allowed_buildtypes))
|
||||
continue
|
||||
if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
continue
|
||||
l += design_menu_entry(D, coeff)
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/list_categories(list/categories, menu_num)
|
||||
if(!categories)
|
||||
return
|
||||
|
||||
var/line_length = 1
|
||||
var/list/l = "<table style='width:100%' align='center'><tr>"
|
||||
|
||||
for(var/C in categories)
|
||||
if(line_length > 2)
|
||||
l += "</tr><tr>"
|
||||
line_length = 1
|
||||
|
||||
l += "<td><A href='?src=[REF(src)];category=[C];switch_screen=[menu_num]'>[C]</A></td>"
|
||||
line_length++
|
||||
|
||||
l += "</tr></table></div>"
|
||||
return l
|
||||
/obj/machinery/rnd/production
|
||||
name = "technology fabricator"
|
||||
desc = "Makes researched and prototype items with materials and energy."
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/consoleless_interface = FALSE //Whether it can be used without a console.
|
||||
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
|
||||
var/list/categories = list()
|
||||
var/datum/component/remote_materials/materials
|
||||
var/allowed_department_flags = ALL
|
||||
var/production_animation //What's flick()'d on print.
|
||||
var/allowed_buildtypes = NONE
|
||||
var/list/datum/design/cached_designs
|
||||
var/list/datum/design/matching_designs
|
||||
var/department_tag = "Unidentified" //used for material distribution among other things.
|
||||
var/datum/techweb/stored_research
|
||||
var/datum/techweb/host_research
|
||||
|
||||
var/screen = RESEARCH_FABRICATOR_SCREEN_MAIN
|
||||
var/selected_category
|
||||
|
||||
/obj/machinery/rnd/production/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(0, OPENCONTAINER)
|
||||
matching_designs = list()
|
||||
cached_designs = list()
|
||||
stored_research = new
|
||||
host_research = SSresearch.science_tech
|
||||
update_research()
|
||||
materials = AddComponent(/datum/component/remote_materials, "lathe", mapload)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/rnd/production/proc/update_research()
|
||||
host_research.copy_research_to(stored_research, TRUE)
|
||||
update_designs()
|
||||
|
||||
/obj/machinery/rnd/production/proc/update_designs()
|
||||
cached_designs.Cut()
|
||||
for(var/i in stored_research.researched_designs)
|
||||
var/datum/design/d = stored_research.researched_designs[i]
|
||||
if((isnull(allowed_department_flags) || (d.departmental_flags & allowed_department_flags)) && (d.build_type & allowed_buildtypes))
|
||||
cached_designs |= d
|
||||
|
||||
/obj/machinery/rnd/production/RefreshParts()
|
||||
calculate_efficiency()
|
||||
|
||||
/obj/machinery/rnd/production/ui_interact(mob/user)
|
||||
if(!consoleless_interface)
|
||||
return ..()
|
||||
user.set_machine(src)
|
||||
var/datum/browser/popup = new(user, "rndconsole", name, 460, 550)
|
||||
popup.set_content(generate_ui())
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/rnd/production/Destroy()
|
||||
QDEL_NULL(stored_research)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/rnd/production/proc/calculate_efficiency()
|
||||
efficiency_coeff = 1
|
||||
if(reagents) //If reagents/materials aren't initialized, don't bother, we'll be doing this again after reagents init anyways.
|
||||
reagents.maximum_volume = 0
|
||||
for(var/obj/item/reagent_containers/glass/G in component_parts)
|
||||
reagents.maximum_volume += G.volume
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
if(materials)
|
||||
var/total_storage = 0
|
||||
for(var/obj/item/stock_parts/matter_bin/M in component_parts)
|
||||
total_storage += M.rating * 75000
|
||||
materials.set_local_size(total_storage)
|
||||
var/total_rating = 0
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
total_rating += M.rating
|
||||
total_rating = max(1, total_rating)
|
||||
efficiency_coeff = total_rating
|
||||
|
||||
//we eject the materials upon deconstruction.
|
||||
/obj/machinery/rnd/production/on_deconstruction()
|
||||
for(var/obj/item/reagent_containers/glass/G in component_parts)
|
||||
reagents.trans_to(G, G.reagents.maximum_volume)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/rnd/production/proc/do_print(path, amount, list/matlist, notify_admins, mob/user)
|
||||
if(notify_admins)
|
||||
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has built [amount] of [path] at a [src]([type]).")
|
||||
for(var/i in 1 to amount)
|
||||
var/obj/item/I = new path(get_turf(src))
|
||||
if(efficient_with(I.type))
|
||||
I.materials = matlist.Copy()
|
||||
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
|
||||
|
||||
/obj/machinery/rnd/production/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material
|
||||
if (!materials.mat_container) // no connected silo
|
||||
return 0
|
||||
var/list/all_materials = being_built.reagents_list + being_built.materials
|
||||
|
||||
var/A = materials.mat_container.amount(M)
|
||||
if(!A)
|
||||
A = reagents.get_reagent_amount(M)
|
||||
|
||||
// these types don't have their .materials set in do_print, so don't allow
|
||||
// them to be constructed efficiently
|
||||
var/ef = efficient_with(being_built.build_path) ? efficiency_coeff : 1
|
||||
return round(A / max(1, all_materials[M] / ef))
|
||||
|
||||
/obj/machinery/rnd/production/proc/efficient_with(path)
|
||||
return !ispath(path, /obj/item/stack/sheet) && !ispath(path, /obj/item/stack/ore/bluespace_crystal)
|
||||
|
||||
/obj/machinery/rnd/production/proc/user_try_print_id(id, amount)
|
||||
if((!istype(linked_console) && requires_console) || !id)
|
||||
return FALSE
|
||||
if(istext(amount))
|
||||
amount = text2num(amount)
|
||||
if(isnull(amount))
|
||||
amount = 1
|
||||
var/datum/design/D = (linked_console || requires_console)? linked_console.stored_research.researched_designs[id] : get_techweb_design_by_id(id)
|
||||
if(!istype(D))
|
||||
return FALSE
|
||||
if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
say("Warning: Printing failed: This fabricator does not have the necessary keys to decrypt design schematics. Please update the research data with the on-screen button and contact Nanotrasen Support!")
|
||||
return FALSE
|
||||
if(D.build_type && !(D.build_type & allowed_buildtypes))
|
||||
say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!")
|
||||
return FALSE
|
||||
if(!materials.mat_container)
|
||||
say("No connection to material storage, please contact the quartermaster.")
|
||||
return FALSE
|
||||
if(materials.on_hold())
|
||||
say("Mineral access is on hold, please contact the quartermaster.")
|
||||
return FALSE
|
||||
var/power = 1000
|
||||
amount = CLAMP(amount, 1, 50)
|
||||
for(var/M in D.materials)
|
||||
power += round(D.materials[M] * amount / 35)
|
||||
power = min(3000, power)
|
||||
use_power(power)
|
||||
var/coeff = efficient_with(D.build_path) ? efficiency_coeff : 1
|
||||
var/list/efficient_mats = list()
|
||||
for(var/MAT in D.materials)
|
||||
efficient_mats[MAT] = D.materials[MAT]/coeff
|
||||
if(!materials.mat_container.has_materials(efficient_mats, amount))
|
||||
say("Not enough materials to complete prototype[amount > 1? "s" : ""].")
|
||||
return FALSE
|
||||
for(var/R in D.reagents_list)
|
||||
if(!reagents.has_reagent(R, D.reagents_list[R]*amount/coeff))
|
||||
say("Not enough reagents to complete prototype[amount > 1? "s" : ""].")
|
||||
return FALSE
|
||||
materials.mat_container.use_amount(efficient_mats, amount)
|
||||
materials.silo_log(src, "built", -amount, "[D.name]", efficient_mats)
|
||||
for(var/R in D.reagents_list)
|
||||
reagents.remove_reagent(R, D.reagents_list[R]*amount/coeff)
|
||||
busy = TRUE
|
||||
if(production_animation)
|
||||
flick(production_animation, src)
|
||||
var/timecoeff = D.lathe_time_factor / efficiency_coeff
|
||||
addtimer(CALLBACK(src, .proc/reset_busy), (30 * timecoeff * amount) ** 0.5)
|
||||
addtimer(CALLBACK(src, .proc/do_print, D.build_path, amount, efficient_mats, D.dangerous_construction, usr), (32 * timecoeff * amount) ** 0.8)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/rnd/production/proc/search(string)
|
||||
matching_designs.Cut()
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
if(!(D.build_type & allowed_buildtypes) || !(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
continue
|
||||
if(findtext(D.name,string))
|
||||
matching_designs.Add(D)
|
||||
|
||||
/obj/machinery/rnd/production/proc/generate_ui()
|
||||
var/list/ui = list()
|
||||
ui += ui_header()
|
||||
switch(screen)
|
||||
if(RESEARCH_FABRICATOR_SCREEN_MATERIALS)
|
||||
ui += ui_screen_materials()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_CHEMICALS)
|
||||
ui += ui_screen_chemicals()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_SEARCH)
|
||||
ui += ui_screen_search()
|
||||
if(RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW)
|
||||
ui += ui_screen_category_view()
|
||||
else
|
||||
ui += ui_screen_main()
|
||||
for(var/i in 1 to length(ui))
|
||||
if(!findtextEx(ui[i], RDSCREEN_NOBREAK))
|
||||
ui[i] += "<br>"
|
||||
ui[i] = replacetextEx(ui[i], RDSCREEN_NOBREAK, "")
|
||||
return ui.Join("")
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_header()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><b>[host_research.organization] [department_tag] Department Lathe</b>"
|
||||
l += "Security protocols: [(obj_flags & EMAGGED)? "<font color='red'>Disabled</font>" : "<font color='green'>Enabled</font>"]"
|
||||
if (materials.mat_container)
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_MATERIALS]'><B>Material Amount:</B> [materials.format_amount()]</A>"
|
||||
else
|
||||
l += "<font color='red'>No material storage connected, please contact the quartermaster.</font>"
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_CHEMICALS]'><B>Chemical volume:</B> [reagents.total_volume] / [reagents.maximum_volume]</A>"
|
||||
l += "<a href='?src=[REF(src)];sync_research=1'>Synchronize Research</a>"
|
||||
l += "<a href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_MAIN]'>Main Screen</a></div>[RDSCREEN_NOBREAK]"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_materials()
|
||||
if (!materials.mat_container)
|
||||
screen = RESEARCH_FABRICATOR_SCREEN_MAIN
|
||||
return ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><h3>Material Storage:</h3>"
|
||||
for(var/mat_id in materials.mat_container.materials)
|
||||
var/datum/material/M = materials.mat_container.materials[mat_id]
|
||||
l += "* [M.amount] of [M.name]: "
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=1'>Eject</A> [RDSCREEN_NOBREAK]"
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=5'>5x</A> [RDSCREEN_NOBREAK]"
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];ejectsheet=[M.id];eject_amt=50'>All</A>[RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
l += "</div>[RDSCREEN_NOBREAK]"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_chemicals()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><A href='?src=[REF(src)];disposeall=1'>Disposal All Chemicals in Storage</A>"
|
||||
l += "<h3>Chemical Storage:</h3>"
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
l += "[R.name]: [R.volume]"
|
||||
l += "<A href='?src=[REF(src)];dispose=[R.type]'>Purge</A>"
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_search()
|
||||
var/list/l = list()
|
||||
var/coeff = efficiency_coeff
|
||||
l += "<h2>Search Results:</h2>"
|
||||
l += "<form name='search' action='?src=[REF(src)]'>\
|
||||
<input type='hidden' name='src' value='[REF(src)]'>\
|
||||
<input type='hidden' name='search' value='to_search'>\
|
||||
<input type='text' name='to_search'>\
|
||||
<input type='submit' value='Search'>\
|
||||
</form><HR>"
|
||||
for(var/datum/design/D in matching_designs)
|
||||
l += design_menu_entry(D, coeff)
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/design_menu_entry(datum/design/D, coeff)
|
||||
if(!istype(D))
|
||||
return
|
||||
if(!coeff)
|
||||
coeff = efficiency_coeff
|
||||
if(!efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
var/list/l = list()
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
var/t
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
for(var/M in all_materials)
|
||||
t = check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c >= 1)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 5)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 10)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][RDSCREEN_NOBREAK]"
|
||||
else
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/Topic(raw, ls)
|
||||
if(..())
|
||||
return
|
||||
add_fingerprint(usr)
|
||||
usr.set_machine(src)
|
||||
if(ls["switch_screen"])
|
||||
screen = text2num(ls["switch_screen"])
|
||||
if(ls["build"]) //Causes the Protolathe to build something.
|
||||
if(busy)
|
||||
say("Warning: Fabricators busy!")
|
||||
else
|
||||
user_try_print_id(ls["build"], ls["amount"])
|
||||
if(ls["search"]) //Search for designs with name matching pattern
|
||||
search(ls["to_search"])
|
||||
screen = RESEARCH_FABRICATOR_SCREEN_SEARCH
|
||||
if(ls["sync_research"])
|
||||
update_research()
|
||||
say("Synchronizing research with host technology database.")
|
||||
if(ls["category"])
|
||||
selected_category = ls["category"]
|
||||
if(ls["dispose"]) //Causes the protolathe to dispose of a single reagent (all of it)
|
||||
reagents.del_reagent(ls["dispose"])
|
||||
if(ls["disposeall"]) //Causes the protolathe to dispose of all it's reagents.
|
||||
reagents.clear_reagents()
|
||||
if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material
|
||||
eject_sheets(ls["ejectsheet"], ls["eject_amt"])
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/rnd/production/proc/eject_sheets(eject_sheet, eject_amt)
|
||||
var/datum/component/material_container/mat_container = materials.mat_container
|
||||
if (!mat_container)
|
||||
say("No access to material storage, please contact the quartermaster.")
|
||||
return 0
|
||||
if (materials.on_hold())
|
||||
say("Mineral access is on hold, please contact the quartermaster.")
|
||||
return 0
|
||||
var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location())
|
||||
var/list/matlist = list()
|
||||
matlist[eject_sheet] = MINERAL_MATERIAL_AMOUNT
|
||||
materials.silo_log(src, "ejected", -count, "sheets", matlist)
|
||||
return count
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<form name='search' action='?src=[REF(src)]'>\
|
||||
<input type='hidden' name='src' value='[REF(src)]'>\
|
||||
<input type='hidden' name='search' value='to_search'>\
|
||||
<input type='hidden' name='type' value='proto'>\
|
||||
<input type='text' name='to_search'>\
|
||||
<input type='submit' value='Search'>\
|
||||
</form><HR>"
|
||||
|
||||
l += list_categories(categories, RESEARCH_FABRICATOR_SCREEN_CATEGORYVIEW)
|
||||
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/ui_screen_category_view()
|
||||
if(!selected_category)
|
||||
return ui_screen_main()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3>"
|
||||
var/coeff = efficiency_coeff
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = stored_research.researched_designs[v]
|
||||
if(!(selected_category in D.category)|| !(D.build_type & allowed_buildtypes))
|
||||
continue
|
||||
if(!(isnull(allowed_department_flags) || (D.departmental_flags & allowed_department_flags)))
|
||||
continue
|
||||
l += design_menu_entry(D, coeff)
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
/obj/machinery/rnd/production/proc/list_categories(list/categories, menu_num)
|
||||
if(!categories)
|
||||
return
|
||||
|
||||
var/line_length = 1
|
||||
var/list/l = "<table style='width:100%' align='center'><tr>"
|
||||
|
||||
for(var/C in categories)
|
||||
if(line_length > 2)
|
||||
l += "</tr><tr>"
|
||||
line_length = 1
|
||||
|
||||
l += "<td><A href='?src=[REF(src)];category=[C];switch_screen=[menu_num]'>[C]</A></td>"
|
||||
line_length++
|
||||
|
||||
l += "</tr></table></div>"
|
||||
return l
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
host_mob.adjustStaminaLoss(-10) //stimulants give stamina heal now
|
||||
host_mob.lying = 0
|
||||
host_mob.update_canmove()
|
||||
host_mob.reagents.add_reagent("stimulants", 1.5)
|
||||
host_mob.reagents.add_reagent(/datum/reagent/medicine/stimulants, 1.5)
|
||||
|
||||
/datum/nanite_program/hardening
|
||||
name = "Dermal Hardening"
|
||||
|
||||
@@ -61,7 +61,10 @@
|
||||
/datum/nanite_program/purging/active_effect()
|
||||
host_mob.adjustToxLoss(-1)
|
||||
for(var/datum/reagent/R in host_mob.reagents.reagent_list)
|
||||
host_mob.reagents.remove_reagent(R.id,1)
|
||||
if(R.type == /datum/reagent/fermi/nanite_b_gone)
|
||||
host_mob.adjustToxLoss(4)
|
||||
continue
|
||||
host_mob.reagents.remove_reagent(R.type,1)
|
||||
|
||||
/datum/nanite_program/brain_heal
|
||||
name = "Neural Regeneration"
|
||||
@@ -161,7 +164,7 @@
|
||||
/datum/nanite_program/purging_advanced/active_effect()
|
||||
host_mob.adjustToxLoss(-1, forced = TRUE)
|
||||
for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list)
|
||||
host_mob.reagents.remove_reagent(R.id,1)
|
||||
host_mob.reagents.remove_reagent(R.type,1)
|
||||
|
||||
/datum/nanite_program/regenerative_advanced
|
||||
name = "Bio-Reconstruction"
|
||||
|
||||
+1131
-1131
File diff suppressed because it is too large
Load Diff
@@ -114,19 +114,19 @@ To add a crossbreed:
|
||||
name = "blood extract"
|
||||
desc = "A sphere of liquid blood, somehow managing to stay together."
|
||||
color = "#FF0000"
|
||||
list_reagents = list("blood" = 50)
|
||||
list_reagents = list(/datum/reagent/blood = 50)
|
||||
|
||||
/obj/item/slimecrossbeaker/pax //5u synthpax.
|
||||
name = "peace-inducing extract"
|
||||
desc = "A small blob of synthetic pax."
|
||||
color = "#FFCCCC"
|
||||
list_reagents = list("synthpax" = 5)
|
||||
list_reagents = list(/datum/reagent/pax/peaceborg = 5)
|
||||
|
||||
/obj/item/slimecrossbeaker/omnizine //15u omnizine.
|
||||
name = "healing extract"
|
||||
desc = "A gelatinous extract of pure omnizine."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("omnizine" = 15)
|
||||
list_reagents = list(/datum/reagent/medicine/omnizine = 15)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents.
|
||||
var/ignore_flags = FALSE
|
||||
@@ -160,7 +160,7 @@ To add a crossbreed:
|
||||
name = "mending solution"
|
||||
desc = "A strange glob of sweet-smelling semifluid, which seems to stick to skin rather easily."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("regen_jelly" = 20)
|
||||
list_reagents = list(/datum/reagent/medicine/regen_jelly = 20)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/slimejelly //Primarily for slimepeople, but you do you.
|
||||
self_use_only = TRUE
|
||||
@@ -168,13 +168,13 @@ To add a crossbreed:
|
||||
name = "slime jelly bubble"
|
||||
desc = "A sphere of slime jelly. It seems to stick to your skin, but avoids other surfaces."
|
||||
color = "#00FF00"
|
||||
list_reagents = list("slimejelly" = 50)
|
||||
list_reagents = list(/datum/reagent/toxin/slimejelly = 50)
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/peaceandlove
|
||||
name = "peaceful distillation"
|
||||
desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
|
||||
color = "#DDAAAA"
|
||||
list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes
|
||||
list_reagents = list(/datum/reagent/pax/peaceborg = 10, /datum/reagent/drug/space_drugs = 15) //Peace, dudes
|
||||
|
||||
/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize()
|
||||
. = ..()
|
||||
@@ -184,4 +184,4 @@ To add a crossbreed:
|
||||
name = "invigorating gel"
|
||||
desc = "A bubbling purple mixture, designed to heal and boost movement."
|
||||
color = "#FF00FF"
|
||||
list_reagents = list("regen_jelly" = 30, "methamphetamine" = 9)
|
||||
list_reagents = list(/datum/reagent/medicine/regen_jelly = 30, /datum/reagent/drug/methamphetamine = 9)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
filling_color = "#964B00"
|
||||
tastes = list("cardboard" = 3, "sadness" = 3)
|
||||
foodtype = null //Don't ask what went into them. You're better off not knowing.
|
||||
list_reagents = list("stabilizednutriment" = 10, "nutriment" = 2) //Won't make you fat. Will make you question your sanity.
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment/stabilized = 10, /datum/reagent/consumable/nutriment = 2) //Won't make you fat. Will make you question your sanity.
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/rationpack/checkLiked(fraction, mob/M) //Nobody likes rationpacks. Nobody.
|
||||
if(last_check_time + 50 < world.time)
|
||||
|
||||
@@ -922,9 +922,9 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/tick()
|
||||
for(var/mob/living/carbon/human/H in range(1, get_turf(owner)))
|
||||
if(H != owner && H.stat != DEAD && H.health <= 0 && !H.reagents.has_reagent("epinephrine"))
|
||||
if(H != owner && H.stat != DEAD && H.health <= 0 && !H.reagents.has_reagent(/datum/reagent/medicine/epinephrine))
|
||||
to_chat(owner, "[linked_extract] pulses in sync with [H]'s heartbeat, trying to keep [H.p_them()] alive.")
|
||||
H.reagents.add_reagent("epinephrine",5)
|
||||
H.reagents.add_reagent(/datum/reagent/medicine/epinephrine,5)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/lightpink/on_remove()
|
||||
|
||||
@@ -14,10 +14,10 @@ Burning extracts:
|
||||
create_reagents(10, INJECTABLE | DRAWABLE)
|
||||
|
||||
/obj/item/slimecross/burning/attack_self(mob/user)
|
||||
if(!reagents.has_reagent("plasma",10))
|
||||
if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
|
||||
to_chat(user, "<span class='warning'>This extract needs to be full of plasma to activate!</span>")
|
||||
return
|
||||
reagents.remove_reagent("plasma",10)
|
||||
reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
|
||||
to_chat(user, "<span class='notice'>You squeeze the extract, and it absorbs the plasma!</span>")
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||
playsound(src, 'sound/magic/fireball.ogg', 50, 1)
|
||||
@@ -44,7 +44,7 @@ Burning extracts:
|
||||
/obj/item/slimecross/burning/orange/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] boils over with a caustic gas!</span>")
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
R.add_reagent("condensedcapsaicin", 100)
|
||||
R.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 100)
|
||||
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 7, get_turf(user))
|
||||
@@ -113,8 +113,8 @@ Burning extracts:
|
||||
/obj/item/slimecross/burning/darkblue/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] releases a burst of chilling smoke!</span>")
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
R.add_reagent("frostoil", 40)
|
||||
user.reagents.add_reagent("cryoxadone",10)
|
||||
R.add_reagent(/datum/reagent/consumable/frostoil, 40)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,10)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 7, get_turf(user))
|
||||
smoke.start()
|
||||
@@ -131,7 +131,7 @@ Burning extracts:
|
||||
for(var/i = 0, i < amount, i++)
|
||||
var/path = get_random_food()
|
||||
var/obj/item/O = new path(pick(turfs))
|
||||
O.reagents.add_reagent("slimejelly",5) //Oh god it burns
|
||||
O.reagents.add_reagent(/datum/reagent/toxin/slimejelly, 5) //Oh god it burns
|
||||
if(prob(50))
|
||||
O.desc += " It smells strange..."
|
||||
user.visible_message("<span class='danger'>[src] produces a few pieces of food!</span>")
|
||||
@@ -268,7 +268,7 @@ Burning extracts:
|
||||
/obj/item/slimecross/burning/lightpink/do_effect(mob/user)
|
||||
user.visible_message("<span class='danger'>[src] lets off a hypnotizing pink glow!</span>")
|
||||
for(var/mob/living/carbon/C in view(7, get_turf(user)))
|
||||
C.reagents.add_reagent("pax",5)
|
||||
C.reagents.add_reagent(/datum/reagent/pax, 5)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/burning/adamantine
|
||||
|
||||
@@ -15,10 +15,10 @@ Charged extracts:
|
||||
create_reagents(10, INJECTABLE | DRAWABLE)
|
||||
|
||||
/obj/item/slimecross/charged/attack_self(mob/user)
|
||||
if(!reagents.has_reagent("plasma",10))
|
||||
if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
|
||||
to_chat(user, "<span class='warning'>This extract needs to be full of plasma to activate!</span>")
|
||||
return
|
||||
reagents.remove_reagent("plasma",10)
|
||||
reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
|
||||
to_chat(user, "<span class='notice'>You squeeze the extract, and it absorbs the plasma!</span>")
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
|
||||
|
||||
@@ -14,10 +14,10 @@ Chilling extracts:
|
||||
create_reagents(10, INJECTABLE | DRAWABLE)
|
||||
|
||||
/obj/item/slimecross/chilling/attack_self(mob/user)
|
||||
if(!reagents.has_reagent("plasma",10))
|
||||
if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
|
||||
to_chat(user, "<span class='warning'>This extract needs to be full of plasma to activate!</span>")
|
||||
return
|
||||
reagents.remove_reagent("plasma",10)
|
||||
reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
|
||||
to_chat(user, "<span class='notice'>You squeeze the extract, and it absorbs the plasma!</span>")
|
||||
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/glassbr1.ogg', 50, 1)
|
||||
@@ -56,7 +56,7 @@ Chilling extracts:
|
||||
return
|
||||
user.visible_message("<span class='notice'>[src] shatters, and a healing aura fills the room briefly.</span>")
|
||||
for(var/mob/living/carbon/C in A)
|
||||
C.reagents.add_reagent("regen_jelly",10)
|
||||
C.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/chilling/blue
|
||||
|
||||
@@ -20,7 +20,7 @@ Consuming extracts:
|
||||
if(last_produced + cooldown > world.time)
|
||||
to_chat(user, "<span class='warning'>[src] is still digesting after its last meal!<span>")
|
||||
return
|
||||
var/datum/reagent/N = O.reagents.has_reagent("nutriment")
|
||||
var/datum/reagent/N = O.reagents.has_reagent(/datum/reagent/consumable/nutriment)
|
||||
if(N)
|
||||
nutriment_eaten += N.volume
|
||||
to_chat(user, "<span class='notice'>[src] opens up and swallows [O] whole!</span>")
|
||||
@@ -73,7 +73,7 @@ Consuming extracts:
|
||||
to_chat(M, "Tastes like [taste].")
|
||||
playsound(get_turf(M), 'sound/items/eatfood.ogg', 20, 1)
|
||||
if(nutrition)
|
||||
M.reagents.add_reagent("nutriment",nutrition)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/nutriment,nutrition)
|
||||
do_effect(M, user)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -199,7 +199,7 @@ Consuming extracts:
|
||||
nutrition = 0 //We don't want normal nutriment
|
||||
|
||||
/obj/item/slime_cookie/silver/do_effect(mob/living/M, mob/user)
|
||||
M.reagents.add_reagent("stabilizednutriment",10)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/nutriment/stabilized, 10)
|
||||
|
||||
/obj/item/slimecross/consuming/bluespace
|
||||
colour = "bluespace"
|
||||
|
||||
@@ -30,13 +30,13 @@ Industrial extracts:
|
||||
|
||||
/obj/item/slimecross/industrial/process()
|
||||
var/IsWorking = FALSE
|
||||
if(reagents.has_reagent("plasma",amount = 2) && plasmarequired > 1) //Can absorb as much as 2
|
||||
if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 2) && plasmarequired > 1) //Can absorb as much as 2
|
||||
IsWorking = TRUE
|
||||
reagents.remove_reagent("plasma",2)
|
||||
reagents.remove_reagent(/datum/reagent/toxin/plasma,2)
|
||||
plasmaabsorbed += 2
|
||||
else if(reagents.has_reagent("plasma",amount = 1)) //Can absorb as little as 1
|
||||
else if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 1)) //Can absorb as little as 1
|
||||
IsWorking = TRUE
|
||||
reagents.remove_reagent("plasma",1)
|
||||
reagents.remove_reagent(/datum/reagent/toxin/plasma,1)
|
||||
plasmaabsorbed += 1
|
||||
|
||||
if(plasmaabsorbed >= plasmarequired)
|
||||
|
||||
@@ -51,7 +51,7 @@ Regenerative extracts:
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/slimecross/regenerative/purple/core_effect(mob/living/target, mob/user)
|
||||
target.reagents.add_reagent("regen_jelly",10)
|
||||
target.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
|
||||
|
||||
/obj/item/slimecross/regenerative/blue
|
||||
colour = "blue"
|
||||
@@ -174,7 +174,7 @@ Regenerative extracts:
|
||||
|
||||
/obj/item/slimecross/regenerative/red/core_effect(mob/living/target, mob/user)
|
||||
to_chat(target, "<span class='notice'>You feel... <i>faster.</i></span>")
|
||||
target.reagents.add_reagent("ephedrine",3)
|
||||
target.reagents.add_reagent(/datum/reagent/medicine/ephedrine,3)
|
||||
|
||||
/obj/item/slimecross/regenerative/green
|
||||
colour = "green"
|
||||
@@ -185,7 +185,7 @@ Regenerative extracts:
|
||||
var/mob/living/simple_animal/slime/S = target
|
||||
S.random_colour()
|
||||
if(isjellyperson(target))
|
||||
target.reagents.add_reagent("slime_toxin",5)
|
||||
target.reagents.add_reagent(/datum/reagent/slime_toxin,5)
|
||||
|
||||
|
||||
/obj/item/slimecross/regenerative/pink
|
||||
@@ -193,7 +193,7 @@ Regenerative extracts:
|
||||
|
||||
/obj/item/slimecross/regenerative/pink/core_effect(mob/living/target, mob/user)
|
||||
to_chat(target, "<span class='notice'>You feel more calm.</span>")
|
||||
target.reagents.add_reagent("krokodil",4)
|
||||
target.reagents.add_reagent(/datum/reagent/drug/krokodil,4)
|
||||
|
||||
/obj/item/slimecross/regenerative/gold
|
||||
colour = "gold"
|
||||
|
||||
@@ -41,10 +41,10 @@ Self-sustaining extracts:
|
||||
return
|
||||
if(reagentselect == "lesser plasma")
|
||||
amount = 4
|
||||
reagentselect = "plasma"
|
||||
reagentselect = /datum/reagent/toxin/plasma
|
||||
if(reagentselect == "holy water and uranium")
|
||||
reagentselect = "holywater"
|
||||
secondary = "uranium"
|
||||
reagentselect = /datum/reagent/water/holywater
|
||||
secondary = /datum/reagent/uranium
|
||||
extract.forceMove(user.drop_location())
|
||||
qdel(src)
|
||||
user.put_in_active_hand(extract)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/item/slime_extract/on_grind()
|
||||
if(Uses)
|
||||
grind_results["slimejelly"] = 20
|
||||
grind_results[/datum/reagent/toxin/slimejelly] = 20
|
||||
|
||||
//Effect when activated by a Luminescent. Separated into a minor and major effect. Returns cooldown in deciseconds.
|
||||
/obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
@@ -78,7 +78,7 @@
|
||||
name = "grey slime extract"
|
||||
icon_state = "grey slime extract"
|
||||
effectmod = "reproductive"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -103,7 +103,7 @@
|
||||
name = "gold slime extract"
|
||||
icon_state = "gold slime extract"
|
||||
effectmod = "symbiont"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -132,7 +132,7 @@
|
||||
name = "silver slime extract"
|
||||
icon_state = "silver slime extract"
|
||||
effectmod = "consuming"
|
||||
activate_reagents = list("plasma","water")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -157,7 +157,7 @@
|
||||
name = "metal slime extract"
|
||||
icon_state = "metal slime extract"
|
||||
effectmod = "industrial"
|
||||
activate_reagents = list("plasma","water")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -181,7 +181,7 @@
|
||||
name = "purple slime extract"
|
||||
icon_state = "purple slime extract"
|
||||
effectmod = "regenerative"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -193,14 +193,14 @@
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
to_chat(user, "<span class='notice'>You activate [src], and it releases regenerative chemicals!</span>")
|
||||
user.reagents.add_reagent("regen_jelly",10)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
|
||||
return 600
|
||||
|
||||
/obj/item/slime_extract/darkpurple
|
||||
name = "dark purple slime extract"
|
||||
icon_state = "dark purple slime extract"
|
||||
effectmod = "self-sustaining"
|
||||
activate_reagents = list("plasma")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -223,19 +223,19 @@
|
||||
name = "orange slime extract"
|
||||
icon_state = "orange slime extract"
|
||||
effectmod = "burning"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
to_chat(user, "<span class='notice'>You activate [src]. You start feeling hot!</span>")
|
||||
user.reagents.add_reagent("capsaicin",10)
|
||||
user.reagents.add_reagent(/datum/reagent/consumable/capsaicin,10)
|
||||
return 150
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
user.reagents.add_reagent("phosphorus",5)//
|
||||
user.reagents.add_reagent("potassium",5) // = smoke, along with any reagents inside mr. slime
|
||||
user.reagents.add_reagent("sugar",5) //
|
||||
user.reagents.add_reagent(/datum/reagent/phosphorus,5)
|
||||
user.reagents.add_reagent(/datum/reagent/potassium,5) // = smoke, along with any reagents inside mr. slime
|
||||
user.reagents.add_reagent(/datum/reagent/consumable/sugar,5)
|
||||
to_chat(user, "<span class='warning'>You activate [src], and a cloud of smoke bursts out of your skin!</span>")
|
||||
return 450
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
name = "yellow slime extract"
|
||||
icon_state = "yellow slime extract"
|
||||
effectmod = "charged"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -266,13 +266,13 @@
|
||||
name = "red slime extract"
|
||||
icon_state = "red slime extract"
|
||||
effectmod = "sanguine"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
to_chat(user, "<span class='notice'>You activate [src]. You start feeling fast!</span>")
|
||||
user.reagents.add_reagent("ephedrine",5)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/ephedrine,5)
|
||||
return 450
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
@@ -286,15 +286,15 @@
|
||||
name = "blue slime extract"
|
||||
icon_state = "blue slime extract"
|
||||
effectmod = "stabilized"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma, /datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
to_chat(user, "<span class='notice'>You activate [src]. Your genome feels more stable!</span>")
|
||||
user.adjustCloneLoss(-15)
|
||||
user.reagents.add_reagent("mutadone", 10)
|
||||
user.reagents.add_reagent("potass_iodide", 10)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/potass_iodide, 10)
|
||||
return 250
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
@@ -310,7 +310,7 @@
|
||||
name = "dark blue slime extract"
|
||||
icon_state = "dark blue slime extract"
|
||||
effectmod = "chilling"
|
||||
activate_reagents = list("plasma","water")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma, /datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -318,8 +318,8 @@
|
||||
to_chat(user, "<span class='notice'>You activate [src]. You start feeling colder!</span>")
|
||||
user.ExtinguishMob()
|
||||
user.adjust_fire_stacks(-20)
|
||||
user.reagents.add_reagent("frostoil",4)
|
||||
user.reagents.add_reagent("cryoxadone",5)
|
||||
user.reagents.add_reagent(/datum/reagent/consumable/frostoil,4)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,5)
|
||||
return 100
|
||||
|
||||
if(SLIME_ACTIVATE_MAJOR)
|
||||
@@ -333,7 +333,7 @@
|
||||
name = "pink slime extract"
|
||||
icon_state = "pink slime extract"
|
||||
effectmod = "gentle"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -354,14 +354,14 @@
|
||||
user.visible_message("<span class='warning'>[user]'s skin starts flashing hypnotically...</span>", "<span class='notice'>Your skin starts forming odd patterns, pacifying creatures around you.</span>")
|
||||
for(var/mob/living/carbon/C in viewers(user, null))
|
||||
if(C != user)
|
||||
C.reagents.add_reagent("pax",2)
|
||||
C.reagents.add_reagent(/datum/reagent/pax,2)
|
||||
return 600
|
||||
|
||||
/obj/item/slime_extract/green
|
||||
name = "green slime extract"
|
||||
icon_state = "green slime extract"
|
||||
effectmod = "mutative"
|
||||
activate_reagents = list("blood","plasma","radium")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma, /datum/reagent/radium)
|
||||
|
||||
/obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -385,7 +385,7 @@
|
||||
name = "light pink slime extract"
|
||||
icon_state = "light pink slime extract"
|
||||
effectmod = "loyal"
|
||||
activate_reagents = list("plasma")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -409,7 +409,7 @@
|
||||
name = "black slime extract"
|
||||
icon_state = "black slime extract"
|
||||
effectmod = "transformative"
|
||||
activate_reagents = list("plasma")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -430,7 +430,7 @@
|
||||
name = "oil slime extract"
|
||||
icon_state = "oil slime extract"
|
||||
effectmod = "detonating"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -453,7 +453,7 @@
|
||||
name = "adamantine slime extract"
|
||||
icon_state = "adamantine slime extract"
|
||||
effectmod = "crystalline"
|
||||
activate_reagents = list("plasma")
|
||||
activate_reagents = list(/datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -482,7 +482,7 @@
|
||||
name = "bluespace slime extract"
|
||||
icon_state = "bluespace slime extract"
|
||||
effectmod = "warping"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma)
|
||||
var/teleport_ready = FALSE
|
||||
var/teleport_x = 0
|
||||
var/teleport_y = 0
|
||||
@@ -518,7 +518,7 @@
|
||||
name = "pyrite slime extract"
|
||||
icon_state = "pyrite slime extract"
|
||||
effectmod = "prismatic"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -544,12 +544,12 @@
|
||||
name = "cerulean slime extract"
|
||||
icon_state = "cerulean slime extract"
|
||||
effectmod = "recurring"
|
||||
activate_reagents = list("blood","plasma")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma)
|
||||
|
||||
/obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
user.reagents.add_reagent("salbutamol",15)
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/salbutamol,15)
|
||||
to_chat(user, "<span class='notice'>You feel like you don't need to breathe!</span>")
|
||||
return 150
|
||||
|
||||
@@ -564,7 +564,7 @@
|
||||
name = "sepia slime extract"
|
||||
icon_state = "sepia slime extract"
|
||||
effectmod = "lengthened"
|
||||
activate_reagents = list("blood","plasma","water")
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma, /datum/reagent/water)
|
||||
|
||||
/obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
@@ -586,7 +586,7 @@
|
||||
name = "rainbow slime extract"
|
||||
icon_state = "rainbow slime extract"
|
||||
effectmod = "hyperchromatic"
|
||||
activate_reagents = list("blood","plasma","lesser plasma","slimejelly","holy water and uranium") //Curse this snowflake reagent list.
|
||||
activate_reagents = list(/datum/reagent/blood, /datum/reagent/toxin/plasma,"lesser plasma", /datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list.
|
||||
|
||||
/obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
|
||||
Reference in New Issue
Block a user