Merge pull request #3831 from FalseIncarnate/botany

Xeno-Botany Quality of Life Changes
This commit is contained in:
Fox McCloud
2016-03-11 21:22:27 -05:00
6 changed files with 138 additions and 55 deletions
+8 -15
View File
@@ -4,20 +4,20 @@
#define PLANTS_PER_TICK 500 // Cap on number of plant segments processed.
#define PLANT_TICK_TIME 75 // Number of ticks between the plant processor cycling.
// Debug for testing seed genes.
// Debug for testing seed genes (less useful now that the obfuscation is gone, but still might be useful for the future.
/client/proc/show_plant_genes()
set category = "Debug"
set name = "Show Plant Genes"
set desc = "Prints the round's plant gene masks."
set desc = "Prints the round's plant gene tags."
if(!holder) return
if(!plant_controller || !plant_controller.gene_tag_masks)
usr << "Gene masks not set."
if(!plant_controller || !plant_controller.gene_tag_list)
usr << "Gene tags not set."
return
for(var/mask in plant_controller.gene_tag_masks)
usr << "[mask]: [plant_controller.gene_tag_masks[mask]]"
for(var/gene_tag in plant_controller.gene_tag_list)
usr << "[gene_tag]"
var/global/datum/controller/plants/plant_controller // Set in New().
@@ -28,7 +28,7 @@ var/global/datum/controller/plants/plant_controller // Set in New().
var/list/product_descs = list() // Stores generated fruit descs.
var/list/plant_queue = list() // All queued plants.
var/list/seeds = list() // All seed data stored here.
var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness.
var/list/gene_tag_list = list() // List of gene tags for xenobotany fun
var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds.
var/list/plant_sprites = list() // List of all harvested product sprites.
var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
@@ -83,18 +83,11 @@ var/global/datum/controller/plants/plant_controller // Set in New().
S.update_seed()
//Might as well mask the gene types while we're at it.
var/list/used_masks = list()
var/list/plant_traits = ALL_GENES
while(plant_traits && plant_traits.len)
var/gene_tag = pick(plant_traits)
var/gene_mask = "[uppertext(num2hex(rand(0,255)))]"
while(gene_mask in used_masks)
gene_mask = "[uppertext(num2hex(rand(0,255)))]"
used_masks += gene_mask
plant_traits -= gene_tag
gene_tag_masks[gene_tag] = gene_mask
gene_tag_list.Add(gene_tag)
// Proc for creating a random seed type.
/datum/controller/plants/proc/create_random_seed(var/survive_on_station)
+47 -7
View File
@@ -136,6 +136,26 @@
var/datum/seed/genetics // Currently scanned seed genetic structure.
var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
var/degrade_lower = 20
var/degrade_upper = 60
/obj/machinery/botany/extractor/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/botany_extractor(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/botany/extractor/RefreshParts()
var/tier = 1
for (var/obj/item/weapon/stock_parts/scanning_module/S in component_parts)
tier = S.rating
degrade_lower = 25 - (tier * 5) //Tier 1: 20, Tier 4: 5
degrade_upper = 70 - (tier * 10) //Tier 1: 60, Tier 4: 30
/obj/machinery/botany/extractor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
@@ -144,8 +164,8 @@
var/list/data = list()
var/list/geneMasks[0]
for(var/gene_tag in plant_controller.gene_tag_masks)
geneMasks.Add(list(list("tag" = gene_tag, "mask" = plant_controller.gene_tag_masks[gene_tag])))
for(var/gene_tag in plant_controller.gene_tag_list)
geneMasks.Add(gene_tag)
data["geneMasks"] = geneMasks
data["activity"] = active
@@ -242,11 +262,11 @@
if(!genetics.roundstart)
loaded_disk.genesource += " (variety #[genetics.uid])"
loaded_disk.name += " ([plant_controller.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
loaded_disk.desc += " The label reads \'gene [plant_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
loaded_disk.name += " ([href_list["get_gene"]], #[genetics.uid])"
loaded_disk.desc += " The label reads \'[href_list["get_gene"]] gene, sampled from [genetics.display_name]\'."
eject_disk = 1
degradation += rand(20,60)
degradation += rand(degrade_lower, degrade_upper)
if(degradation >= 100)
failed_task = 1
genetics = null
@@ -267,6 +287,26 @@
icon_state = "traitgun"
disk_needs_genes = 1
var/degrade_lower = 5
var/degrade_upper = 10
/obj/machinery/botany/editor/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/botany_editor(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/botany/editor/RefreshParts()
var/tier = 1
for (var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
tier = M.rating
degrade_lower = 6 - tier //Tier 1: 5, Tier 4: 1
degrade_upper = 11 - tier //Tier 1: 10, Tier 4: 6
/obj/machinery/botany/editor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
@@ -288,7 +328,7 @@
for(var/datum/plantgene/P in loaded_disk.genes)
if(data["locus"] != "") data["locus"] += ", "
data["locus"] += "[plant_controller.gene_tag_masks[P.genetype]]"
data["locus"] += "[plant_controller.gene_tag_list[P.genetype]]"
else
data["disk"] = 0
@@ -329,7 +369,7 @@
for(var/datum/plantgene/gene in loaded_disk.genes)
seed.seed.apply_gene(gene)
seed.modified += rand(5,10)
seed.modified += rand(degrade_lower, degrade_upper)
usr.set_machine(src)
src.add_fingerprint(usr)
@@ -500,4 +500,24 @@
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/prize_counter
category = list("Misc. Machinery")
category = list("Misc. Machinery")
/datum/design/botany_extractor
name = "Machine Design (Lysis-Isolation Centrifuge)"
desc = "The circuit board for a lysis-isolation centrifuge."
id = "botany_extractor"
req_tech = list("biotech" = 3, "programming" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/botany_extractor
category = list("Hydroponics Machinery")
/datum/design/botany_editor
name = "Machine Design (Bioballistic Delivery System)"
desc = "The circuit board for a bioballistic delivery system."
id = "botany_editor"
req_tech = list("biotech" = 3, "programming" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/botany_editor
category = list("Hydroponics Machinery")