mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-15 17:15:25 +01:00
Experisci Expansion part 0.5 (#18631)
* telescience experiments * use defines * fixed up telesci stuff * non-working bluespace crystal experiment * allow sec to print basic cells * allow anyone to make basic power cells * fix * medical basic tools * bad paths * pathfix * fixed DA experiments, and clarified proc name * circuitboards use copper * changed it back * lint * moved signal * slime deconstructing * circuits don't give steel * corrected defines * correcting designs * autolathe is not synced yet * lets just mirror original behavior * keep procs * engies get signaler * no dupe * destructive borg belly * unify point generate proc
This commit is contained in:
@@ -48,6 +48,16 @@
|
||||
flags = NOBLUDGEON
|
||||
|
||||
/obj/item/dogborg/sleeper/Initialize(mapload)
|
||||
if(analyzer) //Destructive analysis
|
||||
var/static/list/destructive_signals = list(
|
||||
COMSIG_MACHINERY_DESTRUCTIVE_SCAN = TYPE_PROC_REF(/datum/component/experiment_handler, try_run_destructive_experiment),
|
||||
)
|
||||
AddComponent(/datum/component/experiment_handler, \
|
||||
config_mode = EXPERIMENT_CONFIG_ALTCLICK, \
|
||||
allowed_experiments = list(/datum/experiment/scanning),\
|
||||
config_flags = EXPERIMENT_CONFIG_ALWAYS_ACTIVE|EXPERIMENT_CONFIG_SILENT_FAIL,\
|
||||
experiment_signals = destructive_signals, \
|
||||
)
|
||||
. = ..()
|
||||
med_analyzer = new /obj/item/healthanalyzer
|
||||
|
||||
@@ -280,6 +290,7 @@
|
||||
"ingested_reagents" = ingested_reagents
|
||||
)
|
||||
|
||||
var/datum/component/experiment_handler/handler = get_experiment_handler()
|
||||
var/list/data = list(
|
||||
"our_patient" = patient_data,
|
||||
"eject_port" = eject_port,
|
||||
@@ -298,6 +309,8 @@
|
||||
"deliveryslot_2" = deliveryslot_2,
|
||||
"deliveryslot_3" = deliveryslot_3,
|
||||
"items_preserved" = items_preserved,
|
||||
"has_destructive_analyzer" = analyzer,
|
||||
"techweb_name" = handler?.linked_web ? "[handler.linked_web.id] / [handler.linked_web.organization]" : "Disconnected",
|
||||
)
|
||||
return data
|
||||
/obj/item/dogborg/sleeper/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
@@ -581,6 +594,10 @@
|
||||
plastic.add_charge(total_material)
|
||||
if(material == MAT_WOOD && wood)
|
||||
wood.add_charge(total_material)
|
||||
var/datum/component/experiment_handler/handler = get_experiment_handler()
|
||||
if(analyzer && handler)
|
||||
techweb_item_generate_points(T, handler.linked_web)
|
||||
SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, T)
|
||||
if(is_trash)
|
||||
hound.adjust_nutrition(digested)
|
||||
else
|
||||
@@ -617,4 +634,12 @@
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/get_experiment_handler()
|
||||
PRIVATE_PROC(TRUE)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
RETURN_TYPE(/datum/component/experiment_handler)
|
||||
if(!analyzer)
|
||||
return null
|
||||
return GetComponent(/datum/component/experiment_handler)
|
||||
|
||||
#undef SLEEPER_INJECT_COST
|
||||
|
||||
@@ -351,6 +351,7 @@
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/t_scanner(src)
|
||||
src.modules += new /obj/item/analyzer(src)
|
||||
src.modules += new /obj/item/assembly/signaler(src) // Anomaly handling
|
||||
src.modules += new /obj/item/geiger(src)
|
||||
src.modules += new /obj/item/taperoll/engineering(src)
|
||||
src.modules += new /obj/item/gripper/engineering(src)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "NULL ENTRY Board"
|
||||
desc = "I promise this doesn't give you syndicate goodies!"
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE
|
||||
)
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
name = "APLU 'Ripley' central control circuit"
|
||||
id = "ripley_main"
|
||||
build_path = /obj/item/circuitboard/mecha/ripley/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/ripley/circuit_peri
|
||||
name = "APLU 'Ripley' peripherals control circuit"
|
||||
id = "ripley_peri"
|
||||
build_path = /obj/item/circuitboard/mecha/ripley/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/ripley/chassis
|
||||
name = "Ripley Chassis"
|
||||
@@ -78,14 +78,14 @@
|
||||
id = "odysseus_main"
|
||||
// req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/odysseus/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/odysseus/odysseus_peri
|
||||
name = "'Odysseus' peripherals control circuit"
|
||||
id = "odysseus_peri"
|
||||
// req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/odysseus/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/odysseus/chassis
|
||||
name = "Odysseus Chassis"
|
||||
@@ -141,28 +141,28 @@
|
||||
id = "gygax_main"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/gygax/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gygax/gygax_peri
|
||||
name = "'Gygax' peripherals control circuit"
|
||||
id = "gygax_peri"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/gygax/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gygax/gygax_targ
|
||||
name = "'Gygax' weapon control and targeting circuit"
|
||||
id = "gygax_targ"
|
||||
// req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/gygax/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gygax/gygax_medical
|
||||
name = "'Serenity' medical control circuit"
|
||||
id = "gygax_medical"
|
||||
// req_tech = list(TECH_DATA = 4, TECH_BIO = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/gygax/medical
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gygax/chassis/serenity
|
||||
name = "Serenity Chassis"
|
||||
@@ -231,7 +231,7 @@
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
|
||||
build_path = /obj/item/circuitboard/mecha/durand/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/durand/durand_peri
|
||||
name = "'Durand' peripherals control circuit"
|
||||
@@ -239,7 +239,7 @@
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
|
||||
build_path = /obj/item/circuitboard/mecha/durand/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/durand/durand_targ
|
||||
name = "'Durand' weapon control and targeting circuit"
|
||||
@@ -247,7 +247,7 @@
|
||||
// req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
|
||||
build_path = /obj/item/circuitboard/mecha/durand/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/durand/chassis
|
||||
name = "Durand Chassis"
|
||||
@@ -386,28 +386,28 @@
|
||||
id = "pinnace_main"
|
||||
// req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/pinnace/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/pinnace/pinnace_flight
|
||||
name = "Pinnace flight control board circuit"
|
||||
id = "pinnace_flight"
|
||||
// req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/pinnace/flight
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/pinnace/pinnace_targeting
|
||||
name = "Pinnace weapon control and targeting board circuit"
|
||||
id = "pinnace_targeting"
|
||||
// req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/pinnace/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/pinnace/pinnace_cockpit_control
|
||||
name = "Pinnace manual flight control instruments circuit"
|
||||
id = "pinnace_cockpit_control"
|
||||
// req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/pinnace/cockpitboard
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/pinnace/chassis
|
||||
name = "Pinnace Chassis"
|
||||
@@ -470,28 +470,28 @@
|
||||
id = "baron_main"
|
||||
// req_tech = list(TECH_DATA = 5, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/baron/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/baron/baron_flight
|
||||
name = "Baron flight control board circuit"
|
||||
id = "baron_flight"
|
||||
// req_tech = list(TECH_DATA = 5, TECH_POWER = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/baron/flight
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/baron/baron_targeting
|
||||
name = "Baron weapon control and targeting board circuit"
|
||||
id = "baron_targeting"
|
||||
// req_tech = list(TECH_DATA = 5, TECH_POWER = 4, TECH_COMBAT = 3)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/baron/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/baron/baron_cockpit_control
|
||||
name = "Baron manual flight control instruments circuit"
|
||||
id = "baron_cockpit_control"
|
||||
// req_tech = list(TECH_DATA = 5, TECH_POWER = 4, TECH_COMBAT = 3)
|
||||
build_path = /obj/item/circuitboard/mecha/fighter/baron/cockpitboard
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/baron/chassis
|
||||
name = "Baron Chassis"
|
||||
@@ -749,13 +749,13 @@
|
||||
name = "'Gopher' central control circuit"
|
||||
id = "gopher_main"
|
||||
build_path = /obj/item/circuitboard/mecha/gopher/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gopher/gopher_peri
|
||||
name = "'Gopher' peripherals control circuit"
|
||||
id = "gopher_peri"
|
||||
build_path = /obj/item/circuitboard/mecha/gopher/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/gopher/chassis
|
||||
name = "Gopher Chassis"
|
||||
@@ -827,21 +827,21 @@
|
||||
id = "polecat_main"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/polecat/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/polecat/polecat_peri
|
||||
name = "'Polecat' peripherals control circuit"
|
||||
id = "polecat_peri"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/polecat/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/polecat/polecat_targ
|
||||
name = "'Polecat' weapon control and targeting circuit"
|
||||
id = "polecat_targ"
|
||||
// req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/polecat/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/polecat/chassis
|
||||
name = "Polecat Chassis"
|
||||
@@ -896,21 +896,21 @@
|
||||
id = "weasel_main"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/weasel/main
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/weasel/weasel_peri
|
||||
name = "'Weasel' peripherals control circuit"
|
||||
id = "weasel_peri"
|
||||
// req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/circuitboard/mecha/weasel/peripherals
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/weasel/weasel_targ
|
||||
name = "'Weasel' weapon control and targeting circuit"
|
||||
id = "weasel_targ"
|
||||
// req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/circuitboard/mecha/weasel/targeting
|
||||
materials = list(MAT_GLASS = 2000)
|
||||
materials = DEFAULT_CIRCUIT_MATERIALS
|
||||
|
||||
/datum/design_techweb/mechfab/weasel/chassis
|
||||
name = "Weasel Chassis"
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
// Medical Designs
|
||||
/datum/design_techweb/pillbottle
|
||||
name = "Pill Bottle"
|
||||
id = "pillbottle"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/storage/pill_bottle
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/syringe
|
||||
name = "Syringe"
|
||||
id = "syringe"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 100, MAT_GLASS = 500)
|
||||
build_path = /obj/item/reagent_containers/syringe
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/dropper
|
||||
name = "Dropper"
|
||||
id = "dropper"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_GLASS = 100, MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/reagent_containers/dropper
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/scalpel
|
||||
name = "Scalpel"
|
||||
id = "scalpel"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/surgical/scalpel
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/circular_saw
|
||||
name = "Circular Saw"
|
||||
id = "circular_saw"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 1000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/surgical/circular_saw
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/bonesetter
|
||||
name = "Bonesetter"
|
||||
id = "bonesetter"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 1000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/surgical/bonesetter
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/surgicaldrill
|
||||
name = "Surgical Drill"
|
||||
id = "surgicaldrill"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/surgical/surgicaldrill
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/retractor
|
||||
name = "Retractor"
|
||||
id = "retractor"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/surgical/retractor
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/cautery
|
||||
name = "Cautery"
|
||||
id = "cautery"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/surgical/cautery
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/hemostat
|
||||
name = "Hemostat"
|
||||
id = "hemostat"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/surgical/hemostat
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/defibrillator
|
||||
name = "Defibrillator"
|
||||
desc = "A portable defibrillator, used for resuscitating recently deceased crew."
|
||||
id = "defibrillator"
|
||||
build_type = PROTOLATHE
|
||||
build_path = /obj/item/defib_kit
|
||||
materials = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT * 4, MAT_GLASS = SHEET_MATERIAL_AMOUNT * 2, MAT_SILVER =SHEET_MATERIAL_AMOUNT * 1.5, MAT_GOLD = SHEET_MATERIAL_AMOUNT * 0.5)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/penlight
|
||||
name = "Penlight"
|
||||
id = "penlight"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_STEEL = 100, MAT_GLASS = 100)
|
||||
build_path = /obj/item/flashlight/pen
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design_techweb/implanter
|
||||
name = "Implanter"
|
||||
id = "implanter"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_STEEL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/implanter
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL,
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
@@ -0,0 +1,32 @@
|
||||
/datum/design_techweb/beaker
|
||||
name = "Beaker"
|
||||
id = "beaker"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design_techweb/large_beaker
|
||||
name = "Large Beaker"
|
||||
id = "large_beaker"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_GLASS = 1000)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker/large
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design_techweb/vial
|
||||
name = "Vial"
|
||||
id = "vial"
|
||||
build_type = AUTOLATHE | PROTOLATHE
|
||||
materials = list(MAT_GLASS = 100)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY,
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/glass/beaker/vial
|
||||
departmental_flags = ALL
|
||||
@@ -355,7 +355,7 @@
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design_techweb/high
|
||||
name = "High-Capacity Cell"
|
||||
@@ -404,7 +404,7 @@
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design_techweb/weapon_cell
|
||||
name = "Weapon Cell"
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
/**
|
||||
* Hooks on destructive scans to try and run an experiment (When using a handheld handler)
|
||||
*/
|
||||
/datum/component/experiment_handler/proc/try_run_destructive_experiment(datum/source, list/scanned_atoms)
|
||||
/datum/component/experiment_handler/proc/try_run_destructive_experiment(datum/source, atom/scan_target)
|
||||
SIGNAL_HANDLER
|
||||
var/atom/movable/our_scanner = parent
|
||||
if (selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE) )
|
||||
@@ -144,11 +144,7 @@
|
||||
playsound(our_scanner, 'sound/machines/buzz-sigh.ogg', 25)
|
||||
to_chat(our_scanner, span_notice("No experiment selected!"))
|
||||
return
|
||||
var/successful_scan
|
||||
for(var/scan_target in scanned_atoms)
|
||||
if(action_experiment(source, scan_target))
|
||||
successful_scan = TRUE
|
||||
if(successful_scan)
|
||||
if(action_experiment(source, scan_target))
|
||||
playsound(our_scanner, 'sound/machines/ping.ogg', 25)
|
||||
to_chat(our_scanner, span_notice("The scan succeeds."))
|
||||
else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL))
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#define DESTRUCTIVE_DEVICES list(/obj/machinery/rnd/destructive_analyzer, /obj/item/dogborg/sleeper)
|
||||
|
||||
///Example of a destructive experiment.
|
||||
/datum/experiment/scanning/random/artifact_destruction
|
||||
name = "Artifact Analysis"
|
||||
description = "Destructively analyze several small artifact research samples to assess their exotic molecular properties."
|
||||
possible_types = list(/obj/item/research_sample/common)
|
||||
allowed_experimentors = DESTRUCTIVE_DEVICES
|
||||
total_requirement = 3
|
||||
traits = EXPERIMENT_TRAIT_DESTRUCTIVE
|
||||
exp_tag = EXPERIMENT_TAG_PHYSICAL
|
||||
|
||||
/datum/experiment/scanning/random/artifact_destruction/serialize_progress_stage(atom/target, list/seen_instances)
|
||||
return EXPERIMENT_PROG_INT("Destroy artifacts.", \
|
||||
traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target])
|
||||
|
||||
/// Bluespace crystal
|
||||
/datum/experiment/scanning/bluespace_crystal
|
||||
name = "Bluespace Crystal Analysis"
|
||||
description = "Destructively analyze a bluespace crystal to examine it's exotic molecular shape."
|
||||
required_atoms = list(/obj/item/bluespace_crystal = 1)
|
||||
allowed_experimentors = DESTRUCTIVE_DEVICES
|
||||
traits = EXPERIMENT_TRAIT_DESTRUCTIVE
|
||||
exp_tag = EXPERIMENT_TAG_PHYSICAL
|
||||
|
||||
/datum/experiment/scanning/bluespace_crystal/serialize_progress_stage(atom/target, list/seen_instances)
|
||||
return EXPERIMENT_PROG_INT("Destroy bluespace crystal.", \
|
||||
traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target])
|
||||
|
||||
#undef DESTRUCTIVE_DEVICES
|
||||
@@ -1,17 +1,4 @@
|
||||
|
||||
///Example of a destructive experiment.
|
||||
/datum/experiment/scanning/random/artifact_destruction
|
||||
name = "Artifact Analysis"
|
||||
description = "Destroy some artifacts"
|
||||
possible_types = list(/obj/item/research_sample/common)
|
||||
total_requirement = 3
|
||||
traits = EXPERIMENT_TRAIT_DESTRUCTIVE
|
||||
exp_tag = "Physical Experiment"
|
||||
|
||||
/datum/experiment/scanning/random/artifact_destruction/serialize_progress_stage(atom/target, list/seen_instances)
|
||||
return EXPERIMENT_PROG_INT("Destroy artifacts.", \
|
||||
traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target])
|
||||
|
||||
/datum/experiment/scanning/random/janitor_trash
|
||||
name = "Station Hygiene Inspection"
|
||||
description = "To learn how to clean, we must first learn what it is to have filth. We need you to scan some filth around the station."
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/datum/experiment/physical/teleporting
|
||||
name = "Teleportation Basics"
|
||||
description = "How does bluespace travel affect mundane materials? Teleport an object from another location to the telescience telepad, and record observations."
|
||||
|
||||
/datum/experiment/physical/teleporting/register_events()
|
||||
if(!istype(currently_scanned_atom, /obj/machinery/computer/telescience) && !istype(currently_scanned_atom, /obj/machinery/telepad))
|
||||
linked_experiment_handler.announce_message("Incorrect object for experiment.")
|
||||
return FALSE
|
||||
|
||||
RegisterSignal(currently_scanned_atom, COMSIG_TELESCI_TELEPORT, PROC_REF(teleported_items))
|
||||
linked_experiment_handler.announce_message("Experiment ready to start.")
|
||||
return TRUE
|
||||
|
||||
/datum/experiment/physical/teleporting/unregister_events()
|
||||
UnregisterSignal(currently_scanned_atom, COMSIG_TELESCI_TELEPORT)
|
||||
|
||||
/datum/experiment/physical/teleporting/check_progress()
|
||||
. += EXPERIMENT_PROG_BOOL("Teleport an object to the telescience telepad.", is_complete())
|
||||
|
||||
/datum/experiment/physical/teleporting/proc/teleported_items(datum/source, list/atom/movable/teleported_things, turf/target_turf, sending)
|
||||
SIGNAL_HANDLER
|
||||
// we must GET an object, not just send one.
|
||||
if(!sending && teleported_things.len)
|
||||
finish_experiment(linked_experiment_handler)
|
||||
@@ -12,7 +12,7 @@
|
||||
/// A brief description of the experiment to be shown as details
|
||||
var/description = "Base experiment"
|
||||
/// A descriptive tag used on UI elements to denote 'types' of experiments
|
||||
var/exp_tag = "Base"
|
||||
var/exp_tag = EXPERIMENT_TAG_BASE
|
||||
/// A list of types that are allowed to experiment with this dastum
|
||||
var/list/allowed_experimentors
|
||||
/// Whether the experiment has been completed
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/experiment/physical
|
||||
name = "Physical Experiment"
|
||||
description = "An experiment requiring a physical reaction to continue"
|
||||
exp_tag = "Physical Experiment"
|
||||
exp_tag = EXPERIMENT_TAG_PHYSICAL
|
||||
performance_hint = "To perform physical experiments you must use a hand-held scanner unit to track objects in our world relevant to \
|
||||
your experiment. Activate the experiment on your scanner, scan the object to track, and then complete the objective."
|
||||
/// The atom that is currently being watched by this experiment
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
/datum/experiment/scanning
|
||||
name = "Scanning Experiment"
|
||||
description = "Base experiment for scanning atoms"
|
||||
exp_tag = "Scan"
|
||||
allowed_experimentors = list(/obj/item/experi_scanner, /obj/machinery/rnd/destructive_analyzer)
|
||||
exp_tag = EXPERIMENT_TAG_SCAN
|
||||
allowed_experimentors = list(/obj/item/experi_scanner)
|
||||
performance_hint = "Perform scanning experiments using a handheld experi-scanner."
|
||||
/// The typepaths and number of atoms that must be scanned
|
||||
var/list/required_atoms = list()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/datum/experiment/scanning/points/machinery_tiered_scan
|
||||
name = "Upgraded Machinery Scanning Experiment"
|
||||
description = "Base experiment for scanning machinery with upgraded parts"
|
||||
exp_tag = "Scan"
|
||||
exp_tag = EXPERIMENT_TAG_SCAN
|
||||
///What tier of parts is required for the experiment
|
||||
var/required_tier = 1
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/datum/experiment/scanning/points/machinery_pinpoint_scan
|
||||
name = "Machinery Pinpoint Stock Parts Scanning Experiment"
|
||||
description = "Base experiment for scanning machinery with specific parts"
|
||||
exp_tag = "Scan"
|
||||
exp_tag = EXPERIMENT_TAG_SCAN
|
||||
///Which stock part are we looking for in the machine.
|
||||
///We use obj instead of datum here, as some stock parts aren't datumised, and in datumised ones
|
||||
///we can just look for the physical_object_reference to match up the requirement.
|
||||
|
||||
@@ -31,6 +31,7 @@ It is used to destroy hand-held objects and advance technological research. Used
|
||||
)
|
||||
|
||||
AddComponent(/datum/component/experiment_handler, \
|
||||
config_mode = EXPERIMENT_CONFIG_ALTCLICK, \
|
||||
allowed_experiments = list(/datum/experiment/scanning),\
|
||||
config_flags = EXPERIMENT_CONFIG_ALWAYS_ACTIVE|EXPERIMENT_CONFIG_SILENT_FAIL,\
|
||||
experiment_signals = destructive_signals, \
|
||||
@@ -246,13 +247,17 @@ It is used to destroy hand-held objects and advance technological research. Used
|
||||
busy = TRUE
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_busy)), 2.4 SECONDS)
|
||||
use_power(active_power_usage)
|
||||
//Failsafe.
|
||||
// Destroy items inside
|
||||
var/list/destructing = list()
|
||||
destructing += current_item
|
||||
for(var/atom/movable/AM in current_item.contents)
|
||||
AM.forceMove(get_turf(src))
|
||||
playsound(src, 'sound/machines/destructive_analyzer.ogg', 50, 1)
|
||||
SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, current_item)
|
||||
destroy_item_individual(current_item, gain_research_points)
|
||||
destructing += AM
|
||||
for(var/atom/thing_destroying in destructing) // For all contents and itself
|
||||
destroy_item_individual(thing_destroying, gain_research_points)
|
||||
loaded_item = null
|
||||
// feedback
|
||||
playsound(src, 'sound/machines/destructive_analyzer.ogg', 50, 1)
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
@@ -277,12 +282,10 @@ It is used to destroy hand-held objects and advance technological research. Used
|
||||
visible_message(span_warning("A loud buzz sounds out from \the [src] as it rejects and spits out \the [thing]!"))
|
||||
thing.forceMove(turf_to_dump_to)
|
||||
return
|
||||
var/list/point_value = techweb_item_point_check(thing)
|
||||
//If it has a point value and we haven't deconstructed it OR we've deconstructed it but it's a repeatable.
|
||||
if(point_value && (!stored_research.deconstructed_items[thing.type] || (stored_research.deconstructed_items[thing.type] && (thing.type in SSresearch.techweb_repeatable_items))))
|
||||
if(SSresearch.techweb_point_items[thing.type]) //Don't add things that have the deconstructable_research component
|
||||
stored_research.deconstructed_items[thing.type] = TRUE
|
||||
stored_research.add_point_list(point_value)
|
||||
|
||||
//Perform experiment
|
||||
techweb_item_generate_points(thing, stored_research)
|
||||
SEND_SIGNAL(src, COMSIG_MACHINERY_DESTRUCTIVE_SCAN, thing)
|
||||
|
||||
//Finally, let's add it to the material silo, if applicable.
|
||||
var/datum/component/material_container/materials = get_silo_material_container_datum(FALSE)
|
||||
|
||||
@@ -27,6 +27,16 @@
|
||||
return list(type_pointer["type"] = point_value)
|
||||
return FALSE
|
||||
|
||||
/proc/techweb_item_generate_points(obj/item/thing, datum/techweb/target_techweb)
|
||||
if(!istype(thing))
|
||||
return
|
||||
var/list/point_value = techweb_item_point_check(thing)
|
||||
//If it has a point value and we haven't deconstructed it OR we've deconstructed it but it's a repeatable.
|
||||
if(point_value && (!target_techweb.deconstructed_items[thing.type] || (target_techweb.deconstructed_items[thing.type] && (thing.type in SSresearch.techweb_repeatable_items))))
|
||||
if(SSresearch.techweb_point_items[thing.type]) //Don't add things that have the deconstructable_research component
|
||||
target_techweb.deconstructed_items[thing.type] = TRUE
|
||||
target_techweb.add_point_list(point_value)
|
||||
|
||||
/proc/techweb_point_display_generic(pointlist)
|
||||
var/list/ret = list()
|
||||
for(var/i in pointlist)
|
||||
|
||||
@@ -337,4 +337,5 @@
|
||||
"titan_armour",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
|
||||
discount_experiments = list(/datum/experiment/physical/teleporting = TECHWEB_TIER_3_POINTS)
|
||||
announce_channels = list(CHANNEL_SCIENCE)
|
||||
|
||||
@@ -8,27 +8,29 @@
|
||||
"scan_console",
|
||||
// "medicalbed",
|
||||
// "defibmountdefault",
|
||||
// "defibrillator",
|
||||
"defibrillator",
|
||||
// "surgical_drapes",
|
||||
// "scalpel",
|
||||
// "retractor",
|
||||
// "hemostat",
|
||||
// "cautery",
|
||||
// "circular_saw",
|
||||
// "surgicaldrill",
|
||||
// "bonesetter",
|
||||
"scalpel",
|
||||
"retractor",
|
||||
"hemostat",
|
||||
"cautery",
|
||||
"circular_saw",
|
||||
"surgicaldrill",
|
||||
"bonesetter",
|
||||
"implanter",
|
||||
// "blood_filter",
|
||||
// "surgical_tape",
|
||||
// "penlight",
|
||||
"penlight",
|
||||
// "penlight_paramedic",
|
||||
// "stethoscope",
|
||||
// "beaker",
|
||||
// "large_beaker",
|
||||
"vial",
|
||||
"beaker",
|
||||
"large_beaker",
|
||||
// "chem_pack",
|
||||
// "blood_pack",
|
||||
// "syringe",
|
||||
// "dropper",
|
||||
// "pillbottle",
|
||||
"syringe",
|
||||
"dropper",
|
||||
"pillbottle",
|
||||
// "xlarge_beaker",
|
||||
// "organ_jar",
|
||||
// "jerrycan",
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
// "gigabeacon",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
|
||||
// discount_experiments = list(/datum/experiment/scanning/points/bluespace_crystal = TECHWEB_TIER_2_POINTS)
|
||||
discount_experiments = list(/datum/experiment/scanning/bluespace_crystal = TECHWEB_TIER_2_POINTS)
|
||||
announce_channels = list(CHANNEL_SCIENCE, CHANNEL_MEDICAL, CHANNEL_SERVICE, CHANNEL_SUPPLY)
|
||||
|
||||
/datum/techweb_node/bluespace_travel
|
||||
|
||||
@@ -303,6 +303,7 @@
|
||||
source = dest
|
||||
dest = target
|
||||
|
||||
var/list/sent_atoms = list()
|
||||
flick("pad-beam", telepad)
|
||||
playsound(telepad, 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
|
||||
for(var/atom/movable/ROI in source)
|
||||
@@ -338,7 +339,11 @@
|
||||
else
|
||||
log_msg += ")"
|
||||
log_msg += ", "
|
||||
sent_atoms += ROI
|
||||
do_teleport(ROI, dest)
|
||||
// Either works for the experiment scan, so fire signals on both
|
||||
SEND_SIGNAL(src, COMSIG_TELESCI_TELEPORT, sent_atoms, target, sending)
|
||||
SEND_SIGNAL(telepad, COMSIG_TELESCI_TELEPORT, sent_atoms, target, sending)
|
||||
|
||||
if (!dd_hassuffix(log_msg, ", "))
|
||||
log_msg += "nothing"
|
||||
|
||||
Reference in New Issue
Block a user