module things, jfc

This commit is contained in:
Poojawa
2018-09-11 07:51:01 -05:00
parent 8b9ef1e400
commit 284e9d0325
695 changed files with 11343 additions and 5661 deletions
+2
View File
@@ -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))
+1 -1
View File
@@ -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)
+57 -25
View File
@@ -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)
+47 -16
View File
@@ -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)
+62 -78
View File
@@ -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."