mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-13 08:57:01 +01:00
This commit is contained in:
@@ -67,7 +67,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/biogenerator/attackby(obj/item/O, mob/user, params)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.a_intent != INTENT_HELP)
|
||||
return ..()
|
||||
|
||||
if(processing)
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S, mob/user)
|
||||
if(!myseed)
|
||||
return
|
||||
myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines
|
||||
|
||||
// Requires 5 mutagen to possibly change species.// Poor man's mutagen.
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen, 5) || S.has_reagent(/datum/reagent/radium, 10) || S.has_reagent(/datum/reagent/uranium, 10))
|
||||
switch(rand(100))
|
||||
if(91 to 100)
|
||||
adjustHealth(-10)
|
||||
to_chat(user, "<span class='warning'>The plant shrivels and burns.</span>")
|
||||
if(81 to 90)
|
||||
mutatespecie()
|
||||
if(66 to 80)
|
||||
hardmutate()
|
||||
if(41 to 65)
|
||||
mutate()
|
||||
if(21 to 41)
|
||||
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
|
||||
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(/datum/reagent/toxin/mutagen, 2) || S.has_reagent(/datum/reagent/radium, 5) || S.has_reagent(/datum/reagent/uranium, 5))
|
||||
hardmutate()
|
||||
else if(S.has_reagent(/datum/reagent/toxin/mutagen, 1) || S.has_reagent(/datum/reagent/radium, 2) || S.has_reagent(/datum/reagent/uranium, 2))
|
||||
mutate()
|
||||
|
||||
|
||||
// After handling the mutating, we now handle the damage from adding crude radioactives...
|
||||
if(S.has_reagent(/datum/reagent/uranium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/uranium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/uranium) * 2))
|
||||
if(S.has_reagent(/datum/reagent/radium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/radium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/radium) * 3)) // Radium is harsher (OOC: also easier to produce)
|
||||
|
||||
|
||||
// Nutriments
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/eznutriment, 1))
|
||||
yieldmod = 1
|
||||
mutmod = 1
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/eznutriment) * 1))
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/left4zednutriment, 1))
|
||||
yieldmod = 0
|
||||
mutmod = 2
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/left4zednutriment) * 1))
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/robustharvestnutriment, 1))
|
||||
yieldmod = 1.3
|
||||
mutmod = 0
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/robustharvestnutriment) * 1))
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/endurogrow, 1))
|
||||
var/total_transferred = S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow)
|
||||
if(total_transferred >= 20)
|
||||
myseed.adjust_potency(-round(total_transferred / 10))
|
||||
myseed.adjust_yield(round(total_transferred / 20))
|
||||
myseed.adjust_endurance(round(total_transferred / 30))
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The plants don't seem to react...</span>")
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/liquidearthquake, 1))
|
||||
var/total_transferred = S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake)
|
||||
if(total_transferred >= 20)
|
||||
myseed.adjust_weed_chance(round(total_transferred / 10))
|
||||
myseed.adjust_weed_rate(round(total_transferred / 20))
|
||||
myseed.adjust_production(round(total_transferred / 30))
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The plants don't seem to react...</span>")
|
||||
|
||||
// Ambrosia Gaia produces earthsblood.
|
||||
if(S.has_reagent(/datum/reagent/medicine/earthsblood))
|
||||
self_sufficiency_progress += S.get_reagent_amount(/datum/reagent/medicine/earthsblood)
|
||||
if(self_sufficiency_progress >= self_sufficiency_req)
|
||||
become_self_sufficient()
|
||||
else if(!self_sustaining)
|
||||
to_chat(user, "<span class='notice'>[src] warms as it might on a spring day under a genuine Sun.</span>")
|
||||
|
||||
// Antitoxin binds shit pretty well. So the tox goes significantly down
|
||||
if(S.has_reagent(/datum/reagent/medicine/charcoal, 1))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/charcoal) * 2))
|
||||
|
||||
// Toxins, not good for anything
|
||||
if(S.has_reagent(/datum/reagent/toxin, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/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.has_reagent(/datum/reagent/consumable/milk, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/milk) * 0.1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/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.has_reagent(/datum/reagent/consumable/ethanol/beer, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.05))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.25))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.7))
|
||||
|
||||
// Fluorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/fluorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/fluorine) * 2.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 0.5))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Chlorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/chlorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/chlorine) * 1.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 0.5))
|
||||
adjustWeeds(-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.has_reagent(/datum/reagent/phosphorus, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.75))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.1))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.5))
|
||||
adjustWeeds(-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.has_reagent(/datum/reagent/consumable/sugar, 1))
|
||||
adjustWeeds(rand(1,2))
|
||||
adjustPests(rand(1,2))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sugar) * 0.1))
|
||||
|
||||
// It is water!
|
||||
if(S.has_reagent(/datum/reagent/water, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water) * 1))
|
||||
|
||||
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~
|
||||
if(S.has_reagent(/datum/reagent/water/holywater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water/holywater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/water/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.has_reagent(/datum/reagent/consumable/sodawater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
|
||||
// Sulphuric Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1.5))
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
// Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid/fluacid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 3))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Plant-B-Gone is just as bad
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 5))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 6))
|
||||
adjustWeeds(-rand(4,8))
|
||||
|
||||
// Napalm, not known for being good for anything organic
|
||||
if(S.has_reagent(/datum/reagent/napalm, 1))
|
||||
if(!(myseed.resistance_flags & FIRE_PROOF))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/napalm) * 6))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/napalm) * 7))
|
||||
adjustWeeds(-rand(5,9))
|
||||
|
||||
//Weed Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone/weedkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone/weedkiller) * 0.5))
|
||||
//old toxicity was 4, each spray is default 10 (minimal of 5) so 5 and 2.5 are the new ammounts
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
//Pest Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/pestkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/pestkiller) * 0.5))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Healing
|
||||
if(S.has_reagent(/datum/reagent/medicine/cryoxadone, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
|
||||
// Ammonia is bad ass.
|
||||
if(S.has_reagent(/datum/reagent/ammonia, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ammonia) * 1))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.01))
|
||||
|
||||
// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants
|
||||
if(S.has_reagent(/datum/reagent/saltpetre, 1))
|
||||
var/salt = S.get_reagent_amount(/datum/reagent/saltpetre)
|
||||
adjustHealth(round(salt * 0.25))
|
||||
if (myseed)
|
||||
myseed.adjust_production(-round(salt/100)-prob(salt%100))
|
||||
myseed.adjust_potency(round(salt*0.5))
|
||||
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
|
||||
if(S.has_reagent(/datum/reagent/ash, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ash) * 0.25))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ash) * 0.5))
|
||||
adjustWeeds(-1)
|
||||
|
||||
// Diethylamine is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
|
||||
if(S.has_reagent(/datum/reagent/diethylamine, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 2))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 0.02))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Enduro Grow sacrifices potency + yield for endurance
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/endurogrow, 1))
|
||||
myseed.adjust_potency(-round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.1))
|
||||
myseed.adjust_yield(-round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.075))
|
||||
myseed.adjust_endurance(round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.35))
|
||||
|
||||
// Liquid Earthquake increases production speed but increases weeds
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/liquidearthquake, 1))
|
||||
myseed.adjust_weed_rate(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.1))
|
||||
myseed.adjust_weed_chance(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.3))
|
||||
myseed.adjust_production(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.075))
|
||||
|
||||
// Nutriment Compost, effectively
|
||||
if(S.has_reagent(/datum/reagent/consumable/nutriment, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 1))
|
||||
|
||||
// Virusfood Compost for EVERYTHING
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen/mutagenvirusfood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
|
||||
// Blood
|
||||
if(S.has_reagent(/datum/reagent/blood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/blood) * 1))
|
||||
adjustPests(rand(2,4))
|
||||
|
||||
// Strange reagent
|
||||
if(S.has_reagent(/datum/reagent/medicine/strange_reagent, 1))
|
||||
spawnplant()
|
||||
|
||||
// Adminordrazine the best stuff there is. For testing/debugging.
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustPests(-rand(1,5))
|
||||
adjustWeeds(-rand(1,5))
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 5))
|
||||
switch(rand(100))
|
||||
if(66 to 100)
|
||||
mutatespecie()
|
||||
if(33 to 65)
|
||||
mutateweed()
|
||||
if(1 to 32)
|
||||
mutatepest(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Nothing happens...</span>")
|
||||
@@ -10,6 +10,12 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
materials = list(MAT_METAL=30, MAT_GLASS=20)
|
||||
var/scan_mode = FALSE
|
||||
|
||||
/obj/item/plant_analyzer/attack_self(mob/user)
|
||||
. = ..()
|
||||
scan_mode = !scan_mode
|
||||
to_chat(user, "<span class='notice'>You switch [src] to [scan_mode ? "scan for chemical reagents and traits" : "scan for plant growth statistics"].</span>")
|
||||
|
||||
// *************************************
|
||||
// Hydroponics Tools
|
||||
|
||||
@@ -6,45 +6,52 @@
|
||||
pixel_z = 8
|
||||
obj_flags = CAN_BE_HIT | UNIQUE_RENAME
|
||||
circuit = /obj/item/circuitboard/machine/hydroponics
|
||||
var/waterlevel = 100 //The amount of water in the tray (max 100)
|
||||
var/waterlevel = 100 //The amount of water in the tray
|
||||
var/maxwater = 100 //The maximum amount of water in the tray
|
||||
var/nutrilevel = 10 //The amount of nutrient in the tray (max 10)
|
||||
var/nutrilevel = 10 //The amount of nutrient in the tray
|
||||
var/maxnutri = 10 //The maximum nutrient of water in the tray
|
||||
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/pestlevel = 0 //The amount of pests in the tray
|
||||
var/weedlevel = 0 //The amount of weeds in the tray
|
||||
var/yieldmod = 1 //Nutriment's effect on yield
|
||||
var/mutmod = 1 //Nutriment's effect on mutations
|
||||
var/toxic = 0 //Toxicity in the tray?
|
||||
var/age = 0 //Current age
|
||||
var/dead = 0 //Is it dead?
|
||||
var/dead = FALSE //Is it dead?
|
||||
var/plant_health //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/harvest = 0 //Ready to harvest?
|
||||
var/harvest = FALSE //Ready to harvest?
|
||||
var/obj/item/seeds/myseed = null //The currently planted seed
|
||||
var/rating = 1
|
||||
var/unwrenchable = 1
|
||||
var/unwrenchable = TRUE
|
||||
var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant
|
||||
var/mob/lastuser //Last user to add reagents to a tray. Mostly for logging.
|
||||
var/self_sustaining = FALSE //If the tray generates nutrients and water on its own
|
||||
var/using_irrigation = FALSE //If the tray is connected to other trays via irrigation hoses
|
||||
var/self_sufficiency_req = 20 //Required total dose to make a self-sufficient hydro tray. 1:1 with earthsblood.
|
||||
var/self_sufficiency_progress = 0
|
||||
var/self_sustaining = FALSE //If the tray generates nutrients and water on its own
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/constructable
|
||||
name = "hydroponics tray"
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "hydrotray3"
|
||||
|
||||
/obj/machinery/hydroponics/constructable/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated))
|
||||
|
||||
/obj/machinery/hydroponics/constructable/proc/can_be_rotated(mob/user, rotation_type)
|
||||
return !anchored
|
||||
|
||||
/obj/machinery/hydroponics/constructable/RefreshParts()
|
||||
var/tmp_capacity = 0
|
||||
for (var/obj/item/stock_parts/matter_bin/M in component_parts)
|
||||
tmp_capacity += M.rating
|
||||
for (var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
rating = M.rating
|
||||
maxwater = tmp_capacity * 50 // Up to 300
|
||||
maxnutri = tmp_capacity * 5 // Up to 30
|
||||
maxwater = tmp_capacity * 50 // Up to 400
|
||||
maxnutri = (tmp_capacity * 5) + 10 // Up to 50 Maximum
|
||||
|
||||
/obj/machinery/hydroponics/Destroy()
|
||||
if(myseed)
|
||||
@@ -57,12 +64,7 @@
|
||||
// handle opening the panel
|
||||
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
|
||||
return
|
||||
|
||||
// handle deconstructing the machine, if permissible
|
||||
if (I.tool_behaviour == TOOL_CROWBAR && using_irrigation)
|
||||
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
|
||||
return
|
||||
else if(default_deconstruction_crowbar(I))
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
|
||||
return ..()
|
||||
@@ -75,21 +77,22 @@
|
||||
var/atom/a = processing_atoms[1]
|
||||
for(var/step_dir in GLOB.cardinals)
|
||||
var/obj/machinery/hydroponics/h = locate() in get_step(a, step_dir)
|
||||
// Soil plots aren't dense
|
||||
|
||||
if(h && h.using_irrigation && h.density && !(h in connected) && !(h in processing_atoms))
|
||||
processing_atoms += h
|
||||
|
||||
|
||||
processing_atoms -= a
|
||||
connected += a
|
||||
|
||||
return connected
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(!myseed)
|
||||
return ..()
|
||||
if(istype(Proj , /obj/item/projectile/energy/floramut))
|
||||
mutate()
|
||||
return BULLET_ACT_HIT
|
||||
else if(istype(Proj , /obj/item/projectile/energy/florayield))
|
||||
return myseed.bullet_act(Proj)
|
||||
else
|
||||
@@ -104,7 +107,7 @@
|
||||
if(self_sustaining)
|
||||
adjustNutri(1)
|
||||
adjustWater(rand(3,5))
|
||||
adjustWeeds(-2)
|
||||
adjustWeeds(-4) //Was -2. People keep getting confused as to why gaia isn't completely removing weeds
|
||||
adjustPests(-2)
|
||||
adjustToxic(-2)
|
||||
|
||||
@@ -118,10 +121,10 @@
|
||||
|
||||
needs_update = 1
|
||||
|
||||
|
||||
//Nutrients//////////////////////////////////////////////////////////////
|
||||
// Nutrients deplete slowly
|
||||
if(prob(50))
|
||||
adjustNutri(-1 / rating)
|
||||
// Nutrients should deplete at a constant rate
|
||||
adjustNutri(-1 / rating)
|
||||
|
||||
// Lack of nutrients hurts non-weeds
|
||||
if(nutrilevel <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
|
||||
@@ -141,16 +144,19 @@
|
||||
|
||||
//Water//////////////////////////////////////////////////////////////////
|
||||
// Drink random amount of water
|
||||
adjustWater(-rand(1,6) / rating)
|
||||
if(waterlevel > 10)
|
||||
adjustWater(-rand(3,4) / rating)
|
||||
else
|
||||
adjustWater(-1 / rating) //Deplete water slower if we're dry. Just for some realism
|
||||
|
||||
// If the plant is dry, it loses health pretty fast, unless mushroom
|
||||
if(waterlevel <= 10 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
|
||||
if(waterlevel <= 15 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
|
||||
adjustHealth(-rand(0,1) / rating)
|
||||
if(waterlevel <= 0)
|
||||
adjustHealth(-rand(0,2) / rating)
|
||||
|
||||
// Sufficient water level and nutrient level = plant healthy but also spawns weeds
|
||||
else if(waterlevel > 10 && nutrilevel > 0)
|
||||
else if(waterlevel > 15 && nutrilevel > 0)
|
||||
adjustHealth(rand(1,2) / rating)
|
||||
if(myseed && prob(myseed.weed_chance))
|
||||
adjustWeeds(myseed.weed_rate)
|
||||
@@ -204,19 +210,20 @@
|
||||
|
||||
// If the plant is too old, lose health fast
|
||||
if(age > myseed.lifespan)
|
||||
adjustHealth(-rand(1,5) / rating)
|
||||
adjustHealth(-rand(3,5) / rating)
|
||||
|
||||
// Harvest code
|
||||
if(age > myseed.production && (age - lastproduce) > myseed.production && (!harvest && !dead))
|
||||
nutrimentMutation()
|
||||
if(age > myseed.production*2) //Start mutating stats every process cycle if we can be harvested, only after a while
|
||||
nutrimentMutation()
|
||||
if(myseed && myseed.yield != -1) // Unharvestable shouldn't be harvested
|
||||
harvest = 1
|
||||
harvest = TRUE
|
||||
else
|
||||
lastproduce = age
|
||||
if(prob(5)) // On each tick, there's a 5 percent chance the pest population will increase
|
||||
adjustPests(1 / rating)
|
||||
else
|
||||
if(waterlevel > 10 && nutrilevel > 0 && prob(10)) // If there's no plant, the percentage chance is 10%
|
||||
if(waterlevel > 10 && reagents.total_volume > 0 && prob(10)) // If there's no plant, the percentage chance is 10%
|
||||
adjustWeeds(1 / rating)
|
||||
|
||||
// Weeeeeeeeeeeeeeedddssss
|
||||
@@ -238,22 +245,22 @@
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/proc/nutrimentMutation()
|
||||
if (mutmod == 0)
|
||||
return
|
||||
if (mutmod == 1)
|
||||
if(prob(80)) //80%
|
||||
mutate()
|
||||
else if(prob(75)) //15%
|
||||
hardmutate()
|
||||
return
|
||||
if (mutmod == 2)
|
||||
if(prob(50)) //50%
|
||||
mutate()
|
||||
else if(prob(50)) //25%
|
||||
hardmutate()
|
||||
else if(prob(50)) //12.5%
|
||||
mutatespecie()
|
||||
return
|
||||
switch (mutmod)
|
||||
|
||||
//0 does nothing
|
||||
|
||||
if(1)
|
||||
if(prob(80))
|
||||
mutate()
|
||||
else if(prob(75)) //15%
|
||||
hardmutate()
|
||||
if(2)
|
||||
if(prob(50))
|
||||
mutate()
|
||||
else if(prob(50)) //25%
|
||||
hardmutate()
|
||||
else if(prob(50)) //12.5%
|
||||
mutatespecie()
|
||||
return
|
||||
|
||||
/obj/machinery/hydroponics/update_icon()
|
||||
@@ -301,7 +308,7 @@
|
||||
else
|
||||
plant_overlay.icon_state = myseed.icon_harvest
|
||||
else
|
||||
var/t_growthstate = min(round((age / myseed.maturation) * myseed.growthstages), myseed.growthstages)
|
||||
var/t_growthstate = clamp(round((age / myseed.maturation) * myseed.growthstages), 1, myseed.growthstages)
|
||||
plant_overlay.icon_state = "[myseed.icon_grow][t_growthstate]"
|
||||
add_overlay(plant_overlay)
|
||||
|
||||
@@ -344,6 +351,9 @@
|
||||
. += "<span class='warning'>It's filled with weeds!</span>"
|
||||
if(pestlevel >= 5)
|
||||
. += "<span class='warning'>It's filled with tiny worms!</span>"
|
||||
to_chat(user, "" )
|
||||
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
|
||||
dead = 0
|
||||
@@ -379,7 +389,11 @@
|
||||
pestlevel = 0 // Reset
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>The [oldPlantName] is overtaken by some [myseed.plantname]!</span>")
|
||||
|
||||
name = "hydroponics tray ([myseed.plantname])"
|
||||
if(myseed.product)
|
||||
desc = initial(myseed.product.desc)
|
||||
else
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) // Mutates the current seed
|
||||
if(!myseed)
|
||||
@@ -413,7 +427,7 @@
|
||||
sleep(5) // Wait a while
|
||||
update_icon()
|
||||
visible_message("<span class='warning'>[oldPlantName] suddenly mutates into [myseed.plantname]!</span>")
|
||||
|
||||
name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
|
||||
if( weedlevel > 5 )
|
||||
@@ -436,15 +450,14 @@
|
||||
else
|
||||
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
|
||||
/obj/machinery/hydroponics/proc/plantdies()
|
||||
plant_health = 0
|
||||
harvest = 0
|
||||
harvest = FALSE
|
||||
pestlevel = 0 // Pests die
|
||||
lastproduce = 0
|
||||
if(!dead)
|
||||
update_icon()
|
||||
dead = 1
|
||||
|
||||
dead = TRUE
|
||||
|
||||
|
||||
/obj/machinery/hydroponics/proc/mutatepest(mob/user)
|
||||
@@ -456,250 +469,6 @@
|
||||
else
|
||||
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)
|
||||
myseed.on_chem_reaction(S) //In case seeds have some special interactions with special chems, currently only used by vines
|
||||
|
||||
// Requires 5 mutagen to possibly change species.// Poor man's mutagen.
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen, 5) || S.has_reagent(/datum/reagent/radium, 10) || S.has_reagent(/datum/reagent/uranium, 10))
|
||||
switch(rand(100))
|
||||
if(91 to 100)
|
||||
adjustHealth(-10)
|
||||
to_chat(user, "<span class='warning'>The plant shrivels and burns.</span>")
|
||||
if(81 to 90)
|
||||
mutatespecie()
|
||||
if(66 to 80)
|
||||
hardmutate()
|
||||
if(41 to 65)
|
||||
mutate()
|
||||
if(21 to 41)
|
||||
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
|
||||
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(/datum/reagent/toxin/mutagen, 2) || S.has_reagent(/datum/reagent/radium, 5) || S.has_reagent(/datum/reagent/uranium, 5))
|
||||
hardmutate()
|
||||
else if(S.has_reagent(/datum/reagent/toxin/mutagen, 1) || S.has_reagent(/datum/reagent/radium, 2) || S.has_reagent(/datum/reagent/uranium, 2))
|
||||
mutate()
|
||||
|
||||
// After handling the mutating, we now handle the damage from adding crude radioactives...
|
||||
if(S.has_reagent(/datum/reagent/uranium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/uranium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/uranium) * 2))
|
||||
if(S.has_reagent(/datum/reagent/radium, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/radium) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/radium) * 3)) // Radium is harsher (OOC: also easier to produce)
|
||||
|
||||
// Nutriments
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/eznutriment, 1))
|
||||
yieldmod = 1
|
||||
mutmod = 1
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/eznutriment) * 1))
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/left4zednutriment, 1))
|
||||
yieldmod = 0
|
||||
mutmod = 2
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/left4zednutriment) * 1))
|
||||
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/robustharvestnutriment, 1))
|
||||
yieldmod = 1.3
|
||||
mutmod = 0
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/plantnutriment/robustharvestnutriment) *1 ))
|
||||
|
||||
// Ambrosia Gaia produces earthsblood.
|
||||
if(S.has_reagent(/datum/reagent/medicine/earthsblood))
|
||||
self_sufficiency_progress += S.get_reagent_amount(/datum/reagent/medicine/earthsblood)
|
||||
if(self_sufficiency_progress >= self_sufficiency_req)
|
||||
become_self_sufficient()
|
||||
else if(!self_sustaining)
|
||||
to_chat(user, "<span class='notice'>[src] warms as it might on a spring day under a genuine Sun.</span>")
|
||||
|
||||
// Antitoxin binds shit pretty well. So the tox goes significantly down
|
||||
if(S.has_reagent(/datum/reagent/medicine/charcoal, 1))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/charcoal) * 2))
|
||||
|
||||
// Toxins, not good for anything
|
||||
if(S.has_reagent(/datum/reagent/toxin, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/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.has_reagent(/datum/reagent/consumable/milk, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/milk) * 0.1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/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.has_reagent(/datum/reagent/consumable/ethanol/beer, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.05))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.25))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/ethanol/beer) * 0.7))
|
||||
|
||||
// Fluorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/fluorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/fluorine) * 2.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/fluorine) * 0.5))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Chlorine one of the most corrosive and deadly gasses
|
||||
if(S.has_reagent(/datum/reagent/chlorine, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/chlorine) * 1.5))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/chlorine) * 0.5))
|
||||
adjustWeeds(-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.has_reagent(/datum/reagent/phosphorus, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.75))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.1))
|
||||
adjustWater(-round(S.get_reagent_amount(/datum/reagent/phosphorus) * 0.5))
|
||||
adjustWeeds(-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.has_reagent(/datum/reagent/consumable/sugar, 1))
|
||||
adjustWeeds(rand(1,2))
|
||||
adjustPests(rand(1,2))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sugar) * 0.1))
|
||||
|
||||
// It is water!
|
||||
if(S.has_reagent(/datum/reagent/water, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water) * 1))
|
||||
|
||||
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~
|
||||
if(S.has_reagent(/datum/reagent/water/holywater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/water/holywater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/water/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.has_reagent(/datum/reagent/consumable/sodawater, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/sodawater) * 0.1))
|
||||
|
||||
// Sulphuric Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid) * 1.5))
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
// Acid
|
||||
if(S.has_reagent(/datum/reagent/toxin/acid/fluacid, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 2))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/acid/fluacid) * 3))
|
||||
adjustWeeds(-rand(1,4))
|
||||
|
||||
// Plant-B-Gone is just as bad
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone, 1))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 5))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone) * 6))
|
||||
adjustWeeds(-rand(4,8))
|
||||
|
||||
// Napalm, not known for being good for anything organic
|
||||
if(S.has_reagent(/datum/reagent/napalm, 1))
|
||||
if(!(myseed.resistance_flags & FIRE_PROOF))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/napalm) * 6))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/napalm) * 7))
|
||||
adjustWeeds(-rand(5,9))
|
||||
|
||||
//Weed Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/plantbgone/weedkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/plantbgone/weedkiller) * 0.5))
|
||||
//old toxicity was 4, each spray is default 10 (minimal of 5) so 5 and 2.5 are the new ammounts
|
||||
adjustWeeds(-rand(1,2))
|
||||
|
||||
//Pest Spray
|
||||
if(S.has_reagent(/datum/reagent/toxin/pestkiller, 1))
|
||||
adjustToxic(round(S.get_reagent_amount(/datum/reagent/toxin/pestkiller) * 0.5))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Healing
|
||||
if(S.has_reagent(/datum/reagent/medicine/cryoxadone, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
adjustToxic(-round(S.get_reagent_amount(/datum/reagent/medicine/cryoxadone) * 3))
|
||||
|
||||
// Ammonia is bad ass.
|
||||
if(S.has_reagent(/datum/reagent/ammonia, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ammonia) * 1))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/ammonia) * 0.01))
|
||||
|
||||
// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants
|
||||
if(S.has_reagent(/datum/reagent/saltpetre, 1))
|
||||
var/salt = S.get_reagent_amount(/datum/reagent/saltpetre)
|
||||
adjustHealth(round(salt * 0.25))
|
||||
if (myseed)
|
||||
myseed.adjust_production(-round(salt/100)-prob(salt%100))
|
||||
myseed.adjust_potency(round(salt*0.5))
|
||||
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
|
||||
if(S.has_reagent(/datum/reagent/ash, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/ash) * 0.25))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/ash) * 0.5))
|
||||
adjustWeeds(-1)
|
||||
|
||||
// Diethylamine is more bad ass, and pests get hurt by the corrosive nature of it, not the plant.
|
||||
if(S.has_reagent(/datum/reagent/diethylamine, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 2))
|
||||
if(myseed)
|
||||
myseed.adjust_yield(round(S.get_reagent_amount(/datum/reagent/diethylamine) * 0.02))
|
||||
adjustPests(-rand(1,2))
|
||||
|
||||
// Enduro Grow sacrifices potency + yield for endurance
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/endurogrow, 1))
|
||||
myseed.adjust_potency(-round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.1))
|
||||
myseed.adjust_yield(-round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.075))
|
||||
myseed.adjust_endurance(round(S.get_reagent_amount(/datum/reagent/plantnutriment/endurogrow) * 0.35))
|
||||
|
||||
// Liquid Earthquake increases production speed but increases weeds
|
||||
if(S.has_reagent(/datum/reagent/plantnutriment/liquidearthquake, 1))
|
||||
myseed.adjust_weed_rate(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.1))
|
||||
myseed.adjust_weed_chance(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.3))
|
||||
myseed.adjust_production(round(S.get_reagent_amount(/datum/reagent/plantnutriment/liquidearthquake) * 0.075))
|
||||
|
||||
// Nutriment Compost, effectively
|
||||
if(S.has_reagent(/datum/reagent/consumable/nutriment, 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 0.5))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/nutriment) * 1))
|
||||
|
||||
// Virusfood Compost for EVERYTHING
|
||||
if(S.has_reagent(/datum/reagent/toxin/mutagen/mutagenvirusfood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
adjustHealth(-round(S.get_reagent_amount(/datum/reagent/toxin/mutagen/mutagenvirusfood) * 0.5))
|
||||
|
||||
// Blood
|
||||
if(S.has_reagent(/datum/reagent/blood, 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/blood) * 1))
|
||||
adjustPests(rand(2,4))
|
||||
|
||||
// Strange reagent
|
||||
if(S.has_reagent(/datum/reagent/medicine/strange_reagent, 1))
|
||||
spawnplant()
|
||||
|
||||
// Adminordrazine the best stuff there is. For testing/debugging.
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 1))
|
||||
adjustWater(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustHealth(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustNutri(round(S.get_reagent_amount(/datum/reagent/medicine/adminordrazine) * 1))
|
||||
adjustPests(-rand(1,5))
|
||||
adjustWeeds(-rand(1,5))
|
||||
if(S.has_reagent(/datum/reagent/medicine/adminordrazine, 5))
|
||||
switch(rand(100))
|
||||
if(66 to 100)
|
||||
mutatespecie()
|
||||
if(33 to 65)
|
||||
mutateweed()
|
||||
if(1 to 32)
|
||||
mutatepest(user)
|
||||
else
|
||||
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/reagent_containers) ) // Syringe stuff (and other reagent containers now too)
|
||||
@@ -722,6 +491,10 @@
|
||||
var/transfer_amount
|
||||
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill))
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks))
|
||||
var/obj/item/reagent_containers/food/snacks/R = reagent_source
|
||||
if (R.trash)
|
||||
R.generate_trash(get_turf(user))
|
||||
visi_msg="[user] composts [reagent_source], spreading it through [target]"
|
||||
transfer_amount = reagent_source.reagents.total_volume
|
||||
else
|
||||
@@ -733,43 +506,39 @@
|
||||
syr.mode = 0
|
||||
else if(istype(reagent_source, /obj/item/reagent_containers/spray/))
|
||||
visi_msg="[user] sprays [target] with [reagent_source]"
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
irrigate = 1
|
||||
//playsound(loc, 'sound/effect/spray3.ogg', 50, 1, 6) //this sound displeases my ears immensely
|
||||
else if(transfer_amount) // Droppers, cans, beakers, what have you.
|
||||
visi_msg="[user] uses [reagent_source] on [target]"
|
||||
irrigate = 1
|
||||
// Beakers, bottles, buckets, etc.
|
||||
if(reagent_source.is_drainable())
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
|
||||
|
||||
if(irrigate && transfer_amount > 30 && reagent_source.reagents.total_volume >= 30 && using_irrigation)
|
||||
trays = FindConnected()
|
||||
if (trays.len > 1)
|
||||
visi_msg += ", setting off the irrigation system"
|
||||
visi_msg += ", setting off the irrigation system."
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE)
|
||||
|
||||
if(visi_msg)
|
||||
visible_message("<span class='notice'>[visi_msg].</span>")
|
||||
visible_message("<span class='notice'>[visi_msg]</span>")
|
||||
|
||||
var/split = round(transfer_amount/trays.len)
|
||||
|
||||
|
||||
for(var/obj/machinery/hydroponics/H in trays)
|
||||
//cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener
|
||||
|
||||
var/datum/reagents/S = new /datum/reagents() //This is a strange way, but I don't know of a better one so I can't fix it at the moment...
|
||||
S.my_atom = H
|
||||
|
||||
reagent_source.reagents.trans_to(S,split)
|
||||
if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill))
|
||||
qdel(reagent_source)
|
||||
|
||||
H.applyChemicals(S, user)
|
||||
|
||||
lastuser = user
|
||||
S.clear_reagents()
|
||||
qdel(S)
|
||||
H.update_icon()
|
||||
if(reagent_source) // If the source wasn't composted and destroyed
|
||||
reagent_source.update_icon()
|
||||
return 1
|
||||
|
||||
else if(istype(O, /obj/item/seeds) && !istype(O, /obj/item/seeds/sample))
|
||||
if(!myseed)
|
||||
@@ -778,22 +547,38 @@
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You plant [O].</span>")
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
myseed = O
|
||||
name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
age = 1
|
||||
plant_health = myseed.endurance
|
||||
lastcycle = world.time
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] already has seeds in it!</span>")
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/plant_analyzer))
|
||||
var/obj/item/plant_analyzer/P_analyzer = O
|
||||
if(myseed)
|
||||
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)
|
||||
to_chat(user, text_string)
|
||||
if(!P_analyzer.scan_mode)
|
||||
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)
|
||||
to_chat(user, text_string)
|
||||
to_chat(user, "*---------*")
|
||||
else
|
||||
to_chat(user, "- <B>Plant Reagents</B> -")
|
||||
to_chat(user, "*---------*")
|
||||
if(!LAZYLEN(myseed.reagents_add))
|
||||
to_chat(user, "<span class='notice'>- No reagents -</span>")
|
||||
to_chat(user, "*---------*")
|
||||
return
|
||||
for(var/datum/plant_gene/reagent/G in myseed.genes)
|
||||
to_chat(user, "<span class='notice'>- [G.get_name()] -</span>")
|
||||
to_chat(user, "*---------*")
|
||||
else
|
||||
to_chat(user, "<B>No plant found.</B>")
|
||||
to_chat(user, "- Weed level: <span class='notice'>[weedlevel] / 10</span>")
|
||||
@@ -802,6 +587,7 @@
|
||||
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, "")
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/cultivator))
|
||||
if(weedlevel > 0)
|
||||
@@ -845,6 +631,8 @@
|
||||
harvest = FALSE //To make sure they can't just put in another seed and insta-harvest it
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
weedlevel = 0 //Has a side effect of cleaning up those nasty weeds
|
||||
update_icon()
|
||||
|
||||
@@ -869,20 +657,22 @@
|
||||
if(issilicon(user)) //How does AI know what plant is?
|
||||
return
|
||||
if(harvest)
|
||||
return myseed.harvest(user)
|
||||
myseed.harvest(user)
|
||||
return
|
||||
|
||||
else if(dead)
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
to_chat(user, "<span class='notice'>You remove the dead plant from [src].</span>")
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
update_icon()
|
||||
name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
else
|
||||
if(user)
|
||||
examine(user)
|
||||
|
||||
/obj/machinery/hydroponics/proc/update_tray(mob/user)
|
||||
harvest = 0
|
||||
harvest = FALSE
|
||||
lastproduce = age
|
||||
if(istype(myseed, /obj/item/seeds/replicapod))
|
||||
to_chat(user, "<span class='notice'>You harvest from the [myseed.plantname].</span>")
|
||||
@@ -893,31 +683,33 @@
|
||||
if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest))
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
dead = 0
|
||||
dead = FALSE
|
||||
name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name)
|
||||
desc = initial(desc)
|
||||
update_icon()
|
||||
|
||||
/// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds.///
|
||||
/obj/machinery/hydroponics/proc/adjustNutri(adjustamt)
|
||||
nutrilevel = CLAMP(nutrilevel + adjustamt, 0, maxnutri)
|
||||
nutrilevel = clamp(nutrilevel + adjustamt, 0, maxnutri)
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustWater(adjustamt)
|
||||
waterlevel = CLAMP(waterlevel + adjustamt, 0, maxwater)
|
||||
waterlevel = clamp(waterlevel + adjustamt, 0, maxwater)
|
||||
|
||||
if(adjustamt>0)
|
||||
adjustToxic(-round(adjustamt/4))//Toxicity dilutation code. The more water you put in, the lesser the toxin concentration.
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustHealth(adjustamt)
|
||||
if(myseed && !dead)
|
||||
plant_health = CLAMP(plant_health + adjustamt, 0, myseed.endurance)
|
||||
plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance)
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustToxic(adjustamt)
|
||||
toxic = CLAMP(toxic + adjustamt, 0, 100)
|
||||
toxic = clamp(toxic + adjustamt, 0, 100)
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustPests(adjustamt)
|
||||
pestlevel = CLAMP(pestlevel + adjustamt, 0, 10)
|
||||
pestlevel = clamp(pestlevel + adjustamt, 0, 10)
|
||||
|
||||
/obj/machinery/hydroponics/proc/adjustWeeds(adjustamt)
|
||||
weedlevel = CLAMP(weedlevel + adjustamt, 0, 10)
|
||||
weedlevel = clamp(weedlevel + adjustamt, 0, 10)
|
||||
|
||||
/obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood
|
||||
var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato)
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
var/plantname = "Plants" // Name of plant when planted.
|
||||
var/product // A type path. The thing that is created when the plant is harvested.
|
||||
var/obj/item/product // A type path. The thing that is created when the plant is harvested.
|
||||
var/productdesc
|
||||
var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden.
|
||||
|
||||
var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed.
|
||||
@@ -26,7 +27,7 @@
|
||||
var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom.
|
||||
var/list/mutatelist = list() // The type of plants that this plant can mutate into.
|
||||
var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info.
|
||||
var/list/forbiddengenes = list() // Plant genes that the seed may be forbidden from having.
|
||||
var/list/forbiddengenes = list() // Genes the seed cannot have, such as perennial growth
|
||||
var/list/reagents_add = list()
|
||||
// A list of reagents to add to product.
|
||||
// Format: "reagent_id" = potency multiplier
|
||||
@@ -70,6 +71,14 @@
|
||||
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
|
||||
reagents_from_genes() //quality coding
|
||||
|
||||
/obj/item/seeds/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use a pen on it to rename it or change its description.</span>"
|
||||
if(reagents_add && user.can_see_reagents())
|
||||
. += "<span class='notice'>- Plant Reagents -</span>"
|
||||
for(var/datum/plant_gene/reagent/G in genes)
|
||||
. += "<span class='notice'>- [G.get_name()] -</span>"
|
||||
|
||||
/obj/item/seeds/proc/Copy()
|
||||
var/obj/item/seeds/S = new type(null, 1)
|
||||
// Copy all the stats
|
||||
@@ -81,6 +90,10 @@
|
||||
S.potency = potency
|
||||
S.weed_rate = weed_rate
|
||||
S.weed_chance = weed_chance
|
||||
S.name = name
|
||||
S.plantname = plantname
|
||||
S.desc = desc
|
||||
S.productdesc = productdesc
|
||||
S.genes = list()
|
||||
for(var/g in genes)
|
||||
var/datum/plant_gene/G = g
|
||||
@@ -91,8 +104,9 @@
|
||||
/obj/item/seeds/proc/get_gene(typepath)
|
||||
return (locate(typepath) in genes)
|
||||
|
||||
obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
return (locate(typepath) in forbiddengenes)
|
||||
|
||||
/obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
return (typepath in forbiddengenes)
|
||||
|
||||
|
||||
/obj/item/seeds/proc/reagents_from_genes()
|
||||
@@ -121,9 +135,10 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
adjust_weed_rate(rand(-wrmut, wrmut))
|
||||
adjust_weed_chance(rand(-wcmut, wcmut))
|
||||
if(prob(traitmut))
|
||||
add_random_traits(1, 1)
|
||||
|
||||
|
||||
if(prob(50))
|
||||
add_random_traits(1, 1)
|
||||
else
|
||||
add_random_reagents(1, 1)
|
||||
|
||||
/obj/item/seeds/bullet_act(obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables.
|
||||
if(istype(Proj, /obj/item/projectile/energy/florayield))
|
||||
@@ -136,6 +151,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
adjust_yield(1 * rating)
|
||||
else if(prob(1/(yield * yield) * 100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2...
|
||||
adjust_yield(1 * rating)
|
||||
return BULLET_ACT_HIT
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -156,24 +172,33 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
|
||||
/obj/item/seeds/proc/harvest(mob/user)
|
||||
var/obj/machinery/hydroponics/parent = loc //for ease of access
|
||||
var/t_amount = 0
|
||||
var/list/result = list()
|
||||
var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK
|
||||
var/t_amount = 0 ///Count used for creating the correct amount of results to the harvest.
|
||||
var/list/result = list() ///List of plants all harvested from the same batch.
|
||||
var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //Tile of the harvester to deposit the growables, needed for TK
|
||||
var/product_name
|
||||
while(t_amount < getYield())
|
||||
var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src)
|
||||
var/product_count = getYield()
|
||||
|
||||
while(t_amount < product_count)
|
||||
var/obj/item/reagent_containers/food/snacks/grown/t_prod
|
||||
t_prod = new product(output_loc, src)
|
||||
if(parent.myseed.plantname != initial(parent.myseed.plantname))
|
||||
t_prod.name = lowertext(parent.myseed.plantname)
|
||||
if(productdesc)
|
||||
t_prod.desc = productdesc
|
||||
t_prod.seed.name = parent.myseed.name
|
||||
t_prod.seed.desc = parent.myseed.desc
|
||||
t_prod.seed.plantname = parent.myseed.plantname
|
||||
result.Add(t_prod) // User gets a consumable
|
||||
if(!t_prod)
|
||||
return
|
||||
t_amount++
|
||||
product_name = t_prod.name
|
||||
product_name = parent.myseed.plantname
|
||||
if(getYield() >= 1)
|
||||
SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name)
|
||||
SSblackbox.record_feedback("tally", "food_harvested", product_count, product_name)
|
||||
parent.update_tray(user)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
/obj/item/seeds/proc/prepare_result(var/obj/item/reagent_containers/food/snacks/grown/T)
|
||||
if(!T.reagents)
|
||||
CRASH("[T] has no reagents.")
|
||||
@@ -194,7 +219,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
/// Setters procs ///
|
||||
/obj/item/seeds/proc/adjust_yield(adjustamt)
|
||||
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
|
||||
yield = CLAMP(yield + adjustamt, 0, 10)
|
||||
yield = clamp(yield + adjustamt, 0, 10)
|
||||
|
||||
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
|
||||
yield = 1 // Mushrooms always have a minimum yield of 1.
|
||||
@@ -203,39 +228,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
C.value = yield
|
||||
|
||||
/obj/item/seeds/proc/adjust_lifespan(adjustamt)
|
||||
lifespan = CLAMP(lifespan + adjustamt, 10, 100)
|
||||
lifespan = clamp(lifespan + adjustamt, 10, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
|
||||
if(C)
|
||||
C.value = lifespan
|
||||
|
||||
/obj/item/seeds/proc/adjust_endurance(adjustamt)
|
||||
endurance = CLAMP(endurance + adjustamt, 10, 100)
|
||||
endurance = clamp(endurance + adjustamt, 10, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
|
||||
if(C)
|
||||
C.value = endurance
|
||||
|
||||
/obj/item/seeds/proc/adjust_production(adjustamt)
|
||||
if(yield != -1)
|
||||
production = CLAMP(production + adjustamt, 1, 10)
|
||||
production = clamp(production + adjustamt, 1, 10)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
|
||||
if(C)
|
||||
C.value = production
|
||||
|
||||
/obj/item/seeds/proc/adjust_potency(adjustamt)
|
||||
if(potency != -1)
|
||||
potency = CLAMP(potency + adjustamt, 0, 100)
|
||||
potency = clamp(potency + adjustamt, 0, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
|
||||
if(C)
|
||||
C.value = potency
|
||||
|
||||
/obj/item/seeds/proc/adjust_weed_rate(adjustamt)
|
||||
weed_rate = CLAMP(weed_rate + adjustamt, 0, 10)
|
||||
weed_rate = clamp(weed_rate + adjustamt, 0, 10)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
|
||||
if(C)
|
||||
C.value = weed_rate
|
||||
|
||||
/obj/item/seeds/proc/adjust_weed_chance(adjustamt)
|
||||
weed_chance = CLAMP(weed_chance + adjustamt, 0, 67)
|
||||
weed_chance = clamp(weed_chance + adjustamt, 0, 67)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
|
||||
if(C)
|
||||
C.value = weed_chance
|
||||
@@ -244,7 +269,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
|
||||
/obj/item/seeds/proc/set_yield(adjustamt)
|
||||
if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable
|
||||
yield = CLAMP(adjustamt, 0, 10)
|
||||
yield = clamp(adjustamt, 0, 10)
|
||||
|
||||
if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
|
||||
yield = 1 // Mushrooms always have a minimum yield of 1.
|
||||
@@ -253,39 +278,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
C.value = yield
|
||||
|
||||
/obj/item/seeds/proc/set_lifespan(adjustamt)
|
||||
lifespan = CLAMP(adjustamt, 10, 100)
|
||||
lifespan = clamp(adjustamt, 10, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan)
|
||||
if(C)
|
||||
C.value = lifespan
|
||||
|
||||
/obj/item/seeds/proc/set_endurance(adjustamt)
|
||||
endurance = CLAMP(adjustamt, 10, 100)
|
||||
endurance = clamp(adjustamt, 10, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance)
|
||||
if(C)
|
||||
C.value = endurance
|
||||
|
||||
/obj/item/seeds/proc/set_production(adjustamt)
|
||||
if(yield != -1)
|
||||
production = CLAMP(adjustamt, 1, 10)
|
||||
production = clamp(adjustamt, 1, 10)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production)
|
||||
if(C)
|
||||
C.value = production
|
||||
|
||||
/obj/item/seeds/proc/set_potency(adjustamt)
|
||||
if(potency != -1)
|
||||
potency = CLAMP(adjustamt, 0, 100)
|
||||
potency = clamp(adjustamt, 0, 100)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency)
|
||||
if(C)
|
||||
C.value = potency
|
||||
|
||||
/obj/item/seeds/proc/set_weed_rate(adjustamt)
|
||||
weed_rate = CLAMP(adjustamt, 0, 10)
|
||||
weed_rate = clamp(adjustamt, 0, 10)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate)
|
||||
if(C)
|
||||
C.value = weed_rate
|
||||
|
||||
/obj/item/seeds/proc/set_weed_chance(adjustamt)
|
||||
weed_chance = CLAMP(adjustamt, 0, 67)
|
||||
weed_chance = clamp(adjustamt, 0, 67)
|
||||
var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance)
|
||||
if(C)
|
||||
C.value = weed_chance
|
||||
@@ -320,9 +345,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
continue
|
||||
all_traits += " [traits.get_name()]"
|
||||
text += "- Plant Traits:[all_traits]\n"
|
||||
|
||||
text += "*---------*"
|
||||
|
||||
return text
|
||||
|
||||
/obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) //in case seeds have some special interaction with special chems
|
||||
@@ -331,19 +354,73 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/plant_analyzer))
|
||||
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>")
|
||||
var/text = get_analyzer_text()
|
||||
if(text)
|
||||
to_chat(user, "<span class='notice'>[text]</span>")
|
||||
|
||||
var/text
|
||||
var/obj/item/plant_analyzer/P_analyzer = O
|
||||
if(!P_analyzer.scan_mode)
|
||||
text = get_analyzer_text()
|
||||
if(text)
|
||||
to_chat(user, "<span class='notice'>[text]</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>- Plant Reagents -</span>")
|
||||
to_chat(user, "<span class='notice'>*---------*</span>")
|
||||
if(!LAZYLEN(reagents_add))
|
||||
to_chat(user, "<span class='notice'>- No reagents -</span>")
|
||||
to_chat(user, "*---------*")
|
||||
return
|
||||
for(var/datum/plant_gene/reagent/G in genes)
|
||||
to_chat(user, "<span class='notice'>- [G.get_name()] -</span>")
|
||||
to_chat(user, "<span class='notice'>*---------*</span>")
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/pen))
|
||||
var/choice = input("What would you like to change?") in list("Plant Name", "Seed Description", "Product Description", "Cancel")
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
switch(choice)
|
||||
if("Plant Name")
|
||||
var/newplantname = reject_bad_text(stripped_input(user, "Write a new plant name:", name, plantname))
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if (length(newplantname) > 20)
|
||||
to_chat(user, "That name is too long!")
|
||||
return
|
||||
if(!newplantname)
|
||||
to_chat(user, "That name is invalid.")
|
||||
return
|
||||
else
|
||||
name = "[lowertext(newplantname)]"
|
||||
plantname = newplantname
|
||||
if("Seed Description")
|
||||
var/newdesc = stripped_input(user, "Write a new description:", name, desc)
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if (length(newdesc) > 180)
|
||||
to_chat(user, "That description is too long!")
|
||||
return
|
||||
if(!newdesc)
|
||||
to_chat(user, "That description is invalid.")
|
||||
return
|
||||
else
|
||||
desc = newdesc
|
||||
if("Product Description")
|
||||
if(product && !productdesc)
|
||||
productdesc = initial(product.desc)
|
||||
var/newproductdesc = stripped_input(user, "Write a new description:", name, productdesc)
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if (length(newproductdesc) > 180)
|
||||
to_chat(user, "That description is too long!")
|
||||
return
|
||||
if(!newproductdesc)
|
||||
to_chat(user, "That description is invalid.")
|
||||
return
|
||||
else
|
||||
productdesc = newproductdesc
|
||||
else
|
||||
return
|
||||
|
||||
..() // Fallthrough to item/attackby() so that bags can pick seeds up
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Checks plants for broken tray icons. Use Advanced Proc Call to activate.
|
||||
// Maybe some day it would be used as unit test.
|
||||
/proc/check_plants_growth_stages_icons()
|
||||
@@ -395,7 +472,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
for(var/i in 1 to amount_random_traits)
|
||||
var/random_trait = pick((subtypesof(/datum/plant_gene/trait)-typesof(/datum/plant_gene/trait/plant_type)))
|
||||
var/datum/plant_gene/trait/T = new random_trait
|
||||
if(T.can_add(src) && !is_gene_forbidden(T))
|
||||
if(T.can_add(src) && !is_gene_forbidden(random_trait))
|
||||
genes += T
|
||||
else
|
||||
qdel(T)
|
||||
|
||||
Reference in New Issue
Block a user