Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -123,22 +123,22 @@
|
||||
..()
|
||||
|
||||
if(!queen_bee)
|
||||
user << "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>"
|
||||
to_chat(user, "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>")
|
||||
|
||||
var/half_bee = get_max_bees()*0.5
|
||||
if(half_bee && (bees.len >= half_bee))
|
||||
user << "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>"
|
||||
to_chat(user, "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>")
|
||||
|
||||
user << "<span class='notice'>[bee_resources]/100 resource supply.</span>"
|
||||
user << "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>"
|
||||
user << "<span class='notice'>[bee_resources*2]% towards a new bee.</span>"
|
||||
to_chat(user, "<span class='notice'>[bee_resources]/100 resource supply.</span>")
|
||||
to_chat(user, "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>")
|
||||
to_chat(user, "<span class='notice'>[bee_resources*2]% towards a new bee.</span>")
|
||||
|
||||
if(honeycombs.len)
|
||||
var/plural = honeycombs.len > 1
|
||||
user << "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>"
|
||||
to_chat(user, "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>")
|
||||
|
||||
if(honeycombs.len >= get_max_honeycomb())
|
||||
user << "<span class='warning'>there's no room for more honeycomb!</span>"
|
||||
to_chat(user, "<span class='warning'>there's no room for more honeycomb!</span>")
|
||||
|
||||
|
||||
/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
|
||||
@@ -150,7 +150,7 @@
|
||||
return
|
||||
honey_frames += HF
|
||||
else
|
||||
user << "<span class='warning'>There's no room for any more frames in the apiary!</span>"
|
||||
to_chat(user, "<span class='warning'>There's no room for any more frames in the apiary!</span>")
|
||||
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
if(default_unfasten_wrench(user, I, time = 20))
|
||||
@@ -158,7 +158,7 @@
|
||||
|
||||
if(istype(I, /obj/item/queen_bee))
|
||||
if(queen_bee)
|
||||
user << "<span class='warning'>This hive already has a queen!</span>"
|
||||
to_chat(user, "<span class='warning'>This hive already has a queen!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/queen_bee/qb = I
|
||||
@@ -181,10 +181,10 @@
|
||||
B.loc = get_turf(src)
|
||||
relocated++
|
||||
if(relocated)
|
||||
user << "<span class='warning'>This queen has a different reagent to some of the bees who live here, those bees will not return to this apiary!</span>"
|
||||
to_chat(user, "<span class='warning'>This queen has a different reagent to some of the bees who live here, those bees will not return to this apiary!</span>")
|
||||
|
||||
else
|
||||
user << "<span class='warning'>The queen bee disappeared! Disappearing bees have been in the news lately...</span>"
|
||||
to_chat(user, "<span class='warning'>The queen bee disappeared! Disappearing bees have been in the news lately...</span>")
|
||||
|
||||
qdel(qb)
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
switch(option)
|
||||
if("Remove a Honey Frame")
|
||||
if(!honey_frames.len)
|
||||
user << "<span class='warning'>There are no honey frames to remove!</span>"
|
||||
to_chat(user, "<span class='warning'>There are no honey frames to remove!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/honey_frame/HF = pick_n_take(honey_frames)
|
||||
@@ -233,7 +233,7 @@
|
||||
|
||||
if("Remove the Queen Bee")
|
||||
if(!queen_bee || queen_bee.loc != src)
|
||||
user << "<span class='warning'>There is no queen bee to remove!</span>"
|
||||
to_chat(user, "<span class='warning'>There is no queen bee to remove!</span>")
|
||||
return
|
||||
var/obj/item/queen_bee/QB = new()
|
||||
queen_bee.loc = QB
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
return ..()
|
||||
|
||||
if(processing)
|
||||
user << "<span class='warning'>The biogenerator is currently processing.</span>"
|
||||
to_chat(user, "<span class='warning'>The biogenerator is currently processing.</span>")
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "biogen-empty-o", "biogen-empty", O))
|
||||
@@ -106,17 +106,17 @@
|
||||
. = 1 //no afterattack
|
||||
if(!panel_open)
|
||||
if(beaker)
|
||||
user << "<span class='warning'>A container is already loaded into the machine.</span>"
|
||||
to_chat(user, "<span class='warning'>A container is already loaded into the machine.</span>")
|
||||
else
|
||||
if(!user.drop_item())
|
||||
return
|
||||
O.loc = src
|
||||
beaker = O
|
||||
user << "<span class='notice'>You add the container to the machine.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the container to the machine.</span>")
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
else
|
||||
user << "<span class='warning'>Close the maintenance panel first.</span>"
|
||||
to_chat(user, "<span class='warning'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/weapon/storage/bag/plants))
|
||||
@@ -125,7 +125,7 @@
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
|
||||
i++
|
||||
if(i >= max_items)
|
||||
user << "<span class='warning'>The biogenerator is already full! Activate it.</span>"
|
||||
to_chat(user, "<span class='warning'>The biogenerator is already full! Activate it.</span>")
|
||||
else
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents)
|
||||
if(i >= max_items)
|
||||
@@ -133,11 +133,11 @@
|
||||
PB.remove_from_storage(G, src)
|
||||
i++
|
||||
if(i<max_items)
|
||||
user << "<span class='info'>You empty the plant bag into the biogenerator.</span>"
|
||||
to_chat(user, "<span class='info'>You empty the plant bag into the biogenerator.</span>")
|
||||
else if(PB.contents.len == 0)
|
||||
user << "<span class='info'>You empty the plant bag into the biogenerator, filling it to its capacity.</span>"
|
||||
to_chat(user, "<span class='info'>You empty the plant bag into the biogenerator, filling it to its capacity.</span>")
|
||||
else
|
||||
user << "<span class='info'>You fill the biogenerator to its capacity.</span>"
|
||||
to_chat(user, "<span class='info'>You fill the biogenerator to its capacity.</span>")
|
||||
return 1 //no afterattack
|
||||
|
||||
else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
@@ -145,10 +145,10 @@
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
|
||||
i++
|
||||
if(i >= max_items)
|
||||
user << "<span class='warning'>The biogenerator is full! Activate it.</span>"
|
||||
to_chat(user, "<span class='warning'>The biogenerator is full! Activate it.</span>")
|
||||
else
|
||||
if(user.transferItemToLoc(O, src))
|
||||
user << "<span class='info'>You put [O.name] in [src.name]</span>"
|
||||
to_chat(user, "<span class='info'>You put [O.name] in [src.name]</span>")
|
||||
return 1 //no afterattack
|
||||
else if (istype(O, /obj/item/weapon/disk/design_disk))
|
||||
user.visible_message("[user] begins to load \the [O] in \the [src]...",
|
||||
@@ -163,7 +163,7 @@
|
||||
processing = 0
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warning'>You cannot put this in [src.name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot put this in [src.name]!</span>")
|
||||
|
||||
/obj/machinery/biogenerator/interact(mob/user)
|
||||
if(stat & BROKEN || panel_open)
|
||||
@@ -227,7 +227,7 @@
|
||||
if (src.stat != 0) //NOPOWER etc
|
||||
return
|
||||
if(processing)
|
||||
usr << "<span class='warning'>The biogenerator is in the process of working.</span>"
|
||||
to_chat(usr, "<span class='warning'>The biogenerator is in the process of working.</span>")
|
||||
return
|
||||
var/S = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
|
||||
var/datum/plant_gene/target
|
||||
var/operation = ""
|
||||
var/rating = 0
|
||||
var/max_extract_pot = 50
|
||||
// The cap on potency gene extraction.
|
||||
// This number is for T1, each upgraded part adds 5% for a tech level above T1.
|
||||
// At T4, it reaches 95%.
|
||||
var/max_potency = 50 // See RefreshParts() for how these work
|
||||
var/max_yield = 2
|
||||
var/min_production = 12
|
||||
var/max_endurance = 10 // IMPT: ALSO AFFECTS LIFESPAN
|
||||
var/max_wchance = 0
|
||||
var/max_wrate = 0
|
||||
|
||||
/obj/machinery/plantgenes/New()
|
||||
..()
|
||||
@@ -36,15 +37,36 @@
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
/obj/machinery/plantgenes/RefreshParts()
|
||||
rating = 0
|
||||
for(var/I in component_parts)
|
||||
if(istype(I, /obj/item/weapon/stock_parts))
|
||||
var/obj/item/weapon/stock_parts/S = I
|
||||
rating += S.rating-1
|
||||
else if(istype(I, /obj/item/weapon/circuitboard/machine/plantgenes/vault))
|
||||
rating += 5 // Having original alien board is +25%
|
||||
max_extract_pot = initial(max_extract_pot) + rating*5
|
||||
/obj/machinery/plantgenes/RefreshParts() // Comments represent the max you can set per tier, respectively. seeds.dm [219] clamps these for us but we don't want to mislead the viewer.
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
if(M.rating > 3)
|
||||
max_potency = 95
|
||||
else
|
||||
max_potency = initial(max_potency) + (M.rating**3) // 53,59,77,95 Clamps at 100
|
||||
|
||||
max_yield = initial(max_yield) + (M.rating*2) // 4,6,8,10 Clamps at 10
|
||||
|
||||
for(var/obj/item/weapon/stock_parts/scanning_module/SM in component_parts)
|
||||
if(SM.rating > 3) //If you create t5 parts I'm a step ahead mwahahaha!
|
||||
min_production = 1
|
||||
else
|
||||
min_production = 12 - (SM.rating * 3) //9,6,3,1. Requires if to avoid going below clamp [1]
|
||||
|
||||
max_endurance = initial(max_endurance) + (SM.rating * 25) // 35,60,85,100 Clamps at 10min 100max
|
||||
|
||||
for(var/obj/item/weapon/stock_parts/micro_laser/ML in component_parts)
|
||||
var/wratemod = ML.rating*2.5
|
||||
max_wrate = Floor(wratemod,1) // 2,5,7,10 Clamps at 10
|
||||
max_wchance = ML.rating*16+3 // 19,35,51,67 Clamps at 67
|
||||
for(var/obj/item/weapon/circuitboard/machine/plantgenes/vaultcheck in component_parts)
|
||||
if(istype(vaultcheck, /obj/item/weapon/circuitboard/machine/plantgenes/vault)) // DUMB BOTANY TUTS
|
||||
max_potency = 100
|
||||
max_yield = 10
|
||||
min_production = 1
|
||||
max_endurance = 100
|
||||
max_wchance = 67
|
||||
max_wrate = 10
|
||||
|
||||
|
||||
/obj/machinery/plantgenes/update_icon()
|
||||
..()
|
||||
@@ -71,23 +93,23 @@
|
||||
|
||||
if(istype(I, /obj/item/seeds))
|
||||
if(seed)
|
||||
user << "<span class='warning'>A sample is already loaded into the machine!</span>"
|
||||
to_chat(user, "<span class='warning'>A sample is already loaded into the machine!</span>")
|
||||
else
|
||||
if(!user.drop_item())
|
||||
return
|
||||
insert_seed(I)
|
||||
user << "<span class='notice'>You add [I] to the machine.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [I] to the machine.</span>")
|
||||
interact(user)
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/disk/plantgene))
|
||||
if(disk)
|
||||
user << "<span class='warning'>A data disk is already loaded into the machine!</span>"
|
||||
to_chat(user, "<span class='warning'>A data disk is already loaded into the machine!</span>")
|
||||
else
|
||||
if(!user.drop_item())
|
||||
return
|
||||
disk = I
|
||||
disk.loc = src
|
||||
user << "<span class='notice'>You add [I] to the machine.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [I] to the machine.</span>")
|
||||
interact(user)
|
||||
else
|
||||
..()
|
||||
@@ -130,11 +152,37 @@
|
||||
if("extract")
|
||||
dat += "<span class='highlight'>[target.get_name()]</span> gene from \the <span class='highlight'>[seed]</span>?<br>"
|
||||
dat += "<span class='bad'>The sample will be destroyed in process!</span>"
|
||||
if(istype(target, /datum/plant_gene/core/potency))
|
||||
if(istype(target, /datum/plant_gene/core))
|
||||
var/datum/plant_gene/core/gene = target
|
||||
if(gene.value > max_extract_pot)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to [max_extract_pot] potency. "
|
||||
dat += "Target gene will be degraded to [max_extract_pot] potency on extraction."
|
||||
if(istype(target, /datum/plant_gene/core/potency))
|
||||
if(gene.value > max_potency)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_potency]</span> potency. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_potency]</span> potency on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/lifespan))
|
||||
if(gene.value > max_endurance)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_endurance]</span> lifespan. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_endurance]</span> Lifespan on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/endurance))
|
||||
if(gene.value > max_endurance)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_endurance]</span> endurance. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_endurance]</span> endurance on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/yield))
|
||||
if(gene.value > max_yield)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_yield]</span> yield. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_yield]</span> yield on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/production))
|
||||
if(gene.value < min_production)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[min_production]</span> production. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[min_production]</span> production on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/weed_rate))
|
||||
if(gene.value > max_wrate)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_wrate]</span> weed rate. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_wrate]</span> weed rate on extraction."
|
||||
else if(istype(target, /datum/plant_gene/core/weed_chance))
|
||||
if(gene.value > max_wchance)
|
||||
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_wchance]</span> weed chance. "
|
||||
dat += "Target gene will be degraded to <span class='highlight'>[max_wchance]</span> weed chance on extraction."
|
||||
|
||||
if("replace")
|
||||
dat += "<span class='highlight'>[target.get_name()]</span> gene with <span class='highlight'>[disk.gene.get_name()]</span>?<br>"
|
||||
if("insert")
|
||||
@@ -239,7 +287,7 @@
|
||||
if(!usr.drop_item())
|
||||
return
|
||||
insert_seed(I)
|
||||
usr << "<span class='notice'>You add [I] to the machine.</span>"
|
||||
to_chat(usr, "<span class='notice'>You add [I] to the machine.</span>")
|
||||
update_icon()
|
||||
else if(href_list["eject_disk"] && !operation)
|
||||
if (disk)
|
||||
@@ -254,7 +302,7 @@
|
||||
return
|
||||
disk = I
|
||||
disk.loc = src
|
||||
usr << "<span class='notice'>You add [I] to the machine.</span>"
|
||||
to_chat(usr, "<span class='notice'>You add [I] to the machine.</span>")
|
||||
else if(href_list["op"] == "insert" && disk && disk.gene && seed)
|
||||
if(!operation) // Wait for confirmation
|
||||
operation = "insert"
|
||||
@@ -289,9 +337,22 @@
|
||||
if("extract")
|
||||
if(disk && !disk.read_only)
|
||||
disk.gene = G
|
||||
if(istype(G, /datum/plant_gene/core/potency))
|
||||
if(istype(G, /datum/plant_gene/core))
|
||||
var/datum/plant_gene/core/gene = G
|
||||
gene.value = min(gene.value, max_extract_pot)
|
||||
if(istype(G, /datum/plant_gene/core/potency))
|
||||
gene.value = min(gene.value, max_potency)
|
||||
else if(istype(G, /datum/plant_gene/core/lifespan))
|
||||
gene.value = min(gene.value, max_endurance) //INTENDED
|
||||
else if(istype(G, /datum/plant_gene/core/endurance))
|
||||
gene.value = min(gene.value, max_endurance)
|
||||
else if(istype(G, /datum/plant_gene/core/production))
|
||||
gene.value = max(gene.value, min_production)
|
||||
else if(istype(G, /datum/plant_gene/core/yield))
|
||||
gene.value = min(gene.value, max_yield)
|
||||
else if(istype(G, /datum/plant_gene/core/weed_rate))
|
||||
gene.value = min(gene.value, max_wrate)
|
||||
else if(istype(G, /datum/plant_gene/core/weed_chance))
|
||||
gene.value = min(gene.value, max_wchance)
|
||||
disk.update_name()
|
||||
qdel(seed)
|
||||
seed = null
|
||||
@@ -310,6 +371,7 @@
|
||||
seed.reagents_from_genes()
|
||||
repaint_seed()
|
||||
|
||||
|
||||
update_genes()
|
||||
operation = ""
|
||||
target = null
|
||||
@@ -347,6 +409,7 @@
|
||||
|
||||
for(var/datum/plant_gene/reagent/G in seed.genes)
|
||||
reagent_genes += G
|
||||
|
||||
for(var/datum/plant_gene/trait/G in seed.genes)
|
||||
trait_genes += G
|
||||
|
||||
@@ -383,10 +446,11 @@
|
||||
/obj/item/weapon/disk/plantgene
|
||||
name = "plant data disk"
|
||||
desc = "A disk for storing plant genetic data."
|
||||
icon_state = "datadisk2"
|
||||
icon_state = "datadisk_hydro"
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=10)
|
||||
var/datum/plant_gene/gene
|
||||
var/read_only = 0 //Well, it's still a floppy disk
|
||||
unique_rename = 1
|
||||
|
||||
/obj/item/weapon/disk/plantgene/New()
|
||||
..()
|
||||
@@ -394,29 +458,16 @@
|
||||
src.pixel_x = rand(-5, 5)
|
||||
src.pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = stripped_input(user, "What would you like the label to be?", name, null)
|
||||
if(user.get_active_held_item() != W)
|
||||
return
|
||||
if(!in_range(src, user) && loc != user)
|
||||
return
|
||||
if(t)
|
||||
name = "plant data disk - '[t]'"
|
||||
else
|
||||
name = "plant data disk"
|
||||
|
||||
/obj/item/weapon/disk/plantgene/proc/update_name()
|
||||
if(gene)
|
||||
name = "plant data disk - '[gene.get_name()]'"
|
||||
name = "[gene.get_name()] (Plant Data Disk)"
|
||||
else
|
||||
name = "plant data disk"
|
||||
|
||||
/obj/item/weapon/disk/plantgene/attack_self(mob/user)
|
||||
read_only = !read_only
|
||||
user << "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>"
|
||||
to_chat(user, "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>")
|
||||
|
||||
/obj/item/weapon/disk/plantgene/examine(mob/user)
|
||||
..()
|
||||
user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]."
|
||||
to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].")
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
if(seed)
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
if(T.examine_line)
|
||||
user << T.examine_line
|
||||
to_chat(user, T.examine_line)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
|
||||
..()
|
||||
@@ -72,7 +72,7 @@
|
||||
if(reag_txt)
|
||||
msg += reag_txt
|
||||
msg += "<br><span class='info'>*---------*</span>"
|
||||
user << msg
|
||||
to_chat(user, msg)
|
||||
else
|
||||
if(seed)
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
@@ -130,30 +130,6 @@
|
||||
..()
|
||||
|
||||
|
||||
// Glow gene procs
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G && ismob(loc))
|
||||
loc.AddLuminosity(-G.get_lum(seed))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user)
|
||||
..()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(G.get_lum(seed))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user)
|
||||
..()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G)
|
||||
user.AddLuminosity(-G.get_lum(seed))
|
||||
SetLuminosity(G.get_lum(seed))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/generate_trash(atom/location)
|
||||
if(trash && ispath(trash, /obj/item/weapon/grown))
|
||||
. = new trash(location, seed)
|
||||
@@ -166,7 +142,6 @@
|
||||
var/obj/item/T
|
||||
if(trash)
|
||||
T = generate_trash()
|
||||
qdel(src)
|
||||
if(trash)
|
||||
user.put_in_hands(T)
|
||||
user << "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>"
|
||||
qdel(src)
|
||||
user.putItemFromInventoryInHandIfPossible(T, user.active_hand_index, TRUE)
|
||||
to_chat(user, "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>")
|
||||
|
||||
@@ -72,5 +72,5 @@
|
||||
icon_state = "ambrosia_gaia"
|
||||
filling_color = rgb(255, 175, 0)
|
||||
origin_tech = "biotech=6;materials=5"
|
||||
luminosity = 3
|
||||
light_range = 3
|
||||
seed = /obj/item/seeds/ambrosia/gaia
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
return
|
||||
held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(prob(10))
|
||||
held_mob << "<span class='warning'>Your hand holding [src] burns!</span>"
|
||||
to_chat(held_mob, "<span class='warning'>Your hand holding [src] burns!</span>")
|
||||
else
|
||||
held_mob = null
|
||||
..()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W, mob/user, params)
|
||||
if(W.is_sharp())
|
||||
user << "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>"
|
||||
to_chat(user, "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>")
|
||||
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
|
||||
qdel(src)
|
||||
else
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
/obj/item/weapon/grown/snapcorn/attack_self(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>You pick a snap pop from the cob.</span>"
|
||||
to_chat(user, "<span class='notice'>You pick a snap pop from the cob.</span>")
|
||||
var/obj/item/toy/snappop/S = new /obj/item/toy/snappop(user.loc)
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(S)
|
||||
|
||||
@@ -122,8 +122,8 @@
|
||||
throw_range = 3
|
||||
|
||||
/obj/item/weapon/grown/sunflower/attack(mob/M, mob/user)
|
||||
M << "<font color='green'><b> [user] smacks you with a sunflower!</font><font color='yellow'><b>FLOWER POWER<b></font>"
|
||||
user << "<font color='green'>Your sunflower's </font><font color='yellow'><b>FLOWER POWER</b></font><font color='green'>strikes [M]</font>"
|
||||
to_chat(M, "<font color='green'><b> [user] smacks you with a sunflower!</font><font color='yellow'><b>FLOWER POWER<b></font>")
|
||||
to_chat(user, "<font color='green'>Your sunflower's </font><font color='yellow'><b>FLOWER POWER</b></font><font color='green'>strikes [M]</font>")
|
||||
|
||||
// Moonflower
|
||||
/obj/item/seeds/sunflower/moonflower
|
||||
@@ -180,7 +180,7 @@
|
||||
if(!..())
|
||||
return
|
||||
if(isliving(M))
|
||||
M << "<span class='danger'>You are lit on fire from the intense heat of the [name]!</span>"
|
||||
to_chat(M, "<span class='danger'>You are lit on fire from the intense heat of the [name]!</span>")
|
||||
M.adjust_fire_stacks(seed.potency / 20)
|
||||
if(M.IgniteMob())
|
||||
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
|
||||
@@ -191,11 +191,11 @@
|
||||
if(force > 0)
|
||||
force -= rand(1, (force / 3) + 1)
|
||||
else
|
||||
usr << "<span class='warning'>All the petals have fallen off the [name] from violent whacking!</span>"
|
||||
to_chat(usr, "<span class='warning'>All the petals have fallen off the [name] from violent whacking!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user)
|
||||
..()
|
||||
if(!user.gloves)
|
||||
user << "<span class='danger'>The [name] burns your bare hand!</span>"
|
||||
to_chat(user, "<span class='danger'>The [name] burns your bare hand!</span>")
|
||||
user.adjustFireLoss(rand(1, 5))
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/tile_coefficient = 0.02 // 1/50
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user)
|
||||
user << "<span class='notice'>You prepare the astroturf.</span>"
|
||||
to_chat(user, "<span class='notice'>You prepare the astroturf.</span>")
|
||||
var/grassAmt = 1 + round(seed.potency * tile_coefficient) // The grass we're holding
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor
|
||||
if(G.type != type)
|
||||
|
||||
@@ -29,15 +29,21 @@
|
||||
/obj/item/seeds/kudzu/proc/plant(mob/user)
|
||||
if(isspaceturf(user.loc))
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Kudzu planted by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
|
||||
investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu")
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You need more space to plant [src].</span>")
|
||||
return FALSE
|
||||
if(locate(/obj/structure/spacevine) in user.loc)
|
||||
to_chat(user, "<span class='warning'>There is too much kudzu here to plant [src].</span>")
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You plant [src].</span>")
|
||||
message_admins("Kudzu planted by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(user)]",0,1)
|
||||
investigate_log("was planted by [key_name(user)] at [COORD(user)]","botany")
|
||||
new /obj/effect/spacevine_controller(user.loc, mutations, potency, production)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/seeds/kudzu/attack_self(mob/user)
|
||||
plant(user)
|
||||
user << "<span class='notice'>You plant the kudzu. You monster.</span>"
|
||||
to_chat(user, "<span class='notice'>You plant the kudzu. You monster.</span>")
|
||||
|
||||
/obj/item/seeds/kudzu/get_analyzer_text()
|
||||
var/text = ..()
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
M.move_to_delay -= round(seed.production / 50)
|
||||
M.health = M.maxHealth
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You plant the walking mushroom.</span>"
|
||||
to_chat(user, "<span class='notice'>You plant the walking mushroom.</span>")
|
||||
|
||||
|
||||
// Chanterelle
|
||||
@@ -220,7 +220,7 @@
|
||||
rarity = 20
|
||||
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
|
||||
mutatelist = list(/obj/item/seeds/glowshroom/glowcap)
|
||||
mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom)
|
||||
reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom
|
||||
@@ -234,15 +234,25 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
|
||||
if(isspaceturf(user.loc))
|
||||
return
|
||||
var/obj/structure/glowshroom/planted = new effect_path(user.loc)
|
||||
planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
||||
planted.obj_integrity = seed.endurance
|
||||
planted.max_integrity = seed.endurance
|
||||
planted.yield = seed.yield
|
||||
planted.potency = seed.potency
|
||||
user << "<span class='notice'>You plant [src].</span>"
|
||||
return FALSE
|
||||
if(!isturf(user.loc))
|
||||
to_chat(user, "<span class='warning'>You need more space to plant [src].</span>")
|
||||
return FALSE
|
||||
var/count = 0
|
||||
var/maxcount = 1
|
||||
for(var/tempdir in cardinal)
|
||||
var/turf/closed/wall = get_step(user.loc, tempdir)
|
||||
if(istype(wall))
|
||||
maxcount++
|
||||
for(var/obj/structure/glowshroom/G in user.loc)
|
||||
count++
|
||||
if(count >= maxcount)
|
||||
to_chat(user, "<span class='warning'>There are too many shrooms here to plant [src].</span>")
|
||||
return FALSE
|
||||
new effect_path(user.loc, seed)
|
||||
to_chat(user, "<span class='notice'>You plant [src].</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
|
||||
// Glowcap
|
||||
@@ -255,7 +265,7 @@
|
||||
icon_dead = "glowshroom-dead"
|
||||
plantname = "Glowcaps"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
|
||||
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
mutatelist = list()
|
||||
reagents_add = list("teslium" = 0.1, "nutriment" = 0.04)
|
||||
rarity = 30
|
||||
@@ -263,8 +273,39 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
|
||||
seed = /obj/item/seeds/glowshroom/glowcap
|
||||
name = "glowcap cluster"
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but aren't bioluminescent. They're warm to the touch..."
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..."
|
||||
icon_state = "glowcap"
|
||||
filling_color = "#00FA9A"
|
||||
effect_path = /obj/structure/glowshroom/glowcap
|
||||
origin_tech = "biotech=4;powerstorage=6;plasmatech=4"
|
||||
|
||||
|
||||
//Shadowshroom
|
||||
/obj/item/seeds/glowshroom/shadowshroom
|
||||
name = "pack of shadowshroom mycelium"
|
||||
desc = "This mycelium will grow into something shadowy."
|
||||
icon_state = "mycelium-shadowshroom"
|
||||
species = "shadowshroom"
|
||||
icon_grow = "shadowshroom-grow"
|
||||
icon_dead = "shadowshroom-dead"
|
||||
plantname = "Shadowshrooms"
|
||||
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
|
||||
genes = list(/datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
|
||||
mutatelist = list()
|
||||
reagents_add = list("radium" = 0.2, "nutriment" = 0.04)
|
||||
rarity = 30
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
|
||||
seed = /obj/item/seeds/glowshroom/shadowshroom
|
||||
name = "shadowshroom cluster"
|
||||
desc = "<I>Mycena Umbra</I>: This species of mushroom emits shadow instead of light."
|
||||
icon_state = "shadowshroom"
|
||||
effect_path = /obj/structure/glowshroom/shadowshroom
|
||||
origin_tech = "biotech=4;plasmatech=4;magnets=4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
message_admins("Shadowshroom planted by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(user)]",0,1)
|
||||
investigate_log("was planted by [key_name(user)] at [COORD(user)]", "botany")
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
if(affecting)
|
||||
if(affecting.receive_damage(0, force))
|
||||
C.update_damage_overlays()
|
||||
C << "<span class='userdanger'>The nettle burns your bare hand!</span>"
|
||||
to_chat(C, "<span class='userdanger'>The nettle burns your bare hand!</span>")
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity)
|
||||
@@ -67,7 +67,7 @@
|
||||
if(force > 0)
|
||||
force -= rand(1, (force / 3) + 1) // When you whack someone with it, leaves fall off
|
||||
else
|
||||
usr << "All the leaves have fallen off the nettle from violent whacking."
|
||||
to_chat(usr, "All the leaves have fallen off the nettle from violent whacking.")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grown/nettle/basic
|
||||
@@ -94,13 +94,13 @@
|
||||
if(..())
|
||||
if(prob(50))
|
||||
user.Paralyse(5)
|
||||
user << "<span class='userdanger'>You are stunned by the Deathnettle when you try picking it up!</span>"
|
||||
to_chat(user, "<span class='userdanger'>You are stunned by the Deathnettle when you try picking it up!</span>")
|
||||
|
||||
/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M, mob/user)
|
||||
if(!..())
|
||||
return
|
||||
if(isliving(M))
|
||||
M << "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>"
|
||||
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
|
||||
add_logs(user, M, "attacked", src)
|
||||
|
||||
M.adjust_blurriness(force/7)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(W.is_sharp())
|
||||
user << "<span class='notice'>You cut the potato into wedges with [W].</span>"
|
||||
to_chat(user, "<span class='notice'>You cut the potato into wedges with [W].</span>")
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges/Wedges = new /obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges
|
||||
remove_item_from_storage(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
features = bloodSample.data["features"]
|
||||
factions = bloodSample.data["factions"]
|
||||
W.reagents.clear_reagents()
|
||||
user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>"
|
||||
to_chat(user, "<span class='notice'>You inject the contents of the syringe into the seeds.</span>")
|
||||
contains_sample = 1
|
||||
else
|
||||
user << "<span class='warning'>The seeds reject the sample!</span>"
|
||||
to_chat(user, "<span class='warning'>The seeds reject the sample!</span>")
|
||||
else
|
||||
user << "<span class='warning'>The seeds already contain a genetic sample!</span>"
|
||||
to_chat(user, "<span class='warning'>The seeds already contain a genetic sample!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params)
|
||||
if(I.is_sharp())
|
||||
user << "<span class='notice'>You sharpen the carrot into a shiv with [I].</span>"
|
||||
to_chat(user, "<span class='notice'>You sharpen the carrot into a shiv with [I].</span>")
|
||||
var/obj/item/weapon/kitchen/knife/carrotshiv/Shiv = new /obj/item/weapon/kitchen/knife/carrotshiv
|
||||
remove_item_from_storage(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -119,14 +119,14 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone)
|
||||
if(awakening)
|
||||
user << "<span class='warning'>The tomato is twitching and shaking, preventing you from eating it.</span>"
|
||||
to_chat(user, "<span class='warning'>The tomato is twitching and shaking, preventing you from eating it.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user)
|
||||
if(awakening || isspaceturf(user.loc))
|
||||
return
|
||||
user << "<span class='notice'>You begin to awaken the Killer Tomato...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to awaken the Killer Tomato...</span>")
|
||||
awakening = 1
|
||||
|
||||
spawn(30)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount)
|
||||
ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created.
|
||||
if(plank.amount > old_plank_amount)
|
||||
user << "<span class='notice'>You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].</span>")
|
||||
qdel(src)
|
||||
|
||||
if(is_type_in_list(W,accepted))
|
||||
@@ -77,7 +77,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
usr << "<span class ='warning'>You must dry this first!</span>"
|
||||
to_chat(usr, "<span class ='warning'>You must dry this first!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
R.use(1)
|
||||
can_buckle = 1
|
||||
buckle_requires_restraints = 1
|
||||
user << "<span class='italics'>You add a rod to [src]."
|
||||
to_chat(user, "<span class='italics'>You add a rod to [src].")
|
||||
var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16)
|
||||
underlays += U
|
||||
if(W.is_hot())
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
/obj/structure/bonfire/attack_hand(mob/user)
|
||||
if(burning)
|
||||
user << "<span class='warning'>You need to extinguish [src] before removing the logs!"
|
||||
to_chat(user, "<span class='warning'>You need to extinguish [src] before removing the logs!")
|
||||
return
|
||||
if(!has_buckled_mobs() && do_after(user, 50, target = src))
|
||||
for(var/I in 1 to 5)
|
||||
@@ -149,7 +149,7 @@
|
||||
if(!burning && CheckOxygen())
|
||||
icon_state = "bonfire_on_fire"
|
||||
burning = 1
|
||||
SetLuminosity(6)
|
||||
set_light(6)
|
||||
Burn()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
if(burning)
|
||||
icon_state = "bonfire"
|
||||
burning = 0
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/bonfire/buckle_mob(mob/living/M, force = 0)
|
||||
@@ -193,4 +193,4 @@
|
||||
|
||||
/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force=0)
|
||||
if(..())
|
||||
buckled_mob.pixel_y -= 13
|
||||
buckled_mob.pixel_y -= 13
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
if(seed)
|
||||
msg += seed.get_analyzer_text()
|
||||
msg += "</span>"
|
||||
usr << msg
|
||||
to_chat(usr, msg)
|
||||
return
|
||||
|
||||
/obj/item/weapon/grown/proc/add_juice()
|
||||
@@ -54,36 +54,11 @@
|
||||
T.on_cross(src, AM)
|
||||
..()
|
||||
|
||||
|
||||
// Glow gene procs
|
||||
/obj/item/weapon/grown/Destroy()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G && ismob(loc))
|
||||
loc.AddLuminosity(-G.get_lum(seed))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grown/throw_impact(atom/hit_atom)
|
||||
if(!..()) //was it caught by a mob?
|
||||
if(seed)
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_throw_impact(src, hit_atom)
|
||||
|
||||
/obj/item/weapon/grown/pickup(mob/user)
|
||||
..()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G)
|
||||
SetLuminosity(0)
|
||||
user.AddLuminosity(G.get_lum(seed))
|
||||
|
||||
/obj/item/weapon/grown/dropped(mob/user)
|
||||
..()
|
||||
if(seed)
|
||||
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
|
||||
if(G)
|
||||
user.AddLuminosity(-G.get_lum(seed))
|
||||
SetLuminosity(G.get_lum(seed))
|
||||
|
||||
/obj/item/weapon/grown/microwave_act(obj/machine/microwave/M)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(using_irrigation)
|
||||
user << "<span class='warning'>Disconnect the hoses first!</span>"
|
||||
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
|
||||
else if(default_deconstruction_crowbar(I, 1))
|
||||
return
|
||||
else
|
||||
@@ -151,12 +151,12 @@
|
||||
// Lack of light hurts non-mushrooms
|
||||
if(isturf(loc))
|
||||
var/turf/currentTurf = loc
|
||||
var/lightAmt = currentTurf.lighting_lumcount
|
||||
var/lightAmt = currentTurf.get_lumcount()
|
||||
if(myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
|
||||
if(lightAmt < 2)
|
||||
if(lightAmt < 0.2)
|
||||
adjustHealth(-1 / rating)
|
||||
else // Non-mushroom
|
||||
if(lightAmt < 4)
|
||||
if(lightAmt < 0.4)
|
||||
adjustHealth(-2 / rating)
|
||||
|
||||
//Water//////////////////////////////////////////////////////////////////
|
||||
@@ -260,7 +260,7 @@
|
||||
add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY)
|
||||
else
|
||||
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing"))
|
||||
SetLuminosity(3)
|
||||
set_light(3)
|
||||
|
||||
update_icon_hoses()
|
||||
|
||||
@@ -271,9 +271,9 @@
|
||||
if(!self_sustaining)
|
||||
if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow))
|
||||
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
|
||||
SetLuminosity(G.get_lum(myseed))
|
||||
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
|
||||
else
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
|
||||
return
|
||||
|
||||
@@ -317,27 +317,27 @@
|
||||
/obj/machinery/hydroponics/examine(user)
|
||||
..()
|
||||
if(myseed)
|
||||
user << "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>"
|
||||
to_chat(user, "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>")
|
||||
if (dead)
|
||||
user << "<span class='warning'>It's dead!</span>"
|
||||
to_chat(user, "<span class='warning'>It's dead!</span>")
|
||||
else if (harvest)
|
||||
user << "<span class='info'>It's ready to harvest.</span>"
|
||||
to_chat(user, "<span class='info'>It's ready to harvest.</span>")
|
||||
else if (plant_health <= (myseed.endurance / 2))
|
||||
user << "<span class='warning'>It looks unhealthy.</span>"
|
||||
to_chat(user, "<span class='warning'>It looks unhealthy.</span>")
|
||||
else
|
||||
user << "<span class='info'>[src] is empty.</span>"
|
||||
to_chat(user, "<span class='info'>[src] is empty.</span>")
|
||||
|
||||
if(!self_sustaining)
|
||||
user << "<span class='info'>Water: [waterlevel]/[maxwater]</span>"
|
||||
user << "<span class='info'>Nutrient: [nutrilevel]/[maxnutri]</span>"
|
||||
to_chat(user, "<span class='info'>Water: [waterlevel]/[maxwater]</span>")
|
||||
to_chat(user, "<span class='info'>Nutrient: [nutrilevel]/[maxnutri]</span>")
|
||||
else
|
||||
user << "<span class='info'>It doesn't require any water or nutrients.</span>"
|
||||
to_chat(user, "<span class='info'>It doesn't require any water or nutrients.</span>")
|
||||
|
||||
if(weedlevel >= 5)
|
||||
user << "<span class='warning'>[src] is filled with weeds!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is filled with weeds!</span>")
|
||||
if(pestlevel >= 5)
|
||||
user << "<span class='warning'>[src] is filled with tiny worms!</span>"
|
||||
user << "" // Empty line for readability.
|
||||
to_chat(user, "<span class='warning'>[src] is filled with tiny worms!</span>")
|
||||
to_chat(user, "" )
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
|
||||
@@ -429,7 +429,7 @@
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>The mutated weeds in [src] spawn some [myseed.plantname]!</span>")
|
||||
else
|
||||
usr << "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>"
|
||||
to_chat(usr, "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>")
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier
|
||||
@@ -449,7 +449,7 @@
|
||||
visible_message("<span class='warning'>The pests seem to behave oddly...</span>")
|
||||
spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, src, 3, FALSE)
|
||||
else
|
||||
user << "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>"
|
||||
to_chat(user, "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>")
|
||||
|
||||
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S, mob/user)
|
||||
if(myseed)
|
||||
@@ -460,7 +460,7 @@
|
||||
switch(rand(100))
|
||||
if(91 to 100)
|
||||
adjustHealth(-10)
|
||||
user << "<span class='warning'>The plant shrivels and burns.</span>"
|
||||
to_chat(user, "<span class='warning'>The plant shrivels and burns.</span>")
|
||||
if(81 to 90)
|
||||
mutatespecie()
|
||||
if(66 to 80)
|
||||
@@ -468,13 +468,13 @@
|
||||
if(41 to 65)
|
||||
mutate()
|
||||
if(21 to 41)
|
||||
user << "<span class='notice'>The plants don't seem to react...</span>"
|
||||
to_chat(user, "<span class='notice'>The plants don't seem to react...</span>")
|
||||
if(11 to 20)
|
||||
mutateweed()
|
||||
if(1 to 10)
|
||||
mutatepest(user)
|
||||
else
|
||||
user << "<span class='notice'>Nothing happens...</span>"
|
||||
to_chat(user, "<span class='notice'>Nothing happens...</span>")
|
||||
|
||||
// 2 or 1 units is enough to change the yield and other stats.// Can change the yield and other stats, but requires more than mutagen
|
||||
else if(S.has_reagent("mutagen", 2) || S.has_reagent("radium", 5) || S.has_reagent("uranium", 5))
|
||||
@@ -672,16 +672,16 @@
|
||||
if(1 to 32)
|
||||
mutatepest(user)
|
||||
else
|
||||
user << "<span class='warning'>Nothing happens...</span>"
|
||||
to_chat(user, "<span class='warning'>Nothing happens...</span>")
|
||||
|
||||
/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params)
|
||||
//Called when mob user "attacks" it with object O
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/gaia)) //Checked early on so it doesn't have to deal with composting checks
|
||||
if(self_sustaining)
|
||||
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
|
||||
to_chat(user, "<span class='warning'>This [name] is already self-sustaining!</span>")
|
||||
return
|
||||
if(myseed || weedlevel)
|
||||
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] needs to be clear of plants and weeds!</span>")
|
||||
return
|
||||
if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user)
|
||||
return
|
||||
@@ -690,10 +690,10 @@
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
if(self_sustaining)
|
||||
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
|
||||
to_chat(user, "<span class='warning'>This [name] is already self-sustaining!</span>")
|
||||
return
|
||||
if(myseed || weedlevel)
|
||||
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] needs to be clear of plants and weeds!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] gently pulls open the soil for [O] and places it inside.</span>", "<span class='notice'>You tenderly root [O] into [src].</span>")
|
||||
user.drop_item()
|
||||
@@ -708,11 +708,11 @@
|
||||
if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe))
|
||||
var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source
|
||||
if(syr.mode != 1)
|
||||
user << "<span class='warning'>You can't get any extract out of this plant.</span>" //That. Gives me an idea...
|
||||
to_chat(user, "<span class='warning'>You can't get any extract out of this plant.</span>" )
|
||||
return
|
||||
|
||||
if(!reagent_source.reagents.total_volume)
|
||||
user << "<span class='notice'>[reagent_source] is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>[reagent_source] is empty.</span>")
|
||||
return 1
|
||||
|
||||
var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc
|
||||
@@ -774,7 +774,7 @@
|
||||
investigate_log("had Kudzu planted in it by [user.ckey]([user]) at ([x],[y],[z])","kudzu")
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
user << "<span class='notice'>You plant [O].</span>"
|
||||
to_chat(user, "<span class='notice'>You plant [O].</span>")
|
||||
dead = 0
|
||||
myseed = O
|
||||
age = 1
|
||||
@@ -782,23 +782,23 @@
|
||||
lastcycle = world.time
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>[src] already has seeds in it!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] already has seeds in it!</span>")
|
||||
|
||||
else if(istype(O, /obj/item/device/plant_analyzer))
|
||||
if(myseed)
|
||||
user << "*** <B>[myseed.plantname]</B> ***" //Carn: now reports the plants growing, not the seeds.
|
||||
user << "- Plant Age: <span class='notice'>[age]</span>"
|
||||
to_chat(user, "*** <B>[myseed.plantname]</B> ***" )
|
||||
to_chat(user, "- Plant Age: <span class='notice'>[age]</span>")
|
||||
var/list/text_string = myseed.get_analyzer_text()
|
||||
if(text_string)
|
||||
user << text_string
|
||||
to_chat(user, text_string)
|
||||
else
|
||||
user << "<B>No plant found.</B>"
|
||||
user << "- Weed level: <span class='notice'>[weedlevel] / 10</span>"
|
||||
user << "- Pest level: <span class='notice'>[pestlevel] / 10</span>"
|
||||
user << "- Toxicity level: <span class='notice'>[toxic] / 100</span>"
|
||||
user << "- Water level: <span class='notice'>[waterlevel] / [maxwater]</span>"
|
||||
user << "- Nutrition level: <span class='notice'>[nutrilevel] / [maxnutri]</span>"
|
||||
user << ""
|
||||
to_chat(user, "<B>No plant found.</B>")
|
||||
to_chat(user, "- Weed level: <span class='notice'>[weedlevel] / 10</span>")
|
||||
to_chat(user, "- Pest level: <span class='notice'>[pestlevel] / 10</span>")
|
||||
to_chat(user, "- Toxicity level: <span class='notice'>[toxic] / 100</span>")
|
||||
to_chat(user, "- Water level: <span class='notice'>[waterlevel] / [maxwater]</span>")
|
||||
to_chat(user, "- Nutrition level: <span class='notice'>[nutrilevel] / [maxnutri]</span>")
|
||||
to_chat(user, "")
|
||||
|
||||
else if(istype(O, /obj/item/weapon/cultivator))
|
||||
if(weedlevel > 0)
|
||||
@@ -806,7 +806,7 @@
|
||||
weedlevel = 0
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>This plot is completely devoid of weeds! It doesn't need uprooting.</span>"
|
||||
to_chat(user, "<span class='warning'>This plot is completely devoid of weeds! It doesn't need uprooting.</span>")
|
||||
|
||||
else if(istype(O, /obj/item/weapon/storage/bag/plants))
|
||||
attack_hand(user)
|
||||
@@ -818,7 +818,7 @@
|
||||
|
||||
else if(istype(O, /obj/item/weapon/wrench) && unwrenchable)
|
||||
if(using_irrigation)
|
||||
user << "<span class='warning'>Disconnect the hoses first!</span>"
|
||||
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
|
||||
return
|
||||
|
||||
if(!anchored && !isinspace())
|
||||
@@ -852,7 +852,7 @@
|
||||
|
||||
else if(istype(O, /obj/item/weapon/shovel/spade) && unwrenchable)
|
||||
if(!myseed && !weedlevel)
|
||||
user << "<span class='warning'>[src] doesn't have any plants or weeds!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] doesn't have any plants or weeds!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] starts digging out [src]'s plants...</span>", "<span class='notice'>You start digging out [src]'s plants...</span>")
|
||||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
|
||||
@@ -880,7 +880,7 @@
|
||||
myseed.harvest(user)
|
||||
else if(dead)
|
||||
dead = 0
|
||||
user << "<span class='notice'>You remove the dead plant from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the dead plant from [src].</span>")
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
update_icon()
|
||||
@@ -891,11 +891,11 @@
|
||||
harvest = 0
|
||||
lastproduce = age
|
||||
if(istype(myseed,/obj/item/seeds/replicapod))
|
||||
user << "<span class='notice'>You harvest from the [myseed.plantname].</span>"
|
||||
to_chat(user, "<span class='notice'>You harvest from the [myseed.plantname].</span>")
|
||||
else if(myseed.getYield() <= 0)
|
||||
user << "<span class='warning'>You fail to harvest anything useful!</span>"
|
||||
to_chat(user, "<span class='warning'>You fail to harvest anything useful!</span>")
|
||||
else
|
||||
user << "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>"
|
||||
to_chat(user, "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>")
|
||||
if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest))
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
@@ -949,7 +949,7 @@
|
||||
|
||||
/obj/machinery/hydroponics/soil/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/shovel) && !istype(O, /obj/item/weapon/shovel/spade)) //Doesn't include spades because of uprooting plants
|
||||
user << "<span class='notice'>You clear up [src]!</span>"
|
||||
to_chat(user, "<span class='notice'>You clear up [src]!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -257,31 +257,46 @@
|
||||
C.update_icon()
|
||||
batteries_recharged = 1
|
||||
if(batteries_recharged)
|
||||
target << "<span class='notice'>Your batteries are recharged!</span>"
|
||||
to_chat(target, "<span class='notice'>Your batteries are recharged!</span>")
|
||||
|
||||
|
||||
|
||||
/datum/plant_gene/trait/glow
|
||||
// Makes plant glow. Makes plant in tray glow too.
|
||||
// Adds potency*rate luminosity to products.
|
||||
// Adds 1 + potency*rate light range and potency*(rate + 0.01) light_power to products.
|
||||
name = "Bioluminescence"
|
||||
rate = 0.1
|
||||
rate = 0.03
|
||||
examine_line = "<span class='info'>It emits a soft glow.</span>"
|
||||
trait_id = "glow"
|
||||
var/glow_color = "#AAD84B"
|
||||
|
||||
/datum/plant_gene/trait/glow/proc/get_lum(obj/item/seeds/S)
|
||||
return round(S.potency*rate)
|
||||
/datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S)
|
||||
return 1.4 + S.potency*rate
|
||||
|
||||
/datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S)
|
||||
return max(S.potency*(rate + 0.01), 0.1)
|
||||
|
||||
/datum/plant_gene/trait/glow/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc)
|
||||
..()
|
||||
if(ismob(newloc))
|
||||
G.pickup(newloc)//adjusts the lighting on the mob
|
||||
else
|
||||
G.SetLuminosity(get_lum(G.seed))
|
||||
G.set_light(glow_range(G.seed), glow_power(G.seed), glow_color)
|
||||
|
||||
/datum/plant_gene/trait/glow/shadow
|
||||
//makes plant emit slightly purple shadows
|
||||
//adds -potency*(rate*0.05) light power to products
|
||||
name = "Shadow Emission"
|
||||
rate = 0.04
|
||||
|
||||
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
|
||||
return -max(S.potency*(rate*0.05), 0.075)
|
||||
|
||||
/datum/plant_gene/trait/glow/red
|
||||
name = "Red Electrical Glow"
|
||||
glow_color = LIGHT_COLOR_RED
|
||||
|
||||
/datum/plant_gene/trait/glow/berry
|
||||
name = "Strong Bioluminescence"
|
||||
rate = 0.2
|
||||
rate = 0.05
|
||||
glow_color = null
|
||||
|
||||
|
||||
/datum/plant_gene/trait/teleport
|
||||
@@ -301,7 +316,7 @@
|
||||
/datum/plant_gene/trait/teleport/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
|
||||
var/teleport_radius = max(round(G.seed.potency / 10), 1)
|
||||
var/turf/T = get_turf(C)
|
||||
C << "<span class='warning'>You slip through spacetime!</span>"
|
||||
to_chat(C, "<span class='warning'>You slip through spacetime!</span>")
|
||||
do_teleport(C, T, teleport_radius)
|
||||
if(prob(50))
|
||||
do_teleport(G, T, teleport_radius)
|
||||
@@ -349,7 +364,7 @@
|
||||
if(istype(I, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/C = I
|
||||
if(C.use(5))
|
||||
user << "<span class='notice'>You add some cable to [G] and slide it inside the battery encasing.</span>"
|
||||
to_chat(user, "<span class='notice'>You add some cable to [G] and slide it inside the battery encasing.</span>")
|
||||
var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc)
|
||||
pocell.icon_state = G.icon_state
|
||||
pocell.maxcharge = G.seed.potency * 20
|
||||
@@ -367,7 +382,7 @@
|
||||
|
||||
qdel(G)
|
||||
else
|
||||
user << "<span class='warning'>You need five lengths of cable to make a [G] battery!</span>"
|
||||
to_chat(user, "<span class='warning'>You need five lengths of cable to make a [G] battery!</span>")
|
||||
|
||||
|
||||
/datum/plant_gene/trait/stinging
|
||||
@@ -381,7 +396,7 @@
|
||||
var/fraction = min(injecting_amount/G.reagents.total_volume, 1)
|
||||
G.reagents.reaction(L, INJECT, fraction)
|
||||
G.reagents.trans_to(L, injecting_amount)
|
||||
target << "<span class='danger'>You are pricked by [G]!</span>"
|
||||
to_chat(target, "<span class='danger'>You are pricked by [G]!</span>")
|
||||
|
||||
/datum/plant_gene/trait/smoke
|
||||
name = "gaseous decomposition"
|
||||
|
||||
@@ -93,21 +93,21 @@
|
||||
++loaded
|
||||
add_seed(G)
|
||||
if (loaded)
|
||||
user << "<span class='notice'>You put the seeds from \the [O.name] into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You put the seeds from \the [O.name] into [src].</span>")
|
||||
else
|
||||
user << "<span class='notice'>There are no seeds in \the [O.name].</span>"
|
||||
to_chat(user, "<span class='notice'>There are no seeds in \the [O.name].</span>")
|
||||
return
|
||||
|
||||
else if(seedify(O,-1, src, user))
|
||||
user << "<span class='notice'>You extract some seeds.</span>"
|
||||
to_chat(user, "<span class='notice'>You extract some seeds.</span>")
|
||||
return
|
||||
else if (istype(O,/obj/item/seeds))
|
||||
if(add_seed(O))
|
||||
user << "<span class='notice'>You add [O] to [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [O] to [src.name].</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
user << "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
|
||||
/obj/machinery/seed_extractor/proc/add_seed(obj/item/seeds/O)
|
||||
if(contents.len >= 999)
|
||||
usr << "<span class='notice'>\The [src] is full.</span>"
|
||||
to_chat(usr, "<span class='notice'>\The [src] is full.</span>")
|
||||
return 0
|
||||
|
||||
if(istype(O.loc,/mob))
|
||||
|
||||
@@ -306,10 +306,10 @@
|
||||
|
||||
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/device/plant_analyzer))
|
||||
user << "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>"
|
||||
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>")
|
||||
var/text = get_analyzer_text()
|
||||
if(text)
|
||||
user << "<span class='notice'>[text]</span>"
|
||||
to_chat(user, "<span class='notice'>[text]</span>")
|
||||
|
||||
return
|
||||
..() // Fallthrough to item/attackby() so that bags can pick seeds up
|
||||
@@ -336,14 +336,14 @@
|
||||
for(var/i in 1 to seed.growthstages)
|
||||
if("[seed.icon_grow][i]" in states)
|
||||
continue
|
||||
world << "[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!"
|
||||
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!")
|
||||
|
||||
if(!(seed.icon_dead in states))
|
||||
world << "[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!"
|
||||
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!")
|
||||
|
||||
if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product
|
||||
if(!(seed.icon_harvest in states))
|
||||
world << "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!"
|
||||
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!")
|
||||
|
||||
/obj/item/seeds/proc/randomize_stats()
|
||||
set_lifespan(rand(25, 60))
|
||||
|
||||
Reference in New Issue
Block a user