From af97bddf877e45381a779066b0278509644590c1 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Sun, 30 Aug 2020 11:38:46 -0400 Subject: [PATCH 01/28] It begins. Earthmother preserve me. --- code/modules/hydroponics/hydroponics.dm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index a208f2de3c..062eb5b4ea 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -8,7 +8,7 @@ circuit = /obj/item/circuitboard/machine/hydroponics var/waterlevel = 100 //The amount of water in the tray (max 100) var/maxwater = 100 //The maximum amount of water in the tray - var/nutrilevel = 10 //The amount of nutrient in the tray (max 10) + var/nutridrain = 1 // How many units of nutrient will be drained 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) @@ -26,11 +26,16 @@ var/rating = 1 var/unwrenchable = 1 var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant - 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 - var/canirrigate = TRUE //tin + // Here lies irrigation. You won't be missed, because you were never used. + +/obj/machinery/hydroponics/Initialize() + //Here lies "nutrilevel", killed by ArcaneMusic 20??-2019. Finally, we strive for a better future. Please use "reagents" instead + create_reagents(20) + reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. + . = ..() /obj/machinery/hydroponics/constructable name = "hydroponics tray" @@ -44,7 +49,9 @@ 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 + maxnutri = (tmp_capacity * 5) + STATIC_NUTRIENT_CAPACITY // Up to 50 Maximum + reagents.maximum_volume = maxnutri + nutridrain = 1/rating /obj/machinery/hydroponics/constructable/examine(mob/user) . = ..() From c2002aca78f5c770c5880a2b89b838cf648ba84a Mon Sep 17 00:00:00 2001 From: The0bserver Date: Sun, 30 Aug 2020 12:44:12 -0400 Subject: [PATCH 02/28] This is it, Luigi. We gotta move the function! --- code/modules/hydroponics/hydroponics.dm | 76 ++++++------------- .../chemistry/reagents/other_reagents.dm | 54 +++++++++++-- 2 files changed, 73 insertions(+), 57 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 062eb5b4ea..c740292cd6 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -79,24 +79,6 @@ return ..() -/obj/machinery/hydroponics/proc/FindConnected() - var/list/connected = list() - var/list/processing_atoms = list(src) - - while(processing_atoms.len) - 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 ..() @@ -132,12 +114,15 @@ needs_update = 1 //Nutrients////////////////////////////////////////////////////////////// - // Nutrients deplete slowly - if(prob(50)) - adjustNutri(-1 / rating) - + // Nutrients deplete at a constant rate, since new nutrients can boost stats far easier. + apply_chemicals(lastuser) + if(self_sustaining) + reagents.remove_any(min(0.5, nutridrain)) + else + reagents.remove_any(nutridrain) + // Lack of nutrients hurts non-weeds - if(nutrilevel <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) + if(reagents.total_volume <= 0 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) adjustHealth(-rand(1,3)) //Photosynthesis///////////////////////////////////////////////////////// @@ -163,7 +148,7 @@ 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 > 10 && reagents.total_volume > 0) adjustHealth(rand(1,2) / rating) if(myseed && prob(myseed.weed_chance)) adjustWeeds(myseed.weed_rate) @@ -208,6 +193,21 @@ if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) adjustHealth(-1 / rating) +//This is where stability mutations exist now. + if(myseed.instability >= 80) + var/mutation_chance = myseed.instability - 75 + mutate(0, 0, 0, 0, 0, 0, 0, mutation_chance, 0) //Scaling odds of a random trait or chemical + if(myseed.instability >= 60) + if(prob((myseed.instability)/2) && !self_sustaining && length(myseed.mutatelist)) //Minimum 30%, Maximum 50% chance of mutating every age tick when not on autogrow. + mutatespecie() + myseed.instability = myseed.instability/2 + if(myseed.instability >= 40) + if(prob(myseed.instability)) + hardmutate() + if(myseed.instability >= 20 ) + if(prob(myseed.instability)) + mutate() + //Health & Age/////////////////////////////////////////////////////////// // Plant dies if plant_health <= 0 @@ -250,25 +250,6 @@ selectedtrait.on_grow(src) 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 - return - /obj/machinery/hydroponics/update_icon() //Refreshes the icon and sets the luminosity cut_overlays() @@ -295,15 +276,6 @@ return -/obj/machinery/hydroponics/proc/update_icon_hoses() - var/n = 0 - for(var/Dir in GLOB.cardinals) - var/obj/machinery/hydroponics/t = locate() in get_step(src,Dir) - if(t && t.using_irrigation && using_irrigation) - n += Dir - - icon_state = "hoses-[n]" - /obj/machinery/hydroponics/proc/update_icon_plant() var/mutable_appearance/plant_overlay = mutable_appearance(myseed.growing_icon, layer = OBJ_LAYER + 0.01) if(dead) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5c01fd8cf6..bb60411694 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1606,24 +1606,68 @@ /datum/reagent/plantnutriment/eznutriment name = "E-Z-Nutrient" - description = "Cheap and extremely common type of plant nutriment." + description = "Contains electrolytes. It's what plants crave." color = "#376400" // RBG: 50, 100, 0 tox_prob = 10 - pH = 2.5 + +/datum/reagent/plantnutriment/eznutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(myseed && chems.has_reagent(src.type, 1)) + myseed.adjust_instability(0.2) + myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.3)) + myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 0.1)) /datum/reagent/plantnutriment/left4zednutriment name = "Left 4 Zed" description = "Unstable nutriment that makes plants mutate more often than usual." color = "#1A1E4D" // RBG: 26, 30, 77 tox_prob = 25 - pH = 3.5 + +/datum/reagent/plantnutriment/left4zednutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(myseed && chems.has_reagent(src.type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) + myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.2)) /datum/reagent/plantnutriment/robustharvestnutriment name = "Robust Harvest" - description = "Very potent nutriment that prevents plants from mutating." + description = "Very potent nutriment that slows plants from mutating." color = "#9D9D00" // RBG: 157, 157, 0 tox_prob = 15 - pH = 2.5 + +/datum/reagent/plantnutriment/robustharvestnutriment/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(myseed && chems.has_reagent(src.type, 1)) + myseed.adjust_instability(-0.25) + myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.1)) + myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 0.2)) + +/datum/reagent/plantnutriment/endurogrow + name = "Enduro Grow" + description = "A specialized nutriment, which decreases product quantity and potency, but strengthens the plants endurance." + color = "#a06fa7" // RBG: 160, 111, 167 + tox_prob = 15 + +/datum/reagent/plantnutriment/endurogrow/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(myseed && chems.has_reagent(src.type, 1)) + myseed.adjust_potency(-round(chems.get_reagent_amount(src.type) * 0.1)) + myseed.adjust_yield(-round(chems.get_reagent_amount(src.type) * 0.075)) + myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.35)) + +/datum/reagent/plantnutriment/liquidearthquake + name = "Liquid Earthquake" + description = "A specialized nutriment, which increases the plant's production speed, as well as it's susceptibility to weeds." + color = "#912e00" // RBG: 145, 46, 0 + tox_prob = 25 + +/datum/reagent/plantnutriment/liquidearthquake/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(myseed && chems.has_reagent(src.type, 1)) + myseed.adjust_weed_rate(round(chems.get_reagent_amount(src.type) * 0.1)) + myseed.adjust_weed_chance(round(chems.get_reagent_amount(src.type) * 0.3)) + myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.075)) + // GOON OTHERS From 4edf61dde766811cf05c9fb9488575ce065638c7 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Mon, 31 Aug 2020 00:34:45 -0400 Subject: [PATCH 03/28] New Define File: Botany.dm Earthmother save me. --- code/__DEFINES/botany.dm | 12 + code/modules/hydroponics/hydroponics.dm | 345 +++----------------- code/modules/hydroponics/plant_genes.dm | 6 + code/modules/reagents/chemistry/reagents.dm | 10 + tgstation.dme | 1 + 5 files changed, 71 insertions(+), 303 deletions(-) create mode 100644 code/__DEFINES/botany.dm diff --git a/code/__DEFINES/botany.dm b/code/__DEFINES/botany.dm new file mode 100644 index 0000000000..d2e4d4e739 --- /dev/null +++ b/code/__DEFINES/botany.dm @@ -0,0 +1,12 @@ + +#define TRAY_NAME_UPDATE name = myseed ? "[initial(name)] ([myseed.plantname])" : initial(name) +#define YIELD_WEED_MINIMUM 3 +#define YIELD_WEED_MAXIMUM 10 +#define STATIC_NUTRIENT_CAPACITY 10 + +//Both available scanning modes for the plant analyzer. +#define PLANT_SCANMODE_STATS 0 +#define PLANT_SCANMODE_CHEMICALS 1 + +//Seed flags. +#define MUTATE_EARLY (1<<0) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index c740292cd6..bb2d7bd688 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -293,7 +293,7 @@ /obj/machinery/hydroponics/proc/update_icon_lights() if(waterlevel <= 10) add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowwater3")) - if(nutrilevel <= 2) + if(reagents.total_volume <= 2) add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lownutri3")) if(plant_health <= (myseed.endurance / 2)) add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "over_lowhealth3")) @@ -440,7 +440,6 @@ dead = 1 - /obj/machinery/hydroponics/proc/mutatepest(mob/user) if(pestlevel > 5) message_admins("[ADMIN_LOOKUPFLW(user)] caused spiderling pests to spawn in a hydro tray") @@ -450,250 +449,6 @@ else to_chat(user, "The pests seem to behave oddly, but quickly settle down...") -/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, "The plant shrivels and burns.") - if(81 to 90) - mutatespecie() - if(66 to 80) - hardmutate() - if(41 to 65) - mutate() - if(21 to 41) - to_chat(user, "The plants don't seem to react...") - if(11 to 20) - mutateweed() - if(1 to 10) - mutatepest(user) - else - to_chat(user, "Nothing happens...") - - // 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, "[src] warms as it might on a spring day under a genuine Sun.") - - // 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)) - - // 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() - - // Honey, Pests are dieing of sugar, so is the plant - if(S.has_reagent(/datum/reagent/consumable/honey, 1)) - adjustPests(-rand(2,5)) - adjustHealth(-round(S.get_reagent_amount(/datum/reagent/consumable/honey) * 1)) - - // Buzz Fuzz, a drink seemingly made for plants... - if(S.has_reagent(/datum/reagent/consumable/buzz_fuzz, 1)) - adjustPests(-rand(2,5)) - adjustHealth(round(S.get_reagent_amount(/datum/reagent/consumable/buzz_fuzz) * 0.1)) - adjustNutri(round(S.get_reagent_amount(/datum/reagent/consumable/buzz_fuzz) * 0.5)) - - // 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, "Nothing happens...") - /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) @@ -709,57 +464,50 @@ to_chat(user, "[reagent_source] is empty.") return 1 + if(reagents.total_volume >= reagents.maximum_volume && !reagent_source.reagents.has_reagent(/datum/reagent/water, 1)) + to_chat(user, "[src] is full.") + return + var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc var/target = myseed ? myseed.plantname : src var/visi_msg = "" - var/irrigate = 0 //How am I supposed to irrigate pill contents? 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) || 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 + else transfer_amount = reagent_source.amount_per_transfer_from_this if(istype(reagent_source, /obj/item/reagent_containers/syringe/)) var/obj/item/reagent_containers/syringe/syr = reagent_source visi_msg="[user] injects [target] with [syr]" if(syr.reagents.total_volume <= syr.amount_per_transfer_from_this) 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 - 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" + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) if(visi_msg) visible_message("[visi_msg].") - 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) + //This was originally in apply_chemicals, but due to apply_chemicals only holding nutrients, we handle it here now. + if(reagent_source.reagents.has_reagent(/datum/reagent/water, 1)) + var/water_amt = reagent_source.reagents.get_reagent_amount(/datum/reagent/water) * transfer_amount / reagent_source.reagents.total_volume + H.adjustWater(round(water_amt)) + reagent_source.reagents.remove_reagent(/datum/reagent/water, water_amt) + reagent_source.reagents.trans_to(H.reagents, transfer_amount, transfered_by = user) 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) - - S.clear_reagents() - qdel(S) + lastuser = user + H.update_icon() + return 1 H.update_icon() if(reagent_source) // If the source wasn't composted and destroyed reagent_source.update_icon() @@ -772,39 +520,42 @@ if(!user.transferItemToLoc(O, src)) return to_chat(user, "You plant [O].") - dead = 0 + dead = FALSE myseed = O - name = "hydroponics tray ([myseed.plantname])" - if(!myseed.productdesc) //we haven't changed our produce's description - if(myseed.product) - myseed.productdesc = initial(myseed.product.desc) - else if(myseed.desc) - myseed.productdesc = myseed.desc - else - myseed.productdesc = "A fascinating specimen." - desc = myseed.productdesc + TRAY_NAME_UPDATE age = 1 plant_health = myseed.endurance lastcycle = world.time update_icon() else to_chat(user, "[src] already has seeds in it!") + return - else if(istype(O, /obj/item/plant_analyzer)) + else if(istype(O, /obj/item/plant_analyzer)) + var/obj/item/plant_analyzer/P_analyzer = O if(myseed) - to_chat(user, "*** [myseed.plantname] ***" ) - to_chat(user, "- Plant Age: [age]") - var/list/text_string = myseed.get_analyzer_text() - if(text_string) - to_chat(user, text_string) + if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS) + to_chat(user, "*** [myseed.plantname] ***" ) + to_chat(user, "- Plant Age: [age]") + var/list/text_string = myseed.get_analyzer_text() + if(text_string) + to_chat(user, text_string) + to_chat(user, "*---------*") + if(myseed.reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS) + to_chat(user, "- Plant Reagents -") + to_chat(user, "*---------*") + for(var/datum/plant_gene/reagent/G in myseed.genes) + to_chat(user, "- [G.get_name()] -") + to_chat(user, "*---------*") else to_chat(user, "No plant found.") to_chat(user, "- Weed level: [weedlevel] / 10") to_chat(user, "- Pest level: [pestlevel] / 10") to_chat(user, "- Toxicity level: [toxic] / 100") to_chat(user, "- Water level: [waterlevel] / [maxwater]") - to_chat(user, "- Nutrition level: [nutrilevel] / [maxnutri]") + to_chat(user, "- Nutrition level: [reagents.total_volume] / [maxnutri]") to_chat(user, "") + return else if(istype(O, /obj/item/cultivator)) if(weedlevel > 0) @@ -822,18 +573,6 @@ else if(default_unfasten_wrench(user, O)) return - else if(istype(O, /obj/item/wirecutters) && unwrenchable) - if (!anchored) - to_chat(user, "Anchor the tray first!") - return - if(canirrigate) - using_irrigation = !using_irrigation - O.play_tool_sound(src) - user.visible_message("[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.", \ - "You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.") - for(var/obj/machinery/hydroponics/h in range(1,src)) - h.update_icon() - else if(istype(O, /obj/item/shovel/spade)) if(!myseed && !weedlevel) to_chat(user, "[src] doesn't have any plants or weeds!") diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 887ea0417c..da19fa11f8 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -89,6 +89,12 @@ /datum/plant_gene/core/potency/apply_stat(obj/item/seeds/S) S.potency = value +/datum/plant_gene/core/instability + name = "Stability" + value = 10 + +/datum/plant_gene/core/instability/apply_stat(obj/item/seeds/S) + S.instability = value /datum/plant_gene/core/weed_rate name = "Weed Growth Rate" diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 672127cb11..d6b7201ef9 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -213,6 +213,16 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) if(prob(30)) to_chat(M, "You're not feeling good at all! You really need some [name].") +/** + * New, standardized method for chemicals to affect hydroponics trays. + * Defined on a per-chem level as opposed to by the tray. + * Can affect plant's health, stats, or cause the plant to react in certain ways. + */ +/datum/reagent/proc/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + if(!mytray || !chems) + return + return + /proc/pretty_string_from_reagent_list(list/reagent_list) //Convert reagent list to a printable string for logging etc var/list/rs = list() diff --git a/tgstation.dme b/tgstation.dme index 79c4274722..87a11c7ea7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -25,6 +25,7 @@ #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\atmospherics.dm" #include "code\__DEFINES\atom_hud.dm" +#include "code\__DEFINES\botany.dm" #include "code\__DEFINES\bsql.config.dm" #include "code\__DEFINES\bsql.dm" #include "code\__DEFINES\callbacks.dm" From dbb6ef7d4ead363e6933a8b290e318fe7933e4cb Mon Sep 17 00:00:00 2001 From: The0bserver Date: Mon, 31 Aug 2020 03:26:43 -0400 Subject: [PATCH 04/28] I think we got rid of nutrilevel, finally. --- code/modules/hydroponics/hydroponics.dm | 48 ++++++++----------- .../integrated_electronics/subtypes/input.dm | 4 +- .../subtypes/reagents.dm | 5 -- code/modules/plumbing/plumbers/autohydro.dm | 1 - 4 files changed, 22 insertions(+), 36 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index bb2d7bd688..20c16bbfc3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -69,12 +69,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, "Disconnect the hoses first!") - return - else if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(I)) return return ..() @@ -97,7 +92,6 @@ myseed.forceMove(src) if(self_sustaining) - adjustNutri(1) adjustWater(rand(3,5)) adjustWeeds(-2) adjustPests(-2) @@ -229,7 +223,7 @@ 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 @@ -261,8 +255,6 @@ add_overlay(mutable_appearance('icons/obj/hydroponics/equipment.dmi', "gaia_blessing")) set_light(3) - update_icon_hoses() - if(myseed) update_icon_plant() update_icon_lights() @@ -318,7 +310,7 @@ if(!self_sustaining) . += "Water: [waterlevel]/[maxwater]." - . += "Nutrient: [nutrilevel]/[maxnutri]." + . += "Nutrient: [reagents.total_volume]/[maxnutri]." if(self_sufficiency_progress > 0) var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req) . += "Treatment for self-sustenance are [percent_progress]% complete." @@ -600,33 +592,40 @@ if (!unwrenchable) // case also covered by NODECONSTRUCT checks in default_unfasten_wrench return CANT_UNFASTEN - if (using_irrigation) - if (!silent) - to_chat(user, "Disconnect the hoses first!") - return FAILED_UNFASTEN - return ..() -/obj/machinery/hydroponics/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) +/obj/machinery/hydroponics/attack_hand(mob/user) + . = ..() + if(.) + return if(issilicon(user)) //How does AI know what plant is? return if(harvest) return myseed.harvest(user) else if(dead) - dead = 0 + dead = FALSE to_chat(user, "You remove the dead plant from [src].") qdel(myseed) myseed = null update_icon() - name = initial(name) - desc = initial(desc) + TRAY_NAME_UPDATE else if(user) examine(user) +/obj/machinery/hydroponics/AltClick(mob/user) + . = ..() + if(!anchored) + update_icon() + return FALSE + var/warning = alert(user, "Are you sure you wish to empty the tray's nutrient beaker?","Empty Tray Nutrients?", "Yes", "No") + if(warning == "Yes" && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + reagents.clear_reagents() + to_chat(user, "You empty [src]'s nutrient tank.") + /obj/machinery/hydroponics/proc/update_tray(mob/user) - harvest = 0 + harvest = FALSE lastproduce = age if(istype(myseed, /obj/item/seeds/replicapod)) if(user)//runtimes @@ -646,9 +645,6 @@ 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) - /obj/machinery/hydroponics/proc/adjustWater(adjustamt) waterlevel = clamp(waterlevel + adjustamt, 0, maxwater) @@ -691,9 +687,6 @@ flags_1 = NODECONSTRUCT_1 unwrenchable = FALSE -/obj/machinery/hydroponics/soil/update_icon_hoses() - return // Has no hoses - /obj/machinery/hydroponics/soil/update_icon_lights() return // Has no lights @@ -703,3 +696,4 @@ qdel(src) else return ..() + \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index e8981ed685..9abf5d86a0 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -261,13 +261,11 @@ set_pin_data(IC_OUTPUT, 12, H.pestlevel) set_pin_data(IC_OUTPUT, 13, H.toxic) set_pin_data(IC_OUTPUT, 14, H.waterlevel) - set_pin_data(IC_OUTPUT, 15, H.nutrilevel) + set_pin_data(IC_OUTPUT, 15, H.reagents.total_volume) set_pin_data(IC_OUTPUT, 16, H.harvest) set_pin_data(IC_OUTPUT, 17, H.dead) set_pin_data(IC_OUTPUT, 18, H.plant_health) set_pin_data(IC_OUTPUT, 19, H.self_sustaining) - set_pin_data(IC_OUTPUT, 20, H.using_irrigation) - set_pin_data(IC_OUTPUT, 21, H.FindConnected()) push_data() activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 991c806f43..4a164e73d6 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -24,11 +24,6 @@ var/list/trays = list(tray) var/visi_msg = "[acting_object] transfers fluid into [tray]" - if(amount > 30 && source.reagents.total_volume >= 30 && tray.using_irrigation) - trays = tray.FindConnected() - if (trays.len > 1) - visi_msg += ", setting off the irrigation system" - acting_object.visible_message("[visi_msg].") playsound(loc, 'sound/effects/slosh.ogg', 25, 1) diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm index dbc70dfcf5..902276d73b 100644 --- a/code/modules/plumbing/plumbers/autohydro.dm +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -4,7 +4,6 @@ obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/hydroponics/automagic self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly. - canirrigate = FALSE /obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params) From b13db43985ca8ee78d43cc29b90bee9a940fc5d2 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Mon, 31 Aug 2020 03:27:56 -0400 Subject: [PATCH 05/28] Let's not forget this. --- .../hydroponics/hydroponics_chemreact.dm | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 code/modules/hydroponics/hydroponics_chemreact.dm diff --git a/code/modules/hydroponics/hydroponics_chemreact.dm b/code/modules/hydroponics/hydroponics_chemreact.dm new file mode 100644 index 0000000000..a4ef78a21f --- /dev/null +++ b/code/modules/hydroponics/hydroponics_chemreact.dm @@ -0,0 +1,32 @@ +/** + *This is NOW the gradual affects that each chemical applies on every process() proc. Nutrients now use a more robust reagent holder in order to apply less insane + * stat changes as opposed to 271 lines of individual statline effects. Shoutout to the original comments on chems, I just cleaned a few up. + */ +/obj/machinery/hydroponics/proc/apply_chemicals(mob/user) + ///Contains the reagents within the tray. + if(myseed) + myseed.on_chem_reaction(reagents) //In case seeds have some special interactions with special chems, currently only used by vines + for(var/c in reagents.reagent_list) + var/datum/reagent/chem = c + chem.on_hydroponics_apply(myseed, reagents, src, user) + + +/obj/machinery/hydroponics/proc/mutation_roll(mob/user) + switch(rand(100)) + if(91 to 100) + adjustHealth(-10) + visible_message("\The [myseed.plantname] starts to wilt and burn!") + return + if(41 to 90) + if(myseed && !self_sustaining) //Stability + myseed.adjust_instability(5) + return + if(21 to 40) + visible_message("\The [myseed.plantname] appears unusually reactive...") + return + if(11 to 20) + mutateweed() + return + if(1 to 10) + mutatepest(user) + return From 9be7bda9bcc650bb1c02318e892f0a94b4d7ba86 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Mon, 31 Aug 2020 03:30:13 -0400 Subject: [PATCH 06/28] urgh --- tgstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/tgstation.dme b/tgstation.dme index 87a11c7ea7..d71d8db2bf 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2124,6 +2124,7 @@ #include "code\modules\hydroponics\growninedible.dm" #include "code\modules\hydroponics\hydroitemdefines.dm" #include "code\modules\hydroponics\hydroponics.dm" +#include "code\modules\hydroponics\hydroponics_chemreact.dm" #include "code\modules\hydroponics\plant_genes.dm" #include "code\modules\hydroponics\sample.dm" #include "code\modules\hydroponics\seed_extractor.dm" From df3c2d3d8d23718f7cfcad3bb2798a15bbed7cfe Mon Sep 17 00:00:00 2001 From: The0bserver Date: Mon, 31 Aug 2020 05:01:51 -0400 Subject: [PATCH 07/28] Reduced some bloat, using TRAY_NAME_UPDATE --- code/modules/hydroponics/hydroponics.dm | 41 +++++++++++++------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 20c16bbfc3..77f5884347 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -215,9 +215,8 @@ // Harvest code if(age > myseed.production && (age - lastproduce) > myseed.production && (!harvest && !dead)) - 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 @@ -395,11 +394,7 @@ sleep(5) // Wait a while update_icon() visible_message("[oldPlantName] suddenly mutates into [myseed.plantname]!") - name = "hydroponics tray ([myseed.plantname])" - if(myseed.product) - desc = initial(myseed.product.desc) - else - desc = initial(desc) + TRAY_NAME_UPDATE /obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant if( weedlevel > 5 ) @@ -419,17 +414,23 @@ sleep(5) // Wait a while update_icon() visible_message("The mutated weeds in [src] spawn some [myseed.plantname]!") + TRAY_NAME_UPDATE else to_chat(usr, "The few weeds in [src] seem to react, but only for a moment...") -/obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier +/** + * Plant Death Proc. + * Cleans up various stats for the plant upon death, including pests, harvestability, and plant health. + */ +/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) @@ -464,7 +465,6 @@ var/target = myseed ? myseed.plantname : src var/visi_msg = "" 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 @@ -472,7 +472,7 @@ R.generate_trash(get_turf(user)) visi_msg="[user] composts [reagent_source], spreading it through [target]" transfer_amount = reagent_source.reagents.total_volume - else + else transfer_amount = reagent_source.amount_per_transfer_from_this if(istype(reagent_source, /obj/item/reagent_containers/syringe/)) var/obj/item/reagent_containers/syringe/syr = reagent_source @@ -628,22 +628,23 @@ harvest = FALSE lastproduce = age if(istype(myseed, /obj/item/seeds/replicapod)) - if(user)//runtimes - to_chat(user, "You harvest from the [myseed.plantname].") + to_chat(user, "You harvest from the [myseed.plantname].") else if(myseed.getYield() <= 0) - if(user) - to_chat(user, "You fail to harvest anything useful!") + to_chat(user, "You fail to harvest anything useful!") else - if(user) - to_chat(user, "You harvest [myseed.getYield()] items from the [myseed.plantname].") + to_chat(user, "You harvest [myseed.getYield()] items from the [myseed.plantname].") if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) qdel(myseed) myseed = null - dead = 0 + dead = FALSE name = initial(name) desc = initial(desc) + TRAY_NAME_UPDATE + if(self_sustaining) //No reason to pay for an empty tray. + idle_power_usage = 0 + self_sustaining = FALSE 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/adjustWater(adjustamt) waterlevel = clamp(waterlevel + adjustamt, 0, maxwater) From d504d458395028b34082495751b5b973e0f90849 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 01:27:22 -0400 Subject: [PATCH 08/28] Cat Roomba... (Further solidification of instab) --- code/modules/hydroponics/seeds.dm | 76 ++++++++++++++++--- .../subtypes/reagents.dm | 2 +- code/modules/plumbing/plumbers/autohydro.dm | 2 +- 3 files changed, 67 insertions(+), 13 deletions(-) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index c7314bf180..2a0b19a3a6 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -24,6 +24,7 @@ var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. var/growthstages = 6 // Amount of growth sprites the plant has. + var/instability = 5 //Chance that a plant will mutate in each stage of it's life. 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. @@ -36,6 +37,7 @@ var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth var/weed_chance = 5 //Percentage chance per tray update to grow weeds + var/seed_flags = MUTATE_EARLY //Determines if a plant is allowed to mutate early at 30+ instability /obj/item/seeds/Initialize(mapload, nogenes = 0) . = ..() @@ -74,6 +76,10 @@ /obj/item/seeds/examine(mob/user) . = ..() . += "Use a pen on it to rename it or change its description." + if(reagents_add && user.can_see_reagents()) + . += "- Plant Reagents -" + for(var/datum/plant_gene/reagent/G in genes) + . += "- [G.get_name()] -" /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) @@ -85,6 +91,7 @@ S.yield = yield S.potency = potency S.weed_rate = weed_rate + S.instability = instability S.weed_chance = weed_chance S.name = name S.plantname = plantname @@ -127,12 +134,14 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) adjust_production(rand(-productmut,productmut)) adjust_yield(rand(-yieldmut,yieldmut)) adjust_potency(rand(-potmut,potmut)) + adjust_instability(rand(-stabmut,stabmut)) 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)) @@ -170,8 +179,28 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) var/list/result = list() var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //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 + if(instability >= 30 && (seed_flags & MUTATE_EARLY) && LAZYLEN(mutatelist) && prob(instability/3)) + var/obj/item/seeds/new_prod = pick(mutatelist) + t_prod = initial(new_prod.product) + if(!t_prod) + continue + t_prod = new t_prod(output_loc, src) + t_prod.seed = new new_prod + t_prod.seed.name = initial(new_prod.name) + t_prod.seed.desc = initial(new_prod.desc) + t_prod.seed.plantname = initial(new_prod.plantname) + t_prod.transform = initial(t_prod.transform) + t_prod.transform *= TRANSFORM_USING_VARIABLE(t_prod.seed.potency, 100) + 0.5 + t_amount++ + if(t_prod.seed) + //t_prod.seed = new new_prod + t_prod.seed.instability = round(instability * 0.5) + continue + else + t_prod = new product(output_loc, src) if(parent.myseed.plantname != initial(parent.myseed.plantname)) t_prod.name = lowertext(parent.myseed.plantname) if(productdesc) @@ -186,8 +215,8 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) product_name = parent.myseed.plantname if(getYield() >= 1) SSblackbox.record_feedback("tally", "food_harvested", getYield(), product_name) - parent.investigate_log("[user] harvested [getYield()] of [src], with seed traits [english_list(genes)] and reagents_add [english_list(reagents_add)] and potency [potency].", INVESTIGATE_BOTANY) parent.update_tray(user) + return result /obj/item/seeds/proc/harvest_userless() @@ -263,6 +292,14 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) if(C) C.value = production +/obj/item/seeds/proc/adjust_instability(adjustamt) + if(instability == -1) + return + instability = clamp(instability + adjustamt, 0, 100) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/instability) + if(C) + C.value = instability + /obj/item/seeds/proc/adjust_potency(adjustamt) if(potency != -1) potency = clamp(potency + adjustamt, 0, 100) @@ -320,6 +357,14 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) if(C) C.value = potency +/obj/item/seeds/proc/set_instability(adjustamt) + if(instability == -1) + return + instability = clamp(adjustamt, 0, 100) + var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/instability) + if(C) + C.value = instability + /obj/item/seeds/proc/set_weed_rate(adjustamt) weed_rate = clamp(adjustamt, 0, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate) @@ -352,6 +397,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) text += "- Production speed: [production]\n" text += "- Endurance: [endurance]\n" text += "- Lifespan: [lifespan]\n" + text += "- Instability: [instability]\n" text += "- Weed Growth Rate: [weed_rate]\n" text += "- Weed Vulnerability: [weed_chance]\n" if(rarity) @@ -362,9 +408,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 @@ -373,9 +417,19 @@ 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, "*---------*\n This is \a [src].") - var/text = get_analyzer_text() - if(text) - to_chat(user, "[text]") + var/text + var/obj/item/plant_analyzer/P_analyzer = O + if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS) + text = get_analyzer_text() + if(text) + to_chat(user, "[text]") + if(reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS) + to_chat(user, "- Plant Reagents -") + to_chat(user, "*---------*") + for(var/datum/plant_gene/reagent/G in genes) + to_chat(user, "- [G.get_name()] -") + to_chat(user, "*---------*") + return diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 4a164e73d6..cb3b1472bb 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -34,7 +34,7 @@ temp_reagents.my_atom = H source.reagents.trans_to(temp_reagents, split) - H.applyChemicals(temp_reagents) + H.on_hydroponics_apply(temp_reagents) temp_reagents.clear_reagents() qdel(temp_reagents) diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm index 902276d73b..91ebb47e71 100644 --- a/code/modules/plumbing/plumbers/autohydro.dm +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -41,7 +41,7 @@ /obj/machinery/hydroponics/constructable/automagic/process() if(reagents) - applyChemicals(reagents) + on_hydroponics_apply(reagents) reagents.clear_reagents() if(dead) dead = 0 From 2c6cfd21151b6b0886a1b4940d52c3bf07e2f4b5 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:19:37 -0400 Subject: [PATCH 09/28] YOU CAN'T STOP ME FROM DREAMING! --- code/modules/hydroponics/hydroitemdefines.dm | 26 +++++++++++++++++--- code/modules/hydroponics/hydroponics.dm | 10 +++++--- code/modules/hydroponics/seeds.dm | 9 ++++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index abf6632939..030a8689a9 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -1,15 +1,35 @@ // Plant analyzer /obj/item/plant_analyzer name = "plant analyzer" - desc = "A scanner used to evaluate a plant's various areas of growth." + desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits." icon = 'icons/obj/device.dmi' icon_state = "hydro" - item_state = "analyzer" + inhand_icon_state = "analyzer" + worn_icon_state = "plantanalyzer" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) + var/scan_mode = PLANT_SCANMODE_STATS + +/obj/item/plant_analyzer/attack_self(mob/user) + . = ..() + scan_mode = !scan_mode + to_chat(user, "You switch [src] to [scan_mode == PLANT_SCANMODE_CHEMICALS ? "scan for chemical reagents and traits" : "scan for plant growth statistics"].") + +/obj/item/plant_analyzer/attack(mob/living/M, mob/living/carbon/human/user) + //Checks if target is a podman + if(ispodperson(M)) + user.visible_message("[user] analyzes [M]'s vitals.", \ + "You analyze [M]'s vitals.") + if(scan_mode== PLANT_SCANMODE_STATS) + healthscan(user, M, advanced = TRUE) + else + chemscan(user, M) + add_fingerprint(user) + return + return ..() // ************************************* // Hydroponics Tools @@ -192,4 +212,4 @@ /obj/item/reagent_containers/glass/bottle/killer/pestkiller name = "bottle of pest spray" desc = "Contains a pesticide." - list_reagents = list(/datum/reagent/toxin/pestkiller = 50) \ No newline at end of file + list_reagents = list(/datum/reagent/toxin/pestkiller = 50) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 77f5884347..008fd9a88d 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -16,16 +16,17 @@ 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_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 @@ -465,7 +466,8 @@ var/target = myseed ? myseed.plantname : src var/visi_msg = "" 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) || 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) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 2a0b19a3a6..92b7fd6149 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -63,6 +63,7 @@ genes += new /datum/plant_gene/core/production(production) if(potency != -1) genes += new /datum/plant_gene/core/potency(potency) + genes += new /datum/plant_gene/core/instability(instability) for(var/p in genes) if(ispath(p)) @@ -128,7 +129,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) if(g) g.mutability_flags &= ~mutability -/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0) +/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0, stabmut = 3) adjust_lifespan(rand(-lifemut,lifemut)) adjust_endurance(rand(-endmut,endmut)) adjust_production(rand(-productmut,productmut)) @@ -174,11 +175,17 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) /obj/item/seeds/proc/harvest(mob/user) + ///Reference to the tray/soil the seeds are planted in. var/obj/machinery/hydroponics/parent = loc //for ease of access + ///Count used for creating the correct amount of results to the harvest. var/t_amount = 0 + ///List of plants all harvested from the same batch. var/list/result = list() + ///Tile of the harvester to deposit the growables. var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK + ///Name of the grown products. var/product_name + ///The Number of products produced by the plant, typically the yield. Modified by Densified Chemicals. var/product_count = getYield() while(t_amount < product_count) var/obj/item/reagent_containers/food/snacks/grown/t_prod From 75854915ee3da40d3cbcc6edef595c75d8d12823 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:27:15 -0400 Subject: [PATCH 10/28] You open the door. There's a green bean. --- code/modules/hydroponics/hydroitemdefines.dm | 3 +-- code/modules/hydroponics/seeds.dm | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 030a8689a9..125ab8b4ca 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -4,8 +4,7 @@ desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits." icon = 'icons/obj/device.dmi' icon_state = "hydro" - inhand_icon_state = "analyzer" - worn_icon_state = "plantanalyzer" + item_state = "analyzer" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 92b7fd6149..2dc80cd8fc 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -185,9 +185,10 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK ///Name of the grown products. var/product_name - ///The Number of products produced by the plant, typically the yield. Modified by Densified Chemicals. + ///The Number of products produced by the plant, typically the yield. var/product_count = getYield() - while(t_amount < product_count) + + while(t_amount < product_count) var/obj/item/reagent_containers/food/snacks/grown/t_prod if(instability >= 30 && (seed_flags & MUTATE_EARLY) && LAZYLEN(mutatelist) && prob(instability/3)) var/obj/item/seeds/new_prod = pick(mutatelist) From 89b837461e8b9d7064de45592a57bf05730b44f4 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:32:28 -0400 Subject: [PATCH 11/28] This should squash the error. --- code/modules/hydroponics/hydroponics.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 008fd9a88d..e4c4fadc3c 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -521,11 +521,12 @@ plant_health = myseed.endurance lastcycle = world.time update_icon() + return else to_chat(user, "[src] already has seeds in it!") return - else if(istype(O, /obj/item/plant_analyzer)) + else if(istype(O, /obj/item/plant_analyzer)) var/obj/item/plant_analyzer/P_analyzer = O if(myseed) if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS) From e36f93baeb3e75ccd252e6eeac08fdecc3bd2c7d Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:42:43 -0400 Subject: [PATCH 12/28] Sorry, Circuits. (Only slightly.) --- code/modules/hydroponics/hydroponics.dm | 2 +- .../subtypes/reagents.dm | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index e4c4fadc3c..dc7491984d 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -496,7 +496,7 @@ var/water_amt = reagent_source.reagents.get_reagent_amount(/datum/reagent/water) * transfer_amount / reagent_source.reagents.total_volume H.adjustWater(round(water_amt)) reagent_source.reagents.remove_reagent(/datum/reagent/water, water_amt) - reagent_source.reagents.trans_to(H.reagents, transfer_amount, transfered_by = user) + reagent_source.reagents.trans_to(H.reagents, transfer_amount) if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill)) qdel(reagent_source) lastuser = user diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index cb3b1472bb..4997bb3f28 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -19,25 +19,26 @@ // Hydroponics trays have no reagents holder and handle reagents in their own snowflakey way. // This is a dirty hack to make injecting reagents into them work. // TODO: refactor that. -/obj/item/integrated_circuit/reagent/proc/inject_tray(obj/machinery/hydroponics/tray, atom/movable/source, amount) - var/atom/movable/acting_object = get_object() - var/list/trays = list(tray) - var/visi_msg = "[acting_object] transfers fluid into [tray]" +//Time for someone to refactor this. Trays can now hold reagents. +//obj/item/integrated_circuit/reagent/proc/inject_tray(obj/machinery/hydroponics/tray, atom/movable/source, amount) + //var/atom/movable/acting_object = get_object() + //var/list/trays = list(tray) + //var/visi_msg = "[acting_object] transfers fluid into [tray]" - acting_object.visible_message("[visi_msg].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + //acting_object.visible_message("[visi_msg].") + //playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - var/split = round(amount/trays.len) + //var/split = round(amount/trays.len) - for(var/obj/machinery/hydroponics/H in trays) - var/datum/reagents/temp_reagents = new /datum/reagents() - temp_reagents.my_atom = H + //for(var/obj/machinery/hydroponics/H in trays) + //var/datum/reagents/temp_reagents = new /datum/reagents() + //temp_reagents.my_atom = H - source.reagents.trans_to(temp_reagents, split) - H.on_hydroponics_apply(temp_reagents) + //source.reagents.trans_to(temp_reagents, split) + //H.on_hydroponics_apply(temp_reagents) - temp_reagents.clear_reagents() - qdel(temp_reagents) + //temp_reagents.clear_reagents() + //qdel(temp_reagents) /obj/item/integrated_circuit/reagent/injector name = "integrated hypo-injector" From a89d6cd12559fcd651ce460144d9e11a8a923f49 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:47:05 -0400 Subject: [PATCH 13/28] I hate circuits. They hate change. --- .../integrated_electronics/subtypes/reagents.dm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 4997bb3f28..69dc9dcefd 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -112,10 +112,10 @@ return if(!AM.reagents) - if(istype(AM, /obj/machinery/hydroponics) && direction_mode == SYRINGE_INJECT && reagents.total_volume && transfer_amount)//injection into tray. - inject_tray(AM, src, transfer_amount) - activate_pin(2) - return + //if(istype(AM, /obj/machinery/hydroponics) && direction_mode == SYRINGE_INJECT && reagents.total_volume && transfer_amount)//injection into tray. + //inject_tray(AM, src, transfer_amount) + //activate_pin(2) + //return activate_pin(3) return @@ -241,10 +241,11 @@ if(!target.reagents) // Hydroponics trays have no reagents holder and handle reagents in their own snowflakey way. // This is a dirty hack to make injecting reagents into them work. - if(istype(target, /obj/machinery/hydroponics) && source.reagents.total_volume) - inject_tray(target, source, transfer_amount) - activate_pin(2) - return + //Someone should redo this. Trays should hold reagents now. + //if(istype(target, /obj/machinery/hydroponics) && source.reagents.total_volume) + //inject_tray(target, source, transfer_amount) + //activate_pin(2) + //return if(!source.is_drainable() || !target.is_refillable()) return From 82ffb6426844f7372403c80e2c00f771032b4a4d Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 02:53:29 -0400 Subject: [PATCH 14/28] maybe? --- code/modules/plumbing/plumbers/autohydro.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm index 91ebb47e71..37590bb4f3 100644 --- a/code/modules/plumbing/plumbers/autohydro.dm +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -41,7 +41,7 @@ /obj/machinery/hydroponics/constructable/automagic/process() if(reagents) - on_hydroponics_apply(reagents) + reagents.add_reagent(reagents) reagents.clear_reagents() if(dead) dead = 0 From 457cb5e238855f06c4fa44aa8014c9dd76054ba8 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 06:44:46 -0400 Subject: [PATCH 15/28] THIS IS IT LUIGI! ALL REAGENTS SET! --- code/modules/hydroponics/hydroponics.dm | 36 ++++++--- .../chemistry/reagents/alcohol_reagents.dm | 7 ++ .../chemistry/reagents/drink_reagents.dm | 25 ++++++ .../chemistry/reagents/food_reagents.dm | 13 +++ .../chemistry/reagents/medicine_reagents.dm | 39 +++++++++ .../chemistry/reagents/other_reagents.dm | 81 +++++++++++++++++++ .../chemistry/reagents/toxin_reagents.dm | 50 ++++++++++++ 7 files changed, 241 insertions(+), 10 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index dc7491984d..39bcce1e0e 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -6,6 +6,7 @@ pixel_z = 8 obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/hydroponics + idle_power_usage = 0 var/waterlevel = 100 //The amount of water in the tray (max 100) var/maxwater = 100 //The maximum amount of water in the tray var/nutridrain = 1 // How many units of nutrient will be drained in the tray @@ -92,11 +93,16 @@ if(myseed && (myseed.loc != src)) myseed.forceMove(src) - if(self_sustaining) - adjustWater(rand(3,5)) - adjustWeeds(-2) - adjustPests(-2) - adjustToxic(-2) + if(!powered() && self_sustaining) + visible_message("[name]'s auto-grow functionality shuts off!") + idle_power_usage = 0 + self_sustaining = FALSE + update_icon() + + else if(self_sustaining) + adjustWater(rand(1,2)) + adjustWeeds(-1) + adjustPests(-1) if(world.time > (lastcycle + cycledelay)) lastcycle = world.time @@ -108,6 +114,7 @@ needs_update = 1 + //Nutrients////////////////////////////////////////////////////////////// // Nutrients deplete at a constant rate, since new nutrients can boost stats far easier. apply_chemicals(lastuser) @@ -617,6 +624,20 @@ if(user) examine(user) +/obj/machinery/hydroponics/CtrlClick(mob/user) + . = ..() + if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + if(!powered()) + to_chat(user, "[name] has no power.") + return + if(!anchored) + return + self_sustaining = !self_sustaining + idle_power_usage = self_sustaining ? 2500 : 0 + to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].") + update_icon() + /obj/machinery/hydroponics/AltClick(mob/user) . = ..() if(!anchored) @@ -674,11 +695,6 @@ var/mob/living/simple_animal/hostile/C = new chosen C.faction = list("plants") -/obj/machinery/hydroponics/proc/become_self_sufficient() // Ambrosia Gaia effect - visible_message("[src] begins to glow with a beautiful light!") - self_sustaining = TRUE - update_icon() - /////////////////////////////////////////////////////////////////////////////// /obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk! name = "soil" diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 4034759c72..7a411c2bdf 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -90,6 +90,13 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A freezing pint of beer." pH = 4 + // Beer is a chemical composition of alcohol and various other things. It's a garbage nutrient but hey, it's still one. Also alcohol is bad, mmmkay? +/datum/reagent/consumable/ethanol/beer/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 0.05)) + mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 0.7)) + /datum/reagent/consumable/ethanol/beer/light name = "Light Beer" description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety has reduced calorie and alcohol content." diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index e1433eb64e..fa0e0ce7db 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -214,6 +214,14 @@ pH = 6.5 value = REAGENT_VALUE_VERY_COMMON + // Milk is good for humans, but bad for plants. The sugars cannot be used by plants, and the milk fat harms growth. Not shrooms though. I can't deal with this now... +/datum/reagent/consumable/milk/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustWater(round(chems.get_reagent_amount(type) * 0.3)) + if(myseed) + myseed.adjust_potency(-chems.get_reagent_amount(type) * 0.5) + /datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M) if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER)) M.heal_bodypart_damage(1.5,0, 0) @@ -603,6 +611,14 @@ glass_name = "honeycomb of Buzz Fuzz" glass_desc = "Stinging with flavour." + //This drink seems to be just made for plants.. how curious. +/datum/reagent/consumable/buzz_fuzz/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src,1)) + mytray.adjustPests(-rand(2,5)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) + mytray.adjustpotency(round(chems.get_reagent_amount(src.type) * 0.5)) + /datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M) M.reagents.add_reagent(/datum/reagent/consumable/sugar,1) if(prob(5)) @@ -674,6 +690,15 @@ glass_name = "glass of soda water" glass_desc = "Soda water. Why not make a scotch and soda?" + + // 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. +/datum/reagent/consumable/sodawater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustWater(round(chems.get_reagent_amount(type) * 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(type) * 0.1)) + /datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 18203f1a4c..beeb76d1a4 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -157,6 +157,13 @@ taste_description = "sweetness" value = REAGENT_VALUE_NONE +// Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though... +/datum/reagent/consumable/sugar/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustWeeds(rand(1,2)) + mytray.adjustPests(rand(1,2)) + /datum/reagent/consumable/sugar/overdose_start(mob/living/M) to_chat(M, "You go into hyperglycaemic shock! Lay off the twinkies!") M.AdjustSleeping(600, FALSE) @@ -174,6 +181,12 @@ color = "#899613" // rgb: 137, 150, 19 taste_description = "watery milk" +// Compost for EVERYTHING +/datum/reagent/consumable/virus_food/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 0.5)) + /datum/reagent/consumable/soysauce name = "Soysauce" description = "A salty sauce made from the soy plant." diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 37010cbbb5..f3d299cce5 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -36,6 +36,25 @@ taste_description = "badmins" value = REAGENT_VALUE_GLORIOUS +// The best stuff there is. For testing/debugging. +/datum/reagent/medicine/adminordrazine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustWater(round(chems.get_reagent_amount(type) * 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(type) * 1)) + mytray.adjustPests(-rand(1,5)) + mytray.adjustWeeds(-rand(1,5)) + if(chems.has_reagent(type, 3)) + switch(rand(100)) + if(66 to 100) + mytray.mutatespecie() + if(33 to 65) + mytray.mutateweed() + if(1 to 32) + mytray.mutatepest(user) + else if(prob(20)) + mytray.visible_message("Nothing happens...") + /datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M) M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1) M.setCloneLoss(0, 0) @@ -1168,6 +1187,11 @@ ..() . = 1 +// Antitoxin binds plants pretty well. So the tox goes significantly down +/datum/reagent/medicine/antitoxin/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + mytray.adjustToxic(-round(chems.get_reagent_amount(type) * 2)) + /datum/reagent/medicine/inaprovaline name = "Inaprovaline" description = "Stabilizes the breathing of patients. Good for those in critical condition." @@ -1297,6 +1321,21 @@ pH = 11 value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already. + +//Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy. +/datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustPests(-rand(1,3)) + mytray.adjustWeeds (-rand(1,3)) + if(myseed) + myseed.adjust_instability(-round(chems.get_reagent_amount(src.type) * 1.3)) + myseed.adjust_potency(round(chems.get_reagent_amount(src.type) *1)) + myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1)) + myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5)) + myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5)) + /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, FALSE) M.adjustFireLoss(-3 * REM, FALSE) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index bb60411694..0bb83a27bf 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -13,6 +13,12 @@ shot_glass_icon_state = "shotglassred" pH = 7.4 +// FEED ME,SEYMOUR! +/datum/reagent/blood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustPests(rand(2,3)) + /datum/reagent/blood/reaction_mob(mob/living/L, method = TOUCH, reac_volume) if(data && data["viruses"]) for(var/thing in data["viruses"]) @@ -313,6 +319,13 @@ metabolization_rate = 45 * REAGENTS_METABOLISM . = 1 +///For weird backwards situations where water manages to get added to trays nutrients, as opposed to being snowflaked away like usual. +/datum/reagent/water/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + if(chems.has_reagent(src.type, 1)) + mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1)) + //You don't belong in this world, monster! + chems.remove_reagent(/datum/reagent/water, chems.get_reagent_amount(src.type)) + /datum/reagent/water/hollowwater name = "Hollow Water" description = "An ubiquitous chemical substance that is composed of hydrogen and oxygen, but it looks kinda hollow." @@ -973,6 +986,15 @@ taste_description = "chlorine" pH = 7.4 +// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial +/datum/reagent/chlorine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 1.5)) + mytray.adjustWater(-round(chems.get_reagent_amount(src.type) * 0.5)) + mytray.adjustWeeds(-rand(1,3)) + /datum/reagent/chlorine/on_mob_life(mob/living/carbon/M) M.take_bodypart_damage(1*REM, 0, 0, 0) . = 1 @@ -986,6 +1008,15 @@ taste_description = "acid" pH = 2 +// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial +/datum/reagent/fluorine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 2)) + mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 2.5)) + mytray.adjustWater(-round(chems.get_reagent_amount(src.type) * 0.5)) + mytray.adjustWeeds(-rand(1,4)) + /datum/reagent/fluorine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(1*REM, 0) . = 1 @@ -1037,6 +1068,12 @@ taste_description = "the colour blue and regret" pH = 10 +/datum/reagent/radium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 1)) + /datum/reagent/radium/on_mob_life(mob/living/carbon/M) M.apply_effect(2*REM/M.metabolism_efficiency,EFFECT_IRRADIATE,0) ..() @@ -1148,6 +1185,14 @@ GG = new/obj/effect/decal/cleanable/greenglow(T) GG.reagents.add_reagent(/datum/reagent/uranium, reac_volume) +//Mutagenic chem side-effects. +/datum/reagent/uranium/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + mytray.mutation_roll(user) + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(src.type) * 2)) + /datum/reagent/bluespace name = "Bluespace Dust" description = "A dust composed of microscopic bluespace crystals, with minor space-warping properties." @@ -1406,6 +1451,15 @@ taste_description = "mordant" pH = 11.6 +/datum/reagent/ammonia/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + // Ammonia is bad ass. + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.12)) + if(myseed && prob(10)) + myseed.adjust_yield(1) + myseed.adjust_instability(1) + /datum/reagent/diethylamine name = "Diethylamine" description = "A secondary amine, mildly corrosive." @@ -1413,6 +1467,16 @@ taste_description = "iron" pH = 12 +// This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. The new trade off is it culls stability. +/datum/reagent/diethylamine/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustPests(-rand(1,2)) + if(myseed) + myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1)) + myseed.adjust_instability(-round(chems.get_reagent_amount(src.type) * 1)) + /datum/reagent/carbondioxide name = "Carbon Dioxide" reagent_state = GAS @@ -1723,6 +1787,13 @@ taste_description = "ash" pH = 6.5 +// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer +/datum/reagent/ash/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustWeeds(-1) + /datum/reagent/acetone name = "Acetone" description = "A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life." @@ -1843,6 +1914,16 @@ taste_description = "alkali" //who put ACID for NaOH ???? pH = 11.9 +// Saltpetre is used for gardening IRL, to simplify highly, it speeds up growth and strengthens plants +/datum/reagent/saltpetre/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(src.type, 1)) + var/salt = chems.get_reagent_amount(src.type) + mytray.adjustHealth(round(salt * 0.18)) + if(myseed) + myseed.adjust_production(-round(salt/10)-prob(salt%10)) + myseed.adjust_potency(round(salt*1)) + /datum/reagent/drying_agent name = "Drying agent" description = "A desiccant. Can be used to dry things." diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 07934d9880..0d0a234afc 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -10,6 +10,12 @@ value = REAGENT_VALUE_COMMON //Encouraging people to mix toxins for reasons beyond harming each other or mixing reagents such as pen acid. var/toxpwr = 1.5 +// Are you a bad enough dude to poison your own plants? +/datum/reagent/toxin/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 2)) + /datum/reagent/toxin/on_mob_life(mob/living/carbon/M) if(toxpwr) M.adjustToxLoss(toxpwr*REM, 0) @@ -54,6 +60,11 @@ C.apply_effect(5,EFFECT_IRRADIATE,0) return ..() +/datum/reagent/toxin/mutagen/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + mytray.mutation_roll(user) + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(1.5) //It is still toxic, mind you, but not to the same degree. + /datum/reagent/toxin/plasma name = "Plasma" description = "Plasma in its liquid form." @@ -245,6 +256,13 @@ pH = 2.7 value = REAGENT_VALUE_NONE +/datum/reagent/toxin/plantbgone/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 10)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 6)) + mytray.adjustWeeds(-rand(4,8)) + /datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume) if(istype(O, /obj/structure/alien/weeds)) var/obj/structure/alien/weeds/alien_weeds = O @@ -270,6 +288,14 @@ pH = 3 value = REAGENT_VALUE_NONE +//Weed Spray +/datum/reagent/toxin/plantbgone/weedkiller/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + if(!mytray) + return + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 0.5)) + mytray.adjustWeeds(-rand(1,2)) + /datum/reagent/toxin/pestkiller name = "Pest Killer" description = "A harmful toxic mixture to kill pests. Do not ingest!" @@ -278,6 +304,14 @@ pH = 3.2 value = REAGENT_VALUE_NONE +//Pest Spray +/datum/reagent/toxin/pestkiller/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + if(!mytray) + return + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1)) + mytray.adjustPests(-rand(1,2)) + /datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume) ..() if(M.mob_biotypes & MOB_BUG) @@ -838,6 +872,14 @@ pH = 2.75 value = REAGENT_VALUE_NONE +// Sure, go ahead and pour acid on your precious plants. What's the worst that could happen? +/datum/reagent/toxin/acid/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 1)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1.5)) + mytray.adjustWeeds(-rand(1,2)) + /datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume) if(!istype(C)) return @@ -870,6 +912,14 @@ acidpwr = 42.0 value = REAGENT_VALUE_COMMON +// ACID II: UNHEEDED WARNINGS +/datum/reagent/toxin/acid/fluacid/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) + . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustHealth(-round(chems.get_reagent_amount(type) * 2)) + mytray.adjustToxic(round(chems.get_reagent_amount(type) * 3)) + mytray.adjustWeeds(-rand(1,4)) + /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(current_cycle/10, 0) . = 1 From 6673779ca26f8a66665d37b401dfcf831bd0d9f2 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 06:46:31 -0400 Subject: [PATCH 16/28] Hi. Someone needs to fix up circuits. Not me tho. --- code/modules/integrated_electronics/subtypes/reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 69dc9dcefd..f69fa08aaf 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -238,7 +238,7 @@ if(!source.reagents) return - if(!target.reagents) + //if(!target.reagents) // Hydroponics trays have no reagents holder and handle reagents in their own snowflakey way. // This is a dirty hack to make injecting reagents into them work. //Someone should redo this. Trays should hold reagents now. From 7d2d7f84dd927206079bd8933478c9935717ac63 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 06:49:05 -0400 Subject: [PATCH 17/28] a fix for a fox. --- code/modules/reagents/chemistry/reagents/drink_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index fa0e0ce7db..5da05e83af 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -617,7 +617,7 @@ if(chems.has_reagent(src,1)) mytray.adjustPests(-rand(2,5)) mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) - mytray.adjustpotency(round(chems.get_reagent_amount(src.type) * 0.5)) + mytray.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.5)) /datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M) M.reagents.add_reagent(/datum/reagent/consumable/sugar,1) From 5869ddb1cddab241fe2925cdac836d1fa6022f4d Mon Sep 17 00:00:00 2001 From: The0bserver Date: Tue, 1 Sep 2020 06:55:15 -0400 Subject: [PATCH 18/28] Real Fix, Real Fox (I hope.) --- code/modules/reagents/chemistry/reagents/drink_reagents.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 5da05e83af..7bf0e91120 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -617,7 +617,8 @@ if(chems.has_reagent(src,1)) mytray.adjustPests(-rand(2,5)) mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) - mytray.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.5)) + if(myseed) + myseed.adjust_potency(round(chems.get_reagent_amount(src.type) * 0.5)) /datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M) M.reagents.add_reagent(/datum/reagent/consumable/sugar,1) From 6b3a0c3531ab817d888a8818ecf683f1407a2928 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Wed, 2 Sep 2020 01:00:49 -0400 Subject: [PATCH 19/28] A few changes, new fertilizer obtainable now. --- .../chemistry/reagents/food_reagents.dm | 4 ++++ .../chemistry/reagents/other_reagents.dm | 19 +++++++++++++++++++ .../research/designs/biogenerator_designs.dm | 16 ++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index beeb76d1a4..bbbceac6a0 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -174,6 +174,10 @@ ..() . = 1 +/datum/reagent/consumable/sugar/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + mytray.adjustWeeds(rand(2,3)) + /datum/reagent/consumable/virus_food name = "Virus Food" description = "A mixture of water and milk. Virus cells can use this mixture to reproduce." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 0bb83a27bf..00f72b3731 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -182,6 +182,10 @@ . = 1 ..() +/datum/reagent/blood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + mytray.adjustPests(rand(2,3)) + /datum/reagent/liquidgibs name = "Liquid gibs" color = BLOOD_COLOR_HUMAN @@ -342,6 +346,14 @@ glass_desc = "A glass of holy water." pH = 7.5 //God is alkaline + // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases instability. +/datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + if(chems.has_reagent(src.type, 1)) + mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) + if(myseed) + myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.15)) + /datum/reagent/water/holywater/on_mob_metabolize(mob/living/L) . = ..() ADD_TRAIT(L, TRAIT_HOLY, type) @@ -414,6 +426,13 @@ qdel(R) T.Bless() +/datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) + . = ..() + mytray.adjustWater(round(chems.get_reagent_amount(src.type) * 1)) + mytray.adjustHealth(round(chems.get_reagent_amount(src.type) * 0.1)) + if(myseed) + myseed.adjust_instability(round(chems.get_reagent_amount(src.type) * 0.15)) + /datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke name = "Unholy Water" overdose_threshold = 150 //Same as normal water diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 2cf9df6d50..bdaf39732f 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -77,6 +77,22 @@ make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10) category = list("initial","Botany Chemicals") +/datum/design/end_gro + name = "30u Enduro Grow" + id = "end_gro" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass= 30) + make_reagents = list(/datum/reagent/plantnutriment/endurogrow = 30) + category = list("initial","Botany Chemicals") + +/datum/design/liq_earth + name = "30u Liquid Earthquake" + id = "liq_earth" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass= 30) + make_reagents = list(/datum/reagent/plantnutriment/liquidearthquake = 30) + category = list("initial","Botany Chemicals") + /datum/design/weed_killer name = "Weed Killer" id = "weed_killer" From 5f5279d2ffd953a97a510db9eec44fb322bd45c6 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Wed, 2 Sep 2020 03:15:03 -0400 Subject: [PATCH 20/28] You wish for change... (Added instabilities.) --- code/modules/hydroponics/grown/ambrosia.dm | 1 + code/modules/hydroponics/grown/banana.dm | 1 + code/modules/hydroponics/grown/berries.dm | 1 + code/modules/hydroponics/grown/cannabis.dm | 1 + code/modules/hydroponics/grown/cereals.dm | 1 + code/modules/hydroponics/grown/chili.dm | 1 + code/modules/hydroponics/grown/cocoa_vanilla.dm | 1 + code/modules/hydroponics/grown/corn.dm | 1 + code/modules/hydroponics/grown/cotton.dm | 1 + code/modules/hydroponics/grown/grass_carpet.dm | 1 + code/modules/hydroponics/grown/kudzu.dm | 1 + code/modules/hydroponics/grown/melon.dm | 3 ++- code/modules/hydroponics/grown/misc.dm | 5 ++++- code/modules/hydroponics/grown/mushrooms.dm | 6 +++++- code/modules/hydroponics/grown/nettle.dm | 1 + code/modules/hydroponics/grown/onion.dm | 1 + code/modules/hydroponics/grown/peas.dm | 2 ++ code/modules/hydroponics/grown/root.dm | 2 ++ code/modules/hydroponics/grown/tea_coffee.dm | 1 + code/modules/hydroponics/grown/tomato.dm | 1 + code/modules/hydroponics/hydroponics.dm | 4 ++-- code/modules/reagents/chemistry/reagents/food_reagents.dm | 6 +----- code/modules/reagents/chemistry/reagents/other_reagents.dm | 4 ---- 23 files changed, 33 insertions(+), 14 deletions(-) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index e84025208a..210da04519 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -22,6 +22,7 @@ endurance = 25 yield = 6 potency = 5 + instability = 30 icon_dead = "ambrosia-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = list(/obj/item/seeds/ambrosia/deus) diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 81318f8fe1..e825c88524 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -8,6 +8,7 @@ product = /obj/item/reagent_containers/food/snacks/grown/banana lifespan = 50 endurance = 30 + instability = 10 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_dead = "banana-dead" genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest) diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index eba7a3d3c4..ca9e1f8a0e 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -10,6 +10,7 @@ maturation = 5 production = 5 yield = 2 + instability = 30 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes icon_dead = "berry-dead" // Same for the dead icon diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 6525ac42d4..041686c396 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -9,6 +9,7 @@ maturation = 8 potency = 20 growthstages = 1 + instability = 40 growing_icon = 'goon/icons/obj/hydroponics.dmi' icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes icon_dead = "cannabis-dead" // Same for the dead icon diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 1d1309acb8..9bfdb2979c 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -9,6 +9,7 @@ production = 1 yield = 4 potency = 15 + instability = 20 icon_dead = "wheat-dead" mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat) reagents_add = list(/datum/reagent/consumable/nutriment = 0.04) diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 001a90b441..2f8fb12724 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -11,6 +11,7 @@ production = 5 yield = 4 potency = 20 + instability = 30 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' icon_grow = "chili-grow" // Uses one growth icons set for all the subtypes icon_dead = "chili-dead" // Same for the dead icon diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index 9ac705aa83..5de0740b87 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -10,6 +10,7 @@ maturation = 5 production = 5 yield = 2 + instability = 20 growthstages = 5 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "cocoapod-grow" diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index ad09751e44..ae046c9ff3 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -8,6 +8,7 @@ product = /obj/item/reagent_containers/food/snacks/grown/corn maturation = 8 potency = 20 + instability = 50 // Corn used to be wheatgrass, but through generations of selective cultivation... growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' icon_grow = "corn-grow" // Uses one growth icons set for all the subtypes diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm index a898b76ee8..beff751479 100644 --- a/code/modules/hydroponics/grown/cotton.dm +++ b/code/modules/hydroponics/grown/cotton.dm @@ -12,6 +12,7 @@ production = 1 yield = 2 potency = 50 + instability = 15 growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing.dmi' icon_dead = "cotton-dead" diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index a74850f3be..e6fd991169 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -11,6 +11,7 @@ maturation = 2 production = 5 yield = 5 + instability = 10 growthstages = 2 icon_grow = "grass-grow" icon_dead = "grass-dead" diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 5f1fdcdaa9..73026e546a 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -11,6 +11,7 @@ lifespan = 20 endurance = 10 yield = 4 + instability = 55 growthstages = 4 rarity = 30 var/list/mutations = list() diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index 940508f66b..b988261770 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -8,6 +8,7 @@ product = /obj/item/reagent_containers/food/snacks/grown/watermelon lifespan = 50 endurance = 40 + instability = 20 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_dead = "watermelon-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) @@ -75,4 +76,4 @@ to_chat(user, "[src] rapidly turns into ash!") qdel(src) new /obj/effect/decal/cleanable/ash(drop_location()) -*/ \ No newline at end of file +*/ diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index fe60e9f397..59301732c6 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -11,6 +11,7 @@ production = 1 yield = 6 potency = 10 + instability = 35 growthstages = 3 grind_results = list(/datum/reagent/mustardgrind = 1) growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' @@ -111,6 +112,7 @@ maturation = 3 production = 5 yield = 4 + instability = 10 growthstages = 1 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' genes = list(/datum/plant_gene/trait/repeated_harvest) @@ -140,6 +142,7 @@ endurance = 50 maturation = 3 yield = 4 + instability = 15 growthstages = 2 reagents_add = list(/datum/reagent/consumable/sugar = 0.25) mutatelist = list(/obj/item/seeds/bamboo) @@ -534,4 +537,4 @@ /obj/item/reagent_containers/food/snacks/grown/aloe/microwave_act(obj/machinery/microwave/M) new /obj/item/stack/medical/aloe(drop_location(), 2) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 699a1c798d..80ba6b7375 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -18,6 +18,7 @@ production = 5 yield = 4 potency = 15 + instability = 30 growthstages = 4 genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' @@ -43,6 +44,7 @@ maturation = 10 production = 5 yield = 4 + instability = 30 growthstages = 3 genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' @@ -187,6 +189,7 @@ production = 1 yield = 5 potency = 15 + instability = 20 growthstages = 3 genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' @@ -244,6 +247,7 @@ production = 1 yield = 3 //-> spread potency = 30 //-> brightness + instability = 20 growthstages = 4 rarity = 20 genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism) @@ -334,4 +338,4 @@ /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom/attack_self(mob/user) . = ..() if(.) - investigate_log("was planted by [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY) \ No newline at end of file + investigate_log("was planted by [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY) diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index cee7748c59..e4aedfd4b0 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -8,6 +8,7 @@ lifespan = 30 endurance = 40 // tuff like a toiger yield = 4 + instability = 25 growthstages = 5 genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy) mutatelist = list(/obj/item/seeds/nettle/death) diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index a75b9caf5f..f6fcd3ae1b 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -10,6 +10,7 @@ production = 4 yield = 6 endurance = 25 + instability = 10 growthstages = 3 weed_chance = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' diff --git a/code/modules/hydroponics/grown/peas.dm b/code/modules/hydroponics/grown/peas.dm index 79d506cf56..0775f7c45d 100644 --- a/code/modules/hydroponics/grown/peas.dm +++ b/code/modules/hydroponics/grown/peas.dm @@ -8,6 +8,7 @@ product = /obj/item/reagent_containers/food/snacks/grown/peas maturation = 3 potency = 25 + instability = 15 growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' icon_grow = "peas-grow" @@ -79,6 +80,7 @@ potency = 75 yield = 1 production = 10 + instability = 45 //The world is a very unstable place. Constantly changing. growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' icon_grow = "worldpeas-grow" diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index ac171b4e45..5f9b55b881 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -9,6 +9,7 @@ maturation = 10 production = 1 yield = 5 + instability = 15 growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' mutatelist = list(/obj/item/seeds/carrot/parsnip) @@ -69,6 +70,7 @@ lifespan = 60 endurance = 50 yield = 6 + instability = 10 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' icon_dead = "whitebeet-dead" mutatelist = list(/obj/item/seeds/redbeet) diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index 223b2c7bce..1c8055f821 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -79,6 +79,7 @@ maturation = 5 production = 5 yield = 5 + instability = 20 growthstages = 5 icon_dead = "coffee-dead" genes = list(/datum/plant_gene/trait/repeated_harvest) diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index d3525c951d..af7d192e00 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -6,6 +6,7 @@ species = "tomato" plantname = "Tomato Plants" product = /obj/item/reagent_containers/food/snacks/grown/tomato + instability = 25 maturation = 8 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "tomato-grow" diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 39bcce1e0e..54a44110e3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -50,7 +50,7 @@ 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 + maxwater = tmp_capacity * 50 // Up to 400 maxnutri = (tmp_capacity * 5) + STATIC_NUTRIENT_CAPACITY // Up to 50 Maximum reagents.maximum_volume = maxnutri nutridrain = 1/rating @@ -634,7 +634,7 @@ if(!anchored) return self_sustaining = !self_sustaining - idle_power_usage = self_sustaining ? 2500 : 0 + idle_power_usage = self_sustaining ? 4000 : 0 to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].") update_icon() diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index bbbceac6a0..7979c7b0c7 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -161,7 +161,7 @@ /datum/reagent/consumable/sugar/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() if(chems.has_reagent(type, 1)) - mytray.adjustWeeds(rand(1,2)) + mytray.adjustWeeds(rand(2,3)) mytray.adjustPests(rand(1,2)) /datum/reagent/consumable/sugar/overdose_start(mob/living/M) @@ -174,10 +174,6 @@ ..() . = 1 -/datum/reagent/consumable/sugar/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) - . = ..() - mytray.adjustWeeds(rand(2,3)) - /datum/reagent/consumable/virus_food name = "Virus Food" description = "A mixture of water and milk. Virus cells can use this mixture to reproduce." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 00f72b3731..e9201a4e62 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -182,10 +182,6 @@ . = 1 ..() -/datum/reagent/blood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) - . = ..() - mytray.adjustPests(rand(2,3)) - /datum/reagent/liquidgibs name = "Liquid gibs" color = BLOOD_COLOR_HUMAN From 47ff98e4c54d59fc9ba3723c95399a89e480ed44 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Fri, 25 Sep 2020 18:12:26 -0400 Subject: [PATCH 21/28] Adds examine text, removes old self sustain checks --- code/modules/hydroponics/hydroponics.dm | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 54a44110e3..6226f97b9f 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -57,9 +57,11 @@ /obj/machinery/hydroponics/constructable/examine(mob/user) . = ..() + . += "Use Ctrl-Click to activate autogrow. Alt-Click to empty the tray's nutrients." if(in_range(user, src) || isobserver(user)) . += "The status display reads: Tray efficiency at [rating*100]%." + /obj/machinery/hydroponics/Destroy() if(myseed) qdel(myseed) @@ -315,19 +317,17 @@ else . += "It's empty." - if(!self_sustaining) - . += "Water: [waterlevel]/[maxwater]." - . += "Nutrient: [reagents.total_volume]/[maxnutri]." - if(self_sufficiency_progress > 0) - var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req) - . += "Treatment for self-sustenance are [percent_progress]% complete." - else - . += "It doesn't require any water or nutrients." + . += "Water: [waterlevel]/[maxwater].\n"+\ + "Nutrient: [reagents.total_volume]/[maxnutri]." + if(self_sustaining) + . += "The tray's autogrow is active, halving active reagent drain, and actively maintaning the plant." if(weedlevel >= 5) - . += "It's filled with weeds!" + to_chat(user, "It's filled with weeds!") if(pestlevel >= 5) - . += "It's filled with tiny worms!" + to_chat(user, "It's filled with tiny worms!") + to_chat(user, "" ) + /obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens. From 48df6a949465338eb666de6477bfba11db67313c Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 04:07:16 -0400 Subject: [PATCH 22/28] I shot the tray, I made an accurate tip. --- code/modules/plumbing/plumbers/autohydro.dm | 64 ------------------- .../machine_designs_service.dm | 8 --- .../research/techweb/nodes/medical_nodes.dm | 2 +- strings/tips.txt | 2 +- tgstation.dme | 1 - 5 files changed, 2 insertions(+), 75 deletions(-) delete mode 100644 code/modules/plumbing/plumbers/autohydro.dm diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm deleted file mode 100644 index 37590bb4f3..0000000000 --- a/code/modules/plumbing/plumbers/autohydro.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/machinery/hydroponics/constructable/automagic - name = "automated hydroponics system" - desc = "The bane of botanists everywhere. Accepts chemical reagents via plumbing, automatically harvests and removes dead plants." - obj_flags = CAN_BE_HIT | UNIQUE_RENAME - circuit = /obj/item/circuitboard/machine/hydroponics/automagic - self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly. - - -/obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers)) - return FALSE //avoid fucky wuckies - ..() - -/obj/machinery/hydroponics/constructable/automagic/default_unfasten_wrench(mob/user, obj/item/I, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - user.visible_message("[user.name] [anchored ? "fasten" : "unfasten"] [src]", \ - "You [anchored ? "fasten" : "unfasten"] [src]") - var/datum/component/plumbing/CP = GetComponent(/datum/component/plumbing) - if(anchored) - CP.enable() - else - CP.disable() - -/obj/machinery/hydroponics/constructable/automagic/Destroy() - . = ..() - STOP_PROCESSING(SSobj, src) - -/obj/machinery/hydroponics/constructable/automagic/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - create_reagents(100 , AMOUNT_VISIBLE) - -/obj/machinery/hydroponics/constructable/automagic/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) - AddComponent(/datum/component/plumbing/simple_demand) - -/obj/machinery/hydroponics/constructable/proc/can_be_rotated(mob/user, rotation_type) - return !anchored - -/obj/machinery/hydroponics/constructable/automagic/process() - if(reagents) - reagents.add_reagent(reagents) - reagents.clear_reagents() - if(dead) - dead = 0 - qdel(myseed) - myseed = null - update_icon() - name = initial(name) - desc = initial(desc) - if(harvest) - myseed.harvest_userless() - harvest = 0 - lastproduce = age - if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) - qdel(myseed) - myseed = null - dead = 0 - name = initial(name) - desc = initial(desc) - update_icon() - ..() diff --git a/code/modules/research/designs/machine_desings/machine_designs_service.dm b/code/modules/research/designs/machine_desings/machine_designs_service.dm index af4f650793..5cbff1c66a 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_service.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_service.dm @@ -81,14 +81,6 @@ category = list ("Hydroponics Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE -/datum/design/board/hydroponics/auto - name = "Machine Design (Automatic Hydroponics Tray Board)" - desc = "The circuit board for an automatic hydroponics tray. GIVE ME THE PLANT, CAPTAIN." - id = "autohydrotray" - build_path = /obj/machinery/hydroponics/constructable/automagic - category = list ("Hydroponics Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_MEDICAL - /datum/design/board/monkey_recycler name = "Machine Design (Monkey Recycler Board)" desc = "The circuit board for a monkey recycler." diff --git a/code/modules/research/techweb/nodes/medical_nodes.dm b/code/modules/research/techweb/nodes/medical_nodes.dm index 150e420c09..afab12990b 100644 --- a/code/modules/research/techweb/nodes/medical_nodes.dm +++ b/code/modules/research/techweb/nodes/medical_nodes.dm @@ -38,7 +38,7 @@ display_name = "Advanced Plumbing Technology" description = "Plumbing RCD." prereq_ids = list("plumbing", "adv_engi") - design_ids = list("plumb_rcd", "autohydrotray") + design_ids = list("plumb_rcd") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) //////////////////////Cybernetics///////////////////// diff --git a/strings/tips.txt b/strings/tips.txt index 5dc4e1b985..2039b30359 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -163,7 +163,7 @@ As a Botanist, you can mutate the plants growing in your hydroponics trays with As a Botanist, you should look into increasing the potency of your plants. This is shown by the size of the plant's sprite, and can increase the amount of chemicals, points gained from grinding them in the biogenerator, and lets people know you are a proficient botanist. As a Botanist, you can combine production trait chemicals and mix your own complex chemicals inside of the plants themselves using precursors. Chlorine (blumpkin) + radium and phosphorus (glowshrooms) equals unstable mutagen! As a Botanist, earthsblood is an incredibly powerful chemical found in Ambrosia Gaia, it heals all types of damages very rapidly but causes lingering brain damage and has a nasty overdose. You can combine the chemicals from watermelons (water), grass (hydrogen), and cherries (sugar) to mix mannitol in with your earthsblood to completely counteract its main drawback! -As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which is a plant mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood can make your trays and soil plots completely self sufficient when a plant containing such reagent is composted into them, meaning they won't need nutrients or water, and they'll automatically kill their own weeds and pests. +As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which is a plant mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood makes for a vastly superior fertilizer than most, giving decent stat boosts to most stats, and automatically killing weeds and pests! As a Cook, you can load your food into snack vending machines. As a Cook, you can rename your custom made food with a pen. As a Cook, any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs. diff --git a/tgstation.dme b/tgstation.dme index d71d8db2bf..84ba5e24f7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2873,7 +2873,6 @@ #include "code\modules\plumbing\ducts.dm" #include "code\modules\plumbing\plumbers\_plumb_machinery.dm" #include "code\modules\plumbing\plumbers\acclimator.dm" -#include "code\modules\plumbing\plumbers\autohydro.dm" #include "code\modules\plumbing\plumbers\bottler.dm" #include "code\modules\plumbing\plumbers\destroyer.dm" #include "code\modules\plumbing\plumbers\fermenter.dm" From 5a03688bdb1a9a5cef99a6bf9e22035905a9d750 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 04:43:02 -0400 Subject: [PATCH 23/28] Dirt not powered, var cleanup, plumbing enable --- code/modules/hydroponics/hydroponics.dm | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 6226f97b9f..6299d8ec41 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -28,8 +28,6 @@ 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_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 // Here lies irrigation. You won't be missed, because you were never used. @@ -44,6 +42,14 @@ 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)) + AddComponent(/datum/component/plumbing/simple_demand) + +/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) @@ -634,7 +640,7 @@ if(!anchored) return self_sustaining = !self_sustaining - idle_power_usage = self_sustaining ? 4000 : 0 + idle_power_usage = self_sustaining ? 2500 : 0 to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].") update_icon() @@ -716,4 +722,6 @@ qdel(src) else return ..() - \ No newline at end of file + +/obj/machinery/hydroponics/soil/CtrlClick(mob/user) + return //Dirt doesn't have electricity, last I checked. From a9e727954ec9b6b2f04af73ea422d523823c0dd2 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 04:49:07 -0400 Subject: [PATCH 24/28] No more automagic --- .../game/objects/items/circuitboards/machine_circuitboards.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 37d19783b5..3cd899fcf4 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -519,10 +519,6 @@ /obj/item/stack/sheet/glass = 1) needs_anchored = FALSE -/obj/item/circuitboard/machine/hydroponics/automagic - name = "Automatic Hydroponics Tray (Machine Board)" - build_path = /obj/machinery/hydroponics/constructable/automagic - /obj/item/circuitboard/machine/seed_extractor name = "Seed Extractor (Machine Board)" build_path = /obj/machinery/seed_extractor From fc3feae4c5ca7c65e93eb16b871284e350f0dc6b Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 05:43:09 -0400 Subject: [PATCH 25/28] Plumbing component removed, for now. --- code/modules/hydroponics/hydroponics.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 6299d8ec41..bee131b000 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -42,14 +42,6 @@ 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)) - AddComponent(/datum/component/plumbing/simple_demand) - -/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) From 7c695409d030a01e0891aa5432571e93f2c7ed22 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 06:40:09 -0400 Subject: [PATCH 26/28] Okay, we went back in time. Maybe this will work? --- code/modules/hydroponics/hydroponics.dm | 8 ++++---- strings/tips.txt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 6226f97b9f..bee131b000 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -28,8 +28,6 @@ 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_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 // Here lies irrigation. You won't be missed, because you were never used. @@ -634,7 +632,7 @@ if(!anchored) return self_sustaining = !self_sustaining - idle_power_usage = self_sustaining ? 4000 : 0 + idle_power_usage = self_sustaining ? 2500 : 0 to_chat(user, "You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].") update_icon() @@ -716,4 +714,6 @@ qdel(src) else return ..() - \ No newline at end of file + +/obj/machinery/hydroponics/soil/CtrlClick(mob/user) + return //Dirt doesn't have electricity, last I checked. diff --git a/strings/tips.txt b/strings/tips.txt index 5dc4e1b985..2039b30359 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -163,7 +163,7 @@ As a Botanist, you can mutate the plants growing in your hydroponics trays with As a Botanist, you should look into increasing the potency of your plants. This is shown by the size of the plant's sprite, and can increase the amount of chemicals, points gained from grinding them in the biogenerator, and lets people know you are a proficient botanist. As a Botanist, you can combine production trait chemicals and mix your own complex chemicals inside of the plants themselves using precursors. Chlorine (blumpkin) + radium and phosphorus (glowshrooms) equals unstable mutagen! As a Botanist, earthsblood is an incredibly powerful chemical found in Ambrosia Gaia, it heals all types of damages very rapidly but causes lingering brain damage and has a nasty overdose. You can combine the chemicals from watermelons (water), grass (hydrogen), and cherries (sugar) to mix mannitol in with your earthsblood to completely counteract its main drawback! -As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which is a plant mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood can make your trays and soil plots completely self sufficient when a plant containing such reagent is composted into them, meaning they won't need nutrients or water, and they'll automatically kill their own weeds and pests. +As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which is a plant mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood makes for a vastly superior fertilizer than most, giving decent stat boosts to most stats, and automatically killing weeds and pests! As a Cook, you can load your food into snack vending machines. As a Cook, you can rename your custom made food with a pen. As a Cook, any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs. From e0089ea813e0bfb8914003a308134f59c47121a5 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 06:44:11 -0400 Subject: [PATCH 27/28] Again? --- .../circuitboards/machine_circuitboards.dm | 4 ++ code/modules/plumbing/plumbers/autohydro.dm | 64 +++++++++++++++++++ .../machine_designs_service.dm | 8 +++ .../research/techweb/nodes/medical_nodes.dm | 2 +- tgstation.dme | 1 + 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 code/modules/plumbing/plumbers/autohydro.dm diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 3cd899fcf4..37d19783b5 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -519,6 +519,10 @@ /obj/item/stack/sheet/glass = 1) needs_anchored = FALSE +/obj/item/circuitboard/machine/hydroponics/automagic + name = "Automatic Hydroponics Tray (Machine Board)" + build_path = /obj/machinery/hydroponics/constructable/automagic + /obj/item/circuitboard/machine/seed_extractor name = "Seed Extractor (Machine Board)" build_path = /obj/machinery/seed_extractor diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm new file mode 100644 index 0000000000..37590bb4f3 --- /dev/null +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -0,0 +1,64 @@ +/obj/machinery/hydroponics/constructable/automagic + name = "automated hydroponics system" + desc = "The bane of botanists everywhere. Accepts chemical reagents via plumbing, automatically harvests and removes dead plants." + obj_flags = CAN_BE_HIT | UNIQUE_RENAME + circuit = /obj/item/circuitboard/machine/hydroponics/automagic + self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly. + + +/obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/reagent_containers)) + return FALSE //avoid fucky wuckies + ..() + +/obj/machinery/hydroponics/constructable/automagic/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + user.visible_message("[user.name] [anchored ? "fasten" : "unfasten"] [src]", \ + "You [anchored ? "fasten" : "unfasten"] [src]") + var/datum/component/plumbing/CP = GetComponent(/datum/component/plumbing) + if(anchored) + CP.enable() + else + CP.disable() + +/obj/machinery/hydroponics/constructable/automagic/Destroy() + . = ..() + STOP_PROCESSING(SSobj, src) + +/obj/machinery/hydroponics/constructable/automagic/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + create_reagents(100 , AMOUNT_VISIBLE) + +/obj/machinery/hydroponics/constructable/automagic/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated)) + AddComponent(/datum/component/plumbing/simple_demand) + +/obj/machinery/hydroponics/constructable/proc/can_be_rotated(mob/user, rotation_type) + return !anchored + +/obj/machinery/hydroponics/constructable/automagic/process() + if(reagents) + reagents.add_reagent(reagents) + reagents.clear_reagents() + if(dead) + dead = 0 + qdel(myseed) + myseed = null + update_icon() + name = initial(name) + desc = initial(desc) + if(harvest) + myseed.harvest_userless() + harvest = 0 + lastproduce = age + if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest)) + qdel(myseed) + myseed = null + dead = 0 + name = initial(name) + desc = initial(desc) + update_icon() + ..() diff --git a/code/modules/research/designs/machine_desings/machine_designs_service.dm b/code/modules/research/designs/machine_desings/machine_designs_service.dm index 5cbff1c66a..af4f650793 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_service.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_service.dm @@ -81,6 +81,14 @@ category = list ("Hydroponics Machinery") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/board/hydroponics/auto + name = "Machine Design (Automatic Hydroponics Tray Board)" + desc = "The circuit board for an automatic hydroponics tray. GIVE ME THE PLANT, CAPTAIN." + id = "autohydrotray" + build_path = /obj/machinery/hydroponics/constructable/automagic + category = list ("Hydroponics Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_MEDICAL + /datum/design/board/monkey_recycler name = "Machine Design (Monkey Recycler Board)" desc = "The circuit board for a monkey recycler." diff --git a/code/modules/research/techweb/nodes/medical_nodes.dm b/code/modules/research/techweb/nodes/medical_nodes.dm index afab12990b..150e420c09 100644 --- a/code/modules/research/techweb/nodes/medical_nodes.dm +++ b/code/modules/research/techweb/nodes/medical_nodes.dm @@ -38,7 +38,7 @@ display_name = "Advanced Plumbing Technology" description = "Plumbing RCD." prereq_ids = list("plumbing", "adv_engi") - design_ids = list("plumb_rcd") + design_ids = list("plumb_rcd", "autohydrotray") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) //////////////////////Cybernetics///////////////////// diff --git a/tgstation.dme b/tgstation.dme index 84ba5e24f7..d71d8db2bf 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2873,6 +2873,7 @@ #include "code\modules\plumbing\ducts.dm" #include "code\modules\plumbing\plumbers\_plumb_machinery.dm" #include "code\modules\plumbing\plumbers\acclimator.dm" +#include "code\modules\plumbing\plumbers\autohydro.dm" #include "code\modules\plumbing\plumbers\bottler.dm" #include "code\modules\plumbing\plumbers\destroyer.dm" #include "code\modules\plumbing\plumbers\fermenter.dm" From 9e702c2edef664b32da84fc588f102de97f1c4c6 Mon Sep 17 00:00:00 2001 From: The0bserver Date: Thu, 1 Oct 2020 06:49:54 -0400 Subject: [PATCH 28/28] No more self sufficiency. --- code/modules/plumbing/plumbers/autohydro.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/plumbing/plumbers/autohydro.dm b/code/modules/plumbing/plumbers/autohydro.dm index 37590bb4f3..dfcc00f71e 100644 --- a/code/modules/plumbing/plumbers/autohydro.dm +++ b/code/modules/plumbing/plumbers/autohydro.dm @@ -3,7 +3,6 @@ desc = "The bane of botanists everywhere. Accepts chemical reagents via plumbing, automatically harvests and removes dead plants." obj_flags = CAN_BE_HIT | UNIQUE_RENAME circuit = /obj/item/circuitboard/machine/hydroponics/automagic - self_sufficiency_req = 400 //automating hydroponics makes gaia sad so she needs more drugs to turn they tray godly. /obj/machinery/hydroponics/constructable/automagic/attackby(obj/item/O, mob/user, params)