Xenobotany machines can be constructed (#19342)

* required

* fixes for contents

* prevent deconstruction while activated

* node already existed

* part stuff

* corrected nodes

* oops
This commit is contained in:
Will
2026-03-26 21:08:04 -04:00
committed by GitHub
parent 01aee20aec
commit c7644c7877
5 changed files with 108 additions and 11 deletions
+26 -5
View File
@@ -53,6 +53,22 @@
var/failed_task = 0
var/disk_needs_genes = 0
/obj/machinery/botany/Initialize(mapload)
. = ..()
default_apply_parts()
/* Currently part upgrades do nothing
/obj/machinery/botany/RefreshParts()
..()
*/
/obj/machinery/botany/Destroy()
if(seed)
seed.forceMove(get_turf(src))
if(loaded_disk)
loaded_disk.forceMove(get_turf(src))
. = ..()
/obj/machinery/botany/process()
..()
@@ -78,7 +94,7 @@
if(eject_disk)
eject_disk = 0
if(loaded_disk)
loaded_disk.loc = get_turf(src)
loaded_disk.forceMove(get_turf(src))
visible_message(span_filter_notice("[icon2html(src,viewers(src))] [src] beeps and spits out [loaded_disk]."))
loaded_disk = null
@@ -92,7 +108,7 @@
to_chat(user, span_filter_notice("That seed is not compatible with our genetics technology."))
else
user.drop_from_inventory(W)
W.loc = src
W.forceMove(src)
seed = W
to_chat(user, span_filter_notice("You load [W] into [src]."))
return
@@ -104,8 +120,11 @@
to_chat(user, span_notice("You [anchored ? "un" : ""]secure \the [src]."))
anchored = !anchored
return
// if(default_deconstruction_crowbar(user, W)) //No circuit boards to give.
// return
if(!active)
if(default_deconstruction_crowbar(user, W))
return
if(default_part_replacement(user, W))
return
if(istype(W,/obj/item/disk/botany))
if(loaded_disk)
to_chat(user, span_filter_notice("There is already a data disk loaded."))
@@ -123,7 +142,7 @@
return
user.drop_from_inventory(W)
W.loc = src
W.forceMove(src)
loaded_disk = W
to_chat(user, span_filter_notice("You load [W] into [src]."))
@@ -137,6 +156,7 @@
var/datum/seed/genetics // Currently scanned seed genetic structure.
var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
circuit = /obj/item/circuitboard/botany_extractor
/obj/machinery/botany/extractor/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -265,6 +285,7 @@
name = "bioballistic delivery system"
icon_state = "traitgun"
disk_needs_genes = 1
circuit = /obj/item/circuitboard/botany_editor
/obj/machinery/botany/editor/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -197,6 +197,34 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
// Xenobotany
/datum/design_techweb/board/botany_extractor
SET_CIRCUIT_DESIGN_NAMEDESC("lysis-isolation centrifuge")
id = "botany_extractor"
build_path = /obj/item/circuitboard/botany_extractor
category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/board/botany_editor
SET_CIRCUIT_DESIGN_NAMEDESC("bioballistic delivery system")
id = "botany_editor"
build_path = /obj/item/circuitboard/botany_editor
category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/board/botany_seedextractor
SET_CIRCUIT_DESIGN_NAMEDESC("seed extractor")
id = "seed_extractor"
build_path = /obj/item/circuitboard/botany_seedextractor
category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_BOTANY
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/board/destructive_analyzer
SET_CIRCUIT_DESIGN_NAMEDESC("destructive analyzer")
id = "destructive_analyzer"
@@ -86,7 +86,7 @@
description = "Essential tools for maintaining onboard gardens, supporting plant growth in the unique environment of the space station."
design_ids = list(
"plant_analyzer",
// "seed_extractor",
"seed_extractor",
// "watering_can",
"spade",
// "cultivator",
@@ -115,6 +115,8 @@
design_ids = list(
"flora_gun",
"disk_botany",
"botany_extractor",
"botany_editor",
// "gene_shears",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)