mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-13 08:04:22 +01:00
Hydroponics refactor, part 1: Files.
No code actually modified, just moved from all over the place to a module folder. defines/obj/hydro.dm split: -Seeds into seeds.dm -Tools like the analyzer, pest and weedkillers into hydro_tools.dm. Hatches and scythe from defines/obj/weapon.dm moved there too. -Non-edible plants like nettles into grown_inedible.dm. Special procs in items/weapons/hydroponics.dm moved there. -Biogenerator and hydroponics tray files moved.
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
/obj/machinery/biogenerator
|
||||
name = "Biogenerator"
|
||||
desc = ""
|
||||
icon = 'icons/obj/biogenerator.dmi'
|
||||
icon_state = "biogen-stand"
|
||||
density = 1
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 40
|
||||
var/processing = 0
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker = null
|
||||
var/points = 0
|
||||
var/menustat = "menu"
|
||||
|
||||
New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
|
||||
on_reagent_change() //When the reagents change, change the icon as well.
|
||||
update_icon()
|
||||
|
||||
update_icon()
|
||||
if(!src.beaker)
|
||||
icon_state = "biogen-empty"
|
||||
else if(!src.processing)
|
||||
icon_state = "biogen-stand"
|
||||
else
|
||||
icon_state = "biogen-work"
|
||||
return
|
||||
|
||||
/obj/machinery/biogenerator/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/glass))
|
||||
if(beaker)
|
||||
user << "\red The biogenerator is already loaded."
|
||||
else
|
||||
user.before_take_item(O)
|
||||
O.loc = src
|
||||
beaker = O
|
||||
updateUsrDialog()
|
||||
else if(processing)
|
||||
user << "\red The biogenerator is currently processing."
|
||||
else if(istype(O, /obj/item/weapon/storage/bag/plants))
|
||||
var/i = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
|
||||
i++
|
||||
if(i >= 10)
|
||||
user << "\red The biogenerator is already full! Activate it."
|
||||
else
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents)
|
||||
G.loc = src
|
||||
i++
|
||||
if(i >= 10)
|
||||
user << "\blue You fill the biogenerator to its capacity."
|
||||
break
|
||||
if(i<10)
|
||||
user << "\blue You empty the plant bag into the biogenerator."
|
||||
|
||||
|
||||
else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
user << "\red You cannot put this in [src.name]"
|
||||
else
|
||||
var/i = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
|
||||
i++
|
||||
if(i >= 10)
|
||||
user << "\red The biogenerator is full! Activate it."
|
||||
else
|
||||
user.before_take_item(O)
|
||||
O.loc = src
|
||||
user << "\blue You put [O.name] in [src.name]"
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/biogenerator/interact(mob/user as mob)
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = "<TITLE>Biogenerator</TITLE>Biogenerator:<BR>"
|
||||
if (processing)
|
||||
dat += "<FONT COLOR=red>Biogenerator is processing! Please wait...</FONT>"
|
||||
else
|
||||
dat += "Biomass: [points] points.<HR>"
|
||||
switch(menustat)
|
||||
if("menu")
|
||||
if (beaker)
|
||||
dat += "<A href='?src=\ref[src];action=activate'>Activate Biogenerator!</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=detach'>Detach Container</A><BR><BR>"
|
||||
dat += "Food<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=milk;cost=20'>10 milk</A> <FONT COLOR=blue>(20)</FONT><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=meat;cost=50'>Slab of meat</A> <FONT COLOR=blue>(50)</FONT><BR>"
|
||||
dat += "Nutrient<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=ez;cost=10'>E-Z-Nutrient</A> <FONT COLOR=blue>(10)</FONT> | <A href='?src=\ref[src];action=create;item=ez5;cost=50'>x5</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=l4z;cost=20'>Left 4 Zed</A> <FONT COLOR=blue>(20)</FONT> | <A href='?src=\ref[src];action=create;item=l4z5;cost=100'>x5</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=rh;cost=25'>Robust Harvest</A> <FONT COLOR=blue>(25)</FONT> | <A href='?src=\ref[src];action=create;item=rh5;cost=125'>x5</A><BR>"
|
||||
dat += "Leather<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=wallet;cost=100'>Wallet</A> <FONT COLOR=blue>(100)</FONT><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=gloves;cost=250'>Botanical gloves</A> <FONT COLOR=blue>(250)</FONT><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=tbelt;cost=300'>Utility belt</A> <FONT COLOR=blue>(300)</FONT><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=satchel;cost=400'>Leather Satchel</A> <FONT COLOR=blue>(400)</FONT><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=create;item=cashbag;cost=400'>Cash Bag</A> <FONT COLOR=blue>(400)</FONT><BR>"
|
||||
//dat += "Other<BR>"
|
||||
//dat += "<A href='?src=\ref[src];action=create;item=monkey;cost=500'>Monkey</A> <FONT COLOR=blue>(500)</FONT><BR>"
|
||||
else
|
||||
dat += "<BR><FONT COLOR=red>No beaker inside. Please insert a beaker.</FONT><BR>"
|
||||
if("nopoints")
|
||||
dat += "You do not have biomass to create products.<BR>Please, put growns into reactor and activate it.<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
|
||||
if("complete")
|
||||
dat += "Operation complete.<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
|
||||
if("void")
|
||||
dat += "<FONT COLOR=red>Error: No growns inside.</FONT><BR>Please, put growns into reactor.<BR>"
|
||||
dat += "<A href='?src=\ref[src];action=menu'>Return to menu</A>"
|
||||
user << browse(dat, "window=biogenerator")
|
||||
onclose(user, "biogenerator")
|
||||
return
|
||||
|
||||
/obj/machinery/biogenerator/attack_hand(mob/user as mob)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/biogenerator/proc/activate()
|
||||
if (usr.stat != 0)
|
||||
return
|
||||
if (src.stat != 0) //NOPOWER etc
|
||||
return
|
||||
if(src.processing)
|
||||
usr << "\red The biogenerator is in the process of working."
|
||||
return
|
||||
var/S = 0
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
|
||||
S += 5
|
||||
if(I.reagents.get_reagent_amount("nutriment") < 0.1)
|
||||
points += 1
|
||||
else points += I.reagents.get_reagent_amount("nutriment")*10
|
||||
del(I)
|
||||
if(S)
|
||||
processing = 1
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
|
||||
use_power(S*30)
|
||||
sleep(S+15)
|
||||
processing = 0
|
||||
update_icon()
|
||||
else
|
||||
menustat = "void"
|
||||
return
|
||||
|
||||
/obj/machinery/biogenerator/proc/create_product(var/item,var/cost)
|
||||
if(cost > points)
|
||||
menustat = "nopoints"
|
||||
return 0
|
||||
processing = 1
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
points -= cost
|
||||
sleep(30)
|
||||
switch(item)
|
||||
if("milk")
|
||||
beaker.reagents.add_reagent("milk",10)
|
||||
if("meat")
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc)
|
||||
if("ez")
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
if("l4z")
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
if("rh")
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
new/obj/item/nutrient/ez(src.loc)
|
||||
if("l4z5")
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
new/obj/item/nutrient/l4z(src.loc)
|
||||
if("rh5")
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
new/obj/item/nutrient/rh(src.loc)
|
||||
if("wallet")
|
||||
new/obj/item/weapon/storage/wallet(src.loc)
|
||||
if("gloves")
|
||||
new/obj/item/clothing/gloves/botanic_leather(src.loc)
|
||||
if("tbelt")
|
||||
new/obj/item/weapon/storage/belt/utility(src.loc)
|
||||
if("satchel")
|
||||
new/obj/item/weapon/storage/backpack/satchel(src.loc)
|
||||
if("cashbag")
|
||||
new/obj/item/weapon/storage/bag/cash(src.loc)
|
||||
if("monkey")
|
||||
new/mob/living/carbon/monkey(src.loc)
|
||||
processing = 0
|
||||
menustat = "complete"
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/biogenerator/Topic(href, href_list)
|
||||
if(stat & BROKEN) return
|
||||
if(usr.stat || usr.restrained()) return
|
||||
if(!in_range(src, usr)) return
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
switch(href_list["action"])
|
||||
if("activate")
|
||||
activate()
|
||||
if("detach")
|
||||
if(beaker)
|
||||
beaker.loc = src.loc
|
||||
beaker = null
|
||||
update_icon()
|
||||
if("create")
|
||||
create_product(href_list["item"],text2num(href_list["cost"]))
|
||||
if("menu")
|
||||
menustat = "menu"
|
||||
updateUsrDialog()
|
||||
@@ -0,0 +1,249 @@
|
||||
// **********************
|
||||
// Other harvested materials from plants (that are not food)
|
||||
// **********************
|
||||
|
||||
/obj/item/weapon/grown // Grown weapons
|
||||
name = "grown_weapon"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
var/seed = ""
|
||||
var/plantname = ""
|
||||
var/productname = ""
|
||||
var/species = ""
|
||||
var/lifespan = 20
|
||||
var/endurance = 15
|
||||
var/maturation = 7
|
||||
var/production = 7
|
||||
var/yield = 2
|
||||
var/potency = 1
|
||||
var/plant_type = 0
|
||||
New()
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
/obj/item/weapon/grown/proc/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
|
||||
/obj/item/weapon/grown/log
|
||||
name = "tower-cap log"
|
||||
desc = "It's better than bad, it's good!"
|
||||
icon = 'icons/obj/harvest.dmi'
|
||||
icon_state = "logs"
|
||||
force = 5
|
||||
flags = TABLEPASS
|
||||
throwforce = 5
|
||||
w_class = 3.0
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
plant_type = 2
|
||||
origin_tech = "materials=1"
|
||||
seed = "/obj/item/seeds/towermycelium"
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
|
||||
user.show_message("<span class='notice'>You make planks out of \the [src]!</span>", 1)
|
||||
for(var/i=0,i<2,i++)
|
||||
var/obj/item/stack/sheet/wood/NG = new (user.loc)
|
||||
for (var/obj/item/stack/sheet/wood/G in user.loc)
|
||||
if(G==NG)
|
||||
continue
|
||||
if(G.amount>=G.max_amount)
|
||||
continue
|
||||
G.attackby(NG, user)
|
||||
usr << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks."
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/grown/sunflower // FLOWER POWER!
|
||||
name = "sunflower"
|
||||
desc = "It's beautiful! A certain person might beat you to death if you trample these."
|
||||
icon = 'icons/obj/harvest.dmi'
|
||||
icon_state = "sunflower"
|
||||
damtype = "fire"
|
||||
force = 0
|
||||
flags = TABLEPASS
|
||||
throwforce = 1
|
||||
w_class = 1.0
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
plant_type = 1
|
||||
seed = "/obj/item/seeds/sunflower"
|
||||
|
||||
|
||||
/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob)
|
||||
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>"
|
||||
|
||||
/*
|
||||
/obj/item/weapon/grown/gibtomato
|
||||
desc = "A plump tomato."
|
||||
icon = 'icons/obj/harvest.dmi'
|
||||
name = "Gib Tomato"
|
||||
icon_state = "gibtomato"
|
||||
damtype = "fire"
|
||||
force = 0
|
||||
flags = TABLEPASS
|
||||
throwforce = 1
|
||||
w_class = 2.0
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
plant_type = 1
|
||||
seed = "/obj/item/seeds/gibtomato"
|
||||
New()
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/grown/gibtomato/New()
|
||||
..()
|
||||
src.gibs = new /obj/effect/gibspawner/human(get_turf(src))
|
||||
src.gibs.attach(src)
|
||||
src.smoke.set_up(10, 0, usr.loc)
|
||||
*/
|
||||
/obj/item/weapon/grown/nettle // -- Skie
|
||||
desc = "It's probably <B>not</B> wise to touch it with bare hands..."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
name = "nettle"
|
||||
icon_state = "nettle"
|
||||
damtype = "fire"
|
||||
force = 15
|
||||
flags = TABLEPASS
|
||||
throwforce = 1
|
||||
w_class = 2.0
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
plant_type = 1
|
||||
origin_tech = "combat=1"
|
||||
seed = "/obj/item/seeds/nettleseed"
|
||||
New()
|
||||
..()
|
||||
spawn(5) //So potency can be set in the proc that creates these crops
|
||||
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
|
||||
reagents.add_reagent("sacid", round(potency, 1))
|
||||
force = round((5+potency/5), 1)
|
||||
|
||||
|
||||
/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob)
|
||||
if(!user.gloves)
|
||||
user << "\red The nettle burns your bare hand!"
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/datum/organ/external/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(0,force))
|
||||
user.UpdateDamageIcon()
|
||||
else
|
||||
user.take_organ_damage(0,force)
|
||||
|
||||
|
||||
/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(force > 0)
|
||||
force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
else
|
||||
usr << "All the leaves have fallen off the nettle from violent whacking."
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
force = round((5+potency/5), 1)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/grown/deathnettle // -- Skie
|
||||
desc = "The \red glowing \black nettle incites \red<B>rage</B>\black in you just from looking at it!"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
name = "deathnettle"
|
||||
icon_state = "deathnettle"
|
||||
damtype = "fire"
|
||||
force = 30
|
||||
flags = TABLEPASS
|
||||
throwforce = 1
|
||||
w_class = 2.0
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
plant_type = 1
|
||||
seed = "/obj/item/seeds/deathnettleseed"
|
||||
origin_tech = "combat=3"
|
||||
attack_verb = list("stung")
|
||||
New()
|
||||
..()
|
||||
spawn(5) //So potency can be set in the proc that creates these crops
|
||||
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
|
||||
reagents.add_reagent("pacid", round(potency, 1))
|
||||
force = round((5+potency/2.5), 1)
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
||||
return (BRUTELOSS|TOXLOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob)
|
||||
if(!user.gloves)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/datum/organ/external/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(0,force))
|
||||
user.UpdateDamageIcon()
|
||||
else
|
||||
user.take_organ_damage(0,force)
|
||||
if(prob(50))
|
||||
user.Paralyse(5)
|
||||
user << "\red You are stunned by the Deathnettle when you try picking it up!"
|
||||
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(!..()) return
|
||||
if(istype(M, /mob/living))
|
||||
M << "\red You are stunned by the powerful acid of the Deathnettle!"
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Had the [src.name] used on them by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] on [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] on [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
|
||||
M.eye_blurry += force/7
|
||||
if(prob(20))
|
||||
M.Paralyse(force/6)
|
||||
M.Weaken(force/15)
|
||||
M.drop_item()
|
||||
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
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 deathnettle from violent whacking."
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
|
||||
potency = newValue
|
||||
force = round((5+potency/2.5), 1)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/corncob
|
||||
name = "corn cob"
|
||||
desc = "A reminder of meals gone by."
|
||||
icon = 'icons/obj/harvest.dmi'
|
||||
icon_state = "corncob"
|
||||
item_state = "corncob"
|
||||
w_class = 2.0
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
|
||||
/obj/item/weapon/corncob/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual))
|
||||
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)
|
||||
del(src)
|
||||
return
|
||||
@@ -0,0 +1,254 @@
|
||||
//Analyzer, pestkillers, weedkillers, nutrients, hatchets.
|
||||
|
||||
|
||||
/obj/item/device/analyzer/plant_analyzer
|
||||
name = "plant analyzer"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hydro"
|
||||
item_state = "analyzer"
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
return 0
|
||||
|
||||
|
||||
// *************************************
|
||||
// Pestkiller defines for hydroponics
|
||||
// *************************************
|
||||
|
||||
/obj/item/pestkiller
|
||||
name = "bottle of pestkiller"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/toxicity = 0
|
||||
var/PestKillStr = 0
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/pestkiller/carbaryl
|
||||
name = "bottle of carbaryl"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 4
|
||||
PestKillStr = 2
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/pestkiller/lindane
|
||||
name = "bottle of lindane"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle18"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 6
|
||||
PestKillStr = 4
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/pestkiller/phosmet
|
||||
name = "bottle of phosmet"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle15"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 8
|
||||
PestKillStr = 7
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
// *************************************
|
||||
// Hydroponics Tools
|
||||
// *************************************
|
||||
|
||||
/obj/item/weapon/weedspray // -- Skie
|
||||
desc = "It's a toxic mixture, in spray form, to kill small weeds."
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
name = "weed-spray"
|
||||
icon_state = "weedspray"
|
||||
item_state = "spray"
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | NOBLUDGEON
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 4
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
var/toxicity = 4
|
||||
var/WeedKillStr = 2
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/weapon/pestspray // -- Skie
|
||||
desc = "It's some pest eliminator spray! <I>Do not inhale!</I>"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
name = "pest-spray"
|
||||
icon_state = "pestspray"
|
||||
item_state = "spray"
|
||||
flags = TABLEPASS | OPENCONTAINER | FPRINT | NOBLUDGEON
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 4
|
||||
w_class = 2.0
|
||||
throw_speed = 2
|
||||
throw_range = 10
|
||||
var/toxicity = 4
|
||||
var/PestKillStr = 2
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] is huffing the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/weapon/minihoe // -- Numbers
|
||||
name = "mini hoe"
|
||||
desc = "It's used for removing weeds or scratching your back."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "hoe"
|
||||
item_state = "hoe"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
m_amt = 50
|
||||
attack_verb = list("slashed", "sliced", "cut", "clawed")
|
||||
|
||||
|
||||
// *************************************
|
||||
// Weedkiller defines for hydroponics
|
||||
// *************************************
|
||||
|
||||
/obj/item/weedkiller
|
||||
name = "bottle of weedkiller"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/toxicity = 0
|
||||
var/WeedKillStr = 0
|
||||
|
||||
/obj/item/weedkiller/triclopyr
|
||||
name = "bottle of glyphosate"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 4
|
||||
WeedKillStr = 2
|
||||
|
||||
/obj/item/weedkiller/lindane
|
||||
name = "bottle of triclopyr"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle18"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 6
|
||||
WeedKillStr = 4
|
||||
|
||||
/obj/item/weedkiller/D24
|
||||
name = "bottle of 2,4-D"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle15"
|
||||
flags = FPRINT | TABLEPASS
|
||||
toxicity = 8
|
||||
WeedKillStr = 7
|
||||
|
||||
|
||||
// *************************************
|
||||
// Nutrient defines for hydroponics
|
||||
// *************************************
|
||||
|
||||
/obj/item/nutrient
|
||||
name = "bottle of nutrient"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 2.0
|
||||
var/mutmod = 0
|
||||
var/yieldmod = 0
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/nutrient/ez
|
||||
name = "bottle of E-Z-Nutrient"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
flags = FPRINT | TABLEPASS
|
||||
mutmod = 1
|
||||
yieldmod = 1
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/nutrient/l4z
|
||||
name = "bottle of Left 4 Zed"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle18"
|
||||
flags = FPRINT | TABLEPASS
|
||||
mutmod = 2
|
||||
yieldmod = 0
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
/obj/item/nutrient/rh
|
||||
name = "bottle of Robust Harvest"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle15"
|
||||
flags = FPRINT | TABLEPASS
|
||||
mutmod = 0
|
||||
yieldmod = 2
|
||||
New()
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
//Hatchets and things to kill kudzu
|
||||
/obj/item/weapon/hatchet
|
||||
name = "hatchet"
|
||||
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "hatchet"
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 12.0
|
||||
w_class = 2.0
|
||||
throwforce = 15.0
|
||||
throw_speed = 4
|
||||
throw_range = 4
|
||||
m_amt = 15000
|
||||
origin_tech = "materials=2;combat=1"
|
||||
attack_verb = list("chopped", "torn", "cut")
|
||||
|
||||
/obj/item/weapon/hatchet/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
return ..()
|
||||
|
||||
//If it's a hatchet it goes here. I guess
|
||||
/obj/item/weapon/hatchet/unathiknife
|
||||
name = "duelling knife"
|
||||
desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "unathiknife"
|
||||
attack_verb = list("ripped", "torn", "cut")
|
||||
|
||||
|
||||
/obj/item/weapon/scythe
|
||||
icon_state = "scythe0"
|
||||
name = "scythe"
|
||||
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
|
||||
force = 13.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
w_class = 4.0
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
slot_flags = SLOT_BACK
|
||||
origin_tech = "materials=2;combat=2"
|
||||
attack_verb = list("chopped", "sliced", "cut", "reaped")
|
||||
|
||||
/obj/item/weapon/scythe/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(A, /obj/effect/spacevine))
|
||||
for(var/obj/effect/spacevine/B in orange(A,1))
|
||||
if(prob(80))
|
||||
del B
|
||||
del A
|
||||
@@ -0,0 +1,973 @@
|
||||
#define HYDRO_SPEED_MULTIPLIER 0.25
|
||||
|
||||
/obj/machinery/hydroponics
|
||||
name = "hydroponics tray"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon_state = "hydrotray3"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/waterlevel = 100 // The amount of water in the tray (max 100)
|
||||
var/nutrilevel = 10 // The amount of nutrient in the tray (max 10)
|
||||
var/pestlevel = 0 // The amount of pests in the tray (max 10)
|
||||
var/weedlevel = 0 // The amount of weeds in the tray (max 10)
|
||||
var/yieldmod = 1 //Modifier to yield
|
||||
var/mutmod = 1 //Modifier to mutation chance
|
||||
var/toxic = 0 // Toxicity in the tray?
|
||||
var/age = 0 // Current age
|
||||
var/dead = 0 // Is it dead?
|
||||
var/health = 0 // Its health.
|
||||
var/lastproduce = 0 // Last time it was harvested
|
||||
var/lastcycle = 0 //Used for timing of cycles.
|
||||
var/cycledelay = 200 // About 10 seconds / cycle
|
||||
var/planted = 0 // Is it occupied?
|
||||
var/harvest = 0 //Ready to harvest?
|
||||
var/obj/item/seeds/myseed = null // The currently planted seed
|
||||
|
||||
/obj/machinery/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj ,/obj/item/projectile/energy/floramut))
|
||||
if(planted)
|
||||
mutate()
|
||||
else if(istype(Proj ,/obj/item/projectile/energy/florayield))
|
||||
if(planted && myseed.yield == 0)//Oh god don't divide by zero you'll doom us all.
|
||||
myseed.yield += 1
|
||||
//world << "Yield increased by 1, from 0, to a total of [myseed.yield]"
|
||||
else if (planted && (prob(1/(myseed.yield * myseed.yield) *100)))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2...
|
||||
myseed.yield += 1
|
||||
//world << "Yield increased by 1, to a total of [myseed.yield]"
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
obj/machinery/hydroponics/process()
|
||||
|
||||
if(myseed && (myseed.loc != src))
|
||||
myseed.loc = src
|
||||
|
||||
if(world.time > (lastcycle + cycledelay))
|
||||
lastcycle = world.time
|
||||
if(planted && !dead)
|
||||
// Advance age
|
||||
age += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
//Nutrients//////////////////////////////////////////////////////////////
|
||||
// Nutrients deplete slowly
|
||||
if(nutrilevel > 0)
|
||||
if(prob(50))
|
||||
nutrilevel -= 1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
// Lack of nutrients hurts non-weeds
|
||||
if(nutrilevel <= 0 && myseed.plant_type != 1)
|
||||
health -= rand(1,3) * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
//Water//////////////////////////////////////////////////////////////////
|
||||
// Drink random amount of water
|
||||
waterlevel = max(waterlevel - rand(1,6) * HYDRO_SPEED_MULTIPLIER, 0)
|
||||
|
||||
// If the plant is dry, it loses health pretty fast, unless mushroom
|
||||
if(waterlevel <= 10 && myseed.plant_type != 2)
|
||||
health -= rand(0,1) * HYDRO_SPEED_MULTIPLIER
|
||||
if(waterlevel <= 0)
|
||||
health -= rand(0,2) * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
// Sufficient water level and nutrient level = plant healthy
|
||||
else if(waterlevel > 10 && nutrilevel > 0)
|
||||
health += rand(1,2) * HYDRO_SPEED_MULTIPLIER
|
||||
if(prob(5)) //5 percent chance the weed population will increase
|
||||
weedlevel += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
//Toxins/////////////////////////////////////////////////////////////////
|
||||
|
||||
// Too much toxins cause harm, but when the plant drinks the contaiminated water, the toxins disappear slowly
|
||||
if(toxic >= 40 && toxic < 80)
|
||||
health -= 1 * HYDRO_SPEED_MULTIPLIER
|
||||
toxic -= rand(1,10) * HYDRO_SPEED_MULTIPLIER
|
||||
else if(toxic >= 80) // I don't think it ever gets here tbh unless above is commented out
|
||||
health -= 3 * HYDRO_SPEED_MULTIPLIER
|
||||
toxic -= rand(1,10) * HYDRO_SPEED_MULTIPLIER
|
||||
else if(toxic < 0) // Make sure it won't go overoboard
|
||||
toxic = 0
|
||||
|
||||
//Pests & Weeds//////////////////////////////////////////////////////////
|
||||
|
||||
// Too many pests cause the plant to be sick
|
||||
if (pestlevel > 10 ) // Make sure it won't go overoboard
|
||||
pestlevel = 10
|
||||
|
||||
else if(pestlevel >= 5)
|
||||
health -= 1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
// If it's a weed, it doesn't stunt the growth
|
||||
if(weedlevel >= 5 && myseed.plant_type != 1 )
|
||||
health -= 1 * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
|
||||
//Health & Age///////////////////////////////////////////////////////////
|
||||
// Don't go overboard with the health
|
||||
if(health > myseed.endurance)
|
||||
health = myseed.endurance
|
||||
|
||||
// Plant dies if health <= 0
|
||||
else if(health <= 0)
|
||||
dead = 1
|
||||
harvest = 0
|
||||
weedlevel += 1 * HYDRO_SPEED_MULTIPLIER // Weeds flourish
|
||||
pestlevel = 0 // Pests die
|
||||
|
||||
// If the plant is too old, lose health fast
|
||||
if(age > myseed.lifespan)
|
||||
health -= rand(1,5) * HYDRO_SPEED_MULTIPLIER
|
||||
|
||||
// Harvest code
|
||||
if(age > myseed.production && (age - lastproduce) > myseed.production && (!harvest && !dead))
|
||||
for(var/i = 0; i < mutmod; i++)
|
||||
if(prob(85))
|
||||
mutate()
|
||||
else if(prob(30))
|
||||
hardmutate()
|
||||
else if(prob(5))
|
||||
mutatespecie()
|
||||
|
||||
if(yieldmod > 0 && myseed.yield != -1) // Unharvestable shouldn't be harvested
|
||||
harvest = 1
|
||||
else
|
||||
lastproduce = age
|
||||
if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase
|
||||
pestlevel += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
else
|
||||
if(waterlevel > 10 && nutrilevel > 0 && prob(10)) // If there's no plant, the percentage chance is 10%
|
||||
weedlevel += 1 * HYDRO_SPEED_MULTIPLIER
|
||||
if(weedlevel > 10)
|
||||
weedlevel = 10
|
||||
|
||||
// Weeeeeeeeeeeeeeedddssss
|
||||
|
||||
if (weedlevel >= 10 && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot.
|
||||
if(planted)
|
||||
if(myseed.plant_type == 0) // If a normal plant
|
||||
weedinvasion()
|
||||
else
|
||||
weedinvasion() // Weed invasion into empty tray
|
||||
updateicon()
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/updateicon()
|
||||
//Refreshes the icon and sets the luminosity
|
||||
overlays.Cut()
|
||||
if(planted)
|
||||
if(dead)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-dead")
|
||||
else if(harvest)
|
||||
if(myseed.plant_type == 2) // Shrooms don't have a -harvest graphic
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[myseed.growthstages]")
|
||||
else
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-harvest")
|
||||
else if(age < myseed.maturation)
|
||||
var/t_growthstate = ((age / myseed.maturation) * myseed.growthstages ) // Make sure it won't crap out due to HERPDERP 6 stages only
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[round(t_growthstate)]")
|
||||
lastproduce = age //Cheating by putting this here, it means that it isn't instantly ready to harvest
|
||||
else
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[myseed.growthstages]") // Same
|
||||
|
||||
if(waterlevel <= 10)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_lowwater3")
|
||||
if(nutrilevel <= 2)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_lownutri3")
|
||||
if(health <= (myseed.endurance / 2))
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_lowhealth3")
|
||||
if(weedlevel >= 5)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_alert3")
|
||||
if(pestlevel >= 5)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_alert3")
|
||||
if(toxic >= 40)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_alert3")
|
||||
if(harvest)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="over_harvest3")
|
||||
|
||||
if(istype(myseed,/obj/item/seeds/glowshroom))
|
||||
SetLuminosity(round(myseed.potency/10))
|
||||
else
|
||||
SetLuminosity(0)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
|
||||
dead = 0
|
||||
if(myseed) // In case there's nothing in the tray beforehand
|
||||
del(myseed)
|
||||
switch(rand(1,18)) // randomly pick predominative weed
|
||||
if(16 to 18)
|
||||
myseed = new /obj/item/seeds/reishimycelium
|
||||
if(14 to 15)
|
||||
myseed = new /obj/item/seeds/nettleseed
|
||||
if(12 to 13)
|
||||
myseed = new /obj/item/seeds/harebell
|
||||
if(10 to 11)
|
||||
myseed = new /obj/item/seeds/amanitamycelium
|
||||
if(8 to 9)
|
||||
myseed = new /obj/item/seeds/chantermycelium
|
||||
if(6 to 7) // implementation for tower caps still kinda missing ~ Not Anymore! -Cheridan
|
||||
myseed = new /obj/item/seeds/towermycelium
|
||||
if(4 to 5)
|
||||
myseed = new /obj/item/seeds/plumpmycelium
|
||||
else
|
||||
myseed = new /obj/item/seeds/weeds
|
||||
planted = 1
|
||||
age = 0
|
||||
health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
harvest = 0
|
||||
weedlevel = 0 // Reset
|
||||
pestlevel = 0 // Reset
|
||||
updateicon()
|
||||
visible_message("\blue [src] has been overtaken by [myseed.plantname].")
|
||||
|
||||
return
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutate() // Mutates the current seed
|
||||
|
||||
myseed.lifespan += rand(-2,2)
|
||||
if(myseed.lifespan < 10)
|
||||
myseed.lifespan = 10
|
||||
else if(myseed.lifespan > 30)
|
||||
myseed.lifespan = 30
|
||||
|
||||
myseed.endurance += rand(-5,5)
|
||||
if(myseed.endurance < 10)
|
||||
myseed.endurance = 10
|
||||
else if(myseed.endurance > 100)
|
||||
myseed.endurance = 100
|
||||
|
||||
myseed.production += rand(-1,1)
|
||||
if(myseed.production < 2)
|
||||
myseed.production = 2
|
||||
else if(myseed.production > 10)
|
||||
myseed.production = 10
|
||||
|
||||
if(myseed.yield != -1) // Unharvestable shouldn't suddenly turn harvestable
|
||||
myseed.yield += rand(-2,2)
|
||||
if(myseed.yield < 0)
|
||||
myseed.yield = 0
|
||||
else if(myseed.yield > 10)
|
||||
myseed.yield = 10
|
||||
if(myseed.yield == 0 && myseed.plant_type == 2)
|
||||
myseed.yield = 1 // Mushrooms always have a minimum yield of 1.
|
||||
|
||||
if(myseed.potency != -1) //Not all plants have a potency
|
||||
myseed.potency += rand(-25,25)
|
||||
if(myseed.potency < 0)
|
||||
myseed.potency = 0
|
||||
else if(myseed.potency > 100)
|
||||
myseed.potency = 100
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/hardmutate() // Strongly mutates the current seed.
|
||||
|
||||
myseed.lifespan += rand(-4,4)
|
||||
if(myseed.lifespan < 10)
|
||||
myseed.lifespan = 10
|
||||
else if(myseed.lifespan > 30 && !istype(myseed,/obj/item/seeds/glowshroom)) //hack to prevent glowshrooms from always resetting to 30 sec delay
|
||||
myseed.lifespan = 30
|
||||
|
||||
myseed.endurance += rand(-10,10)
|
||||
if(myseed.endurance < 10)
|
||||
myseed.endurance = 10
|
||||
else if(myseed.endurance > 100)
|
||||
myseed.endurance = 100
|
||||
|
||||
myseed.production += rand(-2,2)
|
||||
if(myseed.production < 2)
|
||||
myseed.production = 2
|
||||
else if(myseed.production > 10)
|
||||
myseed.production = 10
|
||||
|
||||
if(myseed.yield != -1) // Unharvestable shouldn't suddenly turn harvestable
|
||||
myseed.yield += rand(-4,4)
|
||||
if(myseed.yield < 0)
|
||||
myseed.yield = 0
|
||||
else if(myseed.yield > 10)
|
||||
myseed.yield = 10
|
||||
if(myseed.yield == 0 && myseed.plant_type == 2)
|
||||
myseed.yield = 1 // Mushrooms always have a minimum yield of 1.
|
||||
|
||||
if(myseed.potency != -1) //Not all plants have a potency
|
||||
myseed.potency += rand(-50,50)
|
||||
if(myseed.potency < 0)
|
||||
myseed.potency = 0
|
||||
else if(myseed.potency > 100)
|
||||
myseed.potency = 100
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
|
||||
|
||||
if ( istype(myseed, /obj/item/seeds/nettleseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/deathnettleseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/amanitamycelium ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/angelmycelium
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/lemonseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/cashseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/ambrosiavulgarisseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/ambrosiadeusseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/plumpmycelium ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/walkingmushroommycelium
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/chiliseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/icepepperseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/appleseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/goldappleseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/berryseed ))
|
||||
del(myseed)
|
||||
switch(rand(1,100))
|
||||
if(1 to 50)
|
||||
myseed = new /obj/item/seeds/poisonberryseed
|
||||
if(51 to 100)
|
||||
myseed = new /obj/item/seeds/glowberryseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/poisonberryseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/deathberryseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/tomatoseed ))
|
||||
del(myseed)
|
||||
switch(rand(1,100))
|
||||
if(1 to 35)
|
||||
myseed = new /obj/item/seeds/bluetomatoseed
|
||||
if(36 to 70)
|
||||
myseed = new /obj/item/seeds/bloodtomatoseed
|
||||
if(71 to 100)
|
||||
myseed = new /obj/item/seeds/killertomatoseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/bluetomatoseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/bluespacetomatoseed
|
||||
|
||||
else if ( istype(myseed, /obj/item/seeds/grapeseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/greengrapeseed
|
||||
/*
|
||||
else if ( istype(myseed, /obj/item/seeds/tomatoseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/gibtomatoseed
|
||||
*/
|
||||
else if ( istype(myseed, /obj/item/seeds/eggplantseed ))
|
||||
del(myseed)
|
||||
myseed = new /obj/item/seeds/eggyseed
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
dead = 0
|
||||
hardmutate()
|
||||
planted = 1
|
||||
age = 0
|
||||
health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
harvest = 0
|
||||
weedlevel = 0 // Reset
|
||||
|
||||
spawn(5) // Wait a while
|
||||
updateicon()
|
||||
visible_message("\red[src] has suddenly mutated into \blue [myseed.plantname]!")
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
|
||||
if ( weedlevel > 5 )
|
||||
del(myseed)
|
||||
var/newWeed = pick(/obj/item/seeds/libertymycelium, /obj/item/seeds/angelmycelium, /obj/item/seeds/deathnettleseed, /obj/item/seeds/kudzuseed)
|
||||
myseed = new newWeed
|
||||
dead = 0
|
||||
hardmutate()
|
||||
planted = 1
|
||||
age = 0
|
||||
health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
harvest = 0
|
||||
weedlevel = 0 // Reset
|
||||
|
||||
spawn(5) // Wait a while
|
||||
updateicon()
|
||||
visible_message("\red The mutated weeds in [src] spawned a \blue [myseed.plantname]!")
|
||||
else
|
||||
usr << "The few weeds in the [src] seem to react, but only for a moment..."
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier
|
||||
health = 0
|
||||
dead = 1
|
||||
harvest = 0
|
||||
updateicon()
|
||||
visible_message("\red[src] is looking very unhealthy!")
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/proc/mutatepest() // Until someone makes a spaceworm, this is commented out
|
||||
if ( pestlevel > 5 )
|
||||
visible_message("The pests seem to behave oddly...")
|
||||
// spawn(10)
|
||||
// new /obj/effect/alien/spaceworm(loc)
|
||||
else
|
||||
usr << "The pests seem to behave oddly, but quickly settle down..." //Modified to give a better idea of what's happening when you inject mutagen. There's still nothing proper to spawn here though. -Cheridan
|
||||
return
|
||||
|
||||
|
||||
|
||||
obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
//Called when mob user "attacks" it with object O
|
||||
if (istype(O, /obj/item/weapon/reagent_containers/glass))
|
||||
var/b_amount = O.reagents.get_reagent_amount("water")
|
||||
if(b_amount > 0 && waterlevel < 100)
|
||||
if(b_amount + waterlevel > 100)
|
||||
b_amount = 100 - waterlevel
|
||||
O.reagents.remove_reagent("water", b_amount)
|
||||
waterlevel += b_amount
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
user << "You fill \the [src] with [b_amount] units of water."
|
||||
|
||||
// Toxicity dilutation code. The more water you put in, the lesser the toxin concentration.
|
||||
toxic -= round(b_amount/4)
|
||||
if (toxic < 0 ) // Make sure it won't go overboard
|
||||
toxic = 0
|
||||
|
||||
else if(waterlevel >= 100)
|
||||
user << "\red \The [src] is already full."
|
||||
else
|
||||
user << "\red \The [O] is not filled with water."
|
||||
updateicon()
|
||||
|
||||
else if ( istype(O, /obj/item/nutrient) )
|
||||
var/obj/item/nutrient/myNut = O
|
||||
user.u_equip(O)
|
||||
nutrilevel = 10
|
||||
yieldmod = myNut.yieldmod
|
||||
mutmod = myNut.mutmod
|
||||
user << "You replace the nutrient solution in the [src]."
|
||||
del(O)
|
||||
updateicon()
|
||||
|
||||
else if(istype(O, /obj/item/weapon/reagent_containers/syringe)) // Syringe stuff
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = O
|
||||
if (planted)
|
||||
if (S.mode == 1)
|
||||
if(!S.reagents.total_volume)
|
||||
user << "\red \The [O] is empty."
|
||||
return
|
||||
user << "\red You inject the [myseed.plantname] with a chemical solution."
|
||||
|
||||
// There needs to be a good amount of mutagen to actually work
|
||||
|
||||
if(S.reagents.has_reagent("mutagen", 5))
|
||||
switch(rand(100))
|
||||
if (91 to 100) plantdies()
|
||||
if (81 to 90) mutatespecie()
|
||||
if (66 to 80) hardmutate()
|
||||
if (41 to 65) mutate()
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) mutateweed()
|
||||
if (1 to 10) mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
// Antitoxin binds shit pretty well. So the tox goes significantly down
|
||||
if(S.reagents.has_reagent("anti_toxin", 1))
|
||||
toxic -= round(S.reagents.get_reagent_amount("anti_toxin")*2)
|
||||
|
||||
// NIGGA, YOU JUST WENT ON FULL RETARD.
|
||||
if(S.reagents.has_reagent("toxin", 1))
|
||||
toxic += round(S.reagents.get_reagent_amount("toxin")*2)
|
||||
|
||||
// Milk is good for humans, but bad for plants. The sugars canot be used by plants, and the milk fat fucks up growth. Not shrooms though. I can't deal with this now...
|
||||
if(S.reagents.has_reagent("milk", 1))
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("milk")*0.1)
|
||||
waterlevel += round(S.reagents.get_reagent_amount("milk")*0.9)
|
||||
|
||||
// Beer is a chemical composition of alcohol and various other things. It's a shitty nutrient but hey, it's still one. Also alcohol is bad, mmmkay?
|
||||
if(S.reagents.has_reagent("beer", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("beer")*0.05)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("beer")*0.25)
|
||||
waterlevel += round(S.reagents.get_reagent_amount("beer")*0.7)
|
||||
|
||||
// You're an idiot of thinking that one of the most corrosive and deadly gasses would be beneficial
|
||||
if(S.reagents.has_reagent("fluorine", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("fluorine")*2)
|
||||
toxic += round(S.reagents.get_reagent_amount("flourine")*2.5)
|
||||
waterlevel -= round(S.reagents.get_reagent_amount("flourine")*0.5)
|
||||
weedlevel -= rand(1,4)
|
||||
|
||||
// You're an idiot of thinking that one of the most corrosive and deadly gasses would be beneficial
|
||||
if(S.reagents.has_reagent("chlorine", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("chlorine")*1)
|
||||
toxic += round(S.reagents.get_reagent_amount("chlorine")*1.5)
|
||||
waterlevel -= round(S.reagents.get_reagent_amount("chlorine")*0.5)
|
||||
weedlevel -= rand(1,3)
|
||||
|
||||
// White Phosphorous + water -> phosphoric acid. That's not a good thing really. Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much.
|
||||
if(S.reagents.has_reagent("phosphorus", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("phosphorus")*0.75)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("phosphorus")*0.1)
|
||||
waterlevel -= round(S.reagents.get_reagent_amount("phosphorus")*0.5)
|
||||
weedlevel -= rand(1,2)
|
||||
|
||||
// Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though...
|
||||
if(S.reagents.has_reagent("sugar", 1))
|
||||
weedlevel += rand(1,2)
|
||||
pestlevel += rand(1,2)
|
||||
nutrilevel+= round(S.reagents.get_reagent_amount("sugar")*0.1)
|
||||
|
||||
// It is water!
|
||||
if(S.reagents.has_reagent("water", 1))
|
||||
waterlevel += round(S.reagents.get_reagent_amount("water")*1)
|
||||
|
||||
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~
|
||||
if(S.reagents.has_reagent("holywater", 1))
|
||||
waterlevel += round(S.reagents.get_reagent_amount("holywater")*1)
|
||||
health += round(S.reagents.get_reagent_amount("holywater")*0.1)
|
||||
|
||||
// A variety of nutrients are dissolved in club soda, without sugar. These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth.
|
||||
if(S.reagents.has_reagent("sodawater", 1))
|
||||
waterlevel += round(S.reagents.get_reagent_amount("sodawater")*1)
|
||||
health += round(S.reagents.get_reagent_amount("sodawater")*0.1)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("sodawater")*0.1)
|
||||
|
||||
// Man, you guys are retards
|
||||
if(S.reagents.has_reagent("sacid", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("sacid")*1)
|
||||
toxic += round(S.reagents.get_reagent_amount("sacid")*1.5)
|
||||
weedlevel -= rand(1,2)
|
||||
|
||||
// SERIOUSLY
|
||||
if(S.reagents.has_reagent("pacid", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("pacid")*2)
|
||||
toxic += round(S.reagents.get_reagent_amount("pacid")*3)
|
||||
weedlevel -= rand(1,4)
|
||||
|
||||
// Plant-B-Gone is just as bad
|
||||
if(S.reagents.has_reagent("plantbgone", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("plantbgone")*2)
|
||||
toxic -= round(S.reagents.get_reagent_amount("plantbgone")*3)
|
||||
weedlevel -= rand(4,8)
|
||||
|
||||
// Healing
|
||||
if(S.reagents.has_reagent("cryoxadone", 1))
|
||||
health += round(S.reagents.get_reagent_amount("cryoxadone")*3)
|
||||
toxic -= round(S.reagents.get_reagent_amount("cryoxadone")*3)
|
||||
|
||||
// FINALLY IMPLEMENTED, Ammonia is bad ass.
|
||||
if(S.reagents.has_reagent("ammonia", 1))
|
||||
health += round(S.reagents.get_reagent_amount("ammonia")*0.5)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("ammonia")*1)
|
||||
|
||||
// FINALLY IMPLEMENTED, This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
|
||||
if(S.reagents.has_reagent("diethylamine", 1))
|
||||
health += round(S.reagents.get_reagent_amount("diethylamine")*1)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("diethylamine")*2)
|
||||
pestlevel -= rand(1,2)
|
||||
|
||||
// Compost, effectively
|
||||
if(S.reagents.has_reagent("nutriment", 1))
|
||||
health += round(S.reagents.get_reagent_amount("nutriment")*0.5)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("nutriment")*1)
|
||||
|
||||
// Poor man's mutagen.
|
||||
if(S.reagents.has_reagent("radium", 1))
|
||||
health -= round(S.reagents.get_reagent_amount("radium")*1.5)
|
||||
toxic += round(S.reagents.get_reagent_amount("radium")*2)
|
||||
if(S.reagents.has_reagent("radium", 10))
|
||||
switch(rand(100))
|
||||
if (91 to 100) plantdies()
|
||||
if (81 to 90) mutatespecie()
|
||||
if (66 to 80) hardmutate()
|
||||
if (41 to 65) mutate()
|
||||
if (21 to 41) user << "The plants don't seem to react..."
|
||||
if (11 to 20) mutateweed()
|
||||
if (1 to 10) mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
// The best stuff there is. For testing/debugging.
|
||||
if(S.reagents.has_reagent("adminordrazine", 1))
|
||||
waterlevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
health += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
nutrilevel += round(S.reagents.get_reagent_amount("adminordrazine")*1)
|
||||
pestlevel -= rand(1,5)
|
||||
weedlevel -= rand(1,5)
|
||||
if(S.reagents.has_reagent("adminordrazine", 5))
|
||||
switch(rand(100))
|
||||
if (66 to 100) mutatespecie()
|
||||
if (33 to 65) mutateweed()
|
||||
if (1 to 32) mutatepest()
|
||||
else user << "Nothing happens..."
|
||||
|
||||
S.reagents.clear_reagents()
|
||||
if (weedlevel < 0 ) // The following checks are to prevent the stats from going out of bounds.
|
||||
weedlevel = 0
|
||||
if (health < 0 )
|
||||
health = 0
|
||||
if (waterlevel > 100 )
|
||||
waterlevel = 100
|
||||
if (waterlevel < 0 )
|
||||
waterlevel = 0
|
||||
if (toxic < 0 )
|
||||
toxic = 0
|
||||
if (toxic > 100 )
|
||||
toxic = 100
|
||||
if (pestlevel < 0 )
|
||||
pestlevel = 0
|
||||
if (nutrilevel > 10 )
|
||||
nutrilevel = 10
|
||||
else
|
||||
user << "You can't get any extract out of this plant."
|
||||
else
|
||||
user << "There's nothing to apply the solution into."
|
||||
updateicon()
|
||||
|
||||
else if ( istype(O, /obj/item/seeds/) )
|
||||
if(!planted)
|
||||
user.u_equip(O)
|
||||
user << "You plant the [O.name]"
|
||||
dead = 0
|
||||
myseed = O
|
||||
planted = 1
|
||||
age = 1
|
||||
health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
O.loc = src
|
||||
if((user.client && user.s_active != src))
|
||||
user.client.screen -= O
|
||||
O.dropped(user)
|
||||
updateicon()
|
||||
|
||||
else
|
||||
user << "\red The [src] already has seeds in it!"
|
||||
|
||||
else if (istype(O, /obj/item/device/analyzer/plant_analyzer))
|
||||
if(planted && myseed)
|
||||
user << "*** <B>[myseed.plantname]</B> ***" //Carn: now reports the plants growing, not the seeds.
|
||||
user << "-Plant Age: \blue [age]"
|
||||
user << "-Plant Endurance: \blue [myseed.endurance]"
|
||||
user << "-Plant Lifespan: \blue [myseed.lifespan]"
|
||||
if(myseed.yield != -1)
|
||||
user << "-Plant Yield: \blue [myseed.yield]"
|
||||
user << "-Plant Production: \blue [myseed.production]"
|
||||
if(myseed.potency != -1)
|
||||
user << "-Plant Potency: \blue [myseed.potency]"
|
||||
user << "-Weed level: \blue [weedlevel]/10"
|
||||
user << "-Pest level: \blue [pestlevel]/10"
|
||||
user << "-Toxicity level: \blue [toxic]/100"
|
||||
user << "-Water level: \blue [waterlevel]/100"
|
||||
user << "-Nutrition level: \blue [nutrilevel]/10"
|
||||
user << ""
|
||||
else
|
||||
user << "<B>No plant found.</B>"
|
||||
user << "-Weed level: \blue [weedlevel]/10"
|
||||
user << "-Pest level: \blue [pestlevel]/10"
|
||||
user << "-Toxicity level: \blue [toxic]/100"
|
||||
user << "-Water level: \blue [waterlevel]/100"
|
||||
user << "-Nutrition level: \blue [nutrilevel]/10"
|
||||
user << ""
|
||||
|
||||
else if (istype(O, /obj/item/weapon/reagent_containers/spray/plantbgone))
|
||||
if(planted && myseed)
|
||||
health -= rand(5,20)
|
||||
|
||||
if(pestlevel > 0)
|
||||
pestlevel -= 2 // Kill kill kill
|
||||
else
|
||||
pestlevel = 0
|
||||
|
||||
if(weedlevel > 0)
|
||||
weedlevel -= 3 // Kill kill kill
|
||||
else
|
||||
weedlevel = 0
|
||||
toxic += 4 // Oops
|
||||
visible_message("\red <B>\The [src] has been sprayed with \the [O][(user ? " by [user]." : ".")]")
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
updateicon()
|
||||
|
||||
else if (istype(O, /obj/item/weapon/minihoe)) // The minihoe
|
||||
//var/deweeding
|
||||
if(weedlevel > 0)
|
||||
user.visible_message("\red [user] starts uprooting the weeds.", "\red You remove the weeds from the [src].")
|
||||
weedlevel = 0
|
||||
updateicon()
|
||||
src.updateicon()
|
||||
else
|
||||
user << "\red This plot is completely devoid of weeds. It doesn't need uprooting."
|
||||
|
||||
else if ( istype(O, /obj/item/weapon/weedspray) )
|
||||
var/obj/item/weedkiller/myWKiller = O
|
||||
user.u_equip(O)
|
||||
toxic += myWKiller.toxicity
|
||||
weedlevel -= myWKiller.WeedKillStr
|
||||
if (weedlevel < 0 ) // Make sure it won't go overoboard
|
||||
weedlevel = 0
|
||||
if (toxic > 100 ) // Make sure it won't go overoboard
|
||||
toxic = 100
|
||||
user << "You apply the weedkiller solution into the [src]."
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
del(O)
|
||||
updateicon()
|
||||
|
||||
else if (istype(O, /obj/item/weapon/storage/bag/plants))
|
||||
attack_hand(user)
|
||||
var/obj/item/weapon/storage/bag/plants/S = O
|
||||
for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z))
|
||||
if(!S.can_be_inserted(G))
|
||||
return
|
||||
S.handle_item_insertion(G, 1)
|
||||
|
||||
else if ( istype(O, /obj/item/weapon/pestspray) )
|
||||
var/obj/item/pestkiller/myPKiller = O
|
||||
user.u_equip(O)
|
||||
toxic += myPKiller.toxicity
|
||||
pestlevel -= myPKiller.PestKillStr
|
||||
if (pestlevel < 0 ) // Make sure it won't go overoboard
|
||||
pestlevel = 0
|
||||
if (toxic > 100 ) // Make sure it won't go overoboard
|
||||
toxic = 100
|
||||
user << "You apply the pestkiller solution into the [src]."
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
del(O)
|
||||
updateicon()
|
||||
else if(istype(O, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
anchored = !anchored
|
||||
user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
|
||||
else if(istype(O, /obj/item/weapon/shovel))
|
||||
if(istype(src, /obj/machinery/hydroponics/soil))
|
||||
user << "You clear up the [src]!"
|
||||
del(src)
|
||||
else if(istype(O, /obj/item/apiary))
|
||||
if(planted)
|
||||
user << "\red The hydroponics tray is already occupied!"
|
||||
else
|
||||
user.drop_item()
|
||||
del(O)
|
||||
|
||||
var/obj/machinery/apiary/A = new(src.loc)
|
||||
A.icon = src.icon
|
||||
A.icon_state = src.icon_state
|
||||
A.hydrotray_type = src.type
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/attack_tk(mob/user as mob)
|
||||
if(harvest)
|
||||
myseed.harvest(src)
|
||||
else if(dead)
|
||||
planted = 0
|
||||
dead = 0
|
||||
usr << text("You remove the dead plant from the [src].")
|
||||
del(myseed)
|
||||
updateicon()
|
||||
|
||||
/obj/machinery/hydroponics/attack_hand(mob/user as mob)
|
||||
if(istype(usr,/mob/living/silicon)) //How does AI know what plant is?
|
||||
return
|
||||
if(harvest)
|
||||
if(!user in range(1,src))
|
||||
return
|
||||
myseed.harvest()
|
||||
else if(dead)
|
||||
planted = 0
|
||||
dead = 0
|
||||
usr << text("You remove the dead plant from the [src].")
|
||||
del(myseed)
|
||||
updateicon()
|
||||
else
|
||||
if(planted && !dead)
|
||||
usr << text("The [src] has \blue [myseed.plantname] \black planted.")
|
||||
if(health <= (myseed.endurance / 2))
|
||||
usr << text("The plant looks unhealthy")
|
||||
else
|
||||
usr << text("The [src] is empty.")
|
||||
usr << text("Water: [waterlevel]/100")
|
||||
usr << text("Nutrient: [nutrilevel]/10")
|
||||
if(weedlevel >= 5) // Visual aid for those blind
|
||||
usr << text("The [src] is filled with weeds!")
|
||||
if(pestlevel >= 5) // Visual aid for those blind
|
||||
usr << text("The [src] is filled with tiny worms!")
|
||||
usr << text ("") // Empty line for readability.
|
||||
|
||||
|
||||
/obj/item/seeds/proc/harvest(mob/user = usr)
|
||||
var/produce = text2path(productname)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable
|
||||
if(!t_prod) return
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
t_prod.endurance = endurance
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.potency = potency
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/item/seeds/grassseed/harvest(mob/user = usr)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_yield = round(yield*parent.yieldmod)
|
||||
|
||||
if(t_yield > 0)
|
||||
var/obj/item/stack/tile/grass/new_grass = new/obj/item/stack/tile/grass(user.loc)
|
||||
new_grass.amount = t_yield
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/item/seeds/gibtomato/harvest(mob/user = usr)
|
||||
var/produce = text2path(productname)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new produce(user.loc, potency) // User gets a consumable
|
||||
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
t_prod.endurance = endurance
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.potency = potency
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/item/seeds/nettleseed/harvest(mob/user = usr)
|
||||
var/produce = text2path(productname)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
t_prod.endurance = endurance
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.changePotency(potency) // -QualityVan
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/item/seeds/deathnettleseed/harvest(mob/user = usr) //isn't a nettle subclass yet, so
|
||||
var/produce = text2path(productname)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
var/obj/item/weapon/grown/t_prod = new produce(user.loc, potency) // User gets a consumable -QualityVan
|
||||
t_prod.seed = mypath
|
||||
t_prod.species = species
|
||||
t_prod.lifespan = lifespan
|
||||
t_prod.endurance = endurance
|
||||
t_prod.maturation = maturation
|
||||
t_prod.production = production
|
||||
t_prod.yield = yield
|
||||
t_prod.changePotency(potency) // -QualityVan
|
||||
t_prod.plant_type = plant_type
|
||||
t_amount++
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/item/seeds/eggyseed/harvest(mob/user = usr)
|
||||
var/produce = text2path(productname)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
|
||||
while ( t_amount < (yield * parent.yieldmod ))
|
||||
new produce(user.loc)
|
||||
t_amount++
|
||||
|
||||
parent.update_tray()
|
||||
|
||||
/obj/machinery/hydroponics/proc/update_tray(mob/user = usr)
|
||||
harvest = 0
|
||||
lastproduce = age
|
||||
if((yieldmod * myseed.yield) <= 0 || istype(myseed,/obj/item/seeds/replicapod))
|
||||
user << text("\red You fail to harvest anything useful.")
|
||||
else
|
||||
user << text("You harvest from the [myseed.plantname].")
|
||||
if(myseed.oneharvest)
|
||||
del(myseed)
|
||||
planted = 0
|
||||
dead = 0
|
||||
updateicon()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk!
|
||||
name = "soil"
|
||||
icon = 'icons/obj/hydroponics.dmi'
|
||||
icon_state = "soil"
|
||||
density = 0
|
||||
use_power = 0
|
||||
|
||||
updateicon() // Same as normal but with the overlays removed - Cheridan.
|
||||
overlays.Cut()
|
||||
if(planted)
|
||||
if(dead)
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-dead")
|
||||
else if(harvest)
|
||||
if(myseed.plant_type == 2) // Shrooms don't have a -harvest graphic
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[myseed.growthstages]")
|
||||
else
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-harvest")
|
||||
else if(age < myseed.maturation)
|
||||
var/t_growthstate = ((age / myseed.maturation) * myseed.growthstages )
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[round(t_growthstate)]")
|
||||
lastproduce = age
|
||||
else
|
||||
overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-grow[myseed.growthstages]")
|
||||
|
||||
if(!luminosity)
|
||||
if(istype(myseed,/obj/item/seeds/glowshroom))
|
||||
SetLuminosity(round(myseed.potency/10))
|
||||
else
|
||||
SetLuminosity(0)
|
||||
return
|
||||
|
||||
#undef HYDRO_SPEED_MULTIPLIER
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user