Files
2026-07-04 20:27:08 +02:00

161 lines
4.1 KiB
Markdown

# Hemp Effect System
## Goal
Each hemp variety applies:
1. a main gameplay profile,
2. a subtle visual profile during the normal trip,
3. a possible bad trip with stronger visual disturbance.
Normal trip must stay readable and non-invasive.
Bad trip is the only state allowed to become truly disturbing.
---
## Core rules
### Consumption flow
When the player consumes a hemp item:
1. Resolve the consumed variety from its `id`.
2. Apply all `main_effects` immediately.
3. Enable the `normal_visual_profile`.
4. Roll one bad trip chance using `bad_trip_chance`.
5. If the roll succeeds, schedule the bad trip after a random delay in `bad_trip_delay_sec`.
6. When the delay expires, apply `bad_trip_effects` and enable `bad_trip_visual_profile`.
7. When the main duration ends, clear normal visuals and gameplay effects.
8. When the bad trip duration ends, clear bad trip visuals and gameplay effects.
---
## Design constraints
### Normal trip
Normal trip should:
- remain comfortable for 2 to 3 minutes,
- never make HUD unreadable,
- never make combat or building frustrating,
- use only light visual treatment.
Allowed normal visual changes:
- subtle tint,
- mild saturation shift,
- mild contrast shift,
- very light vignette,
- very light ghosting.
Forbidden during normal trip:
- strong blur,
- strong wobble,
- aggressive FOV change,
- strong double vision,
- strong screen shake.
### Bad trip
Bad trip should:
- feel clearly worse,
- remain shorter than the main trip,
- include nausea and hunger,
- be visually more unstable.
Allowed bad trip visual changes:
- stronger tint,
- stronger vignette,
- stronger saturation shift,
- light image wobble,
- light afterimage,
- light brightness pulsing.
---
## Stacking rules
Current stacking model:
- Consuming the same variety refreshes that variety's duration.
- Consuming a different variety keeps the previous gameplay effects active and adds the new variety on top.
- Main gameplay effects from several varieties can coexist at the same time.
- A new manual consumption rerolls the bad trip entirely from the latest variety.
- Passive resin aura refresh keeps extending the same variety without rerolling the bad trip every tick.
- Only one normal hemp visual profile can be active at a time: the latest active variety drives visuals.
- Only one bad trip state can be active at a time, and a reroll replaces the previous pending or active bad trip.
---
## Effect conventions
### Main effect duration
Main trip duration should stay between 140 and 180 seconds.
### Bad trip duration
Bad trip duration should stay between 25 and 40 seconds.
### Bad trip base gameplay package
All bad trips contain at least:
- Nausea
- Hunger
Rare and very rare varieties may add:
- Weakness
- Slowness
- short Blindness
Use these sparingly.
---
## Data format
Each variety entry contains:
- `id`: stable machine id
- `name_fr`: display name
- `rarity`: common, uncommon, rare, very_rare
- `color_family`: readable color identity
- `main_duration_sec`: main trip duration
- `main_effects`: list of vanilla effects
- `normal_visual_profile`: subtle visual profile
- `bad_trip_chance`: float from 0.0 to 1.0
- `bad_trip_delay_sec`: min/max delay before bad trip starts
- `bad_trip_duration_sec`: bad trip duration
- `bad_trip_effects`: gameplay penalty package
- `bad_trip_visual_profile`: stronger visual profile
---
## Visual profile semantics
### Intensity scale
Use a 0.0 to 1.0 scale:
- 0.05 to 0.15 = subtle
- 0.20 to 0.35 = noticeable
- 0.40+ = invasive
Normal trip should usually stay in 0.08 to 0.14.
Bad trip may go to 0.25 to 0.50 depending on rarity.
### Suggested shader parameters
A visual profile can drive:
- `tint_strength`
- `saturation_delta`
- `contrast_delta`
- `vignette_strength`
- `ghosting_strength`
- `wobble_strength`
- `pulse_strength`
Not every profile needs every parameter.
---
## Implementation note
The system should be data-driven:
- all plant tuning lives in JSON,
- gameplay code reads the JSON,
- visuals are picked by profile name or inline values,
- item classes should not hardcode effect logic.
This allows easy balancing without rewriting gameplay code.