mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Added plant controller.
This commit is contained in:
@@ -960,6 +960,7 @@
|
|||||||
#include "code\modules\hydroponics\grown.dm"
|
#include "code\modules\hydroponics\grown.dm"
|
||||||
#include "code\modules\hydroponics\grown_inedible.dm"
|
#include "code\modules\hydroponics\grown_inedible.dm"
|
||||||
#include "code\modules\hydroponics\seed.dm"
|
#include "code\modules\hydroponics\seed.dm"
|
||||||
|
#include "code\modules\hydroponics\seed_controller.dm"
|
||||||
#include "code\modules\hydroponics\seed_datums.dm"
|
#include "code\modules\hydroponics\seed_datums.dm"
|
||||||
#include "code\modules\hydroponics\seed_machines.dm"
|
#include "code\modules\hydroponics\seed_machines.dm"
|
||||||
#include "code\modules\hydroponics\seed_mobs.dm"
|
#include "code\modules\hydroponics\seed_mobs.dm"
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
|
message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
|
||||||
return
|
return
|
||||||
|
|
||||||
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event"))
|
/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants"))
|
||||||
set category = "Debug"
|
set category = "Debug"
|
||||||
set name = "Debug Controller"
|
set name = "Debug Controller"
|
||||||
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
|
||||||
@@ -106,5 +106,8 @@
|
|||||||
if("Event")
|
if("Event")
|
||||||
debug_variables(event_manager)
|
debug_variables(event_manager)
|
||||||
feedback_add_details("admin_verb", "DEvent")
|
feedback_add_details("admin_verb", "DEvent")
|
||||||
|
if("Plants")
|
||||||
|
debug_variables(plant_controller)
|
||||||
|
feedback_add_details("admin_verb", "DPlants")
|
||||||
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
|
|||||||
var/datum/seed/new_seed_type
|
var/datum/seed/new_seed_type
|
||||||
if(istype(O, /obj/item/weapon/grown))
|
if(istype(O, /obj/item/weapon/grown))
|
||||||
var/obj/item/weapon/grown/F = O
|
var/obj/item/weapon/grown/F = O
|
||||||
new_seed_type = seed_types[F.plantname]
|
new_seed_type = plant_controller.seeds[F.plantname]
|
||||||
else
|
else
|
||||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O
|
var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O
|
||||||
new_seed_type = seed_types[F.plantname]
|
new_seed_type = plant_controller.seeds[F.plantname]
|
||||||
|
|
||||||
if(new_seed_type)
|
if(new_seed_type)
|
||||||
user << "<span class='notice'>You extract some seeds from [O].</span>"
|
user << "<span class='notice'>You extract some seeds from [O].</span>"
|
||||||
|
|||||||
@@ -17,6 +17,14 @@
|
|||||||
icon = 'icons/mob/robots.dmi'
|
icon = 'icons/mob/robots.dmi'
|
||||||
icon_state = "remainsrobot"
|
icon_state = "remainsrobot"
|
||||||
|
|
||||||
|
/obj/effect/decal/remains/mouse
|
||||||
|
desc = "They look like the remains of a small rodent."
|
||||||
|
icon_state = "mouse"
|
||||||
|
|
||||||
|
/obj/effect/decal/remains/lizard
|
||||||
|
desc = "They look like the remains of a small rodent."
|
||||||
|
icon_state = "lizard"
|
||||||
|
|
||||||
/obj/effect/decal/remains/attack_hand(mob/user as mob)
|
/obj/effect/decal/remains/attack_hand(mob/user as mob)
|
||||||
user << "<span class='notice'>[src] sinks together into a pile of ash.</span>"
|
user << "<span class='notice'>[src] sinks together into a pile of ash.</span>"
|
||||||
var/turf/simulated/floor/F = get_turf(src)
|
var/turf/simulated/floor/F = get_turf(src)
|
||||||
|
|||||||
@@ -254,11 +254,5 @@ var/static/list/scarySounds = list(
|
|||||||
// Bomb cap!
|
// Bomb cap!
|
||||||
var/max_explosion_range = 14
|
var/max_explosion_range = 14
|
||||||
|
|
||||||
// Several cache lists for plants/hydroponics.
|
|
||||||
var/global/list/seed_types = list() // A list of all seed data.
|
|
||||||
var/global/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness.
|
|
||||||
var/global/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds.
|
|
||||||
|
|
||||||
// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it.
|
// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it.
|
||||||
var/global/obj/item/device/radio/intercom/global_announcer = new(null)
|
var/global/obj/item/device/radio/intercom/global_announcer = new(null)
|
||||||
|
|
||||||
|
|||||||
@@ -1001,10 +1001,10 @@ var/global/floorIsLava = 0
|
|||||||
|
|
||||||
if(!check_rights(R_SPAWN)) return
|
if(!check_rights(R_SPAWN)) return
|
||||||
|
|
||||||
var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in seed_types
|
var/seedtype = input("Select a seed type", "Spawn Fruit") as null|anything in plant_controller.seeds
|
||||||
if(!seedtype || !seed_types[seedtype])
|
if(!seedtype || !plant_controller.seeds[seedtype])
|
||||||
return
|
return
|
||||||
var/datum/seed/S = seed_types[seedtype]
|
var/datum/seed/S = plant_controller.seeds[seedtype]
|
||||||
S.harvest(usr,0,0,1)
|
S.harvest(usr,0,0,1)
|
||||||
|
|
||||||
/datum/admins/proc/spawn_plant()
|
/datum/admins/proc/spawn_plant()
|
||||||
@@ -1014,10 +1014,10 @@ var/global/floorIsLava = 0
|
|||||||
|
|
||||||
if(!check_rights(R_SPAWN)) return
|
if(!check_rights(R_SPAWN)) return
|
||||||
|
|
||||||
var/seedtype = input("Select a seed type", "Spawn Plant") as null|anything in seed_types
|
var/seedtype = input("Select a seed type", "Spawn Plant") as null|anything in plant_controller.seeds
|
||||||
if(!seedtype || !seed_types[seedtype])
|
if(!seedtype || !plant_controller.seeds[seedtype])
|
||||||
return
|
return
|
||||||
new /obj/effect/plant(get_turf(usr), seed_types[seedtype])
|
new /obj/effect/plant(get_turf(usr), plant_controller.seeds[seedtype])
|
||||||
|
|
||||||
/datum/admins/proc/spawn_atom(var/object as text)
|
/datum/admins/proc/spawn_atom(var/object as text)
|
||||||
set category = "Debug"
|
set category = "Debug"
|
||||||
|
|||||||
@@ -24,7 +24,15 @@
|
|||||||
if(!plantname)
|
if(!plantname)
|
||||||
return
|
return
|
||||||
|
|
||||||
seed = seed_types[plantname]
|
if(!plant_controller)
|
||||||
|
sleep(250) // ugly hack, should mean roundstart plants are fine.
|
||||||
|
if(!plant_controller)
|
||||||
|
world << "<span class='danger'>Plant controller does not exist and [src] requires it. Aborting.</span>"
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
seed = plant_controller.seeds[plantname]
|
||||||
|
|
||||||
if(!seed)
|
if(!seed)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
//Handle some post-spawn var stuff.
|
//Handle some post-spawn var stuff.
|
||||||
if(planttype)
|
if(planttype)
|
||||||
plantname = planttype
|
plantname = planttype
|
||||||
var/datum/seed/S = seed_types[plantname]
|
var/datum/seed/S = plant_controller.seeds[plantname]
|
||||||
if(!S || !S.chems)
|
if(!S || !S.chems)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -1,96 +1,3 @@
|
|||||||
// Sprite lists.
|
|
||||||
var/global/list/plant_sprites = list() // List of all harvested product sprites.
|
|
||||||
var/global/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
|
|
||||||
|
|
||||||
// Proc for creating a random seed type.
|
|
||||||
/proc/create_random_seed(var/survive_on_station)
|
|
||||||
var/datum/seed/seed = new()
|
|
||||||
seed.randomize()
|
|
||||||
seed.uid = seed_types.len + 1
|
|
||||||
seed.name = "[seed.uid]"
|
|
||||||
seed_types[seed.name] = seed
|
|
||||||
|
|
||||||
if(survive_on_station)
|
|
||||||
if(seed.consume_gasses)
|
|
||||||
seed.consume_gasses["phoron"] = null
|
|
||||||
seed.consume_gasses["carbon_dioxide"] = null
|
|
||||||
seed.set_trait(TRAIT_IDEAL_HEAT,293)
|
|
||||||
seed.set_trait(TRAIT_HEAT_TOLERANCE,20)
|
|
||||||
seed.set_trait(TRAIT_IDEAL_LIGHT,8)
|
|
||||||
seed.set_trait(TRAIT_LIGHT_TOLERANCE,5)
|
|
||||||
seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25)
|
|
||||||
seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200)
|
|
||||||
|
|
||||||
return seed
|
|
||||||
|
|
||||||
// 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(!gene_tag_masks)
|
|
||||||
usr << "Gene masks not set."
|
|
||||||
return
|
|
||||||
|
|
||||||
for(var/mask in gene_tag_masks)
|
|
||||||
usr << "[mask]: [gene_tag_masks[mask]]"
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
|
|
||||||
proc/populate_seed_list()
|
|
||||||
|
|
||||||
// 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]<ikey))
|
|
||||||
plant_sprites[base] = ikey
|
|
||||||
|
|
||||||
for(var/icostate in icon_states('icons/obj/hydroponics_products.dmi'))
|
|
||||||
plant_product_sprites |= icostate
|
|
||||||
|
|
||||||
// Populate the global seed datum list.
|
|
||||||
for(var/type in typesof(/datum/seed)-/datum/seed)
|
|
||||||
var/datum/seed/S = new type
|
|
||||||
seed_types[S.name] = S
|
|
||||||
S.uid = "[seed_types.len]"
|
|
||||||
S.roundstart = 1
|
|
||||||
|
|
||||||
// Make sure any seed packets that were mapped in are updated
|
|
||||||
// correctly (since the seed datums did not exist a tick ago).
|
|
||||||
for(var/obj/item/seeds/S in world)
|
|
||||||
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 = "[num2hex(rand(0,255))]"
|
|
||||||
|
|
||||||
while(gene_mask in used_masks)
|
|
||||||
gene_mask = "[num2hex(rand(0,255))]"
|
|
||||||
|
|
||||||
used_masks += gene_mask
|
|
||||||
plant_traits -= gene_tag
|
|
||||||
gene_tag_masks[gene_tag] = gene_mask
|
|
||||||
|
|
||||||
/datum/plantgene
|
/datum/plantgene
|
||||||
var/genetype // Label used when applying trait.
|
var/genetype // Label used when applying trait.
|
||||||
var/list/values // Values to copy into the target seed datum.
|
var/list/values // Values to copy into the target seed datum.
|
||||||
@@ -380,8 +287,8 @@ proc/populate_seed_list()
|
|||||||
seed_noun = pick("spores","nodes","cuttings","seeds")
|
seed_noun = pick("spores","nodes","cuttings","seeds")
|
||||||
|
|
||||||
set_trait(TRAIT_POTENCY,rand(5,30),200,0)
|
set_trait(TRAIT_POTENCY,rand(5,30),200,0)
|
||||||
set_trait(TRAIT_PRODUCT_ICON,pick(plant_product_sprites))
|
set_trait(TRAIT_PRODUCT_ICON,pick(plant_controller.plant_product_sprites))
|
||||||
set_trait(TRAIT_PLANT_ICON,pick(plant_sprites))
|
set_trait(TRAIT_PLANT_ICON,pick(plant_controller.plant_sprites))
|
||||||
set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]")
|
set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]")
|
||||||
set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]")
|
set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]")
|
||||||
update_growth_stages()
|
update_growth_stages()
|
||||||
@@ -679,10 +586,10 @@ proc/populate_seed_list()
|
|||||||
if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]."
|
if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]."
|
||||||
|
|
||||||
//This may be a new line. Update the global if it is.
|
//This may be a new line. Update the global if it is.
|
||||||
if(name == "new line" || !(name in seed_types))
|
if(name == "new line" || !(name in plant_controller.seeds))
|
||||||
uid = seed_types.len + 1
|
uid = plant_controller.seeds.len + 1
|
||||||
name = "[uid]"
|
name = "[uid]"
|
||||||
seed_types[name] = src
|
plant_controller.seeds[name] = src
|
||||||
|
|
||||||
if(harvest_sample)
|
if(harvest_sample)
|
||||||
var/obj/item/seeds/seeds = new(get_turf(user))
|
var/obj/item/seeds/seeds = new(get_turf(user))
|
||||||
@@ -759,6 +666,6 @@ proc/populate_seed_list()
|
|||||||
|
|
||||||
/datum/seed/proc/update_growth_stages()
|
/datum/seed/proc/update_growth_stages()
|
||||||
if(get_trait(TRAIT_PLANT_ICON))
|
if(get_trait(TRAIT_PLANT_ICON))
|
||||||
growth_stages = plant_sprites[get_trait(TRAIT_PLANT_ICON)]
|
growth_stages = plant_controller.plant_sprites[get_trait(TRAIT_PLANT_ICON)]
|
||||||
else
|
else
|
||||||
growth_stages = 0
|
growth_stages = 0
|
||||||
|
|||||||
131
code/modules/hydroponics/seed_controller.dm
Normal file
131
code/modules/hydroponics/seed_controller.dm
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
//Attempts to offload processing for the spreading plants from the MC.
|
||||||
|
// Processes vines/spreading plants.
|
||||||
|
|
||||||
|
#define PLANTS_PER_TICK 5
|
||||||
|
#define PLANT_TICK_TIME 5
|
||||||
|
|
||||||
|
// 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.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/list/plants = list() // All currently processing 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
|
||||||
|
|
||||||
|
/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]<ikey))
|
||||||
|
plant_sprites[base] = ikey
|
||||||
|
|
||||||
|
for(var/icostate in icon_states('icons/obj/hydroponics_products.dmi'))
|
||||||
|
plant_product_sprites |= icostate
|
||||||
|
|
||||||
|
// Populate the global seed datum list.
|
||||||
|
for(var/type in typesof(/datum/seed)-/datum/seed)
|
||||||
|
var/datum/seed/S = new type
|
||||||
|
seeds[S.name] = S
|
||||||
|
S.uid = "[seeds.len]"
|
||||||
|
S.roundstart = 1
|
||||||
|
|
||||||
|
// Make sure any seed packets that were mapped in are updated
|
||||||
|
// correctly (since the seed datums did not exist a tick ago).
|
||||||
|
for(var/obj/item/seeds/S in world)
|
||||||
|
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 = "[num2hex(rand(0,255))]"
|
||||||
|
|
||||||
|
while(gene_mask in used_masks)
|
||||||
|
gene_mask = "[num2hex(rand(0,255))]"
|
||||||
|
|
||||||
|
used_masks += gene_mask
|
||||||
|
plant_traits -= gene_tag
|
||||||
|
gene_tag_masks[gene_tag] = gene_mask
|
||||||
|
|
||||||
|
// Proc for creating a random seed type.
|
||||||
|
/datum/controller/plants/proc/create_random_seed(var/survive_on_station)
|
||||||
|
var/datum/seed/seed = new()
|
||||||
|
seed.randomize()
|
||||||
|
seed.uid = plant_controller.seeds.len + 1
|
||||||
|
seed.name = "[seed.uid]"
|
||||||
|
seeds[seed.name] = seed
|
||||||
|
|
||||||
|
if(survive_on_station)
|
||||||
|
if(seed.consume_gasses)
|
||||||
|
seed.consume_gasses["phoron"] = null
|
||||||
|
seed.consume_gasses["carbon_dioxide"] = null
|
||||||
|
seed.set_trait(TRAIT_IDEAL_HEAT,293)
|
||||||
|
seed.set_trait(TRAIT_HEAT_TOLERANCE,20)
|
||||||
|
seed.set_trait(TRAIT_IDEAL_LIGHT,8)
|
||||||
|
seed.set_trait(TRAIT_LIGHT_TOLERANCE,5)
|
||||||
|
seed.set_trait(TRAIT_LOWKPA_TOLERANCE,25)
|
||||||
|
seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200)
|
||||||
|
return seed
|
||||||
|
|
||||||
|
/datum/controller/plants/proc/process()
|
||||||
|
processing = 1
|
||||||
|
spawn(0)
|
||||||
|
set background = 1
|
||||||
|
while(1)
|
||||||
|
if(!processing)
|
||||||
|
sleep(PLANT_TICK_TIME)
|
||||||
|
else
|
||||||
|
var/processed = 0
|
||||||
|
for(var/x=0;x<PLANTS_PER_TICK;x++)
|
||||||
|
if(!plants.len)
|
||||||
|
break
|
||||||
|
sleep(-1)
|
||||||
|
var/obj/effect/plant/plant = pick(plants)
|
||||||
|
plants -= plant
|
||||||
|
plant.process()
|
||||||
|
|
||||||
|
/datum/controller/plants/proc/add_plant(var/obj/effect/plant/plant)
|
||||||
|
plants |= plant
|
||||||
@@ -144,8 +144,8 @@
|
|||||||
var/list/data = list()
|
var/list/data = list()
|
||||||
|
|
||||||
var/list/geneMasks[0]
|
var/list/geneMasks[0]
|
||||||
for(var/gene_tag in gene_tag_masks)
|
for(var/gene_tag in plant_controller.gene_tag_masks)
|
||||||
geneMasks.Add(list(list("tag" = gene_tag, "mask" = gene_tag_masks[gene_tag])))
|
geneMasks.Add(list(list("tag" = gene_tag, "mask" = plant_controller.gene_tag_masks[gene_tag])))
|
||||||
data["geneMasks"] = geneMasks
|
data["geneMasks"] = geneMasks
|
||||||
|
|
||||||
data["activity"] = active
|
data["activity"] = active
|
||||||
@@ -186,10 +186,10 @@
|
|||||||
if(!seed) return
|
if(!seed) return
|
||||||
seed.loc = get_turf(src)
|
seed.loc = get_turf(src)
|
||||||
|
|
||||||
if(seed.seed.name == "new line" || isnull(seed_types[seed.seed.name]))
|
if(seed.seed.name == "new line" || isnull(plant_controller.seeds[seed.seed.name]))
|
||||||
seed.seed.uid = seed_types.len + 1
|
seed.seed.uid = plant_controller.seeds.len + 1
|
||||||
seed.seed.name = "[seed.seed.uid]"
|
seed.seed.name = "[seed.seed.uid]"
|
||||||
seed_types[seed.seed.name] = seed.seed
|
plant_controller.seeds[seed.seed.name] = seed.seed
|
||||||
|
|
||||||
seed.update_seed()
|
seed.update_seed()
|
||||||
visible_message("\icon[src] [src] beeps and spits out [seed].")
|
visible_message("\icon[src] [src] beeps and spits out [seed].")
|
||||||
@@ -242,8 +242,8 @@
|
|||||||
if(!genetics.roundstart)
|
if(!genetics.roundstart)
|
||||||
loaded_disk.genesource += " (variety #[genetics.uid])"
|
loaded_disk.genesource += " (variety #[genetics.uid])"
|
||||||
|
|
||||||
loaded_disk.name += " ([gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
|
loaded_disk.name += " ([plant_controller.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
|
||||||
loaded_disk.desc += " The label reads \'gene [gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
|
loaded_disk.desc += " The label reads \'gene [plant_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
|
||||||
eject_disk = 1
|
eject_disk = 1
|
||||||
|
|
||||||
degradation += rand(20,60)
|
degradation += rand(20,60)
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
|
|
||||||
for(var/datum/plantgene/P in loaded_disk.genes)
|
for(var/datum/plantgene/P in loaded_disk.genes)
|
||||||
if(data["locus"] != "") data["locus"] += ", "
|
if(data["locus"] != "") data["locus"] += ", "
|
||||||
data["locus"] += "[gene_tag_masks[P.genetype]]"
|
data["locus"] += "[plant_controller.gene_tag_masks[P.genetype]]"
|
||||||
|
|
||||||
else
|
else
|
||||||
data["disk"] = 0
|
data["disk"] = 0
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
last_action = world.time
|
last_action = world.time
|
||||||
active = 1
|
active = 1
|
||||||
|
|
||||||
if(!isnull(seed_types[seed.seed.name]))
|
if(!isnull(plant_controller.seeds[seed.seed.name]))
|
||||||
seed.seed = seed.seed.diverge(1)
|
seed.seed = seed.seed.diverge(1)
|
||||||
seed.seed_type = seed.seed.name
|
seed.seed_type = seed.seed.name
|
||||||
seed.update_seed()
|
seed.update_seed()
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ var/global/list/plant_seed_sprites = list()
|
|||||||
|
|
||||||
//Grabs the appropriate seed datum from the global list.
|
//Grabs the appropriate seed datum from the global list.
|
||||||
/obj/item/seeds/proc/update_seed()
|
/obj/item/seeds/proc/update_seed()
|
||||||
if(!seed && seed_type && !isnull(seed_types) && seed_types[seed_type])
|
if(!seed && seed_type && !isnull(plant_controller.seeds) && plant_controller.seeds[seed_type])
|
||||||
seed = seed_types[seed_type]
|
seed = plant_controller.seeds[seed_type]
|
||||||
update_appearance()
|
update_appearance()
|
||||||
|
|
||||||
//Updates strings and icon appropriately based on seed datum.
|
//Updates strings and icon appropriately based on seed datum.
|
||||||
@@ -74,7 +74,7 @@ var/global/list/plant_seed_sprites = list()
|
|||||||
seed_type = null
|
seed_type = null
|
||||||
|
|
||||||
/obj/item/seeds/random/New()
|
/obj/item/seeds/random/New()
|
||||||
seed = create_random_seed()
|
seed = plant_controller.create_random_seed()
|
||||||
seed_type = seed.name
|
seed_type = seed.name
|
||||||
update_seed()
|
update_seed()
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
if(turfs.len) //Pick a turf to spawn at if we can
|
if(turfs.len) //Pick a turf to spawn at if we can
|
||||||
var/turf/simulated/floor/T = pick(turfs)
|
var/turf/simulated/floor/T = pick(turfs)
|
||||||
var/datum/seed/seed = create_random_seed(1)
|
var/datum/seed/seed = plant_controller.create_random_seed(1)
|
||||||
seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines.
|
seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines.
|
||||||
seed.set_trait(TRAIT_POTENCY,rand(40,50)) // Guarantee a wide spread and powerful effects.
|
seed.set_trait(TRAIT_POTENCY,rand(40,50)) // Guarantee a wide spread and powerful effects.
|
||||||
new /obj/effect/plant(T,seed)
|
new /obj/effect/plant(T,seed)
|
||||||
@@ -25,10 +25,13 @@
|
|||||||
density = 0
|
density = 0
|
||||||
color = DEAD_PLANT_COLOUR
|
color = DEAD_PLANT_COLOUR
|
||||||
|
|
||||||
|
/obj/effect/dead_plant/attack_hand()
|
||||||
|
del(src)
|
||||||
|
|
||||||
/obj/effect/dead_plant/attackby()
|
/obj/effect/dead_plant/attackby()
|
||||||
..()
|
..()
|
||||||
for(var/obj/effect/plant/neighbor in view(1,src))
|
for(var/obj/effect/plant/neighbor in view(1,src))
|
||||||
neighbor.hibernating = 0
|
plant_controller.add_plant(neighbor)
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
/obj/effect/plant
|
/obj/effect/plant
|
||||||
@@ -55,7 +58,7 @@
|
|||||||
var/spread_into_adjacent = 60
|
var/spread_into_adjacent = 60
|
||||||
var/evolve_chance = 2
|
var/evolve_chance = 2
|
||||||
var/last_tick = 0
|
var/last_tick = 0
|
||||||
var/hibernating = 0
|
var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant
|
||||||
|
|
||||||
/obj/effect/plant/single
|
/obj/effect/plant/single
|
||||||
spread_chance = 0
|
spread_chance = 0
|
||||||
@@ -63,7 +66,7 @@
|
|||||||
/obj/effect/plant/New(var/newloc, var/datum/seed/newseed)
|
/obj/effect/plant/New(var/newloc, var/datum/seed/newseed)
|
||||||
..()
|
..()
|
||||||
if(!istype(newseed))
|
if(!istype(newseed))
|
||||||
newseed = seed_types[DEFAULT_SEED]
|
newseed = plant_controller.seeds[DEFAULT_SEED]
|
||||||
seed = newseed
|
seed = newseed
|
||||||
if(!seed)
|
if(!seed)
|
||||||
del(src)
|
del(src)
|
||||||
@@ -96,7 +99,7 @@
|
|||||||
|
|
||||||
set_dir(calc_dir())
|
set_dir(calc_dir())
|
||||||
update_icon()
|
update_icon()
|
||||||
processing_objects |= src
|
plant_controller.add_plant(src)
|
||||||
last_tick = world.timeofday
|
last_tick = world.timeofday
|
||||||
|
|
||||||
/obj/effect/plant/update_icon()
|
/obj/effect/plant/update_icon()
|
||||||
@@ -148,7 +151,6 @@
|
|||||||
/obj/effect/plant/Del()
|
/obj/effect/plant/Del()
|
||||||
if(children && children.len)
|
if(children && children.len)
|
||||||
die_off(null,1)
|
die_off(null,1)
|
||||||
processing_objects -= src
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/effect/plant/proc/get_dist_to_parent(var/current_count)
|
/obj/effect/plant/proc/get_dist_to_parent(var/current_count)
|
||||||
|
|||||||
@@ -14,37 +14,47 @@
|
|||||||
health = max_health
|
health = max_health
|
||||||
refresh_icon()
|
refresh_icon()
|
||||||
|
|
||||||
// Damaged, young hibernating or too far from parent, no chance of spreading.
|
if(buckled_mob)
|
||||||
if(is_mature() || hibernating || (parent && (get_dist_to_parent(0) > spread_distance)))
|
seed.do_sting(buckled_mob,src)
|
||||||
return
|
if(seed.get_trait(TRAIT_CARNIVOROUS))
|
||||||
|
// Todo: refactor to be less hardcoded.
|
||||||
|
if(istype(buckled_mob, /mob/living/simple_animal/mouse))
|
||||||
|
new /obj/effect/decal/remains/mouse(get_turf(src))
|
||||||
|
del(buckled_mob)
|
||||||
|
buckled_mob = null
|
||||||
|
return
|
||||||
|
else if(istype(buckled_mob, /mob/living/simple_animal/lizard))
|
||||||
|
new /obj/effect/decal/remains/lizard(get_turf(src))
|
||||||
|
del(buckled_mob)
|
||||||
|
buckled_mob = null
|
||||||
|
return
|
||||||
|
seed.do_thorns(buckled_mob,src)
|
||||||
|
|
||||||
|
var/failed_growth
|
||||||
// Count our neighbors and possible locations for spreading.
|
// Count our neighbors and possible locations for spreading.
|
||||||
var/list/possible_locs = list()
|
var/list/possible_locs = list()
|
||||||
var/count = 0
|
var/plant_count = 0
|
||||||
for(var/turf/simulated/floor/floor in view(1,src))
|
for(var/turf/simulated/floor/floor in view(1,src))
|
||||||
if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density)
|
if((locate(/obj/effect/dead_plant) in floor.contents) || !floor.Enter(src) || floor.density)
|
||||||
continue
|
continue
|
||||||
if(locate(/obj/effect/plant) in floor.contents)
|
if(locate(/obj/effect/plant) in floor.contents)
|
||||||
count++
|
plant_count++
|
||||||
continue
|
continue
|
||||||
possible_locs |= floor
|
possible_locs |= floor
|
||||||
|
|
||||||
//Entirely surrounded, try to spawn an actual plant.
|
if(health == max_health && plant_count >= 4 && !plant)
|
||||||
if(count>=8)
|
plant = new(T,seed)
|
||||||
if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in T.contents))
|
plant.age = seed.get_trait(TRAIT_MATURATION)-1
|
||||||
var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/new_plant = new(T,seed)
|
plant.update_icon()
|
||||||
new_plant.age = seed.get_trait(TRAIT_MATURATION)-1
|
if(growth_type==0) //Vines do not become invisible.
|
||||||
new_plant.update_icon()
|
invisibility = INVISIBILITY_MAXIMUM
|
||||||
if(growth_type==0) //Vines do not become invisible.
|
else
|
||||||
invisibility = INVISIBILITY_MAXIMUM
|
plant.layer = layer + 0.1
|
||||||
else
|
|
||||||
new_plant.layer = 4.1
|
|
||||||
|
|
||||||
if(prob(spread_chance))
|
if(prob(spread_chance))
|
||||||
for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++)
|
for(var/i=1,i<=seed.get_trait(TRAIT_YIELD),i++)
|
||||||
if(!possible_locs.len)
|
if(!possible_locs.len)
|
||||||
hibernating = 1
|
failed_growth = 1
|
||||||
world << "[src] at [x],[y] is hibernating"
|
|
||||||
break
|
break
|
||||||
if(prob(spread_into_adjacent))
|
if(prob(spread_into_adjacent))
|
||||||
var/turf/target_turf = pick(possible_locs)
|
var/turf/target_turf = pick(possible_locs)
|
||||||
@@ -53,11 +63,14 @@
|
|||||||
child.parent = get_root()
|
child.parent = get_root()
|
||||||
child.parent.children |= child
|
child.parent.children |= child
|
||||||
|
|
||||||
|
if(health != max_health || !failed_growth || (plant_count > 4 && !plant))
|
||||||
|
plant_controller.add_plant(src)
|
||||||
|
|
||||||
/obj/effect/plant/proc/die_off(var/no_remains, var/no_del)
|
/obj/effect/plant/proc/die_off(var/no_remains, var/no_del)
|
||||||
// Remove ourselves from our parent.
|
// Remove ourselves from our parent.
|
||||||
if(parent && parent.children)
|
if(parent && parent.children)
|
||||||
parent.children -= src
|
parent.children -= src
|
||||||
// Kill off any of our children (and add an added bonus, other plants in this area)
|
// Kill off any of our children (and as an added bonus, other plants in this area)
|
||||||
for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src))
|
for(var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant in get_turf(src))
|
||||||
plant.dead = 1
|
plant.dead = 1
|
||||||
plant.update_icon()
|
plant.update_icon()
|
||||||
@@ -66,7 +79,8 @@
|
|||||||
for(var/obj/effect/plant/child in children)
|
for(var/obj/effect/plant/child in children)
|
||||||
child.die_off()
|
child.die_off()
|
||||||
for(var/obj/effect/plant/neighbor in view(1,src))
|
for(var/obj/effect/plant/neighbor in view(1,src))
|
||||||
neighbor.hibernating = 0
|
plant_controller.add_plant(neighbor)
|
||||||
|
|
||||||
if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src)))
|
if(!no_remains && !(locate(/obj/effect/dead_plant) in get_turf(src)))
|
||||||
var/obj/effect/dead_plant/plant_remains = new(get_turf(src))
|
var/obj/effect/dead_plant/plant_remains = new(get_turf(src))
|
||||||
plant_remains.icon = src.icon
|
plant_remains.icon = src.icon
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
/obj/effect/plant/HasProximity(var/atom/movable/AM)
|
/obj/effect/plant/HasProximity(var/atom/movable/AM)
|
||||||
|
|
||||||
hibernating = 0
|
plant_controller.add_plant(src)
|
||||||
|
|
||||||
if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2)
|
if(!is_mature() || seed.get_trait(TRAIT_SPREAD) != 2)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -9,16 +8,15 @@
|
|||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!buckled_mob && !M.buckled && !M.anchored && prob(round(seed.get_trait(TRAIT_POTENCY)/2)))
|
if(!buckled_mob && !M.buckled && !M.anchored && (M.small || prob(round(seed.get_trait(TRAIT_POTENCY)/2))))
|
||||||
entangle(M)
|
entangle(M)
|
||||||
|
|
||||||
/obj/effect/plant/attack_hand(mob/user as mob)
|
/obj/effect/plant/attack_hand(mob/user as mob)
|
||||||
hibernating = 0
|
plant_controller.add_plant(src)
|
||||||
manual_unbuckle(user)
|
manual_unbuckle(user)
|
||||||
|
|
||||||
/obj/effect/plant/proc/trodden_on(var/mob/living/victim)
|
/obj/effect/plant/proc/trodden_on(var/mob/living/victim)
|
||||||
hibernating = 0
|
plant_controller.add_plant(src)
|
||||||
world << "Blah."
|
|
||||||
if(!is_mature())
|
if(!is_mature())
|
||||||
return
|
return
|
||||||
var/mob/living/carbon/human/H = victim
|
var/mob/living/carbon/human/H = victim
|
||||||
|
|||||||
@@ -299,7 +299,7 @@
|
|||||||
|
|
||||||
//Remove the seed if something is already planted.
|
//Remove the seed if something is already planted.
|
||||||
if(seed) seed = null
|
if(seed) seed = null
|
||||||
seed = seed_types[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))]
|
seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))]
|
||||||
if(!seed) return //Weed does not exist, someone fucked up.
|
if(!seed) return //Weed does not exist, someone fucked up.
|
||||||
|
|
||||||
dead = 0
|
dead = 0
|
||||||
@@ -329,7 +329,7 @@
|
|||||||
// We need to make sure we're not modifying one of the global seed datums.
|
// We need to make sure we're not modifying one of the global seed datums.
|
||||||
// If it's not in the global list, then no products of the line have been
|
// If it's not in the global list, then no products of the line have been
|
||||||
// harvested yet and it's safe to assume it's restricted to this tray.
|
// harvested yet and it's safe to assume it's restricted to this tray.
|
||||||
if(!isnull(seed_types[seed.name]))
|
if(!isnull(plant_controller.seeds[seed.name]))
|
||||||
seed = seed.diverge()
|
seed = seed.diverge()
|
||||||
seed.mutate(severity,get_turf(src))
|
seed.mutate(severity,get_turf(src))
|
||||||
|
|
||||||
@@ -370,8 +370,8 @@
|
|||||||
|
|
||||||
var/previous_plant = seed.display_name
|
var/previous_plant = seed.display_name
|
||||||
var/newseed = seed.get_mutant_variant()
|
var/newseed = seed.get_mutant_variant()
|
||||||
if(newseed in seed_types)
|
if(newseed in plant_controller.seeds)
|
||||||
seed = seed_types[newseed]
|
seed = plant_controller.seeds[newseed]
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -528,12 +528,10 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/hydroponics/attack_tk(mob/user as mob)
|
/obj/machinery/portable_atmospherics/hydroponics/attack_tk(mob/user as mob)
|
||||||
|
if(dead)
|
||||||
if(harvest)
|
|
||||||
harvest(user)
|
|
||||||
|
|
||||||
else if(dead)
|
|
||||||
remove_dead(user)
|
remove_dead(user)
|
||||||
|
else if(harvest)
|
||||||
|
harvest(user)
|
||||||
|
|
||||||
/obj/machinery/portable_atmospherics/hydroponics/attack_hand(mob/user as mob)
|
/obj/machinery/portable_atmospherics/hydroponics/attack_hand(mob/user as mob)
|
||||||
|
|
||||||
|
|||||||
@@ -53,13 +53,13 @@
|
|||||||
else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown))
|
else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||||
|
|
||||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target
|
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target
|
||||||
grown_seed = seed_types[G.plantname]
|
grown_seed = plant_controller.seeds[G.plantname]
|
||||||
grown_reagents = G.reagents
|
grown_reagents = G.reagents
|
||||||
|
|
||||||
else if(istype(target,/obj/item/weapon/grown))
|
else if(istype(target,/obj/item/weapon/grown))
|
||||||
|
|
||||||
var/obj/item/weapon/grown/G = target
|
var/obj/item/weapon/grown/G = target
|
||||||
grown_seed = seed_types[G.plantname]
|
grown_seed = plant_controller.seeds[G.plantname]
|
||||||
grown_reagents = G.reagents
|
grown_reagents = G.reagents
|
||||||
|
|
||||||
else if(istype(target,/obj/item/seeds))
|
else if(istype(target,/obj/item/seeds))
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
if(dead)
|
if(dead)
|
||||||
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead"
|
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead"
|
||||||
var/image/dead_overlay = plant_icon_cache["[ikey]"]
|
var/image/dead_overlay = plant_controller.plant_icon_cache["[ikey]"]
|
||||||
if(!dead_overlay)
|
if(!dead_overlay)
|
||||||
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
||||||
dead_overlay.color = DEAD_PLANT_COLOUR
|
dead_overlay.color = DEAD_PLANT_COLOUR
|
||||||
@@ -39,20 +39,20 @@
|
|||||||
overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages))
|
overlay_stage = max(1,round(seed.get_trait(TRAIT_MATURATION) / seed.growth_stages))
|
||||||
|
|
||||||
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]"
|
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]"
|
||||||
var/image/plant_overlay = plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
||||||
if(!plant_overlay)
|
if(!plant_overlay)
|
||||||
plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
||||||
plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR)
|
plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR)
|
||||||
plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
|
plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
|
||||||
overlays |= plant_overlay
|
overlays |= plant_overlay
|
||||||
|
|
||||||
if(harvest && overlay_stage == seed.growth_stages)
|
if(harvest && overlay_stage == seed.growth_stages)
|
||||||
ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
|
ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
|
||||||
var/image/harvest_overlay = plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
var/image/harvest_overlay = plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
||||||
if(!harvest_overlay)
|
if(!harvest_overlay)
|
||||||
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
|
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
|
||||||
harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
|
harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
|
||||||
plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
|
plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
|
||||||
overlays |= harvest_overlay
|
overlays |= harvest_overlay
|
||||||
|
|
||||||
//Draw the cover.
|
//Draw the cover.
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
H.death()
|
H.death()
|
||||||
|
|
||||||
//This is a terrible hack and I should be ashamed.
|
//This is a terrible hack and I should be ashamed.
|
||||||
var/datum/seed/diona = seed_types["diona"]
|
var/datum/seed/diona = plant_controller.seeds["diona"]
|
||||||
if(!diona)
|
if(!diona)
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ var/global/datum/global_init/init = new ()
|
|||||||
// Set up roundstart seed list. This is here because vendors were
|
// Set up roundstart seed list. This is here because vendors were
|
||||||
// bugging out and not populating with the correct packet names
|
// bugging out and not populating with the correct packet names
|
||||||
// due to this list not being instantiated.
|
// due to this list not being instantiated.
|
||||||
populate_seed_list()
|
plant_controller = new()
|
||||||
|
|
||||||
// Create autolathe recipes, as above.
|
// Create autolathe recipes, as above.
|
||||||
populate_lathe_recipes()
|
populate_lathe_recipes()
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Reference in New Issue
Block a user