roadmap: generic vessels + runtime contents (Noita-flask model)
Hooch reframed per user directive: not a bespoke item but FP_Hooch the substance, in generic vessels whose contents are runtime state -- fill, ferment, pour, drink, mix. Staged: runtime substance -> drink-any-fluid -> contraband content tag -> pour+mix -> ferment-model overhaul (age+dilution+sealed/open+temperature+spoil, mirroring CompRottable). Any fluid drinkable with different consequences; blood is a substance; any drink can breed addiction at a per-fluid rarity, modified by mental health + circumstances.
This commit is contained in:
+34
-2
@@ -301,8 +301,30 @@ built on the existing `SubstanceDef` (data) + `CompVessel` (delivery) + `CompFer
|
||||
disease + humiliation in one throw. "Mix everything": the blend is a runtime list on the vessel,
|
||||
defaulting to the def's single substance when unmixed, so every existing vessel still works.
|
||||
|
||||
Staged so each ships green: **hooch → liquid-container fermentation → mixing.** The vessel data model
|
||||
is built mixture-capable and site-aware from the start so none of it is a later refactor.
|
||||
**Reframed 2026-07-15 (user directive): vessels are GENERIC, contents are RUNTIME.** Hooch is not a
|
||||
bespoke item — it 1:1 models piss *except it is flammable*. A vessel is a generic container; what is in
|
||||
it (piss, hooch, feces, a blend) is instance state that can be **filled, fermented, poured between
|
||||
vessels, drunk, and mixed**. So there is no `FP_Weapon_Hooch`; there is `FP_Hooch` (a substance with a
|
||||
`Flame` damageDef) and a `CompVessel` whose `substance` is now runtime. Any fluid is **drinkable with
|
||||
different consequences** — a substance carries a *drink outcome* (hooch → alcohol, piss → sickness,
|
||||
feces → disease) alongside its *throw* outcome. Staged, each green, piss harness guarding throughout:
|
||||
1. **Runtime substance on `CompVessel`** — instance field (default = def's substance), scribed;
|
||||
throw/splash/label read it. Vessels become substance-agnostic. (Def names kept to avoid a
|
||||
breaking rename; label shows contents at runtime — "jar of hooch".)
|
||||
2. **Drink any fluid, with different consequences** — `SubstanceDef.drinkOutcome`; vessels
|
||||
ingestible, applying the current substance's consequence (hooch → alcohol high, piss → sickness,
|
||||
feces → gut rot, **blood** → nutrition + a disturbing thought / possible disease). Every fluid is
|
||||
a valid drink, just a worse or better idea. **Blood is a substance too** — a liquid like any
|
||||
other, drinkable and throwable. And **any drink can breed addiction like a drug**: each
|
||||
`SubstanceDef` carries an addiction *rarity* (hooch common, most fluids extremely rare), and the
|
||||
per-drink roll is modified by mental health + circumstances (a despairing, mistreated pawn
|
||||
addicts to things a content one never would) — same nature×nurture spine as propensity.
|
||||
3. **Contraband content tag** — a concealed vessel carries a generic content tag (Contraband stays
|
||||
ignorant of `SubstanceDef`; the bridge interprets it), so "a hidden jar of hooch" redeems correctly.
|
||||
4. **Pour between vessels + mixing** — transfer contents (substance + age); a blend is a list; splash
|
||||
and drink apply every constituent's effect.
|
||||
5. **Fermentation-model overhaul** — age + top-up dilution + sealed/open + temperature (mirror
|
||||
`CompRottable`) + spoil threshold; applies to every vessel, piss included.
|
||||
|
||||
**Potency model (corrected 2026-07-15): age + storage, NOT container size.** A liquid's potency is a
|
||||
function of how long it has fermented and how it is stored (a *sealed* vessel ripens and holds; an
|
||||
@@ -314,6 +336,16 @@ prisoner fills once and hides *ages to full potency*. So "a jar of old piss and
|
||||
both make sense — it is the usage pattern, not the vessel, that decides. Implementation: track age as
|
||||
a volume-weighted average, diluted on each add; sealed/open scales the ripen rate.
|
||||
|
||||
**Temperature + spoilage (2026-07-15): mirror vanilla food rot.** Fermentation is temperature-driven,
|
||||
exactly like meat — warm speeds it, a freezer nearly halts it, and past a point it **spoils** (goes
|
||||
from potent to ruined/maximally foul). Rather than invent this, reuse the vanilla mechanic:
|
||||
`CompRottable` already tracks temperature-weighted rot progress for food. The ferment model should
|
||||
lean on that same curve (or `GenTemperature`-driven accumulation) so "spoils like meat" is literally
|
||||
the meat code path — a prisoner's stash left in a hot cell turns fast, one in a cold one keeps. This
|
||||
makes the whole substance model a **fermentation-model overhaul** of `CompFerment` (age + dilution +
|
||||
sealed/open + temperature + spoil threshold), sequenced AFTER the hooch item ships, since it applies
|
||||
to every vessel — piss included — not just hooch.
|
||||
|
||||
## Compatibility — the non-negotiable
|
||||
|
||||
The suite must load and run cleanly alongside the **all-time most-subscribed Workshop mods**, not
|
||||
|
||||
Reference in New Issue
Block a user