// Attempts to offload processing for the spreading plants from the MC. // Processes vines/spreading plants. #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. /client/proc/show_plant_genes() set category = "Debug" set name = "Show Plant Genes" set desc = "Prints the round's plant gene masks." if(!holder) return if(!plant_controller || !plant_controller.gene_tag_masks) usr << "Gene masks not set." return for(var/mask in plant_controller.gene_tag_masks) usr << "[mask]: [plant_controller.gene_tag_masks[mask]]" var/global/datum/controller/plants/plant_controller // Set in New(). /datum/controller/plants var/plants_per_tick = PLANTS_PER_TICK var/plant_tick_time = PLANT_TICK_TIME 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/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. var/processing = 0 // Off/on. /datum/controller/plants/New() if(plant_controller && plant_controller != src) log_debug("Rebuilding plant controller.") del(plant_controller) plant_controller = src setup() process() // Predefined/roundstart varieties use a string key to make it // easier to grab the new variety when mutating. Post-roundstart // and mutant varieties use their uid converted to a string instead. // Looks like shit but it's sort of necessary. /datum/controller/plants/proc/setup() // Build the icon lists. for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi')) var/split = findtext(icostate,"-") if(!split) // invalid icon_state continue var/ikey = copytext(icostate,(split+1)) if(ikey == "dead") // don't count dead icons continue ikey = text2num(ikey) var/base = copytext(icostate,1,split) if(!(plant_sprites[base]) || (plant_sprites[base]