diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index ac88069151..d8253390c5 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -40,6 +40,11 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob user << "You extract some seeds from the grass tile." new /obj/item/seeds/grassseed(loc) + else if(istype(O, /obj/item/weapon/fossil/plant)) // Fossils + var/obj/item/seeds/random/R = new(get_turf(src)) + to_chat(user, "\The [src] pulverizes \the [O] and spits out \the [R].") + qdel(O) + else if(default_unfasten_wrench(user, O, 20)) return diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index f98fe79f51..4a8662c053 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -84,6 +84,11 @@ obj/item/weapon/chainsaw/afterattack(atom/A as mob|obj|turf|area, mob/user as mo else if(istype(A,/obj/effect/plant)) var/obj/effect/plant/P = A qdel(P) //Plant isn't surviving that. At all + else if(istype(A,/obj/machinery/portable_atmospherics/hydroponics)) + var/obj/machinery/portable_atmospherics/hydroponics/Hyd = A + if(Hyd.seed && !Hyd.dead) + to_chat(user, "You shred the plant.") + Hyd.die() if (istype(A, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,A) <= 1) to_chat(user, "You begin filling the tank on the chainsaw.") if(do_after(usr, 15)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 45f9c77059..110d3984f8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -28,3 +28,23 @@ else starts_with += /obj/item/clothing/suit/storage/apron/overalls return ..() + +/obj/structure/closet/secure_closet/hydroponics/sci + name = "xenoflorist's locker" + req_access = list(access_xenobiology) + icon_state = "scihydrosecure1" + icon_closed = "scihydrosecure" + icon_locked = "scihydrosecure1" + icon_opened = "scihydrosecureopen" + icon_broken = "scihydrosecurebroken" + icon_off = "scihydrosecureoff" + +/obj/structure/closet/secure_closet/hydroponics/sci/Initialize() + starts_with += /obj/item/clothing/head/bio_hood/scientist + starts_with += /obj/item/clothing/suit/bio_suit/scientist + starts_with += /obj/item/clothing/mask/gas/clear + + if(prob(1)) + starts_with += /obj/item/weapon/chainsaw + + return ..() diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index 28c468aa4e..ade6cf4ea3 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -57,4 +57,50 @@ #define TRAIT_BIOLUM 36 #define TRAIT_BIOLUM_COLOUR 37 #define TRAIT_IMMUTABLE 38 -#define TRAIT_FLESH_COLOUR 39 \ No newline at end of file +#define TRAIT_FLESH_COLOUR 39 +#define TRAIT_SPORING 40 +#define TRAIT_BENEFICIAL_REAG 41 +#define TRAIT_MUTAGENIC_REAG 42 +#define TRAIT_TOXIC_REAG 43 + +// Global list initialization for plants. + +GLOBAL_LIST_INIT(plant_mob_products, list( + /mob/living/simple_mob/creature = 10, + /mob/living/simple_mob/blob/spore = 20, + /mob/living/simple_mob/tomato = 30, + /mob/living/simple_mob/animal/passive/dog = 5, + /mob/living/simple_mob/animal/passive/chicken = 5, + /mob/living/simple_mob/animal/passive/crab = 5, + /mob/living/simple_mob/animal/passive/lizard = 4, + /mob/living/simple_mob/animal/passive/lizard/large = 1, + /mob/living/simple_mob/animal/giant_spider/pepper = 1, + /mob/living/simple_mob/animal/giant_spider/frost = 1, + /mob/living/simple_mob/animal/giant_spider/webslinger = 1, + /mob/living/simple_mob/animal/passive/mouse = 1, + /mob/living/simple_mob/animal/space/carp = 1, + /mob/living/carbon/human/monkey = 1, + /mob/living/carbon/alien/diona = 1 + )) + +GLOBAL_LIST_INIT(plant_item_products, list( + /obj/item/stack/material/cloth = 30, + /obj/item/stack/material/wax = 20, + /obj/item/stack/material/log = 30, + /obj/item/stack/material/resin = 10, + /obj/item/weapon/material/shard/shrapnel = 2, + /obj/item/weapon/ore = 5, + /obj/item/weapon/ore/iron = 2, + /obj/item/weapon/ore/coal = 2, + /obj/item/weapon/reagent_containers/food/snacks/meat = 3, + /obj/random/meat = 1, + /obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 2, + /obj/item/weapon/reagent_containers/food/drinks/smallmilk = 2, + /obj/item/ammo_casing/a145 = 1, + /obj/item/ammo_casing/chemdart/small = 1, + /obj/item/ammo_casing/chemdart = 1, + /obj/item/organ/internal/brain/grey = 1, + /obj/item/organ/internal/heart/grey = 1, + /obj/item/weapon/spacecash/c1 = 3, + /obj/item/weapon/spacecash/c10 = 1 + )) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index b2d4443c9c..f0f186e949 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -26,6 +26,11 @@ var/has_item_product // Item products. (Eggy) var/force_layer +// Making the assumption anything in HYDRO-ponics is capable of processing water, and nutrients commonly associated with it, leaving us with the below to be tweaked. + var/list/beneficial_reagents // Reagents considered uniquely 'beneficial' by a plant. + var/list/mutagenic_reagents // Reagents considered uniquely 'mutagenic' by a plant. + var/list/toxic_reagents // Reagents considered uniquely 'toxic' by a plant. + /datum/seed/New() set_trait(TRAIT_IMMUTABLE, 0) // If set, plant will never mutate. If -1, plant is highly mutable. @@ -63,6 +68,10 @@ set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon. + set_trait(TRAIT_SPORING, 0) // Is the plant able to periodically produce spores when in a tray. 1, plant produces chem clouds, 0 it does not. + set_trait(TRAIT_BENEFICIAL_REAG, null) // Reagents considered uniquely 'beneficial' by a plant. This should be an associated list of lists, or null. Examples in tray.dm. nested list: health, yield, mut + set_trait(TRAIT_MUTAGENIC_REAG, null) // Reagents considered uniquely 'mutagenic' by a plant. This should be an associated list, or null. Examples in tray.dm + set_trait(TRAIT_TOXIC_REAG, null) // Reagents considered uniquely 'toxic' by a plant. This should be an associated list, or null. Examples in tray.dm spawn(5) sleep(-1) @@ -295,9 +304,20 @@ health_change += rand(1,3) * HYDRO_SPEED_MULTIPLIER // Handle gas production. - if(exude_gasses && exude_gasses.len && !check_only) - for(var/gas in exude_gasses) - environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*(get_trait(TRAIT_POTENCY)/5))/exude_gasses.len))) + if(!check_only) + if(exude_gasses && exude_gasses.len) + for(var/gas in exude_gasses) + environment.adjust_gas(gas, max(1,round((exude_gasses[gas]*(get_trait(TRAIT_POTENCY)/5))/exude_gasses.len))) + + if(get_trait(TRAIT_SPORING)) + var/can_spore = TRUE + var/obj/machinery/portable_atmospherics/hydroponics/hometray = locate(/obj/machinery/portable_atmospherics/hydroponics) in current_turf + + if(health_change > 2 || (hometray && hometray.closed_system)) + can_spore = FALSE + + if(can_spore && prob(5)) + create_spores(current_turf) // Handle light requirements. if(!light_supplied) @@ -445,6 +465,30 @@ banned_chems += new_chem chems[new_chem] = list(rand(1,10),rand(10,20)) + if(prob(5)) + var/unique_beneficial_count = rand(1, 5) + if(!beneficial_reagents) + beneficial_reagents = list() + for(var/x = 1 to unique_beneficial_count) + beneficial_reagents[pick(SSchemistry.chemical_reagents)] = list(round(rand(-100, 100) / 10), round(rand(-100, 100) / 10), round(rand(-100, 100) / 10)) + set_trait(TRAIT_BENEFICIAL_REAG, beneficial_reagents) + + if(prob(5)) + var/unique_mutagenic_count = rand(1, 5) + if(!mutagenic_reagents) + mutagenic_reagents = list() + for(var/x = 1 to unique_mutagenic_count) + mutagenic_reagents[pick(SSchemistry.chemical_reagents)] = rand(0, 20) + set_trait(TRAIT_MUTAGENIC_REAG, mutagenic_reagents) + + if(prob(5)) + var/unique_toxic_count = rand(1, 5) + if(!toxic_reagents) + toxic_reagents = list() + for(var/x = 1 to unique_toxic_count) + toxic_reagents[pick(SSchemistry.chemical_reagents)] = round(rand(-100, 100) / 10) + set_trait(TRAIT_TOXIC_REAG, toxic_reagents) + if(prob(90)) set_trait(TRAIT_REQUIRES_NUTRIENTS,1) set_trait(TRAIT_NUTRIENT_CONSUMPTION,rand(25)/25) @@ -492,6 +536,15 @@ set_trait(TRAIT_BIOLUM,1) set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + if(prob(3)) + set_trait(TRAIT_SPORING,1) + + if(prob(5)) + if(prob(30)) + has_mob_product = pickweight(GLOB.plant_mob_products) + else + has_item_product = pickweight(GLOB.plant_item_products) + set_trait(TRAIT_ENDURANCE,rand(60,100)) set_trait(TRAIT_YIELD,rand(3,15)) set_trait(TRAIT_MATURATION,rand(5,15)) @@ -534,6 +587,13 @@ set_trait(TRAIT_LIGHT_TOLERANCE, get_trait(TRAIT_LIGHT_TOLERANCE)+(rand(-2,2)*degree),10,0) if(4) set_trait(TRAIT_TOXINS_TOLERANCE, get_trait(TRAIT_TOXINS_TOLERANCE)+(rand(-2,2)*degree),10,0) + if(prob(degree*3)) + var/unique_toxic_count = rand(1, 5) + if(!toxic_reagents) + toxic_reagents = list() + for(var/x = 1 to unique_toxic_count) + toxic_reagents[pick(SSchemistry.chemical_reagents)] = round(rand(-100, 100) / 10) + set_trait(TRAIT_TOXIC_REAG, toxic_reagents) if(5) set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0) if(prob(degree*5)) @@ -547,6 +607,13 @@ if(7) if(get_trait(TRAIT_YIELD) != -1) set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0) + if(prob(degree*3)) + var/unique_mutagenic_count = rand(1, 5) + if(!mutagenic_reagents) + mutagenic_reagents = list() + for(var/x = 1 to unique_mutagenic_count) + mutagenic_reagents[pick(SSchemistry.chemical_reagents)] = rand(0, 20) + set_trait(TRAIT_MUTAGENIC_REAG, mutagenic_reagents) if(8) set_trait(TRAIT_ENDURANCE, get_trait(TRAIT_ENDURANCE)+(rand(-5,5)*degree),100,10) set_trait(TRAIT_PRODUCTION, get_trait(TRAIT_PRODUCTION)+(rand(-1,1)*degree),10, 1) @@ -554,10 +621,19 @@ if(prob(degree*5)) set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") + if(prob(degree*3)) + set_trait(TRAIT_SPORING, !get_trait(TRAIT_SPORING)) if(9) set_trait(TRAIT_MATURATION, get_trait(TRAIT_MATURATION)+(rand(-1,1)*degree),30, 0) if(prob(degree*5)) set_trait(TRAIT_HARVEST_REPEAT, !get_trait(TRAIT_HARVEST_REPEAT)) + if(prob(degree*3)) + var/unique_beneficial_count = rand(1, 5) + if(!beneficial_reagents) + beneficial_reagents = list() + for(var/x = 1 to unique_beneficial_count) + beneficial_reagents[pick(SSchemistry.chemical_reagents)] = list(round(rand(-100, 100) / 10), round(rand(-100, 100) / 10), round(rand(-100, 100) / 10)) + set_trait(TRAIT_BENEFICIAL_REAG, beneficial_reagents) if(10) if(prob(degree*2)) set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM)) @@ -612,8 +688,17 @@ for(var/gas in exude_gasses) exude_gasses[gas] = max(1,round(exude_gasses[gas]*0.8)) + set_trait(TRAIT_BENEFICIAL_REAG, gene.values["[TRAIT_BENEFICIAL_REAG]"].Copy()) + + set_trait(TRAIT_MUTAGENIC_REAG, gene.values["[TRAIT_MUTAGENIC_REAG]"].Copy()) + + set_trait(TRAIT_TOXIC_REAG, gene.values["[TRAIT_TOXIC_REAG]"].Copy()) + gene.values["[TRAIT_EXUDE_GASSES]"] = null gene.values["[TRAIT_CHEMS]"] = null + gene.values["[TRAIT_BENEFICIAL_REAG]"] = null + gene.values["[TRAIT_MUTAGENIC_REAG]"] = null + gene.values["[TRAIT_TOXIC_REAG]"] = null if(GENE_DIET) var/list/new_gasses = gene.values["[TRAIT_CONSUME_GASSES]"] @@ -643,7 +728,7 @@ if(GENE_BIOCHEMISTRY) P.values["[TRAIT_CHEMS]"] = chems P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses - traits_to_copy = list(TRAIT_POTENCY) + traits_to_copy = list(TRAIT_POTENCY, TRAIT_SPORING, TRAIT_BENEFICIAL_REAG, TRAIT_MUTAGENIC_REAG, TRAIT_TOXIC_REAG) if(GENE_OUTPUT) traits_to_copy = list(TRAIT_PRODUCES_POWER,TRAIT_BIOLUM) if(GENE_ATMOSPHERE) @@ -680,6 +765,10 @@ if(!user) return + if(get_trait(TRAIT_SPORING) && prob(round(30 * yield_mod))) + var/turf/T = get_turf(user) + create_spores(T) + if(!force_amount && get_trait(TRAIT_YIELD) == 0 && !harvest_sample) if(istype(user)) user << "You fail to harvest anything useful." else diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 9e34611b7d..a23b3031d5 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -317,7 +317,7 @@ seed_name = "ambrosia deus" display_name = "ambrosia deus" kitchen_tag = "ambrosiadeus" - mutants = null + mutants = list("ambrosiainfernus") chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10)) /datum/seed/ambrosia/deus/New() @@ -325,6 +325,19 @@ set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD") set_trait(TRAIT_PLANT_COLOUR,"#2A9C61") +/datum/seed/ambrosia/infernus + name = "ambrosiainfernus" + seed_name = "ambrosia infernus" + display_name = "ambrosia infernus" + kitchen_tag = "ambrosiainfernus" + mutants = null + chems = list("nutriment" = list(1,3), "oxycodone" = list(1,8), "impedrezene" = list(1,10), "mindbreaker" = list(1,10)) + +/datum/seed/ambrosia/infernus/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#dc143c") + set_trait(TRAIT_PLANT_COLOUR,"#b22222") + //Mushrooms/varieties. /datum/seed/mushroom name = "mushrooms" @@ -507,6 +520,25 @@ set_trait(TRAIT_PLANT_COLOUR,"#E6E6E6") set_trait(TRAIT_PLANT_ICON,"mushroom10") +/datum/seed/mushroom/spore + name = "sporeshroom" + seed_name = "corpellian" + display_name = "corpellian" + mutants = null + chems = list("serotrotium" = list(5,10), "mold" = list(1,10)) + +/datum/seed/mushroom/spore/New() + ..() + set_trait(TRAIT_MATURATION,15) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,4) + set_trait(TRAIT_POTENCY,20) + set_trait(TRAIT_PRODUCT_ICON,"mushroom5") + set_trait(TRAIT_PRODUCT_COLOUR,"#e29cd2") + set_trait(TRAIT_PLANT_COLOUR,"#f8e6f4") + set_trait(TRAIT_PLANT_ICON,"mushroom9") + set_trait(TRAIT_SPORING, TRUE) + //Flowers/varieties /datum/seed/flower name = "harebells" @@ -746,7 +778,7 @@ seed_name = "peanut" display_name = "peanut vines" kitchen_tag = "peanut" - chems = list("nutriment" = list(1,10), "peanutoil" = list(1,3)) + chems = list("nutriment" = list(1,10), "peanutoil" = list(3,10)) /datum/seed/peanuts/New() ..() @@ -755,7 +787,7 @@ set_trait(TRAIT_PRODUCTION,6) set_trait(TRAIT_YIELD,6) set_trait(TRAIT_POTENCY,10) - set_trait(TRAIT_PRODUCT_ICON,"potato") + set_trait(TRAIT_PRODUCT_ICON,"nuts") set_trait(TRAIT_PRODUCT_COLOUR,"#C4AE7A") set_trait(TRAIT_PLANT_ICON,"bush2") set_trait(TRAIT_IDEAL_LIGHT, 6) @@ -765,7 +797,7 @@ seed_name = "vanilla" display_name = "vanilla" kitchen_tag = "vanilla" - chems = list("nutriment" = list(1,10), "vanilla" = list(0,3), "sugar" = list(0, 1)) + chems = list("nutriment" = list(1,10), "vanilla" = list(2,8), "sugar" = list(1, 4)) /datum/seed/vanilla/New() ..() @@ -829,7 +861,7 @@ seed_name = "corn" display_name = "ears of corn" kitchen_tag = "corn" - chems = list("nutriment" = list(1,10), "cornoil" = list(1,10)) + chems = list("nutriment" = list(1,10), "cornoil" = list(3,15)) trash_type = /obj/item/weapon/corncob /datum/seed/corn/New() @@ -906,7 +938,7 @@ seed_name = "wheat" display_name = "wheat stalks" kitchen_tag = "wheat" - chems = list("nutriment" = list(1,25), "flour" = list(15,15)) + chems = list("nutriment" = list(1,25), "flour" = list(10,30)) /datum/seed/wheat/New() ..() diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 047a7d895a..1e99531dd6 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -182,6 +182,12 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) /obj/item/seeds/plumpmycelium seed_type = "plumphelmet" +/obj/item/seeds/plastellmycelium + seed_type = "plastic" + +/obj/item/seeds/sporemycelium + seed_type = "sporeshroom" + /obj/item/seeds/nettleseed seed_type = "nettle" @@ -218,6 +224,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) /obj/item/seeds/ambrosiadeusseed seed_type = "ambrosiadeus" +/obj/item/seeds/ambrosiainfernusseed + seed_type = "ambrosiainfernus" + /obj/item/seeds/whitebeetseed seed_type = "whitebeet" diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 4e97816cf4..cc29f0c05f 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -135,6 +135,7 @@ /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/vanilla = 3, + /obj/item/seeds/wabback = 2, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3 diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index 8a8ceabfeb..db0fd2fe89 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -34,6 +34,9 @@ seed.do_thorns(victim,src) seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg")) + if(seed.get_trait(TRAIT_SPORING) && prob(round(seed.get_trait(TRAIT_POTENCY)/2))) + seed.create_spores(get_turf(victim)) + /obj/effect/plant/proc/unbuckle() if(has_buckled_mobs()) for(var/A in buckled_mobs) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 5551cc95ad..d86f19adeb 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -46,7 +46,7 @@ // Reagent information for process(), consider moving this to a controller along // with cycle information under 'mechanical concerns' at some point. - var/global/list/toxic_reagents = list( + var/static/list/toxic_reagents = list( "anti_toxin" = -2, "toxin" = 2, "fluorine" = 2.5, @@ -57,7 +57,7 @@ "cryoxadone" = -3, "radium" = 2 ) - var/global/list/nutrient_reagents = list( + var/static/list/nutrient_reagents = list( "milk" = 0.1, "beer" = 0.25, "phosphorus" = 0.1, @@ -71,7 +71,7 @@ "robustharvest" = 1, "left4zed" = 1 ) - var/global/list/weedkiller_reagents = list( + var/static/list/weedkiller_reagents = list( "fluorine" = -4, "chlorine" = -3, "phosphorus" = -2, @@ -81,12 +81,12 @@ "plantbgone" = -8, "adminordrazine" = -5 ) - var/global/list/pestkiller_reagents = list( + var/static/list/pestkiller_reagents = list( "sugar" = 2, "diethylamine" = -2, "adminordrazine" = -5 ) - var/global/list/water_reagents = list( + var/static/list/water_reagents = list( "water" = 1, "adminordrazine" = 1, "milk" = 0.9, @@ -98,8 +98,8 @@ "sodawater" = 1, ) - // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order). - var/global/list/beneficial_reagents = list( + // Beneficial reagents also have values for modifying health, yield_mod and mut_mod (in that order). + var/static/list/beneficial_reagents = list( "beer" = list( -0.05, 0, 0 ), "fluorine" = list( -2, 0, 0 ), "chlorine" = list( -1, 0, 0 ), @@ -120,7 +120,7 @@ // Mutagen list specifies minimum value for the mutation to take place, rather // than a bound as the lists above specify. - var/global/list/mutagenic_reagents = list( + var/static/list/mutagenic_reagents = list( "radium" = 8, "mutagen" = 15 ) @@ -250,24 +250,37 @@ var/reagent_total = temp_chem_holder.reagents.get_reagent_amount(R.id) if(seed && !dead) - //Handle some general level adjustments. - if(toxic_reagents[R.id]) - toxins += toxic_reagents[R.id] * reagent_total - if(weedkiller_reagents[R.id]) - weedlevel -= weedkiller_reagents[R.id] * reagent_total - if(pestkiller_reagents[R.id]) - pestlevel += pestkiller_reagents[R.id] * reagent_total - // Beneficial reagents have a few impacts along with health buffs. - if(beneficial_reagents[R.id]) + if(seed.beneficial_reagents && seed.beneficial_reagents[R.id]) + health += seed.beneficial_reagents[R.id][1] * reagent_total + yield_mod += seed.beneficial_reagents[R.id][2] * reagent_total + mutation_mod += seed.beneficial_reagents[R.id][3] * reagent_total + + else if(beneficial_reagents[R.id]) health += beneficial_reagents[R.id][1] * reagent_total yield_mod += beneficial_reagents[R.id][2] * reagent_total mutation_mod += beneficial_reagents[R.id][3] * reagent_total // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation. - if(mutagenic_reagents[R.id]) + if(seed.mutagenic_reagents && seed.mutagenic_reagents[R.id]) + mutation_level += reagent_total*seed.mutagenic_reagents[R.id]+mutation_mod + + else if(mutagenic_reagents[R.id]) mutation_level += reagent_total*mutagenic_reagents[R.id]+mutation_mod + // Toxic reagents can possibly differ between plants. + if(seed.toxic_reagents && seed.toxic_reagents[R.id]) + toxins += seed.toxic_reagents[R.id] * reagent_total + + else if(toxic_reagents[R.id]) + toxins += toxic_reagents[R.id] * reagent_total + + //Handle some general level adjustments. These values are independent of plants existing. + if(weedkiller_reagents[R.id]) + weedlevel -= weedkiller_reagents[R.id] * reagent_total + if(pestkiller_reagents[R.id]) + pestlevel += pestkiller_reagents[R.id] * reagent_total + // Handle nutrient refilling. if(nutrient_reagents[R.id]) nutrilevel += nutrient_reagents[R.id] * reagent_total diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 234db074f0..0473b095df 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -553,6 +553,20 @@ required_reagents = list ("ammonia" = 1, "ethanol" = 1) result_amount = 2 +/datum/chemical_reaction/left4zed + name = "Left4Zed" + id = "left4zed" + result = "left4zed" + required_reagents = list ("diethylamine" = 2, "mutagen" = 1) + result_amount = 3 + +/datum/chemical_reaction/robustharvest + name = "RobustHarvest" + id = "robustharvest" + result = "robustharvest" + required_reagents = list ("ammonia" = 1, "calcium" = 1, "neurotoxic_protein" = 1) + result_amount = 3 + /datum/chemical_reaction/space_cleaner name = "Space cleaner" id = "cleaner" diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm index e74ce556bd..9a774dee24 100644 --- a/code/modules/reagents/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/dispenser/dispenser_presets.dm @@ -140,6 +140,4 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/berry, /obj/item/weapon/reagent_containers/chem_disp_cartridge/decaf - - ) diff --git a/code/modules/reagents/distilling/Distilling-Recipes.dm b/code/modules/reagents/distilling/Distilling-Recipes.dm index d610e32e9b..a8ac2ee975 100644 --- a/code/modules/reagents/distilling/Distilling-Recipes.dm +++ b/code/modules/reagents/distilling/Distilling-Recipes.dm @@ -50,12 +50,14 @@ return 1 +/* /datum/chemical_reaction/distilling/on_reaction(var/datum/reagents/holder, var/created_volume) if(istype(holder.my_atom, /obj/item/weapon/reagent_containers/glass/distilling)) var/obj/item/weapon/reagent_containers/glass/distilling/D = holder.my_atom var/obj/machinery/portable_atmospherics/powered/reagent_distillery/RD = D.Master RD.current_temp += temp_shift return +*/ // Subtypes // diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 80fb1712be..14f7fba854 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index 796f305cb0..1939ac63a7 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -10627,8 +10627,8 @@ "dWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora) "dWt" = (/obj/machinery/seed_storage/xenobotany,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "dWu" = (/obj/machinery/vending/hydronutrients{categories = 3},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) -"dWv" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) -"dWw" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"dWv" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/closet/secure_closet/hydroponics/sci,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) +"dWw" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/light,/obj/structure/closet/secure_closet/hydroponics/sci,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "dWx" = (/obj/structure/closet/emcloset/legacy,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) "dWy" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Port to Isolation"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation) "dWz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/obj/machinery/meter,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation) diff --git a/maps/southern_cross/southern_cross-4.dmm b/maps/southern_cross/southern_cross-4.dmm index 18e4897995..869946b07f 100644 --- a/maps/southern_cross/southern_cross-4.dmm +++ b/maps/southern_cross/southern_cross-4.dmm @@ -439,7 +439,7 @@ "iz" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave) "iA" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal) "iB" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/normal) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxcwcwcwcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyczczczaaaaaaaaaaaaaaaaaa aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcxcXcZcYcxababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa @@ -697,3 +697,4 @@ adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadieiAiAiAadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadiBiBiBadadadadadadadadad "} + diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index 26deeda170..75be5e5ce0 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -2262,7 +2262,7 @@ "Rz" = (/obj/effect/floor_decal/corner/green/full,/obj/structure/window/reinforced/holowindow/disappearing{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt) "RA" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/structure/window/reinforced/holowindow/disappearing{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt) "RB" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -2520,3 +2520,4 @@ aaaaRfababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} +