Files
Bubberstation/code/__DEFINES/botany.dm
Krysonism def17fd90a Rare Earths! Advanced soils for botany. (#92513)
## About The Pull Request

This PR adds 4 new types of soil and a holder item; the soil sack, to
contain and transport said soils.

<img width="496" height="378" alt="bild"
src="https://github.com/user-attachments/assets/57f42a9c-c731-4195-91df-b4456ec45e7b"
/>

Two of the new soils + the regular old soil are available in the premium
section of the nutrimax.

All 5 soil types are available from cargo. 

It also adds two new plant traits; soil lover and semiaquatic, that
allows coders to confer maluses to plants growing in trays or soil
respectively.

Potatoes, sweet potatoes, carrots, parsnips, cahn'roots, white and red
beets currently have soil lover, reducing their produced yield by 30%
and their potency randomly between 20-80% if grown hydroponically.

Rice has semiaquatic which increases the amount of weeds gained by 50%
if grown in soil rather than hydroponically.

## Advanced soil types

### Vermaculite
  #### Stats
    Max Nutrients: 20u
    Max Water: 150u 
  
  #### Special Effects
Multigraft: Up to 3 grafts can be cut from a plant planted in
vermaculite.
Graft Medium: Graft cuttiongs can be directly placed into vermaculite to
create a new plant vegetatively.

### Hydrogel Beads
  #### Stats
    Max Nutrients: 15u
    Max Water: 300u
  
  #### Special Effects
Hydroponic + Soil: Both water loving and soil loving plants can grow
without maluses.
    Super Water: Water consumption rate is decreased by 50%

### Korta Coir
  #### Stats
    Max Nutrients: 20u
    Max Water: 100u
  
  #### Special Effects
Fast Mushrooms: Mushrooms mature(and age) 40% faster if planted in this
soil.

### Worm Castings 
  #### Stats
    Max Nutrients = 35u
    Max Water = 200u
  
  #### Special Effects
Slow Release: If the nutrients run out, 1u nitrogen will be
automatically added to the nutient pool.
Worm Habitat: Composting veggies in this soil has a chance to produce an
extra slimy worm.

### Soil Sacks

Use them on the floor to place a soil at that location. 

You can reverse this process by right clicking a soil with a shovel.

The sacks are huge items that deals stamina damage, but have slowdown
when carried.

They can be wielded to remove slowdown, double the damage output and
gain 25% block chance.

They have unique normal and wielded inhands for each sack type.

#### Price List

**Soil**
  Nutrimax: 50 cr
  Cargo: 400 cr /  5 sacks

**Vermaculite**
  Nutrimax: 100 cr
  Cargo: 400 cr / 3 sacks

**Hydrogel**
  Nutrimax: 100 cr
  Cargo: 400 cr / 3 sacks

**Coir**
  Nutrimax: N/A
  Cargo: 600 cr / 3 sacks

**Worm Castings**
  Nutrimax: N/A
  Cargo: 800 cr / 3 sacks

#### Misc Soil Changes

Soil now have a new armour type and are generally much harder to destroy
by shooting or bashing them.

Fixed a bug where weeds would instantly reduce yield to 3 instead of
lowering it by 1-2 per cycle.

## Why It's Good For The Game

I have long been a fan of using soils in botany, they are the cheapest
and easiest way to make new trays and enable many interesting
strategies.

The default soil is fine for what is but it kinda sucks, not only having
low stats but also missing autogrow, a feature botanist have grown
completely addicted and dependent on.

When self sustaining trays were removed and autogrow added, it was
intended as a way to keep a couple of plants alive while you ran out to
do errands or grab a drink.

However, the feature has devolved into basically a shift start self
sustaining for all your trays and standard practice is using it on every
single tray that currently is not trying to mutate.

This has resulted in certain core botany mechanics like water and pests
being made totally irrelevant, shrinking design space a lot.

Rather than just reaching for the stick, I thought it would be fun to
instead offer them a carrot in the form of an expanded toolset of soils
with unique effects that cannot be replicated by trays.

These new soils offer niche benefits that enable advanced botany
gameplay and provides a framwork for deepening plant / tray interactions
in the furture.

## Changelog

🆑
add: Added 4 new types of soil
add: Added soils sacks to the nutrimax
add: Added soil sack crates to cargo.
balance: Soil now has higher armor values.
balance: Rice now gets more weeds if grown in soil.
balance: Carrots, potatoes, beets and their mutations now get reduced
yield and potency if grown hydroponically.
fix: Weed overgrowth no longer instantly sets yield to 3.
/🆑
2025-10-04 05:01:26 +02:00

129 lines
4.9 KiB
Plaintext

/// -- Botany plant stat defines. --
/// MAXES:
#define MAX_PLANT_YIELD 10
#define MAX_PLANT_LIFESPAN 100
#define MAX_PLANT_ENDURANCE 100
#define MAX_PLANT_PRODUCTION 10
#define MAX_PLANT_POTENCY 100
#define MAX_PLANT_INSTABILITY 100
#define MAX_PLANT_WEEDRATE 10
#define MAX_PLANT_WEEDCHANCE 67
/// MINS:
#define MIN_PLANT_ENDURANCE 10
/// Default reagent volume for grown plants
#define PLANT_REAGENT_VOLUME 100
/// -- Some botany trait value defines. --
/// Weed Hardy can only reduce plants to 3 yield.
#define WEED_HARDY_YIELD_MIN 3
/// Carnivory potency can only reduce potency to 30.
#define CARNIVORY_POTENCY_MIN 30
/// Fungle megabolism plants have a min yield of 1.
#define FUNGAL_METAB_YIELD_MIN 1
/// Semiaquatic plants gets 50% more weeds in soil.
#define SEMIAQUATIC_SOIL_WEED_MALUS 1.5
/// Soil loving plants get worse yield when grown in a medium that isn't soil.
#define SOIL_LOVER_HYDRO_YIELD_MALUS 0.7
/// Upper bound of produce size mod for soil lowers grown without soil.
#define SOIL_LOVER_HYDRO_POTENCY_MAX 0.8
/// Lower bound of produce size mod for soil lowers grown without soil
#define SOIL_LOVER_HYDRO_POTENCY_MIN 0.5
/// -- Hydroponics tray defines. --
/// Base amount of nutrients a tray can old.
#define STATIC_NUTRIENT_CAPACITY 10
/// Maximum amount of toxins a tray can reach.
#define MAX_TRAY_TOXINS 100
/// Maxumum pests a tray can reach.
#define MAX_TRAY_PESTS 10
/// Maximum weeds a tray can reach.
#define MAX_TRAY_WEEDS 10
/// Minumum plant health required for gene shears.
#define GENE_SHEAR_MIN_HEALTH 15
/// Minumum plant endurance required to lock a mutation with a somatoray.
#define FLORA_GUN_MIN_ENDURANCE 20
/// -- Flags for genes --
/// Plant genes that can be removed via gene shears.
#define PLANT_GENE_REMOVABLE (1<<0)
/// Plant genes that can be mutated randomly in strange seeds / due to high instability.
#define PLANT_GENE_MUTATABLE (1<<1)
/// Plant genes that can be graftable. Used in formatting text, as they need to be set to be graftable anyways.
#define PLANT_GENE_GRAFTABLE (1<<2)
/// -- Flags for seeds. --
/// Allows a plant to wild mutate (mutate on haravest) at a certain instability.
#define MUTATE_EARLY (1<<0)
/// -- Flags for traits. --
/// Caps the plant's yield at 5 instead of 10.
#define TRAIT_HALVES_YIELD (1<<0)
/// Doesn't get bonuses from tray yieldmod
#define TRAIT_NO_POLLINATION (1<<1)
/// Shows description on examine
#define TRAIT_SHOW_EXAMINE (1<<2)
/// -- Trait IDs. Plants that match IDs cannot be added to the same plant. --
/// Plants that glow.
#define GLOW_ID (1<<0)
/// Plant types.
#define PLANT_TYPE_ID (1<<1)
/// Plants that affect the reagent's temperature.
#define TEMP_CHANGE_ID (1<<2)
/// Plants that affect the reagent contents.
#define CONTENTS_CHANGE_ID (1<<3)
/// Plants that do something special when they impact.
#define THROW_IMPACT_ID (1<<4)
/// Plants that transfer reagents on impact.
#define REAGENT_TRANSFER_ID (1<<5)
/// Plants that have a unique effect on attack_self.
#define ATTACK_SELF_ID (1<<6)
#define GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR 10
#define GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM 0.2
#define GLOWSHROOM_BASE_INTEGRITY 60
// obj/machinery/hydroponics/var/plant_status defines
/// How long to wait between plant age ticks, by default. See [/obj/machinery/hydroponics/var/cycledelay]
#define HYDROTRAY_CYCLE_DELAY 20 SECONDS
#define HYDROTRAY_NO_PLANT "missing"
#define HYDROTRAY_PLANT_DEAD "dead"
#define HYDROTRAY_PLANT_GROWING "growing"
#define HYDROTRAY_PLANT_HARVESTABLE "harvestable"
/// A list of possible egg laying descriptions
#define EGG_LAYING_MESSAGES list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")
/// Used as a baseline plant rarity for more uncommon plants, usually requiring mutation
#define PLANT_MODERATELY_RARE 20
/// How much water drain is reduced for trays with the SUPERWATER modifier such as superabsorbent hydrogel beads.
#define SUPER_WATER_MODIFIER 0.5
// How much faster our mushrooms mature on a good mushroom growing soil such as korta coir.
#define FAST_MUSH_MODIFIER 1.4
// How many grafts we harvest from one plant if planted in a tray with the MULTI_GRAFT flag.
#define MULTI_GRAFT_MAX_COUNT 3
/// TRAY BITFLAGS
/// For watery trays, capable of growing aquatic plants.
#define HYDROPONIC (1 << 0)
/// For soil type trays that provide structure for soil loving plants.
#define SOIL (1 << 1)
/// Allows you to take up to 3 grafts from the same plant.
#define MULTIGRAFT (1 << 2)
/// Allows you to plant grafts into this tray to propagate them vegetativley.
#define GRAFT_MEDIUM (1 << 3)
/// Musrooms mature faster in this type of tray.
#define FAST_MUSHROOMS (1 << 4)
/// Extra slimy worms can be created by composting greens in this soil.
#define WORM_HABITAT (1 << 5)
/// Water drains at a slower rate from this soil.
#define SUPERWATER (1 << 6)
/// If this tray runs out of nutrients, add a little nitrogen from the breakdown of natural fertilizers or nitrogen fixating bacteria.
#define SLOW_RELEASE (1 << 7)