module things, jfc
This commit is contained in:
@@ -44,6 +44,8 @@ other types of metals and chemistry for reagents).
|
||||
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()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
name = "Module Design (Safeguard)"
|
||||
desc = "Allows for the construction of a Safeguard AI Module."
|
||||
id = "safeguard_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/aiModule/supplied/safeguard
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -23,7 +23,7 @@
|
||||
name = "Module Design (OneHuman)"
|
||||
desc = "Allows for the construction of a OneHuman AI Module."
|
||||
id = "onehuman_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 6000)
|
||||
build_path = /obj/item/aiModule/zeroth/oneHuman
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -32,7 +32,7 @@
|
||||
name = "Module Design (ProtectStation)"
|
||||
desc = "Allows for the construction of a ProtectStation AI Module."
|
||||
id = "protectstation_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/aiModule/supplied/protectStation
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -41,7 +41,7 @@
|
||||
name = "Module Design (Quarantine)"
|
||||
desc = "Allows for the construction of a Quarantine AI Module."
|
||||
id = "quarantine_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/aiModule/supplied/quarantine
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -50,7 +50,7 @@
|
||||
name = "Module Design (OxygenIsToxicToHumans)"
|
||||
desc = "Allows for the construction of a Safeguard AI Module."
|
||||
id = "oxygen_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/aiModule/supplied/oxygen
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -59,7 +59,7 @@
|
||||
name = "Module Design (Freeform)"
|
||||
desc = "Allows for the construction of a Freeform AI Module."
|
||||
id = "freeform_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 10000)//Custom inputs should be more expensive to get
|
||||
build_path = /obj/item/aiModule/supplied/freeform
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -68,7 +68,7 @@
|
||||
name = "Module Design (Reset)"
|
||||
desc = "Allows for the construction of a Reset AI Module."
|
||||
id = "reset_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/aiModule/reset
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -77,7 +77,7 @@
|
||||
name = "Module Design (Purge)"
|
||||
desc = "Allows for the construction of a Purge AI Module."
|
||||
id = "purge_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/reset/purge
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -86,7 +86,7 @@
|
||||
name = "Module Design (Law Removal)"
|
||||
desc = "Allows for the construction of a Law Removal AI Core Module."
|
||||
id = "remove_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/remove
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -95,7 +95,7 @@
|
||||
name = "AI Core Module (Freeform)"
|
||||
desc = "Allows for the construction of a Freeform AI Core Module."
|
||||
id = "freeformcore_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 10000)//Ditto
|
||||
build_path = /obj/item/aiModule/core/freeformcore
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -104,7 +104,7 @@
|
||||
name = "Core Module Design (Asimov)"
|
||||
desc = "Allows for the construction of an Asimov AI Core Module."
|
||||
id = "asimov_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/core/full/asimov
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -114,7 +114,7 @@
|
||||
desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module."
|
||||
id = "paladin_module"
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/core/full/paladin
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -123,7 +123,7 @@
|
||||
name = "Core Module Design (T.Y.R.A.N.T.)"
|
||||
desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module."
|
||||
id = "tyrant_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/core/full/tyrant
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -132,7 +132,7 @@
|
||||
name = "Core Module Design (Corporate)"
|
||||
desc = "Allows for the construction of a Corporate AI Core Module."
|
||||
id = "corporate_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/core/full/corp
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -141,7 +141,7 @@
|
||||
name = "Core Module Design (Default)"
|
||||
desc = "Allows for the construction of a Default AI Core Module."
|
||||
id = "default_module"
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/aiModule/core/full/custom
|
||||
category = list("AI Modules")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
@@ -34,6 +34,14 @@
|
||||
build_path = /obj/item/extinguisher
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/pocketfireextinguisher
|
||||
name = "Pocket Fire Extinguisher"
|
||||
id = "pocketfireextinguisher"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 40)
|
||||
build_path = /obj/item/extinguisher/mini
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/multitool
|
||||
name = "Multitool"
|
||||
id = "multitool"
|
||||
@@ -229,10 +237,10 @@
|
||||
/datum/design/rglass
|
||||
name = "Reinforced Glass"
|
||||
id = "rglass"
|
||||
build_type = AUTOLATHE | SMELTER
|
||||
build_type = AUTOLATHE | SMELTER | PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/rglass
|
||||
category = list("initial","Construction")
|
||||
category = list("initial","Construction","Stock Parts")
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/rods
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 300)
|
||||
build_path = /obj/item/storage/belt/security
|
||||
category = list("initial","Leather and Cloth")
|
||||
category = list("initial","Organic Materials")
|
||||
|
||||
/datum/design/medbelt
|
||||
name = "Medical Belt"
|
||||
@@ -145,7 +145,7 @@
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 300)
|
||||
build_path = /obj/item/storage/belt/medical
|
||||
category = list("initial","Leather and Cloth")
|
||||
category = list("initial","Organic Materials")
|
||||
|
||||
/datum/design/janibelt
|
||||
name = "Janitorial Belt"
|
||||
@@ -153,7 +153,7 @@
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 300)
|
||||
build_path = /obj/item/storage/belt/janitor
|
||||
category = list("initial","Leather and Cloth")
|
||||
category = list("initial","Organic Materials")
|
||||
|
||||
/datum/design/s_holster
|
||||
name = "Shoulder Holster"
|
||||
@@ -161,7 +161,7 @@
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 400)
|
||||
build_path = /obj/item/storage/belt/holster
|
||||
category = list("initial","Leather and Cloth")
|
||||
category = list("initial","Organic Materials")
|
||||
|
||||
/datum/design/rice_hat
|
||||
name = "Rice Hat"
|
||||
@@ -169,4 +169,4 @@
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 300)
|
||||
build_path = /obj/item/clothing/head/rice_hat
|
||||
category = list("initial","Leather and Cloth")
|
||||
category = list("initial","Organic Materials")
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
name = "Computer Design (AI Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
|
||||
id = "aiupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/aiupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -58,6 +59,7 @@
|
||||
name = "Computer Design (Cyborg Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
|
||||
id = "borgupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/borgupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
@@ -306,6 +306,38 @@
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_chamber
|
||||
name = "Machine Design (Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Nanite Chamber."
|
||||
id = "nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/public_nanite_chamber
|
||||
name = "Machine Design (Public Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Public Nanite Chamber."
|
||||
id = "public_nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/public_nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_programmer
|
||||
name = "Machine Design (Nanite Programmer Board)"
|
||||
desc = "The circuit board for a Nanite Programmer."
|
||||
id = "nanite_programmer"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_programmer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_program_hub
|
||||
name = "Machine Design (Nanite Program Hub Board)"
|
||||
desc = "The circuit board for a Nanite Program Hub."
|
||||
id = "nanite_program_hub"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_program_hub
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/microwave
|
||||
name = "Machine Design (Microwave Board)"
|
||||
desc = "The circuit board for a microwave."
|
||||
@@ -398,7 +430,7 @@
|
||||
name = "Machine Design (Weapon Recharger Board)"
|
||||
desc = "The circuit board for a Weapon Recharger."
|
||||
id = "recharger"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 100)
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/machine/recharger
|
||||
category = list("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
@@ -475,6 +507,14 @@
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/harvester
|
||||
name = "Machine Design (Organ Harvester Board)"
|
||||
desc = "The circuit board for an organ harvester."
|
||||
id = "harvester"
|
||||
build_path = /obj/item/circuitboard/machine/harvester
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/deepfryer
|
||||
name = "Machine Design (Deep Fryer)"
|
||||
desc = "The circuit board for a Deep Fryer."
|
||||
@@ -523,34 +563,10 @@
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/nanite_chamber
|
||||
name = "Machine Design (Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Nanite Chamber."
|
||||
id = "nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/public_nanite_chamber
|
||||
name = "Machine Design (Public Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Public Nanite Chamber."
|
||||
id = "public_nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/public_nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_programmer
|
||||
name = "Machine Design (Nanite Programmer Board)"
|
||||
desc = "The circuit board for a Nanite Programmer."
|
||||
id = "nanite_programmer"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_programmer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_program_hub
|
||||
name = "Machine Design (Nanite Program Hub Board)"
|
||||
desc = "The circuit board for a Nanite Program Hub."
|
||||
id = "nanite_program_hub"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_program_hub
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
/datum/design/board/ore_silo
|
||||
name = "Machine Design (Ore Silo)"
|
||||
desc = "The circuit board for an ore silo."
|
||||
id = "ore_silo"
|
||||
build_path = /obj/item/circuitboard/machine/ore_silo
|
||||
category = list ("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
@@ -704,6 +704,15 @@
|
||||
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000, MAT_GOLD=10000, MAT_TITANIUM=5000, MAT_DIAMOND=5000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_surgicalprocessor
|
||||
name = "Cyborg Upgrade (Surgical Processor)"
|
||||
id = "borg_upgrade_surgicalprocessor"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/processor
|
||||
materials = list(MAT_METAL=15000, MAT_GLASS=15000, MAT_SILVER=10000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_trashofholding
|
||||
name = "Cyborg Upgrade (Trash Bag of Holding)"
|
||||
|
||||
@@ -122,6 +122,16 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/crewpinpointer
|
||||
name = "Crew Pinpointer"
|
||||
desc = "Allows tracking of someone's location if their suit sensors are turned to tracking beacon."
|
||||
id = "crewpinpointer"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1500, MAT_GOLD = 200)
|
||||
build_path = /obj/item/pinpointer/crew
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator
|
||||
name = "Defibrillator"
|
||||
id = "defibrillator"
|
||||
@@ -200,7 +210,7 @@
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
/datum/design/healthanalyzer_advanced
|
||||
name = "advanced health analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy."
|
||||
@@ -210,7 +220,7 @@
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 2000, MAT_GOLD = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
/////////////////////////////////////////
|
||||
@@ -486,102 +496,93 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/surgery_lobotomy
|
||||
name = "Lobotomy Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Lobotomy surgery."
|
||||
/////////////////////
|
||||
///Surgery Designs///
|
||||
/////////////////////
|
||||
/datum/design/surgery
|
||||
name = "Surgery Design"
|
||||
desc = "what"
|
||||
id = "surgery_parent"
|
||||
research_icon = 'icons/obj/surgery.dmi'
|
||||
research_icon_state = "surgery_any"
|
||||
var/surgery
|
||||
|
||||
/datum/design/surgery/lobotomy
|
||||
name = "Lobotomy"
|
||||
desc = "An invasive surgical procedure which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return."
|
||||
id = "surgery_lobotomy"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/lobotomy
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/lobotomy
|
||||
research_icon_state = "surgery_head"
|
||||
|
||||
/datum/design/surgery_pacify
|
||||
name = "Pacification Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Pacification surgery."
|
||||
/datum/design/surgery/pacify
|
||||
name = "Pacification"
|
||||
desc = "A surgical procedure which permanently inhibits the aggression center of the brain, making the patient unwilling to cause direct harm."
|
||||
id = "surgery_pacify"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/pacification
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/pacify
|
||||
research_icon_state = "surgery_head"
|
||||
|
||||
/datum/design/surgery_viral_bonding
|
||||
name = "Viral Bonding Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Viral Bonding surgery."
|
||||
/datum/design/surgery/viral_bonding
|
||||
name = "Viral Bonding"
|
||||
desc = "A surgical procedure that forces a symbiotic relationship between a virus and its host. The patient must be dosed with spaceacillin, virus food, and formaldehyde."
|
||||
id = "surgery_viral_bond"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/viral_bonding
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/viral_bonding
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery_reconstruction
|
||||
name = "Reconstruction Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Reconstruction surgery."
|
||||
/datum/design/surgery/reconstruction
|
||||
name = "Reconstruction"
|
||||
desc = "A surgical procedure that gradually repairs damage done to a body without the assistance of chemicals. Unlike classic medicine, it is effective on corpses."
|
||||
id = "surgery_reconstruction"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/reconstruction
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/reconstruction
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery_revival
|
||||
name = "Revival Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Revival surgery."
|
||||
/datum/design/surgery/revival
|
||||
name = "Revival"
|
||||
desc = "An experimental surgical procedure which involves reconstruction and reactivation of the patient's brain even long after death. The body must still be able to sustain life."
|
||||
id = "surgery_revival"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/revival
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/revival
|
||||
research_icon_state = "surgery_head"
|
||||
|
||||
/datum/design/surgery_brainwashing
|
||||
name = "Brainwashing Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Brainwashing surgery."
|
||||
/datum/design/surgery/brainwashing
|
||||
name = "Brainwashing"
|
||||
desc = "A surgical procedure which directly implants a directive into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant."
|
||||
id = "surgery_brainwashing"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/brainwashing
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/brainwashing
|
||||
research_icon_state = "surgery_head"
|
||||
|
||||
/datum/design/surgery_nerve_splicing
|
||||
name = "Nerve Splicing Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Nerve Splicing surgery."
|
||||
/datum/design/surgery/nerve_splicing
|
||||
name = "Nerve Splicing"
|
||||
desc = "A surgical procedure which splices the patient's nerves, making them more resistant to stuns."
|
||||
id = "surgery_nerve_splice"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/nerve_splicing
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/bioware/nerve_splicing
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery_nerve_grounding
|
||||
name = "Nerve Grounding Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Nerve Grounding surgery."
|
||||
/datum/design/surgery/nerve_grounding
|
||||
name = "Nerve Grounding"
|
||||
desc = "A surgical procedure which makes the patient's nerves act as grounding rods, protecting them from electrical shocks."
|
||||
id = "surgery_nerve_ground"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/nerve_grounding
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/bioware/nerve_grounding
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery_vein_threading
|
||||
name = "Vein Threading Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Vein Threading surgery."
|
||||
/datum/design/surgery/vein_threading
|
||||
name = "Vein Threading"
|
||||
desc = "A surgical procedure which severely reduces the amount of blood lost in case of injury."
|
||||
id = "surgery_vein_thread"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/vein_threading
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
surgery = /datum/surgery/advanced/bioware/vein_threading
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery_necrotic_revival
|
||||
name = "Necrotic Revival Surgery Disk"
|
||||
desc = "A disk containing the instructions for a Necrotic Revival surgery."
|
||||
/datum/design/surgery/necrotic_revival
|
||||
name = "Necrotic Revival"
|
||||
desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone."
|
||||
id = "surgery_zombie"
|
||||
surgery = /datum/surgery/advanced/necrotic_revival
|
||||
research_icon_state = "surgery_head"
|
||||
|
||||
/datum/design/holobarrier_med
|
||||
name = "PENLITE holobarrier projector"
|
||||
desc = "PENLITE holobarriers, a device that halts individuals with malicious diseases."
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/surgery/necrotic_revival
|
||||
build_path = /obj/item/holosign_creator/medical
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 100) //a hint of silver since it can troll 2 antags (bad viros and sentient disease)
|
||||
id = "holobarrier_med"
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
@@ -157,6 +157,16 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/forcefield_projector
|
||||
name = "Forcefield Projector"
|
||||
desc = "A device which can project temporary forcefields to seal off an area."
|
||||
id = "forcefield_projector"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2500, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/forcefield_projector
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/sci_goggles
|
||||
name = "Science Goggles"
|
||||
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
|
||||
@@ -267,6 +277,16 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/locator
|
||||
name = "Bluespace locator"
|
||||
desc = "Used to track portable teleportation beacons and targets with embedded tracking implants."
|
||||
id = "locator"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL=1000, MAT_GLASS=500, MAT_SILVER = 500)
|
||||
build_path = /obj/item/locator
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Janitor Designs//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
build_type = NANITE_COMPILER
|
||||
construction_time = 50
|
||||
category = list()
|
||||
//research_icon = 'icons/obj/device.dmi'
|
||||
//research_icon_state = "nanite_program"
|
||||
research_icon = 'icons/obj/device.dmi'
|
||||
research_icon_state = "nanite_program"
|
||||
var/program_type = /datum/nanite_program
|
||||
|
||||
////////////////////UTILITY NANITES//////////////////////////////////////
|
||||
|
||||
@@ -3,51 +3,63 @@
|
||||
/datum/design/plasteel_alloy
|
||||
name = "Plasma + Iron alloy"
|
||||
id = "plasteel"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasteel
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
|
||||
/datum/design/plastitanium_alloy
|
||||
name = "Plasma + Titanium alloy"
|
||||
id = "plastitanium"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/mineral/plastitanium
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plaglass_alloy
|
||||
name = "Plasma + Glass alloy"
|
||||
id = "plasmaglass"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasmaglass
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plasmarglass_alloy
|
||||
name = "Plasma + Metal + Glass alloy"
|
||||
id = "plasmareinforcedglass"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasmarglass
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/titaniumglass_alloy
|
||||
name = "Titanium + Glass alloy"
|
||||
id = "titaniumglass"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/titaniumglass
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plastitaniumglass_alloy
|
||||
name = "Plasma + Titanium + Glass alloy"
|
||||
id = "plastitaniumglass"
|
||||
build_type = SMELTER
|
||||
build_type = SMELTER | PROTOLATHE
|
||||
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plastitaniumglass
|
||||
category = list("initial")
|
||||
category = list("initial", "Stock Parts")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/alienalloy
|
||||
name = "Alien Alloy"
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
materials = list(MAT_METAL = 3000)
|
||||
build_path = /obj/item/grenade/chem_grenade/large
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/pyro_grenade
|
||||
name = "Pyro Grenade"
|
||||
|
||||
@@ -36,10 +36,6 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
. = 1
|
||||
if(!is_insertion_ready(user))
|
||||
return
|
||||
if(istype (O, /obj/item/bodybag/bluespace)) // CITADEL ADD. STOP PUTTING FUCKING BORGS INTO THE ANALYZER
|
||||
if(O.contents.len != 0)
|
||||
to_chat(user, "<span class='warning'>\The [O] has dangerous levels of activity, you cannot put it in the [src.name]!</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
to_chat(user, "<span class='warning'>\The [O] is stuck to your hand, you cannot put it in the [src.name]!</span>")
|
||||
return
|
||||
@@ -63,11 +59,14 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
|
||||
/obj/machinery/rnd/destructive_analyzer/proc/reclaim_materials_from(obj/item/thing)
|
||||
. = 0
|
||||
if(linked_console && linked_console.linked_lathe) //Also sends salvaged materials to a linked protolathe, if any.
|
||||
var/datum/component/material_container/storage = linked_console?.linked_lathe?.materials.mat_container
|
||||
if(storage) //Also sends salvaged materials to a linked protolathe, if any.
|
||||
for(var/material in thing.materials)
|
||||
var/can_insert = min((linked_console.linked_lathe.materials.max_amount - linked_console.linked_lathe.materials.total_amount), (max(thing.materials[material]*(decon_mod/10), thing.materials[material])))
|
||||
linked_console.linked_lathe.materials.insert_amount(can_insert, material)
|
||||
var/can_insert = min((storage.max_amount - storage.total_amount), (max(thing.materials[material]*(decon_mod/10), thing.materials[material])))
|
||||
storage.insert_amount(can_insert, material)
|
||||
. += can_insert
|
||||
if (.)
|
||||
linked_console.linked_lathe.materials.silo_log(src, "reclaimed", 1, "[thing.name]", thing.materials)
|
||||
|
||||
/obj/machinery/rnd/destructive_analyzer/proc/destroy_item(obj/item/thing, innermode = FALSE)
|
||||
if(QDELETED(thing) || QDELETED(src) || QDELETED(linked_console))
|
||||
|
||||
@@ -583,7 +583,7 @@
|
||||
/obj/item/relic/proc/corgicannon(mob/user)
|
||||
playsound(src, "sparks", rand(25,50), 1)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/C = new/mob/living/simple_animal/pet/dog/corgi(get_turf(user))
|
||||
C.throw_at(pick(oview(10,user)), 10, rand(3,8), callback = CALLBACK(src, .throwSmoke, C))
|
||||
C.throw_at(pick(oview(10,user)), 10, rand(3,8), callback = CALLBACK(src, .proc/throwSmoke, C))
|
||||
warn_admins(user, "Corgi Cannon", 0)
|
||||
|
||||
/obj/item/relic/proc/clean(mob/user)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
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/material_container/materials //Store for hyper speed!
|
||||
var/datum/component/remote_materials/materials
|
||||
var/allowed_department_flags = ALL
|
||||
var/production_animation //What's flick()'d on print.
|
||||
var/allowed_buildtypes = NONE
|
||||
@@ -19,19 +19,16 @@
|
||||
var/screen = RESEARCH_FABRICATOR_SCREEN_MAIN
|
||||
var/selected_category
|
||||
|
||||
/obj/machinery/rnd/production/Initialize()
|
||||
/obj/machinery/rnd/production/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(0)
|
||||
materials = AddComponent(/datum/component/material_container,
|
||||
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0,
|
||||
TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials.precise_insertion = TRUE
|
||||
RefreshParts()
|
||||
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)
|
||||
@@ -47,9 +44,6 @@
|
||||
/obj/machinery/rnd/production/RefreshParts()
|
||||
calculate_efficiency()
|
||||
|
||||
/obj/machinery/rnd/production/attack_hand(mob/user)
|
||||
interact(user) //remove this snowflake shit when the refactor of storage components or some other pr that unsnowflakes attack_hand on machinery is in
|
||||
|
||||
/obj/machinery/rnd/production/ui_interact(mob/user)
|
||||
if(!consoleless_interface)
|
||||
return ..()
|
||||
@@ -70,9 +64,10 @@
|
||||
reagents.maximum_volume += G.volume
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
if(materials)
|
||||
materials.max_amount = 0
|
||||
var/total_storage = 0
|
||||
for(var/obj/item/stock_parts/matter_bin/M in component_parts)
|
||||
materials.max_amount += M.rating * 75000
|
||||
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
|
||||
@@ -83,7 +78,6 @@
|
||||
/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)
|
||||
materials.retrieve_all()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/rnd/production/proc/do_print(path, amount, list/matlist, notify_admins)
|
||||
@@ -92,18 +86,26 @@
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] 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(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/stack/ore/bluespace_crystal))
|
||||
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.amount(M)
|
||||
var/A = materials.mat_container.amount(M)
|
||||
if(!A)
|
||||
A = reagents.get_reagent_amount(M)
|
||||
|
||||
return round(A / max(1, (all_materials[M]/efficiency_coeff)))
|
||||
// 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)
|
||||
@@ -121,25 +123,33 @@
|
||||
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]/efficiency_coeff
|
||||
if(!materials.has_materials(efficient_mats, amount))
|
||||
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/efficiency_coeff))
|
||||
if(!reagents.has_reagent(R, D.reagents_list[R]*amount/coeff))
|
||||
say("Not enough reagents to complete prototype[amount > 1? "s" : ""].")
|
||||
return FALSE
|
||||
materials.use_amount(efficient_mats, amount)
|
||||
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/efficiency_coeff)
|
||||
reagents.remove_reagent(R, D.reagents_list[R]*amount/coeff)
|
||||
busy = TRUE
|
||||
if(production_animation)
|
||||
flick(production_animation, src)
|
||||
@@ -181,17 +191,23 @@
|
||||
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>"]"
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RESEARCH_FABRICATOR_SCREEN_MATERIALS]'><B>Material Amount:</B> [materials.total_amount] / [materials.max_amount]</A>"
|
||||
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.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
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]"
|
||||
@@ -230,6 +246,8 @@
|
||||
return
|
||||
if(!coeff)
|
||||
coeff = efficiency_coeff
|
||||
if(!efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
var/list/l = list()
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
@@ -281,9 +299,23 @@
|
||||
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
|
||||
materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"])
|
||||
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)]'>\
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
circuit = /obj/item/circuitboard/machine/nanite_chamber
|
||||
icon = 'icons/obj/machines/nanite_chamber.dmi'
|
||||
icon_state = "nanite_chamber"
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
use_power = IDLE_POWER_USE
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
idle_power_usage = 50
|
||||
active_power_usage = 300
|
||||
occupant_typecache = list(/mob/living)
|
||||
|
||||
var/obj/machinery/computer/nanite_chamber_control/console
|
||||
var/locked = FALSE
|
||||
@@ -20,6 +20,10 @@
|
||||
var/busy_message
|
||||
var/message_cooldown = 0
|
||||
|
||||
/obj/machinery/nanite_chamber/Initialize()
|
||||
. = ..()
|
||||
occupant_typecache = GLOB.typecache_living
|
||||
|
||||
/obj/machinery/nanite_chamber/RefreshParts()
|
||||
scan_level = 0
|
||||
for(var/obj/item/stock_parts/scanning_module/P in component_parts)
|
||||
@@ -224,4 +228,4 @@
|
||||
/obj/machinery/nanite_chamber/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
|
||||
return
|
||||
close_machine(target)
|
||||
close_machine(target)
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
if(backup)
|
||||
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
|
||||
var/datum/component/nanites/nanites = backup.nanites
|
||||
nanites.add_program(disk.program.copy())
|
||||
nanites.add_program(null, disk.program.copy())
|
||||
investigate_log("[key_name(usr)] uploaded program [disk.program.name] to cloud #[current_view]", INVESTIGATE_NANITES)
|
||||
. = TRUE
|
||||
if("remove_program")
|
||||
|
||||
@@ -15,6 +15,11 @@
|
||||
if(disk)
|
||||
eject()
|
||||
|
||||
/obj/item/nanite_hijacker/examine(mob/user)
|
||||
. = ..()
|
||||
if(disk)
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to eject the disk.</span>")
|
||||
|
||||
/obj/item/nanite_hijacker/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/disk/nanite_program))
|
||||
var/obj/item/disk/nanite_program/N = I
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if(5) //Program is scrambled and does something different
|
||||
var/rogue_type = pick(rogue_types)
|
||||
var/datum/nanite_program/rogue = new rogue_type
|
||||
nanites.add_program(rogue, src)
|
||||
nanites.add_program(null, rogue, src)
|
||||
qdel(src)
|
||||
|
||||
/datum/nanite_program/proc/receive_signal(code, source)
|
||||
|
||||
@@ -12,12 +12,6 @@
|
||||
var/mob/living/carbon/human/H = host_mob
|
||||
H.physiology.stun_mod *= 0.5
|
||||
|
||||
/datum/nanite_program/nervous/active_effect()
|
||||
. = ..()
|
||||
if(iscarbon(host_mob))
|
||||
var/mob/living/carbon/C = host_mob
|
||||
C.adjustStaminaLoss(-2)
|
||||
|
||||
/datum/nanite_program/nervous/disable_passive_effect()
|
||||
. = ..()
|
||||
if(ishuman(host_mob))
|
||||
@@ -133,4 +127,4 @@
|
||||
/datum/nanite_program/mindshield/disable_passive_effect()
|
||||
. = ..()
|
||||
host_mob.remove_trait(TRAIT_MINDSHIELD, "nanites")
|
||||
host_mob.sec_hud_set_implants()
|
||||
host_mob.sec_hud_set_implants()
|
||||
@@ -128,7 +128,7 @@
|
||||
return
|
||||
var/update = FALSE
|
||||
for(var/obj/item/bodypart/L in parts)
|
||||
if(L.heal_damage(1/parts.len, 1/parts.len))
|
||||
if(L.heal_damage(1/parts.len, 1/parts.len, only_robotic = TRUE, only_organic = FALSE))
|
||||
update = TRUE
|
||||
if(update)
|
||||
host_mob.update_damage_overlays()
|
||||
@@ -208,10 +208,8 @@
|
||||
if(!..())
|
||||
return
|
||||
|
||||
playsound(host_mob, 'sound/machines/defib_zap.ogg', 75, 1, -1)
|
||||
if(check_revivable())
|
||||
host_mob.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src)
|
||||
addtimer(CALLBACK(src, .proc/zap), 30)
|
||||
host_mob.notify_ghost_cloning("Your heart is being defibrillated by nanites. Re-enter your corpse if you want to be revived!")
|
||||
addtimer(CALLBACK(src, .proc/zap), 50)
|
||||
|
||||
/datum/nanite_program/triggered/defib/proc/check_revivable()
|
||||
if(!iscarbon(host_mob)) //nonstandard biology
|
||||
@@ -219,22 +217,25 @@
|
||||
var/mob/living/carbon/C = host_mob
|
||||
if(C.suiciding || C.has_trait(TRAIT_NOCLONE) || C.hellbound) //can't revive
|
||||
return FALSE
|
||||
if((world.time - C.timeofdeath) < 1800) //too late
|
||||
if((world.time - C.timeofdeath) > 1800) //too late
|
||||
return FALSE
|
||||
if((C.getBruteLoss() > 180) || (C.getFireLoss() > 180)) //too damaged
|
||||
if((C.getBruteLoss() > 180) || (C.getFireLoss() > 180) || !C.can_be_revived()) //too damaged
|
||||
return FALSE
|
||||
if(!C.getorgan(/obj/item/organ/heart)) //what are we even shocking
|
||||
return FALSE
|
||||
var/obj/item/organ/brain/BR = C.getorgan(/obj/item/organ/brain)
|
||||
if(QDELETED(BR) || BR.damaged_brain)
|
||||
return FALSE
|
||||
if(!C.ckey && !C.get_ghost())
|
||||
if(C.get_ghost())
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/nanite_program/triggered/defib/proc/zap()
|
||||
if(check_revivable() && host_mob.ckey)
|
||||
var/mob/living/carbon/C = host_mob
|
||||
var/mob/living/carbon/C = host_mob
|
||||
playsound(C, 'sound/machines/defib_charge.ogg', 50, 0)
|
||||
sleep(30)
|
||||
playsound(C, 'sound/machines/defib_zap.ogg', 50, 0)
|
||||
if(check_revivable())
|
||||
playsound(C, 'sound/machines/defib_success.ogg', 50, 0)
|
||||
C.set_heartattack(FALSE)
|
||||
C.revive()
|
||||
@@ -246,5 +247,5 @@
|
||||
C.adjustBrainLoss( max(0, ((1800 - tplus) / 1800 * 150)), 150)
|
||||
log_game("[C] has been successfully defibrillated by nanites.")
|
||||
else
|
||||
playsound(host_mob, 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
playsound(C, 'sound/machines/defib_failed.ogg', 50, 0)
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
if(host_mob.stat == DEAD)
|
||||
return
|
||||
to_chat(host_mob, "<span class='warning'>You feel compelled to speak...</span>")
|
||||
host_mob.say(sentence)
|
||||
host_mob.say(sentence, forced = "nanite speech")
|
||||
|
||||
/datum/nanite_program/triggered/voice
|
||||
name = "Skull Echo"
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
circuit = /obj/item/circuitboard/machine/public_nanite_chamber
|
||||
icon = 'icons/obj/machines/nanite_chamber.dmi'
|
||||
icon_state = "nanite_chamber"
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
use_power = IDLE_POWER_USE
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
idle_power_usage = 50
|
||||
active_power_usage = 300
|
||||
occupant_typecache = list(/mob/living)
|
||||
|
||||
var/cloud_id = 1
|
||||
var/locked = FALSE
|
||||
@@ -18,6 +18,10 @@
|
||||
var/busy_icon_state
|
||||
var/message_cooldown = 0
|
||||
|
||||
/obj/machinery/public_nanite_chamber/Initialize()
|
||||
. = ..()
|
||||
occupant_typecache = GLOB.typecache_living
|
||||
|
||||
/obj/machinery/public_nanite_chamber/RefreshParts()
|
||||
var/obj/item/circuitboard/machine/public_nanite_chamber/board = circuit
|
||||
if(board)
|
||||
@@ -171,4 +175,4 @@
|
||||
/obj/machinery/public_nanite_chamber/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
|
||||
return
|
||||
close_machine(target)
|
||||
close_machine(target)
|
||||
|
||||
@@ -197,6 +197,11 @@ Nothing else in the console has ID requirements.
|
||||
locked = FALSE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/rdconsole/multitool_act(mob/user, obj/item/multitool/I)
|
||||
var/lathe = linked_lathe && linked_lathe.multitool_act(user, I)
|
||||
var/print = linked_imprinter && linked_imprinter.multitool_act(user, I)
|
||||
return lathe || print
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num)
|
||||
if(!categories)
|
||||
return
|
||||
@@ -268,7 +273,10 @@ Nothing else in the console has ID requirements.
|
||||
/obj/machinery/computer/rdconsole/proc/ui_protolathe_header()
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><A href='?src=[REF(src)];switch_screen=[RDSCREEN_PROTOLATHE]'>Protolathe Menu</A>"
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RDSCREEN_PROTOLATHE_MATERIALS]'><B>Material Amount:</B> [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]</A>"
|
||||
if(linked_lathe.materials.mat_container)
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RDSCREEN_PROTOLATHE_MATERIALS]'><B>Material Amount:</B> [linked_lathe.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=[RDSCREEN_PROTOLATHE_CHEMICALS]'><B>Chemical volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]</A></div>"
|
||||
return l
|
||||
|
||||
@@ -277,7 +285,6 @@ Nothing else in the console has ID requirements.
|
||||
var/list/l = list()
|
||||
l += ui_protolathe_header()
|
||||
l += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3>"
|
||||
var/coeff = linked_lathe.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 & PROTOLATHE))
|
||||
@@ -286,11 +293,13 @@ Nothing else in the console has ID requirements.
|
||||
continue
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
var/t
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
if(!linked_lathe.efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
for(var/M in all_materials)
|
||||
t = linked_lathe.check_mat(D, M)
|
||||
var/t = linked_lathe.check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
@@ -332,16 +341,17 @@ Nothing else in the console has ID requirements.
|
||||
RDSCREEN_UI_LATHE_CHECK
|
||||
var/list/l = list()
|
||||
l += ui_protolathe_header()
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
for(var/datum/design/D in matching_designs)
|
||||
if(!(isnull(linked_lathe.allowed_department_flags) || (D.departmental_flags & linked_lathe.allowed_department_flags)))
|
||||
continue
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
var/t
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
if(!linked_lathe.efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
for(var/M in all_materials)
|
||||
t = linked_lathe.check_mat(D, M)
|
||||
var/t = linked_lathe.check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[all_materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
@@ -364,11 +374,15 @@ Nothing else in the console has ID requirements.
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/ui_protolathe_materials() //Legacy code
|
||||
RDSCREEN_UI_LATHE_CHECK
|
||||
var/datum/component/material_container/mat_container = linked_lathe.materials.mat_container
|
||||
if (!mat_container)
|
||||
screen = RDSCREEN_PROTOLATHE
|
||||
return ui_protolathe()
|
||||
var/list/l = list()
|
||||
l += ui_protolathe_header()
|
||||
l += "<div class='statusDisplay'><h3>Material Storage:</h3>"
|
||||
for(var/mat_id in linked_lathe.materials.materials)
|
||||
var/datum/material/M = linked_lathe.materials.materials[mat_id]
|
||||
for(var/mat_id in mat_container.materials)
|
||||
var/datum/material/M = 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]"
|
||||
@@ -392,7 +406,10 @@ Nothing else in the console has ID requirements.
|
||||
/obj/machinery/computer/rdconsole/proc/ui_circuit_header() //Legacy Code
|
||||
var/list/l = list()
|
||||
l += "<div class='statusDisplay'><A href='?src=[REF(src)];switch_screen=[RDSCREEN_IMPRINTER]'>Circuit Imprinter Menu</A>"
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RDSCREEN_IMPRINTER_MATERIALS]'><B>Material Amount:</B> [linked_imprinter.materials.total_amount] / [linked_imprinter.materials.max_amount]</A>"
|
||||
if (linked_imprinter.materials.mat_container)
|
||||
l += "<A href='?src=[REF(src)];switch_screen=[RDSCREEN_IMPRINTER_MATERIALS]'><B>Material Amount:</B> [linked_imprinter.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=[RDSCREEN_IMPRINTER_CHEMICALS]'><B>Chemical volume:</B> [linked_imprinter.reagents.total_volume] / [linked_imprinter.reagents.maximum_volume]</A></div>"
|
||||
return l
|
||||
|
||||
@@ -419,7 +436,6 @@ Nothing else in the console has ID requirements.
|
||||
l += ui_circuit_header()
|
||||
l += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3>"
|
||||
|
||||
var/coeff = linked_imprinter.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 & IMPRINTER))
|
||||
@@ -430,6 +446,9 @@ Nothing else in the console has ID requirements.
|
||||
var/check_materials = TRUE
|
||||
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
var/coeff = linked_imprinter.efficiency_coeff
|
||||
if(!linked_imprinter.efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
|
||||
for(var/M in all_materials)
|
||||
temp_materials += " | "
|
||||
@@ -451,13 +470,15 @@ Nothing else in the console has ID requirements.
|
||||
l += ui_circuit_header()
|
||||
l += "<div class='statusDisplay'><h3>Search results:</h3>"
|
||||
|
||||
var/coeff = linked_imprinter.efficiency_coeff
|
||||
for(var/datum/design/D in matching_designs)
|
||||
if(!(isnull(linked_imprinter.allowed_department_flags) || (D.departmental_flags & linked_imprinter.allowed_department_flags)))
|
||||
continue
|
||||
var/temp_materials
|
||||
var/check_materials = TRUE
|
||||
var/all_materials = D.materials + D.reagents_list
|
||||
var/coeff = linked_imprinter.efficiency_coeff
|
||||
if(!linked_imprinter.efficient_with(D.build_path))
|
||||
coeff = 1
|
||||
for(var/M in all_materials)
|
||||
temp_materials += " | "
|
||||
if (!linked_imprinter.check_mat(D, M))
|
||||
@@ -485,11 +506,15 @@ Nothing else in the console has ID requirements.
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/ui_circuit_materials() //Legacy code!
|
||||
RDSCREEN_UI_IMPRINTER_CHECK
|
||||
var/datum/component/material_container/mat_container = linked_imprinter.materials.mat_container
|
||||
if (!mat_container)
|
||||
screen = RDSCREEN_IMPRINTER
|
||||
return ui_circuit()
|
||||
var/list/l = list()
|
||||
l += ui_circuit_header()
|
||||
l += "<h3><div class='statusDisplay'>Material Storage:</h3>"
|
||||
for(var/mat_id in linked_imprinter.materials.materials)
|
||||
var/datum/material/M = linked_imprinter.materials.materials[mat_id]
|
||||
for(var/mat_id in mat_container.materials)
|
||||
var/datum/material/M = mat_container.materials[mat_id]
|
||||
l += "* [M.amount] of [M.name]: "
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT) l += "<A href='?src=[REF(src)];imprinter_ejectsheet=[M.id];eject_amt=1'>Eject</A> [RDSCREEN_NOBREAK]"
|
||||
if(M.amount >= MINERAL_MATERIAL_AMOUNT*5) l += "<A href='?src=[REF(src)];imprinter_ejectsheet=[M.id];eject_amt=5'>5x</A> [RDSCREEN_NOBREAK]"
|
||||
@@ -906,7 +931,10 @@ Nothing else in the console has ID requirements.
|
||||
if(QDELETED(linked_lathe))
|
||||
say("No Protolathe Linked!")
|
||||
return
|
||||
linked_lathe.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"])
|
||||
if(!linked_lathe.materials.mat_container)
|
||||
say("No material storage linked to protolathe!")
|
||||
return
|
||||
linked_lathe.eject_sheets(ls["ejectsheet"], ls["eject_amt"])
|
||||
//Circuit Imprinter Materials
|
||||
if(ls["disposeI"]) //Causes the circuit imprinter to dispose of a single reagent (all of it)
|
||||
if(QDELETED(linked_imprinter))
|
||||
@@ -922,7 +950,10 @@ Nothing else in the console has ID requirements.
|
||||
if(QDELETED(linked_imprinter))
|
||||
say("No Circuit Imprinter Linked!")
|
||||
return
|
||||
linked_imprinter.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["imprinter_ejectsheet"])
|
||||
if(!linked_imprinter.materials.mat_container)
|
||||
say("No material storage linked to circuit imprinter!")
|
||||
return
|
||||
linked_imprinter.eject_sheets(ls["imprinter_ejectsheet"], ls["eject_amt"])
|
||||
if(ls["disk_slot"])
|
||||
disk_slot_selected = text2num(ls["disk_slot"])
|
||||
if(ls["research_node"])
|
||||
|
||||
@@ -355,5 +355,4 @@
|
||||
allowed_buildtypes = SMELTER
|
||||
|
||||
/datum/techweb/specialized/autounlocking/exofab
|
||||
node_autounlock_ids = list("robotics", "mmi", "cyborg", "mecha_odysseus", "mech_gygax", "mech_durand", "mecha_phazon", "mecha", "mech_tools", "clown")
|
||||
allowed_buildtypes = MECHFAB
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/list/boost_item_paths = list() //Associative list, path = list(point type = point_value).
|
||||
var/autounlock_by_boost = TRUE //boosting this will autounlock this node.
|
||||
var/export_price = 0 //Cargo export price.
|
||||
var/list/research_costs = list() //Point cost to research. type = amount
|
||||
var/list/research_costs = 0 //Point cost to research. type = amount
|
||||
var/category = "Misc" //Category
|
||||
|
||||
/datum/techweb_node/proc/get_price(datum/techweb/host)
|
||||
|
||||
@@ -1,16 +1,47 @@
|
||||
|
||||
//Current rate: 132500 research points in 90 minutes
|
||||
|
||||
//Base Node
|
||||
//Base Nodes
|
||||
/datum/techweb_node/base
|
||||
id = "base"
|
||||
starting_node = TRUE
|
||||
display_name = "Basic Research Technology"
|
||||
description = "NT default research technologies."
|
||||
// Default research tech, prevents bricking
|
||||
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani",
|
||||
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab",
|
||||
"space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38") //Default research tech, prevents bricking
|
||||
"space_heater", "xlarge_beaker", "sec_rshot", "sec_bshot", "sec_slug", "sec_Islug", "sec_dart", "sec_38",
|
||||
"rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass")
|
||||
|
||||
/datum/techweb_node/mmi
|
||||
id = "mmi"
|
||||
starting_node = TRUE
|
||||
display_name = "Man Machine Interface"
|
||||
description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs."
|
||||
design_ids = list("mmi")
|
||||
|
||||
/datum/techweb_node/cyborg
|
||||
id = "cyborg"
|
||||
starting_node = TRUE
|
||||
display_name = "Cyborg Construction"
|
||||
description = "Sapient robots with preloaded tool modules and programmable laws."
|
||||
design_ids = list("robocontrol", "sflash", "borg_suit", "borg_head", "borg_chest", "borg_r_arm", "borg_l_arm", "borg_r_leg", "borg_l_leg", "borgupload",
|
||||
"cyborgrecharger", "borg_upgrade_restart", "borg_upgrade_rename")
|
||||
|
||||
/datum/techweb_node/mech
|
||||
id = "mecha"
|
||||
starting_node = TRUE
|
||||
display_name = "Mechanical Exosuits"
|
||||
description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
|
||||
design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm", "ripley_right_arm", "ripley_left_leg", "ripley_right_leg",
|
||||
"ripley_main", "ripley_peri", "mech_hydraulic_clamp")
|
||||
|
||||
/datum/techweb_node/mech_tools
|
||||
id = "mech_tools"
|
||||
starting_node = TRUE
|
||||
display_name = "Basic Exosuit Equipment"
|
||||
description = "Various tools fit for basic mech units"
|
||||
design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer")
|
||||
|
||||
/////////////////////////Biotech/////////////////////////
|
||||
/datum/techweb_node/biotech
|
||||
@@ -27,7 +58,7 @@
|
||||
display_name = "Advanced Biotechnology"
|
||||
description = "Advanced Biotechnology"
|
||||
prereq_ids = list("biotech")
|
||||
design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced")
|
||||
design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced","harvester","holobarrier_med")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
@@ -103,7 +134,7 @@
|
||||
display_name = "Advanced Engineering"
|
||||
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
|
||||
prereq_ids = list("engineering", "emp_basic")
|
||||
design_ids = list("engine_goggles", "magboots", "weldingmask")
|
||||
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
@@ -159,7 +190,7 @@
|
||||
display_name = "Applied Bluespace Research"
|
||||
description = "Using bluespace to make things faster and better."
|
||||
prereq_ids = list("bluespace_basic", "engineering")
|
||||
design_ids = list("bs_rped","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning", "roastingstick")
|
||||
design_ids = list("bs_rped","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning", "roastingstick", "ore_silo")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
export_price = 5000
|
||||
|
||||
@@ -219,39 +250,20 @@
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/mmi
|
||||
id = "mmi"
|
||||
display_name = "Man Machine Interface"
|
||||
description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs."
|
||||
prereq_ids = list("neural_programming")
|
||||
design_ids = list("mmi")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/posibrain
|
||||
id = "posibrain"
|
||||
display_name = "Positronic Brain"
|
||||
description = "Applied usage of neural technology allowing for autonomous AI units based on special metallic cubes with conductive and processing circuits."
|
||||
prereq_ids = list("neural_programming", "mmi")
|
||||
prereq_ids = list("neural_programming")
|
||||
design_ids = list("mmi_posi")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/cyborg
|
||||
id = "cyborg"
|
||||
display_name = "Cyborg Construction"
|
||||
description = "Sapient robots with preloaded tool modules and programmable laws."
|
||||
prereq_ids = list("mmi", "robotics")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
|
||||
export_price = 5000
|
||||
design_ids = list("robocontrol", "sflash", "borg_suit", "borg_head", "borg_chest", "borg_r_arm", "borg_l_arm", "borg_r_leg", "borg_l_leg", "borgupload",
|
||||
"cyborgrecharger", "borg_upgrade_restart", "borg_upgrade_rename")
|
||||
|
||||
/datum/techweb_node/cyborg_upg_util
|
||||
id = "cyborg_upg_util"
|
||||
display_name = "Cyborg Upgrades: Utility"
|
||||
description = "Utility upgrades for cybogs."
|
||||
prereq_ids = list("engineering", "cyborg")
|
||||
description = "Utility upgrades for cyborgs."
|
||||
prereq_ids = list("engineering")
|
||||
design_ids = list("borg_upgrade_holding", "borg_upgrade_lavaproof", "borg_upgrade_thrusters", "borg_upgrade_selfrepair", "borg_upgrade_expand", "borg_upgrade_rped")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
|
||||
export_price = 5000
|
||||
@@ -260,8 +272,8 @@
|
||||
id = "cyborg_upg_med"
|
||||
display_name = "Cyborg Upgrades: Medical"
|
||||
description = "Medical upgrades for cyborgs."
|
||||
prereq_ids = list("adv_biotech", "cyborg")
|
||||
design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer")
|
||||
prereq_ids = list("adv_biotech")
|
||||
design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser", "borg_upgrade_pinpointer", "borg_upgrade_surgicalprocessor")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
|
||||
export_price = 5000
|
||||
|
||||
@@ -415,7 +427,7 @@
|
||||
display_name = "Subdermal Implants"
|
||||
description = "Electronic implants buried beneath the skin."
|
||||
prereq_ids = list("biotech")
|
||||
design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking")
|
||||
design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "locator")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
@@ -423,7 +435,7 @@
|
||||
id = "cyber_organs"
|
||||
display_name = "Cybernetic Organs"
|
||||
description = "We have the technology to rebuild him."
|
||||
prereq_ids = list("adv_biotech", "cyborg")
|
||||
prereq_ids = list("adv_biotech")
|
||||
design_ids = list("cybernetic_heart", "cybernetic_liver", "cybernetic_liver_u", "cybernetic_lungs")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -432,7 +444,7 @@
|
||||
id = "cyber_implants"
|
||||
display_name = "Cybernetic Implants"
|
||||
description = "Electronic implants that improve humans."
|
||||
prereq_ids = list("adv_biotech", "cyborg", "adv_datatheory")
|
||||
prereq_ids = list("adv_biotech", "adv_datatheory")
|
||||
design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -501,15 +513,6 @@
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/engine_hardsuit
|
||||
id = "engi_hardsuit"
|
||||
display_name = "EVA Construction Equipment"
|
||||
description = "Production of EVA construction equipment."
|
||||
design_ids = list("chardsuit", "hardsuitjpack")
|
||||
prereq_ids = list("adv_engi", "exp_tools")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
export_price = 5000
|
||||
|
||||
/////////////////////////weaponry tech/////////////////////////
|
||||
/datum/techweb_node/weaponry
|
||||
id = "weaponry"
|
||||
@@ -611,21 +614,11 @@
|
||||
export_price = 5000
|
||||
|
||||
////////////////////////mech technology////////////////////////
|
||||
/datum/techweb_node/mech
|
||||
id = "mecha"
|
||||
display_name = "Mechanical Exosuits"
|
||||
description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
|
||||
prereq_ids = list("robotics", "adv_engi")
|
||||
design_ids = list("mecha_tracking", "mechacontrol", "mechapower", "mech_recharger", "ripley_chassis", "firefighter_chassis", "ripley_torso", "ripley_left_arm", "ripley_right_arm", "ripley_left_leg", "ripley_right_leg",
|
||||
"ripley_main", "ripley_peri", "mech_hydraulic_clamp")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/adv_mecha
|
||||
id = "adv_mecha"
|
||||
display_name = "Advanced Exosuits"
|
||||
description = "For when you just aren't Gundam enough."
|
||||
prereq_ids = list("adv_robotics", "mecha")
|
||||
prereq_ids = list("adv_robotics")
|
||||
design_ids = list("mech_repair_droid")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -634,7 +627,7 @@
|
||||
id = "mecha_odysseus"
|
||||
display_name = "EXOSUIT: Odysseus"
|
||||
description = "Odysseus exosuit designs"
|
||||
prereq_ids = list("mecha")
|
||||
prereq_ids = list("base")
|
||||
design_ids = list("odysseus_chassis", "odysseus_torso", "odysseus_head", "odysseus_left_arm", "odysseus_right_arm" ,"odysseus_left_leg", "odysseus_right_leg",
|
||||
"odysseus_main", "odysseus_peri")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
@@ -670,20 +663,11 @@
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/mech_tools
|
||||
id = "mech_tools"
|
||||
display_name = "Basic Exosuit Equipment"
|
||||
description = "Various tools fit for basic mech units"
|
||||
prereq_ids = list("mecha")
|
||||
design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/adv_mecha_tools
|
||||
id = "adv_mecha_tools"
|
||||
display_name = "Advanced Exosuit Equipment"
|
||||
description = "Tools for high level mech suits"
|
||||
prereq_ids = list("adv_mecha", "mech_tools")
|
||||
prereq_ids = list("adv_mecha")
|
||||
design_ids = list("mech_rcd")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -692,7 +676,7 @@
|
||||
id = "med_mech_tools"
|
||||
display_name = "Medical Exosuit Equipment"
|
||||
description = "Tools for high level mech suits"
|
||||
prereq_ids = list("mecha", "adv_biotech", "mech_tools")
|
||||
prereq_ids = list("adv_biotech")
|
||||
design_ids = list("mech_sleeper", "mech_syringe_gun", "mech_medi_beam")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -710,7 +694,7 @@
|
||||
id = "mecha_tools"
|
||||
display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "ballistic_weapons")
|
||||
prereq_ids = list("ballistic_weapons")
|
||||
design_ids = list("mech_scattershot")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -719,7 +703,7 @@
|
||||
id = "mech_carbine"
|
||||
display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "ballistic_weapons")
|
||||
prereq_ids = list("ballistic_weapons")
|
||||
design_ids = list("mech_carbine")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -728,7 +712,7 @@
|
||||
id = "mmech_ion"
|
||||
display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "electronic_weapons", "emp_adv")
|
||||
prereq_ids = list("electronic_weapons", "emp_adv")
|
||||
design_ids = list("mech_ion")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -737,7 +721,7 @@
|
||||
id = "mech_tesla"
|
||||
display_name = "Exosuit Weapon (MKI Tesla Cannon)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "electronic_weapons", "adv_power")
|
||||
prereq_ids = list("electronic_weapons", "adv_power")
|
||||
design_ids = list("mech_tesla")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -746,7 +730,7 @@
|
||||
id = "mech_laser"
|
||||
display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)"
|
||||
description = "A basic piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "beam_weapons")
|
||||
prereq_ids = list("beam_weapons")
|
||||
design_ids = list("mech_laser")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -755,7 +739,7 @@
|
||||
id = "mech_laser_heavy"
|
||||
display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "adv_beam_weapons")
|
||||
prereq_ids = list("adv_beam_weapons")
|
||||
design_ids = list("mech_laser_heavy")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -764,7 +748,7 @@
|
||||
id = "mech_grenade_launcher"
|
||||
display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "explosive_weapons")
|
||||
prereq_ids = list("explosive_weapons")
|
||||
design_ids = list("mech_grenade_launcher")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -773,7 +757,7 @@
|
||||
id = "mech_missile_rack"
|
||||
display_name = "Exosuit Weapon (SRM-8 Missile Rack)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "explosive_weapons")
|
||||
prereq_ids = list("explosive_weapons")
|
||||
design_ids = list("mech_missile_rack")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -782,7 +766,7 @@
|
||||
id = "clusterbang_launcher"
|
||||
display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "explosive_weapons")
|
||||
prereq_ids = list("explosive_weapons")
|
||||
design_ids = list("clusterbang_launcher")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -791,7 +775,7 @@
|
||||
id = "mech_teleporter"
|
||||
display_name = "Exosuit Module (Teleporter Module)"
|
||||
description = "An advanced piece of mech Equipment"
|
||||
prereq_ids = list("mech_tools", "adv_bluespace")
|
||||
prereq_ids = list("adv_bluespace")
|
||||
design_ids = list("mech_teleporter")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -800,7 +784,7 @@
|
||||
id = "mech_wormhole_gen"
|
||||
display_name = "Exosuit Module (Localized Wormhole Generator)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "mech_tools", "adv_bluespace")
|
||||
prereq_ids = list("adv_bluespace")
|
||||
design_ids = list("mech_wormhole_gen")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -809,7 +793,7 @@
|
||||
id = "mech_taser"
|
||||
display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)"
|
||||
description = "A basic piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "electronic_weapons")
|
||||
prereq_ids = list("electronic_weapons")
|
||||
design_ids = list("mech_taser")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -818,7 +802,7 @@
|
||||
id = "mech_lmg"
|
||||
display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)"
|
||||
description = "An advanced piece of mech weaponry"
|
||||
prereq_ids = list("mecha", "ballistic_weapons")
|
||||
prereq_ids = list("ballistic_weapons")
|
||||
design_ids = list("mech_lmg")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
@@ -827,7 +811,7 @@
|
||||
id = "mech_diamond_drill"
|
||||
display_name = "Exosuit Diamond Drill"
|
||||
description = "A diamond drill fit for a large exosuit"
|
||||
prereq_ids = list("mecha", "adv_mining")
|
||||
prereq_ids = list("adv_mining")
|
||||
design_ids = list("mech_diamond_drill")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
@@ -38,7 +38,7 @@ To add a crossbreed:
|
||||
throw_range = 6
|
||||
|
||||
/obj/item/slimecross/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
name = effect + " " + colour + " extract"
|
||||
var/itemcolor = "#FFFFFF"
|
||||
switch(colour)
|
||||
@@ -94,7 +94,7 @@ To add a crossbreed:
|
||||
var/list/list_reagents
|
||||
|
||||
/obj/item/slimecrossbeaker/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
create_reagents(50)
|
||||
if(list_reagents)
|
||||
for(var/reagent in list_reagents)
|
||||
|
||||
@@ -431,8 +431,9 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
if(owner.fire_stacks <= 0)
|
||||
to_chat(owner, "<span class='notice'>[linked_extract] coats you in a watery goo, extinguishing the flames.</span>")
|
||||
var/obj/O = owner.get_active_held_item()
|
||||
O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
|
||||
O.acid_level = 0
|
||||
if(O)
|
||||
O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
|
||||
O.acid_level = 0
|
||||
// Monkey cube
|
||||
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
|
||||
to_chat(owner, "<span class='warning'>[linked_extract] kept your hands wet! It makes [O] expand!</span>")
|
||||
|
||||
@@ -11,7 +11,7 @@ Burning extracts:
|
||||
icon_state = "burning"
|
||||
|
||||
/obj/item/slimecross/burning/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/slimecross/burning/attack_self(mob/user)
|
||||
@@ -300,7 +300,7 @@ Burning extracts:
|
||||
if(!on || !pictures_left || !isturf(target.loc))
|
||||
return
|
||||
new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
|
||||
..()
|
||||
. = ..()
|
||||
var/text = "The camera fades away"
|
||||
if(disk)
|
||||
text += ", leaving the disk behind!"
|
||||
|
||||
@@ -12,7 +12,7 @@ Charged extracts:
|
||||
icon_state = "charged"
|
||||
|
||||
/obj/item/slimecross/charged/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
create_reagents(10)
|
||||
|
||||
/obj/item/slimecross/charged/attack_self(mob/user)
|
||||
@@ -196,7 +196,7 @@ Charged extracts:
|
||||
|
||||
/obj/item/slimecross/charged/gold/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/slimecross/charged/oil
|
||||
colour = "oil"
|
||||
@@ -315,7 +315,7 @@ Charged extracts:
|
||||
var/uses = 2
|
||||
|
||||
/obj/item/slimepotion/spaceproof/afterattack(obj/item/clothing/C, mob/user, proximity)
|
||||
..()
|
||||
. = ..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -352,7 +352,7 @@ Charged extracts:
|
||||
var/uses = 2
|
||||
|
||||
/obj/item/slimepotion/lavaproof/afterattack(obj/item/C, mob/user, proximity)
|
||||
..()
|
||||
. = ..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
@@ -278,7 +278,7 @@ Consuming extracts:
|
||||
var/colour = "#FFFFFF"
|
||||
|
||||
/obj/item/slime_cookie/pyrite/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/tastemessage = "paint remover"
|
||||
switch(rand(1,7))
|
||||
if(1)
|
||||
|
||||
@@ -21,7 +21,7 @@ Industrial extracts:
|
||||
return
|
||||
|
||||
/obj/item/slimecross/industrial/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
create_reagents(100)
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ Prismatic extracts:
|
||||
desc = "It's constantly wet with a pungent-smelling, clear chemical."
|
||||
|
||||
/obj/item/slimecross/prismatic/grey/afterattack(turf/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target) && target.color != initial(target.color))
|
||||
|
||||
@@ -14,7 +14,7 @@ Recurring extracts:
|
||||
var/max_cooldown = 5 //In sets of 2 seconds.
|
||||
|
||||
/obj/item/slimecross/recurring/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
extract = new extract_type(src.loc)
|
||||
visible_message("<span class='notice'>[src] wraps a layer of goo around itself!</span>")
|
||||
extract.name = name
|
||||
@@ -39,7 +39,7 @@ Recurring extracts:
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimecross/recurring/Destroy()
|
||||
..()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/recurring/grey
|
||||
|
||||
@@ -16,6 +16,7 @@ Regenerative extracts:
|
||||
|
||||
|
||||
/obj/item/slimecross/regenerative/afterattack(atom/target,mob/user,prox)
|
||||
. = ..()
|
||||
if(!prox || !isliving(target))
|
||||
return
|
||||
var/mob/living/H = target
|
||||
@@ -119,7 +120,7 @@ Regenerative extracts:
|
||||
C.name = "fireproofed [C.name]"
|
||||
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
C.heat_protection = C.body_parts_covered
|
||||
C.resistance_flags |= FIRE_PROOF
|
||||
|
||||
@@ -141,7 +142,7 @@ Regenerative extracts:
|
||||
do_sparks(5,FALSE,target)
|
||||
|
||||
/obj/item/slimecross/regenerative/bluespace/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
T = get_turf(src)
|
||||
|
||||
/obj/item/slimecross/regenerative/sepia
|
||||
|
||||
@@ -15,7 +15,7 @@ Self-sustaining extracts:
|
||||
|
||||
//Just divides into the actual item.
|
||||
/obj/item/slimecross/selfsustaining/Initialize()
|
||||
. = ..()
|
||||
..()
|
||||
visible_message("<span class='warning'>The [src] shudders, and splits into four smaller extracts.</span>")
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/obj/item/autoslime/A = new /obj/item/autoslime(src.loc)
|
||||
@@ -24,11 +24,11 @@ Self-sustaining extracts:
|
||||
A.icon = icon
|
||||
A.icon_state = icon_state
|
||||
A.color = color
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/item/autoslime/Initialize()
|
||||
name = "self-sustaining " + extract.name
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/autoslime/attack_self(mob/user)
|
||||
var/reagentselect = input(user, "Choose the reagent the extract will produce.", "Self-sustaining Reaction") as null|anything in extract.activate_reagents
|
||||
|
||||
@@ -15,7 +15,7 @@ Stabilized extracts:
|
||||
var/mob/living/owner
|
||||
|
||||
/obj/item/slimecross/stabilized/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj,src)
|
||||
|
||||
/obj/item/slimecross/stabilized/Destroy()
|
||||
@@ -111,7 +111,7 @@ Stabilized extracts:
|
||||
mob_type = pick(mob_spawn_pets)
|
||||
|
||||
/obj/item/slimecross/stabilized/gold/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
generate_mobtype()
|
||||
|
||||
/obj/item/slimecross/stabilized/gold/attack_self(mob/user)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
scan_action = new
|
||||
potion_action = new
|
||||
stored_slimes = list()
|
||||
listener = AddComponent(/datum/component/redirect, COMSIG_ATOM_CONTENTS_DEL, CALLBACK(src, .proc/on_contents_del))
|
||||
listener = AddComponent(/datum/component/redirect, list(COMSIG_ATOM_CONTENTS_DEL = CALLBACK(src, .proc/on_contents_del)))
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/Destroy()
|
||||
stored_slimes = null
|
||||
|
||||
@@ -391,7 +391,7 @@
|
||||
/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type)
|
||||
switch(activation_type)
|
||||
if(SLIME_ACTIVATE_MINOR)
|
||||
var/obj/item/slimepotion/slime/docility/O = new(null, 1)
|
||||
var/obj/item/slimepotion/slime/renaming/O = new(null, 1)
|
||||
if(!user.put_in_active_hand(O))
|
||||
O.forceMove(user.drop_location())
|
||||
playsound(user, 'sound/effects/splat.ogg', 50, 1)
|
||||
@@ -615,6 +615,7 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity)
|
||||
. = ..()
|
||||
if (istype(target))
|
||||
to_chat(user, "<span class='notice'>You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb.</span>" )
|
||||
return
|
||||
@@ -671,7 +672,7 @@
|
||||
to_chat(user, "<span class='notice'>You offer [src] to [SM]...</span>")
|
||||
being_used = TRUE
|
||||
|
||||
var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm
|
||||
var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
SM.key = C.key
|
||||
@@ -725,11 +726,11 @@
|
||||
if(SM.sentience_type != animal_type)
|
||||
to_chat(user, "<span class='warning'>You cannot transfer your consciousness to [SM].</span>" )
|
||||
return ..()
|
||||
var/jb = jobban_isbanned(user, ROLE_ALIEN)
|
||||
var/jb = jobban_isbanned(user, ROLE_MIND_TRANSFER)
|
||||
if(QDELETED(src) || QDELETED(M) || QDELETED(user))
|
||||
return
|
||||
|
||||
if(jb) //ideally sentience and trasnference potions should be their own unique role.
|
||||
if(jb)
|
||||
to_chat(user, "<span class='warning'>Your mind goes blank as you attempt to use the potion.</span>")
|
||||
return
|
||||
|
||||
@@ -833,7 +834,7 @@
|
||||
icon_state = "potyellow"
|
||||
|
||||
/obj/item/slimepotion/speed/afterattack(obj/C, mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!istype(C))
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on items or vehicles!</span>")
|
||||
return
|
||||
@@ -866,21 +867,21 @@
|
||||
var/uses = 3
|
||||
|
||||
/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return
|
||||
if(!istype(C))
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on clothing!</span>")
|
||||
return
|
||||
if(C.max_heat_protection_temperature == FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
|
||||
if(C.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
|
||||
to_chat(user, "<span class='warning'>The [C] is already fireproof!</span>")
|
||||
return ..()
|
||||
to_chat(user, "<span class='notice'>You slather the blue gunk over the [C], fireproofing it.</span>")
|
||||
C.name = "fireproofed [C.name]"
|
||||
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
C.heat_protection = C.body_parts_covered
|
||||
C.resistance_flags |= FIRE_PROOF
|
||||
uses --
|
||||
@@ -911,6 +912,39 @@
|
||||
L.regenerate_icons()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/slime/renaming
|
||||
name = "renaming potion"
|
||||
desc = "A potion that allows a self-aware being to change what name it subconciously presents to the world."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "potgreen"
|
||||
|
||||
var/being_used = FALSE
|
||||
|
||||
/obj/item/slimepotion/slime/renaming/attack(mob/living/M, mob/user)
|
||||
if(being_used || !ismob(M))
|
||||
return
|
||||
if(!M.ckey) //only works on animals that aren't player controlled
|
||||
to_chat(user, "<span class='warning'>[M] is not self aware, and cannot pick its own name.</span>")
|
||||
return
|
||||
|
||||
being_used = TRUE
|
||||
|
||||
to_chat(user, "<span class='notice'>You offer [src] to [user]...</span>")
|
||||
|
||||
var/new_name = stripped_input(M, "What would you like your name to be?", "Input a name", M.real_name, MAX_NAME_LEN)
|
||||
|
||||
if(!new_name || QDELETED(src) || QDELETED(M) || new_name == M.real_name || !M.Adjacent(user))
|
||||
being_used = FALSE
|
||||
return
|
||||
|
||||
M.visible_message("<span class='notice'><span class='name'>[M]</span> has a new name, <span class='name'>[new_name]</span>.</span>", "<span class='notice'>Your old name of <span class='name'>[M.real_name]</span> fades away, and your new name <span class='name'>[new_name]</span> anchors itself in your mind.</span>")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] used [src] on [ADMIN_LOOKUPFLW(M)], letting them rename themselves into [new_name].")
|
||||
|
||||
// pass null as first arg to not update records or ID/PDA
|
||||
M.fully_replace_character_name(null, new_name)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/slime/slimeradio
|
||||
name = "bluespace radio potion"
|
||||
desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves."
|
||||
|
||||
Reference in New Issue
Block a user