# All About Puddles [Willhelm, Unapproved]

# Part 1: [Wet Floor Sparkles](https://github.com/space-wizards/space-station-14/pull/11941)
The wet floor sparkle effect is intended to give janitors feedback that they are finished mopping in an area, because:
- The puddle will evaporate on its own, and
- The puddle is too small for their mop to pick up.
This gives us two conditions for triggering the sparkle effect:
1. Puddle is below a certain threshold
2. Puddle is evaporating
(WFET = Wet Floor Effect Threshold)
|| Is Evaporating|Is Not Evaporating |
|----------|----|----|
|**Is Above WFET**|Original puddle sprite | Original puddle sprite|
|**Is Below WFET**| Wet Floor Sparkle Effect| Ideally a baked-on "stain" look.
Defining this `WetFloorEffectThreshold` and how it is handled can be tricky. For now I am settling for keeping it coincidentally the same as (or approximately equal to) the default `MopLowerLimit` of 5 units defined on `AbsorbentComponent` which mops use. However, I want to allow for the flexibility to define either threshold through (YAML) prototyping in the future. This might look like a sponge that can pick up the last 5u of puddle, or prank-enabling space lube which might turn into barely-visible sparkles even at a size of 20u.
# Part 2: Puddles that Stain
## Examples
Note: We would need reagent-based puddle properties (evaporation etc.) for this to be done robustly.
- Blood
- Slime
- Wine?
- Others?
## Intended (Future) Behaviour
- Large blood puddles should slip players, and remain wet for a very long time. Possibly all round if never mopped.
- Blood puddles too small to slip players should dry into a stain.
- Stains should have to be re-hydrated back into puddles for effective cleaning (e.g. use a wet mop or sponge)
- Puddles that stain should also leave footprints if mobs step through them while still wet
## Implementation
- Blood puddles could have a higher slipThreshold (eg 20 units), which means it would take a larger-than-average puddle to be able to slip someone.
- Blood puddles could evaporate at 1 unit per 60 to 30 seconds (e.g. a puddle starting at 50u would take 15-30 minutes to reduce by 30 and become non-slippery.)
- For our purposes, let's define "stain" as any puddle which:
- Cannot slip players
- Does not evaporate
- Remains visible
- Stains keep their PuddleComponent, EvaporationComponent, SlipperyComponent, and all other components -- but behaviour is controlled with toggles similar to the existing EvaporationToggle.
- Drying into stain could have its own system comparable to EvaporationSystem, or it could be built within EvaporationSystem. Ideally it should turn EvaporationToggle off when a puddle dries into a stain, and turn it back on when the stain gets rehydrated.
- Stains could have special VisualSystem behaviour within PuddleVisualSystem that makes them appear darker and "baked-on."
# Other
- Randomized slipping? Have some puddles always slip when run over, but for others it's a dice roll?