Files
MrMelbert 74983781a7 Buffs mutagen hydroponics application, adds some plant traits to interact with it (#94783)
## About The Pull Request

Unstable Mutagen

1. Now consistently adds 0.1 instability per unit per tick (the same as
L4Z)
2. No longer applies toxin damage directly
3. RNG roll now scales strength based on volume - 10u of mutagen = 1x
effect modifier.
4. RNG instability roll now grants 2(*modifier) instability (down from
5)
5. RNG instability roll now also adds 1.5(*modifier) toxins 
6. RNG instability roll now applies even if the tray is set to auto-grow
7. RNG health penalty now deals 5(*modifier) damage (down from 10)


Uranium

1. Now consistently adds 0.05 instability per unit per tick (half as
powerful as L4Z)
2. Now adds `0.5 * volume * toxpower` toxins, rather than `volume /
toxpower`
3. No longer damages plant health directly
4. Has the same changes as Unstable Mutagen wrt RNG rolls

New genes

- Adds `Toxin Resistance`, which grants the plant immunity to health
damage from high toxins in the tray.
   - Available in Death Berries, for which it is now their graft gene.
- Adds `Toxin Adaptation`, which not only grants the plant immunity to
health damage
- Not available naturally (yet?), must be mutated (or found in strange
seeds)

Other

Cleaned up a smidge of botany code while working in the area

## Why It's Good For The Game

Unstable Mutagen is... ok. 
It's perfectly usable, but it requires a lot of work for something that
you don't have easy access to.
Best case it's only slightly (1.25x) better than L4Z alone. Gurus will
make a mixture of L4Z, mutagen, and cryoxadone or multiver for maximum
mutation speed, which is cool, but a little cheesy.

As a consequence, Mutagen is USUALLY only used 1. as a noob trap and 2.
to get Kudzu or spiders

This makes me sad considering how it used to have legendary status for
botany. So I kinda wanted to bring it back.

The flat scaling makes it worst case AS GOOD AS L4Z. You are rewarded
for getting something besides vendor chems.
The RNG roll changes give it a bit of a boost, so it becomes "L4Z+ but
with a minor downside". It also removes the cheese aspect, which I admit
is kinda sad.

Green = Mutagen
Purple = l4z 
p = probability of RNG instability 
v = volume
y = instability
x = ticks

<img width="1505" height="721" alt="image"
src="https://github.com/user-attachments/assets/ea67d198-ea4f-44a7-9798-7d1bf0f3ef8b"
/>

20u mutagen = 17 ticks for 100 instability + 25 toxins
20u l4z = 25ticks for 100 instability + 0 toxins

Speed scales faster (1.25x faster at 10u, 1.5x faster at 20u, 1.75x
faster at 30u) - but so does toxin accumulation

TL;DR more mutagen = more mutation = more toxin

Now you're wondering "Okay where does the gene changes come into play" 
Well I'm a big fan of fertilizers that require you use *botany*
knowledge, not chem knowledge, *botany* knowledge to maximize their
potential. For example, using Weed Adaptation for consequence-free
Liquid Earthquake.

I wanted do to that here, so I added these two genes that allow you to
get no penalties for tray toxins, allowing "unchecked" use of mutagen
(and such) for a clever botanist.

## Changelog

🆑 Melbert
balance: Rebalanced Unstable Mutagen's / Uranium's botany use. It now
always increases instability (on par with L4Z), and occasionally
increases instability even more at the costs of some toxins. It also
scales with volume
add: Adds "Toxin Resistance" gene to botany which makes the plant immune
to toxin damage. Given (and graftable from) Death Berries.
add: Adds "Toxin Adaptation" gene to botany which makes the plant heal
from toxin damage. Only in strange seeds (for now).
code: Cleaned up a smidge of botany code 
/🆑
2026-01-22 17:09:15 +13:00

234 lines
8.1 KiB
Plaintext

// Berries
/obj/item/seeds/berry
name = "berry seed pack"
desc = "These seeds grow into berry bushes."
icon_state = "seed-berry"
species = "berry"
plantname = "Berry Bush"
product = /obj/item/food/grown/berries
lifespan = 20
maturation = 5
production = 5
yield = 2
instability = 30
growing_icon = 'icons/obj/service/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
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison)
reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1)
/obj/item/food/grown/berries
seed = /obj/item/seeds/berry
name = "bunch of berries"
desc = "Nutritious!"
icon_state = "berrypile"
gender = PLURAL
foodtypes = FRUIT
tastes = list("berry" = 1)
distill_reagent = /datum/reagent/consumable/ethanol/gin
/obj/item/food/grown/berries/juice_typepath()
return /datum/reagent/consumable/berryjuice
// Poison Berries
/obj/item/seeds/berry/poison
name = "poison-berry seed pack"
desc = "These seeds grow into poison-berry bushes."
icon_state = "seed-poisonberry"
species = "poisonberry"
plantname = "Poison-Berry Bush"
product = /obj/item/food/grown/berries/poison
mutatelist = list(/obj/item/seeds/berry/death)
reagents_add = list(/datum/reagent/toxin/cyanide = 0.15, /datum/reagent/toxin/staminatoxin = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1)
rarity = 10 // Mildly poisonous berries are common in reality
/obj/item/food/grown/berries/poison
seed = /obj/item/seeds/berry/poison
name = "bunch of poison-berries"
desc = "Taste so good, you might die!"
icon_state = "poisonberrypile"
bite_consumption_mod = 3
foodtypes = FRUIT | TOXIC
tastes = list("poison-berry" = 1)
distill_reagent = null
wine_power = 35
/obj/item/food/grown/berries/poison/juice_typepath()
return /datum/reagent/consumable/poisonberryjuice
// Death Berries
/obj/item/seeds/berry/death
name = "death-berry seed pack"
desc = "These seeds grow into death berries."
icon_state = "seed-deathberry"
species = "deathberry"
plantname = "Death Berry Bush"
product = /obj/item/food/grown/berries/death
lifespan = 30
potency = 50
mutatelist = null
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/tox_resistance)
reagents_add = list(/datum/reagent/toxin/coniine = 0.08, /datum/reagent/toxin/staminatoxin = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1)
rarity = 30
graft_gene = /datum/plant_gene/trait/tox_resistance
/obj/item/food/grown/berries/death
seed = /obj/item/seeds/berry/death
name = "bunch of death-berries"
desc = "Taste so good, you will die!"
icon_state = "deathberrypile"
bite_consumption_mod = 3
foodtypes = FRUIT | TOXIC
tastes = list("death-berry" = 1)
distill_reagent = null
wine_power = 50
/obj/item/food/grown/berries/death/juice_typepath()
return /datum/reagent/consumable/poisonberryjuice
// Glow Berries
/obj/item/seeds/berry/glow
name = "glow-berry seed pack"
desc = "These seeds grow into glow-berry bushes."
icon_state = "seed-glowberry"
species = "glowberry"
plantname = "Glow-Berry Bush"
product = /obj/item/food/grown/berries/glow
lifespan = 30
endurance = 25
mutatelist = null
genes = list(/datum/plant_gene/trait/glow/white, /datum/plant_gene/trait/repeated_harvest)
reagents_add = list(/datum/reagent/uranium = 0.25, /datum/reagent/iodine = 0.2, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1)
rarity = PLANT_MODERATELY_RARE
graft_gene = /datum/plant_gene/trait/glow/white
/obj/item/food/grown/berries/glow
seed = /obj/item/seeds/berry/glow
name = "bunch of glow-berries"
desc = "Nutritious!"
bite_consumption_mod = 3
icon_state = "glowberrypile"
foodtypes = FRUIT
tastes = list("glow-berry" = 1)
distill_reagent = null
wine_power = 60
// Grapes
/obj/item/seeds/grape
name = "grape seed pack"
desc = "These seeds grow into grape vines."
icon_state = "seed-grapes"
species = "grape"
plantname = "Grape Vine"
product = /obj/item/food/grown/grapes
lifespan = 50
endurance = 25
maturation = 3
production = 5
yield = 4
growthstages = 2
growing_icon = 'icons/obj/service/hydroponics/growing_fruits.dmi'
icon_grow = "grape-grow"
icon_dead = "grape-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
mutatelist = list(/obj/item/seeds/grape/green)
reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1, /datum/reagent/consumable/sugar = 0.1)
/obj/item/food/grown/grapes
seed = /obj/item/seeds/grape
name = "bunch of grapes"
desc = "Nutritious!"
icon_state = "grapes"
bite_consumption_mod = 2
foodtypes = FRUIT
tastes = list("grape" = 1)
distill_reagent = /datum/reagent/consumable/ethanol/wine
/obj/item/food/grown/grapes/juice_typepath()
return /datum/reagent/consumable/grapejuice
/obj/item/food/grown/grapes/make_dryable()
AddElement(/datum/element/dryable, /obj/item/food/no_raisin/healthy)
// Green Grapes
/obj/item/seeds/grape/green
name = "green grape seed pack"
desc = "These seeds grow into green-grape vines."
icon_state = "seed-greengrapes"
species = "greengrape"
plantname = "Green-Grape Vine"
product = /obj/item/food/grown/grapes/green
reagents_add = list( /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1, /datum/reagent/consumable/sugar = 0.1, /datum/reagent/medicine/c2/aiuri = 0.2)
mutatelist = null
/obj/item/food/grown/grapes/green
seed = /obj/item/seeds/grape/green
name = "bunch of green grapes"
icon_state = "greengrapes"
bite_consumption_mod = 3
tastes = list("green grape" = 1)
distill_reagent = /datum/reagent/consumable/ethanol/cognac
// Toechtauese Berries
/obj/item/seeds/toechtauese
name = "töchtaüse berry seed pack"
desc = "These seeds grow into töchtaüse bushes."
icon_state = "seed-toechtauese"
species = "toechtauese"
plantname = "Töchtaüse Bush"
product = /obj/item/food/grown/toechtauese
lifespan = 20
maturation = 5
production = 5
yield = 2
instability = 30
growing_icon = 'icons/obj/service/hydroponics/growing_fruits.dmi'
icon_grow = "toechtauese-grow"
icon_dead = "toechtauese-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
reagents_add = list(/datum/reagent/toxin/itching_powder = 0.04, /datum/reagent/consumable/nutriment = 0.1)
/obj/item/food/grown/toechtauese
seed = /obj/item/seeds/toechtauese
name = "töchtaüse berries"
desc = "A branch with töchtaüse berries on it. They're a favourite on the Mothic Fleet, but not in this form."
icon_state = "toechtauese_branch"
foodtypes = FRUIT
tastes = list("fiery itchy pain" = 1)
distill_reagent = /datum/reagent/toxin/itching_powder
/obj/item/food/grown/toechtauese/juice_typepath()
return /datum/reagent/consumable/toechtauese_juice
/obj/item/seeds/lanternfruit
name = "lanternfruit seed pack"
desc = "These seeds grow into lanternfruit pods."
icon_state = "seed-lanternfruit"
species = "lanternfruit"
plantname = "Lanternfruit Pod"
product = /obj/item/food/grown/lanternfruit
lifespan = 35
endurance = 35
maturation = 5
production = 5
growthstages = 3
instability = 15
growing_icon = 'icons/obj/service/hydroponics/growing_fruits.dmi'
icon_grow = "lanternfruit-grow"
icon_dead = "lanternfruit-dead"
icon_harvest = "lanternfruit-harvest"
genes = list(/datum/plant_gene/trait/glow/yellow)
mutatelist = null
reagents_add = list(/datum/reagent/consumable/nutriment = 0.07, /datum/reagent/sulfur = 0.07, /datum/reagent/consumable/sugar = 0.07, /datum/reagent/consumable/liquidelectricity = 0.07)
graft_gene = /datum/plant_gene/trait/glow/yellow
/obj/item/food/grown/lanternfruit
seed = /obj/item/seeds/lanternfruit
name = "lanternfruits"
desc = "A softly glowing fruit with a handle-shaped stem, an Ethereal favorite!"
icon_state = "lanternfruit"
foodtypes = FRUIT
tastes = list("tv static" = 1, "sour pear" = 1, "grapefruit" = 1)
distill_reagent = /datum/reagent/consumable/ethanol/wine_voltaic